
remekra [ Horonrzy ]
Pomoc w prostym programie w Pascalu.
A więc miałem zrobić program, który po podaniu cyfry będzie tłumaczył ją na zapis słowny, to zrobiłem. Ale jeśli zostanie podane 0 to program ma się wyłączać i tu mam problem, bo nie wiem jak to zrobić program wygląda tak:
Z góry dzięki za pomoc:).
Narmo [ nikt ]
A nie lepiej skorzystać z funkcji Case?
hctkko. [ The Prodigy ]
Narmo >>ważne że działa :P

legrooch [ MPO Squad Member ]
hctkko. ==> A wiesz, czym się różni If od Case? :)
hctkko. [ The Prodigy ]
wiem, ale może remekra nie wie.
kakakakaboom! [ Konsul ]
legrooch, czym?
kamyk_samuraj [ Legend ]
grucha - niczym? Znaczy - coś tam chyba z porównywanymi typami było tylko - ale z Pascalem to miałem do czynienia pomiędzy kolejnymi partyjkami Starcrafta - więc mogę się mylić...
edyta: oooo nawet w artykule co dał Narmo jest o tym...
legrooch [ MPO Squad Member ]
W przypadku użycia z posta [1] if zostanie każdorazowo wykonane warunkowe sprawdzanie zmiennej. W przypadku Case zostanie wartość wybrana z dostępnych.
To, że kod wygląda podobnie nie oznacza podobnego wykonania.
W tym przypadku zysk będzie znikomy, ale zawsze będzie. Natomiast nauka poprawnego używania pętli, funkcji daje dużo w przyszłości.
remekra [ Horonrzy ]
Może i mógłbym użyć instrukcji Case, ale nie miałem jej jeszcze na lekcjach, więc nie widzę potrzeby.
Ale jak już tyle osób się zebrało to mam jeszcze jedno pytanie, gdybym miał zrobić program, który nie będzie zamieniał tylko cyfr od 0 do 9 na zapis słowny, tylko który byle jaką wpisaną liczbę będzie zamieniał na zapis słowny to jakby to wyglądało? Jakiej instrukcji trzeba by było użyć?
Pytanie z czystej ciekawości, może się przyda na przyszłość;).
Narmo [ nikt ]
Case jest wydajniejszy i czytelniejszy przy programach, gdzie jest więcej opcji wyboru (jak tutaj). Dodatkowo wsadził bym wszystko w pętlę, żeby program nie wyłaczał się po jednym przejściu, tylko działał do naciśnięcia tego zera.
legrooch [ MPO Squad Member ]
Ify bądź Len na weryfikacje liczby (ilość znaków - dziesiątki, setki), Case na wybór outputu słownego

hctkko. [ The Prodigy ]
tak się doczepiliście tego case, a co sądzicie o wczytywaniu pojedynczej cyfry do 30-znakowego stringa? (oryginalny kod) ;p
legrooch [ MPO Squad Member ]
Zwróciłem uwagę na sugestię Narmo :)
Nie wiem czemu nei wyłapałem tej 30 :)
remekra [ Horonrzy ]
To dopiero mój drugi program(pierwszy obliczał pole prostokąta;)), dlatego mogą być głupoty takie jak ten o wczytywaniu pojedynczej cyfry do 30-znakowego Stringa;).
Ale skorzystałem z pomysłu Narmo i dałem to w pętle, teraz aby wpisać inną cyfrę nie trzeba włączać na nowo programu, a 0 kończy pętle i program.

legrooch [ MPO Squad Member ]
remekra ==> To zamień jeszcze string na integer, popraw ify pod integera i będzie prawie idealnie :)
hctkko. [ The Prodigy ]
zamiast integer dałbym byte ;)
/byte zajmuje 2 razy mniej pamięci niż integer a w tym wypadku wystarcza. dobrym nawykiem jest zwracanie uwagi na takie drobne rzeczy, przyda się w przyszłości :)
remekra [ Horonrzy ]
Zmieniłem String na Byte dzięki hctkko. i jego linkowi w poście 3:). Integer będzie lepszy?
kamyk_samuraj [ Legend ]
grucha -> a mam takie pytanie - jak wewnętrznie rozwiązana jest funkcja case, że mówisz, że będzie ona wydajniejsza? Bo przychodzi mi na myśl tylko szereg porównań wzorca z podanymi jako opcje wartościami (czyli tak samo, jak w przypadku kilku ifów).
Oczywiście można jakoś próbować zmniejszyć ilość porównań (np. wykorzystując fakt, że ciąg jest posortowany i poszukać odpowiedniej opcji binarnie).
legrooch [ MPO Squad Member ]
Jest różnica między sprawdzeniem stanu zmiennej, a jej warunkowaniem.
Czasowo if jest wolniejszy.
Co do Twojej wersji - zgoda. Jeżeli mamy ustawione wartości w sposób posortowany, a możliwość kombinacji jest minimalna różnica może być niezauważalna.
A teraz pytanie do Ciebie - po co wprowadzono Case i If? Skoro można Case zrobić Ifami? :)