
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
ОПИСАНИЕ СИНТАКСИСА: Обращение к элементу массива
-
имя_массива [индекс]
Пример.
a: array [1..5] of byte;
b: array [1..3, 1..5] of byte;
увеличение
адреса
-
A1
a2
a3
a4
A5
A[3]
-
b11
b12
b13
b14
b15
b21
b22
b23
b24
b25
b31
b32
b33
b34
b35
B[3,2]
Элемент
массива
B[3,2] - byte;
B[1]
- array [1..5] of byte;
Подмассив (первая
строка массива)
Интерпретация: Индекс должен представлять собой выражение, совместимое по присваиванию с типом индекса, указанным в описании массива. Если это выражение окажется неверного типа данных, будет зафиксирована синтаксическая ошибка Index type is not compatible with declaration. Если значение выражения окажется за пределами диапазона при включенном (с помощью директивы {$R+}) контроле диапазонов, будет зафиксирована ошибка времени выполнения Range check error.
Индекс - порядковый номер элемента массива.
Особенностями хранения массива в памяти является следующее:
Все компоненты массива располагаются в памяти в порядке возрастания индексов.
Компоненты в памяти располагаются так, что занимают в памяти непрерывную область.
В случае многомерных массивов их элементы располагаются в памяти таким образом, что наиболее быстро увеличивается самый правый индекс.
Число размерностей массива не ограничено, однако размер массива как любой статической переменной в памяти ограничен 64 Кб.
Действия над массивами
Присваивание содержимое одного массива другому
Но это действие можно выполнить не всегда. Вы можете присвоить содержимое только таких массивов, у которых эквивалентны типы согласно объявлению.
Вы не можете сравнивать массивы.
If a = b then ... - нельзя.
Если нужно сравнить 2 массива, то нужно их сравнивать по элементам (кроме символьных массивов, которые в Паскале эквивалентны строкам).
Инициализация массивов
Первый путь – использование цикла.
Var
A : array [1..5] of byte;
I : byte;
begin
for i := 1 to 5 do
a[i] := i; { или a[i] := random(100);}
end.
2. Второй путь – использование процедуры
FillChar(var X: Count: Word; Value: <порядковый тип>); Заполняет Count смежных байтов переменной Х значением Value.
Х – переменная любого типа, которая заполняется заданным значением;
Count – число заполняемых байтов.
Пример. FillChar (a, 5, 0);
Элементы массива можно использовать везде, где можно использовать обычные скалярные переменные (в операторах присваивания и процедурах ввода-вывода и т.д.)
Обмен значениями между подмассивом и массивом
обмен между подмассивами
Обмен между подмассивом и массивом
Сдвиг значений внутри массива
Сдвиг элементов одномерного массива вправо
Задача: необходимо выполнить сдвиг заданной части массива M (начиная с позиции i1 и заканчивая позицией i2) на заданное число позиций вправо.
1 2 3 4 5 6 7 8 9 10 11
m[9]:=m[7]
Обобщенная
запись: M[i]
:= M[j]
m[8]:=m[6]
m[7]:=m[5]
m[6]:=m[4]
m[5]:=m[3]
1
2 3 4 5 6 7 8 9 10 11
i
j
Надо в общем случае выразить зависимость i от j .
В общем виде эта зависимость линейная и имеет вид:
j := a*i + b
Для нахождения a и b надо составить систему уравнений:
7
A=1;
b=-2; J=i-2 Обобщенная
запись: M[i]:=M[i-2];
= a*9 + b
6= a*8 + b
For i:=9 downto 5 do
M[i] := m[i-2];