Задача на паскале(нужна помощь)

rider1203

Гуру форума
Регистрация
4 Авг 2008
Сообщения
243
Реакции
61
Условие задачи:
На плоскости задан квадрат со сторонами, параллельными осям координат. Вычислить площадь квадрата, принадлежащую 4 четверти.
Я сделал так
Код:
var x1,x2,y1,y2,a,s:integer;
label one,two;
begin
one:writeln('Введите координаты левой нижней точки квадрата через пробел');
writeln('Пример: x=4,y=5 Вводить:4 5');
readln(x1,y1);
if (x1<0) or (y1>0) then begin
writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
goto one; end;
two:writeln('Введите координаты правой верхней точки квадрата через пробел');
readln(x2,y2);
if (x2<0) or (y2>0) then begin
writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
goto two; end;
a:=x2-x1;
s:=sqr(a);
writeln('Площадь квадрата равна ',s);
readln
end.
но это не правильно(((
 
prog.jpg
 
Понятно что не правильно. допустим х1=-4, а х2=3. в вашем алгоритме - a:=x2-x1, а это будет а:= 3 - (-4), а:=7. Хотя очевидно то, что это не правильно. Нужно внести оператор ветвления, который производит проверку на то, как расположен квадрат относительно осей координат. Таких вариантов может быть 4 (смотри рисунки ya-maker - он все предельно ясно обрисовал). Дальше - дело техники

var x1,x2,y1,y2,a,s:integer;
label one,two;

begin
one:writeln('Введите координаты левой нижней точки квадрата через пробел');
writeln('Пример: x=4,y=5 Вводить:4 5');
readln(x1,y1);

if (x1<0) or (y1>0) then begin
writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
goto one; end;

two:writeln('Введите координаты правой верхней точки квадрата через пробел');
readln(x2,y2);

if (x2<0) or (y2>0) then begin
writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
goto two; end;

if ((x1<0) and (x2<0) and (y1<0) and (y2>0)) then {если ось Х проходит через квадрат а ось У не проходит}

begin
a:=x1-х2;
s:=а*|y1|;
end;


if ((x1<0) and (x2>0) and (y1<0) and (y2>0)) then {если центр координат внутри квадрата}

begin
s:=x1*y1;
end;

if ((x1<0) and (x2>0) and (y1<0) and (y2>0)) then {если ось У проходит через квадрат а ось Х не проходит}

begin
a:= y1-y2
s:=x1*a;
end;

if ((x1<0) and (x2<0) and (y1<0) and (y2<0)) then {если квадрат полностью в 4-ой четверти}


begin
a:=y1-y2;
s:=a*a;
end;


writeln('Площадь прямоугольника в 4 четверти равна ',s);
readln
end.

Понимаю что быдло-код, но работать должен. может где-то в синтаксисе ошибки - ссори, давно не кодил на Паскале. goto желательно не использовать - хоть данный оператор и присутствует в паскала использование его - признак дурного тона. старайтесь избегать - если goto в програме много ее очень трудно понять (прижки из конца кода в начало и еще бог знает куда)
 
человек тебе все верно расписал...

тебе терь нужно запрограммить алгоритм который на скане приведен и все будет как тебе нужно...
 
Если делать по уму, то нужно еще добавить проверку введенных данных (чтобы пользователь не ввел вместо цифр буквы). и проще будет сделать ввод левой нижней точки и длины стороны квадрата и по этим данным строить квадрат.
 
Если делать по уму, то нужно еще добавить проверку введенных данных (чтобы пользователь не ввел вместо цифр буквы). и проще будет сделать ввод левой нижней точки и длины стороны квадрата и по этим данным строить квадрат.

Если вместо цифр ввести букву,когда тип данных integer просто выкинет из программы.
Понятно что не правильно. допустим х1=-4, а х2=3. в вашем алгоритме - a:=x2-x1, а это будет а:= 3 - (-4), а:=7. Хотя очевидно то, что это не правильно. Нужно внести оператор ветвления, который производит проверку на то, как расположен квадрат относительно осей координат. Таких вариантов может быть 4 (смотри рисунки ya-maker - он все предельно ясно обрисовал). Дальше - дело техники
var x1,x2,y1,y2,a,s:integer;
label one,two;
begin
one:writeln('Введите координаты левой нижней точки квадрата через пробел');
writeln('Пример: x=4,y=5 Вводить:4 5');
readln(x1,y1);
if (x1<0) or (y1>0) then begin
writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
goto one; end;
two:writeln('Введите координаты правой верхней точки квадрата через пробел');
readln(x2,y2);
if (x2<0) or (y2>0) then begin
writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
goto two; end;
if ((x1<0) and (x2<0) and (y1<0) and (y2>0)) then {если ось Х проходит через квадрат а ось У не проходит}
begin
a:=x1-х2;
s:=а*|y1|;
end;
if ((x1<0) and (x2>0) and (y1<0) and (y2>0)) then {если центр координат внутри квадрата}
begin
s:=x1*y1;
end;
if ((x1<0) and (x2>0) and (y1<0) and (y2>0)) then {если ось У проходит через квадрат а ось Х не проходит}
begin
a:= y1-y2
s:=x1*a;
end;
if ((x1<0) and (x2<0) and (y1<0) and (y2<0)) then {если квадрат полностью в 4-ой четверти}
begin
a:=y1-y2;
s:=a*a;
end;
writeln('Площадь прямоугольника в 4 четверти равна ',s);
readln
end.
Понимаю что быдло-код, но работать должен. может где-то в синтаксисе ошибки - ссори, давно не кодил на Паскале. goto желательно не использовать - хоть данный оператор и присутствует в паскала использование его - признак дурного тона. старайтесь избегать - если goto в програме много ее очень трудно понять (прижки из конца кода в начало и еще бог знает куда)
Спасибо,попробую)
 
И еще, что я упустил из виду. Зачем у вас две проверки введенных координат? Достаточно просто проверить левую нижнюю точку. если левая нижняя точка в 4-ой четверти ((x1<0)and(y1<0)), значит решаем, если нет - выводим соответствующее предупреждение.
 
Назад
Сверху