Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Też tak miałem na początku, ale nie do końca o to chodziło.
Te 320 dni trzeba rozbić najpierw na lata, reszta z dzielenia będzie miesiącami, ewentualnie policzyć ile zostanie jeszcze dni.

konto usunięte

Temat: POMOC z prostych zadaniach do 23.11.2012

Paweł Bielecki:
Dodałem angielskie stringi, żeby nie było np. 1 lat 2 miesięcy :-)
To teraz będzie "Wynik to 2 year 3 month 4 day". Dużo lepiej ;) Zdecyduj się na jeden język, a liczba mnoga w angielskim też jest.
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Krzysztof Kawa:
Paweł Bielecki:
Dodałem angielskie stringi, żeby nie było np. 1 lat 2 miesięcy :-)
To teraz będzie "Wynik to 2 year 3 month 4 day". Dużo lepiej ;) Zdecyduj się na jeden język, a liczba mnoga w angielskim też jest.

No jasne, ale trzeba byłoby już kombinować z if'ami itp.
Mam jeszcze 3 (trudniejsze) zadania, jak zdążę to poprawię powyższe.
Ale fakt, przydałoby się zmienić "Wynik to", dzięki za podpowiedź.

konto usunięte

Temat: POMOC z prostych zadaniach do 23.11.2012

Paweł Bielecki:
No jasne, ale trzeba byłoby już kombinować z if'ami itp.

heh, na forum programistów zabrzmiało to trochę jak:
- przydałaby się jakaś zawartość tej kanapce
- jasne, ale trzebaby kombinować z rozcinaniem chleba...

:) Powodzenia z zadaniami tak czy inaczej.

konto usunięte

Temat: POMOC z prostych zadaniach do 23.11.2012

Paweł Bielecki:
Też tak miałem na początku, ale nie do końca o to chodziło.
Te 320 dni trzeba rozbić najpierw na lata, reszta z dzielenia będzie miesiącami, ewentualnie policzyć ile zostanie jeszcze dni.

OK, to trochę zmienia sens zadania, to pewnie mogłoby być tak:
http://ideone.com/hf0yHl

Temat: POMOC z prostych zadaniach do 23.11.2012

Nurtuje mnie pytanie czy zgodnie ze standardem funkcja main() nie powinna wyglądać tak:


int main ()
{
//....

return 0;
}


Zamiast endl można użyć \n jest szybsze. Przykład:


cout << dni%30 << + " day \n ";
Małgorzata B. edytował(a) ten post dnia 19.11.12 o godzinie 21:42

konto usunięte

Temat: POMOC z prostych zadaniach do 23.11.2012

Małgorzata B.:
Nurtuje mnie pytanie czy zgodnie ze standardem funkcja main() nie powinna wyglądać tak
Tak i nie. Funkcja main zwraca kod błędu, więc int jest obowiązkowy. Kompilatory puszczają też void main() generując odpowiedni kod "w tle", ale jest to niestandardowe i nie powinno się stosować w praktyce.
Większość systemów traktuje 0 jako kod "ok", ale nie jest to reguła wszędzie. W standardzie jest makro EXIT_SUCCESS zdefiniowane na odpowiednią wartość w danym systemie. Najczęściej jednak zobaczysz w źródłach return 0. 1 oznacza jakiś błąd.
W ogólności mało kiedy ma to znaczenie bo rzadko sprawdza się co program zwrócił. Warto to jednak wiedzieć.
Małgorzata B.:
Zamiast endl można użyć \n jest szybsze.

Nie szybsze tylko krótsze w zapisie.
endl i '\n' nie są tym samym!
endl wywołuje też flush, czyli oprócz nowej linii dostajemy też opróżnienie bufora. To, że cout jest akurat u ciebie niebuforowany to nie znaczy, że jest tak wszędzie. Do tego strumienia można przypiąć cokolwiek, od sesji konsoli, przez plik logu do połączenia internetowego.
Różnica jest też kiedy zapisujemy znak końca linii do binarnego strumienia(np. pliku). Nie chcielibyśmy np. żeby nasz program na windowsie i macu zapisywał pliki wyjściowe w innym formacie (końce linii) prawda?Krzysztof Kawa edytował(a) ten post dnia 19.11.12 o godzinie 22:03
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Małgorzata B.:
Nurtuje mnie pytanie czy zgodnie ze standardem funkcja main() nie powinna wyglądać tak:


