Другие языки программирования и технологии

Паскаль. Почему перед Else нельзя ставить точку с запятой?

program p2;

var x1,y1,x2,y2,z,k,p,t,i:integer;

begin

readln(x1,y1,x2,y2);

if x1<x2 then

z:=x2-x1;

for i:=1 to z do

begin;

write('E')

end; {здесь ругается}

else z:=x1-x2

for i:=1 do z

write ('W');

end;

if y1<y2 then

k:=y2-y1

for i:=1 do k

write('N');

end;

else t:=y1-y2

for i:=1 do t

write ('S');

end;

End.
Volodymyr Gryshuk
Volodymyr Gryshuk
290
Так не ставьте, if-then-else - составной условный оператор, перед лексемами которого нельзя ставить ;
Перед "do" же не ставите?

У Вас оформлено вообще криво! Простым удалением ; проблему не исправить.

UPD: http://pastebin.com/DnwwsyLq вот код, откройте ссылку и запускайте!
Владислав Лошакевич
Владислав Лошакевич
1 237
Лучший ответ
во-первых, begin-end требуется для перечисления нескольких действий; во-вторых, у вас много ошибок:

program p2;

var x1,y1,x2,y2,z,k,p,t,i:integer;

begin

readln(x1,y1,x2,y2);

if x1<x2 then

begin { пропущено, т. к. несколько действий }

z:=x2-x1;

for i:=1 to z do write('E'); { здесь только одно действие => begin не нужен }

end { конец первого begin без точки с запятой }

else

begin { несколько действий }

z:=x1-x2; { пропущена точка с запятой }

for i:=1 to z { ошибка! не do, a to } do { здесь уже do } write('W');

end; { конец инструкции else }

if y1<y2 then

begin { несколько действий }

k:=y2-y1; { точка с запятой }

for i:=1 to k { не do, a to } write('N');

end { конец инструкции if без точки с запятой }

else

begin { несколько действий }

t:=y1-y2; { пропущена точка с запятой }

for i:=1 to t { не do, a to} do write ('S');

end; { конец инструкции else }

End. { конец программы }
Иван Иванов
Иван Иванов
5 405
Так надо) запяточку ставят в конце строки, короче как точку в конце предложения. А Else это не конец) вот так уот.
Женя Трошин
Женя Трошин
4 683