
09.12.2009, 15:47
|
|
Познающий
Регистрация: 03.12.2008
Сообщений: 56
С нами:
9176827
Репутация:
29
|
|
Сообщение от Sin3v
Решите плиз) (Паскаль)
в каждом столбце и каждой строк матрицы самодержица строго по одному не левому элементу. Перестановкой строк добиться расположение всех нулей по главной диагонали. В программе должна присутствовать проверка чтоб в строке был строго один ноль, в противном случае цикл не выполняться.
Код:
PROGRAM PMatrix;
uses
Crt;
const
N = 3;
Var
Matrix: Array [1..N,1..N] of byte;
Indexes: set of byte;
counter: byte;
function CheckLine(LineIndex: byte): boolean;
var
i, j: byte;
begin
counter := 0;
CheckLine := false;
for i := 1 to N do
if (Matrix[LineIndex,i] = 0) then
begin
inc(counter);
if counter > 1 then
begin
CheckLine := false;
exit;
end;
if (i in Indexes) then
begin
CheckLine := false;
exit;
end;
end;
CheckLine := true;
end;
procedure GenerateMatrix;
var
tmpindex: byte;
i, j: byte;
begin
Indexes := [];
randomize;
for i := 1 to N do
begin
repeat
tmpindex := random(N)+1;
for j := 1 to N do
if j = tmpindex then
Matrix[i,j] := 0
else
Matrix[i,j] := random(99)+1;
until (CheckLine(i));
Indexes := Indexes + [tmpindex];
end;
end;
procedure ChangeLines(index1, index2: byte);
var
tmp: byte;
i: byte;
begin
for i := 1 to N do
begin
tmp := Matrix[index1,i];
Matrix[index1,i] := Matrix[index2,i];
Matrix[index2,i] := tmp;
end;
end;
procedure SortMatrix;
var
i, j: byte;
begin
for i := 1 to N do
begin
if not(CheckLine(i)) then
exit;
for j := 1 to N do
if (Matrix[i,j] = 0) then
ChangeLines(i,j);
end;
end;
procedure ShowMatrix;
var
i, j: byte;
begin
for i := 1 to N do
begin
for j := 1 to N do
if (Matrix[i,j] < 10) then
write(' ', Matrix[i,j], ' ')
else
write(Matrix[i,j], ' ');
writeln
end;
end;
var
i, j: byte;
choice: char;
begin
clrscr;
write('Would you like to generate the matrix automatically? (y/n)');
readln(choice);
if (choice = 'y') then
GenerateMatrix
else
for i := 1 to N do
for j := 1 to N do
begin
write('Matrix[',i,',',j,'] = ');
readln(Matrix[i,j]);
if (Matrix[i,j] = 0) then
Indexes := Indexes + [j];
end;
writeln;
ShowMatrix;
writeln;
SortMatrix;
ShowMatrix;
readln;
end.
Небольшой комментарий: - размер матрицы задается с помощью константы N. Поскольку есть возможность ручного ввода матрицы, то значение по умолчанию у N небольшое.
- GenerateMatrix - заполняет матрицу правильным образом
- ChangeLines - меняет 2 строки местами
- SortMatrix - упорядочивает строки согласно заданию
- ShowMatrix - выводит матрицу на экран
- CheckLine - проверяет, нет ли в какой-либо строке или столбце более 1 нуля.
Последний раз редактировалось StealthMaster; 09.12.2009 в 19:06..
|
|
|