Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_ИниСП_Лаб_№1.docx
Скачиваний:
1
Добавлен:
18.08.2019
Размер:
988.71 Кб
Скачать

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, приобрел ряд новых навыков, полезных для разработки консольных приложений. Также я освоил один из эффективных способов представления разреженных матриц – массив списков.

18