Witam. Uczę się w 3 klasie technikum. Programować uczę się sam w domu. Ogólnie sobie radze w pisaniu programów. Ba, nawet dobrze się przy tym bawię. Jednak powoli przychodzi czas na olimpiadę C++ i tu mam do Was pytanie. Jakie artykuły czytać, aby rozwinąć "umiejętność myślenia". Chodzi mi o jakieś ciekawostki programistyczne, niecodzienne rozwiązania. Jeżeli macie jakieś ciekawe zadania z programowania bardzo proszę o wysłanie ich w załączniku. Każda pomoc jest cenna bo nie wiem jak się do tej olimpiady przygotować ;P
niecodzienne rozwiązania
Poprzeglądaj parę razy dziennie dział Newbie
, a masz to gwarantowane ;)
Jeżeli macie jakieś ciekawe zadania z programowania (...) nie wiem jak się do tej olimpiady przygotować
SPOJ
oraz pochodne.
Tak jak wyżej - SPOJ, dodatkowo polecam jeszcze http://projecteuler.net/
Ja jeszcze to musiałem przerobić.
Własnie wróciłem z olimpiady (ok. 15 miejsce 2/6 zadań). mam do Was pytanie. Dlaczego "#include conio.h" jest niedozwolone na olimpiadach? przecież to jest standardowa biblioteka wejścia / wyjścia w C++. A gościu który pilnował Nas na sali mi odpowiedział, że to kolejne borlandowskie g**no -.- gdyby nie to zrobiłbym 4/6.
I jeszcze jedno. Jak załatwić problem, jeżeli pisze, że dane wejściowe kończy nowy wiersz? "cin >>" nie załatwi problemy, bo muszą być wprowadzone jakieś dane. I na tym też poległem (wiem, wstyd).
przecież to jest standardowa biblioteka wejścia / wyjścia w C++
Jest zupełnie na odwrót!
conio.h
to jedynie borlandowski dodatek, nie wchodzi w skład języka C++, tak więc kompilator nawet nie ma obowiązku jej obsługiwać.
... poza tym jest Windows-only.
Btw, niby czego z tej biblioteki chciałeś użyć na olimpiadzie? :|
Chciałem zrobić coś na zasadzie:
while(getch() != '\n')
{
}
Ale teraz widzę błąd mego myślenia. A czego w takim razie użyć do rozpoznania "pustej linii" ? Bo takie coś nie przejdzie
cin >> zmienna (Jak klikam enter na pusto po prostu przechodzi kursorem niżej)
A czego w takim razie użyć do rozpoznania "pustej linii" ?
Mógłbyś pokazać przykładową treść takiego zadania, w którym jest to wymagane?
Nie widzę sensu ręcznego rozpoznawania w programie pustych linii.
#Edit
- zawsze możesz też użyć getline
(http://ideone.com/jeOXPk)
Są podawane jakieś dane na wejście i podawanie wejścia kończy pusta linia (kompletnie nie wiem o co w tym chodzi). Opadły mi ręce, a resztę programu wiedziałem jak zrobić :(
Treść zadania pomijam - jest nieistotna.
Wejście:
W każdej linii znajduje się liczba kilometrów do przejechania oraz liczba litrów paliwa jaka znajduje się w baku (liczby naturalne mniejsze od 2^16 rozdzielone spacją). Dane kończą się pusta linią.
Wyjście:
Dla każdej linii wejściowej należy w linii wyjściowej podać najkrótszy czas (w minutach), po jakim podróżujący dotrze do celu.
Przykładowe dane:
Wejście:
900 80
900 81
1200 180
2100 261
1200 200
Wyjscie:
0
600
600
1200
600
while(cin>>km>>litry) // i nic więcej cie nie powinno interesować.
Problem w tym, że nie wiem ile tych danych mam i program w nieskończoność ma się pytać o te litry i kilometry? Rozumiem, że podawanie wejścia kończy liczba -1 lub coś w tym stylu. Ale "pusta linia"?
Sprawdziłem to while(cin >> x >> y), lecz po kliknięciu entera, czyli przejścia do nowej linii nie wpisując danych, kursor przemieszcza się w dół a program się nie kończy. W załączniku rezultat.
EDIT:
Tak w ogóle, to powiedzcie mi wpierw czy ja dobrze rozumiem pojęcie nowa linia.
1 [SPACJA] 12 [ENTER] // dane są wpisane
12 [SPACJA] 123 [ENTER] // dane są wpisane
321 [SPACJA] 56 [ENTER] //dane są wpisane
4 [SPACJA] 94 [ENTER] // dane są wpisane
[ENTER] //teraz nic nie wpisaliśmy a kliknęliśmy ENTER , program ma się zamknąć.
Em, zgaduję, iż dlatego, że programy konsolowe należy uruchamiać z konsoli?
Coś w rodzaju program.exe < plik_z_danymi.txt
z CMD, skryptu BAT lub czegokolwiek.
Btw, o ile się nie mylę, to można po prostu również wysłać EOF do konsoli, lecz nie jestem sobie w stanie przypomnieć skrótu klawiszowego do tego - poszukaj na MSDN or something.
Jeżeli koniecznie potrzebujesz pusty wiersz wyłapać to:
string line;
while((getline(cin,line))&&(line.length()))
{
istringstream ss(line);
ss>>x>>y;
}