Читайте также:
|
|
Практическая работа № 8
«Модульное программирование. Подпрограммы»
Задача. Процедура преобразования массива
Написать программу, преобразующую вещественную матрицу размером 6х6. Требуется заменить нулями все элементы, превышающие заданную величину, а затем упорядочить строки матрицы по возрастанию значений минимальных элементов этих строк.
Исходными данными для этой задачи являются вещественная матрица и вещественное число, результатом – преобразованная матрица. Оформим преобразование матрицы в виде процедуры. Это позволит нам использовать её для любой матрицы такого же типа.
Ход выполнения
Открываем систему Lazarus. Далее Файл – Создать… - Приложение. Данное приложение необходимо сохранить в свою папку. Название проекта – ProMatr2, название модуля – UnitMatr2.
Переименуйте созданную вами форму. Для этого перейдите в Свойства – Caption – введите «Упорядоченная матрица 6х6».
На открывшейся форме добавляем надпись типа TLabel (Панель Standard). В свойствах кнопки меняем её текст Свойства – Caption – «Матрица». Измените размер шрифта – Font – Size – 12.
После добавляем таблицу TStringGrid. для вывода элементов матрицы: Панель Additional – TstringGrid. Измените её имя (Name – StringGrid6x6). После применяем к таблице следующие свойства:
FixedCols | FixedRows | Height | Left | RowCount | ScroollBars | Top | Width | ColCount | DefaultColWidth |
ssNone |
Также добавьте дополнительное свойство для возможности редактировать таблицу: Свойства – Options – goEditing – значение True
Далее вновь добавляем надпись типа TLabel. В свойствах кнопки меняем её текст Свойства – Caption – «Введите верхнюю границу матрицы Х:». Измените размер шрифта – Font – Size – 10.
Рядом с надписью располагаем поле TEdit для ввода значения x: Панель Standard – TEdit. Далее применяем Свойства – Name – EditX; Text – очистить.
Добавляем кнопку: Панель Standard – TButton. Далее применяем Свойства – Caption – «Упорядочить»; Измените имякнопки – Name – ButtonRes.
После того, как были расположены все основные элементы на форму, приступаем к написанию кода.
Первоначально необходимо задать Глобальные переменные (они располагаются выше слова implementation):
const
n=5;
type
matr = array [0..n,0..n] of real;
var
Form1: TForm1;
a: matr; { матрица }
x: real; { верхняя граница элементов матрицы }
i,j: integer; { текущие индексы }
Далее необходимо описать саму процедуру программы, которая как раз будет выполнять все вычисления:
procedure sorting(var m: matr; x: real);
var
min: array of real;
nmin: integer;
buf: real;
i,j: integer;
n: integer;
begin
n:=length(m)-1;
setLength(min, n+1);
//граница X
for i:= 0 to n do
for j:= 0 to n do
if m[i,j] > x then m[i,j]:= 0;
//Поиск минимальных значений в строках
for i:= 0 to n do begin
min[i]:= m[i,0];
for j:= 0 to n do
if m[i,j] < min[i] then min[i]:= m[i,j];
end;
for i:=0 to n-1 do begin
nmin:=i; //строка с минимальным элементом
for j:= i+1 to n do
if min[j] < min[nmin] then nmin:= j;
buf:= min[i];
min[i]:= min[nmin];
min[nmin]:= buf;
for j:=0 to n do begin
buf:= m[i,j];
m[i,j]:= m[nmin,j];
m[nmin,j]:= buf;
end;
end;
finalize(min);
end;
Далее чтобы отобразить на форме результаты работы программы (то есть отобразить упорядоченную матрицу), создадим ещё одну процедуру. Для этого щелкните левой клавишей мыши по кнопке «Упорядочить» 2 раза. Откроется окно кода, и автоматически создастся процедура: procedure TForm1.ButtonResClick(Sender: TObject);
procedure TForm1.ButtonResClick(Sender: TObject);
begin
x:=StrToFloatDef(EditX.Text, 0);
for i:= 0 to n do begin
for j:= 0 to n do
a[i,j]:= StrToFloatDef(StringGrid6x6.Cells[j,i], 0);
end;
sorting(a,x);
for i:= 0 to n do begin
for j:= 0 to n do
StringGrid6x6.Cells[i,j]:=FloatToStr(a[j,i]);
end;
end;
После написания кода, запустите Компиляцию программы .
В результате у вас получится следующая форма вашей программы (Рис.1):
Рис. 1 – Готовая форма программы
Дата добавления: 2015-07-26; просмотров: 40 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
События | | | МАГИСТЕРСКАЯ ДИССЕРТАЦИЯ |