mam taki problem że mój program liczący całkę oznaczoną nie potrafi sobie poradzić z liczbami spoza przedziału <-9,9> jednocześnie nie należącymi do całkowitych. zastanawiam się w jaki sposób można by to zrobić
program calka;
uses crt;
const
max=50;
step=1/1000;
var
v,y,z:text;
n,m,i,d,l,m2:integer;
l3:integer;
o,x,p,q,b,c,m1:real; // granice calkowania b,c granice calkowania
t: array [1..max] of char; // wejscie
s: array [1..max] of char; // stos symboli
w: array [1..max] of char; //wyjscie
k: array [1..max] of real;// wynik onp
h1: array [1..1000000] of real;// calka
h2: array [1..1000000] of real;// calka
kod,kod2:word;
a:string[50]; // nasza funkcja
procedure obliczonp(r:integer);
begin
for i:=1 to d do
begin
if w[i] in ['0','1','2','3','4','5','6','7','8','9'] then
begin
val(w[i],k[r],kod);
r:=r+1;
end
else if w[i] in ['x'] then
begin
if c>b then
begin
k[r]:=x;
r:=r+1;
end
else
begin
x:=c;
end;
end
else if w[i] in ['*'] then
begin
p:=k[r-1];
q:=k[r-2];
k[r-2]:=p*q;
r:=r-1;
end
else if w[i] in ['+'] then
begin
p:=k[r-1];
q:=k[r-2];
k[r-2]:=p+q;
r:=r-1;
end
else if w[i] in ['/'] then
begin
p:=k[r-2];
q:=k[r-1];
k[r-2]:=p/q;
r:=r-1;
end
else if w[i] in ['-'] then
begin
p:=k[r-1];
q:=k[r-2];
if q=0 then // warunek dla '-' bedacym minusem znakowym
begin
k[r-1]:=-p
end
else if q<>0 then
begin
k[r-2]:=q-p;
r:=r-1;
end;
end
else if w[i] in ['='] then
begin
o:=k[r-1];
end;
end;
//writeln(k[r-1]:5:2); // kontrola czy dobrze liczy
end;
procedure onp(j,k:integer);
begin
for i:=1 to max do
begin
if t[i] in ['0','1','2','3','4','5','6','7','8','9','x'] then
begin
w[j]:= t[i];
j:=j+1;
end
else if t[i] in ['('] then
begin
s[k]:=t[i];
k:=k+1;
end
else if t[i] in [')'] then
begin
repeat begin
w[j]:=s[k-1];
j:=j+1;
k:=k-1;
end; until s[k-1] in ['('];
s[k]:= t[max]; // prowizoryczne zerowanie
end
else if t[i] in['='] then
begin
for k:=k-1 downto 1 do //zrzucanie operatorow ze stosu
begin
w[j]:=s[k];
j:=j+1;
end;
w[j]:='=';
end
else if t[i] in ['+','-'] then
begin
if s[k-1] in ['+','-','/','*'] then
begin
for l:=1 to k-1 do
begin
if s[k-1] in ['+','-','/','*'] then //priorytety wykonywania dzialan
begin
w[j]:=s[k-1];
k:=k-1;
s[k]:=t[i];
j:=j+1;
end;
end;
k:=k+1;
end
else
begin
s[k]:=t[i];
k:=k+1;
end;
end
else if t[i] in ['/','*'] then
begin
if s[k-1] in ['/','*'] then //priorytety wykonywania dzialan
begin
w[j]:=s[k-1];
s[k-1]:=t[i];
j:=j+1;
end
else
begin
s[k]:=t[i];
k:=k+1;
end;
end;
end;
write('wzor onp przyjmuje postac ');
for j:=1 to j do
begin
write(w[j]);
d:=j;
end;
writeln;
writeln;
writeln;
end;
procedure prostokat();
begin
writeln('wybrano metode prostokatow');
for n:=1 to n do
begin
h1[n+1]:=h1[n+1]+h1[n];
end;
writeln('calka w przyblizeniu wynosi');
writeln(h1[m2]*step:5:5);
end;
procedure trapez();
begin
writeln('wybrano metode trapezopodobna');
begin
for n:=1 to n do
begin
h2[n+1]:=h2[n+1]+h2[n]
end;
writeln('calka w przyblizeniu wynosi');
writeln((2*h2[m2]-h2[1])/2*step:5:5);
end;
end;
begin
begin
begin
Writeln('Zanim zaczniesz korzystac z programu calka upewnij sie ze w pliku "calka.txt" ');
Writeln('jest wzor funkcji calkowanej zakonczonej znakiem "=", a w plikach "calka2.txt oraz "calka3.txt" ');
Writeln('odpowiednio dolna i gorna granica calkowania');
Writeln('');
ASSIGN(v, 'calka.txt');
ASSIGN(y, 'calka2.txt'); {granica górna calkowania}
ASSIGN(z, 'calka3.txt'); {granica dolna calkowania}
reset(v);
reset(y);
reset(z);
readln(v, a);
readln(y, b);
readln(z, c);
close(v);
close(y);
close(z);
end;
write('wzor f calkowanej '); writeln(a);
write('Dolna grania calki: '); writeln(b:5:5);
write('gorna granica calki: '); writeln(c:5:5);
t:=a ; {nadaje tabeli stringi z pliku "calka.txt"}
onp(1,1);
x:=b;
obliczonp(1);
n:=1;
repeat
obliczonp(1);
x:=x+step;
h1[n]:=o;
h2[n]:=o;
n:=n+1;
until x>c;
end;
m1:=(c-b)/step;
m2:=round(m1);
writeln('wybierz metode calkowania');
writeln('1 metoda prostokatow');
writeln('2 metoda trapezopodobna (dokladniejsza przy wyzszych potegach)');
writeln('3 obie metody jednoczesnie');
readln(l3);
if l3=1 then
begin
writeln;writeln;writeln;
prostokat;
end
else if l3=2 then
begin
writeln;writeln;writeln;
trapez;
end
else if l3=3 then
begin
writeln;writeln;writeln;
trapez;
writeln;writeln;writeln;
prostokat;
end;
Repeat until keypressed;
end.
jak mniej lub bardziej widać program opiera się o ONP i teraz mam prośbę czy ktoś mógłby mi pomóc przerobić go tak by działały w nim wszystkie liczby real lub chociaż integery?