Задан массив натуральных чисел размером 30 элементов.элементы массива могут принимать значения от 1 до 1000.напишите программу в паскале нахождения и вывода на экран суммы элементов самой длинной последовательности подряд идущих нечетных элементов массива.если такой последовательности не существует, то программа должна вывести об этом сообщение.если таких последовательностей несколько, то суммировать можно элементы любой из них.входные данные: program rabota_s_massivom; const n=30; var m: array[1..n] of integer; i,k,s,kmax,reserve: integer; begin for i: =1 to n do readln(m[i]); end.

френки9 френки9    2   05.06.2019 19:20    0

Ответы
ржакаmaker ржакаmaker  06.07.2020 07:45
Проверено, работает на Паскаль АВС:

Program rabota_s_massivom;
uses crt;
label metka;
const N=30;
var M: array[1..N] of integer;
i,k,s,kmax,reserve:integer;
begin
  for i:=1 to N do
    begin
      write('Введите ',i,'-й элемент: '); readln(M[i]);
    end;
  writeln('Массив:');
  for i:=1 to N do
    begin
      write(M[i],' ');
    end;
  k:=1; {Число элементов в текущей последовательности. Изначально считаем, что последовательность состоит из одного (первого) элемента}
{Ищем первый нечётный элемент:}
  repeat
    reserve:=reserve+1;
  until (m[reserve] mod 2 = 1) or (reserve = 30);
  writeln(reserve);
  if (m[reserve] mod 2 = 0) and (reserve = 30) then
  begin
    writeln('Все числа чётные. Искомая последовательность не существует');
    goto metka;
  end;
  s:=M[reserve]; {Сумма элементов текущей последовательности пока что равна первому нечётному элементу}
  kmax:=0; {Наибольшая длина последовательности}
  for i:=reserve+1 to n do {Перебираем все элементы, начиная с первого нечётного}
    begin
      if (m[i] mod 2 = 1)
        then {Если текущее число всё ещё нечетно}
          begin
            s:=s+m[i]; {Увеличиваем сумму последовательности}
            k:=k+1 {Увеличиваем счётчик длины последовательности}
          end
        else {Если встретилось четное число}
          begin
            if k>kmax then {Проверяем, не является ли полученная последовательность длиннее нашего максимума}
              begin {Если да:}
                kmax:=k; {Запоминаем новую длину последовательности}
                reserve:=s {Запоминаем сумму её элементов}
              end;
            k:=0; {Устанавливаем длину новой последовательности равной 0}
            s:=0  {Сумма элементов этой последовательности тоже пока что = 0}
          end;
    end;
  if k>kmax then  {Если самая длинная последовательность находится в конце массива, проверим ещё раз текущий максимум}
    begin
      kmax:=k;
      reserve:=s
    end;
  writeln('самая длинная последовательность нечётных чисел состоит из ',kmax,' элементов');
  writeln('и сумма этой последовательности равна ',reserve);
metka: end.
ПОКАЗАТЬ ОТВЕТЫ
Abdua245 Abdua245  06.07.2020 07:45
Program rabota_s_massivom;
const  
  N = 10;
var
  M : array[1..N] of integer; 
  i, max, nowMax, maxIndex, index, summ : integer;
begin 
  for i := 1 to N do   
    readln(M[i]); 
  for i := 1 to N do 
  begin   
    if M[i] mod 2 > 0 then
    begin
      if nowMax = 0 then
        index := i;
      nowMax := nowMax + 1;
      if (i = N) and (nowMax > max) then
      begin
        max := nowMax;
        maxIndex := index;
      end;
    end
    else
      if nowMax > max then
      begin
        max := nowMax;
        maxIndex := index;
        nowMax := 0;
      end;
  end;
  if max = 0 then
    writeln('Не существует')
  else
  begin
    summ := 0;
    for i := maxIndex to maxIndex + max - 1 do
      summ := summ + M[i];
    writeln('Сумма: ', summ);
  end;
end.

Как-то так
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика