Практическая работа №68
Программирование алгоритмов с использованием функций и процедур. создание модулей
Цель лабораторной работы: освоить методику создания модулей, содержащих процедуры и функции, и использования их в проекте.
8.1. Пример создания приложения
Задание: создать Windows-приложение которое выводит таблицу значений функции и ее разложения в ряд в виде суммы для значений x от xn до xk c шагом h=(xk - xn)/10. Создать модуль, в котором вычисление значений оформить в виде функции, а вычисление - в виде процедуры. Подключить модуль к проекту и выполнить созданное приложение.
Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.8.1.
8.1.1. Размещение компонентов на Форме
Label
Edit
Button
Разместим на Форме компоненты Label, Edit, SpinEdit, Button и Memo.
Р
Memo
ис. 8.1
Сохраним модуль под именем UnModul (текст модуля приведен в п.8.1.4).
8.1.2. Создание модуля и подключение его к проекту
В соответствии с заданием создадим модуль, в котором вычисление значений оформим в виде функции, а вычисление - в виде процедуры. Для создания модуля откроем в главном меню пункт File и щелкнем “мышью” на опции New…(Новый…). Delphi откроет панель New Items(Репозиторий), в которой сделаем активной пиктограмму Unit(Модуль) и нажмем кнопку OK. Откроется окно с “пустым” модулем Unit2. С помощью опции Save As… меню File сохраним модуль в папке c файлами проекта, присвоив ему имя, например, UnFuncProc.
В этом модуле операторы вычисления Y(x) в виде подпрограммы-функциии F и операторы вычисления S(x) в виде подпрограммы-процедуры Sum оформим по правилам создания модулей (текст модуля UnFuncProc приведен в п.8.1.3).
Для подключения модуля UnFuncProc к проекту необходимо сделать активным окно с текстом модуля UnModul, затем в меню File выбрать опцию Use Unit…и в открывшемся окне Use Unit указать имя используемого модуля – UnFuncProc. Убедитесь в том, что в разделе Implementation модуля UnModul появился оператор Uses UnFuncProc; , который Delphi вставила в текст модуля UnModul.
Откройте главный файл проекта и убедитесь в том, что проект не содержит посторонних модулей и файлов.
8.1.3. Текст модуля UnFuncProc
unit UnFuncProc;
interface
var
n:integer; // количество слагаемых в сумме S
Function F(x:extended):extended;
Procedure Sum(x:extended;Var s:extended);
Implementation
Function F(x:extended):extended;
begin
result:=(1-x*x*0.5)*cos(x)-0.5*x*sin(x);
end;
Procedure Sum(x:extended;Var s:extended);
var
c:extended;
k:integer;
begin
c:=-x*x*0.5;
S:=1;
for k:=1 to n do
begin
s:=s+c*(2*k*k+1);
c:=-c*x*x/((2*k+1)*(2*k+2));
end;
end;
end.
8.1.4. Текст модуля UnModul
Unit UnModul;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Spin, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
SpinEdit1: TSpinEdit;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
func=function(x:extended):extended; // функциональный тип
proc=procedure(x:extended;Var s:extended); // процедурный тип
var
Form1: TForm1;
implementation
uses UnFuncProc; // Delphi подключает модуль UnFuncProc
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
SpinEdit1.text:='4'; // начальное значение N
Edit1.text:=’0.1’; // начальное значение Xn
Edit2.text:=’2.0’; // начальное значение Xk
Memo1.Clear;
Memo1.Lines.Add('Лабораторная работа №8 - Создание модулей');
end;
{В процедуре Tablica вычисляется и выводится таблица значений x, S(x) и Y(x)}
procedure Tablica(Sum:proc;F:func;n:integer;xn,xk,h:extended);
var
x,y,s:extended;
begin
Form1.Memo1.Lines.Add(#9+'x'+#9+'S'+#9+'Y');// заголовок таблицы
x:=xn;
repeat // цикл по x
Sum(x,s); // вызов процедуры Sum для вычисления S(x)
y:=F(x); // обращение к функции F для вычисления Y(x)
Form1.Memo1.Lines.Add(#9+FloatToStrF(x,ffFixed,5,2) // вывод x
+#9+FloatToStrF(s,ffFixed,6,3) // вывод S
+#9+FloatToStrF(y,ffFixed,6,3)); // вывод Y
x:=x+h;
until xxk;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
xn,xk,h:extended;
begin
n:=StrToInt(SpinEdit1.Text);
xn:=StrToFloat(Edit1.Text);
xk:=StrToFloat(Edit2.Text);
h:=(xk-xn)*0.1; // шаг h
Tablica(Sum,F,n,xn,xk,h); // вызов процедуры Tablica для вычисления таблицы
end;
end.
8.2. Выполнение индивидуального задания
По указанию преподавателя выберите из таблицы два варианта индивидуальных заданий. Создайте модуль, в котором вычисление значений реализуйте в виде подпрограммы-процедуры, а вычисление значений - в виде подпрограммы-функции. На панели интерфейса установите компонент, с помощью которого реализуйте возможность выбора соответствующего варианта задания и вывод таблицы значений , где i-номер варианта. Созданный модуль подключите к проекту и выполните приложение.
Индивидуальные задания
В заданиях необходимо вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для значений x от до с шагом .
Близость значений S(x) и Y(x) во всем диапазоне значений x указывает на правильность вычисления S(x) и Y(x).
№ | | | S(x) | n | Y(x) |
1 | 0.1 | 1 | | 8 | |
2 | | | | 18 | |
3 | | | | 6 | |
4 | 0.1 | 0.8 | | 12 | |
5 | 0.1 | 0.8 | | 16 | |
6 | 0.1 | 1 | | 14 | |