1-11 класс
  • 1-11 класс
  • 1 класс
  • 2 класс
  • 3 класс
  • 4 класс
  • 5 класс
  • 6 класс
  • 7 класс
  • 8 класс
  • 9 класс
  • 10 класс
  • 11 класс
Выберите класс
Предметы
(Сам и контр)
Задание 2 Вариант 3 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)
Босова, Босова, Аквилянов
11 класс
Класс
11
Предмет
Информатика
Автор
Босова, Босова, Аквилянов

Задание 2 Вариант 3 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)

Задача
  1. Напишите программу. Известны факты выпадения осадков за каждый день лета (0 — нет осадков, 1 — есть осадки). Найдите первый самый продолжительный участок лета без осадков, а также месяц начала и месяц конца этого участка. Запишите текст программы.
Подробный ответ

Нужно просмотреть массив из $$92$$ элементов, где $$0$$ означает день без осадков, а $$1$$ — день с осадками. Затем найти самый длинный подряд идущий участок из нулей и определить, в каком месяце он начинается и заканчивается.

Для этого удобно:

  • сгенерировать или считать массив значений;
  • последовательно просматривать элементы массива;
  • при встрече $$0$$ считать длину текущего участка без осадков;
  • если найденный участок длиннее предыдущего максимума, запомнить его длину, первый и последний дни;
  • по номерам дней определить месяц: июнь — $$1\ldots 30$$, июль — $$31\ldots 61$$, август — $$62\ldots 92$$.

Текст программы:

program s5_v3_2;
const
  n = 92; {июнь — 30, июль — 31, август — 31}
var
  c: array[1..n] of integer;
  i, j, l, lmax, k2, k1m, k2m: integer;
begin
  writeln(‘ввод массива’);
  randomize;
  for i := 1 to n do
  begin
    c[i] := random(2); {получается массив из 1 и 0}
    write(c[i], ‘ ‘)
  end;
  writeln;
  lmax := 0; i := 1;
  while i <= n do
  begin
    if (c[i] = 0) and (i + 1 < n) then
    begin
      l := 1; j := i + 1;
      while (c[j] = 0) and (j < n) do
      begin
        l := l + 1;
        j := j + 1;
      end;
      k2 := j — 1;
      if l > lmax then
      begin
        lmax := l;
        k2m := k2;
        k1m := k2m — lmax + 1;
      end;
      l := 0; i := j;
    end;
    i := i + 1
  end;
  writeln(‘lmax=’, lmax, ‘ k1m=’, k1m, ‘ k2m=’, k2m);
  write(‘Месяц начала максимального периода без осадков’);
  if k1m <= 30 then writeln(‘ июнь’)
  else if (k1m >= 31) and (k1m <= 61) then writeln(‘ июль’)
  else if (k1m >= 62) then writeln(‘ август’);
  write(‘Месяц завершения максимального периода без осадков’);
  if k2m <= 30 then writeln(‘ июнь’)
  else if (k2m >= 31) and (k2m <= 61) then writeln(‘ июль’)
  else if (k2m >= 62) then writeln(‘ август’)
end.

В программе есть дополнительные выводы промежуточных значений для проверки правильности работы. При необходимости их можно закомментировать.

Ответ

Программа находит самый длинный подряд идущий участок без осадков и определяет месяц его начала и окончания.



Общая оценка
4.9 / 5
Другие учебники
Другие предметы