- •Глава 1 Знакомство со средой программирования Delphi. Первая программа
- •Задача
- •Вопросы для самоконтроля
- •Глава 2 Разработка линейных программ
- •Практика
- •Рекомендуемый интернет–ресурс
- •Вопросы для самоконтроля
- •Глава 3. Стандартные и библиотечные функции в линейных программах
- •Теория
- •Рекомендуемый интернет–ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 4. Программы с разветвлениями
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 5. Циклы
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 6. Использование массивов в программах. Компонент Memo для ввода данных в массив
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Теория
- •Практика
- •Рекомендуемый интернет-ресурс
- •Задачи для самостоятельного решения
- •Глава 8. Процедуры и функции, разрабатываемые программистом
- •Практика
- •Рекомендуемый интернет-ресурс
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Глава 9. Внешние файлы
- •Теория
- •Практика
- •Вопросы для самоконтроля
- •Задачи для самостоятельного решения
- •Приложение1. Основные свойства базовых компонентов
- •Приложение 3. Сообщения компилятора Delphi об ошибках
- •Интернет-портал по программированию для начинающих
Часть II. Delphi
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Label5: TLabel; Label6: TLabel; Button4: TButton;
procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); private
{Private declarations } public
{Publicdeclarations } end;
Как видим, в класс включены компоненты (данные) и методы их обработки (процедуры). В секции private (закрытые) объявляются элементы класса, которые должны быть недоступны в других модулях. В секции public(открытые) помещаются элементы, доступные в других модулях.
Практика
Задача 7a
Составить программу для транспонирования квадратной матрицы порядка N и определения следа матрицы.
Транспонированной матрицей к исходной является такая матрица, у которой элементы строк исходной матрицы расставлены в столбцы, а элементы столбцов исходной в строки.
Следом матрицы называется сумма главных диагональных элементов. Компоненты
|
Имя |
Свойства |
Значение |
Назначение |
|
|
компонента |
компонента |
|
|
|
|
Form1 |
Caption |
Матрица |
Заголовок |
|
|
|
|
|
|
|
|
|
|
|
|
|
Часть II. Delphi
|
|
|
|
|
главной формы |
|
|
|
Label1 |
Caption |
Программа |
Справочная |
|
||
|
|
|
предназначена |
информация |
для |
|
|
|
|
|
для |
|
пользователя |
|
|
|
|
|
преобразования |
программы |
|
|
|
|
|
|
квадратной |
|
|
|
|
|
|
|
матрицы |
|
|
|
|
|
|
|
(количество |
|
|
|
|
|
|
|
строк |
равно |
|
|
|
|
|
|
количеству |
|
|
|
|
|
|
|
столбцов) |
|
|
|
|
|
Label2 |
Caption |
Размерность |
Подсказка |
|
|
|
|
|
|
матрицы |
|
пользователю |
|
|
|
Edit1 |
Text |
….. |
|
Поле |
для |
|
|
|
|
|
|
ввода |
|
|
|
|
|
|
|
размерности |
|
|
|
|
|
|
|
матрицы |
|
|
|
Form1.StringGrid1 |
ColCount |
5 |
|
Количество |
|
|
|
|
|
|
|
столбцов |
по |
|
|
|
|
|
|
умолчанию |
|
|
|
|
FixedCol |
1 |
|
Количество |
|
|
|
|
|
|
|
фиксированных |
|
|
|
|
|
|
|
слева столбцов |
|
|
|
|
FixedRow |
1 |
|
Количество |
|
|
|
|
|
|
|
фиксированных |
|
|
|
|
|
|
|
сверху строк |
|
|
|
|
Options: |
|
|
Опции: |
|
|
|
|
goFixedVertLine |
True |
|
Разметка |
|
|
|
|
|
|
|
зафиксированны |
|
|
|
|
|
|
|
х вертикальных |
|
|
|
|
|
|
|
линий |
|
|
|
|
goFixedHorzLine |
True |
|
|
|
|
|
|
|
|
|
Разметка |
|
|
|
|
|
|
|
зафиксированны |
|
|
|
|
|
|
|
х |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Часть II. Delphi
|
|
goVertLine |
True |
горизонтальных |
|
||
|
|
|
|
линий |
|
|
|
|
|
|
|
Разметка |
|
|
|
|
|
|
|
вертикальных |
|
|
|
|
|
goHorzLine |
True |
линий |
внутри |
|
|
|
|
|
|
таблицы |
|
|
|
|
|
|
|
Разметка |
|
|
|
|
|
goTabs |
True |
горизонтальных |
|
||
|
|
|
|
линий |
внутри |
|
|
|
|
|
|
таблицы |
|
|
|
|
|
|
|
Разрешает |
|
|
|
|
|
|
|
использование |
|
||
|
|
|
|
клавиши Tab для |
|
||
|
|
goAlwaysShowEdit |
True |
перемещения |
в |
|
|
|
|
or |
|
другую ячейку |
|
||
|
|
|
|
Признак |
|
|
|
|
|
|
|
нахождения |
|
|
|
|
|
|
|
компонента |
в |
|
|
|
|
|
|
режиме |
|
|
|
|
|
|
|
редактирования |
|
||
|
Form1.Button1 |
Caption |
Транспонир |
Кнопка |
|
для |
|
|
|
|
ованная |
выполнения |
|
|
|
|
|
|
матрица |
транспонировани |
|
||
|
|
|
|
я и вывода |
в |
|
|
|
|
|
|
новое окно |
|
|
|
|
Form1.Button2 |
Caption |
След |
Кнопка |
|
для |
|
|
|
|
матрицы |
вычисления |
|
|
|
|
|
|
|
следа матрицы и |
|
||
|
|
|
|
вывода в |
новое |
|
|
|
|
|
|
окно |
|
|
|
|
Form1.Button3 |
Caption |
Выход |
Кнопка |
|
для |
|
|
|
|
|
завершения |
|
|
|
|
|
|
|
работы |
|
|
|
|
|
|
|
программы |
|
|
|
|
Form2 |
Caption |
Транспонир |
Заголовок |
|
|
|
|
|
|
ованная |
формы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Часть II. Delphi
|
|
|
матрица |
|
|
|
|
Form2.StringGrid1 |
ColCount |
5 |
Количество |
|
|
|
|
|
|
столбцов |
по |
|
|
|
|
|
умолчанию |
|
|
|
|
FixedCol |
1 |
Количество |
|
|
|
|
|
|
фиксированных |
|
|
|
|
|
|
слева столбцов |
|
|
|
|
FixedRow |
1 |
Количество |
|
|
|
|
|
|
фиксированных |
|
|
|
|
|
|
сверху строк |
|
|
|
|
Options: |
|
Опции: |
|
|
|
|
goFixedVertLine |
True |
Разметка |
|
|
|
|
|
|
зафиксированны |
|
|
|
|
|
|
х вертикальных |
|
|
|
|
|
|
линий |
|
|
|
|
goFixedHorzLine |
True |
|
|
|
|
|
|
|
Разметка |
|
|
|
|
|
|
зафиксированны |
|
|
|
|
|
|
х |
|
|
|
|
goVertLine |
True |
горизонтальных |
|
|
|
|
|
|
линий |
|
|
|
|
|
|
Разметка |
|
|
|
|
|
|
вертикальных |
|
|
|
|
goHorzLine |
True |
линий |
внутри |
|
|
|
|
|
таблицы |
|
|
|
|
|
|
Разметка |
|
|
|
|
goTabs |
True |
горизонтальных |
|
|
|
|
|
|
линий |
внутри |
|
|
|
|
|
таблицы |
|
|
|
|
|
|
Разрешает |
|
|
|
|
|
|
использование |
|
|
|
|
|
|
клавиши Tab для |
|
|
|
|
goAlwaysShowEdit |
True |
перемещения в |
|
|
|
|
or |
|
другую ячейку |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Часть II. Delphi
|
|
|
Признак |
|
|
|
|
нахождения |
|
|
|
|
компонента |
в |
|
|
|
режиме |
|
|
|
|
редактирования |
|
Form2.Button1 |
Caption |
Выход |
Кнопка |
для |
|
|
|
закрытия |
окна |
|
|
|
“Транспонирова |
|
|
|
|
нная матрица” |
|
Form3 |
Caption |
След |
Заголовок |
|
|
|
матрицы |
формы |
|
Label1 |
Caption |
Сумма |
Справочная |
|
|
|
главных |
информация |
для |
|
|
диагональных |
пользователя |
|
|
|
элементов |
программы |
|
|
|
матрицы |
|
|
|
|
называется |
|
|
|
|
следом |
|
|
|
|
матрицы |
|
|
Label2 |
Caption |
|
Поле |
для |
|
|
|
вывода, |
|
|
|
|
рассчитанного |
|
|
|
|
программой |
|
|
|
|
значения следа |
|
|
|
|
матрицы |
|
Form3.Button1 |
Caption |
Выход |
Кнопка |
для |
|
|
|
закрытия |
окна |
|
|
|
“След матрицы” |
Переменные и массивы
|
Обозначе |
|
Содержание |
|
Тип |
|
|
ние |
|
|
|
|
|
|
в |
|
|
|
|
|
|
программе |
|
|
|
|
|
|
N |
Порядок квадратной матрицы |
Целый |
|
||
|
M |
Квадратная |
матрица |
Вещественный, |
|
|
|
|
действительных чисел |
|
расширенный |
|
|
|
I |
Текущий |
номер |
строки |
Целый |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Часть II. Delphi
|
матрицы или столбца в StringGrid |
|
|
J |
Текущий номер |
столбца |
Целый |
|
матрицы или строки в StringGrid |
|
|
Sled |
След матрицы |
|
Вещественный, |
|
|
|
расширенный |
Проекты форм
Для решения данной задачи рекомендуется создать три окна.
Часть II. Delphi
Текстмодуля
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids,Unit2,Unit3;
// подключаются модули, связанные со второй и третьейформами type
Часть II. Delphi
TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Edit1: TEdit;
StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton;
procedure Button1Click(Sender: TObject); procedure Edit1Exit(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject);
private
{Private declarations } public
{Public declarations }
M :array [1..100,1..100] of Extended; //квадратнаяматрица
N:Integer;// порядокматрицы
Sled: Extended; //следматрицы end;
var
Form1: TForm1; implementation {$R *.dfm}
//процедура читает из таблицы на главной форме квадратную матрицу
//транспонирует матрицу и выводит в таблицу StringGrid
//навторуюформу
procedure TForm1.Button1Click(Sender: TObject);
Var i:Integer; //номерстрокиматрицы/номерстолбцаStringGrid j:Integer; // номерстолбцаматрицы/номерстрокиStringGrid
begin
//чтение значений квадратной матрицы из компонента StringGrid
//главнойформы
For i:=1 to StringGrid1.RowCount-1 do For j:=1 to StringGrid1.ColCount-1 do
begin M[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
end;
Часть II. Delphi
//открывается вторая форма
Form2.Show;
//количеству строк и столбцов компонента StringGrid на второй форме
//присваивается значение порядок: матрицы +1 Form2.StringGrid1.RowCount:=N+1; Form2.StringGrid1.ColCount:=N+1;
//подписываются заголовок таблицы, и номера строк
For i:=1 to Form2.StringGrid1.RowCount do
Form2.StringGrid1.Cells[i,0]:= IntToStr(i);
For j:=1 to Form2.StringGrid1.ColCount do
Form2.StringGrid1.Cells[0,j]:= IntToStr(j);
{вывод в компонент StringGrid на второй форме транспонированной матрицы}
{Транспонированная матрица не создается. Транспонирование осуществляется путем вывода столбца исходной матрицы в строку компонента StringGrid. ВStringGridномерстолбцаi, номерстроки j.}
For i:=1 to Form2.StringGrid1.ColCount-1 do
For j:=1 to Form2.StringGrid1.RowCount-1 do Form2.StringGrid1.Cells[i,j]:=FloatToStr(M[i,j]);
end;
{Процедура подготовки таблицы на форме для ввода квадратной матрицы, которая выполняется при выходе из поля ввода размерности матрицы.}
procedure TForm1.Edit1Exit(Sender: TObject); Vari,j:Integer;//номера строки столбца квадратной матрицы begin
// порядок матрицы получает свое значение из поля ввода
N:=StrToInt(Edit1.Text);
// свойство количество строк компонента StringGrid // получает значение: порядок +1 StringGrid1.RowCount:=N+1;
// свойство количество столбцов компонента StringGrid // получает значение порядок: +1 StringGrid1.ColCount:=N+1;
//подпись столбцов таблицы
For i:=1 to StringGrid1.RowCount do StringGrid1.Cells[i,0]:= IntToStr(i); //подписьстроктаблицы
For j:=1 to StringGrid1.ColCount do StringGrid1.Cells[0,j]:= IntToStr(j);
Часть II. Delphi
//добавление в свойства таблицы признака
//допустимости редактирования содержимого ячеек таблицы
StringGrid1.Options:= StringGrid1.Options +[goEditing]; end;
procedure TForm1.Button3Click(Sender: TObject); begin
Form1.Close
end;
//процедура вычисляет след матрицы и выводит результат
//натретьюформу
procedure TForm1.Button2Click(Sender: TObject);
Var i: Integer; begin
Sled:=0;
Form3.Show;
For i:=1 to Form1.StringGrid1.ColCount-1 do Sled:= Sled + M[i,i];
Form3.Label2.Caption:=' Следматрицыравен ' + FloatToStr(Sled) end;
end.
{ Модуль, связанный со второй формой} unit Unit2;
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm2 = class(TForm) StringGrid1: TStringGrid; Button1: TButton;
procedure Button1Click(Sender: TObject); private
{Private declarations } public
{Public declarations }
end; var
Часть II. Delphi
Form2: TForm2; implementation {$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject); begin
Form2.Close
end;
end.
{ Модуль, связанный с третьей формой.} unit Unit3;
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm3 = class(TForm) Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject); private
{Private declarations } public
{Public declarations }
M :array [1..100,1..100] of Extended; N:Integer;
Sled: Extended; end;
var
Form3: TForm3; implementation {$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject); begin
Form3.Close
end;
end.
Часть II. Delphi
Тестовый пример