
LabsDelphi1
.pdf
procedure TForm1.N3Click(Sender: TObject);
{обработчик пункта меню “вывод в файл”}
Var f:TextFile; s:string; {f-программное имя файла, s-физическое} i,j:integer; {счетчики строк и столбцов матрицы}
begin
if SaveDialog1.Execute then {если подтверждено сохранение файла в диалоговом окне}
begin
s:=SaveDialog1.FileName;{имя файла из диалогового окна} AssignFile(f,s); {связывание прогр. и физ. имен файла} Rewrite(f); {открытие файла для записи}
writeln(f,'n=', Edit1.Text, ' m=', Edit2.Text);{вывод в файл } {числа строк и столбцов матрицы}
writeln(f); {пропуск строки в файле} writeln(f,' Матрица');
for i:=1 to n do begin
for j:=1 to m do
write(f,StringGrid1.Cells[j,i], ' ');{вывод элементов матрицы} { в файл, значения разделяются пробелом}
writeln(f){переход к следующей строке в файле} end;
CloseFile(f);
{закрытие файла, обязательно для сохранения файла} end
end;
Ниже приведена форма файла исходных данных, форму выходного файла напишите сами.
<n> <m>
<a[0, 0]> <a[0, 1]> … <a[0, m-1]>
…
<a[n-1, 0]> <a[n-1, 1]> …<a[n-1, m-1]>
21
Лабораторная работа №8. Разработка оконных приложений, использующих автономные модули
Цель работы: закрепление знаний и навыков создания и использования подпрограмм и модулей; освоение приемов использования автономных модулей при разработке оконных приложений; закрепление навыков разработки оконных приложений
Продолжительность работы: 4 часа
1. ПОДГОТОВКА К РАБОТЕ
Перед началом выполнения работы студент должен:
1.Ознакомиться с принципами создания и использования автономных модулей по пособию М.М. Марана [3], §3.
2.Разработать проект отчета по разработке оконного приложения для задачи [1] 3.4.N+1. Проект отчета должен содержать:
1)номер и условие задачи;
2)состав данных разрабатываемой подпрограммы;
3)блок-схему алгоритма подпрограммы;
4)код автономного модуля, содержащего подпрограмму;
5)эскиз основной формы приложения для тестирования подпрограммы (обеспечивающего ввод исходных данных, вызов подпрограммы и вывод результатов);
6)программный код модуля и основных обработчиков на Паскале;
7)тесты.
3.Набрать программный код автономного модуля и основных обработчиков приложения в блокноте или в среде Delphi.
При разработке алгоритмов и программ необходимо учесть следующее:
1)длина массива должна задаваться считыванием значения из текстового окна (компоненты Edit); команда на задания длины – нажатие кнопки (которую можно подписать фразой «Ввод длины массива»);
2)для отображения массивов на форме следует использовать компоненту StringGrid; число строк (столбцов) StringGrid должно настраи-
ваться в соответствии с введенным значением длины массива;
22
3)приложение не должно иметь ограничений на размеры массивов; для хранения массивов в оперативной памяти рекомендуется использовать динамические массивы.
2.ЗАДАНИЕ И РЕКОМЕНДАЦИИ ПО ЕГО ВЫПОЛНЕНИЮ
1.Создайте новое приложение. На форму приложения (Form1) перенесите управляющие элементы в соответствие с подготовленным эскизом формы. Сохраните приложение.
2.В рамках существующего приложения с помощью команды главного меню File/New/Unit создайте автономный модуль. По умолчанию ему будет дано имя Unit2. Заполните разделы модуля Interface и Implementation, используя подготовленный заранее код. Сохраните модуль в папке приложения.
3.Подключите модуль Unit2 к модулю основной формы (Unit1), добавив в предложение uses модуля Unit1 имя Unit2 (или воспользуйтесь командой
Project/Add to Project главного меню Delphi).
4.Используя домашние заготовки, создайте необходимые обработчики для основной формы Form1. На данном этапе приложение должно иметь не менее двух обработчиков: первый – для ввода длины массива, второй – для запуска основного вычислительного алгоритма. Первый обработчик строится по тем же правилам, что и обработчик ввода размеров матрицы в лабораторной работе №6. Второй обработчик должен содержать считывание исходных данных из элементов формы, вызов подпрограммы (содержащейся в модуле Unit2) для обработки данных и запись результатов в элементы формы.
5.Отладьте полученное приложение, используя подготовленные тесты.
6.Сделайте главное меню приложения. Оно должно иметь следующие пункты:
Файл (с подпунктами Ввод из файла, Вывод в файл и Выход), Обработка (с подпунктами Ввод длины массива и Вычисление) и Помощь (с подпунктами Автор и Условие).
7.Создайте обработчики ввода из файла и вывода в файл, используя знания и навыки, полученные в лабораторной работе №7.
8.К командам пункта Обработка подключите обработчики соответствующих кнопок. Проверьте работоспособность этих команд.
9.Напишите обработчик для команды Выход пункта Файл главного меню. Этот обработчик должен содержать один оператор Close.
23
10. Создайте и отладьте обработчики для команд пункта Помощь главного меню. Они должны вызывать информационные окна, содержащие, соответст-
венно, сведения об авторе приложения и условие задачи. Как работать с информационными окнами, изложено в §2.2.1 [3].
11.Дополните обработчик кнопки Ввод длины массива проверкой на положительность значения длины. При вводе неположительного числа должно появляться окно сообщения с соответствующей фразой. Программирование окна сообщения описано в §2.2.2 [3].
12.Дополните обработчик кнопки Ввод длины массива проверкой, является ли введенное значение числом. Если содержимое текстового окна Edit1 не может быть интерпретировано как число, то должно появляться окно сообщения с соответствующей фразой. При выполнении этого пункта рекомендуется использовать процедуру Val (см. [2] или помощь Delphi, а также приведенный ниже пример).
13.Сделайте 2-3 контекстных меню и привяжите их к разным элементам управления формы. Проверьте, работают ли эти меню.
14.Зафиксируйте результаты в отчете и покажите их преподавателю.
ПРИМЕР АВТОНОМНОГО МОДУЛЯ
unit Unit2;
{Модуль содержит одну функцию вычисления суммы элементов одномерного массива длины n}
interface {интерфейсная часть модуля} function sum (a: array of real; n: integer):real; implementation
function sum; {исполняемая часть модуля}
Var i: integer; s:real; begin
s:=0;
for i:=Low(a) to High(a) do s:=s+a[i];
sum:=s; end; end.
24

