
- •Обработка одномерных массивов на языке программирования turbo pascal Учебное пособие для студентов
- •Оглавление
- •Введение
- •Теоретический материал по массивам Понятие массива
- •Индексы массива
- •Представление массива в памяти
- •Пользовательский тип – массив
- •Одномерные и n-мерные массивы
- •Двумерные массивы
- •Основные алгоритмы обработки массивов Общие замечания
- •Ввод/вывод массива
- •Вычисление суммы и среднего арифметического элементов массива
- •Поиск максимального/минимального элемента массива
- •Подсчет количества элементов, удовлетворяющих заданному условию
- •Удаление элемента из массива
- •Вставка новых элементов в массив
- •Удаление нескольких элементов массива
- •Обработка нескольких массивов
- •Проверка соседних элементов массива
- •Методы сортировок массивов Сортировка массивов
- •Сортировка методом вставки
- •Сортировка методом выбора
- •"Пузырьковая" сортировка
- •Быстрая сортировка
- •Примеры решения задач на сортировку массивов
- •Задания для самостоятельного решения Вариант №1
- •Вариант №2
- •Вариант №3
- •Вариант №4
- •Вариант №5
- •Вариант №6
- •Вариант №7
- •Вариант №8
- •Вариант №9
- •Вариант №10
- •Вариант №11
- •Вариант №12
- •Вариант №13
- •Вариант №14
- •Вариант №15
- •Список используемой литературы
- •420012, Казань, ул. Чехова, 36
Двумерные массивы
Одномерный массив можно представить в виде строки. Например, массив целых чисел можно представить строкой целых чисел, например такой: 3 2 4 1 3.
Двумерный массив можно представить в виде прямоугольной таблицы, например такой:
9 3 4 5
1 4 8 3
1 1 5 4
Чтобы определить такой массив, в программе надо написать:
Var
A: array[1..3,1..4] of integer;
Здесь в массиве A первый интервал индексов – 1..3 – обозначает индекс номера строки, а второй интервал индексов – 1..4 – обозначает индекс номера столбца.
Для обращения к элементу двумерного массива необходимо в квадратных скобках сначала указать номер строки, а затем номер столбца.
Например:
Writeln(A[2,3]); {будет выведено число 8}
Writeln(A[3,1]); {будет выведено число 1}
Writeln(A[1,1]); {будет выведено число 9}
Замечание: в данных методических указаниях будут рассматриваться алгоритмы обработки только одномерных массивов.
Основные алгоритмы обработки массивов Общие замечания
Алгоритмы обработки массивов включают в себя, как правило, последовательную обработку каждого из элементов массива. Такая последовательная обработка называется сканированием массива, и для ее реализации удобнее всего использовать цикл for. Например, фрагмент программы, выполняющий подсчет суммы элементов массива имеет такой вид:
…………………………….
S:=0; {Значение суммы S обнуляем}
For i:=1 to N do {проходим по всем N элементам массива}
S:=S+a[i]; {прибавляя к сумме S значение i-го элемента}
…………………………….
По сложившейся традиции, переменная, используемая в качестве счетчика цикла сканирования элементов массива, называется i. Если в программе требуется не одна, а две переменные-счетчики, то им дают имена i и j. Если же требуется более двух переменных-счетчиков, то первым двум дают имена i и j, а остальным, как правило, дают тоже однобуквенные имена (например k, l, z и т.д.).
Все эти переменные должны иметь тип, совместимый с типом индекса элемента массива.
Всего же при работе с одномерными массивами нужны:
Константы:
Const
maxN = 20; {максимальное количество элементов
в массиве}
Типы:
Type
IndexEl = 1 .. maxN; {тип индекса элемента}
masInt = array[IndexEl] of integer; {тип массива целых чисел}
Переменные:
Var
A: masInt; {обрабатываемый массив}
n:integer; {количество используемых элементов в массиве}
i:IndexEl; {счетчик, используемый для сканирования}
Замечание:
1. Знаком……………………… будем обозначать, что некоторая часть исходного текста программы пропущена.
2. Если в алгоритме будут нужны еще какие-то переменные, то они будут указаны дополнительно.
Ввод/вывод массива
Пример 1: Ввод массива с клавиатуры
Алгоритм состоит из двух пунктов:
1 . Ввод количества элементов.
2 . Ввод элементов массива поодиночке в цикле.
Фрагмент программы:
…………………………….
{1 - ввод количества элементов}
repeat
write('Введите n:');
readln(n);
until (n>=1) and (n<=maxN);
{2 - ввод элементов массива поодиночке}
for i:=1 to n do
begin
write('a[',i,']');
readln(a[i]);
end;
Пример 2: Заполнение массива случайными числами.
Алгоритм состоит из трех пунктов:
1 . Перезапустить генератор случайных чисел.
2 . Ввести количество элементов n (или сгенерировать случайное значение n).
3 . Сгенерировать значения для всех элементов.
Фрагмент программы:
…………………………….
{1 - перезапускаем генератор случайных чисел}
randomize;
{2 - генерируем случайное значение n}
n:=random(maxN);
{3 - генерируем n элементов массива}
for i:=1 to n do
a[i]:=random(100); {каждый элемент примет значение из интервала 0..99}
…………………………….
Краткая информация об используемых стандартных процедурах и функциях:
Randomize – инициализирует генератор случайных чисел случайным значением (случайное значение зависит от момента перезапуска, т.е. зависит от времени).
Random(Num) – возвращает случайное целое число, находящееся в интервале 0 .. (Num-1) (Например, если Num=100 (как в нашем примере), то Random возвращает числа в интервале от 0 до 99).
Если Num<=0, то Random всегда будет возвращать 0.
Чтобы получить значения в интервале, отличном от [0..Num-1], необходимо к значению, возвращаемому Random, прибавить смещение начала интервала.
Пример 1: необходим интервал [-50 .. 50].
Длина интервала 101, смещение начала интервала –50.
random(101)-50
Пример 2: необходим интервал [20 .. 30].
Длина интервала - 11, смещение начала интервала 20.
random(11)+20
Пример 3: необходим интервал [-1000 .. -500]
Длина интервала 501, смещение начала интервала -1000
random(501)-1000
Пример 3: Вывод массива.
Алгоритм состоит из двух пунктов:
1. Вывод имени массива.
2. Вывод массива по элементам.
Фрагмент программы:
…………………………….
{1 - вывод имени массива}
writeln ('Массив А[',n,']');
{2 - вывод элементов массива}
for i:=1 to n do
writeln('A[',i,']=',a[i]);
…………………………….