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

Скачать презентацию Тема 3. Массивы Раздел 4. Стр. 48 -53. Скачать презентацию Тема 3. Массивы Раздел 4. Стр. 48 -53.

Т3_Массивы.ppt

  • Количество слайдов: 55

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

>Эпиграф В каждой естественной науке заключено столько истины, сколько в ней есть математики. Эпиграф В каждой естественной науке заключено столько истины, сколько в ней есть математики. Кант (22. 04. 1724 – 12. 02. 1804)

>  Структура типов данных  (Стр. 227) • Типы данных:  § Простые; Структура типов данных (Стр. 227) • Типы данных: § Простые; § Структурированные: • Массивы; • Строки; • Множества; • Файлы; • Записи.

>  Структурированные типы   данных • Структурированный тип представляет собой  набор Структурированные типы данных • Структурированный тип представляет собой набор элементов - данных, объединенных программистом в единый блок в соответствии с особенностями решаемой задачи. • Данные, входящие в блок, могут быть однотипными или разнотипными. • Весь блок данных имеет общее имя. • Каждый элемент имеет свое значение.

>  3. 1. Определение массива • Массив – это совокупность конечного  числа 3. 1. Определение массива • Массив – это совокупность конечного числа элементов одного и того же типа, в которой каждый элемент имеет номер, а все элементы - общее имя. • (Массивом называется фиксированный набор индексированных элементов любого, но обязательно одного и того же типа. )

>  3. 2. Индекс • Номер элемента массива называется его  индексом. 3. 2. Индекс • Номер элемента массива называется его индексом. • Индекс не обязательно должен быть числом в явном виде. • Число индексов может быть несколько. • Массив с одним индексов называется одномерным, с двумя – двумерным.

>  3. 3. Применение массивов • Довольно часто возникают задачи, для  решения 3. 3. Применение массивов • Довольно часто возникают задачи, для решения которых необходимо ввести большое количество данных одинакового типа. • При обработке этих данных необходимо выполнять одни и те же операции, например, задача сортировки последовательности введенных чисел.

>  3. 4. Описание массива в    программе • Вариант 1: 3. 4. Описание массива в программе • Вариант 1: Var QQ: Array[n 1. . n 2] Of <тип данных>; Array, Of – зарезервированные слова; QQ – имя массива; n 1 – начальный индекс; n 2 – конечный индекс.

>Примечание 1: 1. Имя массива, пишется по правилам  написания идентификаторов; 2. <тип данных> Примечание 1: 1. Имя массива, пишется по правилам написания идентификаторов; 2. <тип данных> - любой кроме файлового. 3. При объявлении массива для указания диапазона изменения значений индексов чаще всего применяется тип диапазон.

>Примечание 2: 1. В скобках [n 1. . n 2] – константы  порядкового Примечание 2: 1. В скобках [n 1. . n 2] – константы порядкового типа; 2. Нумерация элементов массива необязательно начинается с 1, но нижняя граница должна быть меньше верхней. 3. Количество элементов в массиве можно легко получить по формуле: n 2 -n 1+1. (Если n 1 и n 2 числа. )

> Описание массива в программе • Вариант 2: массив можно описать следующим образом: Описание массива в программе • Вариант 2: массив можно описать следующим образом: Const n=10; Type Ind=1. . n; Var mas: Array[Ind] Of Integer;

>Примечание 3: 1. Особенностью структуры типа массив  является недопустимость изменения типа  индекса Примечание 3: 1. Особенностью структуры типа массив является недопустимость изменения типа индекса в процессе выполнения программы. 2. Г раницы типа-диапазона для индекса можно задавать с помощью константы и нельзя задавать с помощью переменной. 3. Индексами массива могут быть значения любого порядкового типа, за исключением Long. Int, а элементами - любого типа, включая структуры.

> 3. 5. Примеры массивов 1. Var M 1: Array[-5. . 10] Of Byte; 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 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 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 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 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. 6. Способы задания массива 1. Ввод массива с клавиатуры; 2. Задание в виде типизированной константы; 3. Задание с помощью генератора случайных чисел; 4. Расчет по формуле.

>  3. 6. 1. Ввод массива с   клавиатуры • Фрагмент программы: 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; • Раздел описаний: 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. Типизированная константа – переменная, имеющая начальное значение • Раздел описаний: 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 производит 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: • 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; 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: 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. Действия с массивами • Обратите внимание, что при выполнении всех 3. 8. Действия с массивами • Обратите внимание, что при выполнении всех действий, за исключением определенной операции присваивания, к массиву нельзя обращаться как к единому целому; • Допускается использовать только элементы массива. • Попытка выполнить операцию со всем массивом сразу, например, вывести все его значения на экран - Write(Mas), приведет к ошибке.

> 3. 8. 1. Доступ к отдельному  элементу массива.  • Обратится к 3. 8. 1. Доступ к отдельному элементу массива. • Обратится к элементу массива как к обычной переменной можно, указав имя массива и индекс элемента в квадратных скобках. • С элементами массива можно выполнять все операции, которые допускаются его типом данных.