НЕКОТОРЫЕ ОБРАБОТЧИКИ ПРИЛОЖЕНИЯ, ВЫЧИСЛЯЮЩЕГО СУММУ
ЭЛЕМЕНТОВ ОДНОМЕРНОГО МАССИВА
Форма приложения приведена на рис.6.
Рис. 6. Форма приложения вычисления суммы
procedure TForm1.Button1Click(Sender: TObject);
{Обработчик нажатия кнопки ввода длины массива}
Var j:integer; begin
val(Edit1.Text,n,j); if j<>0 then
ShowMessage('Введите число') else
if n<=0 then
ShowMessage(' Введите положительное число ')
else begin
StringGrid1.ColCount:=n;
{В Инспекторе объектов установлено: StringGrid1.FixedCols=0} for j:=0 to n-1 do {Подписываем номера элементов массива}
StringGrid1.cells[j,0]:=IntToStr(j+1); end;
end;
25

procedure TForm1.Button2Click(Sender: TObject);
{Обработчик нажатия кнопки «Вычислить сумму»}
Var a: array of real; j: integer; begin
SetLength(a,n);{распределение памяти под массив, n – глобальная переменная}
for j:= 0 to n-1 do {ввод массива} if StringGrid1.Cells[j,1]='' then a[j]:=0
else
a[j]:= StrToFloat(StringGrid1.Cells[j,1]);
{далее вычисление суммы и вывод ее в текстовое окно:}
Edit2.Text:=FloatToStr(Sum(a,n)); end;
Лабораторная работа №9. Разработка оконных приложений, осуществляющих графический вывод
Цель работы: освоение приемов вывода графических изображений в среде
Delphi.
Продолжительность работы: 4 часа
1. ПОДГОТОВКА К РАБОТЕ Перед началом выполнения работы студент должен:
1.Ознакомиться с графическим вывода среде Delphi по пособию [3], гл. 8.
2.Разработать проект отчета по решению задач [1] 7.4.N+1, 7.1. N+1. По задаче
7.4.N+1 (рисунки с
0 |
150 |
300 |
||
|
|
|
|
|
|
|
|
|
|
100
200
300
Рис. 7. Пример задания
графическими примитивами) проект отчета должен содержать:
1)номер и условие задачи с рисунком, на котором проставлены отметки на координатных осях в пикселях (см. рис. 7);
2)программный код для вывода заданного изображения; код должен использовать методы холста (свой-
ства Canvas) – см. ниже приведенный пример.
26
По задаче 7.1.N+1 (построение графиков функций) проект отчета по каждому
пункту задания (А, Б) должен содержать:
1)формулу для исследуемой функции;
2)рассматриваемый интервал значений аргумента x;
3)характерные точки функции, подлежащие определению по графику;
4)самостоятельно полученную оценку интервала значений функции;
5)код обработчика, формирующего массивы координат точек для пост-
роения графика с помощью компоненты Chart (диаграмма) – см. ниже приведенный пример; 6) код обработчика, выводящего график по точкам – см. [3], §8.2;
рекомендуется написать универсальную подпрограмму, выводящую график произвольной функции, и применить эту подпрограмму в пунктах А и Б; в список параметров подпрограммы обязательно должны входить параметр-функция (определяющая, график какой функции выводится) и
минимальные и максимальные значения аргумента и функции.
7)тесты.
3.Набрать программный код основных обработчиков приложения в блокноте или в среде Delphi.
2. ЗАДАНИЕ И РЕКОМЕНДАЦИИ ПО ЕГО ВЫПОЛНЕНИЮ
Вывод рисунка, состоящего из графических примитивов (задача 7.4.N+1)
1. Создайте приложение. В обработчик события OnPaint (перерисовка формы)
вставьте заранее подготовленный код графического вывода примитивов на форму. Установите размеры клиентской области формы в соответствии с раз-
мером рисунка (с помощью Инспектора объектов или программно); для рис. 7
ClientHeight:=400; ClientWidth:=400. Сохраните приложение.
2. Запустите и отладьте приложение. Результат работы приложения для рассматриваемого примера приведен на рисунке 8.
27

