Как исправить? 
Код программы:
Uses CRT;                   {Раздел объявления внешних модулей}
Label M1,M2;
Var
n: integer;
x,y,b: real;
p: byte;                        {Признак выполнения пункта N1} 
Begin
ClrScr;                         { Очистка экрана }
WriteLn('Программа вычисления функции...');
{Вывод на экран меню}
writeln('+--------------------------------------------+');
writeln('| 1. Ввод данных                             |');
writeln('| 2. Вычисление функции и вывод результатов  |');
writeln('| 3. Завершение работы программы             |');
writeln('+--------------------------------------------+');
p:=0;
M1: WriteLn('введите пункт меню');
readln(n);                  {Ввод номера пункта меню}
case n of
1: 
Begin                    {Ввод данных}
M2: Write('Введите значение аргумента x=');
readln(x);
{Проверка допустимого значения аргумента}
if x = 8 then 
begin
  WriteLn('x не может быть равным 0 по условию');
  goto M2; 
End;
p:=1;                       {Пункт N1 выполнен}
end;
2:      {Вычисление значения функции}
Begin
If  p = 0  then
  WriteLn('Данные не введены, выполните пункт N1')
else     
begin 
{Операторы вычисления и вывода значения функции}
y := sqr(x) + 4*x - 8;
if x > 2 then
    y := 1/y;
writeln('при х=', x:7:2, ' y=', y:7:2)
end;
end;
3: Exit                     {Выход из программы}
end;                        {end case}
goto M1; 
end.                    {Конец программы}