![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
1 курс не могу решить задачу для допуска на экзамен помогите плз!)
задача. Уплотнить матрицу A(nxm)влево и вверх.Для выявления нулевых строк и столбцов используйте подпрограмму. в задаче скобками обозначен мои попытки написать подпрограмму но не получается( в общем нужна подпрограмма которая находит нулевую строку или столб и удаляет ее . помогите!) Код:
program Project148;
{$APPTYPE CONSOLE}
{$R+}
uses
SysUtils,
inout;
type
TMatrix=array of array of integer;
function TRX(A:TMatrix;i,j:integer):integer;
var
b:boolean;
k,rowcount:integer;
begin
{k:=0;
for i:=0 to high(A) do
begin
b:=true;
for j := 0 to high(A[i]) do begin
if a[i,j]<>0 then b:=false;
if not b then
begin
inc(k);
for j := 0 to high(A[i]) do
a[k,j]:=a[i,j];
end;
end;
ROWcount:=k;
writeln(' результат: ');
for i:=0 to high(A) do
begin
for j := 0 to high(A[i]) do
writeln( a[i,j]:3);
writeln;
end;
end;
end;}
var
A: TMatrix;
RowCount, ColCount:integer;
i,j:integer;
key:Char;
Fok:boolean;
begin
SetConsoleTitleCyr ('Л.р.');
SetConsoleCP_1251;
repeat
Randomize;
{$I-}
repeat
write ('введите число строк матрицы ');
readln(RowCount);
FOK:=(ioresult=0) and (RowCount>0);
if not(FOK) then
writeln('ОШИБКА');
until FOK ;
repeat
write ('введите число столбцов матрицы ');
readln(ColCount);
FOK:=(ioresult=0) and (ColCount>0);
if not(FOK) then
writeln('ОШИБКА');
until FOK ;
{$I+}
SetLength (A,RowCount,ColCount);
writeln ('матрица A:');
for i := 0 to high(A) do
begin
for j := 0 to high(A[i]) do
begin
A[i,j]:=-1+random(3);
write (A[i,j]:3 );
end;
writeln;
end;
{$I-}
begin
TRX(A,i,j);
end;
Writeln (' для продолжения работы программы нажмите Y');
Readln (key);
until upcase(key) <>'Y' ;
end.Последний раз редактировалось Admin, 09.06.2011 в 16:23. |
|
#2
|
|||
|
|||
|
кто поможет кину немного денег на телефон)
|
|
#3
|
|||
|
|||
|
Пиши в асю. Сделаю
|
|
#4
|
|||
|
|||
|
А чего тут делать?
Код:
function IsRowEmpty(A : Array [1..M,1..N] Of Integer; R : Integer) : Boolean;
var
I : Integer;
begin
Result := True;
For I := 1 To N Do
Begin
Result := A[I,R] = 0;
If Not Result Then Break;
End;
end;
function IsColEmpty(A : Array [1..M,1..N] Of Integer; C : Integer) : Boolean;
var
I : Integer;
begin
Result := True;
For I := 1 To M Do
Begin
Result := A[C,I] = 0;
If Not Result Then Break;
End;
end; |
|
#5
|
|||
|
|||
|
Код:
type TMatrix = array of array of real; procedure SwapCols(var M: TMatrix; i, j: Integer); var k: integer; tmp: real; begin for k := 0 to High(M[i]) do begin tmp := M[i][k]; M[i][k] := M[j][k]; M[j][k] := tmp; end; end; procedure SwapRows(var M: TMatrix; i, j: Integer); var k: integer; tmp: real; begin for k := 0 to High(M) do begin tmp := M[k][i]; M[k][i] := M[k][j]; M[k][j] := tmp; end; end; function IsZeroCol(M: TMatrix; n: Integer): Boolean; var i: integer; begin for i := 0 to High(M[n]) do if M[n][i] <> 0 then begin Result := false; Exit; end; Result := true; end; function IsZeroRow(M: TMatrix; n: Integer): Boolean; var i: integer; begin for i := 0 to High(M) do if M[i][n] <> 0 then begin Result := false; Exit; end; Result := true; end; procedure Compact(var M: TMatrix); var r, c, w, h: integer; i, j: integer; begin r := 0; for i := 0 to High(M) do if IsZeroRow(M, i) = True then r := r + 1; c := 0; for i := 0 to High(M[0]) do if IsZeroCol(M, i) = True then c := c + 1; h := r; w := c; repeat for i := 0 to High(M) do if IsZeroRow(M, i) = True then for j := i to High(M) - 1 do SwapRows(M, j, j + 1); r := r - 1; until r <= 0; repeat for i := 0 to High(M[0]) do if IsZeroCol(M, i) = True then for j := i to High(M) - 1 do SwapCols(M, j, j + 1); c := c - 1; until c <= 0; SetLength(M, Length(M[0]) - w, Length(M) - h); end; |
|
#6
|
||||
|
||||
|
Ещё вариант:
Код:
Function TRX(M: TMatrix; var x,y: Integer): Boolean;//х,у-размер вых. М
Var
tempM: TMatrix;
P: Boolean;
i, j: Integer;
begin
SetLength(tempM, Length(M), Length(M[0]));
x:= -1; y:= -1;
For i:= 0 To Length(M) - 1 Do
begin
P:= False;
For j:= 0 To Length(M[0]) - 1 Do if M[i,j] <> 0 Then
begin
Inc(x);
P:= True;
Break;
end;
if P Then For j:= 0 To Length(M[0]) - 1 Do tempM[x,j]:= M[i,j];
end;
For j:= 0 To Length(tempM[0]) - 1 Do
begin
P:= False;
For i:= 0 To Length(tempM) - 1 Do if tempM[i,j] <> 0 Then
begin
Inc(y);
P:= True;
Break;
end;
if P Then For i:= 0 To Length(M) - 1 Do M[i,y]:= tempM[i,j];
end;
SetLength(M, x, y);
end; |