Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2012, 20:14   #1
GreenMan
 
Регистрация: 16.02.2012
Сообщений: 7
Печаль Найти сумму элементов между первым и вторым отрицательным элементами. Что у меня неправильно?

Задача: дан массив из n чисел. Найти сумму элементов между первым и вторым отрицательным элементами. В первой строке файла input.txt записано число n, во второй - сам массив. В выходном файле (output.txt) записать искомую сумму с 3 знаками после запятой или 0, если в массиве меньше 2 отрицательных элементов.
Задача, вроде, несложная. Я её решил, но проходят только 17 из 20 тестов (на портале school.sgu.ru). Пробую свои варианты - всё правльно выходит... Может, я не вижу ошибку? Что у меня не так, подскажите, пожалуйста?
Код:
var a:array[1..100] of real;
fn,sn,i,n,q:integer;
sum:real;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
sum:=0;
readln(n);
fn:=0;
i:=0;
repeat
  i:=i+1;
  read(a[i]);
  if a[i]<0 then fn:=i;
  until (a[i]<0) or (i>=n);
if i>=6 then sn:=fn else
  begin
  repeat
    i:=i+1;
    read(a[i]);
    if a[i]<0 then sn:=i;
    until (a[i]<0) or (i>=n);
  end;
if fn=sn then write(0) else
  begin
  if (sn-fn)>1 then
    begin
    fn:=fn+1;
    sn:=sn-1;
    for q:=fn to sn do
      sum:=sum+a[q];
    write(sum:4:3);
    end
  else write(0);
  end;
close(input);
close(output);
end.
А вот ещё одно моё решение, тут проходят 18 тестов из 20:
Код:
var a:array[1..100] of real;
i,n,fneg,sneg,k:integer;
sum,chsneg,chfneg:real;
label m1;
begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
readln(n);
sum:=0;
fneg:=0;
i:=0;
chfneg:=0;
repeat
  i:=i+1;
  read(a[i]);
  if a[i]<0 then chfneg:=a[i];
  until (a[i]<0) or (i=n);
if chfneg=0 then fneg:=0 else fneg:=i;
if fneg=n then
  begin
  sneg:=n;
  goto m1;
  end;
chsneg:=0;
sneg:=0;
repeat
  i:=i+1;
  read(a[i]);
  if a[i]<0 then chsneg:=a[i];
  until (a[i]<0) or (i=n);
if chsneg=0 then sneg:=0 else sneg:=i;
m1:if sneg=fneg then write(0) else
  if sneg>fneg then
    if (sneg-fneg)>1 then
      begin
      fneg:=fneg+1;
      sneg:=sneg-1;
      for k:=fneg to sneg do
	sum:=sum+a[k];
      write(sum:4:3);
      end
    else write(0)
  else write(0);
close(input);
close(output);
end.

______________
Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В последующем, темы с подобным названием будут закрываться или удаляться,
а автор такой темы будет получать штрафные баллы.
Учтите это на будущее.

Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.02.2012 в 22:48.
GreenMan вне форума Ответить с цитированием
Старый 25.02.2012, 22:47   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, не вижу ПОЛНОЙ формулировки исходной задачи.
Например, почему Вы выделяете массив из 100 чисел?!

во-вторых, массив для решения данной задачи вообще не нужен. Достаточно читать по одному элементу в цикле, суммировать и прерывать цикл если встретили второе отрицательное значение.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.02.2012, 13:59   #3
GreenMan
 
Регистрация: 16.02.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, не вижу ПОЛНОЙ формулировки исходной задачи.
Например, почему Вы выделяете массив из 100 чисел?!

во-вторых, массив для решения данной задачи вообще не нужен. Достаточно читать по одному элементу в цикле, суммировать и прерывать цикл если встретили второе отрицательное значение.
  1. Вот: Дан одномерный массив, состоящий из n вещественных элементов. Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
    Формат входных данных
    В первой строке входного файла содержится число n (1≤n≤100). Во второй строке даны n вещественных чисел через пробел.
    Формат выходных данных
    Выведите в выходной файл искомую сумму с 3 знаками после десятичной точки или 0, если в заданном массиве меньше отрицательных элементов.
    Примеры: Вход 5 -1.87 2.63 -0.01 9.86 -3.77 Выход 2.630
  2. Как прервать цикл?
GreenMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Найти сумму отрицательных и сумму положительных элементов линейного массива. badname47 Паскаль, Turbo Pascal, PascalABC.NET 1 07.02.2012 06:29
Найти сумму элементов последовательности между первым и последним нулем. alonix Помощь студентам 6 16.01.2012 04:48
Вычислить сумму элементов массива, расположенных между первым и последним положительными элементами Fitch573 Помощь студентам 4 09.01.2012 18:04
найти сумму элементов массива расположных между первым и последним положительным Julila Помощь студентам 9 06.01.2011 02:32
Найти сумму чисел последовательности, расположенных между максимальным отрицательным и минимальным положи Maks6169 Помощь студентам 6 02.12.2009 10:38