Помогите откорректировать программу - Паскаль. Структура программы как у меня.
Условие: Дан одномерный массив, состоящий из вещественных элементов. Найти сумму элементов массива, расположенных до последнего положительного элемента.
program k;
var a:array[1..100] of real;
i,n,p,v: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>=0) and (a[i]<=0) do i:=i-1;
if i<0 then writeln(0)
else p:=i;
s:=0;
for i:=1 to p-1 do s:=s+a[i];
writeln(s:0:0);
close (input);
close (output);
end.

2
сделаем.. а надо посчитать сумму до последнего положительного, включая это положительное число??
нет, последнее не включается
0 считается за положительное число?
Формат выходных данных
Выведите в выходной файл искомую сумму с 3 знаками после десятичной точки или 0 , если в заданном массиве нет положительных элементов.
Про 0 не сказано, но думаю, что да

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

Лучший Ответ!
2013-12-14T17:12:59+00:00
var
a:array[1..100] of real;
i,n,last:integer;
s:real;
input,output:text;

begin
assign (input,'input.txt');
assign (output,'output.txt');
reset (input);
rewrite (output);

readln(n);

for i:=1 to n do begin 
  read(input,a[i]); 
  if (a[i] >= 0) then last:=i;end;

for i:=1 to last-1 dos:=s+a[i]; 

write(output,s:5:3);

close (input);
close (output);
end.
тут, если 0 считать положительным числом
  • Segrif
  • почетный грамотей
2013-12-14T17:14:00+00:00
строку
i:=1;
нужно поменять на
i:=n; (раз уж вы начинаете считать с конца)
а строки
while (i>=0) and (a[i]<=0) do i:=i-1;
if i<0 then writeln(0)
на
while (i>0) and (a[i]<=0) do i:=i-1;
if i=0 then writeln(0) (поскольку нет 0-ого элемента массива, и может выдаваться ошибка)


Кстати, а разве input и output вообще надо объявлять?
да, в области объявления переменных они должны быть объявлены
А, ок. Просто в Pascal ABC.net, например, их объявлять не нужно.
попробуй написать то же самое, только без объявления, просто программа не будет работать
Уже попробовал, да =)