Тема 3. Массивы Раздел 4. Стр. 48 -53.









![Примечание 2: 1. В скобках [n 1. . n 2] – константы порядкового Примечание 2: 1. В скобках [n 1. . n 2] – константы порядкового](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-10.jpg)


![3. 5. Примеры массивов 1. Var M 1: Array[-5. . 10] Of Byte; 3. 5. Примеры массивов 1. Var M 1: Array[-5. . 10] Of Byte;](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-13.jpg)
![Var M 1: Array[-5. . 10] Of Byte; -5 -4 Var M 1: Array[-5. . 10] Of Byte; -5 -4](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-14.jpg)
![Var M 2: Array[3. . 15] Of Integer; 3 4 Var M 2: Array[3. . 15] Of Integer; 3 4](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-15.jpg)
![Var M 3: Array[‘A’. . ’Z’] Of Char; A B Var M 3: Array[‘A’. . ’Z’] Of Char; A B](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-16.jpg)



![• Раздел описаний: Const n=30; Type Myarray=Array[1. . n] Of Integer; • Раздел описаний: Const n=30; Type Myarray=Array[1. . n] Of Integer;](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-20.jpg)


![• Const n=10; Var Ar: Array[1. . n] Of Integer; i: • Const n=10; Var Ar: Array[1. . n] Of Integer; i:](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-23.jpg)

![3. 7. Вывод массива Var Mas: Array[‘A’. . ’Z’] Of Byte; i: 3. 7. Вывод массива Var Mas: Array[‘A’. . ’Z’] Of Byte; i:](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-25.jpg)


![3. 8. 2. Примеры действий с отдельными элементами: 1. Read. Ln(Mas[2]); 3. 8. 2. Примеры действий с отдельными элементами: 1. Read. Ln(Mas[2]);](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-28.jpg)


![3. 8. 4. Нахождение номера и значения максимального элемента. Maks: =Ar[1]; 3. 8. 4. Нахождение номера и значения максимального элемента. Maks: =Ar[1];](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-31.jpg)




![Const n=10; Var Mas: Array[1. . n] Of Integer; i, j: Byte; Exchange: Integer; Const n=10; Var Mas: Array[1. . n] Of Integer; i, j: Byte; Exchange: Integer;](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-36.jpg)












