Внастоящее время в компьютерном мире существует множество языков программирования
Вид материала | Документы |
Содержание3.2. Создание программы «степенные ряды» Func – эта переменная должна быть вещественной – тип Real |
- Календарный план учебных занятий по дисциплине «Языки и технология программирования», 43.35kb.
- Лекция №3. Состав и работа системы программирования Турбо Паскаль Язык программирования, 84.43kb.
- Лекция 3 Инструментальное по. Классификация языков программирования, 90.16kb.
- Внастоящее время существует большой социальный заказ на психологические методы профилактики, 117.85kb.
- Методические указания для выполнения лабораторных работ и курсовой работы содержание, 1317.09kb.
- Программа дисциплины Языки и технологии программирования Семестры, 20.19kb.
- Теория автоматов и формальных языков составил доцент А. А. Мальцев, 38.01kb.
- Внастоящее время в мире повсеместно и во все более разрастающихся масштабах происходит, 373.75kb.
- Вмире существует множество замечательных повестей, романов, рассказов и стихов, главными, 21kb.
- Пояснительная записка, 185.11kb.
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;
- Заголовок «Степенные ряды» Caption;
- Создать поля ввода для значений X и погрешности Е. Будем считать, что все числа целые – порядок чисел будем задавать программно:
- Взять два элемента SpinEdit, вкладка Samples, значок ;
- Назвать (свойство Name) один SEValueX – для ввода X, другой SEValueE – ввод E;
- Настроить минимальные значения элементов на 0 MinValue;
- Настроить максимальное значение для элемента SEValueX – 9, для SEValueE – 14 MaxValue;
- Изменить шаг дискретизации на 1 Increment;
- Добавить 2 элемента для вывода результатов – функция, рассчитанная с помощью ряда, и функция, рассчитанная с помощью стандартной функции:
- Добавить два элемента Edit, вкладка Standard, значок ;
- Назвать элементы (свойство Name) для вывода рассчитанной функции ERFun, для стандартной ESFun. Для элемента ESFun изменить свойство Text на 0 (по умолчанию результат равен «0»);
- Добавить метки для обозначения вводимых и выводимых величин:
- Изменить заголовки (Caption) для метки для поля ввода X – «Введите Х», для ввода погрешности «Введите погрешность 10-Е» (погрешность будем вводить как количество знаков после запятой, например, число 3 будет обозначать погрешность 0.001), для вывода расчетного значения – «Рассчитанная функция», для вывода стандартного значения функции – «Стандартная функция».
- Так как, будем рассчитывать две функции добавим переключатель – какая функция рассчитывается:
- Добавить элемент RadioGroup, вкладка Standard, значок ;
- Изменить название на RG Name;
- Изменить заголовок на «Функция» Caption;
- Добавить названия функций «Экспонента» и «Логарифм» - для этих целей запустить мастер свойства Items:
- Ввести две строки: «Экспонента» и «Логарифм»;
- Установить активным первый элемент (нумерация начинается с 0) ItemIndex установить в 0;
- Ввести две строки: «Экспонента» и «Логарифм»;
- Добавить две кнопки для выхода из программы и для начала расчета:
- Добавить элемент Button, вкладка Standard, значок ;
- Кнопки назвать: кнопка выхода BQuit, кнопка расчета BOk Name;
- Изменить заголовки на «Выход» и «Ok» Caption;
- Окно готово!
- Запрограммировать выход на кнопку BQuit (команда Close);
- Запрограммировать расчет на кнопке BOk;
- Расчет будет осуществлен для функции, которая отмечена элементом RG. Первой является функция «экспонента»;
- Проанализировать ряд, по которому осуществляется расчет функции, и выявить, как получить элемент ряда an, зная элемент an-1. Для расчета экспоненты необходимо элемент ряда умножить на «x / n»;
- Для расчета функции потребуются переменные для хранения значения функции – назовем ее Func – эта переменная должна быть вещественной – тип Real; переменная для хранения n-го и n+1-го членов ряда (переменные также типа Real) назовем их а и а1 соответственно; переменная для хранения точности расчета (тип Real), переменная e и для удобства записи формул введем переменную x типа Real. Также необходима переменная для счетчика цикла – переменная n тип Integer. Эти переменные необходимо описать в разделе var процедуры нажатия на кнопку «ОК». Текст процедуры станет таким:
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
- Для вывода результатов расчета необходимо преобразовать числа в строки, так как поле ввода/вывода элемента Edit является строка. После окончания цикла (строка end {case}) необходимо добавить следующие строки:
- ERFun.Text := FloatToStr(NFunc);
- ESFun.Text := FloatToStr(Exp(x));
- Расчет экспоненты окончен! Запустить программу, нажав <F9>;
- Для улучшения программы:
- Необходимо написать текст расчета функции «логарифм». Так как ряд использует в качестве аргумента x+1 удобно использовать функцию Lnxp1, которая также возвращает натуральный логарифм числа (х+1). Но для использования этой функции требуется к программе подключить модуль Math. Это можно сделать в разделе описания модулей после слова implementation. Необходимо добавить:
Uses
Math;
- Для автоматического расчета после ввода значений в поля ввода (без нажатия на кнопку «Ok») необходимо назначить элементам SEValueX и SEValueE событие onChange кнопки BOK и сделать невидимой кнопку BOK (эти задачи рассмотрены в разделе 2.2);