[PASCAL] Zabezpieczenie kalkulatora przed wpisaniem litery

Nie wklejam całego kodu, bo nie widzę głębszego sensu.

liczba1, liczba2 - zmienne real.

begin

     write('Podaj pierwsza liczbe: ');

     readln(liczba1);

     writeln('');

     write('Podaj druga liczbe: ');

     readln(liczba2);

     writeln('');

end;

Jeśli pod którąś z tych zmiennych wstawię znak lub ciąg znaków, kalkulator się “sypie”. Wymyśliłem coś takiego, tylko nie do końca wiem co wpisać.

begin

     repeat

     write('Podaj pierwsza liczbe: ');

     readln(liczba1);

     writeln('');

    until liczba1 nie jest liczbą


     repeat

     write('Podaj druga liczbe: ');

     readln(liczba2);

     writeln('');

     until liczba2 nie jest liczbą

end;

Macie pomysł, jak zapisać na język PASCALA warunki po until?

Z tego co mi wiadomo to w zwyklym Pascalu nie ma obsługi wyjątków :confused: a wiec pozostaje Ci to: to co wczyta program (ta liczbe) musisz zamienić na kod ASCII i obczaić czy znajduje sie w dziale liczb. Wszystkie potrzebne polecenia znajdziesz w googlach jak i sama tablice ASCII.

Jeśli chcesz weryfikować co użytkownik wpisuje, musisz spróbować napisać funkcje wczytującą która ci zastąpi uniwersalny Readln().

Proponuje (pseudo kod, troszkę naciągany, ale żeby zademonstrować algorytm)

bufor := 0 tablica znaków -> cyfry

klawisz := 0

i := 0 (indeks tablicy znaków na n-cyfr)

powtarzaj

klaw:=wczytajklawisz()

jeżeli klawisz znajduje się w kodach ascii liczb 1…0 to:

dodaj do wczytywanego bufora klawisz zamieniony na odpowiadającą cyfrę przemnozony przez “wagę” pozycji czyli indeks cyfra * 10 do i-tej

dopóki klawisz == kod ascii entera

(dodać obsługę błędów żeby wywalało gdy użyszkodnik wpisze np. “A”)

bez przesady, istnieje takie cudo ja val() :wink:

przykład:

var

r:real;

s:string;

errorcode:integer;


begin

readln(s);

val(s,r,errorcode);

if errorcode=0 then writeln('2*liczba to:',2*r)

else writeln('To nie liczba 0_o');

readln;

end.

Wybaczta, pascala dawno nie dotykałem :slight_smile: