Из выделенных подзадач формирование и вывод матрицы представляет достаточно простой фрагмент, реализующийся вложенным счетным циклом, внутри которого организован разветвляющийся процесс. Нахождение максимального элемента рассмотрено в задаче 2 в данной лабораторной работе. Для удаления строк будем использовать следующий прием. Пусть переменная изменяется в цикле и обеспечивает адресацию следующей анализируемой строки. Тогда переменную увеличиваем на единицу, если обнаружена еще одна строка, которую необходимо оставить в матрице. При этом оставляемая строка переписывается на место, указанное данной переменной. После завершения цикла просмотра матрицы переменная содержит число строк, которые необходимо оставить в матрице. Строки, содержащиеся в остальной части матрицы, на экран не выводятся.
2. Блок-схема:
3. Программа:
Program Matr_Usl;
Var
A:array[1..8,1..6] of real;
Max:real;
i,j,k:Integer;
Begin {Формируем матрицу A и выводим ее значения на экран}
|
|
WriteLn(' Матрица A');
For i:=1 to 8 do begin For j:=1 to 6 do begin
if i<j Then A[i,j]:=i+j Else if i=j then A[i,j]:=1 Else A[i,j]:=i/j;
Write(A[i,j]:6:2,' ');
end;
WriteLn;
end;
k:=0; {количество остающихся строк}
For i:=1 to 8 do {цикл по строкам}
Begin
Max:=A[i,1]; {исходное значение максимума строки}
For j:=1 to 6 do {цикл поиска максимума строки}
if A[i,j]>Max then Max:=A[i,j];
WriteLn('Строка ',i:1,' Max=',Max:5:2);
if Max<> 7.00 then {если максимум строки не равен 7,00}
begin {то оставляем строку}
k:=k+1; {увеличиваем количество остающихся строк}
for J:=1 to 6 do A[k,j]:=A[i,j]; {копируем строку на место}
end;
end;
WriteLn; {Пустая строка}
if k<>0 THEN {если в матрице осталась хоть одна строка}
Begin
WriteLn('Сформированная матрица после удаления строк');
For i:=1 to k do begin
For j:=1 to 6 do
Write(A[i,j]:6:2,' ');
WriteLn;
end;
End
ELSE