Помогите откорректировать программу - Паскаль. Структура программы как у меня.Условие:...

0 голосов
100 просмотров

Помогите откорректировать программу - Паскаль. Структура программы как у меня.
Условие: Дан одномерный массив, состоящий из вещественных элементов. Найти сумму элементов массива, расположенных до последнего положительного элемента.
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;<br>if i<0 then writeln(0)<br>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.


Информатика (529 баллов) | 100 просмотров
0

я бы немного иначе решил.. просто заведи ещё одну переменную, в которую сохрани индекс последнего положительного элемента и циклом до последнего положительного просуммируй все элементы массива

0

Про 0 не сказано, но думаю, что да

0

или мне написать свое решение?

0

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

0

0 считается за положительное число?

0

нет, последнее не включается

0

сделаем.. а надо посчитать сумму до последнего положительного, включая это положительное число??

0

она, конечно, компилируется, но если есть что поправить - буду благодарна. Она компилируется, но считать она не считает. Если есть что поправить - буду благодарна.

0

кстати, в твоей программе куча синтаксических ошибок

0

Да, пожалуйста

Дано ответов: 2
0 голосов
Правильный ответ
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.
(558 баллов)
0

тут, если 0 считать положительным числом

0 голосов
строку
i:=1;
нужно поменять на
i:=n; (раз уж вы начинаете считать с конца)
а строки
while (i>=0) and (a[i]<=0) do i:=i-1;<br>if i<0 then writeln(0)<br>на
while (i>0) and (a[i]<=0) do i:=i-1;<br>if i=0 then writeln(0) (поскольку нет 0-ого элемента массива, и может выдаваться ошибка)


(8.5k баллов)
0

попробуй написать то же самое, только без объявления, просто программа не будет работать

0

А, ок. Просто в Pascal ABC.net, например, их объявлять не нужно.

0

да, в области объявления переменных они должны быть объявлены

0

Кстати, а разве input и output вообще надо объявлять?

0

Смотрел только на алгоритм. Спасибо.

0

а то, что файлы не объявлены, вас это не смутило..

0

Уже попробовал, да =)