Блин, не могу никак сделать что бы всё идеально работало... Помогите пожалуйста разобраться с заданием. Алгоритм придумал, блок схему нарисовал, код написал как смог, но вычисления неправильные делает. Подскажите в чем же дело, где у меня ошибка?
Задание с латышского языка, переведу как понял на русский для вас.
Квадрат характеризует сторона А, периметр P и площадь S. Точность с (плавающей точкой?) проверяется значением Z. Ввести A, P, S, Z значения. Вычислить P, S, и сравнить с введёнными значениями, проверить с точностью Z, если не правильно - попросить ввести значения снова.
Алгоритм я понял такой:
Sr и Pr я назвал так реальные значения площади и периметра, вычисляемые по формулам.
Sie и Pie я назвал вводимые нами значения
Код я написал такой:
Program Kvadrat;
Uses Crt;
Label Vvod_dannih;
Label Vse_rabotaet;
Label Variants1;
Label Variants2;
var A, Pie, Sie, Z, Pr, Sr: real;
Begin
clrscr;
Vvod_dannih: Writeln('Vvedi neobhodimie dannie');
Writeln('Vvedi storonu A');
Readln(A);
Writeln('Vvedi perimetr P');
Readln(Pie);
Writeln('Vvedi ploshadj S');
Readln(Sie);
Writeln('Vvedi to4nostj Z');
Readln(Z);
Pr := A*4;
Sr := A*A;
if( A<0 ) or ( Pie <0 ) or ( Sie <0 ) or ( Z <0 ) then
begin
writeln('Nelza vvoditj negativnie 4isla' );
goto Vvod_dannih;
end;
if (Pr > Pie) and (Sr > Sie) then
begin
goto Variants1;
end
else
begin
goto Variants2;
end;
Variants1:
begin
if ((Pr - Pie) <=Z ) and ((Sr - Sie) <=Z ) then
begin
writeln ('To4nostj pozvolaet');
goto Vse_rabotaet;
end
else
begin
writeln ('To4nostj ne pozvolaet');
goto Vvod_dannih;
end;
if (Pr < Pie) and (Sr < Sie) then
goto Variants2;
Variants2:
if ((Pie - Pr) <=Z ) and ((Sie - Sr) <=Z ) then
begin
writeln ('To4nostj pozvolaet');
goto Vse_rabotaet;
end
else
begin
writeln ('To4nostj ne pozvolaet');
goto Vvod_dannih;
end;
end;
Vse_rabotaet: Writeln('Vse rabotaet!');
Readln;
End.
Буду рад любой помощи..
То есть, если возмём сторону A=3, то реальный периметр (Pr)=12 и реальная площадь (Sr)=9
если я ввожу P=10 и S=7 точность Z=2, то он разрешает такие значения.
если я ввожу P=10 и S=7 точность Z=1, то он не разрешает такие значения.
То есть здесь всё в порядке, но:
если я ввожу P=12 и S=7 точность Z=1, то он разрешает такие значения. Программа видит что одно значение годится для такой точности, и значит этого достаточно, но в этом случае S не должно подходить.
Кстати, за это время нашёл 1 недочёт, и исправил уже. В вариантах надо было сделать <=Z (меньше или равно Z, а не просто меньше).