Таблицы (№10)

ОГЭ по информатике

Массив в нашем понимании - обычная таблица. Значения в таблице должны быть одного типа: целые числа, или вещественные, или строки, или логические значения. Как правило, в школьном курсе рассматриваются задачи с целочисленными таблицами. Элементы таблицы находятся в памяти рядом и доступ к ним возможен через их порядковый номер (индекс) в таблице.

А
1 2 3 4 5
55 36 134 75 100

Пусть А - таблица из пяти элементов. Тогда A[1] = 55, A[2] = 36, A[3] = 134, A[4] = 75, A[5] = 100

Чтобы в Кумире работать с таблицами, необходимо выделить для ее хранения память:

алг
нач
  целтаб А[1..5]

Таблицу можно заполнить вручную:

A[1] := 55
A[2] := 36
A[3] := 134
A[4] := 75
A[5] := 100

Если элементов много, тогда лучше использовать цикл (переменная цикла i должна быть объявлена в начале программы):

нц для i от 1 до 5
    ввод A[i]
кц

Если необходимо изменить значения всех элементов таблицы (например, увеличить в 2 раза), то опять же лучше использовать цикл:

нц для i от 1 до 5
    A[i] := A[i]*2
кц

Вывод всех значений элементов таблицы тоже выполняем в цикле:

нц для i от 1 до 5
    вывод A[i],нс
кц

Поиск значения максимального элемента и его номера в таблице

Примечание: задача поиска минимального элемента отличается только знаком сравнения

Задача разбивается на несколько этапов:

1. За начальный максимум берем самый первый элемент в таблице, запомнив его номер

imax := 1

2. Будем проверять все остальные элементы (со 2-го по последний): если текущий проверяемый элемент будет больше максимума, то запоминаем номер текущего элемента в imax

нц для i от  2 до 5
   если A[i] > A[imax] то
       imax := i
   все
кц

3. По найденному номеру максимального элемента выводим сам максимум:

вывод A[imax]

Приведем полный текст программы:

алг ПоискМах
нач
  целтаб А[1..5]
  цел imax, i
  
  нц для i от 1 до 5
    ввод A[i]
  кц

  imax := 1
  нц для i от  2 до 5
     если A[i] > A[imax] то
         imax := i
     все
  кц

  вывод A[imax]
кц

Нахождение суммы и среднего значения всех элементов таблицы

Сначала необходимо задать начальное значение суммы:

s := 0

Затем в цикле будем добавлять значения элементов к сумме:

нц для i от 1 до 5
    s := s + A[i]
кц

Среднее значение всех элементов таблицы найдем как отношение суммы к количеству элементов:

sr := s/5

Приведем полный текст программы:

алг СумСред
нач
  целтаб А[1..5]
  цел i, s
  вещ sr   | среднее число будем вещественным
  
  нц для i от 1 до 5
    ввод A[i]
  кц

  s := 0
  нц для i от 1 до 5
     s := s + A[i]
  кц
  
  sr := s/5

  вывод "Сумма всех элементов:",s,нс
  вывод "Среднее значение всех элементов:",sr

кц

Примеры решения задач

Пример 1.

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

алг
нач
    целтаб Dat[1:10]
    цел k, m
    Dat[1] := 16
    Dat[2] := 20
    Dat[3] := 20
    Dat[4] := 41
    Dat[5] := 14
    Dat[6] := 21
    Dat[7] := 28
    Dat[8] := 12
    Dat[9] := 15
    Dat[10] := 35
    m := 0
    нц для k от 1 до 10
        если Dat[k]>m то
            m := Dat[k]
        все
    кц
    вывод m
кон

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

Рассмотрим следующий фрагмент программы:

m := 0
нц для k от 1 до 10
    если Dat[k]>m то
        m := Dat[k]
    все
кц

Видно, что в цикле каждый элемент сравнивается с переменной m, которая до цикла была равна нулю. Если текущий проверяемый элемент больше чем m, тогда в переменную m записывается значение текущего элемента. После выполнения цикла в переменной m будет храниться значение наибольшего элемента.

Другими словами, программа находит максимальное значение среди всех ячеек таблицы. Это значение элемента Dat[4] = 41

Ответ: 41

Пример 2:

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

алг
нач
    целтаб Dat[1:10]
    цел k, m
    Dat[1] := 7; Dat[2] := 9
    Dat[3] := 10;Dat[4] := 5
    Dat[5] := 6; Dat[6] := 7
    Dat[7] := 9; Dat[8] := 8
    Dat[9] := 6; Dat[10]:= 9
    m := 0
    нц для k от 1 до 10
        если Dat[k] < 7 то
            m := m + 1
        все
    кц
    вывод m
кон

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

В цикле  к от 1 до 10 проверяется: если количество выполненных заданий у ученика под номером к меньше 7, то таких учеников становится на единицу больше (m := m +1).

Другими словами, программа подсчитывает количество учеников, выполнивших менее 7 заданий. 

Таких учеников у нас трое: Dat[4], Dat[5], Dat[9]

Ответ: 3

Пример 3:

В таблице 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
        если k > 9 то
            m := m + Dat[k]
        все
    кц
    вывод m
кон

Внутри цикла для номеров элементов к от 1 до 11 (для всех учеников) проверяется: если номер элемента (ученика) больше 9, то к переменной m добавляется количество выполненных заданий ученика.

Видно, что по условию проходят только ученик под номером 10 (Dat[10]) и ученик под номером 11 (Dat[11]). Соответственно, переменная m будет хранить сумму количеств выполненных заданий этих учеников, 0+21+27=48

Ответ: 48

Пример 4:

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

алг
нач
    целтаб Dat[1:10]
    цел k, m, n
    Dat[1] := 7; Dat[2] := 9
    Dat[3] := 10; Dat[4] := 5
    Dat[5] := 6; Dat[6] := 7
    Dat[7] := 5; Dat[8] := 8
    Dat[9] := 6; Dat[10] := 9
    m := 10; n := 0
    нц для k от 1 до 10
        если Dat[k] <= m то
            m := Dat[k]
            n := k
        все
    кц
    вывод n
кон

Значения элементов не превышают 10.

Строка нц для k от 1 до 10 означает, что перебираются все элементы массива (их у нас 10).

Условие если Dat[k] <= m будет верным, когда значение текущего элемента будет меньше или равно m. Если это условие верно, тогда в переменную m запишется значение текущего элемента, а в переменную n - его номер.

Смысл задачи в том, чтобы найти номер минимального элемента! (программа выводит в конце значение n).

Так как условие нестрогое Dat[k] <= m, то будет найден самый последний минимальный элемент и его номер (Dat[7]).

Если бы условие было строгим - то первый среди одинаковых минимумов (Dat[4])

Ответ: 7

ОГЭ по информатике

blog comments powered by Disqus

Яндекс.Метрика Мой канал на youtube Усть-Куломская школа Усть-Куломский район Коноплев О.О.

© 2016 Рассыхаев А.А.