Pocz

Potrzebujesz pomocy z C, C++, perl, python, itp.
chyl-o
Junior Member
Posty: 621
Rejestracja: 24 maja 2006, 21:06
Lokalizacja: Lublin

Post autor: chyl-o »

legion pisze:Bo usuniesz mojego posta bez żadnego wytłumaczenia ani nawet przedstawienia się? Takie faszystowskie metody już któryś z was stosował niedawno...
Nie usunę Twojego posta, do póki Ty zachowasz jakieś granice, pamiętaj że mogę go jeszcze wyedytować! Na forum nie ma bezpodstawnego usuwania postów, jeśli był tak chamski, lub bezsensowny że nie dało się go czytac to ktoś go usunął, a kto ? Skończona liczba osób ma takie możliwości więc już na własną rękę się dopytuj, ale nie licz na to że ktoś Ci odpowie jak bedziesz to robił jak wcześniej.

A teraz koniec offtopa.
legion pisze:using namespace ... włacza całą przestrzeń. o ile używasz większości klas/funkcji z danej przestreni jest OK. jednak wiem że nie używasz nawet 5% a o kolizje łatwo...
Wiem że włącza całą przestrzeń nazw, ale nie jest tak rozbudowany, żeby zabrakło nazw do funkcji.

Poza tym, ta dyskusja nie ma sensu na ten temat, bo jak nie chcesz używać namespace'a to nie używaj, ale nie mów że to jest błąd. Poza tym z tego co pamietam dany namespace działa tylko w danej jednostce kompilacji.
legion
Posty: 23
Rejestracja: 18 lutego 2007, 01:40

Post autor: legion »

chyl-o pisze:
legion pisze:Bo usuniesz mojego posta bez żadnego wytłumaczenia ani nawet przedstawienia się? Takie faszystowskie metody już któryś z was stosował niedawno...
Nie usunę Twojego posta, do póki Ty zachowasz jakieś granice, pamiętaj że mogę go jeszcze wyedytować! Na forum nie ma bezpodstawnego usuwania postów, jeśli był tak chamski, lub bezsensowny że nie dało się go czytac to ktoś go usunął, a kto ? Skończona liczba osób ma takie możliwości więc już na własną rękę się dopytuj, ale nie licz na to że ktoś Ci odpowie jak bedziesz to robił jak wcześniej.

A teraz koniec offtopa.
Jak dla mnie to początek.
Rozumiem że moderatorzy są nietykalni. Dlatego też zwijam się z tego forum a szanowne elity mogą kontynuować łechtanie swojej próżności poprzez zabawę w kapo.
chyl-o pisze:
legion pisze:using namespace... włącza całą przestrzeń. o ile używasz większości klas/funkcji z danej przestrzeni jest poprawne. jednak wiem że nie używasz nawet 5% a o kolizje łatwo...
Wiem że włącza całą przestrzeń nazw, ale nie jest tak rozbudowany, żeby zabrakło nazw do funkcji.

Poza tym, ta dyskusja nie ma sensu na ten temat, bo jak nie chcesz używać namespace to nie używaj, ale nie mów że to jest błąd. Poza tym z tego co pamiętam dany namespace działa tylko w danej jednostce kompilacji.
W danym zasięgu dokładniej mówiąc.
Poza tym raz kolejny polecam jakąś książkę o C++ i o programowaniu w ogólności.
chyl-o
Junior Member
Posty: 621
Rejestracja: 24 maja 2006, 21:06
Lokalizacja: Lublin

Post autor: chyl-o »

legion pisze:W danym zasięgu dokładniej mówiąc.
W tych przykładach podanych powyżej, w jednostce kompilacji.
legion pisze:Poza tym raz kolejny polecam jakąś ksiązkę o C++ i o programowaniu w ogólności.
Dzięki guru ]A teraz koniec offtopa.

