§ 63. табличные величины
Изучив этот пункт, мы:
Познакомимся с табличными величинами;
Узнаем, как описываются линейные таблицы в алгоритмах и программах; выясним, как организуется обработки линейных табличных величин; получим представление о многомерные таблицы.
==== 63.1.Таблица и ее элементы ==============================================
Во многих задачах возникает необходимость обрабатывать по определенным правилам совокупность однотипных величин. Для того чтобы можно было составлять компактные алгоритмы решения таких задач и обрабатывать величины одну за другой в цикле, их объединяют в Массив, или Таблицу.
Таблица — это поименованная совокупность однотипных величин с общим свойством, которые различаются между собой своим положением в таблице. Величины, входящие в таблице, называются ее Элементами.
Так, в таблицу можно объединить ежедневные данные о температуре воды на побережье Крыма за летний сезон, результаты спортивных соревнований, оценки ученика по определенному предмету за учебный год и др.
Таблицы различаются по сложности их организации. Простейшими являются таблицы, где элементы последовательно перенумерованы и упорядочены по их номерам. Такие таблицы называют Линейными, или Одномерными. Номер величины в таблице называют Индексом.Каждый элемент таблицы имеет имя, общее для всех элементов таблицы, — имя таблицы и свой уникальный индекс. Индекс записывают в квадратных скобках после имени таб-лице. Элементы таблицы, в отличие от простых величин, называют Величинами с индексом.
Например, для обработки результатов соревнований по прыжкам в высоту, где принимали участие 100 спортсменов, создадим таблицу, содержащую все 100 результатов, показанных спортсменами. Эти результаты упорядочены следующим образом: сначала результат, показанный первым участником, затем вторым и т. Д. Предоставим таблицы имя Rez. Тогда Rez [1] — это результат первого участника, Rez [37] — результат 37-го участника, Rez [100] — Rez [1] — разница между результатами последнего и первого участников и т. др.
Далее мы рассмотрим, как в алгоритмах и программах осуществляется описание и обработки таблиц. Как пример таблицы будем использовать таблицу результатов спортивных соревнований по прыжкам в высоту.
==== 63.2.Описание линейных таблиц ==============================================
Для того чтобы иметь возможность работать с таблицей, ее нужно описать так же, как это осуществляется для простых величин. Описание таблицы содержит указание на имя таблицы, а также тип и количество величин, объединенных в таблицу. Это описание позволяет компьютеру определить, какой объем памяти нужен для хранения таблицы, выделить его и связать с именем таблицы.
Для описания таблиц в НАМ используется служебное слово Таб.Описание таблицы
Осуществляется следующим образом:
Тип_елементив Таб Имя_таблицы [найменший_индекс: найбильший_индекс]
Для нашего случая описание таблицы имеет вид:
Цел Таб rez [1: 100]
Поскольку результаты прыжков в высоту подаются целым числом сантиметров.
В языке Паскаль таблицы обычно называют массивами. Объявления массива осуществляется с использованием служебных слов array (от англ. Array — масса, множество) и of (с) следующим образом:
Имья_масиву: Array [найменший_индекс .. найбильший_индекс] Of тип_елементив;
Для нашего случая описание таблицы на языке Паскаль имеет вид:
Rez : Array [1 .. 100] Of Integer;
По такому описанию в памяти компьютера будет выделено 200 байт для размещения таблицы, по
2 байта на каждый элемент.
Диапазон значений индекса можно задавать как с помощью целочисленных констант, так и с помощью выражений, которые дают значение целого типа. Например, наша таблица может быть объявленной как
Rez : Array [1 .. n] Of Integer;
Но значение n в таком случае уже должно быть определенным ранее в разделе констант:
Const n = 100;
Такой способ определения размера таблицы является удобным, так как можно составлять текст программы для таблицы с n элементов, а для «настройки» программы на конкретную таблицу менять только одно значение константы.
==== 63.3.Обработка линейных таблиц =======================================
Разработка таблиц в алгоритмах и программах обычно описывается с помощью циклов со счетчиком. В цикле осуществляется ввод и вывод элементов таблицы в цикле они анализируются или приобретают новые значения. При составлении таких циклов придерживаются определенных правил. В теле цикла размещают последовательность команд или операторов для обработки элемента таблицы, индекс которого задается переменной (например, И), а в заголовке цикла указывают перечень значений индекса. Если обработке подлежат все без исключения элементы таблицы, то в этот перечень входит весь диапазон значений индекса — от мала до велика значение (например, Для И От 1 До N).Итак, переменная, которая обозначает индекс, выступает в роли счетчика цикла. В нашем примере это переменная И.
Схему обработки всех элементов таблицы A [1 .. N] можно представить так:
Алгоритм в НАМ | Программа на языке Паскаль |
Для И От 1 До N | For i: = 1 To n Do |
Пс | Begin |
<команды обработки элемента a [i]> | <Операторы обработки элемента a [i]> |
Кс | End; |
Пользуясь этой схеме, запишем алгоритм подсчета среднего результата, показанного спортсменами на соревновании. Для вычисления среднего результата (sr) нужно найти сумму всех результатов (s) и разделить ее на количество участников соревнований (n).
Для того чтобы избежать ввода с клавиатуры элементов таблицы (результатов, показанных спортсменами), предоставим им случайных значений с диапазона [170 199].
Алгоритм в НАМ | Программа на языке Паскаль |
Алг среднее (цел N; Цел Таб
Rez [1: n]; Дийс sr) Арг N, Rez Рез sr |
Program average; Uses Crt; Const n = 100;
Var i, s: Integer; sr: Real; |
Rez: Array [1 .. n] Of Integer; | |
Нач Цел I, S | Begin |
For i: = 1 To n Do | |
Rez [i]: = 170+ Random (30); | |
S = 0 | S: = 0; |
Для и От 1 до N | For i: = 1 To n Do |
S = S + Rez [i] | S = s + rez [i]; |
Sr = S / N | Sr = s / n; |
Writeln (sr 5: 1); | |
Readln | |
Кон | End. |
==== 63.4.Нахождение наименьшего элемента таблицы =============================
В процессе решения многих задач обработки таблиц возникает потребность найти наименьший или наибольший элемент среди всех элементов таблицы. Рассмотрим, как осуществляется поиск наименьшего элемента.
Предоставим таблицы с n элементов имя a, обозначим искомое значение ее наименьшего элемента через min.
Для определения наименьшего элемента таблицы применяется следующим образом:
· предоставляем переменной min значение первого элемента таблицы;
· сравниваем min со вторым элементом таблицы. Если он меньше min, то предоставляем min значение второго элемента. Теперь переменная min содержит значение меньшего из двух элементов таблицы;
· сравниваем min с третьим элементом таблицы. Если он меньше min, то предоставляем min значение третьего элемента. Теперь переменная min содержит значение наименьшего из трех элементов таблицы;
· продвигаемся таким образом к концу таблицы и в конце концов получаем значение min
— самого маленького из всех элементов таблицы.
Описанные действия можно представить в виде цикла:
Представления в НАМ | Представление на языке Паскаль |
Min = A [1] | Min = a [1]; |
Для I От 2 До N | For i: = 2 To n Do |
Если A [i] <min | If a [i] <min |
То Min = A [i] | Then min = a [i]; |
Если в приведенном фрагменте знак сравнения «<» заменить на «>», то будет обнаружено не
Маленький, а наибольший элемент таблицы.
==== 63.5.Программа «Победитель соревнований» =====================================
Составим программу определения победителя соревнований по прыжкам в высоту. Победителем является тот, кто показал лучший, то есть самый большой по числовым значением результат. Наша задача состоит в том, чтобы в таблице результатов соревнований rez найти наибольшее значение и определить того, кому принадлежит этот результат, — победителя соревнований.
Для решения задачи нам нужно иметь две таблицы: таблицу, содержащую список фамилий спортсменов (обозначим ее p), и таблицу их результатов rez, которая содержит результаты спортсменов в том же порядке, в котором их фамилии содержатся в таблице p. Итак, p [i] — это фамилия спортсмена, который показал результат rez [i].
Мы знаем, как найти наибольший элемент в таблице rez, однако в данной задаче нужно также выяснить, по какому номеру этот элемент содержится в таблице rez. Обозначим наибольший элемент через max, а его номер в таблице rez (то есть индекс) через m. Тогда имеем: max = rez [m], и фамилия победителя соревнований находим как p [m].
Для того чтобы найти не только крупнейший в таблице элемент, но и его место в таблице, нужно одновременно с предоставлением значение переменной max предоставлять соответствующего значения переменной m. При составлении программы объявим таблицу p как таблицу строчных величин. Фамилия победителя обозначим как pp, это переменная строчной типа. Остальные переменных по содержанию задачи
Относим к целому типу.
Ввода данных в таблицы p и rez будем осуществлять с клавиатуры. Для каждого спортсмена будем вводить его фамилию и показанный им результат. Значение n выберем небольшим, например n = 10.
Program winner; Uses Crt; Const n = 10;
Var i, m, max: Integer; pp: String; rez: Array [1 .. n] Of Integer;
P: Array [1 .. n] Of String; Begin
Clrscr; {Создаем таблицу результатов Соревнований}
Writeln ( ‘Таблица результатов соревнований’);
For i: = 1 To n Do
Begin {Вводим данные:}
Write (i, «. ‘); {Номер участника}
Readln (p [i], rez [i]); {фамилия, Результат}
End;
Max = rez [1]; {Находим max (самый Результат)}
M = 1, {и m (номер победителя)}
For i: = 2 To n Do if rez [i]> max
Then begin
Max = rez [i]; m = i;
End;
Pp = p [m]; {Находим фамилия Победителя}
Writeln ( ‘Победитель соревнований — «, pp)
Readln; End.
==== 63.6.Понятие о многомерные таблицы ====================================
Линейные таблицы является простейшей формой организации данных. Познакомимся с тем, как образуются Многомерные таблицы, где каждый элемент определяется не одним, а несколькими индексами.
Пусть таблица w содержит оценки определенного ученика (например, Петрова) за учебный год с 10 предметам: украинскому языку, математике, информатики. Тогда w [1] — оценка Петрова по украинскому языку, w [2] — по математике и тому подобное. Таблица w описывается как w:
Array [1 .. 10] Of Integer.
Аналогичные таблицы для всех 25 учеников класса (Алехин, Барахтян…, Петров…, Яшин) сведем в одну таблицу ww. В первом ее строке разместим оценки Алехина, во втором — Барахтяна и т. Д. Таблица ww является двумерной. Она состоит из 25 строк, по 10 элементов в каждом, и описывается как ww: Array [1..25,1..10] Of integer.Каждый из 250 элементов таблицы определяется двумя индексами. Например, для того чтобы узнать оценку Петрова по математике, нужно указать номер, по которому идет Петров в списке учеников (например, 17), и номер, по которому идет математика в списке предметов (номер 2). Следовательно, оценка Петрова по математике достается как ww [17, 2].
Можно представить себе и трехмерную таблицу — объединение оценок учеников параллельных классов
— и т. Д.
ВЫВОДЫ
Контрольные вопросы и упражнения
1. Линейная таблица объединяет… элементы. Каждый элемент имеет свое… в таблице. Все элементы имеют… имена. Для различения элементов к имени добавляется… .
А) линейные; б) одинаковы;
В) однотипные;
Г) разные по типу; д) индекс;
Е) место;
Е) значения; ж) массив.
2. Выберите объявления массива, которые не содержат ошибок. А) army: Array [1: 10] Of Integer;
Б) z: Array of [0 .. 41] Integer;
В) s: Integer of array [1 ..8];
Г) class11: array [1 .. 25] Of string; д) price: Array [1 .. 1000] Of real; е) w: Array of integer [1 .. 10].
3. Укажите, какие значения будут предоставлены элементам массива в результате выполнения оператора:
1) For k: = 1 To 5 Do
If k> 3 Then a [k] = k Else a [k] = 7;
2) For k: = 1 To 5 Do
If k <> 3 Then a [k] = k Else a [k] = 7;
3) For k: = 1 To 5 Do
If k Mod 3 = 2 Then a [k] = k Else a [k] = 7;
4) For k: = 1 To 5 Do
If k Mod 3 <k Then a [k] = k Else a [k] = 7.
А) 7, 7, 7, 4, 5,
Б) 1, 2, 3, 4, 5,
В) 1, 2, 3, 7, 7
Г) 7, 7, 3, 4, 5;
Д) 7, 2, 7, 7, 5,
Е) 7, 2, 7, 4, 7
Е) 1, 2, 7, 4, 5,
Ж) 1, 2, 7, 7, 7.
4. Линейная таблица a [1: n], где n = 7, содержит элементы: 18, 24, 6, 48, 0, 12 6.
Найдите значение элементов таблицы после выполнения фрагмента алгоритма:
1) Для k От 1 До n
A [k] = a [n-k + 1]
2) Для k От 1 До n
A [k] = a [k] / a [n-4]
3) t = a [1]
Для k От 1 До n-1 a [k + 1] = a [k]
A [1] = t
4) t = a [n]
Для k От n До 2 Шаг -1 a [k] = a [k-1]
A [1] = t
5. Данная таблица, которая содержит должностные оклады n работников фирмы. Составьте программу:
1) определения среднего должностного оклада работника фирмы;
2) повышение окладов всех работников фирмы на z грн.
6. Данная таблица, содержащая ежедневные показатели о средней температуре воздуха в течение марта. Составьте программу подсчета, которых дней в марте было больше — с температурой выше или ниже нулю.
7. Создайте две таблицы: таблицу T, которая содержит список товаров в магазине, и таблицу C, которая содержит их цены. Составьте программу, которая выводит на экран список товаров, сме-тують дешевле заданного Z.
8. Составьте программу, которая моделирует телевизионное шоу «Счастливый случай». Перед игроком клеточное поле, которое содержит 5 ´ 5 ячеек. Игрок делает «выстрел» (вводит номера ячейки по горизонтали и по вертикали).По некоторым клетками скрытые подарки: приглашение в романтическое путешествие, ужин в ресторане «Престиж», комплект духов тому подобное.
9. Составьте программу-тренажер, которая предлагает пользователю проверить его знания столиц известных стран. Программа одну за другой выводит на экран названия стран, а пользователь вводит с клавиатуры названия их столиц. Программа проверяет правильность каждого ответа и завершения выводит сообщение о результатах проверки.
10. Составьте программу «Ипподром». Программа выводит на экран список участников забега и предлагает пользователю сделать ставку на определенного участника. Результаты забега определяются с помощью датчика случайных чисел. Программа выводит их на экран, определяет победителя и сообщает пользователю, проиграла или выиграла его ставка.
11. Составьте программу «Кассир». Программа по данным о стоимости покупки и предоставленную покупателем сумму денег определяет, сколько и каких купюр нужно выдать ему на сдачу. Сдача дается наименьшим количеством купюр.
12. Составьте программу-тренажер, которая предлагает пользователю проверить его знания английского языка. Программа выводит на экран слово украинского языка, а пользователь с клавиатуры вводит перевод этого слова на английский. Программа проверяет правильность каждого ответа и завершения выводит сообщение о результатах проверки. Усовершенствуйте программу так, чтобы она по выбору пользователя проверяла перевод с английского на украинский или с украинского на английский, или произвольно выбирала слова то одной, то другой языка.