Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
1.10 Модули
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующей части. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя.
Роль модулей в Delphi не исчерпывается только механизмом раздельной компиляции. Delphi связывает с каждым включаемым в программу окном собственный модуль и таким способом локализует все свойства окна в отдельной программной единице. Как мы увидим далее, основная программа оконного приложения (файл проекта DPR) содержит перечень всех используемых в приложении модулей и несколько исполняемых операторов, обеспечивающих создание нужных окон и связь приложения с Windows. Вся основная работа приложения управляется кодом, содержащимся в модулях.
Модуль имеет следующую структуру
unit <имя>;
interface
<интерфейсная часть>
implementation
<исполняемая часть>
initialization
<инициирующая часть>
finalization
<завершающая часть>
end.
Таким образом, модуль состоит из заголовка и четырёх составных частей, любая из которых может быть пустой.
Для правильной работы среды Delphi имя модуля должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Если, например, имеем заголовок модуля unit vector, то исходный текст соответствующего модуля должен размещаться в дисковом файле vector. pas.
Связь модуля с другими модулями и основной программой устанавливается специальным предложением
uses <список модулей>;
Например,
uses SysUtils, vector;
Объявление uses должно открывать раздел описаний основной программы.
В интерфейсной части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступны основной программе или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок.
Исполняемая часть содержит реализацию подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты: вспомогательные типы, константы, переменные и подпрограммы. Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных параметров (и тип результата для функции). Но если заголовок подпрограммы приводится в полном виде, то есть со списком формальных параметров и объявлением типа результата, он должен полностью совпадать с заголовком, объявленным в интерфейсной части.
Инициирующая и завершающая части чаще всего отсутствуют вместе с начинающими их словами initialization и finalization. В инициирующей части размещаются операторы, которые исполняются до передачи управления основной программе и обычно используются для подготовки её работы. В завершающей части указываются операторы, выполняющиеся после завершения работы основной программы (освобождение выделенных программе ресурсов, закрытие файлов).
Пример 56. Дано два целочисленных вектора размера n. Найти их скалярное произведение. Для решения задачи создать и использовать модуль, содержащий следующие подпрограммы: процедуру заполнения одномерного массива с клавиатуры, функцию для нахождения скалярного произведения двух векторов.
unit vector;
interface
const n=5;
type lin=array[1..n] of integer;
procedure init(var x:lin);
function scal(x, y:lin):integer;
implementation
procedure init;
var i:integer;
begin
for i:=1 to n do read(x[i]);
end;
function scal;
var i:integer;
begin
result:=0;
for i:=1 to n do result:=result + x[i]*y[i];
end;
end.
Чтобы создать такой модуль, следует выбрать команду FileNewUnit. Текст модуля следует сохранить в файле vector. pas. Приведём текст основной программы (консольного приложения), использующей модуль vector.
program p56;
{$APPTYPE CONSOLE}
uses
SysUtils, vector;
var a, b:lin; rez:integer;
begin
init(a); init(b); rez:=scal(a, b);
writeln(rez:6);
readln; readln
end.
Задачи.
155. Дано три целочисленных вектора a, b, c размера n (n=5). Верно ли, что вектор a + b ортогонален вектору b + c? Для решения задачи добавить в модуль vector функцию для нахождения суммы двух векторов.
156. Дано три целочисленных вектора a, b, c размера n (n=5). Вычислить величину (a, a)–(b, c), где a – тот из векторов, в котором самый большой минимальный элемент (считать, что такой элемент единственный). Для решения задачи добавить в модуль vector функцию для нахождения минимального элемента одномерного массива.
157. Дано три целочисленных вектора a, b, c размера n (n=5). Вывести на печать вектор с наибольшим скалярным квадратом. Для решения задачи добавить в модуль vector процедуру распечатки элементов одномерного массива.
158*. Дано n целочисленных векторов размера n (n=5). Найти скалярное произведение вектора с минимальной суммой элементов и вектора с максимальной суммой элементов. Добавить в модуль vector необходимые для решения задачи подпрограммы.
159*. Дано n целочисленных векторов размера n (n=5). Определить, является ли данная последовательность векторов ортонормированной, т. е. такой, в которой скалярное произведение каждой пары различных векторов равно нулю, а скалярный квадрат каждого из векторов равен 1. Для решения задачи использовать модуль vector.
Программирование в среде Delphi
Часть II
Создание оконных приложений
2.1 Классы и объекты
Объектно-ориентированное программирование (ООП) – это методика разработки программ, в основе которой лежит понятие объекта, как некоторой структуры, описывающей объект реального мира, его поведение. Задача, решаемая с использованием методики ООП, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними.
Строго говоря, для разработки оконного приложения в Delphi на базе компонентов, предоставляемых средой разработки, знание концепции ООП не является необходимым. Однако материал данной главы будет весьма полезен для более глубокого понимания того, как программа взаимодействует с компонентами, что и почему Delphi добавляет в текст программы.
Язык Object Pascal, поддерживая концепцию объектно-ориентированного программирования, даёт возможность определять классы. Описание типа class напоминает описание типа record (запись), но тип class кроме описания полей данных содержит ещё методы (процедуры и функции).
Объект в Object Pascal – это конкретный экземпляр класса. Переменная-объект понимается как динамическая структура, то есть содержит не данные, а ссылку на данные объекта. Выделение памяти под эти данные осуществляется при помощи специального метода – конструктора (constructor).
Пример объявления простого класса:
type tPerson = class
fname : string[15];
faddress : string[45];
fage : byte;
procedure show;
end;
var boy1 : tPerson;
В основе объектно-ориентированного программирования лежат три основных принципа: инкапсуляция, наследование и полиморфизм.
Инкапсуляцией называется объединение в классе данных и подпрограмм для их обработки. Данные содержатся в полях класса, а процедуры и функции называются методами. В соответствии с правилами объектно-ориентированного программирования прямой доступ к полям нежелателен. В связи с этим в Object Pascal предусмотрены специальные конструкции, называемые свойствами, которые осуществляют чтение или запись в поля при помощи вызова соответствующих методов. Общепринятым является правило давать названия классам, начинающиеся с буквы t. Например:
type tPerson = class;
Наследование означает, что класс может наследовать компоненты другого класса. Создать новый класс от некоторого класса-родителя можно следующим образом:
type tStudent = class(tPerson);
Принцип наследования заключается в том, что порождённый класс-потомок автоматически наследует поля, методы и свойства своего родителя, и в тоже время может дополнять их новыми.
В Object Pascal все классы являются потомками класса tObject. Этот класс не включает в себя полей и свойств, зато его методы позволяют создавать, поддерживать работу и удалять объекты. Если программист хочет создать класс, являющийся непосредственным потомком класса tObject, то имя класса-родителя в этом случае можно не указывать, т. е. следующие строки являются эквивалентными:
type tNewClass = class(tObject);
type tNewClass = class;
Использование принципа наследования в Delphi привело к созданию разветвлённого дерева классов. В верхней части этого дерева находятся так называемые абстрактные классы, для которых нельзя создать полноценные работающие объекты. Но вместе с тем абстрактные классы являются родоначальниками больших групп классов, для которых уже создаются реальные объекты.
Полиморфизм позволяет использовать одинаковые имена для методов, входящих в различные классы. Принцип полиморфизма обеспечивает в случае обращения к одноимённым методам выполнение того из них, который соответствует классу объекта.
В общем виде класс объявляется в разделе type следующим образом:
type < имя класса > = class(< имя класса-родителя >)
public
< описание общедоступных элементов >
published
< описание элементов, доступных в Инспекторе Объектов >
protected
< описание элементов, доступных в классах-потомках >
private
< описание элементов, доступных только в модуле >
end;
Секции public, published, protected, private могут содержать описания полей, методов, свойств, событий.
Следующий пример иллюстрирует создание объекта типа tPerson, обращение к его полям и методам.
type tPerson = class
private
fname : string[15];
faddress : string[45];
fage : byte;
public
procedure show;
end;
var boy1 : tPerson;
procedure tPerson. show;
begin
writeln('Surname?'); writeln(fname);
writeln('Address?'); writeln(faddress);
writeln('Age?'); writeln(fage);
end;
begin
boy1:=tPerson. Create; boy1.fname:='Ivanov';
boy1.faddress:='Kolzovskaja, 59-45';
boy1.fage:=16; boy1.show;
readln;
end.
После описания типа класса tPerson следует описание реализации методов. В заголовке имя метода дополняется именем класса, к которому данный метод относится (procedure tPerson. show;). В теле метода обращение к полям класса происходит без указания имени класса. Создание объекта boy1 происходит в результате применения конструктора Create к имени класса. Для того чтобы обратиться к полю объекта, нужно написать имя объекта и имя поля, разделённые точкой (boy1.fage). Аналогично записывается вызов метода объекта (boy1.show).
Классы, созданные разработчиками Delphi, образуют сложную иерархическую структуру, называемую Библиотекой визуальных компонентов (Visual Component Library –VCL). Количество входящих в VCL классов составляет несколько сотен. На следующем рисунке изображены базовые классы, являющиеся родоначальниками всех остальных классов.
![]() |
Во время проектирования формы приложения Delphi автоматически добавляет в текст программы необходимые объекты. Если сразу после запуска Delphi просмотреть содержимое окна редактора кода, то там можно обнаружить следующее описание класса исходной, пустой формы приложения и объявление объекта – формы приложения:
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Когда программист, добавляя необходимые компоненты, создаёт нужную форму, Delphi формирует описание класса формы. Когда программист создаёт процедуру обработки события формы или её компонента, Delphi добавляет объявление метода в описание класса формы приложения.
2.2 Создание простейшего оконного приложения
Начало работы в Delphi
После запуска Delphi на экране появляются четыре окна: главное окно, окно формы, окно инспектора объектов и окно редактора кода, которое почти полностью закрыто окном формы.
В главном окне находится меню команд Delphi, панель инструментов и палитра компонентов.
Окно формы ( его заголовок Form1) представляет собой заготовку, макет одного из окон разрабатываемого приложения.
Окно инспектора объектов ( его заголовок Object Inspector) позволяет видеть и менять свойства объектов проекта. После запуска Delphi в этом окне находятся свойства формы Form1.
Окно редактора кода содержит макет процедуры обработки события. Кодом в Delphi называется текст программы.
Форма приложения
Работа над новым проектом (так в Delphi называется разрабатываемое приложение) начинается с создания стартовой формы – окна, которое появляется при запуске приложения.
Начнём с создания проекта для пересчёта длины отрезка из дюймов в сантиметры. Стартовая форма создаётся путём изменения свойств формы Form1, которые определяют её внешний вид: размер, положение на экране, текст заголовка, оформление. Свойства перечислены на вкладке Properties окна Object Inspector. В левой колонке находятся имена свойств, в правой – их значения.
В таблице приведены изменённые свойства формы разрабатываемого приложения. Остальные свойства оставлены без изменения.
Свойство | Обозначение | Значение |
Имя формы | Name | Form1 |
Заголовок | Caption | Дюйм |
Высота | Height | 185 |
Ширина | Width | 290 |
Шрифт | Font. Name | Arial |
Размер шрифта | Font. Size | 12 |
После установки этих значений свойств форма должна выглядеть следующим образом:
![]() |
Компоненты формы
Программа пересчёта длины отрезка из дюймов в сантиметры должна получить от пользователя исходные данные – значение длины в дюймах. Добавим в форму компонент – поле редактирования для ввода данных.
|
Компонент формы, окружённый восемью маленькими квадратиками, называется выделенным (маркированным). Свойства маркированного компонента отображаются в Object Inspector. Delphi позволяет легко изменить положение и размер компонента обычным для Windows способом. Если свойства компонента изменяются с помощью Object Inspector, то компонент должен быть в это время маркирован. В таблице приведены изменённые свойства поля редактирования, предназначенного для ввода длины отрезка в дюймах.
Свойство | Обозначение | Значение |
Имя поля. Используется для доступа к содержимому поля. | Name | Edit1 |
Текст, находящийся в поле ввода. | Text | |
Расстояние от левой границы поля до левой границы формы. | Left | 24 |
Расстояние от верхней границы поля до верхней границы формы. | Top | 48 |
Ширина поля. | Width | 100 |
После установления указанных значений свойств компонента Edit1 форма приложения примет вид:
![]() |
Для вывода текстовых сообщений в форме используются метки. Текст метки может быть задан как на этапе конструирования формы, так и на этапе выполнения программы. К форме разрабатываемого приложения надо добавить две метки. Первая метка будет представлять собой информационное сообщение. Вторая метка предназначена для вывода результата пересчёта из дюймов в сантиметры.
|
В таблице приведены изменённые свойства меток Label1 и Label2:
Name | Label1 | Label2 |
Caption | Введите длину в дюймах и щёлкните на Пересчёт | |
AutoSize | False | False |
Top | 8 | 96 |
Left | 24 | 24 |
Height | 33 | 49 |
Width | 209 | 130 |
WordWrap | True | True |
ParentFont | True | True |
![]() |
После добавления меток и установки их свойств форма разрабатываемого приложения приобретёт вид:
Свойство ParentFont обеих меток имеет значение true, поэтому свойство Font (шрифт) меток наследует значение свойства Font “родителя”, в данном случае основной формы.
Если свойство AutoSize (автоматический подгон размера) имеет значение true, то Delphi автоматически устанавливает размеры метки в зависимости от количества символов текста метки и используемого шрифта. В противном случае метка сохраняет заданные размеры независимо от размещённого в ней текста.
Если свойство WordWrap имеет значение true, то после заполнения текущей строки будет происходить перенос текста на новую строку.
|
Пиктограмма командной кнопки.
В таблице приведены изменённые свойства командной кнопки.
Name | Button1 |
Caption | Пересчёт |
Top | 48 |
Left | 184 |
Height | 25 |
Width | 75 |
![]() |
Окончательный вид формы приложения:
Событие и процедура обработки события
Вид созданной формы подсказывает, как работает приложение. Пользователь должен ввести количество дюймов в поле редактирования, затем щёлкнуть на кнопке Пересчёт. Щелчок на изображении командной кнопки – это пример того, что в Windows называют событием. Щелчок кнопкой мыши – это событие OnClick. В Delphi реакция на событие реализуется как процедура обработки события. Таким образом, задача программиста при работе в Delphi состоит в написании процедур обработки событий.
Сначала следует маркировать (выделить) объект, для которого создаётся процедура обработки события. В нашем случае это командная кнопка Пересчёт. Затем выбрать вкладку Events (события) окна Object Inspector.
Чтобы создать процедуру обработки события, надо сделать двойной щелчок в поле имени процедуры обработки события. В результате открывается окно редактора кода с макетом процедуры обработки события. Delphi автоматически присваивает процедуре обработки события имя, которое состоит из двух частей. Первая часть идентифицирует форму, которой принадлежит объект, для которого создаётся процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В нашем случае имя формы – Form1, имя командной кнопки – Button1, имя события – Click.
Событие OnClick является для командной кнопки Button событием по умолчанию. Поэтому макет процедуры обработки этого события можно добавить в программный код, сделав двойной щелчок левой клавишей мыши по кнопке Пересчёт.
В окне редактора кода между begin и end можно печатать инструкции Object Pascal, реализующие процедуру обработки события. Между заголовком процедуры и словом begin необходимо добавить описание используемых в процедуре локальных переменных.
Исходные данные программа получает из окна редактирования Edit1. То, что мы введём в это окно, будет присвоено свойству Text компонента Edit1. Свойство Text имеет строковый тип. Поэтому мы должны введённую строку преобразовать в число с помощью одной из следующих функций преобразования типов:
StrToInt(s) – возвращает целое число, изображением которого является строка s.
StrToFloat(s) – возвращает вещественное число, изображением которого является cтрока s.
Таким образом, инструкция, которая присваивает вещественной переменной d значение числа, изображением которого является строка, введённая в поле Edit1, выглядит следующим образом:
d:=StrToFloat(Edit1.Text);
После вычисления количества сантиметров, соответствующих введённому количеству дюймов, необходимо вывести сообщение о результатах вычисления в поле метки Label2. Для этого нужно строку текста сообщения, заключённую в апострофы, присвоить свойству Caption метки Label2. При этом нужно встречающиеся в строке сообщения числа преобразовать в строку с помощью одной из следующих функций преобразования типов:
IntToStr(n) – строка, являющаяся изображением целого числа n.
FloatToStr(n) – строка, являющаяся изображением вещественного n.
FloatToStrF(n, f,l, m) –строка, являющаяся изображением вещественного n;
при вызове функции указываются:
f – формат (способ изображения);
l – общее количество цифр;
m – количество цифр после десятичной точки.
Соответствующая инструкция будет выглядеть следующим образом:
Label2.Caption:=Edit1.Text + ' дюйм(а/ов) это ' + FloatToStrF(sm, ffGeneral, 6, 2) + ' см ';
Здесь знак ¢ + ¢ является знаком операции конкатенации (склеивания строк). Для перехода на новую строку добавляется символ с кодовым номером 13 (#13).
Полный текст процедуры обработки события OnClick для кнопки Button1:
procedure TForm1.Button1Click(Sender: TObject);
var d, sm:real;
begin
d:=StrToFloat(Edit1.Text);
sm:=d*2.54;
Label2.Caption:=Edit1.Text+' дюйм(а/ов) это '+
FloatToStrF(sm, ffGeneral,6,2)+' см ';
end;
Сохранение проекта
В терминологии Delphi проект – это набор файлов, используя которые компилятор создаёт файл исполняемой программы. Один из этих файлов, содержащий общее описание проекта, называется файлом проекта и имеет расширение dpr. Проект также включает в себя один или более модулей, файлы которых имеют расширение pas и содержат тексты процедур, функций, описание типов и другую информацию, необходимую компилятору для создания исполняемой программы.
Чтобы сохранить проект, надо из меню File выбрать команду SaveProjectAs. Если проект ещё ни разу не был сохранён, то в ответ Delphi сначала выводит диалоговое окно SaveUnit1As. В этом окне следует выбрать папку, предназначенную для хранения всех проектов Delphi. В этой папке следует создать новую отдельную папку для файлов данного сохраняемого проекта. Для этого использовать кнопку “Создание новой папки”. Рядом с появившимся значком новой папки в рамке напечатать имя папки проекта – Дюйм и нажать Enter. Затем открыть эту созданную папку и в поле Имя файла либо ввести имя, например, inch_, либо согласиться с предложенным именем ( Unit1 ), и щелкнуть на кнопке Сохранить. После этого появляется следующее диалоговое окно SaveProject1As, где в качестве типа файла указано Delphi project (* . dpr). В поле Имя файла введём название файла проекта inch (без знака подчёркивания ) или можно согласиться с предложенным именем ( Project1 ).
Замечание. Хотя файлы, имеющие одинаковые имена, но разные расширения операционной системой рассматриваются как разные файлы, однако при попытке присвоить файлу проекта такое же имя, какое присвоено модулю проекта, Delphi выдаёт сообщение об ошибке. Следует обратить внимание, что имя исполняемого файла проекта, создаваемого компилятором, совпадает с именем файла проекта. Поэтому файлу проекта следует присвоить то имя, которое должен иметь исполняемый файл программы, а файлу модуля – какое-либо другое, например, полученное из имени файла проекта путём добавления в конец имени цифры или символа (в нашем проекте _ ).
Компиляция
После сохранения проекта можно, выбрав команду Compile из меню Project, откомпилировать приложение. Чтобы после завершения компиляции окно Compiling появлялось на экране, надо из меню Tools выбрать команду Environment Options, в открывшемся диалоговом окне выбрать вкладку Preferences и установить флажок Show compiler progress.
Запуск приложения из среды программирования
Выполнение приложения можно запустить из среды программирования, не завершая работу в Delphi. Для этого надо выбрать команду Run из меню Run.
![]() |
Вид работающего приложения:
Следует обратить внимание, что формат ввода вещественных чисел в поле редактирования предполагает десятичную запятую, а не точку.
Задачи.
1. Создать проект для пересчёта суммы в долларах по данному курсу в рубли. Окно приложения:
![]() |
2. Создать проект для вычисления стоимости телефонного разговора в зависимости от дня недели. (Цена одной минуты разговора 0,15руб. В субботу и воскресенье скидка 20%) Окно приложения:
![]() |
3. Создать проект для определения оптимального веса. Программа запрашивает ваш вес и рост, вычисляет оптимальное для вас значение веса (рост минус 100), сравнивает его с реальным, и в зависимости от результата сравнения выводит одно из следующих сообщений
Ваш вес оптимален.
Вам надо поправиться на кг.
Вам надо похудеть на кг.
![]() |
Окно приложения:
4. Дано натуральное число n. Получить двоичное представление числа n. Окно работающего приложения:

5. Составить таблицу значений линейной функции y = ax + b на отрезке [0, 1] с шагом 0,1.

6*. Дан одномерный целочисленный массив из 10 элементов, введённых в поле редактирования Edit. Числа массива разделены пробелами. Найти произведение отрицательных элементов массива. Для решения задачи оформить процедуру readmassiv(s:string; var aa:mas); , позволяющую в строке s выделять подстроку, изображающую число, и заполнять этими числами массив aa.

Окончательная настройка приложения
После того как программа отлажена, необходимо выполнить её окончательную настройку: назначить приложению значок, который будет изображать исполняемый файл приложения в папке или на рабочем столе. Этот же значок будет находиться во время работы программы рядом с её именем на панели задач Windows.
![]() |
Для того чтобы назначить приложению значок, необходимо из меню Project выбрать команду Options и в открывшемся диалоговом окне Project Options выбрать вкладку Application.
В поле Title следует ввести название приложения. Во время работы приложения его название выводится на панели задач Windows рядом со значком, изображающим приложение. Для выбора значка необходимо нажать кнопку Load Icon. В открывшемся диалоговом окне Application Icon следует просмотреть имеющиеся каталоги и найти файл подходящего значка (значки хранятся в файлах с расширением. ico). Выбрав нужный значок, нажмите Открыть. В результате диалоговое окно Application Icon закроется, и вновь появится диалоговое окно Project Options, в котором теперь отображается выбранный значок приложения. Для завершения процесса нажмите кнопку OK.
Установка приложения
![]() |
Значок приложения можно поместить в одно из меню панели задач Windows. Для этого необходимо в главном меню Windows, которое открывается щелчком по кнопке Пуск на панели задач, выбрать команду Настройка, а затем команду Панель задач. В открывшемся диалоговом окне Свойства: Панель задач на вкладке Настройка меню следует нажать кнопку Добавить.
В открывшемся диалоговом окне Создание ярлыка в поле Командная строка необходимо ввести имя исполняемого файла приложения с указанием пути к нему. Для ввода имени файла приложения можно воспользоваться кнопкой Обзор, нажатие которой открывает диалоговое окно поиска нужного файла.
![]() |
![]() |
После ввода командной строки следует нажать кнопку Далее и в открывшемся диалоговом окне Выбор папки выбрать одну из папок меню Программы. Для того чтобы установить программу в новую папку, необходимо нажать кнопку Создать папку и ввести имя новой папки, например Практикум Delphi.
Нажатие кнопки Далее открывает диалоговое окно Выбор названия программы. В поле Укажите название ярлыка следует ввести текст, который будет выводится рядом со значком, изображающим приложение в списке программ папки. После нажатия кнопки Готово в указанной папке появляется строка, позволяющая запустить созданное приложение выбором команды в главном меню Windows.
![]() |
Структура простого проекта Delphi.
Проект Delphi представляет собой набор программных единиц – модулей. Один из модулей, называемый главным, содержит инструкции, с которых начинается выполнение программы. Главный модуль приложения автоматически формируется Delphi. Он хранится в файле с расширением. dpr. Для того чтобы увидеть текст главного модуля приложения, необходимо из меню Project выбрать команду View Source.
Текст главного модуля программы пересчёта дюймов в сантиметры.
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application. Initialize;
Application. Title := 'Дюйм';
Application. CreateForm(TForm1, Form1);
*****n;
end.
За словом uses следуют имена используемых модулей: библиотечного модуля Forms и модуля формы Unit1. Директива {$R *.RES} указывает компилятору, что нужно использовать файл ресурсов, который содержит описания ресурсов приложения, например, пиктограммы. Звёздочка показывает, что имя файла ресурсов такое же как у файла проекта, но с расширением. res.
Инструкции исполняемой части главного модуля обеспечивают инициализацию приложения и вывод на экран стартового окна.
Помимо главного модуля каждый проект включает как минимум один модуль формы, который содержит описание стартовой формы приложения и поддерживающих её работу процедур. В Delphi каждой форме соответствует свой модуль.
Текст модуля формы проекта пересчёта дюймов в сантиметры.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var d, sm:real;
begin
d:=StrToFloat(Edit1.Text);
sm:=d*2.54;
Label2.Caption:=Edit1.Text+' дюйм(а/ов) это '+
FloatToStrF(sm, ffGeneral,6,2)+' см ';
end;
end.
Начинается модуль словом unit, за которым следует имя модуля. Именно это имя упоминается в списке используемых модулей в инструкции uses главного модуля приложения.
Интерфейсный раздел модуля ( interface ) сообщает компилятору, что именно в этом модуле является доступным для других модулей проекта. В этом разделе перечислены (после слова uses) библиотечные модули, используемые данным модулем, а также находится сформированное Delphi описание типа формы, которое следует после слова type. Затем описывается переменная Form1 данного типа.
Раздел реализации (implementation) начинается директивой {$R *.DFM}, указывающей компилятору, что в раздел реализации надо вставить инструкции установки значений свойств формы, которые находятся в файле с расширением. dfm, имя которого совпадает с именем модуля. Файл в формате DFM генерируется Delphi на основе внешнего вида формы.
За директивой {$R *.DFM} следует описание процедур обработки событий формы. Сюда же программист может поместить описание своих процедур и функций, которые будут вызываться из процедур обработки событий.
В модуле может также содержаться раздел инициализации, который позволяет выполнить инициализацию переменных модуля. В данном примере раздел инициализации отсутствует вместе с открывающим его словом begin.
2.3 Текстовый редактор Memo.
Текстовый редактор Memo в отличие от строки ввода Edit может содержать не одну, а любое число строк. Основным свойством компонента Memo является property Lines, которое задаёт список строк, помещённых в редактор. Это свойство имеет тип TStrings. Класс TStrings используется для определения свойств соответствующего типа во многих компонентах Delphi. Объекты этого класса представляют собой списки строк. Познакомимся с некоторыми свойствами и методами, определёнными в классе TStrings.
property Count : integer;
Определяет число элементов в списке.
property Strings[index:integer]:string;
Определяет строку списка с индексом index. Индекс первой строки – 0.
property Text : string;
Содержит все строки списка, включая разделители – символы возврата каретки и перевода строки (#13#10)
function Add(const s:string) : integer;
Добавляет строку S в список и возвращает порядковый номер этой строки в списке.
procedure Clear;
Удаляет все строки и указатели на объекты из списка.
procedure Delete(index:integer);
Удаляет из списка элемент с индексом index.
procedure Exchange(index1, index2:integer);
Меняет местами два элемента списка с индексами index1 и index2.
procedure Insert(index:integer; const S:string);
Вставляет в список строку S под индексом index.
procedure Move(Curindex, Newindex:integer);
Перемещает элемент списка из позиции Curindex в позицию Newindex.
procedure LoadFromFile(const FileName:string);
Загружает список из файла с именем FileName.
procedure SaveToFile(const FileName:string);
Помещает список в файл с именем FileName.
Пример 1. Создать оконное приложение, позволяющее вводить с клавиатуры список строк в поле редактора Memo, а затем нажатием кнопки удалять все строки, содержащие более 4 символов.
Окно работающего приложения:

Процедура обработки события щелчка на кнопке Удалить строки:
type TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to memo1.Lines. count-1 do
if length(memo1.Lines. Strings[i])>4 then memo1.Lines. Delete(i);
end;
end.
Пример 2. Создать оконное приложение, вычисляющее первые 20 элементов арифметической прогрессии, для которой заданы первый элемент и разность. Окно работающего приложения:

Процедура обработки события щелчка по кнопке Заполнить:
procedure TForm1.Button1Click(Sender: TObject);
var a, d,an, i:integer;
begin
a:=strtoint(edit1.Text);
d:=strtoint(edit2.Text);
memo1.Lines. Add(edit1.Text);
an:=a;
for i:=2 to 20 do
begin
an:=an+d;
memo1.Lines. Add(inttostr(an))
end;
end;
Процедура обработки события щелчка по кнопке Очистить:
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Lines. Clear;
end;
Задачи
7. Заполнить одномерный целочисленный массив a числами, введёнными с клавиатуры в поле Memo1. Получить новый массив b, удвоив нечётные элементы массива a, чётные оставить без изменения. Полученный массив b отобразить в поле Memo2. Окно работающего приложения:

8. Создать оконное приложение, позволяющее вводить с клавиатуры список строк в поле редактора Memo, а затем, используя процедуру Exchange, переставить строки в обратном порядке. Окно работающего приложения:

9. Заполнить одномерный целочисленный массив a числами, введёнными с клавиатуры в поле Memo1. Получить новый массив b, каждый элемент которого равен сумме цифр соответствующего элемента массива a. Полученный массив b отобразить в поле Memo2. Окно работающего приложения:

10. Найти все трёхзначные числа, каждое из которых удовлетворяет условию: сумма кубов цифр числа равняется самому числу. Найденные числа отобразить в поле редактора Memo, подсчитать их количество. Окно работающего приложения:

11. Дан одномерный целочисленный массив из 20 элементов. Ввести его элементы с клавиатуры в поле Memo и удалить последний максимальный элемент массива. Окно приложения:

12*. Дан одномерный целочисленный массив a из 20 элементов. Ввести его элементы с клавиатуры в поле Memo, а затем, используя методы класса TStrings, переставить элементы массива a так, чтобы они расположились в следующем порядке
a1, a11, a2, a12, … , a10, a20 .
Окно приложения:

2.4 Использование компонента ListBox
Использование компонента ListBox
на этапе конструирования формы
Рассмотрим следующую задачу.
Пример 3. Написать программу, которая пересчитывает вес из фунтов в килограммы с учётом того, что в разных странах фунт “весит” по-разному.
Россия 0.4059
Англия 0.453592
Австрия 0.56001
Германия 0.5
Дания 0.5
Исландия 0.5
Италия 0.31762
![]() |
Нидерланды 0.5
В диалоговом окне программы для выбора страны используется список (ListBox). Для разрабатываемой программы наибольший интерес представляют два свойства компонента ListBox: Items и Item Index.
Свойство Items содержит элементы списка. Список, выводимый в поле ListBox, может быть сформирован во время создания формы или динамически, во время работы программы. Для формирования списка во время создания формы приложения надо после добавления в форму компонента ListBox в окне Object Inspector выбрать свойство Items и щёлкнуть на кнопке редактора списка строк, на которой изображены три точки. В появившемся диалоговом окне String list editor (редактор списка строк) следует набрать список, поместив каждый элемент списка на отдельной строке. Ввод очередного элемента списка должен заканчиваться нажатием клавиши Enter. После ввода всех элементов списка нужно щёлкнуть на кнопке Ok.
Свойство Item Index во время работы программы содержит номер выбранного элемента списка. Если ни один из элементов списка не выбран, то значение Item Index равно минус единице. Ниже перечислены компоненты формы с указанием предназначения.
Компонент (свойство Name) | Предназначение |
List Box 1 | Выбор страны |
Edit 1 | Ввод веса в фунтах |
Label 1,Label 2, Label 3 | Вывод пояснительного текста |
Label 4 | Вывод результата пересчёта |
Button 1 | Активизация процедуры пересчёта. |
procedure TForm1.Button1Click( Sender : TObject);
var funt, kg, k : real;
begin
case List Box1.Item Index of
0 : k:=0.4059;
1 : k:=0.453592;
2 : k:=0.56001;
3..5, 7 : k:=0.5;
6 : k:=0.31762
end;
funt:=StrToFloat(Edit1.Text);
kg:=k * funt;
Label4.Caption:=Edit1.Text + ¢ фунт(а/ов) – это ¢ +
FloatToStrF(kg, ffFixed,6,3) + ¢ кг ¢;
end;
Задачи.
13. Написать программу, выполняющую работу арифметического калькулятора с четырьмя арифметическими действиями над действительными числами.

14. Написать программу для вычисления значения тригонометрической функции (sin, cos, tg, ctg) для данного действительного числа x.
Окно работающего приложения:

Использование компонента ListBox
на этапе выполнения программы
Формирование списка ListBox может происходить не только на этапе конструирования формы приложения, но и динамически, то есть на этапе выполнения программы. Проиллюстрируем это на примере решения следующей задачи.
Пример 4. В целочисленном массиве из 10 элементов (все элементы различны) найти максимальный и минимальный элементы и поменять их местами. (Для отображения массивов в форме использовать компонент ListBox)
Форма приложения должна выглядеть следующим образом:
![]() |
Для ввода целых чисел используется поле редактирования Edit1. Ввод каждого числа завершается щелчком мыши по кнопке Ввод. Введённый массив отображается в поле ListBox1. После щелчка на кнопке Решение преобразованный массив отображается в поле ListBox2.
В разделе Interface (в разделе описания переменных var) вставим описание массива и используемых переменных:
a : array[1..10] of integer;
i, min, max, imax, imin : integer;
Выполним щелчок по форме Form1. В окне Object Inspector откроем вкладку Events и в поле имени события OnCreate (создание формы) сделаем двойной щелчок. В открывшемся редакторе кода впечатаем инструкции в предложенной заготовке процедуры:
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
ListBox1.Clear;
ListBox2.Clear;
end;
Задано начальное значения индекса i массива. Метод Clear удаляет все элементы списка ListBox (очищает поле ListBox).
Выделим кнопку Ввод. На вкладке Events окна Object Inspector сделаем двойной щелчок в поле имени события OnClick и в появившейся заготовке процедуры впечатаем необходимые инструкции:
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items. Add(Edit1.Text);
i:=i+1;
a[i]:=StrToInt(Edit1.Text);
Edit1.SetFocus
end;
Функция Add формирует список ListBox1, заполняя его числами, вводимыми в поле Edit1. Одновременно этими же числами заполняется массив a. Процедура SetFocus устанавливает фокус ввода в поле Edit1. Это означает, что после ввода очередного числа и занесения его в список ListBox1 щелчком по кнопке Ввод поле Edit1 снова будет активным (там будет мигать курсор).
Выделим кнопку Решение. На вкладке Events окна Object Inspector сделаем двойной щелчок в поле имени события OnClick и в появившейся заготовке процедуры впечатаем необходимые инструкции:
procedure TForm1.Button2Click(Sender: TObject);
var k : integer;
begin
max:=a[1]; imax:=1; min:=a[1]; imin:=1;
for k:=2 to 10 do
begin if max<a[k] then begin max:=a[k]; imax:=k end;
if min>a[k] then begin min:=a[k]; imin:=k end;
end;
a[imax]:=min; a[imin]:=max;
for k:=1 to 10 do ListBox2.Items. Add(IntToStr(a[k]));
end;
После сохранения проекта и компиляции можно запускать его на выполнение. Полный текст сформированного модуля:
unit mm_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array[1..10] of integer; i, min, max, imax, imin : integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
ListBox1.Clear; ListBox2.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items. Add(Edit1.Text);
i:=i+1;
a[i]:=StrToInt(Edit1.Text);
Edit1.SetFocus
end;
procedure TForm1.Button2Click(Sender: TObject);
var k:integer;
begin
max:=a[1]; imax:=1; min:=a[1]; imin:=1;
for k:=2 to 10 do
begin if max<a[k] then begin max:=a[k]; imax:=k end;
if min>a[k] then begin min:=a[k]; imin:=k end;
end;
a[imax]:=min; a[imin]:=max;
for k:=1 to 10 do ListBox2.Items. Add(IntToStr(a[k]));
end;
end.
Задачи
![]() |
15. Заполнить одномерный целочисленный массив из 10 элементов числами Фибоначчи. Для отображения массива в форме использовать компонент ListBox.
16. Дан одномерный целочисленный массив a из 10 элементов. Все элементы этого массива, предшествующие первому по порядку элементу со значением max(a1,…,a10) домножить на max (a1,…,a10 ). Для отображения массивов в форме использовать компонент ListBox.
![]() |
17. Дана строка, содержащая не более 30 символов, являющихся строчными русскими буквами и запятыми. Последний символ – точка. Последовательность букв между двумя соседними знаками препинания назовём словом. Вывести в поле компонента ListBox в столбец все слова, меняя местами в каждом слове первую и последнюю буквы.
![]() |
2.5 Использование панели переключателей Radio Group
![]() |
Пример 5. Создадим приложение, позволяющее менять цвет текста, набранного в строке ввода Edit. Окно работающего приложения должно выглядеть следующим образом:
Свойству Caption компонента RadioGroup1 присвоим значение ¢Цвет¢. Выделим свойство Items и щелкнем по кнопке с тремя точками. В появившемся окне StringListEditor введём имена переключателей. Для каждого переключателя выделяется одна строка:
Чёрный
Зелёный
Красный
Синий
После завершения ввода нажимаем кнопку Ok.
Свойство ItemIndex установим равным 0. Это означает, что в начале работы выделенным переключателем будет первый.
Для компонента Edit1 установим свойство Text равным ¢Delphi 5¢. (Значение этого свойства можно менять в ходе работы приложения.)
Выполним двойной щелчок на компоненте RadioGroup1. В появившемся окне Редактора Кода запишем операторы для обработчика события OnClick, которое возникает при выделении нового переключателя.
Приведём полный текст сформированного модуля.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Edit1: TEdit;
procedure RadioGroup1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
if radiogroup1.itemindex=0 then edit1.font. color:=clblack;
if radiogroup1.itemindex=1 then edit1.font. color:=clgreen;
if radiogroup1.itemindex=2 then edit1.font. color:=clred;
if radiogroup1.itemindex=3 then edit1.font. color:=clblue;
end;
end.
Задачи
18. Создать оконное приложение, позволяющее менять цвет формы. Выбор цвета осуществлять с помощью компонента radiogroup.

19. Создать оконное приложение, позволяющее для натурального числа n, введённого в поле edit, выполнить действие, которое можно выбрать с помощью компонента radiogroup.

20. Написать программу для преобразования введённой в поле редактирования строки. Вид преобразования
удалить первую запятую
добавить в конце строки точку
первый знак ; заменить на,
должен быть выбран с помощью компонента radiogroup.

2.6 Использование компонента StringGrid
Для работы с массивами удобно использовать компонент StringGrid (строковая таблица), значок которого находится на дополнительной (Additional) странице палитры компонентов.
В следующей таблице описаны некоторые свойства компонента StringGrid.
Свойство | Обозначение |
Количество колонок таблицы | ColCount |
Количество строк таблицы | RowCount |
Соответствующий таблице двумерный строковый массив (индексы нумерованы от 0) | Cells |
Количество зафиксированных колонок таблицы | FixedCols |
Количество зафиксированных строк таблицы | FixedRows |
Признак допустимости редактирования содержимого ячеек таблицы | Options. goEditing |
Ширина колонок таблицы | DefaultColWidth |
Высота строк таблицы | DefaultRowHeight |
Толщина линий таблицы | GridLineWidth |
Рассмотрим решение следующей задачи.
Пример 6. Найти сумму элементов целочисленной матрицы размера 4´4.
Окно приложения должно выглядеть следующим образом:
![]() |
В следующей таблице приведены значения основных свойств компонента StringGrid для проекта вычисления суммы элементов целочисленной матрицы размера 4´4.
Свойство | Значение |
ColCount | 4 |
RowCount | 4 |
FixedCols | 0 |
FixedRows | 0 |
Options. goEditing | True |
DefaultColWidth | 30 |
DefaultRowHeight | 25 |
GridLineWidth | 1 |
Маркируем командную кнопку Вычислить и создаём следующую процедуру обработки события OnClick:
procedure TForm1.Button1Click(Sender: TObject);
var i, j,s:integer;
begin
s:=0;
for i:=0 to stringgrid1.colcount-1 do
for j:=0 to stringgrid1.rowcount-1 do
s:=s + strtoint(stringgrid1.cells[i, j]);
label3.caption:=inttostr(s)
end;
Следует обратить внимание, что нумерация строк и столбцов начинается с 0, а в свойстве Cells[i, j] первый индекс обозначает номер столбца, а второй – номер строки.
Задачи
21. Заполнить квадратную целочисленную матрицу порядка n (n=6) следующим образом :

![]() |
22. Дана целочисленная матрица размера 4´4. Получить квадрат этой матрицы.
![]() |
![]() |
23. Дан двумерный целочисленный массив размера 4´4. Подсчитать сумму элементов, стоящих над главной диагональю. Для отображения массива использовать компонент StringGrid.
2.7 Создание меню.
В Delphi для создания главного меню, содержащего перечень допустимых операций приложения, имеется невизуальный компонент Main Menu. Главное меню является экземпляром класса TMainMenu. Основным свойством этого класса является свойство
property Items : TMenuItem; default;
Содержит элементы нулевого уровня главного меню приложения.
Чаще всего главное меню создаётся на этапе конструирования формы. Для этого необходимо сначала поместить компонент Main Menu на форму, а затем вызвать конструктор меню. Для вызова конструктора меню можно дважды щелкнуть левой кнопкой мыши по компоненту Main Menu.
Кроме главного меню, связанного с формой приложения, в Delphi имеется компонент Popup Menu, предназначенный для создания контекстного меню. Контекстное меню может быть создано для любого оконного элемента управления. Для вызова контекстного меню необходимо поместить курсор мыши на оконный элемент и нажать правую кнопку мыши. Для установления связи между оконным элементом и компонентом Popup Menu используется свойство Popup Menu, в котором следует указать имя соответствующего компонента-меню. Контекстное меню, как и главное, создаётся при помощи конструктора меню (Menu Designer).
Элементы как главного, так и контекстного меню являются объектами класса TMenuItem, который является непосредственным потомком класса TComponent. Элемент меню может представлять собой подменю, команду или разделительную линию.
Если элемент представляет собой подменю, имеющееся у него свойство Items должно содержать соответствующие пункты этого подменю. Если элемент является разделительной линией, то его свойство Caption должно содержать значение «-» (знак «минус»). Во всех остальных случаях элемент меню будет командой, т. е. с этим элементом меню будет связан обработчик события OnClick.
Рассмотрим основные свойства класса TmenuItem.
property Caption : string;
Содержит текст элемента меню. Если перед некоторым символом текста поместить символ &, то таким образом можно задать клавишу быстрого перехода (акселератор).
property Checked : Boolean;
Если свойство имеет значение true, то элемент меню помечается «галочкой».
property Enabled : Boolean;
Если свойство имеет значение true, то элемент меню реагирует на события от мыши и клавиатуры. В противном случае элемент не доступен и выделяется тусклым цветом. По умолчанию имеет значение true.
property Items[index : integer] : TMenuItem; default;
Свойство задаёт младшие элементы меню по отношению к текущему элементу. Число элементов определяется свойством Count. Нумерация начинается с нуля. Свойство доступно только для чтения.
property ShortCut : TShortCut;
Определяет комбинацию «горячих» клавиш, обеспечивающих быстрый выбор данного элемента меню.
В классе TMenuItem определено событие
property OnClick : TNotifyEvent:
Возникает при выборе элемента меню мышью или при нажатии на клавишу Enter, когда элемент меню является активным. Это же событие является и событием по умолчанию.
Контекстное меню является экземпляром класса TPopupMenu, которое так же, как и класс TMainMenu, является потомком класса Tmenu. Рассмотрим основные характеристики, которые вводятся в классе TPopupMenu.
property Alignment : TPopupAlignment;
Определяет расположение контекстного меню относительно курсора мыши:
paLeft – левый верхний угол меню находится у курсора;
paRight – правый верхний угол меню находится у курсора;
paCenter – середина верхней границы меню находится у курсора.
По умолчанию имеет значение paLeft.
property AutoPopup : Boolean;
Если свойство имеет значение true, контекстное меню появляется при нажатии правой клавиши мыши, если имеет значение false, меню не появляется (в этом случае следует использовать метод Popup). По умолчанию имеет значение true.
Метод Popup определяется следующим образом:
procedure Popup(x, y : integer); virtual;
Выводит на экран меню, при этом координаты его левого верхнего угла равны x и y.
В классе TPopupMenu определено событие OnPopup:
property OnPopup : TNotifyEvent;
Возникает при вызове контекстного меню при нажатии правой клавиши мыши, если свойство AutoPopup имеет значение true, либо при вызове метода Popup.
Рассмотрим пример создания главного меню.
Пример 7. Дана квадратная целочисленная матрица размера 4´4. Создать приложение с главным меню, позволяющим выбрать одну из трёх команд:
Максимум (нахождение максимума элементов матрицы)
Минимум (нахождение минимума элементов матрицы)
Сумма (нахождение суммы элементов матрицы)
Для ввода и отображения на форме элементов матрицы использовать компонент StringGrid.

Для решения задачи поместим на форму компонент StringGrid1 и установим ему значения свойств, указанные в примере 6. Поместим на форму компонент Label1, свойство Caption которого равно Ответ, и компонент Label2, в котором будем размещать вычисленное значение. Со страницы Standard поместим на форму компонент MainMenu. Выберем свойство Items компонента MainMenu1 и щёлкнем по кнопке с тремя точками. Появится окно конструктора меню. Введём названия пунктов меню (свойство Caption). Для определения реакции на выбор пунктов меню следует по очереди выбирать все пункты меню и щёлкать по ним мышкой. По умолчанию свойству Name пунктов меню присвоены соответственно имена N1, N2, N3.
Полный текст программы:
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
var i, j,s:integer;
begin
s:=0;
for i:=0 to stringgrid1.colcount-1 do
for j:=0 to stringgrid1.rowcount-1 do
s:=s + strtoint(stringgrid1.cells[i, j]);
label2.caption:=inttostr(s)
end;
procedure TForm1.N2Click(Sender: TObject);
var i, j,max:integer;
begin
max:=strtoint(stringgrid1.cells[0,0]);
for i:=0 to stringgrid1.colcount-1 do
for j:=0 to stringgrid1.rowcount-1 do
if strtoint(stringgrid1.cells[i, j])>max
then max:=strtoint(stringgrid1.cells[i, j]);
label2.Caption:=inttostr(max)
end;
procedure TForm1.N3Click(Sender: TObject);
var i, j,min:integer;
begin
min:=strtoint(stringgrid1.cells[0,0]);
for i:=0 to stringgrid1.colcount-1 do
for j:=0 to stringgrid1.rowcount-1 do
if strtoint(stringgrid1.cells[i, j])<min
then min:=strtoint(stringgrid1.cells[i, j]);
label2.Caption:=inttostr(min)
end;
end.
Задачи
24. Дана квадратная целочисленная матрица размера 4´4. Создать приложение с главным меню для выбора одной из трёх команд, позволяющих найти количество:
отрицательных элементов матрицы
положительных элементов матрицы
нулевых элементов матрицы
Для ввода и отображения на форме элементов матрицы использовать компонент StringGrid.
Окно работающего приложения:

25. Дана квадратная целочисленная матрица размера 4´4. Создать приложение с главным меню для выбора одной из трёх команд, позволяющих найти номер строки
с минимальной суммой элементов строки
с минимальным максимальным элементом строки
с минимальным первым элементом строки
Для ввода и отображения на форме элементов матрицы использовать компонент StringGrid.
Окно работающего приложения:

26*. Даны две квадратные целочисленные матрицы a и b размера 4´4. Создать приложение с главным меню для выбора одной из трёх команд, позволяющих найти
a + b
a – b
a * b
Для ввода и отображения на форме элементов матриц a и b, а также матрицы, получающейся в результате, использовать компоненты StringGrid1, StringGrid2 и StringGrid3.
Окно работающего приложения:



























