Argo
...плюс к этому все элементы на упомянутой диагонали равны единице.
Тогда надо добавить пару строчек. Исправленная версия:
Код:
if (MSize>1) then begin
for i:=0 to MSize-2 do begin
for j:=i+1 to MSize-1 do begin
if (A[i, j] <> 0) then ok:=false;
end;
if (A[i, i] <> 1) then ok:=false;
end;
end;
if (MSize>0) then begin
if (A[MSize-1, MSize-1] <> 1) then ok:=false;
end else ok:=false;
ЗЫ: Матрица размером менее 1x1 не считается нижней треугольной
3*. составить процедуру для транспонирования матрицы.
Легко :
Код:
procedure Transpose(MS: integer; var MTX: Matrix);
var
i, j: integer;
s: integer;
begin
if (MS>1) then begin
for i:=0 to MS-2 do begin
for j:=i+1 to MS-1 do begin
s:=MTX[i, j];
MTX[i, j]:=MTX[j, i];
MTX[j, i]:=s;
end;
end;
end;
end;
Вызывать как во второй проге.
Да, во второй проге я немного ошибся (в циклах - пропускалась первая строка и делалось лишнее сравнение с первым элементом строки). Читать так:
Код:
procedure FindMaxInRowAndSwapItWithDiagonal(MS: integer; var MTX: Matrix);
var
i, j: integer;
m, k: integer;
s: integer;
begin
if (MS>1) then begin
for i:=0 to MS-1 do begin
m:=abs(MTX[i, 0]);
k:=0;
for j:=1 to MS-1 do begin
if (m < abs(MTX[i, j])) then begin
m:=abs(MTX[i, j]);
k:=j;
end;
end;
s:=MTX[i, k];
MTX[i, k]:=MTX[i, i];
MTX[i, i]:=s;
end;
end;
end;
Еще вопрос: что вам известно про оператор выбора case?
Оператор как оператор
Можно вместо него и лесенку IF-ов нагородить, но с CASE-ом удобнее и нагляднее.
Пример:
Код:
case ch of
'A': RestoreCmos;
'B': WriteCmos;
'C': Help;
end;
- в зависимости от значения переменной ch выполнится та или иная процедура.
Чем отличаются и когда использовать подпрограмму функцию, а когда процедуру?
Первая возвращает результат, вторая нет.
Вывести на экран значения элементов матрицы - процедура, т.к. ничего не возвращает.
Найти максимальный элемент - функция, возвращает число - значение элемента.
Ввод или транспонирование матрицы - особый случай.
Тут используют процедуры (можно и функции) с параметрами-переменными (в отличии от обычных параметров-значений), описанными с помощью var. В этом случае процедура может изменить их (и тем самым передать что-либо). Полезно, если надо вернуть либо большой по объему массив данных, либо сразу несколько значений (например значение и индексы максимального элемента).