- •2.1.1 Підпрограми-процедури
- •2.1.2 Підпрограми функції
- •2.2 Бібліотеки
- •2.2.1 Основні поняття
- •2.2.2 Залучення бібліотек до проекту
- •Наведемо приклад залучення бібліотеки для обчислення iнтеграла
- •2.2.3 Структура власної бібліотеки
- •2 Створити вектор х, як суми елементів рядків.
- •2.2.4 Послідовність створення файла бібліотеки
- •3 Приклад проекту з власною бібліотекою
- •4. Контрольні запитання
- •8Які елементи мови Object Pascal можна використовувати у вигляді формальних, а які − у вигляді фактичних параметрів?
- •9Чи визначає ім’я підпрограми-функції її тип?
- •Чи все є правильно в цьому фрагменті? а якщо − нi, то як його виправити?
- •5. Лабораторне завдання
- •Варіанти індивідуальних завдань
2.2.4 Послідовність створення файла бібліотеки
1 Спочатку потрібно викликати каталог депозиторія за допомогою команд головного меню File/New.
2 Обрати піктограму Unit для залучення до проекту порожнього модуля без пов’язаного з ним вікна форми. З’явиться вікно із шаблоном бібліотечного модуля:
Unit Unit2;
interface
implementation
end;
3 Ввести текст бібліотечного модуля в цьому вікні.
4 Зберегти модуль на диску з ім’ям власної бібліотеки.
Примітка. Ім’я Unit2 за цієї дії автоматично буде замінено на нове ім’я.
3 Приклад проекту з власною бібліотекою
Завдання:
1 Обчислити елементи матриці за формулою
ai,j = sin i +cos j, де i =1,2, …,4; j =1,2, …,5.
2 Створити вектор х, як суми елементів рядків.
3 Обчислити скаляр – номер найменшого елементу вектору х.
Ці обчислення організувати за допомогою підпрограм, які розмістити у власній бібліотеці.
Керування роботою проекту організувати за допомогою меню команд.
Ф
орму
та результати роботи проекту програми
наведено на рис 9.2.
Пояснення. Меню команд створено за допомогою компонента MainMenu. Перелік команд меню проекту наведено на рис. 9.3.
Текст головного модуля
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, Menus, TeEngine, TeeFunci, Series, TeeProcs, Chart,bibl;
type
TForm1 = class(TForm)
Label1: TLabel; Label2: TLabel; Label3: TLabel;
StringGrid2: TStringGrid; StringGrid1: TStringGrid;
Edit1: TEdit;
MainMenu1: TMainMenu;
N1: TMenuItem;
………
N8: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject); procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject); procedure N8Click(Sender: TObject);
Chart1: TChart;
TeeFunction1: TAddTeeFunction;
Series1: TBarSeries;
……………………………….
implementation
{$R *.DFM}
const n=5; m=4;
var a:matr; х:vect; { глобальні параметри }
// Підпрограма початкового встановлення невидимості команд меню
procedure TForm1.FormCreate(Sender: TObject);
begin
n3.visible:=false;
n4.visible:=false;
end;
// Підпрограма команди меню ” Підпрограми | Розрахунок матриці”
procedure TForm1.N2Click(Sender: TObject);
var i,j:integer; s:string;
begin
{виклик підпрограми обчислення елементів матриці}
elem(n,m,a);
{заголовки рядків та стовпчиків}
for i:=1 to n do
StringGrid1.Cells[0,i]:=IntToStr(i)+'-й рядок';
for j:=1 to m do
StringGrid1.Cells[j,0]:=IntToStr(j)+'-й стовпчик';
{виведення матриці в форму}
for i:=1 to n do
for j:=1 to m do
begin
str(a[i,j]:8:3,s);
StringGrid1.Cells[j,i]:=s;
end;
{встановлення видимості команд меню для вектора й скаляра}
n3.visible:=true;
n4.visible:=false;
end;
// Підпрограма команди меню ”Підпрограми | Обчислення вектора”
procedure TForm1.N3Click(Sender: TObject);
var i,j:integer; s:string;
begin
{виклик підпрограми для вектора}
sum(n,m,a,х);
{ виведення вектора сум в StringGrid}
for i:=1 to n do
begin
StringGrid2.Cells[0,i-1]:=IntToStr(i)+'-й елемент';
str(х[i]:5:1,s); StringGrid2.Cells[1,i-1]:=s;
end;
{встановлення невидимості команди меню для скаляра}
n4.visible:=true;
end;
// Підпрограма команди меню ” Підпрограми | Мінімальний елемент”
procedure TForm1.N4Click(Sender: TObject);
var i:integer; nom:integer;
s:string;
begin
{виклик функції обчислення скаляра G}
nom:=nom_min(x,n);
{ виведення вектора на форму}
edit1.text:=IntToStr(nom);
end;
// Підпрограма команди меню ” Проект | Очистити форму”
procedure TForm1.N6Click(Sender: TObject);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
StringGrid1.Cells[j,i]:='';
for i:=1 to n do
StringGrid2.Cells[1,i-1]:='';
edit1.text:='' ;
{встановлення невидимості команд меню для вектора й скаляра}
n3.visible:=false;
n4.visible:=false;
end;
// Підпрограма команди меню “Проект | Вихід”
procedure TForm1.N7Click(Sender: TObject);
begin
close
end;
// Підпрограма команди меню “Графіка”
procedure TForm1.N8Click(Sender: TObject);
var i:integer; gr:array [1..n] of TPoint;
begin
{ побудова графіка}
for i:=1 to n do
Series1.Addxy(i,x[i],'',clTeeColor);
end;
end.
Текст бібліотеки
unit bibl;
interface
Type matr=array[1..10,1..10] of real;
vect=array[1..10] of real;
procedure elem(n,m:integer; var c:matr);
procedure sum(n,m:integer; c:matr; var v:vect);
function nom_min(v:vect; k:integer):integer;
implementation
// підпрограма обчислення елементів матриці
procedure elem(n,m:integer;var с:matr);
var i,j:integer;
begin for i:=1 to n do
for j:=1 to m do
с[i,j]:=sin(i)+cos(j);
end;
// Підпрограма обчислення вектора сум елементів рядків
procedure sum (n,m:integer;с:matr; var c:vect);
var i,j:integer;
begin
for i:=1 to n do
begin c[i]:=0;
for j:=1 to m do
v[i]:=v[i]+ c[i,j];
end;
end;
// підпрограма-функція обчислення найменшого елемента вектора
function nom_min(v:vect; k:integer):integer;
var i:integer; min:real; nmin:integer;
begin min:=v[1]; nmin:=1;
for i:=2 to k do
if v[i]<min then
begin min:=v[i];nmin:=i; end;
nom_min:=nmin;
end;
end.
