- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Инициализация массива
Инициализацию массивов можно осуществить либо программно, либо с помощью типизированных констант.
Программная инициализация обычно осуществляется с помощью циклов, т.к. обращение возможно только к отдельным компонентам массива.
Пример: заполнения массива данными
const
N=10;
M=5;
type
TMatrix = array[1..N, 1..M] of real;
var
X: TMatrix;
i, j: integer;
…
for i:=1 to N do
for j:=1 to M do writeln(X[i, j]);
При инициализации с помощью типизированных констант значения элементов заключаются в скобки и разделяются запятыми.
Пример: пример инициализации одномерного массива с помощью типизированных констант
type
TStatus = array[1..3] of string[7];
const
Status: TStatus = ('Active','Passive','Waiting');
В случае многомерных массивов значения каждой размерности заключаются в отдельные скобки и разделяются запятыми.
Пример: пример инициализации многомерного массива с помощью типизированных констант
type Cube = array[0..1,0..1,0..1] of integer;
const Maze: Cube = ( ( (0,1), (2,3) ), ( (4,5), (6,7) ) );
Вопросы для самопроверки
1. Что такое массив?
2. Как описываются массивы на языке Паскаль?
3. Что такое элемент массива? Индексный тип?
4. Какие операции допустимы над массивами?
5. Как можно на языке Паскаль описать многомерный массив?
6. Как можно просуммировать значения элементов массива?
§11. Алгоритмы сортировки
Нередко в программировании возникает задача отсортировать какие-либо величины. Иногда предварительная сортировка данных позволяет существенно сократить содержательную часть алгоритма программы. В этой ситуации могут помощь существующие алгоритмы сортировки.
В данном параграфе будут рассмотрены так называемые простые сортировки. К ним относятся методы, сложность которых пропорциональна квадрату размерности входных данных. Иными словами, при сортировке массива, состоящего из N компонент, такие алгоритмы будут выполнять С*N2 действий, где С – некоторая константа.
Количество действий, необходимых для упорядочения некоторой последовательности данных, конечно же, зависит не только от длины этой последовательности, но и от ее структуры. Например, если на вход подается уже упорядоченная последовательность, то количество действий будет значительно меньше, чем в случае перемешанных входных данных.
Сортировка выбором
Для начала рассмотрим алгоритм сортировки выбором.
Суть алгоритма заключается в следующем: находим наименьший элемент в массиве и меняем его местами с элементом, находящимся на первом месте. Далее процесс повторяется, но уже начиная со второй позиции в массиве и так далее, пока не отсортируем весь массив.
Алгоритм для сортировки массива из N элементов.
Начинаем сортировку с 1-го элемента: i:=1.
Находим номер j минимального элемента среди элементов от i до N.
Меняем местами элементы i и j.
Если i < N-1, то увеличиваем значение i на 1 и возвращаемся к шагу 2.
Конец алгоритма. Массив отсортирован.
Пример: алгоритм сортировки выбором массива str
for i := 1 to n-1 do
begin
min:=i;
for j := i+1 to n do
if str[ j ]<str[ min ] then min := j;
if i<>j then
begin
t := str[ min ];
str[ min ] := str[ i ];
str[ i ] := t;
end;
end;
В лучшем случае (если исходная последовательность уже упорядочена) алгоритм произведет (N-1)*(N+2)/2 сравнений и 0 пересылок данных. В остальных же случаях количество сравнений останется прежним, а вот количество пересылок элементов будет равным 3*(N-1).