- •Программирование на языке
- •Object pascal в среде delphi
- •(Лабораторные работы)
- •Содержание
- •Лабораторная работа 1. Программирование линейных алгоритмов
- •1.1. Базовые элементы языка Object Pascal
- •1.1.1. Алфавит языка
- •1.1.2. Синтаксис языка
- •1.1.3. Основные типы данных
- •1.1.4. Оператор присваивания
- •1.1.5. Целые типы данных
- •1.1.6. Вещественные (действительные) типы данных
- •1.1.8. Cимвольные типы данных
- •1.1.9. Строкоые типы данных
- •1.1.10. Арифметические вычисления
- •1.2. Интегрированная среда разработчика delphi
- •1.3. Структура программ delphi
- •Interface
- •Implementation
- •1.4. Пример написания программы
- •1.4.2. Изменение заголовка формы
- •1.4.6. Написание программы обработки события
- •1.4.7. Написание программы обработки события
- •2.3. Оператор выбора Case
- •2.4. Составной оператор
- •2.5. Некоторые возможности, предоставляемые Delphi для организации разветвлений
- •Interface
- •Implementation
- •2.7. Индивидуальные задания
- •3.1.2. Организация цикла с помощью оператора repeat
- •3.2. Организация вложенных циклов
- •3.3. Организация прерывания цикла
- •3.4. Алгоритмы, использующие рекуррентную последовательность
- •3.5. Пример написания программы
- •Interface
- •Implementation
- •3.6. Индивидуальные задания
- •Лабораторная работа 4. Программирование с использованием массивов
- •4.1. Работа с массивами
- •4.2. Операции над массивами
- •4.3. Примеры часто встречающихся алгоритмов работы с массивами
- •4.4. Компонент tStringGrid для ввода/вывода массивов
- •4.5. Пример написания программы с использованием tStringGrid
- •Interface
- •Implementation
- •4.6. Компонент tEdit для ввода одномерных массивов
- •4.7. Пример написания программы с использованием tEdit
- •4.7. Компонент tMemo для ввода/вывода одномерных массивов
- •4.8. Пример написания программы с использованием tMemo
- •4.9. Индивидуальные задания
- •Лабораторная работа 5. Программирование с использованием строковых данных
- •5.1. Работа со строками
- •5.2. Пример написания программы
- •Лабораторная работа 6. Программирование с использованием подпрограмм и модулей
- •6.1. Описание подпрограмм
- •6.2. Передача данных через формальные параметры
- •6.3. Процедурные типы
- •6.4. Область видимости переменных
- •6.5. Пример написания программы с использованием процедур
- •Interface
- •Implementation
- •6.6. Использование модулей
- •6.7. Пример написания программы с использованием модуля
- •6.7.1. Создание модуля
- •6.7.2. Подключение модуля
- •Implementation
- •6.8. Индивидуальные задания
- •Лабораторная работа 7. Построение графиков
- •7.1. Компонент tChart
- •7.2. Пример написания программы
- •7.4. Индивидуальные задания
- •Лабораторная работа 8. Работа с файлами
- •8.2. Прямая работа с файлами (классический способ)
- •Доступ к файлам
- •Подпрограммы для работы с файлами
- •Запись и чтение типизированных файлов
- •Запись и чтение нетипизированных файлов
- •8.3. Диалоги открытия и сохранения файлов
- •8.4. Пример написания программы
- •8.5. Индивидуальные задания
- •Средства отладки программ в delphi
- •Литература
6.7.2. Подключение модуля
Для того чтобы подключить модуль к проекту, необходимо в меню Project выбрать опцию Add to Project… и выбрать файл, содержащий модуль. После этого в разделе Uses добавить имя подключаемого модуля – MyUnit. Теперь в проекте можно использовать функции, содержащиеся в модуле.
Интерфейс программы будет иметь вид как и в прошлой задаче(см. рис. 4.5).
Тексты модуля с процедурами (Листинг 6.2) и вызывающей программы (Листинг 6.3) приведены ниже.
Листинг 6.2
unit MyUnit;
interface
uses
SysUtils, Grids, StdCtrls, Dialogs;
type
TMatr = array[1..20, 1..20] of real;
{здесь прописываются только заголовки процедур и функций}
Procedure Vvod_Matr_iz_Tabl(StringGrid:TStringGrid;var n, m : integer;
var Matr:TMatr);
Procedure Vyvod_Matr(n, m : integer; Matr: TMatr; Memo : TMemo);
implementation
{ниже прописываются сами процедуры и функции}
//==================================================
Procedure Vvod_Matr_iz_Tabl(StringGrid:TStringGrid;var n,m:integer;
var Matr:TMatr);
//ввод матрицы из StringGrid
var
i, j : integer;
begin
with StringGrid do begin
n:=RowCount-1; //число строк
m:=ColCount-1; //число столбцов
for i:=1 to n do
for j:=1 to m do
Matr[i,j]:=StrToFloat(Cells[j,i]);
end;
end;
//===================================================
Procedure Vyvod_Matr(n, m : integer; Matr:TMatr; Memo:TMemo);
//вывод матрицы в Мемо
var
i, j : integer;
St : string;
begin
St:='Введенная матрица:'+#13#10;
for i:=1 to n do begin
for j:=1 to m do
St := St + FloatToStr(Matr[i, j])+#9;
St := St + #13#10;
end;
Memo.Lines.Add(St);
end;
//===================================================
end.
Этот модуль компилируется отдельно, а затем подключается в разделе uses основной программы (см. Листинг 6.3).
Листинг 6.3
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, jpeg, ExtCtrls, Spin, MyUnit; //подключили модуль MyUnit
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
StringGrid1: TStringGrid;
Button2: TButton;
Memo1: TMemo;
Button1: TButton;
Label3: TLabel;
Image1: TImage;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label4: TLabel;
Label5: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
TMatr = array[1..10,1..10] of real; // Объявление типа двухмерного
// массива размером 10 x 10
var
Form1: TForm1;
A : TMatr; // Глобальное объявление двухмерного массива
n, m : integer;
Implementation
{$R *.dfm}
{ Здесь уже не надо прописывать процедуры, т.к. они есть в подключ. модуле MyUnit }
//-------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
//первоначальное формирование интерфейса программы
var i, j: integer;
begin
Memo1.Clear;
SpinEdit1.Text := '4';
SpinEdit2.Text := '4';
With StringGrid1 do begin
RowCount:=StrToInt(SpinEdit1.Text)+1;
ColCount:=StrToInt(SpinEdit2.Text)+1;
Cells[0,0] := ' A';
for i:=1 to RowCount do Cells[0,i] := ' i=' + IntToStr(i);
for j:=1 to ColCount do Cells[j,0] := ' j=' + IntToStr(j);
end;
end;
//---------------------------------------------------------------
procedure TForm1.SpinEdit1Change(Sender: TObject);
//изменение Числа строк в таблице
var i:integer;
begin
if SpinEdit1.Text='' then Exit;
//подготовка таблицы по строкам
With StringGrid1 do begin
RowCount:=StrToInt(SpinEdit1.Text)+1;
for i:=1 to RowCount do Cells[0,i] := ' i=' + IntToStr(i);
end;
end;
//--------------------------------------------------------
procedure TForm1.SpinEdit2Change(Sender: TObject);
//изменение Числа столбцов в таблице
var j : integer;
Begin
if SpinEdit2.Text='' then Exit;
//подготовка таблицы по столбцам
With StringGrid1 do begin
ColCount:=StrToInt(SpinEdit2.Text)+1;
for j:=1 to ColCount do StringGrid1.Cells[j,0] := ' j=' + IntToStr(j);
end;
end;
//--------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
//выполнить
var
i, j, k, ke : integer;
p, pe : real;
s : string;
begin
n := StrToInt(SpinEdit1.Text); // Число строк в массиве
m := StrToInt(SpinEdit2.Text); // Число столбцов в массиве
{Проверка на заполненность таблицы}
for i:=1 to n do
for j:=1 to m do
if StringGrid1.Cells[j,i]='' then begin
ShowMessage('Надо заполнить все ячейки таблицы !!!');
Exit;
end;
{Ввод матрицы А из таблицы StringGrid1}
Vvod_Matr_iz_Tabl(StringGrid1, n, m, A); //вызов процедуры, текст которой
//находится в модуле MyUnit
{Расчет}
k := 0; ke:=0;
p:=0; pe := 1;
for i := 1 to n do
for j := 1 to m do
if A[i, j]>0 then begin k := k+1; p:=p+A[i,j]; end
else
if (A[i,j]<0) then begin ke:=ke+1; pe := pe * A[i,j]; end;
Memo1.Clear;
{Показаваем в Мемо1 введенную матрицу А}
Vyvod_Matr(n, m, A, Memo1); //вызов процедуры, текст которой находится в MyUnit
{показываем в Мемо1 результаты расчета}
if k=0 then Memo1.Lines.Add('Положительных элементов нет !')
else begin
Memo1.Lines.Add('Количество положительных элементов: ' +IntToStr(k));
Memo1.Lines.Add('Сумма положительных элементов: ' + FloatToStr(p));
end;
Memo1.Lines.Add('');
if ke=0 then Memo1.Lines.Add('Отрицательных элементов нет !')
else begin
Memo1.Lines.Add('Количество отрицательных элементов: ' +IntToStr(ke));
Memo1.Lines.Add('Произведение отрицательных элементов: '+ FloatToStr(pe));
end;
end;
//-------------------------------------------------------------------
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
{текст этой процедуры здесь не приводится, так как он полностью соответствует тексту примера 4.5}
end;
//---------------------------------------------------
end.