ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.03.2025
Просмотров: 299
Скачиваний: 2
procedure TForm1.Button2Click(Sender: TObject);
{Обрабатывает нажатие кнопки «Вычисление» - расчет суммы каждой строки матрицы и произведения всех элементов матрицы} Var i,j:Integer;{счетчики} p:real;{произведение элементов матрицы}
A:array of array of real;{исходная матрица} s:array of real;{массив сумм элементов строк}
begin
SetLength(a,n,m);{распределение памяти под массивы a}
SetLength(s,n); {и s }
for i:=1 to n do {в цикле считываем из ячеек компоненты} for j:=1 to m do {StringGrid1 значения элементов матрицы} if StringGrid1.Cells[j,i]='' then {если ячейка пустая}
a[i-1,j-1]:=0 {то элемент матрицы равен нулю} else
a[i-1,j-1]:=StrToFloat(StringGrid1.Cells[j,i]);
{закончен ввод матрицы, далее обработка} p:=1;
for i:=0 to n-1 do begin
s[i]:=0;
for j:=0 to m-1 do begin
p:=p*a[i,j];
s[i]:=s[i]+a[i,j] end;
end;
{закончена обработка, далее вывод}
Edit3.Text:=FloatToStr(p);{записываем в Edit3 произведение} for i:=0 to n-1 do {в цикле записываем в ячейки StringGrid2}
StringGrid2.Cells[0,i+1]:=FloatToStr(s[i]); {cуммы строк} end;
18
Лабораторная работа №7. Программирование открытия и сохранения файлов с использованием стандартных диалоговых окон
Цель работы: закрепление знаний и навыков программирования задач с файлами; освоение приемов использования стандартных диалоговых окон открытия и сохранения файлов
Продолжительность работы: 2 часа
1. ПОДГОТОВКА К РАБОТЕ
Перед началом выполнения работы студент должен:
1.Ознакомиться с принципами использования стандартных диалоговых окон открытия и сохранения файлов по пособию М.М. Марана [3], §§ 2.1, 2.2.1,
2.Продумать структуру файлов исходных данных и результатов (формы файлового ввода и вывода) для задачи [1] 2.2.2. N+1.
3.Подготовить в блокноте 2-3 файла исходных данных для тестирования программы.
2.ЗАДАНИЕ И РЕКОМЕНДАЦИИ ПО ЕГО ВЫПОЛНЕНИЮ
1.Откройте приложение задачи 2.2.2. N+1, полученное в результате выполнения лабораторной работы №5. Добавьте в пункт Файл главного меню приложения подпункты Ввод из файла и Вывод в файл.
2.Поставьте на форму приложения компоненты OpenDialog и SaveDialog, чтобы обеспечить возможность использования стандартных диалоговых окон открытия и сохранения файлов. Настройте объекты OpenDialog и SaveDialog
в Инспекторе объектов. В свойство Filter запишите два фильтра: для всех файлов и для текстовых файлов. Свойству InitialDir присвойте значение имени папки, в которой хранится проект приложения рассматриваемой задачи. В свойство DefaultExt компоненты SaveDialog запишите значение .txt. Правила работы со стандартными диалоговыми окнами изложены в [3], §§ 2.2.2
3.Запишите обработчики ввода из файла и сохранения в файл, используя пособие [3] и приведенный ниже пример; измените приведенные там коды в соответствии с индивидуальной задачей.
4.Отладьте полученное приложение, используя подготовленные файлы исходных данных. Зафиксируйте результаты в отчете и покажите их преподавателю.
19
ПРИМЕР ОБРАБОТЧИКОВ ПРИЛОЖЕНИЯ ИНДИВИДУАЛЬНОЙ ЗАДАЧИ
procedure TForm1.N2Click(Sender: TObject);
{обработчик пункта меню “ввод из файла”}
Var f:TextFile; s:string; {f-программное имя файла, s-физическое} i,j:integer; {счетчики строк и столбцов матрицы}
a: array of array of real;{динамический массив} begin
if OpenDialog1.Execute then{если подтверждено открытие файла в диалоговом окне}
begin
s:= OpenDialog1.FileName;{имя файла из диалогового окна} AssignFile(f,s);{связывание прогр. и физ. имен файла} Reset(f); {открытие файла для чтения}
Readln(f, n,m); {чтение из файла n и m, они описаны как глобальные переменные}
Edit1.Text:=IntToStr(n); {значения n и m } Edit2.Text:=IntToStr(m); {записываем в текстовые окна} StringGrid1.RowCount:=n+1;{задаем число строк} StringGrid1.ColCount:=m+1; {и столбцов StringGrid1} for i:=1 to n do {подписываем строки и столбцы}
StringGrid1.Cells[0,i]:=IntToStr(i); for j:=1 to m do
StringGrid1.Cells[j,0]:=IntToStr(j); SetLength(a,n,m);{распределяем память под матрицу} for i:=1 to n do
for j:=1 to m do begin
Read(f,a[i-1,j-1]); {чтение значения из файла в память}
StringGrid1.Cells[j,i]:=FloatToStr(a[i-1,j-1]);
{запись значения в StringGrid1}
end; CloseFile(f);{закрытие файла} end
end;
20
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