- •Языки и системы программирования Алгоритмы
- •Языки программирования
- •Область применения языков программирования
- •Сложность и эффективность языков программирования
- •Трансляторы
- •Характеристика с/п Pascal abc
- •Используемые в с/п Pascal abc «горячие клавиши»
- •Система подсказок.
- •Структура программы на Паскале
- •Сообщения об ошибках. Отладка программы.
- •Команды вывода данных на экран
- •Константы
- •Переменные
- •Арифметические выражения. Приоритет арифметических операций
- •Стандартные арифметические функции
- •Процедуры инкремента и декремента
- •Примеры решения линейных задач
- •Ввод данных с клавиатуры
- •Примеры решения диалоговых задач
- •Линейные задачи для самостоятельной работы
- •Лаб. 1. Линеаризовать выражение:
- •Лаб. 2. Линейные диалоговые задачи (на одно действие)
- •Лаб. 3. Диалоговые задачи на несколько действий
- •Ветвление
- •Логические выражения
- •Вложенное ветвление
- •Лаб. 4. Задачи на ветвление:
- •Лаб. 5. Задачи на ветвление с вычислениями:
- •Выбор варианта
- •Лаб. 6. Задачи на выбор варианта:
- •Как выбрать цикл?
- •Экстренные события в теле цикла
- •Лаб. 7. Числовые задачи с циклом For
- •Лаб. 8. Сюжетные задачи с циклом For
- •Лаб. 9. Задачи с условными циклами
- •Библиотека crt
- •Библиотека sounds
- •Лаб. 10. Задачи с использованием циклов и библиотек crt и sounds
- •Порядковые типы данных
- •Перечислимый тип данных
- •Символьный тип данных
- •Ограниченный (интервальный) тип данных
- •Лаб. 11. Задачи со строками
- •Массивы
- •Решение задач с массивами
- •Поиск минимального (максимального) элемента массива
- •Сортировка массива.
- •Двумерные и многомерные массивы
- •Лаб. 12. Задачи с одномерными массивами
- •Лаб. 13. Задачи с двумерными массивами
- •Множества
- •Файлы данных
- •Записи и базы данных
- •Библиотека GraphAbc
- •Действия с графическим окном:
- •Точечная графика
- •Графические примитивы
- •Текст в графическом окне
- •Использование готовых точечных рисунков
- •Вспомогательные алгоритмы
- •Рекурсия
- •Событийное программирование
- •Использование таймеров
- •Использование сторонней библиотеки ukeyb
Массивы
Большинство программ работают не с одним числом, а с несколькими числами. Например, программа бухгалтерского учёта хранит и обрабатывает информацию о зарплате многих работников. Леталка-стрелялка помнит координаты многих врагов, пуль и т.д. Простая переменная для этого не годится. Нужна такая переменная, которая одна хранит несколько чисел. Для этого используется индексированная переменная или массив. (В массиве можно хранить не только числа. Классный журнал – массив строк. Изображения всех противников в игре – массив картинок. )
Чтобы получить одно из нескольких чисел, хранящихся в массиве, после имени переменной указывается индекс – номер этого числа в квадратных скобках. Например, a[5].
Е
сли
нужно одинаковым образом обработать
несколько чисел в массиве, в качестве
индекса берётся переменная-счётчик,
которая меняется в цикле, пробегая по
очереди все числа в массиве. Например,
в задаче требуется сложить все числа,
кратные 3, из массива a,
содержащего 20 целых чисел.
В
разделе VAR массив объявляется
с помощью слова array,
после которого в квадратных скобках
указывают пределы, в которых изменяется
индекс. Например, описание a:array[1..20]
of
integer;
говорит о том, что в массиве 20
чисел, нумерация начинается с 1, и все
числа – целые. Нумеровать не обязательно
с единицы. Возможны и другие описания:
Нарушать указанные в описании пределы нельзя. В приведенном примере попытка использовать элемент массива b[6] или b[-1] приведёт к ошибке.
Каким образом занести исходные данные в массив? Приведём несколько способов:
1. Заполнение массива с клавиатуры:
2
.
Заполнение массива случайными числами.
Например, заполним массив a
двадцатью случайными числами в пределах
от 10 до 40:
3. Заполнение массива по формулам. Например, занесём координаты двадцати точек окружности в массивы X и Y.
4
.
А если программисту заранее известны
конкретные числа, которые нужно занести
в массив? Простой, но скучный способ –
занести присваиванием:
Вместо этого
можно воспользоваться констант-массивом.
Он объявляется не в разделе VAR,
а в разделе CONST и заполняется
числами в момент объявления:
Хотя
этот массив и объявлен в разделе констант,
но, так как его тип указан явным образом,
то это – типизованный констант-массив,
который можно изменять, как и обычный
массив.
5. Если один массив уже заполнен числами, и его нужно скопировать без изменений в другой массив (описанный точно так же), то это можно выполнить простым присваиванием: b:=a;. Например, это может понадобиться, если массив a будет изменяться, но позже понадобится снова с прежними числами. Для этого сначала сделаем резервную копию, а после того, как поработали с массивом, восстановим его из копии тоже присваиванием a:=b;.
Решение задач с массивами
Заполнить массив двадцатью случайными числами в пределах от 1 до 99, распечатать их в одну строку, а на следующей строке распечатать тот же массив в обратном порядке, выделив цветом числа, кратные трём.
program massiv1; uses
crt; var a:array[1..20]
of
integer; i:integer; begin randomize; clrscr; for
i:=1 to
20 do begin a[i]:=1+random(99);
write(a[i],’ ’); end; writeln; for
i:=20 downto
1 do begin if
a[i] mod
3=0 then
textcolor(12)
else
textcolor(15); write(a[i],’ ’); end; end.
Следующая программа вводит с клавиатуры десять чисел, располагает их в одну строку и печатает на следующей строке, каких чисел больше, чётных или нечётных, и на сколько.
Перед циклом проверки и распечатки переменные kc и kn (количество чётных и количество нечётных) обнулим. Чётным элемент массива является в том случае, если делится на два без остатка, то есть, остаток (mod) при делении на 2 равен 0. В этом случае мы увеличиваем (inc) счётчик чётных чисел на 1. Если это не так, увеличиваем на 1 счётчик нечётных чисел.
program massiv2; var n:array[1..10]
of
integer; i,kc,kn:integer; begin for
i:=1 to
10 do begin write(’N[’,i,’]=’);
readln(n[i]); end; writeln; kc:=0; kn:=0; for
i:= 1 to
10 do begin write(n[i],’ ’); if
n[i] mod
2=0 then
inc(kc) else
inc(kn); end; if
kc>kn then
writeln(’Чётных
больше на
’,kc-kn) else if
kn>kc then
writeln(’Нечётных
больше на
’,kn-kc) else
writeln(’Чётных и нечётных
поровну’); end.
Два массива заполнены двадцатью случайными числами в пределах от 1 до 5. Программа заполняет третий массив элементами, совпадающими в первых двух массивах, а на месте остальных ставит нули.
program massiv3; var
a,b,c:array[1..20]
of
integer; i:integer; begin randomize; for
i:=1 to
20 do begin a[i]:=1+random(5);
write(a[i]:3); end;
writeln; for
i:=1 to
20 do begin b[i]:=1+random(5);
write(b[i]:3); end;
writeln; for
i:=1 to
20 do begin if
a[i]=b[i] then
c[i]:=a[i] else
c[i]:=0; write(c[i]:3); end; end.
В этой программе при распечатке массивов мы не использовали, как раньше, пробел для разделения чисел, а указали после двоеточия, сколько знаков предоставить для числа. Это удобно, когда массивы располагаются на нескольких строках: числа будут столбиком друг под другом.
