Цитата(граф Монте-Кристо @ 1.11.2012, 23:32) *

1. В программе не нужно вызывать pot в цикле - зачем? Вызовите её 1 раз для первого элемента.
2. Если очередной элемент равен нулю, то нужно pot приравнивать не к 1, а к рекурсивному вызову функции (как в следующей строке, только без множителя a).
3. Определитесь, как Вы будете идти по массиву: от начала к концу, или от конца к началу. В первом случае изначально нужно вызывать pos для первого элемента, а в ней вызывать p(i+1,a). Если от конца к началу - тогда, соответственно, всё наоборот.
4. В функции pos нужно проверять, что каждый раз индекс не выходит за границы массива.

Вот полученная программа:
[i]...
function pot(i:integer;a:Mas):integer;
begin
if a[i]=0 then pot:=pot(i-1,a) else
if a[i]<0 then pot:=a[i]*pot(i+1,a);
end;
...
{pot в программе уже вызывается без цикла}

Проверка:
4
a[1]=2
a[2]=3
a[3]=-4
a[4]=-5
Error 202: Stack overflow error.

4
a[1]=-1
a[2]=-2
a[3]=-3
a[4]=4
3812

Я не понимаю в чём проблема. Натолкните, пожалуйста, на правильную дорогу.