Stránka 1 z 2
Pascal Cyklus While chyba
Napsal: 29 dub 2014 20:51
od Akrej
Pracuji na takovem jednoduchem programu kde se vytvoři test potom se vrati člověk do menu a spusti test jenomže mi to nefunguje chcu tam doplnit cyklus while ale když ho tam tam tak mi jenom problikne cmd nebo to rozhodi celi program přidavam kod kdyby si někdo věděl rady tak diky mužete mi to tam klidně dopnit aby to bylo funkční bude jenom rad morduju se stim 20 minut
Kód: Vybrat vše
program Tester;
uses Crt;
var menu,volba:integer;
var ot1,ot2,ot3,ot4,ot5,odpo1,odpo2,odpo3,odpo4,odpo5,a,b,c,d,f:string;
begin
writeln('Tester:');
ClrScr;
writeln('Vytvorit test [1]');
writeln('Spustit test test [2]');
readln(volba);
readln();
if (volba = 1) then
begin
writeln('Napis prvni otazku: ');
readln(ot1);
writeln('Napis druhou otazku: ');
readln(ot2);
writeln('Napis treti otazku: ');
readln(ot3);
writeln('Napis cvrtou otazku: ');
readln(ot4);
writeln('Napis patou otazku: ');
readln(ot5);
clrscr;
writeln('Napis spravnou odpoved na:', ot1);
readln(odpo1);
writeln('Napis spravnou odpoved na:', ot2);
readln(odpo2);
writeln('Napis spravnou odpoved na:', ot3);
readln(odpo3);
writeln('Napis spravnou odpoved na:', ot4);
readln(odpo4);
writeln('Napis spravnou odpoved na:',ot5);
readln(odpo5);
writeln('Ulozit test a vratit se do menu [3]');
readln(menu);
readln(volba);
if (volba = 2) then
begin
write(ot1);
read(a);
write(ot2);
read(b);
write(ot3);
read(c);
write(ot4);
read(d);
write(ot5);
read(f);
end;
end;
end.
Re: Pascal Cyklus While chyba
Napsal: 29 dub 2014 21:16
od faraon
Cyklus s podmínkou na začátku:
Dokud platí
podmínka, provádí se pořád dokola
...Z toho vyplývá, že pokud při vstupu do cyklu
podmínka neplatí, neprovede se ani jednou!
Opravdu to chceš udělat tak, že volba 2 je vnořená ve volbě 1?
Kód: Vybrat vše
if (volba = 1) then
begin
...
readln(menu);
readln(volba);
if (volba = 2) then
begin
...
end;
end;
Sice to není nejlepší způsob jak udělat nějaké vícenásobné větvení, ale neměly by ležet spíš za sebou?
Re: Pascal Cyklus While chyba
Napsal: 30 dub 2014 17:38
od Akrej
I když tma dam cyklus while stale jenom problikne cmd
přidavam upraveny kod něco jsem i přidal doporučuji vyzkoušet
Kód: Vybrat vše
program Tester;
uses Crt;
var volba:integer;
var ot1,ot2,ot3,ot4,ot5,odpo1,odpo2,odpo3,odpo4,odpo5,a,b,c,d,f:string;
begin
writeln('Tester:');
readln();
ClrScr;
writeln('Vytvorit test [1]');
writeln('Spustit test test [2]');
readln(volba);
if (volba = 1) then
begin
writeln('Napis prvni otazku: ');
readln(ot1);
writeln('Napis druhou otazku: ');
readln(ot2);
writeln('Napis treti otazku: ');
readln(ot3);
writeln('Napis cvrtou otazku: ');
readln(ot4);
writeln('Napis patou otazku: ');
readln(ot5);
clrscr;
writeln('Napis spravnou odpoved na:', ot1);
readln(odpo1);
writeln('Napis spravnou odpoved na:', ot2);
readln(odpo2);
writeln('Napis spravnou odpoved na:', ot3);
readln(odpo3);
writeln('Napis spravnou odpoved na:', ot4);
readln(odpo4);
writeln('Napis spravnou odpoved na:',ot5);
readln(odpo5);
writeln('Ulozit test a vratit se do menu [3]');
readln(volba);
if (volba = 3) then
begin
ClrScr;
writeln('Vytvorit test [1]');
writeln('Spustit test test [2]');
readln(volba);
end
else
writeln('Program bude ukoncen');
end;
if (volba = 2) then
begin
writeln(ot1);
readln(a);
writeln(ot2);
readln(b);
writeln(ot3);
readln(c);
writeln(ot4);
readln(d);
writeln(ot5);
readln(f);
end;
if (odpo1 = a) then
begin
writeln('Spravne');
end
else
begin
writeln('Spatne');
end;
end.
Re: Pascal Cyklus While chyba
Napsal: 30 dub 2014 17:53
od faraon
Je to nějaké zmatené, nevím co to přesně má ten program dělat.
Zkus si ze všeho nejdřív udělat ten cyklus while, který poběží dokud nezadáš třeba číslo nebo písmeno, které ho má ukončit. Když zadáš něco jiného, zeptá se znova, a tak pořád dokola... A nezapomeň před začátkem nastavit řídící proměnnou na nějakou vhodnou hodnotu!
Re: Pascal Cyklus While chyba
Napsal: 30 dub 2014 18:18
od Akrej
v tom programu si na začatku v menu vybereš jestli chceš udělat test nebo spustit test 1. si to vytvořiš na konci chcu aby tě to vratilo do menu a mohl si test spustit + ti to ještě ukaže jestli to máš dobre nebo ne u každe otazky
Re: Pascal Cyklus While chyba
Napsal: 30 dub 2014 18:38
od faraon
Píšu to z hlavy, takže neručím za chyby:
Kód: Vybrat vše
program Menu;
var
volba:integer;
konec:boolean;
begin
konec:=false;
while (konec=false) do
begin
writeln('Menu:');
writeln('1 - ABC');
writeln('2 - XYZ');
writeln('3 - konec');
write('volba: ');
readln(volba);
if volba=1 then writeln('ABC');
if volba=2 then writeln('XYZ');
if volba=3 then konec:=true;
end;
readln;
end.
To větvení by se dalo vylepšit pomocí else, takže by se zjistila i chybná volba, která není v nabídce, to třeba někdy příště.
Re: Pascal Cyklus While chyba
Napsal: 30 dub 2014 20:45
od Akrej
no zajimave akorat se po každe s opakuje menu když zvolim 1 tak to napiše ABC ale vyskočí menu
Re: Pascal Cyklus While chyba
Napsal: 01 kvě 2014 08:55
od faraon
Akrej píše:na konci chcu aby tě to vratilo do menu a mohl si test spustit
Však tak to má být, ne? Aspoň jsi to tak popsal

