Информатика ЕГЭ 19 задание разбор

Дата изменения: 24 июня 2020

19-е задание: «Программирование: массивы и матрицы»
Уровень сложности — повышенный,
Максимальный балл — 1,
Примерное время выполнения — 5 минут.

Наибольшее или наименьшее значение переменной s (сумматор)

Досрочный экзамен 2020 г., вариант 1:

В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов массива A[i] приведены в таблице.

i 0 1 2 3 4 5 6 7 8 9 10 11
A[i] 14 13 15 8 4 12 30 21 22 16 5 9

Определите значение переменной s после выполнения следующего фрагмента этой программы

Язык программирования Паскаль:
s := 0;
n := 1;
for i := 0 to 11 do
 if A[i] > A[n] then
  s := s + A[i] + i
 else
  A[n] := A[i];
Бейсик:

s = 0
n = 1
FOR i = 0 TO 11
 IF A(i) > A(n) THEN
   s = s + A(i) + i
 ELSE
   A(n) = A(i)
 END IF
NEXT i
Python:

s = 0
n = 1
for i in range(0, 12):
 if A[i] > A[n]:
   s += A[i] + i
 else:
   A[n] = A[i]
С++:

s = 0;
n = 1;
for (int i = 0; i < 12; i++)
{
 if (A[i] > A[n])
   s += A[i] + i;
 else
   A[n] = A[i];
}

Ответ: 202

Показать решение:

Результат: 202

📹 Видео


Задание 19 ЕГЭ по информатике 2017 ФИПИ вариант 13 (Крылов С.С., Чуркина Т.Е.):

В программе описан одномерный целочисленный массив А с индексами от 0 до 10.

Язык программирования Паскаль:
s:=0;
n:=10;
for i:=0 to n-1 do begin
  s:= s + A[i] + A[i+1]
end;

В начале выполнения этого фрагмента в массиве находились двухзначные четные натуральные числа.
  
Какое наибольшее значение может иметь переменная s после выполнения данной программы?

Ответ: 1960

Показать решение:

Рассмотрим алгоритм фрагмента программы:

  • Цикл выполняется 10 раз: от 0 до 9 (т.к. n-1).
  • В цикле повторяется операция, суммирующая два подряд идущих элемента массива, — текущего и следующего:
  • A[i] + A[i+1]
  • Данная сумма накапливается в переменной s, значение которой требуется узнать в задаче.
  • Поскольку по заданию необходимо найти наибольшее значение переменной s, и по заданию элементы массива — двухзначные четные натуральные числа, то представим, что все элементы равны самому большому двухзначному четному числу — 98. Это будет оптимальным вариантом.
  • В первый проход цикла получим:
  • s = 0 + 98 + 98 = 196
  • Полученная сумма будет каждый проход цикла увеличиваться на то же самое число (196):
  • s = 196 + 98 + 98
  • Так как проходов (итераций) цикла 10, то получим:
  • 196 * 10 = 1960

📹 Видео


Задание 19 ЕГЭ по информатике 2017 ФИПИ вариант 19 (Крылов С.С., Чуркина Т.Е.):

В программе описан одномерный целочисленный массив А с индексами от 0 до 10.

Язык программирования Паскаль:
s:=1;
n:=10;
for i:=1 to 5 do begin
  s:= s * A[i] * A[n-i+1]
end;

В начале выполнения этого фрагмента в массиве находились однозначные четные натуральные числа.
  
Какое наименьшее значение может иметь переменная s после выполнения данной программы?

Ответ: 1024

Показать решение:

Рассмотрим алгоритм фрагмента программы:

  • Цикл выполняется 5 раз: от 1 до 5.
  • В цикле повторяется операция произведения двух элементов массива:
  • A[i] * A[n-i+1]
  • Определим, какие элементы перемножаются, подставив для n и i конкретные значения:
  • 1 шаг: A[1]*A[10]
    2 шаг: A[2]*A[9]
    3 шаг: A[3]*A[8]
    4 шаг: A[4]*A[7]
    5 шаг: A[5]*A[6]
    
  • Результат каждой операции умножения накапливается в переменной s, значение которой и требуется найти.
  • Поскольку в s накапливается произведение элементов массива, а по заданию элементы — однозначные четные натуральные числа, то представим, что в массиве все элементы равны самому малому однозначному четному числу — 2. Это будет оптимальным вариантом, т.к. по заданию, необходимо определить наименьшее значение.
  • В первый проход цикла получим:
  • s = 1 * 2 * 2 = 4
  • Полученное произведение будет каждый проход цикла перемножаться на предыдущее значение (4 — в первом шаге, 16 — во втором шаге и т.п.):
  • s = 4 * 2 * 2 = 16
    ...
    
  • Так как проходов цикла 5, то получим:
  • 45 = 1024

📹 Видео


