for i:=1 to n do begin
eee:=i;
for j:=1 to k do begin
qd[i,j]:=eee mod 2;
eee:=eee div 2;
end;
end;
генерация матрицы из двоичных чисел, и ее сортировка; Pascal.
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
потом ее нужно привести вот к такому виду
1 0 0 0 1 1 0 1 1 0 1 0 1 0 1
0 1 0 0 1 0 1 1 0 1 1 0 0 1 1
0 0 1 0 0 1 1 1 0 0 0 1 1 1 1
0 0 0 1 0 0 0 0 0 1 1 1 1 1 1
т.е. все столбцы, в которых одна единица - перенести влево
я пробовал генерировать вот так:
Код:
но почему-то не выходит
помогите, пожалуйста
Код:
Program qwe;
Var qd : Array[0..15,0..3] of Boolean;
n,k,i,j : Integer;
Begin
n:=15;
k:=3;
for i:=0 to n do begin
for j:=0 to k do begin
qd[i,j]:=Boolean(i shr j and 1);
Write(Char(Integer(qd[i,j])+$30)+' ');
end;
WriteLn;
end;
End.
Var qd : Array[0..15,0..3] of Boolean;
n,k,i,j : Integer;
Begin
n:=15;
k:=3;
for i:=0 to n do begin
for j:=0 to k do begin
qd[i,j]:=Boolean(i shr j and 1);
Write(Char(Integer(qd[i,j])+$30)+' ');
end;
WriteLn;
end;
End.
Больше кода своего покажи.
о, генерация - как раз то что нужно, спасибо большое)
Код:
Program qwe;
const
n=15;{столбцы}
k=3;{строки}
type
line = Array [0..k] of Boolean;
arr = Array [0..n] of line;
Var
qd : arr;
i,j : Integer;
procedure print_array(ma:arr);
var p,f: Integer;
begin
for p:=0 to k do begin
for f:=0 to n do begin
Write(Char(Integer(ma[f])+$30)+' ');
end;
WriteLn;
end;
end;
function count(column: line): Integer;
var c,Res: Integer;
begin
Res:=0;
for c:=0 to k do begin
Res:=Res+integer(column[c]);
end;
count:=Res;
end;
procedure sort(Var ma:arr);
Var tmp:line;
p,f:integer;
zz:boolean;
begin
zz:=true;
while zz do
begin
zz:=false;
for f:=0 to n-1 do begin
if count(ma[f])>count(ma[f+1]) then begin
tmp:=ma[f];
ma[f]:=ma[f+1];
ma[f+1]:=tmp;
zz:=true;
end;
end;
end;
end;
procedure move_left(Var ma:arr);
Var tmp:line;
p,f:integer;
begin
for p:=1 to n do begin
if count(ma)=1 then begin
for f:=0 to p do begin
if ((count(ma[f])<>1) and (count(ma)=1)) then begin
tmp:=ma[f];
ma[f]:=ma;
ma:=tmp;
end;
end;
end;
end;
end;
Begin
for i:=0 to n do begin
for j:=0 to k do begin
qd[i,j]:=Boolean(i shr j and 1);
end;
end;
WriteLn('Source array:');
print_array(qd);
sort(qd);{<= Сортирует по количеству единиц. Чтоб перенести влево только с 1 единицей, а остальные не трогать заменить на move_left(qd);}
WriteLn('Sorted array:');
print_array(qd);
End.
const
n=15;{столбцы}
k=3;{строки}
type
line = Array [0..k] of Boolean;
arr = Array [0..n] of line;
Var
qd : arr;
i,j : Integer;
procedure print_array(ma:arr);
var p,f: Integer;
begin
for p:=0 to k do begin
for f:=0 to n do begin
Write(Char(Integer(ma[f])+$30)+' ');
end;
WriteLn;
end;
end;
function count(column: line): Integer;
var c,Res: Integer;
begin
Res:=0;
for c:=0 to k do begin
Res:=Res+integer(column[c]);
end;
count:=Res;
end;
procedure sort(Var ma:arr);
Var tmp:line;
p,f:integer;
zz:boolean;
begin
zz:=true;
while zz do
begin
zz:=false;
for f:=0 to n-1 do begin
if count(ma[f])>count(ma[f+1]) then begin
tmp:=ma[f];
ma[f]:=ma[f+1];
ma[f+1]:=tmp;
zz:=true;
end;
end;
end;
end;
procedure move_left(Var ma:arr);
Var tmp:line;
p,f:integer;
begin
for p:=1 to n do begin
if count(ma)=1 then begin
for f:=0 to p do begin
if ((count(ma[f])<>1) and (count(ma)=1)) then begin
tmp:=ma[f];
ma[f]:=ma;
ma:=tmp;
end;
end;
end;
end;
end;
Begin
for i:=0 to n do begin
for j:=0 to k do begin
qd[i,j]:=Boolean(i shr j and 1);
end;
end;
WriteLn('Source array:');
print_array(qd);
sort(qd);{<= Сортирует по количеству единиц. Чтоб перенести влево только с 1 единицей, а остальные не трогать заменить на move_left(qd);}
WriteLn('Sorted array:');
print_array(qd);
End.
И еще раз огромное спасибо! теперь я смогу написать курсовую!