Внастоящее время в компьютерном мире существует множество языков программирования

Вид материалаДокументы

Содержание


3.2. Создание программы «степенные ряды»
Func – эта переменная должна быть вещественной – тип Real
Подобный материал:
1   2   3   4   5   6   7   8   9   10   ...   16

3.2. Создание программы «степенные ряды»


Задача: Необходимо рассчитать значения функций ex и Ln(x), заданных с помощью рядов, с определенной точностью. Точность и аргумент функции вводится с клавиатуры. Результат работы сравнить со значениями стандартных функций.

Формулы разложения в ряд экспоненты и логарифма представлены в таблице 3.4.

Таблица 3.4.

Функция

Разложение в ряд

Стандартная
функция


Замечания

Exp(x)



Exp(x)

-

Ln(x)



Lnxp1(x+1)

Необходим модуль Math

|x|<1

Примерный вид окна программы представлен на рис.3.4.


Процесс создания программы происходит по следующему алгоритму:
  1. Запустить Delphi;
  2. Сохранить проект, как «Work3», модуль – «Main»;
  3. Изменить свойства окна:
    1. Заголовок «Степенные ряды»  Caption;
  4. Создать поля ввода для значений X и погрешности Е. Будем считать, что все числа целые – порядок чисел будем задавать программно:
    • Взять два элемента SpinEdit, вкладка Samples, значок ;
    • Назвать (свойство Name) один SEValueX – для ввода X, другой SEValueE – ввод E;
    • Настроить минимальные значения элементов на 0  MinValue;
    • Настроить максимальное значение для элемента SEValueX – 9, для SEValueE – 14  MaxValue;
    • Изменить шаг дискретизации на 1  Increment;
  1. Добавить 2 элемента для вывода результатов – функция, рассчитанная с помощью ряда, и функция, рассчитанная с помощью стандартной функции:
    • Добавить два элемента Edit, вкладка Standard, значок ;
    • Назвать элементы (свойство Name) для вывода рассчитанной функции ERFun, для стандартной ESFun. Для элемента ESFun изменить свойство Text на 0 (по умолчанию результат равен «0»);
    • Добавить метки для обозначения вводимых и выводимых величин:
    • Изменить заголовки (Caption) для метки для поля ввода X – «Введите Х», для ввода погрешности «Введите погрешность 10-Е» (погрешность будем вводить как количество знаков после запятой, например, число 3 будет обозначать погрешность 0.001), для вывода расчетного значения – «Рассчитанная функция», для вывода стандартного значения функции – «Стандартная функция».
  1. Так как, будем рассчитывать две функции добавим переключатель – какая функция рассчитывается:
  • Добавить элемент RadioGroup, вкладка Standard, значок ;
  • Изменить название на RGName;
  • Изменить заголовок на «Функция»  Caption;
  • Добавить названия функций «Экспонента» и «Логарифм» - для этих целей запустить мастер свойства Items:
    • Ввести две строки: «Экспонента» и «Логарифм»;
    • Установить активным первый элемент (нумерация начинается с 0)  ItemIndex установить в 0;
  1. Добавить две кнопки для выхода из программы и для начала расчета:
    • Добавить элемент Button, вкладка Standard, значок ;
    • Кнопки назвать: кнопка выхода BQuit, кнопка расчета BOkName;
    • Изменить заголовки на «Выход» и «Ok»  Caption;
  1. Окно готово!
  2. Запрограммировать выход на кнопку BQuit (команда Close);
  3. Запрограммировать расчет на кнопке 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));
  1. Расчет экспоненты окончен! Запустить программу, нажав <F9>;
  2. Для улучшения программы:
    • Необходимо написать текст расчета функции «логарифм». Так как ряд использует в качестве аргумента x+1 удобно использовать функцию Lnxp1, которая также возвращает натуральный логарифм числа (х+1). Но для использования этой функции требуется к программе подключить модуль Math. Это можно сделать в разделе описания модулей после слова implementation. Необходимо добавить:

Uses

Math;
    • Для автоматического расчета после ввода значений в поля ввода (без нажатия на кнопку «Ok») необходимо назначить элементам SEValueX и SEValueE событие onChange кнопки BOK и сделать невидимой кнопку BOK (эти задачи рассмотрены в разделе 2.2);