![Var Tabl: Array[1. . 5, 1. . 5] Of Byte; Sum, i, j: Byte; Var Tabl: Array[1. . 5, 1. . 5] Of Byte; Sum, i, j: Byte;](https://present5.com/presentation/3/38947845_221026211.pdf-img/38947845_221026211.pdf-49.jpg)






Тема 3. Массивы Раздел 4. Стр. 48 -53.
Эпиграф В каждой естественной науке заключено столько истины, сколько в ней есть математики. Кант (22. 04. 1724 – 12. 02. 1804)
Структура типов данных (Стр. 227) • Типы данных: § Простые; § Структурированные: • Массивы; • Строки; • Множества; • Файлы; • Записи.
Структурированные типы данных • Структурированный тип представляет собой набор элементов - данных, объединенных программистом в единый блок в соответствии с особенностями решаемой задачи. • Данные, входящие в блок, могут быть однотипными или разнотипными. • Весь блок данных имеет общее имя. • Каждый элемент имеет свое значение.
3. 1. Определение массива • Массив – это совокупность конечного числа элементов одного и того же типа, в которой каждый элемент имеет номер, а все элементы - общее имя. • (Массивом называется фиксированный набор индексированных элементов любого, но обязательно одного и того же типа. )
3. 2. Индекс • Номер элемента массива называется его индексом. • Индекс не обязательно должен быть числом в явном виде. • Число индексов может быть несколько. • Массив с одним индексов называется одномерным, с двумя – двумерным.
3. 3. Применение массивов • Довольно часто возникают задачи, для решения которых необходимо ввести большое количество данных одинакового типа. • При обработке этих данных необходимо выполнять одни и те же операции, например, задача сортировки последовательности введенных чисел.
3. 4. Описание массива в программе • Вариант 1: Var QQ: Array[n 1. . n 2] Of <тип данных>; Array, Of – зарезервированные слова; QQ – имя массива; n 1 – начальный индекс; n 2 – конечный индекс.
Примечание 1: 1. Имя массива, пишется по правилам написания идентификаторов; 2. <тип данных> - любой кроме файлового. 3. При объявлении массива для указания диапазона изменения значений индексов чаще всего применяется тип диапазон.
Примечание 2: 1. В скобках [n 1. . n 2] – константы порядкового типа; 2. Нумерация элементов массива необязательно начинается с 1, но нижняя граница должна быть меньше верхней. 3. Количество элементов в массиве можно легко получить по формуле: n 2 -n 1+1. (Если n 1 и n 2 числа. )
Описание массива в программе • Вариант 2: массив можно описать следующим образом: Const n=10; Type Ind=1. . n; Var mas: Array[Ind] Of Integer;
Примечание 3: 1. Особенностью структуры типа массив является недопустимость изменения типа индекса в процессе выполнения программы. 2. Г раницы типа-диапазона для индекса можно задавать с помощью константы и нельзя задавать с помощью переменной. 3. Индексами массива могут быть значения любого порядкового типа, за исключением Long. Int, а элементами - любого типа, включая структуры.
3. 5. Примеры массивов 1. Var M 1: Array[-5. . 10] Of Byte; 2. Var M 2: Array[3. . 15] Of Integer; 3. Var M 3: Array[‘A’. . ’Z’] Of Char; 4. Type T 1=(Zima, Vesna, Leto, Osen); T 2=(good, normal, bad); Var M 4: Array[T 1] Of T 2;
Var M 1: Array[-5. . 10] Of Byte; -5 -4 -3 -2 -1 0 1 … 10
Var M 2: Array[3. . 15] Of Integer; 3 4 5 6 7 … 13 14 15
Var M 3: Array[‘A’. . ’Z’] Of Char; A B C … Z
Type T 1=(Zima, Vesna, Leto, Osen); T 2=(good, normal, bed); Var M 4: Array[T 1] Of T 2; Zima good Vesna normal Leto bad Osen good
3. 6. Способы задания массива 1. Ввод массива с клавиатуры; 2. Задание в виде типизированной константы; 3. Задание с помощью генератора случайных чисел; 4. Расчет по формуле.
3. 6. 1. Ввод массива с клавиатуры • Фрагмент программы: Write. Ln(‘Введите массив’); For i: =1 To 10 Do Begin Write. Ln(‘Значение’, i: 2, ’-ого элемента’); Read. Ln(x[i]); End;
• Раздел описаний: Const n=30; Type Myarray=Array[1. . n] Of Integer; Var A: Myarray; Procedure Init 1(Var m: Myarray); Var i: Integer; Begin Write. Ln(‘Введите ’, n, ’ чисел’); For i: =1 To n Do Read. Ln(m[i]); End;
3. 6. 2. Типизированная константа – переменная, имеющая начальное значение • Раздел описаний: • Const n=15; Var Ves: Array[1. . n] Of Byte=(186, 152, 175, 170, 172, 160, 161, 190, 167, 180, 170, 166, 175, 179, 178);
3. 6. 3. Генератор случайных чисел • Процедура Randomize производит начальную установку встроенного программного генератора случайных чисел. • Функция Random возвращает одно случайно выбранное дробное число x, 0<=x<1. • Функция Random (n) возвращает одно случайно выбранное целое неотрицательное число j, 0<=j
• Const n=10; Var Ar: Array[1. . n] Of Integer; i: Integer; Begin Randomize; {Активизация ГСЧ} For i: =1 To n Do Begin Ar[i]: =Random(21)-10; {Генерация одного случайного числа} Write. Ln(i: 4, Ar[i]: 6); End.
3. 6. 4. Расчет элементов массива по формуле: • Const n=15; Var y: Array[0. . n] Of Real; x, xn, dx: Real; i: Integer; Begin xn: =-4; dx: =0. 5; For i: =0 To n Do Begin x: =xn+i*dx; y[i]: =Sqr(x)-x-2; End; … End.
3. 7. Вывод массива Var Mas: Array[‘A’. . ’Z’] Of Byte; i: Char; Begin … For i: =‘A’ To ‘Z’ Do Write. Ln(i: 5, Mas[i]: 6); End;
3. 8. Действия с массивами • Обратите внимание, что при выполнении всех действий, за исключением определенной операции присваивания, к массиву нельзя обращаться как к единому целому; • Допускается использовать только элементы массива. • Попытка выполнить операцию со всем массивом сразу, например, вывести все его значения на экран - Write(Mas), приведет к ошибке.
3. 8. 1. Доступ к отдельному элементу массива. • Обратится к элементу массива как к обычной переменной можно, указав имя массива и индекс элемента в квадратных скобках. • С элементами массива можно выполнять все операции, которые допускаются его типом данных.
3. 8. 2. Примеры действий с отдельными элементами: 1. Read. Ln(Mas[2]); 2. Write. Ln(Mas[5]); 3. Mas[i]>=Mas[i+1] 4. Mas[2]: =(Mas[1]+Mas[3])/2;
Действия со всеми элементами массива выполняются поэлементно в цикле с параметром.
3. 8. 3. Нахождение суммы и среднего арифметического: • Sum: =0; For j: =1 To N Do Sum: =Sum+X[j]; {Вычисление суммы} Sr: =Sum/N; {Вычисление среднего}
3. 8. 4. Нахождение номера и значения максимального элемента. Maks: =Ar[1]; Nomer: =1; For j: =2 To N Do If Ar[j]>Maks Then Begin Maks: =Ar[j]; Nomer: =j; End;
3. 9. Сортировка массива • Часто возникает необходимость упорядочить элементы массива. • В упорядоченном массиве легко проводить поиск элементов с определенными значениями. • В упорядоченном массиве просто определить максимальное или минимальное значение (поиск максимума или минимума).
3. 9. 1. Способы сортировки массива 1. Сортировка выбором. 2. Сортировка на основе алгоритмов обмена (например, метод «пузырька» ).
3. 9. 2. Сортировка методом «пузырька» (Стр. 49) 1. Элементы введенной последовательности просматриваются в цикле от первого до предпоследнего значения. Значение каждого элемента сравнивается со следующим по порядку, и если следующее значение больше, то они меняются местами. 2. В результате выполнения этого цикла самое меньшее (самое «легкое» ) значение обязательно переместится в конец последовательности. Отсюда, кстати, и название метода.
Продолжение 3. Теперь надо снова выполнить цикл просмотра для всех элементов последовательности, но за исключением уже двух элементов - предпоследнего и последнего. 4. Таких циклов просмотра в самом неудачном случае надо выполнить на единицу меньше числа элементов в последовательности, и их включают во внешний цикл.
Const n=10; Var Mas: Array[1. . n] Of Integer; i, j: Byte; Exchange: Integer; {Доп. перемен. } Begin {Ввод исходной последовательности} For i: =1 To n Do Begin Write('? '); Readln(Mas[i]); End;
Массив с введенными данными: 1 2 3 4 5 6 7 8 9 10 2 -4 5 6 0 3 7 1 12 8
{Сортировка введеннной последовательности} For i: =1 To n-1 Do For j: =1 To n-i Do If Mas[j]
Таблица результатов обмена после каждого прохода 1 2 3 4 5 6 7 8 9 10 2 -4 5 6 0 3 7 1 12 8 1) 2 5 6 0 3 7 1 12 8 -4 2) 5 6 2 3 7 1 12 8 0 -4 3) 6 5 3 7 2 12 8 1 0 -4 4) 6 5 7 3 12 8 2 1 0 -4 5) 6 7 5 12 8 3 2 1 0 -4 6) 7 6 12 8 5 3 2 1 0 -4 7) 7 12 8 6 5 3 2 1 0 -4 8) 12 8 7 6 5 3 2 1 0 -4 9) 12 8 7 6 5 3 2 1 0 -4
3. 9. 3. Различие в методах сортировки: • При сортировке выбором отсортированный массив начинает формироваться с начала. • При сортировке на основе алгоритма обмена массив формируется с конца.
3. 10. Действие с целым массивом • Можно присвоить сразу всему массиву значение другого массива, но только если эти массивы одного и того же типа. • Пример: Var x, y: Array [1. . 100] Of Integer; … x: =y; Этот оператор копирует значения всех элементов массива X в массив Y.
3. 11. Многомерные массивы • Массив может иметь несколько индексов. Количество индексов не ограничивается. • Однако особенности адресации к памяти при работе в среде DOS позволяют использовать для хранения данных, объявленных в разделе описаний одной программы, не более 64 Кб. • Поэтому, например, объявление массива Var All. Int: Array[Integer] of Word, для которого в памяти потребуется ровно в два раза больше места, приведет к появлению следующей ошибки 'Structure too large' ( «Слишком большая структура» ).
3. 12. Двумерный массив • Массив с двумя индексами можно объявить так: Const n=10; m=5; Type Ind 1=1. . n; Ind 2=-5. . m; Var mas: Array[Ind 1, Ind 2] Of Integer; • Первый элемент: mas[1, -5]: =15
Ind 2 -5 -4 -3 -2 -1 0 1 2 3 4 5 Ind 1 1 15 2 3 4 5 6 7 8 9 10
• Многомерный массив можно задать как типизированную константу. • При этом внешние круглые скобки соответствуют левому индексу, вложенные в них круглые скобки – следующему, и так далее.
3. 12. Пример, задания двумерного массива Const n=3; m=2; Type Ind 1=1. . n; Ind 2=1. . m; Two. Dim=Array[Ind 1, Ind 2]Of Integer; Const mas: Two. Dim=((1, 2), (2, 3), (3, 8));
Массив состоит из следующих элементов: 1 2 2 3 3 8
3. 14. Пример двумерного массива: (Стр. 52) • Сформируйте матрицу, состоящую из пяти строк и пяти столбцов, выведите ее на экран, найдите и выведите сумму чисел, расположенных на диагоналях этой матрицы.
Var Tabl: Array[1. . 5, 1. . 5] Of Byte; Sum, i, j: Byte; Begin Randomize; {Активизации ГСЧ} {Формирование таблицы с элементами <=14} For i: =1 To 5 Do For j: =1 To 5 Do Tabl[i, j]: =Random(15);
{Вывод полученной таблицы на экран} Writeln(‘Таблица’); For i: =1 To 5 Do Begin {Вывод строки} For j: =1 To 5 Do Write(Tabl[i, j]: 4); {Переходкследующейстроке} Writeln; End;
Sum: =0; {Вычисление суммы диагональных элементов} For i: =1 To 5 Do Sum: =Sum+Tabl[i, i]+Tabl[6 -i, i]; {Вычитание элемента, расположенного в третьей строке и третьем столбце, который при выбранном алгоритме суммируется два раза} Sum: =Sum-Tabl[3, 3]; Writeln(‘Сумма=’, Sum); End.
Один из возможных результатов работы программы приведен ниже: Таблица 7 10 12 0 12 9 2 13 11 1 12 10 13 1 8 10 11 1 8 0 13 12 0 Сумма= 50
Выводы: 1. Массив – это индексированный набор однотипных данных. 2. В зависимости от количества индексов массивы делятся на одномерные и многомерные. 3. Создать массив можно разными способами (не менее 4 -х).
Выводы (продолжение): 4. Действия над всем массивом выполняет оператор присваивания. 5. Возможные действия с элементами массива определяются типом данных элементов. 6. При поэлементной работе с массивом используется цикл с параметром.
Вопросы: 1. Как задать размер массива, если заранее неизвестно число элементов в массиве? 2. Как получить случайные числа в диапазоне a. . b? 3. Какой индекс двумерного массива определяет номер строки при выводе таблицы результатов?

