Задан массив натуральных чисел размером 30 элементов.Элементы массива могут принимать...

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

Задан массив натуральных чисел размером 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.


Информатика (17 баллов) | 55 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Проверено, работает на Паскаль АВС:


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.


(52.6k баллов)
0 голосов

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.

Как-то так

(918 баллов)
0

Ну это исправить не сложно, у меня с объяснением проблемы, но у вас, как я вижу, с этим нормально :)

0

а во-вторых, насколько я знаю, раздел var изменять нельзя, то есть нельзя добавлять новые переменные

0

давай на "ты" :)

0

а комментарии - да, нужны. А то я запустил твою программу, она чего-то ждёт, а юзер не знает, что вводить :) Хоть какая-то подсказка нужна

0

давай, насколько знаю я, переменные нельзя изменять, если в задании это строго указано

0

, если же человеку нужно написать

0

программу и он рассказывает цель задачи, то можно вполне изменить.

0

извиняюсь за такое "черезстрочие", сайт думал, что в моём комментарии рукательства

0

А насчёт комментариев, опять же мой просчёт :)

0

кстати да, Сервис иногда чего-то придирается к словам в переписке