infoegehelp.ru

Успешно сдать ЕГЭ по информатике
  • Главная
  • Контакты
  • Карта сайта
  • Помощь сайту
Важно
  • Демо варианты ЕГЭ
  • Учим числа: 2 в степени
  • Биты, байты, килобайты
Решение задач
  • Задачи вне основных разделов информатики
Разделы информатики
  • 2011-12-18-14-33-54Системы счисления
  • 2011-12-18-16-45-20Алгебра логики
  • 2011-12-18-16-55-26Программирование
  • 2011-12-18-16-53-40Кодирование информации
  • 2011-12-18-16-56-19Компьютерные сети и Интернет
  • -excelЭлектронные таблицы (Excel)
  • 2011-12-18-16-57-50Базы данных
  • 2011-12-18-16-58-50Графы
  • 2011-12-18-17-00-15Файловая система
  • Устройство компьютера
  • ПО компьютера

Разбор задачи C3 (демо ЕГЭ 2004)

Опишите алгоритм поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов. Решение запишите в словесной форме или на алгоритмических языках Бейсик или Паскаль.
Решение:

Программа написана на языках:

  • Паскаль (среда разработки Turbo Pascal 7.0),
  • Бейсик (среда разработки Quick Basic 4.5),
  • Алгоритмический язык (среда разработки Кумир 1.9.0),
  • Си (среда разработки Borland C++ 3.1).

Напротив названия языка программирования в скобках содержатся ссылки на скачку исходников и ехе (исполняемых файлов).

Паскаль (исходник+exe-файл)Бейсик (исходник)
const N=30;
var mas:array[1..N] of real;
  max,trio:real;
  i,numF: integer;
begin
  for i:=1 to N do  readln(mas[i]);
  trio:=mas[1]+mas[2]+mas[3];
  max:=trio;
  numF:=1;
  for i:=4 to N do
  begin
    trio:=trio+mas[i]-mas[i-3];
    if trio>max then
    begin
      max:=trio;
      numF:=i-2
    end;
  end;
  write(char(13)+char(10));
  writeln(mas[numF]:0:2,' ',mas[numF+1]:0:2,' ',
             mas[numF+2]:0:2);
  readln
end.
N=30
DIM i, numF AS INTEGER
DIM max, trio,mas(N) AS SINGLE
FOR i = 1 TO N
   INPUT mas(i)
NEXT i
trio=mas(1)+mas(2)+mas(3)
max=trio
numF=1
FOR i = 4 TO N
  trio=trio+mas(i)-mas(i-3)
  IF trio > max THEN
    max = trio
    numF=i-2
  END IF
NEXT i
PRINT
PRINT USING "#.##";mas[numF];mas[numF+1];
          mas[numF+2]
END
Алгоритмический (исходник)Си (исходник+exe-файл)
алг
нач
   цел N=30
   цел i,numF
   вещ maxSum,trio
   вещтаб mas[1:N]
   нц для i от 1 до N
     ввод mas[i]
   кц
   trio:=mas[1]+mas[2]+mas[3]  
   maxSum:=trio
   numF:=1
   нц для i от 4 до N
     trio:=trio+mas[i]-mas[i-3]
     если trio>maxSum
       то
         maxSum:=trio
         numF:=i-2
     все
   кц 
   вывод нс,mas[numF],' ',mas[numF+1],' ',
             mas[numF+2]
кон
#include <stdio.h>
#include <conio.h>
#define N 30
void main()
{
   int i,numF;
   float mas[N];
   float max,trio;
   for (i=0; i<N; i++) scanf("%f",&mas[i]);
   trio=mas[0]+mas[1]+mas[2];
   max=trio;
   numF=0;
   for(i=3;i<N;i++){
     trio=trio+mas[i]-mas[i-3];
     if (trio>max){
       max=trio;
       numF=i-2;
     }
   }
   printf("\n%.2f %.2f %.2f",mas[numF],
            mas[numF+1],mas[numF+2]);
   getch();
}
Естественный язык
Введем  переменные: trio - для хранения суммы трех подряд идущих элементов (тройки) массива, max - для хранения максимальной суммы подряд идущей тройки, numF - для хранения индекса 1-го элемента тройки. Сначала trio присваиваем сумму первых 3-х элементов, а max приравнимаем trio, numF приравниваем индексу 1-го элемента массива. В цикле начиная с 4-го элемента и до последнего добавляем к trio очередной элемент массива (получаем четверку) и удаляем первый элемент массива. Снова получаем тройку. Сравниваем сумму полученной тройки со значением max. Если она больше, то max присваивает значение trio, а numF - индекс 1-го элемента новой тройки. После завершения работы цикла numF содержит индекс 1-го элемента тройки, сумма которой максимальна.  Затем выводим эту тройку, используя полученный индекс.

Пример выполнения программы на 4-х языках:

Задача С3 ЕГЭ по информатике 2004 выполнение программы

На рисунке выделены розовым три последовательных элемента массива, чья сумма максимальна, она равна: 8+12+12=32. Их и выводит программа.

Программа на Бейсике выводит числа 12.00 с символом % впереди, потому что мы отвели для целой части 1 символ: USING "#.##", а получилось 2 символа.

Перейти к другим задачам.

 

Rambler's Top100

© Латыпова В.А., 2012-2020. Все права защищены.
Копирование материалов сайта только с разрешения администрации сайта