Помогите откорректировать середину программы. Необходимо найти сумму элементов массива, расположенных между первым и вторым положительными элементами.
Моя программа:
var a:array[1..100]of real;
i,n,k,p:integer;
s:real;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do read(a[i]);
i:=1;
while(i<=n)and(a[i]<=0) do i:=i+1;
if i>n then writeln('0')
else begin
k:=i;
i:=n;
while(i>=1)and(a[i]<=0)do i:=i-1;
if i<1 then writeln('0')
else begin
for i:=k+1to p-1 do s:=s+a[i];
writeln(s:0:3);
end;
end;
close(input);
close(output);
end.

1
Комментарий удален
Комментарий удален
Комментарий удален
да

Ответы и объяснения

Лучший Ответ!
2014-03-09T19:26:00+00:00
  readln(n);
  for i := 1 to n do
    read (a[i]);
  i := 1;
  while (i <= n) and (a[i] <= 0) do
    i := i + 1;
  if i > n then writeln ('0')
  else
  begin
    k := i;
    i := i + 1;
    while (i <= n) and (a[i] <= 0) do
      i := i + 1;
    if i > n then writeln ('0')
    else
    begin
      p := i;
      for i := k + 1 to p - 1 do
        s := s + a[i];
      writeln(s:0:3);
    end;
  end;

Что я сделал: после нахождения первого элемента не надо идти в конец и с конца перебирать в другую сторону. Надо просто продолжить в том же направлении с того же места. И надо не забыть найденное значение сохранить в P - у Вас она вовсе не инициализировалась.