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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2010, 08:51   #1
cheef
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 205
По умолчанию Максимальное кол-во подряд идущих элементов одн. массива

Нужно посчитать максимальное кол-во подряд идущих отрицательных элементов одномерного массива.
Код:
program dsa;
uses crt;
const
n=7;
a:array[1..n] of integer = (2,-3,-4,-5,6,-7,5);
var b,c,d,i:integer;
begin
clrscr;
for i:=1 to n do
begin
if a[i]<0 then b:=b+1;
end;
writeln(b);
readln;
end.
Получается найти только общее кол-во отрицательных или просто первые подряд идущие, а потом прерывание. Подкиньте мысль пожалуйста или пример.
cheef вне форума Ответить с цитированием
Старый 17.06.2010, 09:10   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Вот так:
Код:
b:=0;t:=0;
for i:=1 to n do
begin
      if a[i]<0 then b:=b+1
      else begin t:=b;b:=0;end;
end;
write(t);
_-Re@l-_ вне форума Ответить с цитированием
Старый 17.06.2010, 09:20   #3
cheef
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 205
По умолчанию

a:array[1..n] of integer = (2,-3,-4,-5,6,-7,5);
Массив то вот такой. Как вы написали он сначала считает до 3 (2,-3,-4,-5,6,-7,5); потом сбрасывает это и (2,-3,-4,-5,6,-7,5); один элемент считает. Мне ещё их нужно сравнить и где больше подряд идущих те вывести.
cheef вне форума Ответить с цитированием
Старый 17.06.2010, 09:52   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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

p.s. будут сложности, напишу пример...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.06.2010, 10:09   #5
cheef
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 205
По умолчанию

У меня проблемы возникают с этим моментом:
Если положительный элемент, то кинуть в переменную число предыдущих отрицательных. Там же цикл и, если в переменную это добавить, то при следующем обороте цикла, если такая ситуация будет, то значение этой переменной просто напросто заменится новым значением. А мне ещё их нужно сравнить и не известно сколько будет там таких отрицательных отрезков.
cheef вне форума Ответить с цитированием
Старый 17.06.2010, 11:08   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

прошу.

Код:
program dsa;
uses crt;
const
  n=10;
  a:array[1..n] of integer = (2,-3,-4,-5,6,-7,-5,-1,-3,-2);
var
  i, MaxLen, Imax, CurLen : integer; 
begin
  clrscr;
  {выведем весь массив на экран}
  for i:=1 to n do Write(a[i]:1,' ');
  WriteLn;

  MaxLen := 0;  
  iMax := -1;

  CurLen := 0;
  i := 1;
  while i<=n do begin
    if a[i]<0 then Inc(CurLen)
    else begin
      if CurLen>MaxLen then begin
        MaxLen := CurLen;
        iMax := i-CurLen;
      end;
      CurLen := 0
    end;
    inc(i);
  end;

  {дополнительная проверка, если массив
     закончился максимальной по длине отрицательной серией}
  if CurLen>MaxLen then begin
        MaxLen := CurLen;
        iMax := i-CurLen;
  end;

  {вывод результатов}
  if iMax<0 then WriteLn('Нет никаких последовательностей!')
  else 
    WriteLn('Максимальная длина последовательности = ',MaxLen:1,
            ' начинается с ',iMax:1);

  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.06.2010, 13:17   #7
cheef
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 205
По умолчанию

Спасибо
cheef вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача о шести подряд идущих единицах. llTibegll Помощь студентам 11 06.11.2009 10:04
Массив чисел (найти 4 идущих подряд чётных числа) SeregaKo Общие вопросы Delphi 2 18.05.2009 23:09
Необходимо определить максимальное значение, хранимое в 2-х массивах и указать сумму элементов массива Игорь777 Помощь студентам 1 29.03.2009 21:14
найти подпоследовательность из подряд идущих элементов с наибольшей суммой на С++ aj_tramp Помощь студентам 2 12.12.2008 08:57