int main ()
{
//....

return 0;
}


Zamiast endl można użyć \n jest szybsze. Przykład:


cout << dni%30 << + " day \n ";[/quote]>


A czym się różni Twoje main od mojego?
Chodzi mi w praktyce?
I dlaczego używasz return 0; na końcu, czy to zamiast system ("pause");?
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Piotr L.:
Paweł Bielecki:
Też tak miałem na początku, ale nie do końca o to chodziło.
Te 320 dni trzeba rozbić najpierw na lata, reszta z dzielenia będzie miesiącami, ewentualnie policzyć ile zostanie jeszcze dni.

OK, to trochę zmienia sens zadania, to pewnie mogłoby być tak:
http://ideone.com/hf0yHl

Dzięki za podpowiedź. Trochę inny zapis, niż stosuje mój prof. Będę musiał trochę prześledzić go żeby załapać w praktyce jak go stosować.

Jeszcze raz dziękuję za pomoc, jutro zabieram się za pozostałe zadania - już bardziej skomplikowane, więc każda pomoc będzie mile widziana :-)
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Krzysztof Kawa:
Paweł Bielecki:
No jasne, ale trzeba byłoby już kombinować z if'ami itp.

heh, na forum programistów zabrzmiało to trochę jak:
- przydałaby się jakaś zawartość tej kanapce
- jasne, ale trzebaby kombinować z rozcinaniem chleba...

:) Powodzenia z zadaniami tak czy inaczej.


No może i tak, ale dla kogoś kto stawia pierwsze kroki z C++ lepiej mieć suchy chleb, którym można się najeść, niż próbować zrobić turbo sandwicha i nie zdążyć z czasem :-)
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

4. Proszę o opinie odnośnie poniższego, liczy prawidłowo ale czy jest to napisane optymalnie?
Dziękuję.

http://ideone.com/YmLzLZPaweł Bielecki edytował(a) ten post dnia 20.11.12 o godzinie 12:28

konto usunięte

Temat: POMOC z prostych zadaniach do 23.11.2012

Stosuj znaczniki "[ code ]" - opis masz przy edycji postu obok przycisku "Podgląd".
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Przy zadaniu 5 trochę się namęczyłem.
Liczy chyba poprawnie.

Jakby ktoś miał ochotę zerknąć :-)
Czekam na sugestie.

http://ideone.com/ie4U84
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Co należy zrobić, żeby zatrzymać program po jego wykonaniu?
Chodzi mi o plik exe.
Tomasz M.

Tomasz M. never go full
retard!

Temat: POMOC z prostych zadaniach do 23.11.2012

Paweł Bielecki:
Co należy zrobić, żeby zatrzymać program po jego wykonaniu?
Chodzi mi o plik exe.

Jeśli masz kompilator gcc to...

http://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc...

A jeśli Visual C++ to np.

http://msdn.microsoft.com/en-us/library/ms235639%28v=v...Tomasz M. edytował(a) ten post dnia 20.11.12 o godzinie 13:52
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

korzystam z Dev ++ ale instrukcje std::cin.get(); system("pause") i return 0; nie działają w pliku exe. Po wykonaniu obliczeń zamyka się, a chciałbym go zamykać po naciśnięciu czegoś.

Temat: POMOC z prostych zadaniach do 23.11.2012

Odnośnie wcześniejszych pytań.
Uczono mnie, że należy określać typ zwracany przez funkcję, chyba nawet nie próbowałam napisać funkcji main bez poprzedzenia go słowem int (w dev-C++ oczywiście kompilator nie zgłasza błędu ani ostrzeżenia). Jeśli chcemy by operacje były wykonane wewnątrz funkcji i nic ona nie zwraca używamy void.
A system ("pause") nie używałam (to nie to samo co return 0), bo kompilowałam kod GCC.

Nie tylko Ty masz taki problem z plikiem exe http://forums.techguy.org/software-development/684233-...
return 0 zapewne nic tutaj nie pomoże ...

Odnośnie zad. 4. to co w przypadku gdy kierowca jechał 59 km/h?Małgorzata B. edytował(a) ten post dnia 20.11.12 o godzinie 17:48

konto usunięte

