Program liczący całkę nie wczytuje a i b

0

Mam do napisania program, który liczy całkę oznaczoną numerycznie metodą prostokątów. Otóź napisałem program, ale nie czyta a i b(n czyta), dane wejściowe się nie wczytują.

program AiSD;
procedure CzytajDane( var n:integer; a,b: real);
// procedura wczytuje zmienne n, a, i b
begin
     write( 'Podaj liczbe przedzialow n: ' ); readln( n );
     writeln;
     write( 'Podaj poczatek przedzialu a: ' ); readln( a );
     writeln;
     write( 'Podaj koniec przedzialu b: ' ); readln( b );
     writeln;
end;
function Funkcja(var x:real) : real;
begin
     Funkcja := x*x;
end;

function LiczCalkeProstokatami (n:integer; a, b: real):real;
//funkcja oblicza calke i zwraca wynik
          var dx, xi, p, D, x: real;
          var i: integer;
begin
         dx := 0;
         xi := 0;
         D := 0;
         i:=1;
         x:=0; // argument funkcji kwadratowej
         dx:=(b-a)/n;
         while xi<=b do
         begin
                    xi:=a+dx*i;
                    x:=a+dx*(i-1)+dx/2;
                    p:=dx*Funkcja(x);
                    D:=D+p;
                    i:=i+1;
                    writeln('n=', n, 'a=',a:4:3, 'b=', b:4:3, 'dx=', dx:5:4,' xi=',xi:5:4,' x=',x:5:4,' p=',p:4:3,' D=',D:4:3,' i=',i)
         end;
         LiczCalkeProstokatami := D;
end;
procedure PiszWyniki(var D:real);
begin
         writeln('D: ', D);
end;
procedure CalkaProstokatna;
var n: integer;
    a,b, calka : real;
begin
     CzytajDane(n,a,b);
     calka := LiczCalkeProstokatami(n,a,b);
     PiszWyniki(calka);
end;

begin
     CalkaProstokatna;
     readln;
end.                                 

W załączniku co wyświetla się dla n=5 i przedziałów a=1 i b=2Zrzut ekranu 2022-11-30 124325.png

1

Zastąp na read(n); readln; dla a i b analogicznie.

0

Nie pomogło, dalej to samo.

3

Przekazujesz a i b jako kopie, a nie referencje.

procedure CzytajDane( var n:integer; a,b: real);

Brakuje var przed a,b.

0

Dzięki, działa :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1