ďťż

Ładny brzuch

Nareszcie ferie, wiec jest troche czasu na porobienie zadan informatycznych :D Nareszcie sie na scanfa/printfa przerzucilem i jestem z tego zadowolony. Probuje przy uzyciu scanfow zrobic to zadanie:
https://pl.spoj.pl/problems/KC005/

Oto moj kod (to jest samo wczytywanie i podgladanie tego co sie wczytalo)
#include<cstdio> #include<iostream> using namespace std; main() { char imie[10],nazwisko[20], mies[2], dzien[2], rok[4]; int roki; scanf("Imie: "); cin.getline(imie, 10, ';'); scanf(" Nazwisko: "); cin.getline(nazwisko, 20, ';'); scanf(" Data ur.: "); cin.getline(rok, 4, '-'); scanf("-"); cin.getline(mies, 2, '-'); scanf("-"); cin.getline(dzien, 2, '\n'); printf("%s %s %s %s %s", imie, nazwisko, rok, mies, dzien); system("pause"); }
Niby powinno elegancko wczytac i wyswietlic co trzeba, ale sprobojcie sobie cos wpisac chociazby z przykladow z zadania... Wynik jest mowiac delikatnie daleki od ideału... Dlaczego? Przeciez raczej wszystko dobrze robie...



wszedzie dodaj 1

zarowno w deklaracjach tablic jak i w cin.getline

zapomnialo sie o znaku zero ;)
Użytkownik fernandez edytował ten post 28 styczeń 2008, 14:38
a ja tak z innej beczki. dlaczego jesteś dumny, ze się przerzuciłeś na printf/scanf? / bo ja na przykład jestem dumny z tego, że nie musze z nich korzystać :)


a ja tak z innej beczki. dlaczego jesteś dumny, ze się przerzuciłeś na printf/scanf? / bo ja na przykład jestem dumny z tego, że nie musze z nich korzystać :)
Nie dumny tylko zadowolony a to jest drobna roznica :D A jestem zadowolony poniewaz jak przegladalem rozw roznych ludzi z OI to tylko ze scanf/printf korzystaja... wiec jakbym jakims cudem (w co watpie) za rok przeszedl w OI i mial zadania robione cin/coutem to moglbym na jakiegos dziwaka wyjsc :P Poza tym scanfy/printfy daja lepsze mozliwosci manipulacji danymi. Ale niestety nie sa bez wad... przy ich pomocy nie da sie korzystac ze stringow, przez co jestem wtedy zmuszony dzialac na cin/cout.



taa, oni korzystają ze scanfów/printfów, bo im zależy na szybkości działania, a cout działa wolniej. oczywiście ten zaoszczędzony czas ma jakieś znaczenie tylko na OI. w życiu codziennym - printf jest przestarzały i niemilewidziany.

co do OI to słyszałem, że cout i tak jakoś tam jest zamieniane na printf'a więc szybkość jest ta sama. zresztą sedno tkwi w algorytmie, a nie sposobie wypisywania cyferek na wyjście :)


Ale niestety nie sa bez wad... przy ich pomocy nie da sie korzystac ze stringow, przez co jestem wtedy zmuszony dzialac na cin/cout.
jak to sie nie da? :>


jak to sie nie da? :>

Najprostszy dowod:
#include<cstdio> #include<string> using namespace std; main() { string a; scanf("%s", &a); printf("%s", a); system("pause"); }
Kompiluje sie, ale gdy cos wpisze to na chwile sie progs zmula a potem blad typu "wyslij do MS lub nie".

co do printfa, to: printf("%s", a.c_str);
a ze scanfem to nie wiem co zrobić. powtarzam: printf/scanf są przestarzałe i należą do C, a nie C++. nieelegancko jest mieszać style i używać klasy string i funkcji printf/scanf


co do OI to słyszałem, że cout i tak jakoś tam jest zamieniane na printf'a więc szybkość jest ta sama. zresztą sedno tkwi w algorytmie, a nie sposobie wypisywania cyferek na wyjście :)
Jeżeli masz rozwiązania o wzorcowej złożoności do zadania na OI - możesz sobie rzeczywiście darować cstdio, bo tam limity są liberalne. Ale inaczej sprawa wygląda jeżeli chcsz wyciągnąć maksimum z bruta (tutaj kiedyś na własnej skórze przekonałem się, że nawet pozbycie się STLowych struktur może sypnąć punktami), albo bierzesz udział w innym tego rodzaju konkursie (widziałem przypadki, że rozwiązania z wzorcową złożonością nie dostawały maksa ze względu na strumienie).