Jak dla mnie to początek. [/quote]
Dlatego też zwijam się z tego forum
?
legion pisze:szanowne elity mogą kontynuować łechtanie swojej próżności poprzez zabawę w kapo.
Trochę przesadziłeś, obrażając nie tylko ludzi, którzy dbają o forum, ale także wszystkich którzy poświęcają swój czas na pomoc, bo elitę stanowią wszyscy chętni do pomocy, a pytający to pretendenci do tego miana, natomiast ludzie, którzy szukają w całym dziury( de facto znajdą ją ) i wykrzykują swoją wyższość nad innymi, jednocześnie obrażając ich wykazują zero pokory, jak dla mnie jakiś poziom trzeba prezentować, a porównywanie ludzi do kapo i określanie ich mianem próżnych, nie znając ich dokładnie, nie za dobrze świadczy o Tobie!
karolp
Posty: 63
Rejestracja: 27 stycznia 2007, 11:43

Post autor: karolp »

hmm, zastanawiam się (żeby nie było, że coś krytykuję sic!) dlaczego początkujących uczy się iostream a nie cstdio?

nie wiem jak dla was, ale dla mnie łatwiej jest napisać coś takiego:

Kod: Zaznacz cały

printf("NWD(%d,%d)=%d\n",a,b,c);
niż coś takiego:

Kod: Zaznacz cały

cout<<"NWD("<<a<<","<<b<<")="<<c<<endl;
poza tym, wszyscy nieco bardziej obeznani wiedzą o ile szybszy (ba! ile razy szybszy) jest cstdio od iostream jeśli chodzi o operacje IO, nawet wyłączenie synchronizacji nie zmienia postaci rzeczy (acz przyspiesza znacznie działanie iostream).

Trochę szkoda (wg mnie), że obecnie trochę się porzuca cstdio i od samego początku uczy się (w większości internetowych kursach i książkach) iostream'a.

Być może pominąłem jakieś zalety iostream/wady cstdio, jeżeli tak prosiłbym o podanie, bo temat wydaje mi się ciekawy do dyskusji.
ponton
Beginner
Posty: 406
Rejestracja: 24 stycznia 2007, 01:40
Lokalizacja: Kalisz/Wroc³aw

Post autor: ponton »

Ja słyszałem odwrotnie, że strumienie są szybsze. Bo od razu kompilator wie, jakiego typu jest parametr, nie musi parsować "abc %s %.4f", itd. Po prostu kompilator Ci nie przepuści błędnego kodu, a w cstdio możliwe są takie rzeczy:

Kod: Zaznacz cały

int i = 1;
printf("%s", i);
scanf("%s", &i);
Kiedyś nam wykładowca opowiadał, że programiści MS mają ścisły zakaz używania stdio. (właśnie ze względu na podatność na błędy, brak sprawdzania parametrów itepe).

Oprócz tego strumienie można dziedziczyć, ulepszać, przeciążać operator<< i >> dla swoich klas, itd.
heireann
Posty: 11
Rejestracja: 09 czerwca 2007, 16:06
Lokalizacja: Po³upin / Wroc³aw

Post autor: heireann »

karolp pisze: poza tym, wszyscy nieco bardziej obeznani wiedzą o ile szybszy (ba! ile razy szybszy) jest cstdio od iostream jeśli chodzi o operacje IO, nawet wyłączenie synchronizacji nie zmienia postaci rzeczy (acz przyspiesza znacznie działanie iostream).
Przekonałam się o tym ostatnio na własnej skórze. Chciałam wykorzystać strumienie akurat do zapisu pewnych informacji do plików, z ciekawości, ponieważ wcześniej tego nie robiłam. Ku mojemu zaskoczeniu implementacja identycznego programu z zapisem do pliku standardowym fprintf'em działała kilkadziesiąt razy szybciej...
karolp
Posty: 63
Rejestracja: 27 stycznia 2007, 11:43

Post autor: karolp »

na OI i PA większość ludzi przestrzega przed stosowaniem strumieni, jeżeli już to z wyłączoną synchronizacją (są wtedy dużo szybsze, ale dalej wolniejsze od cstdio)

Polecam test
napisz sobie program wypisujący liczby od 1 do np. 10 miliardów. Spróbuj zapuścić do pliku program korzystający z cstdio i iostream. Ostatnio robiłem podobny test - nie wiem dokładnie ile wypisywałem ale wynik był cstdio 20 sekund, iostream 5 minut, iostream z optymalizacją działał 40 sekund.
heireann
Posty: 11
Rejestracja: 09 czerwca 2007, 16:06
Lokalizacja: Po³upin / Wroc³aw

Post autor: heireann »

