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

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

Форум «Всё о Паскале» _ Задачи _ Загадочный модуль.

Автор: Aileen 30.09.2007 17:48

Нужно было составить функцию, вычисляющую сумму отрицательных элементов массива Y1,Y2,Y3,...,Yn, используя модуль. Проблема в том, что компилятор указывает на stack overflow, ошибку 202. Посоветуйте,пожалуйста, как избавиться от неё!!!!!!!

Модуль:


unit pr1;
Interface
const n=6;
type mas=array[1..n] of integer;
function sum(a:mas;d:integer):integer;
procedure vvod(var a:mas;d:integer);
Implementation
function sum;
var sum1,i:integer;
begin
sum1:=0;
for i:=1 to d do
if a[i]<0 then sum1:=sum1+a[i];
writeln('сумма элементов:',sum(a,i));
end;
procedure vvod;
var i:integer;
begin
for i:=1 to d do
write(a[i]);
writeln;
end;
end.

Сама программа:
program pr1_1;
uses pr1;
var b:mas;
i:integer;
begin
vvod(b,n );
sum(b,n);
end.


М
Теги !


Автор: volvo 30.09.2007 17:58

Цитата
как избавиться от неё
Убрать бесконечную рекурсию:

function sum;
var sum1,i:integer;
begin
sum1:=0;
for i:=1 to d do
if a[i]<0 then sum1:=sum1+a[i];
writeln('сумма элементов:',sum1); { <--- Здесь }
end;

(хотя я бы просто возвращал результат, и распечатывал его уже в основной программе... Функция все-таки, а не процедура...)

Кстати, у тебя в процедуре Vvod почему-то происходит "вывод", надо бы поменять write(a[i]) на readln(a[i]) ...

Автор: Aileen 30.09.2007 18:04

ввод - это техническая отчепятка )))
спасибо за помощь, сйчас попробую запустить...

Добавлено через 15 мин.
Итог запуска: с модулем всё в порядке, а программа не идёт. =(

Автор: volvo 1.10.2007 21:38

Цитата
программа не идёт.
Исправленную версию - в студию... Только уже без "технических опечаток"...