Piszę program wykonujacy proste obliczenia dot. kola. Problem z ktorym sie borykam to wproadzanie danych tylko numerycznych. Troche juz zrobilem, jednakze dalej utknalem. Chcialbym by nie dalo sie wpisac np. 1-2, innych znakow niz numerki w srodku pola read, by program sie nie wywalal przy wartosciach ,8 lub .8(lub zeby takich sie dalo sie wprowadzic).
program pp1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var a,b,r:string;
Function sprawdz(tekst:string):boolean;
var
ch:char;
i:integer;
begin
sprawdz:=false;
for i:=1 to Length(tekst) do
begin
ch:=tekst[i];
if ch in ['0'..'9','-','.',','] then
{if pos('-', tekst)=1 then
if pos('.', tekst)<>0 then
if pos(',', tekst)<>0 then }
begin
sprawdz:=true;
end
else
begin
writeln('Podales nieprawidlowe zmienne. Podaj zmienne calkowite.');
end;
end;
end;
label kotwiczka;
begin
kotwiczka:
writeln('Podaj wspolrzedna a: ');
readln(a);
if (sprawdz(a)=false) then goto kotwiczka;
writeln('Podaj wspolrzedna b: ');
readln(b);
if (sprawdz(b)=false) then goto kotwiczka;
writeln('Podaj promien r');
readln(r);
if (sprawdz(r)=false) then goto kotwiczka;
if (abs(StrToInt(a))>20) or (abs(StrToInt(b))>20) or (StrToInt(r)<0) or (StrToInt(r)>50) then //or (a mod 1<>0) or (b mod 1<>0) or (r mod 1<>0) then
begin
writeln('Wprowadziles bledne dane; a i b moze przyjmowac wartosci z zakresu <-20, 20>,'#10#13' natomiast r z zakresu (0,50)');
writeln;
end
else
begin
writeln;
writeln('Odleglosc srodka kola od srodka ukladu wspolrzednych wynosi: '#10#13,sqrt(StrToInt(a)*StrToInt(a)+StrToInt(b)*StrToInt(b)):0:2,' jednostek');
writeln;
writeln('Pole kola wynosi: '#10#13,StrToInt(r)*StrToInt(r)*Pi:0:2,' jednostek kwadratowych');
writeln;
writeln('Pole trojkata rownoramiennego prostokatnego wpisanego w kolo wynosi: '#10#13,StrToInt(r)*StrToInt(r),' jednostek');
writeln;
readln;
end;
goto kotwiczka;
{ TODO -oUser -cConsole Main : Insert code here }
end.
Jakies sugestie? Dzieki za pomoc.