O synchronizacji w ogóle nie myślałam. Program miał na celu zapisać do pliku wynik operacji na tablicy haszującej, tylko, że operacji do przeprowadzenia było danych 1 000 000. Z wykorzystaniem cstdio czas działania był rzędu kilkunastu sekund, natomiast iostream rzędu kilku minut... Użyłam cstdio, bo czasy wydały mi się grubo przesadzone, nawet jak dla miliona operacji na tablicy haszującej. W końcu to struktura danych o dość szybkim dostępie...
legionn
Posty: 9
Rejestracja: 20 czerwca 2007, 10:27

Post autor: legionn »

ponton pisze:Ja słyszałem odwrotnie, że strumienie są szybsze. Bo od razu kompilator wie, jakiego typu jest parametr, nie musi parsować "abc %s %.4f", itd. Po prostu kompilator Ci nie przepuści błędnego kodu, a w cstdio możliwe są takie rzeczy:

Kod: Zaznacz cały

int i = 1]

Kiedyś nam wykładowca opowiadał, że programiści MS mają ścisły zakaz używania stdio. (właśnie ze względu na podatność na błędy, brak sprawdzania parametrów itepe).

Oprócz tego strumienie można dziedziczyć, ulepszać, przeciążać operator<< i >> dla swoich klas, itd.[/quote]
programiści MS powinni mieć zakaz wychodzenia z domu.
w <cstdio> mozliwa jest dowolna bzdura, nie ma prawie zadnej kontroli bledow ale jest ogolnie szybsze (choć wszystko zalezy od sytuacji).
a strumienie dają wszystko co może dać obiektowe podejście - włącznie z kontrolą błedów. 

[size=84][ [i][b]Dodano[/b]: 2007-06-20, 10:33[/i] ][/size]
[quote="heireann"]O synchronizacji w ogóle nie myślałam. Program miał na celu zapisać do pliku wynik operacji na tablicy haszującej, tylko, że operacji do przeprowadzenia było danych 1 000 000. Z wykorzystaniem [b]cstdio[/b] czas działania był rzędu kilkunastu sekund, natomiast [b]iostream[/b] rzędu kilku minut... Użyłam [b]cstdio,[/b] bo czasy wydały mi się grubo przesadzone, nawet jak dla miliona operacji na tablicy haszującej. W końcu to struktura danych o dość szybkim dostępie...[/quote]
czynnikiem dławiącym nie jest hashmap ani nawet map. jest nim pisanie na terminal (czy do pliku) bo to jest najbardziej kosztowne. zwłaszcza przy buforowanych strumieniach z kontrolą błędów.

jeśli masz do zapisania sporo danych i jest to time-critical to użyj <cstdio>. 

[size=84][ [i][b]Dodano[/b]: 2007-06-20, 10:36[/i] ][/size]
[quote="karolp"]na OI i PA większość ludzi przestrzega przed stosowaniem strumieni, jeżeli już to z wyłączoną synchronizacją (są wtedy dużo szybsze, ale dalej wolniejsze od cstdio)

Polecam test
napisz sobie program wypisujący liczby od 1 do np. 10 miliardów. Spróbuj zapuścić do pliku program korzystający z cstdio i iostream. Ostatnio robiłem podobny test - nie wiem dokładnie ile wypisywałem ale wynik był cstdio 20 sekund, iostream 5 minut, iostream z optymalizacją działał 40 sekund.[/quote]
Polecam test.
Spróbuj wczytać jakis bardziej zagmatwany (pod względem budowy) z poziomu <cstdio>. Wykryj błędy. Obsłuż inne sytuacje awaryjne.

Ile razy potrzebowałeś tworzyć wielkie pliki i je obrabiać?

PS. Co to za skróty: OI i PA?
karolp
Posty: 63
Rejestracja: 27 stycznia 2007, 11:43

Post autor: karolp »

OI - Olimpiada Informatyczna
PA - Potyczki Algorytmiczne (dawniej Pogromcy Algorytmów)
są to dwa najpopularniejsze polskie konkursy programistyczne.

uważam, że jeżeli jesteś inteligentnym programistą to takie błędy powinieneś wykryć w niedługim czasie. Szczególnie, że do dyspozycji jest full debugerów.
ODPOWIEDZ