Zacząłem trochę sie bawić pascalem i napisałem swoje dwa pierwsze programy i mam pytanie, gdyż użyłem na końcu jedynie pętlę repeat until keypressed i po naciśnięciu przycisku mój program (kalkulator) po obliczeniu działania, się wyłącza. Czy jest możliwe, żeby mógł po wykonaniu zadania wrócić spowrotem do pierwszego begin? Zapewne chodzi tu o zastosowanie jakiejś pętli, ale właśnie nie wiem jakiej. Bardzo proszę o odpowiedź.
Podaje kod programu:
program Untitled;
uses crt;
var liczba1:longint;
liczba2:longint;
htr:longint;
operacja:longint;
begin write('Witaj w programie do obliczania pola powierzchni wielu roznych figur geometryczynych. Wybierz figure: 1- kwadrat 2- prostokat 3- trojkat 4- rownoleglobok 5- trapez 6- kolo ');
read(operacja);
if operacja=1 then begin
writeln('Wybrales kwadrat. Podaj dlugosc boku a: ');
read(liczba1);
if liczba1<0 then writeln('Nie ma ujemnych dlugosci boku kwadratu!')
else writeln('Pole tego kwadratu wynosi ',liczba1*liczba1);
end;
if operacja=2 then begin
writeln('Wybrales prostokat. Podaj dlugosc pierwszego boku: ');
read(liczba1);
writeln('Podaj dlugosc drugiego boku: ');
read(liczba2);
if (liczba1<0) OR (liczba2<0) then writeln('Nie ma prostokata o ujemnej dlugosci ktoregos z bokow!')
else writeln('Pole tego prostokata ',liczba1*liczba2);
end;
if operacja=3 then begin
writeln('Wybrales trojkat. Podaj dlugosc podstawy lub pierwszej przyprostokatnej: ');
read(liczba1);
writeln('Podaj wysokosc lub dlugosc drugiej przyprostokatnej: ');
read(liczba2);
if (liczba1<0) OR (liczba2<0) then writeln('Nie ma trojkata o ujemnej dlugosci boku lub wysokosci!')
else writeln('Pole tego trojkata wynosi ',0.5*liczba1*liczba2:4:4);
end;
if operacja=4 then begin
writeln('Wybrales rownoleglobok. Podaj dlugosc podstawy: ');
read(liczba1);
writeln('Podaj wysokosc: ');
read(liczba2);
if (liczba1<0) OR (liczba2<0) then writeln('Nie ma rownolegloboku o ujemnej dlugosci podstawy i/lub wysokosci!')
else writeln('Pole tego rownolegloboku wynosi ',liczba1*liczba2);
end;
if operacja=5 then begin
writeln('Wybrales trapez. Podaj dlugosc pierwszej podstawy: ');
read(liczba1);
writeln('Podaj dlugosc drugiej podstawy: ');
read(liczba2);
writeln('Podaj wysokosc trapezu: ');
read(htr);
if (liczba1<0) OR (liczba2<0) OR (htr<0) then writeln('Nie ma trapezu o ujemnej dlugosci ktorejkolwiek podstawy i/lub wysokosci!')
else writeln('Pole tego trapezu wynosi ',((liczba1+liczba2)*htr)/2:4:4);
end;
if operacja=6 then begin
writeln('Wybrales kolo. Podaj dlugosc promienia: ');
read(liczba1);
if liczba1<0 then writeln('Nie istnieje kolo o ujemnej dlugosci promienia!')
else writeln('Pole tego kola wynosi ',liczba1*3.14:4:4);
end;
repeat until keypressed;
end.
Poza tym - nie chce mi się czytać całości, ale przenieś repeat na początek i masz mniej więcej to co chciałeś. Zmień z
-- kod
begin
-- kod
repeat until keypressed
end.
na
-- kod
begin
repeat
-- kod
until keypressed
end.
Być może za repeat i przed until będziesz potrzebował odpowiednio begin i end - nie pisałem nic w pascalu od prawie 10 lat i moja pamięć nieco zardzewiała. :roll:
program Untitled;
uses crt;
var liczba1:longint;
liczba2:longint;
htr:longint;
operacja:longint;
begin
repeat // zmiany- dodano
ClrScr; // zmiany- dodano
write('Witaj w programie do obliczania pola powierzchni wielu roznych figur geometryczynych. Wybierz figure: 1- kwadrat 2- prostokat 3- trojkat 4- rownoleglobok 5- trapez 6- kolo ');
read(operacja);
if operacja=1 then begin
writeln('Wybrales kwadrat. Podaj dlugosc boku a: ');
read(liczba1);
if liczba10 then writeln('Nie ma ujemnych dlugosci boku kwadratu!')
else writeln('Pole tego kwadratu wynosi ',liczba1*liczba1);
end;
if operacja=2 then begin
writeln('Wybrales prostokat. Podaj dlugosc pierwszego boku: ');
read(liczba1);
writeln('Podaj dlugosc drugiego boku: ');
read(liczba2);
if (liczba10) OR (liczba20) then writeln('Nie ma prostokata o ujemnej dlugosci ktoregos z bokow!')
else writeln('Pole tego prostokata ',liczba1*liczba2);
end;
if operacja=3 then begin
writeln('Wybrales trojkat. Podaj dlugosc podstawy lub pierwszej przyprostokatnej: ');
read(liczba1);
writeln('Podaj wysokosc lub dlugosc drugiej przyprostokatnej: ');
read(liczba2);
if (liczba10) OR (liczba20) then writeln('Nie ma trojkata o ujemnej dlugosci boku lub wysokosci!')
else writeln('Pole tego trojkata wynosi ',0.5*liczba1*liczba2:4:4);
end;
if operacja=4 then begin
writeln('Wybrales rownoleglobok. Podaj dlugosc podstawy: ');
read(liczba1);
writeln('Podaj wysokosc: ');
read(liczba2);
if (liczba10) OR (liczba20) then writeln('Nie ma rownolegloboku o ujemnej dlugosci podstawy i/lub wysokosci!')
else writeln('Pole tego rownolegloboku wynosi ',liczba1*liczba2);
end;
if operacja=5 then begin
writeln('Wybrales trapez. Podaj dlugosc pierwszej podstawy: ');
read(liczba1);
writeln('Podaj dlugosc drugiej podstawy: ');
read(liczba2);
writeln('Podaj wysokosc trapezu: ');
read(htr);
if (liczba10) OR (liczba20) OR (htr0) then writeln('Nie ma trapezu o ujemnej dlugosci ktorejkolwiek podstawy i/lub wysokosci!')
else writeln('Pole tego trapezu wynosi ',((liczba1+liczba2)*htr)/2:4:4);
end;
if operacja=6 then begin
writeln('Wybrales kolo. Podaj dlugosc promienia: ');
read(liczba1);
if liczba10 then writeln('Nie istnieje kolo o ujemnej dlugosci promienia!')
else writeln('Pole tego kola wynosi ',liczba1*3.14:4:4);
end;
// zmiany - dodano
Writeln;
Writeln('Dowolny klawisz- Poczatek programu, Esc- Koniec programu');
// repeat until KeyPressed ; // można usunąć - jest zbędne
until Readkey=#27; // kod klawisza Esc
end.