Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация задач. Массивы (96

.pdf
Скачиваний:
7
Добавлен:
15.11.2022
Размер:
238.34 Кб
Скачать

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

a) по некоторому закону (вычисление выражения):

For i:=1 to 5 do odmas[i] :=i*i;

б) заполнение массива случайными числами с использованием генератора случайных чисел (random access):

For i:=1 to 5 do odmas[i] :=Random(10);

в) введение данных с клавиатуры.

Предположим, что в программе массивы объявлены следующим образом:

Const

n=3; m=2; Type

Tarint = array[1..n*m] of integer; Tmatrchar= array[1..n,1..m] of char;

Var

Vector :Tarint;

Matr:Tmatrchar;

Ввод данных в массив можно выполнить двумя способами. Для одномерного массива первый способ описывается такой последовательностью операторов:

Writeln(‘Введите в массив Vector 6 целых чисел’); For i:=1 to n*m do read(Vector[i]);

Числа в количестве n*m вводятся через пробел в одну строку, и только в конце ввода следует нажатие клавиши ENTER.

Для двумерного массива последовательность операторов тако-

ва:

Writeln(‘Введите в матрицу 6 символов’); For i :=1 to n do

For j :=1 to m do Read (Matr[i, j]);

Данный способ обеспечивает ввод данных в виде матрицы. После ввода трех символов в каждой строке следует нажимать клавишу ENTER.

Второй способ позволяет вводить данные столбиком (в каждой строке по одному числу для одномерного массива и символу для матрицы). Этот способ следует использовать только для массивов малых размеров.

11

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Инициализация одномерного массива:

For i:=1 to n*m do Begin

Write(‘Vector[‘, i:2,’] = ’); Readln(Vector[i]);

End;

Инициализация матрицы:

For i:=1 to n do For j:=1 to m do Begin

Write( ‘matr[‘,i:1, ’ ’, j:1,’]= ‘); Readln(matr[i,j]);

End;

Эти фрагменты программы позволяют вводить элементы массива непосредственно за подсказкой, курсор стоит´ через пробел за знаком равенства.

Вывод на экран значений элементов массивов

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

1. Вывод значений в виде последовательности элементов одномерного массива и в виде матрицы для двумерного массива:

{одномерный массив}

Writeln(‘ Элементы одномерного массива: ‘); For i : = 1 to 10 do write(‘ ‘, a[ i ]);

Writeln;

{ двумерный массив}

Writeln(‘ Результирующая матрица’); For i := 1 to n do

begin

For j : = 1 to m do {вывод строки по столбцам} Write(b[ i, j ] : 3,’ ’);

Writeln {переход к новой строке} end;

2. Вывод на монитор данных массива в виде столбца его элементов:

{одномерный массив}

12

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Writeln(‘ Все элементы действительного типа одномерного массива выведены столбиком: ‘);

For i : = 1 to 10 do writeln(‘a [‘, I : 2,’] = ‘, a [ i ] : 4 : 2); { двумерный массив}

Writeln(‘ Результирующая матрица, выведенная поэлементно в столбец’);

For i:=1 to n do For j:=1 to m do

Writeln(’ b [‘, i : 2,’,’, j : 2,’] = ’, b [ i, j ] : 3);

Этот способ вывода применяется только для малоразмерной матрицы.

Работа с одномерными массивами

Поиск элемента в массиве

Поиск элемента — важная и часто встречающаяся задача при работе с массивами.

Пусть имеется массив с именем Massiv, состоящий из семи элементов — целых чисел (рис. 3).

Рис. 3

1. Поиск заданного элемента массива. Пусть требуется найти заданное число в одномерном массиве, например, 4. Необходимо всегда начинать поиск с первого элемента массива, просматривая массив последовательно от первого элемента до последнего и сравнивая каждый элемент с заданным числом (рис. 4). Если требуемый элемент обнаружен, следует закончить поиск.

13

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Рис. 4

Алгоритм поиска выглядит следующим образом.

Затребовать заданное число поиска. Цикл по i от 1 до n делай:

Если какой-нибудь элемент массива будет равен заданному числу, то поиск завершен успешно.

Выйти из цикла. Конец цикла.

Графическое представление алгоритма приведено на рис. 5.

Рис. 5

Пример. Пусть требуется найти число 4.

В цикле по i от 1 до 7 сравниваем а[i] с заданным числом 4: а) если а[i] = 4, то определяем место, где находится в массиве

этот элемент (рис. 6); б) если заданный элемент найден, то уже нет смысла продол-

жать поиск — цель достигнута, и можно выйти из цикла (рис. 7); в) если заданный элемент не найден, то нужно выдать сообще-