powtarzam: printf/scanf są przestarzałe i należą do C, a nie C++. nieelegancko jest mieszać style i używać klasy string i funkcji printf/scanf
Owszem, nieelegancko - ale ludziom na OI nie zależy na elegancji, tylko na wydajności i szybkiej implementacji (5h na II etapie to mało :s).

no tak, ale w takim razie ze stringa też należy zrezygnować - i w ogóle ze wszystkich rozwiązań C++ i przesiąść się na C

Jak już zeszlismy na tematy szybkosci...
1. To czy cin/out po zastosowaniu ios_base costam jest tam samo szybkie jak scanfy/printfy?
2. Co jest szybsze? STLowe struktury (vectory, listy, stosy) czy ich własna implementacja na zwykłych tablicach?
3. Czy string jest szybszy od char* ?
4. Czy globalnosc zmiennych wplywa na szybkosc?
5. Czy jest jakas roznica szybkosci miedzy kodem napisanym w mainie a przypadkiem, gdyby ten kod byl w innej funkcji, a w mainie by tylko byl wywolywany?


Najprostszy dowod:
...

to ze nie umiesz czegos zrobic, nie jest dowodem ze nie da sie tego zrobic :)

eugeniusz - konkursy algorytmiczne to nie sa konkursy pieknego pisania, tylko wyscig szczurow - dobiera sie takie rozwiazania, zeby jak najszybciej osiagnac cel, nie wazne czy to c, czy c++, i jak ladne jest. w takich konkursach stosuje sie rozwiazania wrecz przeciwne do tych eleganckich i stosowanych przy normalnym pisaniu aplikacji ;)


2. Co jest szybsze? STLowe struktury (vectory, listy, stosy) czy ich własna implementacja na zwykłych tablicach? zaleznie od zastosowan, wykonywanych operacji i implementacji. ale zazwyczaj wlasna implementacja specjalnie przystosowana do danego algorytmu jest szybsza. STL jest bardzo szybki jak na ogolne struktury i algorytmy.

3. Czy string jest szybszy od char* ?
char* zazwyczaj jest szybszy.

4. Czy globalnosc zmiennych wplywa na szybkosc?
jesli w ogole jest to zauwazalna roznica, to globalne sa szybsze.
Użytkownik Deadeye edytował ten post 04 luty 2008, 14:42
no ja rozumiem ideę konkursów algorytmicznych. ale programowania się chyba nie uczymy po to, żeby wygrywać konkursy :)


no ja rozumiem ideę konkursów algorytmicznych. ale programowania się chyba nie uczymy po to, żeby wygrywać konkursy :)
No ja narazie (przede wszystkim) to poto sie ucze :P Bo przez konkursy to jedyny sposob by sobie wejscie na AGH itp zapewnic i oszczedzic kupe stresu zwiazanego z matura... Majac indeks to na mature mozna lac bo i tak ma sie miejsce tam gdzie sie ma indeks :P

hehe. jeśli masz aspiracje wygrać olimpiadę, to matura powinna być dla ciebie jak pryszcz :)


hehe. jeśli masz aspiracje wygrać olimpiadę, to matura powinna być dla ciebie jak pryszcz :)
Wystarczy mi finalista (lub cokolwiek co daje indeks AGH)... Ale i tak mam małe szanse... Za bardzo sie rozmarzyłem :P A odnosnie matury: może z infy tak może byc, ale sa jeszcze pozostale przedmioty ktore jakos (nawet duzo lepiej niz jakos) trza zdac by sie liczyc w rekrutacji... A majac indeks wystarczy zdac na 30% (lub moze wogole nie zdac nawet? :D )

hehe, infy nie bierz pod uwagę. jeśli się boisz matematyki, to zapomnij o agh. na studiach to dopiero się zaczyna matematyka, zobaczysz, że to co było w liceum, to przedszkole ;)


hehe, infy nie bierz pod uwagę. jeśli się boisz matematyki, to zapomnij o agh. na studiach to dopiero się zaczyna matematyka, zobaczysz, że to co było w liceum, to przedszkole ;)

No to mnie bardzo pocieszyles :( :D U nas majca (jak dla mnie i wiekszej czesci z klasy) jest dosyc ciezka... (co prawda teraz mi jakos dziwnie dobrze idzie bo mamy funkcje, ale to pewnie sie niedlugo zmieni :P )

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •