- •Введение
- •1. Знакомство со средой программирования BorlandDelphi
- •Некоторые команды редактора. При написании программы можно использовать следующие комбинации клавиш для упрощения набора текста:
- •1.2. Создание программы «Моя первая программа»
- •2. Условные операторы
- •2.1. Теоретические сведения
- •Условные операторы. Условный оператор позволяет выбирать одно из двух действий, причем выбор осуществляется во время выполнения программы. Существует 2 вида условных операторов:
- •2.2. Создание программы «Попадание точки в фигуру»
- •Индивидуальное задание
- •3. Операторы цикла
- •3.1. Теоретические сведения Стандартные функции. Для выполнения часто встречающихся вычислений и преобразования данных в Object Pascal существуют стандартные функции.
- •Отладка программы. При построении сложных программ могут возникать ошибки. Их принято делить на 3 группы:
- •3.2. Создание программы «Степенные ряды»
- •Индивидуальное задание
- •4. Тип данных массив
- •4.1. Теоретические сведения
- •Типичные действия с массивом. Вывод массива; ввод массива; поиск максимального или минимального элемента массива; поиск в массиве заданного элемента; сортировка массива.
- •4.2. Создание программы «Работа с массивом»
- •Индивидуальное задание
- •5. Графические примитивы
- •5.2. Создание программы «Графические примитивы»
- •Индивидуальное задание
- •Стандартные диалоговые окна. Для вывода различных сообщений можно использовать стандартные диалоговые окна Delphi. Диалоговые окна запускаются командой:
- •6.2. Создание программы «Редактор текста»
- •Индивидуальное задание
- •7. Работа с базами данных
- •7.1. Теоретические сведения
- •7.2. Создание программы «Список студентов»
- •Индивидуальное задание
- •8. Выполнение курсового проекта
- •8.1. Варианты курсовых работ
- •Заключение
- •Список рекомендуемой литературы
Отладка программы. При построении сложных программ могут возникать ошибки. Их принято делить на 3 группы:
синтаксические;
ошибки времени выполнения;
алгоритмические.
Наиболее простые из них синтаксические – ошибки набора текста – они исправляются в процессе компиляции программы. Ошибки времени выполнения – ошибки, возникающие при несоответствии типов введенных параметров типам используемых переменных, или ошибки вычислений (например, деление на 0) – отслеживаются также легко уже при первых запусках программы. Будем считать, что программа запускается из оболочки Delphi. После возникновения такой ошибки необходимо нажать «Ok» в окне сообщения об ошибке, а затем завершить выполнение программы – пункт меню «Run/Program reset» или нажать комбинацию клавиш <Ctrl><F2>. При возникновении такой ошибки курсор в программе будет указывать на строку, вызвавшую ошибку. Наиболее сложно обнаружить алгоритмические ошибки. Программа компилируется без ошибок, не дает ошибок при пробных запусках, но при анализе результатов выясняется, что результат неправильный. Необходимо вручную «прокрутить» алгоритм – требуется отладка программы.
Для трассировки программы (проверка «логики алгоритма»), т. е. выполнения программы по шагам, необходимо выполнить следующие действия. В пункте меню выбрать пункт «Run/Step over» или «Run/Trace in to» (клавиши <F8> и <F7> соответственно), команда «Run/Trace in to» отличаются более детальной трассировкой. Для прекращения трассировки и продолжения выполнения программы в автоматическом режиме необходимо выбрать пункт «Run/Run» или нажать <F9>. Остановить программу можно с помощью команды «Run/Program reset» или нажать комбинацию клавиш <Ctrl><F2>. Иногда необходимо выполнить трассировку с определенной строки программы. Для этого курсор подводят к интересующей строке и выполняют команду «Run/Run to cursor» или нажимают <F4>. Часто известно возможное место ошибки в алгоритме – тогда используют точку останова. Программист устанавливает на нужной строке курсор и ставит там точку останова с помощью команды «Run/Add Breakpoint» или нажав <F5>. Выбранная строка будет отмечена. Для снятия точки останова необходимо на этой строке снова нажать <F5>. При выполнении программа дойдёт до точки останова, затем программист сможет трассировать программу с помощью <F7> и <F8>. При необходимости можно указать условие остановки на точке останова (эта настройка осуществляется в окне «Breakpoints», пункт меню «Run/Add breakpoints»).
При выполнении программы по шагам часто необходимо не только проверять правильность «логики алгоритма», но и знать значения некоторых переменных. Для этого выполняют команду «View/Watch/Add watch» и вводят имя интересующей переменной либо подводят курсор к переменной, значение которой необходимо просмотреть, и нажимают <Ctrl><F5>. При трассировке программы в этом случае в окне «Watch list» можно наблюдать изменение значений интересующих переменных.
3.2. Создание программы «Степенные ряды»
Задача. Необходимо рассчитать значения функций ex и ln(x), заданных с помощью рядов, с определенной точностью. Точность и аргумент функции вводятся с клавиатуры. Результат работы сравнить со значениями стандартных функций.
Формулы разложения в ряд экспоненты и логарифма представлены в табл. 3.4.
Таблица 3.4 | |||
Функция |
Разложение в ряд |
Стандартная функция |
Замечания |
exp(x) |
Exp(x) |
– | |
ln(x) |
Lnxp1(x+1) |
Необходим модуль Math |x|<1 |
Примерный вид окна программы представлен на рис. 3.4.
Процесс создания программы происходит по следующему алгоритму:
Запустить Delphi.
Сохранить проект как «Work3», модуль – «Main».
Изменить свойства окна: заголовок «Степенные ряды» Caption.
Создать поля ввода для значенийX и погрешности Е. Считать, что все числа целые, порядок чисел задавать программно:
взять 2 элемента SpinEdit, вкладка Samples, значок ;
назвать (свойство Name) один SEValueX – для ввода X, другой SEValueE – ввод E;
настроить минимальные значения элементов на 0 MinValue;
настроить максимальное значение для элемента SEValueX – 9, для SEValueE – 14 MaxValue;
изменить шаг дискретизации на 1 Increment.
Добавить 2 элемента для вывода результатов – функция, рассчитанная с помощью ряда, и функция, рассчитанная с помощью стандартной функции:
добавить 2 элемента Edit, вкладка Standard, значок ;
назвать элементы (свойство Name) для вывода рассчитанной функции ERFun, для стандартной ESFun. Изменить свойство Text на 0 (по умолчанию результат равен «0»);
добавить метки для обозначения вводимых и выводимых величин:
изменить заголовки (Caption) меток:
для поля ввода X – «Введите Х»;
для ввода погрешности «Введите погрешность 10^-Е» (погрешность вводить как количество знаков после запятой, например, число 3 будет обозначать погрешность 0.001);
для вывода расчетного значения – «Рассчитанная функция»;
для вывода стандартного значения функции – «Стандартная функция».
Так как будут рассчитываться 2 функции, добавить переключатель – какая функция рассчитывается:
добавить элемент RadioGroup, вкладка Standard, значок ;
изменить название на RG Name;
изменить заголовок на «Функция» Caption;
добавить названия функций «Экспонента» и «Логарифм», запустив мастер свойства Items:
ввести 2 строки: «Экспонента» и «Логарифм»;
установить активным первый элемент (нумерация начинается с 0) ItemIndex установить в 0.
Добавить 2 кнопки для выхода из программы и для начала расчета:
добавить элемент Button, вкладка Standard, значок ;
кнопки назвать: кнопка выхода BQuit, кнопка расчета BOk Name;
изменить заголовки на «Выход» и «Ok» Caption.
Окно готово!
Запрограммировать выход на кнопку BQuit (команда Close);
Запрограммировать расчет на кнопке BOk: расчет будет осуществлен для функции, которая отмечена элементом RG. Первой является функция «экспонента»:
проанализировать ряд, по которому осуществляется расчет функции, и выявить, как получить элемент ряда an, зная элемент an-1. Для расчета экспоненты необходимо элемент ряда умножить на «x / n»;
для расчета функции потребуются следующие переменные: для хранения значения функции – переменная Func вещественного типа (тип Real); переменные а и а1 для хранения соответственно n-го и n+1-го членов ряда (также тип Real); переменная е (тип Real) для хранения точности расчета; переменная x (тип Real) для удобства записи формул; переменная n (тип Integer) – счетчик цикла. Эти переменные необходимо описать в разделе var процедуры нажатия на кнопку «Оk». Текст процедуры примет вид:
procedure TForm1.BOkClick(Sender: TObject);
var
Func : real;
A,A1 : real;
e : real;
x : real;
n : integer;
присвоить значению переменной x значение элемента SEValueX (свойство Value). При расчете точности необходимо в цикле умножать переменную e на число 0.1 столько раз, сколько требуется знаков после запятой (данное число содержит элемент SEValueE). Для этого после начала процедуры (оператор begin) ввести следующие строки:
x := SEValueX.Value;
e := 1;
For n := 1 to SEValueE.value do e := e * 0.1;
выяснить, какая функция рассчитывается, можно по переменной RG.ItemIndex: если она равна 0, то рассчитывается функция «экспонента», а 1 – «логарифм». Для решения такой задачи удобно использовать оператор выбора Case. После расчета точности необходимо добавить:
case RG.ItemIndex of
0 : begin
{Расчет экспоненты}
end;
1 : begin
{Расчет логарифма}
end;
end; {Case}
для расчета функции можно использовать оператор цикла с постусловием, так как данная функция может быть рассчитана как минимум один раз. Условием выхода из цикла будет тот факт, что значение очередного члена ряда станет меньше заданной точности. После комментария {Расчет экспоненты} добавить строки:
Func := 1;
a := 1;
n := 1;
repeat
a1 := a * x /n;
Func := Func + a1;
a := a1;
Inc(n);
until(a<e);
для вывода результатов расчета необходимо преобразовать числа в строки, так как полем ввода/вывода элемента Edit является строка. После окончания цикла (строка end {Case}) необходимо добавить следующие строки:
ERFun.Text := FloatToStr(Func);
ESFun.Text := FloatToStr(Exp(x));
Расчет экспоненты окончен! Запустить программу, нажав <F9>.
Для улучшения программы:
необходимо написать текст расчета функции «логарифм». Так как ряд использует в качестве аргумента x+1, удобно использовать функцию Lnxp1, которая также возвращает натуральный логарифм числа (х+1). Для этого требуется подключить к программе модуль Math. Это можно сделать в разделе описания модулей после слова implementation. Необходимо добавить:
Uses
Math;
для автоматического расчета после ввода значений в поля ввода (без нажатия на кнопку «Ok») необходимо назначить элементам SEValueX и SEValueE событие onChange кнопки BOk и сделать невидимой кнопку BOk (эти задачи рассмотрены в 2.2).