Помощь - Поиск - Пользователи - Календарь
Полная версия: модуль
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
wait
Вот задача: написать модуль с введением, выведением массива и подсчетом суммы его элементов.Присоединяю к главной программе - ошибка переполнения стека(202) даже при массиве 2*2... Помогите, пожалуйста

Код
unit l11;
interface
const ms=5;ns=5;
type massiv=array[1..ms,1..ns] of real;
procedure input(var mas:massiv;m,n:byte);
procedure output(mas:massiv; m,n:byte);
function sum(mas:massiv; m,n:byte):real;
implementation
procedure input;
var i,j:byte;
begin
write('m=');
readln(m);
write('n=');
readln(n);
for i:=1 to m do
for j:=1 to n do
begin
write('mas[',i,',',j,']=');
readln(mas[i,j]);
end;
end;
procedure output;
var i,j:byte;
begin
for i:=1 to m do
begin
for j:=1 to n do
write(mas[i,j]:4);
writeln;
end;
end;
function sum;
var i,j:byte;
begin
sum:=0;
for i:=1 to m do
for j:=1 to n do
sum:=sum(mas,m,n)+mas[i,j];
end;
end.

извините, но теги что-то не работают...
volvo
Во-первых, теги работают, а насчет переполнения стека -
Код
function sum;
var i,j:byte;
begin
sum:=0;
for i:=1 to m do
for j:=1 to n do
sum:=sum(mas,m,n)+mas[i,j]; { < --- это что, рекурсия? }
end;

если это действительно рекурсия, то она неправильно оформлена. Но мне почему-то кажется, что требовалось сделать вот так:
Код
function sum;
var
 i,j:byte;
 s: real;
begin
 s:=0;
 for i:=1 to m do
   for j:=1 to n do
     s:=s+mas[i,j];
 sum := s
end;


P.S. Еще один вопрос:
В процедуру Input передаются значения m и n... Зачем же их вводить еще раз. Если же их нужно вводить в процедуре, то ее заголовок нужно изменить на вот такой:
Код
procedure input(var mas:massiv;var m,n:byte);

иначе введенные m и n просто не передадутся вызывающей программе...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.