Temat: POMOC z prostych zadaniach do 23.11.2012

Paweł Bielecki:
korzystam z Dev ++ ale instrukcje std::cin.get(); system("pause") i return 0; nie działają w pliku exe.

Działają, tylko robią coś innego niż akurat ty oczekujesz ;) Przemyśl najpierw co chciałbyś osiągnąć - chcesz zatrzymać wykonanie programu jednoczesnie go nie kończąc - tak się nie da (upraszczam, żeby nie wdawać się w zaawansowane tematy). Co możesz zrobić to zlecić programowi jakąś operację wymagającą oczekiwania na wejście od użytkownika.

return powoduje wyjście z aktualnej funkcji. W tym wypadku jest to funkcja main, więc kończy to program. Jak napisała Małgorzata - zamiast main(){} powinieneś mieć int main(){return 0;} ale nie ma to nic wspólnego z Twoim problemem, robi wręcz coś odwrotnego - kończy wykonanie programu.

std::cin.get() - ta funkcja pobiera ze strumienia cin jeden znak. Jeśli w strumieniu coś jest to znak zostanie pobrany "od razu" i program ruszy dalej. Jeśli strumień jest pusty, to ta funkcja będzie oczekiwała na wypełnienie go jakimiś danymi - input z klawiatury. W twoim przypadku jest tam chocby "enter" z poprzedniego wstukania liczb, więc ten "enter" zostanie pobrany i program ruszy sobie dalej i w twoim przypadku zakończy się

system("pause") - funkcja system() wykonuje polecenie systemowe, czyli to tak jakbyś sobie wpisał w konsoli "pause". To jest bardzo zły sposób na zatrzymywanie programu bo nie w każdym kontekście uruchomienia(inny system, inna konsola, inne zmienne środowiskowe itp.) programu jest coś takiego jak "pause". W skrócie - nie rób tak.

Pomyśl natomiast co chcesz osiągnąć - chcesz mieć czas by zobaczyć co twój program wypisał na standardowy strumień wyjścia cout.
Pomyśl teraz jak to osiągnąć - możesz kazać programowi robić coś bezsensownego w kółko np. while(true); i przerwać mu to kiedy już się napatrzysz. Możesz zatrzymać go w oczekiwaniu na wejście z klawiatury.
Możesz też nie kombinować i pozwolić mu się spokojnie zakończyć a wyniki zobaczyć sobie potem.

Ostatnie możesz osiągnąć np. otwierając sobie konsolę i wywołując swój program z tego miejsca. Program się szczęśliwie skończy a sesja konsoli pozostanie otwarta. Możesz sobie to nawet przekierowac do pliku: mojprogram.exe > mojlog.txt.

Jesli koniecznie chcesz, żeby jednak twój program dalej sobie chodził kiedy patrzysz na jego wyniki to możesz mu np. kazać czekac na wprowadzenie liczby albo literki 'q'. Z enterem jest ten problem, że po poprzednich użyciach cin prawdopodobnie już go tam masz, więc to nie zatrzyma programu. Możesz wcześniej np. wyczyściś ten strumień, zeby cokolwiek tam jest nie zawadzało ci (std::cin.ignore(...)).

Najprościej jest jednak po prostu pozwolić programowi się skończyć, tylko uruchamiać go w sposób, który pozwoli ci zobaczyć jego wyniki (j.w.).
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Małgorzata B.:
Odnośnie zad. 4. to co w przypadku gdy kierowca jechał 59 km/h?

Ilość zdobytych punktów = 0
Program działa poprawnie, ale muszę przyznać że nie pomyślałem o tym, pisząc kod :-)
Paweł B.

Paweł B. Kierownik Działu
Administracji, ITI
Neovision

Temat: POMOC z prostych zadaniach do 23.11.2012

Krzysztof Kawa:
Paweł Bielecki:
korzystam z Dev ++ ale instrukcje std::cin.get(); system("pause") i return 0; nie działają w pliku exe.
Przemyśl najpierw co chciałbyś osiągnąć

Tak jak napisałem wcześniej, plik exe nie pozwala obejrzeć wyniku, bo się od razu zamyka.
Chciałbym móc sam go zamknąć (jak w kompilatorze) dowolnym przyciskiem.

Następna dyskusja:

Pomoc przy C




Wyślij zaproszenie do