Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

генерация матрицы из двоичных чисел, и ее сортировка; Pascal.

68K
06 апреля 2011 года
chake
5 / / 05.04.2011
нужно сгенерировать вот такую матрицу:
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

т.е. все столбцы, в которых одна единица - перенести влево
я пробовал генерировать вот так:
 
Код:
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;

но почему-то не выходит
помогите, пожалуйста
277
06 апреля 2011 года
arrjj
1.7K / / 26.01.2011
Вот рабочая генерация:
Код:
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.

Больше кода своего покажи.
68K
06 апреля 2011 года
chake
5 / / 05.04.2011
о, генерация - как раз то что нужно, спасибо большое)
277
06 апреля 2011 года
arrjj
1.7K / / 26.01.2011
Натевам:
Код:
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.
68K
06 апреля 2011 года
chake
5 / / 05.04.2011
И еще раз огромное спасибо! теперь я смогу написать курсовую!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог