ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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