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

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

Форум «Всё о Паскале» _ Задачи _ Функции+массивы

Автор: -Виталий- 2.06.2008 12:08

Напишите функции для вычисления суммы отрицательных элементов двух
одномерных массивов произвольной длины (массива из вещественных и массива
целочисленных элементов).



Автор: -Виталий- 2.06.2008 15:06

Почему выдаёт ошибку 202: Stack overflow error. ????:

Код
uses crt;
const m=10; n=10;
var a:array [1..m] of real;
b:array [1..n] of integer;
i:integer;

function sumv:real; begin
for i:=1 to m do if a[i]<0 then sumv:=sumv+a[i]; end;
function sumc:integer; begin
for i:=1 to n do if b[i]<0 then sumc:=sumc+b[i]; end;

begin clrscr;
for i:=1 to m do begin a[i]:=random-0.25; write(a[i]:0:3,'  '); end; writeln;
for i:=1 to n do begin b[i]:=random(12)-5; write(b[i],'  '); end;

writeln; writeln('Sum_otr_V: ',sumv);
         writeln('Sum_otr_C: ',sumc);
readkey; end.



Автор: volvo 2.06.2008 17:39

Цитата
Почему выдаёт ошибку 202: Stack overflow error. ????:
Потому что у тебя бесконечная рекурсия:

function sumv:real; begin
for i:=1 to m do if a[i]<0 then sumv:=sumv{<--- Это - рекурсивный вызов !!! }+a[i]; end;
, и ниже по тексту то же самое...

Автор: Гость 2.06.2008 18:30

Ну и что здесь можно зделать?(((

Автор: volvo 2.06.2008 18:32

Использовать дополнительную переменную для подсчета:

function sumv:real;
var s: real;
begin
s := 0;
for i:=1 to m do if a[i]<0 then s:=s+a[i];
sumv := s;
end;

Автор: -Виталий- 2.06.2008 19:06

И как я сам не догадался?!?!?!))