Скачать презентацию СЛОЖНЫЕ СТРУКТУРЫ ДАННЫХ Типы данных 1 o Скачать презентацию СЛОЖНЫЕ СТРУКТУРЫ ДАННЫХ Типы данных 1 o

6_7 Сложные типы данных_Массивы.ppt

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

СЛОЖНЫЕ СТРУКТУРЫ ДАННЫХ СЛОЖНЫЕ СТРУКТУРЫ ДАННЫХ

Типы данных (1) o Все данные, используемые программой, должны принадлежать к какому − либо Типы данных (1) o Все данные, используемые программой, должны принадлежать к какому − либо заранее известному типу данных. o Все простые типы языка Паскаль можно разделить на n стандартные (Integer, Real, Char, Boolean, String, Array и др. ) n пользовательские (определяемые программистом)

1. Описание пользовательского типа данных 1. Описание пользовательского типа данных

Описание типа данных type имя_типа = описание_типа. . . var имя_переменной : имя_типа var Описание типа данных type имя_типа = описание_типа. . . var имя_переменной : имя_типа var имя_переменной : описание_типа

Перечисляемый тип данных type имя = (список имен констант) type Menu = (READ, WRITE, Перечисляемый тип данных type имя = (список имен констант) type Menu = (READ, WRITE, EDIT, QUIT) var m, n : Menu; … m : = READ; n : = m;

Интервальный тип данных type имя = конст_1. . конст_2 type H = 0. . Интервальный тип данных type имя = конст_1. . конст_2 type H = 0. . 23; R = -100. . 100; L = ’a’. . ’z’; A = READ. . EDIT; var A: R; r : -100. . 100;

Типы данных (2) o В задачах требующих обработки большого количества однотипных (или разнотипных) величин, Типы данных (2) o В задачах требующих обработки большого количества однотипных (или разнотипных) величин, вместо использования множества переменных для их хранения, удобнее применить специальные сложные структуры данных o Все типы языка Паскаль также можно разделить на n простые (Integer, Real, Char, Boolean) n cложные (структурированные)

Сложные типы 1. 2. 3. 4. 5. Массивы Строки Записи Множества Файлы Сложные типы 1. 2. 3. 4. 5. Массивы Строки Записи Множества Файлы

2. Массивы 2. Массивы

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

Виды массивов По структуре n Одномерный (вектор) n Двумерный (таблица) По принципу размещения в Виды массивов По структуре n Одномерный (вектор) n Двумерный (таблица) По принципу размещения в ОП n Динамические n Статические (обычные)

Описание массивов o ВНИМАНИЕ Размещение массива в памяти происходит до выполнения программы, поэтому при Описание массивов o ВНИМАНИЕ Размещение массива в памяти происходит до выполнения программы, поэтому при описании индекса можно применять только константы или константные выражения. o Способы описания: n в разделе типов n в разделе переменных

1 способ - в разделе типов одномерный массив type имя_типа = array [тип_индекса] of 1 способ - в разделе типов одномерный массив type имя_типа = array [тип_индекса] of тип_элемента type mas = array [1. . 6] of real; Color = array [byte] of mas; A = array [Menu] of boolean; var с : mas; Тип элементов массива может быть любым, кроме файлового, тип индексов — интервальным, перечисляемым или byte. Чаще всего для описания индекса используется интервальный тип данных.

1 способ разделе типов двумерный массив type имя_типа = array [тип_индекса 1, тип_индекса 2] 1 способ разделе типов двумерный массив type имя_типа = array [тип_индекса 1, тип_индекса 2] of тип_элемента type mas = array [1. . 6, 1. . 6] of real; Color = array [byte, 20. . 100] of mas; A = array [1. . 4, 1. . 4] of boolean; var с : mas;

2 способ: в разделе переменных одномерный массив var имя_массива : array [тип_индекса] of тип_элемента 2 способ: в разделе переменных одномерный массив var имя_массива : array [тип_индекса] of тип_элемента var a, b : array [1. . n] of integer;

Операции с массивами С массивами в целом можно выполнять только одну операцию: присваивание. При Операции с массивами С массивами в целом можно выполнять только одну операцию: присваивание. При этом массивы должны быть одного типа: const n = 6; type intmas = array [1. . n] of integer; var a, b : intmas; Begin … b : = a; … end. o Нельзя: n Write(a); n Read(b);

Двумерные массивы. . . 1 m const n = 4; m = 3; type Двумерные массивы. . . 1 m const n = 4; m = 3; type mas = array [1. . n] of integer; mas 2 = array [1. . m] of mas; . . . 1 n a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 n ----type mas 2 = array [1. . m, 1. . n] of integer; var a, b : mas 2; a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 | - 1 -я строка - | - 2 -я строка - | - 3 -я строка - | m

В разделе переменных двумерный массив var имя_массива : array [тип_индекса 1, тип_индекса 2] of В разделе переменных двумерный массив var имя_массива : array [тип_индекса 1, тип_индекса 2] of тип_элемента var с: array[1. . 10, 1. . 10] of byte; b: array[100. . 110] of array[1. . 10] of real;

Обращение к элементу массива o Имя массива [номер (индекс) элемента] n A[2]: =5; n Обращение к элементу массива o Имя массива [номер (индекс) элемента] n A[2]: =5; n B[3, 5]: =123;

Способы формирования (инициализация) массива 1. Ввод элементов с клавиатуры (read A[ i]) 2. Формирование Способы формирования (инициализация) массива 1. Ввод элементов с клавиатуры (read A[ i]) 2. Формирование по правилу (например, A[i]: =i+2 или B[i]: =B[i-1]*2; 3. Чтение из файла 4. Простое присваивание a[1]: =12; 5. Формирование при помощи датчика случайных чисел (RANDOM)

Вывод элементов массива n Вывод на экран (write a[i]) n Запись в файл Вывод элементов массива n Вывод на экран (write a[i]) n Запись в файл

o Обычно все операции с массивами в цикле For. . o Обычно все операции с массивами в цикле For. .

Типовые задачи с массивами 1. Поиск суммы (произведения ) n Поиск суммы элементов массива Типовые задачи с массивами 1. Поиск суммы (произведения ) n Поиск суммы элементов массива S: =0; for i: =1 to N do S: =S+A[i]; n Поиск произведения элементов массива P: =1; for i: =1 to N do P: =P*A[i];

Типовые задачи с массивами 2. Нахождение номеров элементов (или самих элементов) с заданным свойством Типовые задачи с массивами 2. Нахождение номеров элементов (или самих элементов) с заданным свойством for i: =1 to N do If m[i] Mod 2 =0 then Write(i: 5);

Типовые задачи с массивами 3. Нахождение количества элементов с заданным свойством k 1: =0; Типовые задачи с массивами 3. Нахождение количества элементов с заданным свойством k 1: =0; k 2: =0; for i: =1 to N do If m[i] >0 then Inc(k 1) else if m[i] <0 then Inc(k 2); Write(k 1: 5); Write(k 2: 5);

Типовые задачи с массивами 4. Поиск экстремальных элементов Var A: array [1. . 10] Типовые задачи с массивами 4. Поиск экстремальных элементов Var A: array [1. . 10] of integer; I, max: integer; Begin {Ввод элементов массива} Max: =A[1]; for i: =2 to N do if MAX

Типовые задачи с массивами 5. Есть ли в данном массиве элементы с данным свойством Типовые задачи с массивами 5. Есть ли в данном массиве элементы с данным свойством Const n=20; Var A: array [1. . n] of integer; I: integer; F: Boolean; Begin randomize; for i: =1 to N do begin A[i]: =-random(20)+15; if A[i]=0 then F: =TRUE; End; If F then write(‘Есть’) else write(‘Нет’) ; end.

Типовые задачи с массивами 6. Найти первый (последний) элемент с данным свойством Const n=20; Типовые задачи с массивами 6. Найти первый (последний) элемент с данным свойством Const n=20; Var M: array [1. . n] of integer; I: integer; Begin randomize; for i: =1 to N do M[i]: =-random(20)+15; i: =1; While (i<=n) And (m[i] >0) Do Inc(i); Write(i) ; end. Номер первого не положительного элемента

Типовые задачи с массивами 7. Найти первый (последний) элемент с данным свойством Const n=20; Типовые задачи с массивами 7. Найти первый (последний) элемент с данным свойством Const n=20; Var M: array [1. . n] of integer; I: integer; Begin randomize; for i: =1 to N do M[i]: =-random(20)+15; i: =n; While (i>=1) And (m[i] >0) Do Dec(i); Write(i) ; end. Номер последнего отрицательного элемента

Типовые задачи с массивами 8. Вставка одного (нескольких) элементов в массив Найти номер элемента Типовые задачи с массивами 8. Вставка одного (нескольких) элементов в массив Найти номер элемента после (или до) которого нужна вставка (K) 1. ПОСЛЕ 1. Первые K элементов остаются без изменения 2. Все элементы, начиная с k-го, сдвинуть на один назад 3. На место (k+1)-го записываем новое значение (Х), т. е. после K-го элемента

Типовые задачи с массивами 8. Вставка одного (нескольких) элементов в массив Найти номер элемента Типовые задачи с массивами 8. Вставка одного (нескольких) элементов в массив Найти номер элемента после (или до) которого нужна вставка (K) 1. ДО 1. Первые K-1 элементов остаются без изменения 2. Все элементы, начиная с k-го, сдвинуть на один вперед 3. На место k-го записываем новое значение (Х), т. е. до K-го элемента

Типовые задачи с массивами 9. Удаление одного (нескольких) элементов из массива 1. Найти номер Типовые задачи с массивами 9. Удаление одного (нескольких) элементов из массива 1. Найти номер удаляемого элемента ( k) 2. Сдвинуть все элементы, начиная с k-го, на один элемент влево 3. Последнему элементу присвоить значение 0, и (или) не выводить его.

Типовые задачи с массивами 10. Сортировка массива Типовые задачи с массивами 10. Сортировка массива

Пример 1 Задача поиска максимального элемента массива. Алгоритм поиска максимума. 1. Принять за максимальный Пример 1 Задача поиска максимального элемента массива. Алгоритм поиска максимума. 1. Принять за максимальный первый элемент массива. 2. Просмотреть массив, начиная со второго элемента. 3. Если очередной элемент оказывается больше максимального, принять его за максимальный.

Пример 1 Program Max_Elem; { макс. элемент } const n = 20; var a Пример 1 Program Max_Elem; { макс. элемент } const n = 20; var a : array [1. . n] of real; i : integer; max : Real; begin writeln('Введите ', n, ' элементов массива'); for i : = 1 to n do read(a[i]); max : = a[1]; for i : = 2 to n do if a[i] > max then max : = a[i]; writeln('Максимальный элемент: ', max: 6: 2) end.

Пример 2 { Кол-во отрицательных и общая сумма элементов } Program Sum_Num; const n Пример 2 { Кол-во отрицательных и общая сумма элементов } Program Sum_Num; const n = 10; var a : array [1. . n] of integer; i, sum, num : integer; begin writeln('Введите ', n, ' элементов массива'); for i : = 1 to n do read(a[i]); sum : = 0; num : = 0; for i : = 1 to n do begin if a[i] < 0 then inc(num); sum : = sum + a[i]; end; writeln('Отрицательных элементов: ', num); writeln('Сумма элементов: ', sum); end.

Сортировка выбором 1 -й просмотр: 2 -й просмотр: i=1 20 j=2. . 5 27 Сортировка выбором 1 -й просмотр: 2 -й просмотр: i=1 20 j=2. . 5 27 nmin 9 3 -й просмотр: 4 -й просмотр: 9 9 9 i=2 27 10 10 j=3. . 5 20 i=3 20 17 17 j=4. . 5 17 i=4 20 27 j=5 27 17 nmin 10

Найти, где расположен минимальный элемент массива Поменять его местами с 1 -м элементом. Первый Найти, где расположен минимальный элемент массива Поменять его местами с 1 -м элементом. Первый элемент теперь на нужном месте. Повторить (n-1) раз (i : = 1 to n-1): o Среди элементов, начиная со 2 -го, найти, где расположен o минимальный элемент массива Среди элементов, начиная с i-го, найти, где расположен минимальный элемент массива o Поменять его местами со 2 -м элементом. Второй элемент o теперь на нужном месте. Поменять его местами с i-м элементом. i-й элемент o Среди элементов, начиная с 3 -го, найти, где расположен теперь на нужном месте. минимальный элемент массива o Поменять его местами с 3 -м элементом. Третий элемент теперь на нужном месте. o. . . o Среди элементов, начиная с предпоследнего (n-1), найти, где расположен минимальный элемент массива o Поменять его местами с (n-1)-м элементом. o o Алгоритм сортировки

Обмен значений двух переменных 5 3 3 5 3 Обмен значений двух переменных 5 3 3 5 3

Сортировка выбором Program Sort; const n = 20; var a : array [1. . Сортировка выбором Program Sort; const n = 20; var a : array [1. . n] of integer; i, j, nmin, buf : integer; begin writeln('Введите ', n, ' элементов массива'); for i : = 1 to n do read(a[i]); for i : = 1 to n - 1 do begin nmin : = i; for j : = i + 1 to n do if a[j] < a[nmin] then nmin : = j; buf : = a[i]; a[i] : = a[nmin]; a[nmin] : = buf; end; writeln('Упорядоченный массив: '); for i : = 1 to n do write(a[i]: 5)

Пример 3 Вывод двумерного массива таблицей Uses CRT; Const n=5; m=5; Var A: array Пример 3 Вывод двумерного массива таблицей Uses CRT; Const n=5; m=5; Var A: array [1. . n, 1. . m] of integer; I, J: integer; Begin randomize; for i: =1 to N do for j: =1 to m do A[i, j]: =random(20)+15; for i: =1 to n do begin for j: =1 to m do write(a[i, j]: 5); writeln; end.

Пример 4 Заполнить массив А размером N*M «змейкой» по часовой стрелке 1 2 3 Пример 4 Заполнить массив А размером N*M «змейкой» по часовой стрелке 1 2 3 4 5 6 7 8 16 15 14 13 12 11 10 9 17 18 19 20 21 22 23 24 32 31 30 29 28 27 26 25 33 34 35 36 37 38 39 40 48 47 46 45 44 43 42 41

Заполнить массив А размером N*M «змейкой» по часовой стрелке For j: =1 to N Заполнить массив А размером N*M «змейкой» по часовой стрелке For j: =1 to N do For J: =1 to M do if I mod 2=1 Then x[i, j]: =(i-1)*m+j; Else x[i, j]: =( i*m-j+1; End;

Пример 5 Программа, которая для целочисленной матрицы 3 x 4 определяет среднее арифметическое ее Пример 5 Программа, которая для целочисленной матрицы 3 x 4 определяет среднее арифметическое ее элементов и количество положительных элементов в каждой строке.

program sred_n; const m = 3; n = 4; var a : array [1. program sred_n; const m = 3; n = 4; var a : array [1. . m, 1. . n] of integer; i, j, n_pos_el : integer; sred : real; begin for i : = 1 to m do for j : = 1 to n do read(a[i, j]); sred : = 0; for i : = 1 to m do begin n_pos_el : = 0; for j : = 1 to n do begin sred : = sred + a[i, j]; if a[i, j] > 0 then inc(n_pos_el); end; writeln('В ', i, '–й строке ', n_pos_el, ' положительных элементов'); end; sred : = sred / m / n; writeln('Среднее арифметическое: ', sred: 6: 2); end.