|
|
3. Закройте это приложе- |
|||
|
|
ние и создайте новое. На |
|||
|
|
его форму |
с |
панели |
|
|
|
System перенесите ком- |
|||
|
|
поненту PaintBox (см. |
|||
|
|
рис. 9). Ответьте на во- |
|||
|
|
прос: зачем нужна эта |
|||
|
|
компонента? |
|
|
|
|
|
4. Установите |
размеры |
||
|
|
PaintBox в соответствии |
|||
|
|
с заданным рисунком. В |
|||
|
|
обработчик |
|
события |
|
|
|
OnPaint формы вставьте |
|||
|
|
заранее подготовленный |
|||
|
|
код графического вывода |
|||
|
|
примитивов |
в |
компо- |
|
|
|
ненту PaintBox (а не на |
|||
Рис. 8. Результат графического вывода |
форму, как в предыдущем |
||||
|
|
|
|
||
|
|
приложении). |
Сохраните |
||
|
|
приложение. |
|
Отладьте |
|
|
|
его. |
|
|
|
|
PaintBox1 5. Добавьте |
на |
форму |
||
|
|
кнопку |
|
(компоненту |
|
|
|
Button) и измените ее за- |
|||
|
|
головок на значение «До- |
|||
|
|
бавить фигуру». В ее об- |
|||
|
|
работчике |
запишите опе- |
||
Рис. 9. Компонента PantBox |
|
ратор, рисующий в рамке |
|||
|
PaintBox |
произвольную |
|||
|
|
дополнительную фигуру. Сохраните и отладьте приложение. Сверните окно работающего приложения, а затем восстановите его. Сохранилось ли при этом в окне приложения изображение дополнительной фигуры? Почему?
6. Отразите результаты в отчете и покажите его преподавателю. 28

