Паскаль. Пишет "Встречено 'else', а ожидалось ';'". Строка с последним else. В чём проблема?
Вылазит ошибка "Встречено 'else', а ожидалось ';'". В строке с последним else (62 строка) В чём проблема?
var R,x0,y0:integer;
k1,b1:integer;
k2,b2:integer;
x1,y1:real;
x,y:real;
a,b,c:real;
begin
writeln('Окружность:');
write('Введите R (Радиус): ');
read(R);
write('Введите x0 (Абсцисса центра окружности): ');
read(x0);
write('Введите y0 (Ордината центра окружности): ');
read(y0);
if (R>0) then
writeln('Параметры задают окружность')
else
writeln('Параметры не задают окружность');
writeln('Первая прямая:');
write('Введите k1 (Коэффициент наклона первой прямой): ');
read(k1);
write('Введите b1 (Коэффициент смещения первой прямой по оси y): ');
read(b1);
if (k1>0) then
writeln('Параметры задают первую прямую')
else
writeln('Параметры не задают первую прямую');
writeln('Вторая прямая:');
write('Введите k2 (Коэффициент наклона второй прямой): ');
read(k2);
write('Введите b2 (Коэффициент смещения второй прямой по оси y): ');
read(b2);
if (k2<0) then
writeln('Параметры задают вторую прямую')
else
writeln('Параметры не задают вторую прямую');
if (R>0) and (k1>0) and (k2<0) then
begin
writeln('Область пересечения: ');
x1:=(b2-b1)/(k1-k2);
y1:=(k1*x1+b1);
if (sqr(x1-x0)+sqr(y1-y0))<sqr(R) then
writeln('Графики образуют область пересечения');
begin
writeln('Введите координаты произвольной точки: ');
write('Введите x: ');
read(x);
write('Введите y: ');
read(y);
a:=k1*x+b1;
b:=k2*x+b2;
c:=sqr(x-x0)+sqr(y-y0);
if (((y<a) and (y>b)) or ((y>a) and (y<b))) and (c<sqr(R)) then
writeln('Точка (x,y) входит в область пересечения')
else if (((y<a) and (y>b)) or ((y>a) and (y<b))) and (c=sqr(R)) or ((y=a) or (y=b)) and (c<sqr(R)) and not(x1=x) and not(y1=y) then
writeln('Точка (x,y) находится на границе области пересечения')
else if ((y=a) or (y=b)) and (c=sqr(R)) or (x1=x) and (y1=y) then
writeln('Точка (x,y) находится в точке пересечения графиков')
else
writeln('Точка (x,y) не входит в область пересечения')
end
else
writeln('Графики не образуют область пересечения');
writeln('Ошибка')
end
else
writeln('Ошибка')
end.
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
вот вам код с нормальными отступами
var R,x0,y0:integer;
k1,b1:integer;
k2,b2:integer;
x1,y1:real;
x,y:real;
a,b,c:real;
begin
writeln('Окружность:');
write('Введите R (Радиус): ');
read(R);
write('Введите x0 (Абсцисса центра окружности): ');
read(x0);
write('Введите y0 (Ордината центра окружности): ');
read(y0);
if (R>0) then
writeln('Параметры задают окружность')
else
writeln('Параметры не задают окружность');
writeln('Первая прямая:');
write('Введите k1 (Коэффициент наклона первой прямой): ');
read(k1);
write('Введите b1 (Коэффициент смещения первой прямой по оси y): ');
read(b1);
if (k1>0) then
writeln('Параметры задают первую прямую')
else
writeln('Параметры не задают первую прямую');
writeln('Вторая прямая:');
write('Введите k2 (Коэффициент наклона второй прямой): ');
read(k2);
write('Введите b2 (Коэффициент смещения второй прямой по оси y): ');
read(b2);
if (k2<0) then
writeln('Параметры задают вторую прямую')
else
writeln('Параметры не задают вторую прямую');
if (R>0) and (k1>0) and (k2<0) then
begin
writeln('Область пересечения: ');
x1:=(b2-b1)/(k1-k2);
y1:=(k1*x1+b1);
if (sqr(x1-x0)+sqr(y1-y0))<sqr(R) then
writeln('Графики образуют область пересечения');
begin
writeln('Введите координаты произвольной точки: ');
write('Введите x: ');
read(x);
write('Введите y: ');
read(y);
a:=k1*x+b1;
b:=k2*x+b2;
c:=sqr(x-x0)+sqr(y-y0);
if (((y<a) and (y>b)) or ((y>a) and (y<b))) and (c<sqr(R)) then
writeln('Точка (x,y) входит в область пересечения')
else if (((y<a) and (y>b)) or ((y>a) and (y<b))) and (c=sqr(R)) or ((y=a) or (y=b)) and (c<sqr(R)) and not(x1=x) and not(y1=y) then
writeln('Точка (x,y) находится на границе области пересечения')
else if ((y=a) or (y=b)) and (c=sqr(R)) or (x1=x) and (y1=y) then
writeln('Точка (x,y) находится в точке пересечения графиков')
else
writeln('Точка (x,y) не входит в область пересечения')
end
else
writeln('Графики не образуют область пересечения');
writeln('Ошибка')
end
else
writeln('Ошибка')
end.
смотрим 38 строку
if (sqr(x1-x0)+sqr(y1-y0))<sqr(R) then
writeln('Графики образуют область пересечения');
begin
дальше идет код внутри begin, затем на 61 строке
end
else
Если выкинуть всю лишнюю начинку, то получается
if (sqr(x1-x0)+sqr(y1-y0))<sqr(R) then
writeln('Графики образуют область пересечения');
begin
end
else
Такой вопрос - а так можно писать? т.е. в несколько строчек условие без блока begin/end, т.е. без:
if (sqr(x1-x0)+sqr(y1-y0))<sqr(R) then
begin
writeln('Графики образуют область пересечения');
begin
end
end
else
Скорее всего Pascal вообще воспринимает код так:
if (sqr(x1-x0)+sqr(y1-y0))<sqr(R) then
writeln('Графики образуют область пересечения');
begin
end
else
и тогда else вообще непонятно откуда для него берется