Упростить программу. Избавиться от Goto - Pascal ABC

Формулировка задачи:

Нужно, чтобы не было лейбел, но программа не меняла своей сути . ОЧЕНЬ СРОЧНО!!!
Program slogno;
label dl3,dl2;
var s,x:real; a,b,h,z,s1,sum:real;
i,v,k,n,g,c,fiks:integer;
 
 
procedure menu(k:integer);
begin
writeln('1.Выполнение вычислений с заданным числом повторений');
writeln('2.Выполнение вычислений с заданной точностью');
writeln('Введите номер пункта:');
readln(g);
end;
 
procedure vivod (var sum:real);
begin
writeln('Sum=',sum);
end;
 
function integral(x:real):real;
begin
integral:=1/sqrt(1+3*x+2*x*x);
end;
 
Procedure povt(var a,b:real; var n:integer; var sum:real);
var h,s:real;
i:integer;
 begin
   x:=a;
   s:=0;
   sum:=0;
   h:=(b-a)/n;
  for i:=1 to n do
   begin
    s:=integral(x)*h;
    x:=x+h;
    sum:=sum+s;
    end;
 end;
 
 
procedure tocn (var a,b,s1:real);
var sum:real;
label 1;
var i,n:integer;  f,r:real;
begin
n:=3;
s1:=0;
f:=0.0001;
h:=(b-a)/n;
povt(a,b,n,sum);
1:n:=2*n ;
h:=(b-a)/n;
s1:=sum;
povt(a,b,n,sum);
if f<abs(sum-s1) then goto 1 else writeln('S1=',s1:3:5);
end;
 
procedure vibor (var k:integer);
begin
case g of
1:povt(a,b,n,sum);
2:tocn (a,b,s1);
else writeln('Некоректный ввод')
end;
end;
 
//Основная программа
begin
a:=0;
b:=1;
n:=44;
begin
dl3:menu(k);
vibor(k);
vivod(sum);
writeln('Выбрать еще раз?');
writeln('1 ---Да');
writeln('0 --- Нет');
readln(v);
if v=1 then goto dl3;
if v=0 then writeln('Программа отработала');
if (v<0) or (v>1) then  goto dl3
end;
end.

Код к задаче: «Упростить программу. Избавиться от Goto - Pascal ABC»

textual
program slogno;
 
var
  s, x: real;
  a, b, h, z, s1, sum: real;
  i, v, k, n, g, c, fiks: integer;
 
 
procedure menu(k: integer);
begin
  writeln('1.Выполнение вычислений с заданным числом повторений');
  writeln('2.Выполнение вычислений с заданной точностью');
  writeln('Введите номер пункта:');
  readln(g);
end;
 
procedure vivod(var sum: real);
begin
  writeln('Sum=', sum);
end;
 
function integral(x: real): real;
begin
  integral := 1 / sqrt(1 + 3 * x + 2 * x * x);
end;
 
procedure povt(var a, b: real; var n: integer; var sum: real);
var
  h, s: real;
  i: integer;
begin
  x := a;
  s := 0;
  sum := 0;
  h := (b - a) / n;
  for i := 1 to n do
  begin
    s := integral(x) * h;
    x := x + h;
    sum := sum + s;
  end;
end;
 
 
procedure tocn(var a, b, s1: real);
var
  sum: real;
var
  i, n: integer;
  f, r: real;
begin
  n := 3;
  s1 := 0;
  f := 0.0001;
  h := (b - a) / n;
  povt(a, b, n, sum);
  while true do
  begin
    n := 2 * n;
    h := (b - a) / n;
    s1 := sum;
    povt(a, b, n, sum);
    if f >= abs(sum - s1) then 
      break;
  end;    
  writeln('S1=', s1:3:5);
end;
 
procedure vibor(var k: integer);
begin
  case g of
    1: povt(a, b, n, sum);
    2: tocn(a, b, s1);
  else writeln('Некоректный ввод')
  end;
end;
 
//Основная программа
begin
  a := 0;
  b := 1;
  n := 44;
  while true do 
  begin
    menu(k);
    vibor(k);
    vivod(sum);
    writeln('Выбрать еще раз?');
    writeln('1 ---Да');
    writeln('0 --- Нет');
    readln(v);
    if v = 0 then 
    begin
      writeln('Программа отработала');
      exit;
    end;
  end;
end.

8   голосов, оценка 3.500 из 5


СОХРАНИТЬ ССЫЛКУ