Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Что-то с функцией.

Автор: DarkWishmaster 13.12.2010 23:07

Здравствуйте!

Program P3; uses crt;                                                         
type matrice=array[1..100,1..100] of integer;
var a:matrice; i,j,s,n:integer;
function F(n:integer;a:matrice):integer;
var i,j,s:integer;
begin
for i:=1 to n do
for j:=1 to n do begin
if (i=n-j+1) and (a[i,j] mod 5=0) then
S:=S+a[i,j];
end;
F:=S; end;
begin clrscr;
readln(n);
for i:=1 to n do
for j :=1 to n do begin
write('a[',i,',',j,']='); read(a[i,j]);
end;
writeln('Suma numerelor este ',F(n,a));
writeln('Matrice:');
for i:=1 to n do begin
for j:=1 to n do
write(a[i,j], ' ');
writeln;
end;
readln; readln; {почему-то с 1 не пашет}
end.
{stack overflow}


Тут програма должна отображать суму чисел которые делятся на 5 без остатка по вторичной диагонале.
Без функции програма работает, с ней нет. Может я как-то не так всё сделал.


Автор: volvo 13.12.2010 23:28

Ошибка - это "переполнение стека"? Ожидаемо, потому что по умолчанию размер стека = 16К, размер массива, который передается в функцию - около 20К. Все, стек закончился, и вылетает ошибка. Если передать массив вот так:

function F(n:integer;CONST a:matrice):integer;
, то должно заработать. Я прав?

P.S. Не забудь обнулить переменную S внутри функции, иначе будешь получать странные результаты.

Автор: DarkWishmaster 13.12.2010 23:54

Цитата(volvo @ 13.12.2010 20:28) *

Ошибка - это "переполнение стека"? Ожидаемо, потому что по умолчанию размер стека = 16К, размер массива, который передается в функцию - около 20К. Все, стек закончился, и вылетает ошибка. Если передать массив вот так:
function F(n:integer;CONST a:matrice):integer;
, то должно заработать. Я прав?

P.S. Не забудь обнулить переменную S внутри функции, иначе будешь получать странные результаты.


Заработало!!! Спасибо большое!