Вывод графиков функций (задача 7.1.N+1)
1.Создайте новое приложение. Установите размеры клиентской области формы в соответствии с предполагаемым размером графика. Перенесите на форму компоненту Chart. Сохраните приложение и периодически повторяйте сохранение.
2.В контекстном меню компоненты Chart выберите пункт Edit Chart, что приведет к открытию окна настройки свойств компоненты (см. рис. 10).
Рис. 10. Окно настройки диаграммы
3. В этом окне выберите вкладку Chart, а на ней – вкладку Series. Для добавления графика в поле диаграммы на этой вкладке нажмите кнопку Add. В открывшемся окне TeeChartGalery (галерея типов диаграмм) на вкладке Standard выберите тип Line, снимите флажок 3D и нажмите кнопку OK. При этом в окно вкладки Series будет добавлен график с именем Series1; обратите внимание, что в файле Unit1.pas в описание типа TForm1 добавилась строка объявления нового свойства Series1: TLineSeries. При желании, используя кнопку Title, можно изменить имя графика (серии). Кроме того, таким способом в одно поле диаграммы можно добавить несколько графиков.
29
4.Ознакомьтесь с другими вкладками окна настройки диаграммы, и выберите свойства графика по своему вкусу. Рекомендуется стиль легенды (вкладка Legend, окно Legend Style) установить в значение Series Name, а на вкладке верхнего уровня Series выбрать удобные характеристики линии графика (толщину, стиль, цвет).
5.В обработчик события создания формы OnCreate вставьте заранее подготовленный программный код формирования в компонентах Series массивов координат точек для создания графиков для пункта А задания 7.1.N+1.
Отладьте приложение.
6.Проанализируйте полученный график. Проверьте, совпадает ли диапазон значений функции с его предварительной оценкой. Визуально определите характерные точки функции.
7.Повторите п.п.5-6 для исследования функции пункта Б задания 7.1.N+1.
8.Разработайте новое приложение для рисования графиков задания 7.1.N+1 по точкам (см. [3], §8.2). Проанализируйте графики и сравните их с графиками, полученными с помощью компоненты Chart.
9.Отразите результаты в отчете и покажите его преподавателю.
ПРИМЕР ОБРАБОТЧИКА ВЫВОДА ГРАФИЧЕСКИХ ПРИМИТИВОВ
procedure TForm1.FormPaint(Sender: TObject);
{обработчик события перерисовки формы, выводит изображение в клиентскую область формы}
Var i:integer;{счетчик циклов для рисования эллипсов и прямых} begin {далее установка параметров изображения}
color:=clWhite;{цвет фона клиентской области формы -белый}
Canvas.Brush.Color:=clLtGray;{цвет заливки – светло-серый}
Canvas.Pen.Width:= 1;{толщина линий полагается равной 1}
Canvas.Pen.Color:=clBlack;{цвет линий - черный} Canvas.Pen.Style:=psSolid;{линии - сплошные} Canvas.Brush.Style:=bsBDiagonal;{штриховка - диагональная} for i:=1 to 3 do {в цикле рисуется три эллипса}
begin
30