Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Ahoj! Jsem úplný začátečník v Pascalu a profesorka nám zadala samostatný úkol. Úkol jsem "skoro" udělal, jen tam mám jeden error, se kterým si nevím rady. Pracujeme v Delphi 7. Nechci aby za mě někdo napsal celý program, jen mi prosím řekněte, co tam mám špatně? Předem děkuji každemu za dobrou radu.
Zadání:
Napište program pro výpočet jízdného. Typ jízdného volíme pomocí jednoduchého menu (J = jednosměrná, Z = zpáteční, jiná volba znamená ukončení programu). Dále zadáváme počet osob zákaznického jízdného, počet osob zlevněného jízdného a počet ujetých km. Na základě těchto informací program vypočítá celkovou částku, která se má zaplatit. Jízdné je dáno následující tabulkou:
Počet km Jednosměrná Zpáteční
Zákaznické Zlevněné Zákaznické Zlevněné
1 až 50 32,- 20,- 58,- 29,-
51 až 100 62,- 44,- 112,- 56,-
101 až 200 114,- 81,- 208,- 104,-
201 až 300 168,- 112,- 316,- 158,-
301 až 500 294,- 212,- 500,- 250,-
501 a víc 396,- 293,- 704,- 352,-
Můj zdroják výpada takto:
program SP;
{$APPTYPE CONSOLE}
uses
SysUtils;
var k,h,x,y,o,p:Integer;
a,b,c:Char;
begin
writeln('Vitejte v programu pro vypocet jizdneho. Postupujte podle dale uvedenych pokynu.');
writeln('--------------------------------------------------------------------------------');
writeln('Vyberte si mezi jednosmernou(stisknete J) jizdenkou a zpatecni(stisknete Z)');
writeln('--------------------------------------------------------------------------------');
readln(c);
case c of
'J':begin
writeln('Zvolte mezi zakaznickou(stisknete Z) a zlevnenou(stisknete S) jizdenkou.');
writeln('--------------------------------------------------------------------------------');
readln(a);
case a of
'Z':begin
writeln('Zadejte pocet osob.');
readln(h);
writeln('Zadejte pocet ujetych km.');
readln(k);
if (1<=k)and(k<=50) then x:=32*k*h
else if (51<=k)and(k<=100) then x:=62*k*h
else if (101<=k)and(k<=200) then x:=114*k*h
else if (201<=k)and(k<=300) then x:=168*k*h
else if (301<=k)and(k<=500) then x:=294*k*h
else if (501<=k) then x:=396*k*h;
writeln('---------------------------------');
writeln('Celkova castka: ',x);
readln;
end;
'S':begin
writeln('Zadejte pocet osob.');
readln(h);
writeln('Zadejte pocet ujetych km.');
readln(k);
if (1<=k)and(k<=50) then y:=20*k*h
else if (51<=k)and(k<=100) then y:=44*k*h
else if (101<=k)and(k<=200) then y:=81*k*h
else if (201<=k)and(k<=300) then y:=112*k*h
else if (301<=k)and(k<=500) then y:=212*k*h
else if (501<=k) then y:=293*k*h;
writeln('---------------------------------');
writeln('Celkova castka: ',y);
readln;
end;
end;
'Z':begin
writeln('Zvolte mezi zakaznickou(stisknete Z) a zlevnenou(stisknete S) jizdenkou.');
writeln('--------------------------------------------------------------------------------');
readln(b);
case b of
'Z':begin
writeln('Zadejte pocet osob.');
readln(h);
writeln('Zadejte pocet ujetych km.');
readln(k);
if (1<=k)and(k<=50) then o:=58*k*h
else if (51<=k)and(k<=100) then o:=112*k*h
else if (101<=k)and(k<=200) then o:=208*k*h
else if (201<=k)and(k<=300) then o:=316*k*h
else if (301<=k)and(k<=500) then o:=500*k*h
else if (501<=k) then o:=704*k*h;
writeln('---------------------------------');
writeln('Celkova castka: ',o);
readln;
end;
'S':begin
writeln('Zadejte pocet osob.');
readln(h);
writeln('Zadejte pocet ujetych km.');
readln(k);
if (1<=k)and(k<=50) then p:=29*k*h
else if (51<=k)and(k<=100) then p:=56*k*h
else if (101<=k)and(k<=200) then p:=104*k*h
else if (201<=k)and(k<=300) then p:=158*k*h
else if (301<=k)and(k<=500) then p:=250*k*h
else if (501<=k) then p:=352*k*h;
writeln('---------------------------------');
writeln('Celkova castka: ',p);
readln;
end;
end;
end;
end
else exit;
end;
end.
Toto je chyba, která se zobrazí při kompilaci:
Offline
↑ gajasek:
Mne sa zda, ze ti pred tym cerveno vysvietenym riadkom chyba este jedno "end;", ale nie som si tym isty, vyskusaj.
Inak nic v zlom, ale mas to pomerne neprehladne :) Odporucam vynechavat riadky po nejakych blokoch, pretoze takto sa ti zleje vsetko dokopy a sa potom tazko hlada chyba :)
Offline

↑ gajasek:
Já bych zase zvolil přehlednější odsazování (nějak odsadit jednotlivé části case) :-).
Myslím, že těch endů na konci máš moc. (Edit: Tak ne, mikee má pravdu a na konci jich je akorát :-) )
Offline
↑ gajasek:
Zkoušel jsem různě experimentovat s "end;" ale bez úspěchu. Mě spíš vadí chyba ':='expected but ':' found, naprosto nechápu.
Offline
↑ gajasek:
Pokud se nepletu, pravdu má mikee, napiš před ten řádek ještě jeden "end;" Každá větev příkazu case musí být uzavřena endem, a potom nakonec se musí uzavřit dalším endem (který tam nemáš) ten příkaz case.
Endy na konci jsem nepočítal, to už určitě zvládneš.
Edit: teď jsem přečetl edit od Pavla - takže endy na konci jsou v pořádku a nepletu se.
Offline
↑ gajasek:
No tou chybou sa velmi nezaoberaj, prekladac ti chce povedat ze tam mas vlozit to ':=' ako operator priradenia, ale to tam nechceme mat, takze treba len hladat chybu inde :)
Skus si to asi predsa len zprehladnit tymi vynechanymi riadkami a aj odsadenim ako radi BrozekP :) Ja by som sa s tym pohral sam, ale zial nemam nainstalovane Delphi a uz som v tom pomerne dlho nic nerobil, takze to takto nevidim. Ak nie je chyba v tom "end", tak potom asi uz iba nejaky preklep, ale nenasiel som ziadny.. Takze snad niekto iny pomoze :)
Offline
↑ gajasek: No tak ja som si to začal prepisovať, a nakoniec som to trochu štylisticky prerobil, ale návrh zostáva tvoj. Kompilátor mi nezistil žiadnu chybu.
Takže si to môžeš porovnať nie je tam veľký rozdiel. Keby niečo tak sa spýtaj.
Offline
Stránky: 1