- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§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
Вопросы для самопроверки
1. С помощью какого цикла лучше всего вычислить факториал числа?
2. С помощью какого цикла лучше всего вычислить сумму по заданной формуле?
3. С помощью какого цикла лучше всего вычислить сумму ряда с заданной точностью?
4. Какой цикл лучше использовать, если известно, что пользователь вводит последовательность чисел, заканчивающуюся цифрой 0?
§10. Массивы
Как упоминалось ранее, в Паскале существуют скалярные и структурированные типы. К скалярным относятся стандартные типы (целые, вещественные, символьный, логический и адресный) и типы, определяемые пользователем (перечисляемый и интервальный).
Структурированные же типы имеют четыре разновидности: массивы, а также множества, записи и файлы.
В отличие от обычных переменных, массивы позволяют хранить сразу несколько однотипных величин. Подробнее о них будет рассказано далее.
Описание массива
Массив – это непрерывный блок данных одного типа.
Каждая отдельная величина называется компонентой массива (или элементом массива). Массивы содержат фиксированное число компонентов одного типа, так называемого типа компонент. Тип компонент может быть любым, принятым в языке Паскаль, кроме файлового.
Таким образом, массив может состоять, например, из 100 элементов типа integer, или из 25 элементов типа real, или из 5 элементов типа char и т.п.
Д ля описания массива используется следующая конструкция (задает размер массива и тип его компонент):
Пример:
type
TVector = array [ byte ] of char;
var
MyVector: TVector;
Values: array [ 1..10 ] of real;
Индексный тип определяет число элементов массива, а также индекс первой и последней компоненты. Допустимыми индексными типами являются все порядковые типы, за исключением длинного целого (longint) и его поддиапазонов. Индексы интервального типа, для которого базовым является целый тип, могут принимать отрицательные, нулевое и положительные значения.
Пример:
type
MyArray1 = array[byte] of integer; {массив из 256 целых чисел}
MyArray2 = array[-20..17] of integer; {массив из 38 целых чисел}
Массив может быть проиндексирован всеми значениями соответствующего индексного типа. Нумерация компонент массива не обязана начинаться с 1 или с 0 – можно описывать массив, пронумерованный любыми целыми числами. Необходимо лишь, чтобы номер последней компоненты был больше первой.
Описать массив можно следующим образом:
в разделе описания переменных в качестве типа данных записать представленную выше конструкцию;
Пример:
var
Values: array [ 1..10 ] of real;
создать новый тип в разделе описания типов и использовать его при описании переменных.
Пример:
type
TVector = array [ 1..10 ] of real;
var
Values: TVector;
В обоих случаях переменная Values будет представлять из себя «контейнер», в котором можно хранить 10 вещественных чисел с индексами от 1 до 10. Однако второй способ является более предпочтительным, т.к. он позволит описать еще несколько переменных типа TVector.
Обращение к элементам массива
Массивы относятся к структурам прямого доступа. Это означает, что возможно напрямую (не перебирая предварительно все предшествующие компоненты) обратиться к любой интересующей компоненте массива.
Доступ к компонентам линейного массива осуществляется с помощью конструкции, называемой переменной с индексом:
<имя_массива> [ <индекс_компоненты> ]
Пример:
type
TVector = array [ 1..10 ] of real;
var
Values: TVector;
…
Values[1] := 10.5;
Values[2] := Values[1] + 5;
readln (Values[3]);
Values[4]:= Values[2] + Values[3];
writeln (Values[4]);
Индекс компоненты может быть константой, переменной или выражением, куда входят операции и вызовы функций. Тип индекса должен быть совместим с типом, объявленным в описании массива.
Пример:
Values[i+3-abs(x)] := 10.5;