> 3. 8. 2. Примеры действий с  отдельными элементами: 1.  Read. Ln(Mas[2]); 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; 3. 8. 3. Нахождение суммы и среднего арифметического: • Sum: =0; For j: =1 To N Do Sum: =Sum+X[j]; {Вычисление суммы} Sr: =Sum/N; {Вычисление среднего}

> 3. 8. 4. Нахождение номера и  значения максимального  элемента. Maks: =Ar[1]; 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. Сортировка массива • Часто возникает необходимость упорядочить элементы массива. • В упорядоченном массиве легко проводить поиск элементов с определенными значениями. • В упорядоченном массиве просто определить максимальное или минимальное значение (поиск максимума или минимума).

>  3. 9. 1. Способы сортировки   массива 1. Сортировка выбором. 2. 3. 9. 1. Способы сортировки массива 1. Сортировка выбором. 2. Сортировка на основе алгоритмов обмена (например, метод «пузырька» ).

>  3. 9. 2. Сортировка методом  «пузырька» (Стр. 49) 1. Элементы введенной 3. 9. 2. Сортировка методом «пузырька» (Стр. 49) 1. Элементы введенной последовательности просматриваются в цикле от первого до предпоследнего значения. Значение каждого элемента сравнивается со следующим по порядку, и если следующее значение больше, то они меняются местами. 2. В результате выполнения этого цикла самое меньшее (самое «легкое» ) значение обязательно переместится в конец последовательности. Отсюда, кстати, и название метода.

>  Продолжение 3. Теперь надо снова выполнить цикл  просмотра для всех элементов Продолжение 3. Теперь надо снова выполнить цикл просмотра для всех элементов последовательности, но за исключением уже двух элементов - предпоследнего и последнего. 4. Таких циклов просмотра в самом неудачном случае надо выполнить на единицу меньше числа элементов в последовательности, и их включают во внешний цикл.

>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; {Доп. перемен. } Begin {Ввод исходной последовательности} For i: =1 To n Do Begin Write('? '); Readln(Mas[i]); End;

>   Массив с введенными    данными: 1  2 Массив с введенными данными: 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 {Сортировка введеннной последовательности} For i: =1 To n-1 Do For j: =1 To n-i Do If Mas[j]

>Таблица результатов обмена после каждого прохода 1  2  3  4 Таблица результатов обмена после каждого прохода 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. 9. 3. Различие в методах сортировки: • При сортировке выбором отсортированный массив начинает формироваться с начала. • При сортировке на основе алгоритма обмена массив формируется с конца.

>  3. 10. Действие с целым  массивом • Можно присвоить сразу всему 3. 10. Действие с целым массивом • Можно присвоить сразу всему массиву значение другого массива, но только если эти массивы одного и того же типа. • Пример: Var x, y: Array [1. . 100] Of Integer; … x: =y; Этот оператор копирует значения всех элементов массива X в массив Y.

> 3. 11. Многомерные массивы • Массив может иметь несколько индексов.  Количество индексов 3. 11. Многомерные массивы • Массив может иметь несколько индексов. Количество индексов не ограничивается. • Однако особенности адресации к памяти при работе в среде DOS позволяют использовать для хранения данных, объявленных в разделе описаний одной программы, не более 64 Кб. • Поэтому, например, объявление массива Var All. Int: Array[Integer] of Word, для которого в памяти потребуется ровно в два раза больше места, приведет к появлению следующей ошибки 'Structure too large' ( «Слишком большая структура» ).

>  3. 12. Двумерный массив • Массив с двумя индексами можно  объявить 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 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 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 Массив состоит из следующих элементов: 1 2 2 3 3 8

>  3. 14. Пример двумерного  массива: (Стр. 52) • Сформируйте матрицу, состоящую 3. 14. Пример двумерного массива: (Стр. 52) • Сформируйте матрицу, состоящую из пяти строк и пяти столбцов, выведите ее на экран, найдите и выведите сумму чисел, расположенных на диагоналях этой матрицы.

>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; 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 {Вывод полученной таблицы на экран} 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: =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 Один из возможных результатов работы программы приведен ниже: Таблица 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. В зависимости Выводы: 1. Массив – это индексированный набор однотипных данных. 2. В зависимости от количества индексов массивы делятся на одномерные и многомерные. 3. Создать массив можно разными способами (не менее 4 -х).

>Выводы (продолжение): 4. Действия над всем массивом выполняет  оператор присваивания. 5. Возможные действия Выводы (продолжение): 4. Действия над всем массивом выполняет оператор присваивания. 5. Возможные действия с элементами массива определяются типом данных элементов. 6. При поэлементной работе с массивом используется цикл с параметром.

>   Вопросы: 1. Как задать размер массива, если заранее  неизвестно число Вопросы: 1. Как задать размер массива, если заранее неизвестно число элементов в массиве? 2. Как получить случайные числа в диапазоне a. . b? 3. Какой индекс двумерного массива определяет номер строки при выводе таблицы результатов?