Var I, j: integer;
begin
Mas1 := TMatrix.Create(n);
Mas2 := TMatrix.Create(n);
MasRez := TMatrix.Create(n);
writeln(#13#10'_____________________________________________');
writeln('Cуммирование двух матриц');
readln;
ReadConsole(Mas1);
readln;
ReadConsole(Mas2);
//----------------------------------------------------------------------
//Алгоритм суммирования
//----------------------------------------------------------------------
for i := 1 to n do
for j := 1 to n do
MasRez.Massiv[i,j] := Mas1.Massiv[i,j] + Mas2.Massiv[i,j];
//----------------------------------------------------------------------
writeln(#13#10'______________________________________________');
writeln('Сумма введенных матриц: '#13#10);
WriteConsole(MasRez);
MasRez.Free;
Mas2.Free;
Mas1.Free;
writeln(#13#10'----------------------------------------------');
write('Для возращения в меню нажмите любую кнопку!');
ReadKey;
end;
procedure TLab.Product;
Var I, j, k: integer;
temp: extended;
begin
Mas1 := TMatrix.Create(n);
Mas2 := TMatrix.Create(n);
MasRez := TMatrix.Create(n);
writeln(#13#10'_____________________________________________');
writeln('Произведение двух матриц');
readln;
ReadConsole(Mas1);
readln;
ReadConsole(Mas2);
//---------------------------------------------------------------------- //Алгоритм перемножения
//----------------------------------------------------------------------
for i := 1 to n do
for j := 1 to n do
begin
temp := 0;
for k := 1 to n do
temp := temp + (Mas1.Massiv[i,k] * Mas2.Massiv[k,j]);
MasRez.Massiv[i,j] := temp;
end;
//----------------------------------------------------------------------
writeln(#13#10'_____________________________________________');
writeln('Произведение введенных матриц: '#13#10);
WriteConsole(MasRez);
MasRez.Free;
Mas2.Free;
Mas1.Free;
writeln(#13#10'----------------------------------------------');
write('Для возращения в меню нажмите любую кнопку!');
ReadKey;
end;
procedure TLab.ReadConsole(var Mas: TMatrix);
var i, j: integer;
a: string;
x0, y0, ym: byte;
el: extended;
bl: boolean;
begin
ym := WhereY;
writeln(#13#10'______________________________________________');
writeln('Заполните массив. Любой ошибочный ввод будет преобразован в нуль!'#13#10);
//---------------------------------------------------------------------- //Алгоритм заполнения разреженной матрицами значениями, введеннми в консоль //----------------------------------------------------------------------
for i := 1 to n do
begin
for j := 1 to n do
begin
write('[',i,',',j,'] ');
x0 := WhereX;
y0 := WhereY;
readln(a);
try
el := StrtoFloat(a);
except
on EConvertError do el := 0;
end;
if el <> 0 then
Mas.Massiv[i,j] := el;
GoBack(x0, y0, a);
write(' ');
end;
write(#13#10);
end;
//---------------------------------------------------------------------- //Редактирование введенной матрицы и вывод окончательного варианта в консоль
//----------------------------------------------------------------------
bl := False;
while not(bl) do
bl := Redact(Mas);
for i := WhereY downto ym do
begin
GotoXY(1,i);
ClrEol;
end;
writeln(#13#10'___________________________________________');
writeln('Окончательный вариант введенной матрицы:'#13#10);
WriteConsole(Mas);
end;
procedure TLab.WriteConsole(var Mas: TMatrix);
var i, j: integer;
begin
for i := 1 to n do
begin
for j := 1 to n do
begin
write('[',i,',',j,'] ');
write(FloattoStr(Mas.Massiv[i,j]),' ');
end;
write(#13#10);
end;
end;
procedure TLab.WriteN(n0: integer);
begin
n := n0;
end;
function TLab.Redact(var Mas: TMatrix): boolean;
var bl: boolean;
ch : char;
i, j: integer;
el: extended;
begin
writeln(#13#10'____________________________________________');
writeln('Желаете ли изменить введенную матрицу?');
writeln('Для отказа нажмите на любую кнопку. Для продолжения нажмите на <<Y>>.');
ch := ReadKey;
if (ch = 'Y') or (ch = 'y') then
begin
bl := False;
while not(bl) do
begin
write('Введите номер строки изменяемого элемента: ');
try
read(i);
if (i < 1) or (i > n) then Abort;
except
on EInOutError do
begin
writeln('----------------------------------');
writeln('Введен недопустимый адрес элемента! Нажмите любую кнопку для повтора!');
writeln('---------------------------------');
ReadKey;
continue;
end;
on EAbort do
begin
writeln('---------------------------------');
writeln('Введен недопустимый адрес элемента! Нажмите любую кнопку для повтора!');
writeln('---------------------------------');
ReadKey;
continue;
end;
end;
bl := True;
end;
bl := False;
while not(bl) do
begin
write('Введите номер столбца изменяемого элемента: ');
try
read(j);
if (j < 1) or (j > n) then Abort;
except
on EInOutError do
begin
writeln('---------------------------------------');
writeln('Введен недопустимый адрес элемента! Нажмите любую кнопку для повтора!');
writeln('-----------------------------------------');
ReadKey;
continue;
end;
on EAbort do
begin
writeln('---------------------------------------');
writeln('Введен недопустимый адрес элемента! Нажмите любую кнопку для повтора!');
writeln('---------------------------------------');
ReadKey;
continue;
end;
end;
bl := True;
end;
bl := False;
while not(bl) do
begin
write('Введите значение изменяемого элемента: ');
try
read(el);
except
on EInOutError do
begin
writeln('-----------------------------------------');
writeln('Введено недопустимое значение элемента! Нажмите любую кнопку для повтора!');
writeln('---------------------------------------');
ReadKey;
continue;
end;
end;
bl := True;
end;
if el <> 0 then
Mas.ChangeEl(i,j,el);
result := False;
end
else
result := True;
end;
end.
Вывод:
В процессе выполнения лабораторной работы я ознакомился с основными концепциями ООП в среде программирования Delphi, приобрел ряд новых навыков, полезных для разработки консольных приложений. Также я освоил один из эффективных способов представления разреженных матриц – массив списков.