Решение задач типа 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
кон
C++
{
int k, m;
int Dat[11];
   Dat[0] = 20; Dat[1] = 25;
   Dat[2] = 19; Dat[3] = 25;
   Dat[4] = 26; Dat[5] = 22;
   Dat[6] = 24; Dat[7] = 28;
   Dat[8] = 26; Dat[9] = 21;
   Dat[10] = 27;
   m = 0;
   for (k = 0; k < 11; k++)
      if (Dat[k] > 22) 
            m = m + 1;
   cout << k;
}
Паскаль
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, который описан на языке C++,  нумерация начинается не с первого элемента, а с нулевого.
Алгоритмический язык C++ Паскаль
целтаб Dat[1:11]
цел k, m
int k, m, Dat[11]; Var k, m: integer;
Dat: array[1..11] of integer;

Далее идет заполнение массива. Например, элементу массива с индексом 1 присваивается значение 20, элементу с индексом 2 — 25 и так далее. В итоге полученный массив можно представить в таком виде (в скобках записаны индексы для С++):
Массив Dat
Индекс 1(0) 2(1) 3(2) 4(3) 5(4) 6(5) 7(6) 8(7) 9(8) 10(9) 11(10)
Значение 20 25 19 25 26 22 24 28 26 21 27

Далее переменной m присваивается значение 0. После чего начинается цикл с параметром k, при этом k изменяется от 1 до 11 с шагом 1.
В теле цикла происходит проверка условия
Алгоритмический язык C++ Паскаль
если Dat[k] > 22 то
  m := m + 1
все
  for (k = 0; k < 11; k++)
      if (Dat[k] > 22) 
            m = m + 1;
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.

Комментариев нет:

Отправить комментарий