Подготовка к ГИА по информатике

Решение задач типа 10 ГИА по информатике

Решение задач типа 10 ГИА по информатике предполагают умение  исполнить  циклический  алгоритм  обработки массива чисел, записанный на алгоритмическом языке.

Рассмотрим решение подобной задачи на примере задачи ГИА 10 демоверсии ФИПИ 2013 года:

 

 

 

 

 

 


 

В таблице Dat хранятся данные о численности учеников в классах (Dat[1] – число  учеников  в  первом  классе, Dat[2] – во  втором  и  т.  д.).  Определите, какое  число  будет  напечатано  в  результате  работы  следующей  программы. Текст программы приведён на трёх языках программирования.

 

Алгоритмический язык

алг
нач
   целтаб Dat[1:11]
   цел k, m
   Dat[1] := 20; Dat[2] := 25
   Dat[3] := 19; Dat[4] := 25
   Dat[5] := 26; Dat[6] := 22
   Dat[7] := 24; Dat[8] := 28
   Dat[9] := 26; Dat[10] := 21
   Dat[11] := 27
   m := 0
   нц для k от 1 до 11
    если Dat[k] > 22 то
     m := m + 1
    все
   кц
   вывод m
кон

 

Бейсик

DIM Dat(11) AS INTEGER
DIM k,m AS INTEGER
Dat(1) = 20: Dat(2) = 25
Dat(3) = 19: Dat(4) = 25
Dat(5) = 26: Dat(6) = 22
Dat(7) = 24: Dat(8) = 28
Dat(9) = 26: Dat(10) = 21
Dat(11) = 27
m = 0
FOR k = 1 TO 11
IF Dat(k) > 22 THEN
m = m + 1
END IF
NEXT k
PRINT m

 

Паскаль

Var k, m: integer;
   Dat: array[1..11] of integer;
Begin
   Dat[1] := 20; Dat[2] := 25;
   Dat[3] := 19; Dat[4] := 25;
   Dat[5] := 26; Dat[6] := 22;
   Dat[7] := 24; Dat[8] := 28;
   Dat[9] := 26; Dat[10] := 21;
   Dat[11] := 27;
   m := 0;
   for k := 1 to 11 do
      if Dat[k] > 22 then
         begin
            m := m + 1
         end;
   writeln(m)
End.

 

Ответ: ___________________________.


Решение:

Рассмотрим программу пошагово. Итак, в самом начале объявляются переменные, которые будут использоваться (переменные k и m), а так же массив Dat, содержащий 11 элементов (от 1 до 11).

Примечание. В массиве Dat, который описан на языке Basic будет 12 элементов, так как нумерация начинается не с первого элемента, а с нулевого.

Алгоритмический язык Бейсик Паскаль
целтаб Dat[1:11]
цел k, m
DIM Dat(11) AS INTEGER
DIM k,m AS INTEGER
Var k, m: integer;
Dat: array[1..11] of integer;

 

Далее идет заполнение массива. Например, элементу массива с индексом 1 присваивается значение 20, элементу с индексом 2 — 25 и так далее. В итоге полученный массив можно представить в таком виде:

Массив Dat

Индекс 1 2 3 4 5 6 7 8 9 10 11
Значение 20 25 19 25 26 22 24 28 26 21 27

 

Далее переменной m присваивается значение 0. После чего начинается цикл с параметром k, при этом k изменяется от 1 до 11 с шагом 1.

В теле цикла происходит проверка условия

Алгоритмический язык Бейсик Паскаль
если Dat[k] > 22 то
  m := m + 1
все
IF Dat(k) > 22 THEN
m = m + 1
END IF
if Dat[k] > 22 then
   begin
     m := m + 1
   end;

 

Значение элемента массива с индексом k сравнивается с числом 22. Если элемент массива больше 22, то переменная m увеличивается на 1. В противном случае ничего не происходит.

В самом конце программы на экран выводится значение переменной m.

Итак, мы перевели программу на человеческий язык, теперь давайте подумаем, что же в итоге получим после ее выполнения. Нас интересует цикл — именно там происходит изменение значения переменной m. До цикла ее значение равно нулю. Далее программа перебирает все элементы массива и сравнивает их с числом 22. И если элемент массива больше 22, то переменная m увеличивается на 1. Таким образом, нам необходимо посчитать все элементы массива, которые больше 22 — их число и будет равно значению переменной m. Таких элементов 7 — это элементы с индексами 2, 4, 5, 7, 8, 9 и 11.

Следует обратить внимание на элемент под номером 6, который равен 22. Так как сравнение у нас строгое ( знак > ), то его мы не учитываем, так как 22 не больше 22. Учитывать его можно было бы в том случае, если бы в сравнении стоял знак >=.

Итак, правильный ответ 7.