Witajcie !
Staram się napisać program który wczyta macierze przerobi je wg wzoru i zapisze do pliku binarnego.
Niestety na poziomie procedury program wywala mi komunikat o przepełnieniu stosu.
Nie mogę dołapać się co jest tu źle dlatego proszę o pomoc.
Oto kod:
uses
SysUtils,
Math;
type macierz=array[1..250,1..250,1..250] of single;
var i,j,wiersz,kolumna,nr:integer;
S,T:macierz;
A:single;
p:text;
PlikDocelowy:file of macierz;
JEDYNKA:single;
PROCEDURE WczytajMacierz(T:macierz ; w,k:integer ; var n:integer);
var i,j:integer;
begin
readln;
writeln('Macierz T: ');
writeln;
for i:=1 to w-1 do
begin
for j:=1 to k-1 do
begin
read(p,T[n,w,k]);
write(T[n,w,k]:2:0,' ');
end;
writeln;
end;
end;
begin
writeln('PROGRAM PRZERABIAJACY MACIERZE Z PLIKU');
writeln;
writeln('Podaj parametr A: ');
readln(A);
assign(p,'macierze.txt');
reset(p);
assign(PlikDocelowy,'Macierze-S');
rewrite(PlikDocelowy);
nr:=0;
repeat
nr:=nr+1;
readln(p,wiersz,kolumna);
if (wiersz mod 2 = 0) then JEDYNKA:=1 else JEDYNKA:=-1;
if (kolumna mod 2 = 0) then JEDYNKA:=1 else JEDYNKA:=-1;
readln;
WczytajMacierz(T,wiersz,kolumna,nr);
writeln;
for i:=1 to wiersz do
begin
for j:=1 to kolumna do
begin
writeln('T[',nr,',',wiersz,',',kolumna,'] = ',T[nr,wiersz,kolumna]);
end;
end;
Writeln('Macierz S: ');
for i:=1 to wiersz do
begin
for j:=1 to kolumna do
begin
S[nr,wiersz,kolumna]:=sqrt(abs(JEDYNKA*T[nr,wiersz,kolumna]+JEDYNKA*T[nr,kolumna,wiersz]))/(sin(T[nr,wiersz,kolumna])+A);
write(S[nr,wiersz,kolumna]:2:0,' ');
end;
writeln;
end;
write(PlikDocelowy,S);
until (wiersz=0) and (kolumna=0);
close(PlikDocelowy);
close(p);
writeln;
Writeln('GRATULACJE!! Przerobiono ',nr-1,' macierzy T na S!');
Writeln('Plik zostal zapisany binarnie pod nazwa "MacierzeS"');
readln;
end.
A oto komunikat który wyskakuje na ułamek sekundy po wpisaniu wartośći "A" i wciśnięciu Enter:
Exception EStackOverflow in module cwkolos.exe at 000089C7.
Stack overflow.
Serdecznie dziękuję za każdy odzew i wybaczcie błędy programowe.