Podstatný je ten cyklus, a jeho ukončení. Co se bude dít uvnitř něj je jen na tobě...
Re: Pascal Cyklus While chyba
Napsal: 01 kvě 2014 12:11
od Akrej
no ja chcu any to neskočilo hned ale po entru nebo aby to napsalo tak jsem to myslel kdybys to vyzkoušel ten muj kod tak bych pochopil
--- Doplnění předchozího příspěvku (01 Kvě 2014 13:01) ---
Problem s menu vyřešen ale tet mam problem to že chcu aby mi to pokaždé odpovědi napsalo jestli je dobře nebo ne
Kód: Vybrat vše
program Tester;
uses Crt;
var volba:integer;
var ot1,ot2,ot3,ot4,ot5,odpo1,odpo2,odpo3,odpo4,odpo5,a,b,c,d,f:string;
begin
writeln('Tester:');
readln();
ClrScr;
writeln('Vytvorit test [1]');
writeln('Spustit test test [2]');
readln(volba);
if (volba = 1) then
begin
ClrScr;
writeln('Napis prvni otazku: ');
readln(ot1);
writeln('Napis druhou otazku: ');
readln(ot2);
writeln('Napis treti otazku: ');
readln(ot3);
writeln('Napis cvrtou otazku: ');
readln(ot4);
writeln('Napis patou otazku: ');
readln(ot5);
clrscr;
writeln('Napis spravnou odpoved na:', ot1);
readln(odpo1);
writeln('Napis spravnou odpoved na:', ot2);
readln(odpo2);
writeln('Napis spravnou odpoved na:', ot3);
readln(odpo3);
writeln('Napis spravnou odpoved na:', ot4);
readln(odpo4);
writeln('Napis spravnou odpoved na:',ot5);
readln(odpo5);
writeln('Ulozit test a vratit se do menu [3]');
readln(volba);
if (volba = 3) then
begin
ClrScr;
writeln('Vytvorit test [1]');
writeln('Spustit test test [2]');
readln(volba);
end
else
writeln('Program bude ukoncen');
end;
if (volba = 2) then
begin
ClrScr;
writeln(ot1);
readln(a);
writeln('-----------------------');
writeln(ot2);
readln(b);
writeln('-----------------------');
writeln(ot3);
readln(c);
writeln('-----------------------');
writeln(ot4);
readln(d);
writeln('-----------------------');
writeln(ot5);
readln(f);
writeln('-----------------------');
end;
if (a = odpo1) then
begin
writeln('je spravne');
readln();
end
else
begin
writeln('neni spravne');
readln();
if (odpo2 = b) then
begin
writeln('je spravne');
readln();
end
else
begin
writeln('neni spravne');
readln();
if (odpo3 = c) then
begin
writeln('je spravne');
readln();
end
else
begin
writeln('neni spravne');
readln();
if (odpo4 = d) then
begin
writeln('je spravne');
readln();
end
else
begin
writeln('neni spravne');
readln();
end;
if (odpo5 = f) then
begin
writeln('je spravne');
readln();
end
else
begin
writeln('neni spravne');
readln();
writeln('Test dokoncen');
writeln('[EXIT] = Enter');
readln();
end;
end;
end;
end;
end.
Spust si jeste ten vysledny exe soubor prosimte aby lepe mohl konstatovat problem
http://leteckaposta.cz/243163135 (radši jsem to hodil na leteckou postu)
Re: Pascal Cyklus While chyba
Napsal: 01 kvě 2014 21:18
od faraon
Spustit EXE z nějakého cizího zdroje? A co jestli máš počítač zavirovaný?
Kromě toho můj Linux žádné EXE nespouští, tady se používá ELF!
Už jsem si ten tvůj zdroják prohlédl, a měl bys zapracovat na odsazování. Když jsem si to srovnal podle begin a end, tak jsem na tu chybu přišel hned, ještě než jsem došel na konec kódu. Ty vyhodnocuješ odpovědi postupně, ale každou další odpověď ověřuješ jen pokud byla předchozí nesprávně! Zkus přemístit pár end tam kam patří, a uvidíš co se bude dít.
Re: Pascal Cyklus While chyba
Napsal: 01 kvě 2014 21:57
od Akrej
ok pc zavirovany nemam použivam aviru ale přece v linuxu jde spustit exe pomoci wine.
Ok zkontroluji kod
Re: Pascal Cyklus While chyba
Napsal: 02 kvě 2014 21:15
od Akrej
pro změnu mam chybu v tomhle řadku
ja už bych byl rad kdyby to fungovalo normalně