- •1 Средства разработки программ на языке Free Pascal
- •1.1 Процесс разработки программы
- •1.2 Среда программирования Free Pascal
- •1.2.1 Работа в текстовом редакторе Free Pascal
- •1.2.2 Запуск программы в среде Free Pascal и просмотр результатов
- •1.3 Текстовый редактор Geany
- •1.4 Среда визуального программирования Lazarus
- •1.4.1 Установка Lazarus в ОС Linux
- •1.4.2 Установка Lazarus под управлением ОС Windows
- •1.4.3 Среда Lazarus
- •1.4.4 Главное меню Lazarus
- •1.4.5 Окно формы
- •1.4.6 Окно редактора Lazarus
- •1.4.7 Панель компонентов
- •1.4.8 Инспектор объектов
- •1.4.9 Первая программа в Lazarus
- •1.4.10 Полезная программа
- •1.4.11 Консольное приложение среды Lazarus
- •1.4.12 Операторы ввода - вывода данных
- •2 Общие сведения о языке программирования Free Pascal
- •2.1 Структура проекта Lazarus
- •2.2 Структура консольного приложения
- •2.3 Элементы языка
- •2.4 Данные в языке Free Pascal
- •2.4.1 Символьный тип данных
- •2.4.2 Целочисленный тип данных
- •2.4.3 Вещественный тип данных
- •2.4.4 Тип дата-время
- •2.4.5 Логический тип данных
- •2.4.6 Создание новых типов данных
- •2.4.7 Перечислимый тип данных
- •2.4.8 Интервальный тип
- •2.4.9 Структурированные типы
- •2.4.10 Указатели
- •2.5 Операции и выражения
- •2.5.1 Арифметические операции
- •2.5.2 Операции отношения
- •2.5.3 Логические операции
- •2.5.4 Операции над указателями
- •2.6 Стандартные функции
- •2.7 Задачи для самостоятельного решения
- •3 Операторы управления
- •3.1 Основные конструкции алгоритма
- •3.2 Оператор присваивания
- •3.3 Составной оператор
- •3.4 Условные операторы
- •3.4.1 Условный оператор if…then…else
- •3.4.2 Оператор варианта case
- •3.5 Обработка ошибок. Вывод сообщений в среде Lazarus
- •3.6 Операторы цикла
- •3.6.1 Оператор цикла с предусловием while .. do
- •3.6.2 Оператор цикла с постусловием repeat … until
- •3.6.3 Оператор цикла for … do
- •3.7 Операторы передачи управления
- •3.8 Решение задач с использованием циклов
- •3.9 Ввод данных из диалогового окна в среде Lazarus
- •3.10 Задачи для самостоятельного решения
- •3.10.1 Разветвляющийся процесс
- •3.10.2 Циклический процесс
- •4 Подпрограммы
- •4.2 Формальные и фактические параметры. Передача параметров в подпрограмму
- •4.3 Процедуры
- •4.4 Функции
- •4.5 Решение задач с использованием подпрограмм
- •4.6 Рекурсивные функции
- •4.7 Особенности работы с подпрограммами
- •4.7.1 Параметры-константы
- •4.7.2 Процедурные типы
- •4.8 Разработка модулей
- •4.9 Задачи для самостоятельного решения
- •5 Использование языка Free Pascal для обработки массивов
- •5.1 Общие сведения о массивах
- •5.2 Описание массивов
- •5.3 Операции над массивами
- •5.4 Ввод-вывод элементов массива
- •5.4.2 Ввод-вывод данных в визуальных приложениях
- •5.5 Вычисление суммы и произведения элементов массива
- •5.6 Поиск максимального элемента в массиве и его номера
- •5.7 Сортировка элементов в массиве
- •5.7.1 Сортировка методом «пузырька»
- •5.7.2 Сортировка выбором
- •5.8 Удаление элемента из массива
- •5.9 Вставка элемента в массив
- •5.10 Использование подпрограмм для работы с массивами
- •5.11 Использование указателей для работы с динамическими массивами
- •5.11.1 Работа с динамическими переменными и указателями
- •5.11.2 Работа с динамическими массивами с помощью процедур getmem и freemem
- •5.12 Примеры программ
- •5.13 Задачи для самостоятельного решения
- •6 Обработка матриц во Free Pascal
- •6.1 Ввод-вывод матриц
- •6.2 Алгоритмы и программы работы с матрицами
- •6.3 Динамические матрицы
- •6.4 Задачи для самостоятельного решения
- •7 Обработка файлов средствами Free Pascal
- •7.1 Типы файлов
- •7.2 Работа с типизированными файлами
- •7.2.1 Процедура AssignFile
- •7.2.2 Процедуры reset, rewrite
- •7.2.3 Процедура СloseFile
- •7.2.4 Процедура rename
- •7.2.5 Процедура erase
- •7.2.6 Функция eof
- •7.2.7 Чтение и запись данных в файл
- •7.3 Бестиповые файлы в языке Free Pascal
- •7.4 Обработка текстовых файлов в языке Free Pascal
- •7.5 Задачи для самостоятельного решения
- •8 Работа со строками и записями
- •8. 1 Обработка текста
- •8.2 Работа с записями
- •8.3 Задачи для самостоятельного решения по теме «Строки»
- •8.4 Задачи для самостоятельного решения по теме «Записи»
- •9.1 Основные понятия
- •9.2 Инкапсуляция
- •9.3 Наследование и полиформизм
- •9.4 Перегрузка операций
- •9.5 Задачи для самостоятельного решения
- •10 Графика во Free Pascal
- •10.1 Средства рисования в Lazarus
- •10.2 Построение графиков
- •10.3 Задачи для самостоятельного решения
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
76 |
компилятор автоматически выделяет память под переменную имя_переменной в соответствии с указанным типом. Доступ к объ-
явленной переменной осуществляется по ее имени. При этом все обращения к переменной заменяются адресом ячейки памяти, в которой хранится ее значение. При завершении подпрограммы, в которой была описана переменная, память автоматически освобождается.
Доступ к значению переменной можно получить иным способом – определить собственные переменные для хранения адресов памяти. Такие переменные называют указателями.
Указатель30 – это переменная, значением которой является адрес памяти, где хранится объект определенного типа (другая переменная). Как и любая переменная, указатель должен быть объявлен. При объявлении указателей всегда указывается тип объекта, который будет
храниться по данному адресу:
var имя_переменной: ^тип;
Такие указатели называют типизированными. Например: var p: ^integer;
//По адресу, записанному в переменной p //будет храниться переменная типа int //или, другими словами p, указывает //на тип данных integer.
В языке Free Pascal можно объявить указатель, не связанный с ка- ким-либо конкретным типом данных. Для этого применяют служебное слово pointer:
var имя_переменной: pointer;
Например:
var x, y: pointer;
Подобные указатели называют нетипизированными и используют для обработки данных, структура и тип которых меняется в процессе выполнения программы, то есть динамически.
2.5 Операции и выражения
Выражение задает порядок выполнения действий над данными и состоит из операндов (констант, переменных, обращений к функциям), круглых скобок и знаков операций, например
a+b*sin(cos(x)).
30 Подробно об указателях см. 5.11
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
77 |
||||
|
В табл. 2.4 представлены основные операции языка программиро- |
||||
вания Free Pascal. |
|
|
|
||
|
Таблица 2.4. Основные операции языка Free Pascal |
|
|||
|
Опе- |
Действие |
Тип операндов |
Тип результата |
|
|
ра- |
|
|
|
|
|
ция |
|
|
|
|
|
+ |
сложение |
целый/веществен- |
целый/веществен- |
|
|
|
|
ный |
ный |
|
|
+ |
сцепление строк |
строковый |
строковый |
|
|
– |
вычитание |
целый/веществен- |
целый/веществен- |
|
|
|
|
ный |
ный |
|
|
* |
умножение |
целый/веществен- |
целый/веществен- |
|
|
|
|
ный |
ный |
|
|
/ |
деление |
целый/веществен- |
вещественный |
|
|
|
|
ный |
|
|
|
div |
целочисленное деление |
целый |
целый |
|
|
mod |
остаток от деления |
целый |
целый |
|
|
not |
отрицание |
целый/логический |
целый/логический |
|
|
and |
логическое И |
целый/логический |
целый/логический |
|
|
or |
логическое ИЛИ |
целый/логический |
целый/логический |
|
|
xor |
исключающее ИЛИ |
целый/логический |
целый/логический |
|
|
shl |
сдвиг влево |
целый |
целый |
|
|
shr |
сдвиг вправо |
целый |
целый |
|
|
in |
вхождение в множество |
множество |
логический |
|
|
< |
меньше |
числовой/символь- |
логический |
|
|
|
|
ный/логический |
|
|
|
> |
больше |
числовой/символь- |
логический |
|
|
|
|
ный/логический |
|
|
|
<= |
меньше или равно |
числовой/символь- |
логический |
|
|
|
|
ный/логический |
|
|
|
>= |
больше или равно |
числовой/символь- |
логический |
|
|
|
|
ный/логический |
|
|
|
= |
равно |
числовой/символь- |
логический |
|
|
|
|
ный/логический |
|
|
|
<> |
не равно |
числовой/символь- |
логический |
|
|
|
|
ный/логический |
|
|
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
78 |
В сложных выражениях порядок, в котором выполняются операции, соответствует приоритету операций. В языке Free Pascal приняты следующие приоритеты:
1.not.
2.*, /, div, mod, and, shl, shr.
3.+, –, or, xor.
4.=, <>, >, <, >=, <=.
Использование скобок в выражениях позволяет менять порядок вычислений.
Перейдем к подробному рассмотрению основных операций.
2.5.1 Арифметические операции
Операции +, –, *, / относят к арифметическим операциям. Их назначение понятно и не требует дополнительных пояснений.
Операции целочисленной арифметики (применяется только к целочисленным операндам):
•div – целочисленное деление (возвращает целую часть частного, дробная часть отбрасывается), например, 17 div 10=1;
•mod – остаток от деления, например, 17 mod 10=7.
К операциям битовой арифметики относятся следующие операции: and, or, xor, not, shl, shr. В операциях битовой арифметики
действия происходят над двоичным представлением целых чисел. Арифметическое И (and)31. Оба операнда переводятся в двоич-
ную систему, затем над ними происходит логическое поразрядное умножение операндов по следующим правилам:
1 and 1=1, 1 and 0=0, 0 and 1=0, 0 and 0=0.
Например, если А=14 и В=24, то их двоичное представление – А=0000000000001110 и В=0000000000011000. В результате логического умножения A and B получим 0000000000001000 или 8 в деся-
тичной системе счисления (рис. 2.1). Таким образом, A&B=14&24=8.
Рисунок 2.1: Пример логического умножения A and B
31 Конъюнкция.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
79 |
Арифметическое ИЛИ (or)32. Здесь также оба операнда перево-
дятся в двоичную систему, после чего над ними происходит логическое поразрядное сложение операндов по следующим правилам:
1 or 1=1, 1 or 0=1, 0 or 1=1, 0 or 0=0.
Например, результат логического сложения чисел А=14 и В=24 будет равен A or B=30 (рис. 2.2).
Рисунок 2.2: Пример логического сложения A or B
Арифметическое исключающее ИЛИ (xor). Оба операнда перево-
дятся в двоичную систему, после чего над ними происходит логическая поразрядная операция xor по следующим правилам:
1 xor 1=0, 1 xor 0=1, 0 xor 1=1, 0 xor 0=0.
Арифметическое отрицание (not). Эта операция выполняется над одним операндом. Применение операции not вызывает побитную инверсию двоичного представления числа (рис. 2.3).
Рисунок 2.3: Пример арифметического отрицания not A
Сдвиг влево (M shl L). Двоичное представление числа M сдвигается влево на L позиций. Рассмотрим операцию 15 shl 3. Число 15
в двоичной системе имеет вид 1111. При сдвиге его на 3 позиции влево получим 1111000. В десятичной системе это двоичное число равно 120. Итак, 15 shl 3 =120 (рис. 2.4).
Рисунок 2.4: Сдвиг влево 15 shl 3
32 Дизъюнкция