- •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 |
117 |
{Если не выполнились оба условия
1.y1<0 И y2<0
2.y1>=0 И y2>=0,
то проверяем условие y1>=0} else if (y1>=0) then
{Если оно истинно} begin
x1:=sqrt(y1); x2:=-x1; writeln('X1=',x1:6:3,' X2=',x2:6:3);
end else
{Если условие y1>=0 ложно, то} begin
x1:=sqrt(y2); x2:=-x1; writeln('X1=',x1:6:3,' X2=',x2:6:3);
end
end end.
3.4.2 Оператор варианта case
Оператор варианта case необходим в тех случаях, когда в зави-
симости от значений какой-либо переменной надо выполнить те или
иные операторы.
case переменная of набор_значений_1: оператор_1; набор_значений_2: оператор_2;
…
набор_значений_N: оператор_N else
альтернативный_оператор end;
Оператор работает следующим образом. Если переменная принимает значение из набора_значений_1, то выполняется оператор_1. Если переменная принимает значение из набора_значений_2, то выполняется оператор_2 и так далее. Если переменная не принимает значений из имеющихся наборов, то выполняется альтернативный_оператор, расположенный после ключевого слова else.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
118 |
Тип переменной должен быть только перечислимым (включая char и boolean), диапазоном или целочисленным. Набор_значений – это конкретное значение управляющей переменной или выражение, при котором необходимо выполнить соответствующий оператор, игнорируя остальные варианты. Значения в каждом наборе
должны быть уникальны, то есть они могут появляться только в одном варианте. Пересечение наборов значений для разных вариантов является ошибкой.
Альтернативная ветвь else может отсутствовать, тогда оператор
имеет вид:
case переменная of набор_значений_1: оператор_1; набор_значений_2: оператор_2;
…
набор_значений_N: оператор_N; end;
Кроме того, в операторе case допустимо использование состав-
ного оператора. Например: case переменная of
набор_значений_1: begin оператор_A; оператор_B;
end; набор_значений_2: begin
оператор_C;
оператор_D;
оператор_E; end;
…
набор_значений_N: оператор_N; end;
ЗАДАЧА 3.7. Вывести на печать название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и
первое число – понедельник.
Для решения задачи воспользуемся операцией mod, позволяющей
вычислить остаток от деления двух чисел, и условием, что 1-е число – понедельник. Если в результате остаток от деления (обозначим его R)
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
119 |
заданного числа D на семь будет равен единице, то это понедельник,
двойке – вторник, тройке – среда и так далее. Следовательно, при построении алгоритма необходимо использовать семь условных операторов, как показано рис. 3.19.
Решение задачи станет значительно проще, если при написании
программы воспользоваться оператором варианта: var d:byte;
begin
write('Введите число D='); readln(D); {Вычисляется остаток от деления D на 7.}
Рисунок 3.19: Алгоритм решения задачи 3.7
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
120 |
case D mod 7 of
{В зависимости от полученного значения} {на печать выводится название дня недели}
1:writeln('ПОНЕДЕЛЬНИК');
2:writeln('ВТОРНИК');
3:writeln('СРЕДА');
4:writeln('ЧЕТВЕРГ');
5:writeln('ПЯТНИЦА');
6:writeln('СУББОТА');
0:writeln('ВОСКРЕСЕНЬЕ');end;end.
Впредложенной записи оператора варианта отсутствует ветвь else. Это объясняется тем, что переменная R может принимать толь-
ко одно из указанных значений, т.е. 1, 2, 3, 4, 5, 6 или 0.
ЗАДАЧА 3.8. По заданному номеру месяца m вывести на печать название времени года.
Для решения данной задачи необходимо проверить выполнение четырех условий. Если заданное число m равно 12, 1 или 2, то это
зима, если m попадает в диапазон от 3 до 5, то – весна, лето определяется принадлежностью числа m диапазону от 6 до 8 и, соответственно, при равенстве переменной m 9, 10 или 11 – это осень. Понятно, что область возможных значений переменной m находится в диапазоне от
1 до 12 и если пользователь введет число, не входящее в этот интервал, то появится сообщение об ошибке. Для этого в операторе case
программы предусмотрена альтернативная ветка else.
Var m:byte; begin
write('Введите номер месяца m='); readln(m);
{Проверка допустимых значений переменной m.} case m of
{В зависимости от значения m на печать} {выводится название времени года.} 12,1,2: writeln('ЗИМА');
3..5: writeln('ВЕСНА'); 6..8: writeln('ЛЕТО'); 9..11: writeln('ОСЕНЬ')