Перестановка в массиве. Определить значение переменной

19 задание. Демоверсия ЕГЭ 2018 информатика:

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 3, 0, 4, 6, 5, 1, 8, 2, 9, 7 соответственно, т.е. A[0] = 3, A[1] = 0 и т.д.

Определите значение переменной c после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
9
c := 0;
for i := 1 to 9 do
 if A[i-1] > A[i] then
 begin
   c := c + 1;
   t := A[i];
   A[i] := A[i-1];
   A[i-1] := t;
 end;

Ответ: 5

Показать решение:

Результат: 5

📹 Видео


Решение 19 задания ЕГЭ по информатике, вариант 1 (ФИПИ, «ЕГЭ информатика и ИКТ, типовые экзаменационные варианты 2018», С.С. Крылов, Т.Е. Чуркина):

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 1, 3, 4, 7, 2, 9, 1, 2, 3, 0 соответственно, т.е. A[0] = 1, A[1] = 3 и т.д.

Определите значение переменной c после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
9
c := 0;
for i := 1 to 9 do
 if A[i] > A[0] then
 begin
   c := c + 1;
   t := A[i];
   A[i] := A[0];
   A[0] := 2*t;
 end;

Ответ: 2

Показать решение:

  • Рассмотрим изменение всех переменных и элементов массива для каждой итерации (прохода) цикла:
  • 1 2 3 4 5 6 7 8 9
    i 1 2 3 4 5 6 7 8 9
    if 3>4
    true
    4>6
    false
    7>6
    true
    2>14
    false
    9>14
    false
    1>14
    false
    2>14
    false
    3>14
    false
    0>14
    false
    c 1 2
    t 3 7
    A[i] 1 6
    A[0] 6 14

📹 Видео


Разбор 19 задания (вариант 1, ФИПИ, «ЕГЭ информатика и ИКТ, типовые экзаменационные варианты 2019», С.С. Крылов, Т.Е. Чуркина):

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 0, 7, 1, 3, 2, 1, 8, 9, 6, 3 соответственно, т.е. A[0] = 0, A[1] = 7 и т.д.

Определите значение переменной j после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
j:=9;
while A[j] + A[j-1] > 4 do
 begin
  t:=A[j];
  A[j]:=A[j-1];
  A[j-1]:=t;
  j:=j-1;
 end;

Ответ: 6

Показать решение:

  • В задании используется цикл while — с предусловием. Такой цикл выполняется пока условие истинно.
  • В условии цикла сумма каждого элемента массива с предыдущим, начиная с девятого (j=9), сравнивается с числом 4: если сумма элементов больше 4 то цикл выполняется.
  • Для первой итерации цикла имеем:
    while A[9] + A[8] > 4 do
    ...
    
  • Как только встретится сумма элементов, которая меньше либо равна четырем, цикл прекратит свою работу.
  • В цикле происходит обмен значений двух элементов массива, сумма которых рассматривается в условии цикла (через переменную t). Кроме того, происходит уменьшение счетчика цикла, чтобы осуществился переход к следующему элементу массива (j:=j-1).
  • Таким образом, надо узнать сумму элементов, начиная с элементов A[9]+A[8], затем A[8]+A[7] и т.д.:
  • A[9]+A[8] = 3+6 > 4 - да, значит обмен: A[9]=6 A[8]=3, j=8
    A[8]+A[7] = 3+9 > 4 - да, значит обмен: A[8]=9 A[7]=3, j=7
    A[7]+A[6] = 3+8 > 4 - да, значит обмен: A[7]=8 A[6]=3, j=6
    A[6]+A[5] = 3+1 > 4 - нет, цикл прекращает свою работу
    
  • Последнее значение счетчика j было равно 6.

Разбор досрочного ЕГЭ по информатике 2019:

В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов равны 20, 19, 33, 21, 42, 13, 12, 24, 4, 22, 6, 10, т.е. A[0]=20, A[1]=19 и т.д.

Определите значение переменной s после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
9
  n := 1;
  s := 1;
  for i := 1 to 11 do
    if A[i] < A[n] then begin
      s := s * i;
      t := A[i];
      A[i] := A[n];
      A[n] := t;
    end;

  
Типовые задания для тренировки — демоверсия ЕГЭ информатика 2020

Ответ: 240

Показать решение:

📹 Видео


Решение 19 задания (с сайта К. Полякова, № 112):

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 21, 16, 7, 12, 18, 3, 8, 13, 11, 17, т.е. A[0]=21, A[1]=16 и т.д.

Определите значение переменной s после выполнения следующего фрагмента этой программы:
Паскаль:

1
2
3
4
5
6
7
8
9
10
11
s := 0;
n := 4;
for i:=0 to 9 do
  if A[i] <= A[n] then begin
    s := s + A[i];
    t := A[i];
    A[i] := A[n];
    A[n] := t;
    n := i mod 3;
  end;