ние, что такого элемента в массиве нет.

Задание 3.1. Выполнить процесс поиска графически в текстовом процессоре.

Задание 3.2. Написать программу поиска элемента на языке Паскаль.

14

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Рис. 6

Рис. 7

2. Поиск максимального элемента массива. Обозначим максимальный элемент в массиве (рис. 8) через идентификатор (имя) Max_element. Присвоим ему очень маленькое значение (обычно задают значение левой границы диапазона допустимых значений для типа данных).

Пусть Max_element будет равен –1000, т. е. Max_element: =

=–1000.

Вцикле по i от 1 до 6 сравниваем каждый элемент массива со

значением Max_element.

15

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Рис. 8

Если текущий элемент в массиве больше, чем Max_element, то присваиваем максимальному элементу текущее значение элемента массива.

После окончания цикла выводим полученное значение в качестве результата (рис. 9).

Рис. 9

Максимальным элементом в массиве является число 17, его индекс i = 4.

Запишем алгоритм поиска.

16

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Принять максимальный элемент Max_element равным очень маленькому числу.

Цикл по i от 1 до n делай:

Сравнить каждый элемент массива с Max_element и если элемент массива больше Max_element, то присвоить максимальному элементу текущее значение элемента массива:

если a[i] > Max_element то Max_element = a[i]; Конец цикла.

Можно максимальному элементу первоначально до цикла задать значение первого элемента массива: Max_element = a[1]. В этом случае поиск начинается со второго элемента массива и выполняется до его конца.

Задание 4.1. Представить рассмотренный алгоритм в текстовом процессоре..

Задание 4.2. Написать программу поиска максимального элемента на языке Паскаль.

Перестановка элементов массива («поменять элементы местами»)

Имеется массив с именем odmas (рис. 10). Требуется поменять местами второй и пятый элементы массива odmas [2] и odmas[5].

Рис. 10

Второй элемент массива odmas содержит русскую букву А, пятый элемент массива содержит русскую букву П:

odmas[2]:= ’A’; odmas[5]:= ’П’;

Если произвести непосредственный обмен данными между элементами odmas[2] и odmas[5], то получится два одинаковых элемента и один из них будет потерян:

17

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

а) odmas[2]: = оdmas[5]; в результате второй и пятый элементы массива будут содержать букву П. Букву А потеряли;

б) оdmas[5]: = odmas[2]; второй и пятый элементы массива будут содержать букву А. Потеряли букву П.

Вывод: прямой обмен между элементами массива производить нельзя. Нужен некоторый «посредник» — дополнительная переменная для временного хранения любого элемента массива.

Введем в качестве дополнительной переменную с именем obmen (она должна быть того же типа, что и элементы массива odmas).

Присвоим переменой obmen значение элемента odmas[2], т. е. obmen: = odmas[2];

В этом случае мы копируем переменную odmas[2] в переменную obmen (рис. 11).

Рис. 11

Поставим на место элемента [2] элемент [5], т. е. odmas[2]: = = odmas[5] (рис. 12).

Рис. 12

Сохраненный элемент odmas[2] ставим на место элемента [5], т. е. odmas[5]: = obmen (рис. 13).

Задание 5.1. Представить рассмотренный алгоритм в текстовом процессоре.

18

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Рис. 13

Задание 5.2. Написать программу перестановки элементов массива на языке Паскаль.

Сортировка массива

Сортировка — это упорядочение элементов массива по какомулибо признаку. Например, список студентов, записанный произвольным образом, необходимо записать в алфавитном порядке или номера студенческих билетов нужно записать в порядке их возрастания.

Сортировку элементов массива по возрастанию их значений рассмотрим на примере массива Data, приведенного на рис. 14.

Рис. 14

Находим минимальный элемент массива между data[0] и data[9] и переставляем его на место первого элемента (рис. 15).

Ищем второй минимальный элемент, начиная с элемента data[1] и заканчивая элементом data[9]. Им является data[5] (data [5] = 4). Меняем местами data[5] и data[0]. Далее поиск минимального элемента происходит в диапазоне от data[2] до data[9]. Минимальным является элемент data[2] (data[2] = 6). Он стоит

19

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Рис. 15

на месте, и обмен производить не нужно. Граница поиска минимального элемента — левая граница массива — смещается вправо, а правая граница остается неизменной (рис. 16).

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

Алгоритм сортировки элементов массива выглядит следующим образом.

Цикл по i от 1 до n делай:

Принять min_element равным большому числу;

Цикл по j от j = i до n делай:

Поиск min элемента и его сохранение; {сравнение текущего элемента с минимальным и сохранение наименьшего из них}

Конец цикла по j.

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]