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:

Kód: Vybrat vše

while (podmínka)
  begin
    ...
  end;

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ý? :evil:
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

Kód: Vybrat vše

if (volba = 2) then


ja už bych byl rad kdyby to fungovalo normalně