writeln(s);
Бейсик:

s=0: n=4
FOR k=1 to 10  
    IF A(i) <= A(n) THEN
      s = s + A(i)
      t = A(i)
      A(i) = A(n)
      A(n) = t
      n = i MOD 3
    END IF
NEXT k
PRINT S
END
Python:

s = 0
n = 4
for i in range(10):
  if A[i] <= A[n]:
    s = s + A[i]
    t = A[i]
    A[i] = A[n]
    A[n] = t
    n = i % 3
print(s)
С++:

s = 0;
n = 4;
for (i=0; i<=9; i++)
  if (A[i]<=A[n])
    {
    s+=A[i];
    t=A[i];
    A[i]=A[n];
    A[n]=t;
    n=i%3;
    }
cout << s;

  
Типовые задания для тренировки


Ответ: 75

Показать решение:

  • Рассмотрим алгоритм. Построим трассировочную таблицу, каждая строка которой — очередная итерация цикла.
  • i <= ? 0 1 2 3 4 5 6 7 8 9 s n
    21 16 7 12 18 3 8 13 11 17 0 4
    0 21<=18
    нет
    21 18
    1 16<=18
    да
    16
    18
    18
    16
    16 1 mod 3 = 1
    2 7<=18
    да
    18
    7
    7
    18
    16+7=23 2 mod 3 = 2
    3 12<=18
    да
    18
    12
    12
    18
    23+12=35 3 mod 3 = 0
    4 16<=21
    да
    21
    16
    16
    21
    35+16=51 4 mod 3 = 1
    5 3<=7
    да
    7
    3
    3
    7
    51+3=54 5 mod 3 = 2
    6 8<=12
    да
    12
    8
    8
    12
    54+8=62 6 mod 3 = 0
    7 13<=16
    да
    16
    13
    13
    16
    62+13=75 7 mod 3 = 1
    8 нет 3 11
    9 нет 13 17
  • При последнем изменении s стало равным 75.

📹 Видео


19_8: Решение 19 задания (с сайта К. Полякова, № 117):

В результате выполнения программы напечатано число 6.
  
Какое наибольшее значение может иметь переменная S после выполнения программы?
Паскаль:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var k, m, S, N: integer; 
    Dat: array[1..100] of integer; 
begin 
  N:= 5; 
  m := 0; S := 0; 
  for k := 1 to N do      
    readln(Dat[k]); 
  for k := 1 to N do begin
    S := S + 2 * Dat[k];
    if  Dat[k]>m then
      begin
        m := Dat[k]
      end
  end; 
  writeln(m) 
end.
Бейсик:

N=5
m=0
S=0
FOR k=1 to N
   INPUT Dat(k) 
NEXT k 
FOR k=1 to N
    S = S + 2 * Dat(k)
    IF Dat(k) > m THEN
      m = Dat(k)
    END IF
NEXT k
PRINT m
END
Python:

Dat = [0]*100
N = 5
m = S = 0
for k in range(0, N):
    Dat[k] = int(input())
for k in range(0, N):
    S += 2 * Dat[k]
    if Dat[k] > m:
        m = Dat[k]
print(m)
С++:

#include <iostream> 
using namespace std; 
 
int main() {     
int Dat[100];
int N = 5;
int k, m = 0, S = 0;
for(k=0; k<N; k++)
   cin >> Dat[k];
for(k=0; k<N; k++) {
   S += 2 * Dat[k];
   if (Dat[k]>m)
       m = Dat[k];
   }
cout << m;
return 0;
}


Ответ: 60

Показать решение:

    Рассмотрим алгоритм.

  • В конце программы видим, что на экран выводится значение переменной m. То есть после выполнения всего алгоритма m станет равным 5. Запомним это.
  • Изначально переменная N равна значению 5:
  • N:= 5;
  • В первом цикле формируются значения для пяти элементов массива:
  •   for k := 1 to N do      
        readln(Dat[k]);
  • Во втором цикле видим условие, в котором каждый из пяти элементов массива будет сравниваться с m. Если элемент больше m, то в m сохранится значение этого элемента:
  •    if  Dat[k]>m then
          begin
            m := Dat[k]
          end
  • Исходя из первого нашего пункта имеем, что наибольшее значение из пяти элементов массива — это значение 6. Так как в результате m = 6.
  • В цикле помимо условия находится сумматор, который суммирует 2 * Dat[k]. В задании необходимо определить наибольшее значение S, значит, выгодно, чтобы элементы массивов имели максимальное возможное значение.
  • Предположим, что все пять элементов массива равны 6. Тогда m после прохождения цикла останется равной 6. То есть результат будет верным.
  • Посчитаем S в цикле:
  • S := 0 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 = 12 * 5 = 60

📹 Видео


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*
*


Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить