- •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 |
121 |
{Если значение переменной m выходит за пределы области допустимых значений, то выдается сообщение об ошибке.}
else
writeln('ОШИБКА ПРИ ВВОДЕ!!!');
end
end.
3.5 Обработка ошибок. Вывод сообщений в среде Lazarus
Понятно, что чем меньше в программе ошибок, тем она лучше. В очень хорошей программе ошибок нет вообще. А это значит, что программист должен не только основательно продумать алгоритм, поставленной задачи, но и предугадать ошибки, которые может допустить пользователь, работая с программой.
Если пользователь допустил ошибку, например, при вводе данных, его необходимо проинформировать об этом. Для этого можно воспользоваться функцией MessageDlg, которая выводит сообще-
ние в отдельном окне. В общем виде функцию записывают так:
MessageDlg(сообщение, тип_сообщения, [список_кнопок], справка);
где
•сообщение – текст, который будет отображен в окне сообщения;
•тип_ сообщения – определяет внешний вид окна (табл. 3.2);
•список_кнопок – константы (перечисляются через запятую), определяющие тип кнопок окна сообщения (табл. 3.3);
•справка – номер окна справочной системы, которое будет вы-
ведено на экран, если нажать F1, параметр равен нулю, если использование справки не предусмотрено.
Таблица. 3.2. Тип окна сообщения.
Параметр |
Тип окна сообщения |
mtInformation |
информационное |
mtWarning |
предупредительное |
mtError |
сообщение об ошибке |
mtConfirmation |
запрос на подтверждение |
mtCustom |
обычное |
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
122 |
Таблица. 3.3. Тип кнопки в окне сообщения.
Константа |
Кнопка в окне сообщения |
mbYes |
Да |
mbNo |
Нет |
mbOk |
Ок |
mbCancel |
Отмена |
mbAbort |
Прервать |
mbRetry |
Повторить |
mbIgnore |
Пропустить |
mbHelp |
Помощь |
Вернемся к задаче решения квадратного уравнения (задача 3.3). Нами был рассмотрен алгоритм решения этой задачи и написана программа на языке программирования Free Pascal. Реализуем эту задачу в среде Lazarus. Создадим новый проект41 (рис. 3.20).
Для организации ввода коэффициентов уравнения внедрим на форму четыре объекта типа надпись (Label1, Label2,
Label3, Label4) и три поля ввода (Edit1, Edit2, Edit3).
Корни уравнения или сообщение Рисунок 3.20: Форма для ре- об их отсутствии будем выводить
шения квадратного уравнения в надпись Label542.
Все действия по вычислению корней квадратного уравнения будут выполняться при нажатии кнопки Button1.
При вводе данных в программе могут возникнуть следующие ошибки:
•в поле ввода оказалась строка, которую невозможно преобразовать в число;
•значение коэффициента a равно нулю43.
Для того чтобы не допустить подобных ошибок необходимо контролировать данные, вводимые пользователем. Применим для этой цели встроенную процедуру Val(S,X,Kod), которая преоб-
разовывает строку S в целое или вещественное число X. Если преоб-
41 Подробно о создании проекта см. в первой главе.
42 На этапе конструирования формы Label5.Visible:=false.
43 В этом случае при вычислении корней произойдет деление на ноль.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
123 |
разование прошло успешно, то параметр Kod принимает значение,
равное нулю, а результат преобразования записывается в переменную X. В противном случае Kod содержит номер позиции в строке S, где
произошла ошибка, и содержимое переменной X не меняется. Далее
приведен фрагмент программы с подробными комментариями: procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d,x1,x2: real; kod1,kod2,kod3:integer; begin
//Ввод значений коэффициентов уравнения. //Из поля ввода Edit1 считывается строка //символов и преобразовывается в вещественное //число, если преобразование прошло успешно, //то kod1=0 и полученное число записывается //в переменную a.
val(Edit1.Text,a,kod1);
val(Edit2.Text,b,kod2);
val(Edit3.Text,c,kod3);
//Если преобразования прошли успешно, то if (kod1=0) and (kod2=0) and (kod3=0) then
//проверить чему равен первый коэффициент. //Если значение первого коэффициента //равно нулю, то
if a=0 then
//выдать соответствующее сообщение. MessageDlg('Введите не нулевое значение а', mtInformation,[mbOk],0)
else
//иначе перейти к решению уравнения begin
d:=b*b-4*a*c; Label5.Visible:=true; if d<0 then
Label5.Caption:='В уравнении'+ chr(13)+'нет действительных корней'
else begin
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
124 |
x1:=(-b+sqrt(d))/2/a; x2:=(-b-sqrt(d))/(2*a);
Label5.Caption:='X1='+
FloatToStr(x1)+chr(13)+
'X2='+FloatToStr(x2);
end;
end else
//Преобразование не выполнено, //выдать сообщение.
MessageDlg('Введите числовое значение', mtInformation,[mbOk],0);
end;
Результаты работы программы показаны на рис. 3.21 - 3.24.
|
Рисунок 3.22: Обработка |
|
ошибки ввода данных - в поле |
Рисунок 3.21: Обработка |
ввода строка, которую невоз- |
ошибки ввода данных — коэффи- |
можно преобразовать в число |
циент a равен 0 |
(коэффициент равен символу B) |
Рисунок 3.23: Решение квад- |
|
ратного уравнения 3x2+4x+5=0 |
Рисунок 3.24: Вычисление |
(корней нет) |
корней квадратного уравнения |