Pascal-Menu i pętla

Cześć zrobiłęm program który oblicza bok…

prostokąta ale nie umiem dodać menu i pętli

czyli chodzi mi o to żeby po włączeniu programu było menu i były dwie opcję oblicz bok prostokąta i wyjście i po wybraniu 1 program oblicza bok a gdy skończy wraca do menu oto kod:

program bok_prostokata;{Nazwa Programu}

uses crt; {Aktywna Biblioteka}

var a,b,p:integer;

BEGIN

clrscr; {czyszczenie ekranu}

TextColor(6); {Zolto zielony}

TextBackground(8);

writeln(‘Witaj w programie BOK_Prostokata.’);

Writeln('Aby zaczac wcisnij ENTER ');

readln;{Oczekoje na wcisniecie ENTERA}

write('Podaj pierwszy bok ');

readln(a);

write(‘Podaj drugi bok’);

readln(b);

p:=a*b;

write('Pole prostokata wynosi ',p);

readln;

end.

program bok_prostokata;{Nazwa Programu}

uses crt; {Aktywna Biblioteka}

var 

a,b,p:integer;


koniec:boolean;

czar:char;


procedure liczenie;

begin

write('Podaj pierwszy bok ');

readln(a);

write('Podaj drugi bok ');

readln(b);

p:=a*b;

write('Pole prostokata wynosi ',p);

readln;

end;



BEGIN

koniec:=false;

czar:=' ';

repeat

clrscr; {czyszczenie ekranu}

TextColor(6); {Zolto zielony}

TextBackground(8);

writeln('Witaj w programie BOK_Prostokata.');

writeln('Wybierz jedną z opcji:');

writeln('1 - liczenie');

writeln('2 - wyjście');

czar:=readkey;

if czar='1' then liczenie else koniec:=true;

until koniec;

end.

EDIT:poprawione

Nie działa bo jak wcisnę ENTER to się program wyłącza.

program bok_prostokata;{Nazwa Programu}

uses crt; {Aktywna Biblioteka}

var a,b,p:integer;

w:char;

procedure licz;

begin

clrscr; {czyszczenie ekranu}

TextColor(6); {Zolto zielony}

TextBackground(8);

writeln('Witaj w programie BOK_Prostokata.');

Writeln('Aby zaczac wcisnij ENTER ');

readln;{Oczekoje na wcisniecie ENTERA}

write('Podaj pierwszy bok ');

readln(a);

write('Podaj drugi bok');

readln(b);

p:=a*b;

write('Pole prostokata wynosi ',p);

readkey;

end;

begin

repeat

clrscr;

writeln('Co zamierzasz uczynic ?');

writeln('1 licz pole');

writeln('2 wyjdz');

w:=readkey;

if (w<>'1') or (w<>'2') then

begin

writeln('miales nacisnac 1 albo 2');

readkey;

end

else if w='1' then licz;

until w='2';

end.

Nie ma to jak trochę pomyśleć przed rozpoczęciem roku xD Mało kiedyś robię coś za kogoś ;] Jak coś to pytaj xD

Po sformatowaniu kodu i wyrzuceniu niepotrzebnych rzeczy:

program BokProstokata; {Nazwa Programu}

uses Crt; {Aktywna Biblioteka}

var a, b, Wybor: Integer;


procedure Obliczenia;

begin

  Write('Podaj pierwszy bok ');

  Readln(a);

  Write('Podaj drugi bok ');

  Readln(b);

  Writeln('Pole prostokata wynosi ', a*b);

  Readln;

end;


begin

  repeat

    ClrScr; {czyszczenie ekranu}

    TextColor(6); {Zolto zielony}

    Writeln('Witaj w programie Bok Prostokata.');

    Writeln;

    Writeln('1 - obliczenia, 2 - koniec');

    repeat

      Write('Twoj wybor: ');

      Readln(Wybor);

      GotoXY(1, WhereY - 1);

      ClrEol;

    until Wybor in [1, 2];

    if Wybor = 1 then Obliczenia else Exit;

  until false;

end.

napisałem, używając procedury @simplex . powinno działać.

REPEAT

writeln ('OBLICZANIE PROSTOKĄTA........1');

writeln ('WYJŚCIE............................2');

readln(wybor);

if wybor=1 then obliczenia;

UNTIL wybor=2;

Już skasowałem te cudzysłowy :slight_smile:

infoR_96 , masz rację. Twoja propozycja jest poprawniejsza i w sumie chyba bardziej zrozumiała. Odpada również wywołanie procedury Exit. W zasadzie to nie wiem teraz, dlaczego wymyśliłem taką konstrukcję pętli

repeat

  ...

  if Wybor = 1 then Obliczenia else Exit;

until false;

choć przecież oczywiste jest zakończenie pętli po spełnieniu warunku Wybor = 2 , tak jak napisałeś. Na swoje usprawiedliwienie mogę powiedzieć, że pomimo tego mój kod działa i jest … nietypowy oraz oryginalny :wink: Mała uwaga do Twojego kodu: zmienna Wybor jest typu całkowitego, więc niewłaściwie użyłeś cudzysłowu, zwłaszcza podwójnego, który w ogóle nie występuje w Pascalu. Poprawiony kod wygląda tak

program BokProstokata; {Nazwa Programu}

uses Crt; {Aktywna Biblioteka}

var a, b, Wybor: Integer;


procedure Obliczenia;

begin

  Write('Podaj pierwszy bok ');

  Readln(a);

  Write('Podaj drugi bok ');

  Readln(b);

  Writeln('Pole prostokata wynosi ', a*b);

  Readln;

end;


begin

  repeat

    ClrScr; {czyszczenie ekranu}

    TextColor(6); {Zolto zielony}

    Writeln('Witaj w programie Bok Prostokata.');

    Writeln;

    Writeln('1 - obliczenia, 2 - koniec');

    repeat

      Write('Twoj wybor: ');

      Readln(Wybor);

      GotoXY(1, WhereY - 1);

      ClrEol;

    until Wybor in [1, 2];

    if Wybor = 1 then Obliczenia;

  until Wybor = 2;

end.