Помощь - Поиск - Пользователи - Календарь
Полная версия: Заполнение целочисленного двумерного квадратного массива
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
alex9910
Кто сможет решить данную задачу?

Организовать заполнение целочисленного двумерного квадратного массива D случайными числами, используя функцию Random. Переставить элементы главной и побочной диагоналей. Вывести на экран исходную и результирующую матрицы.

Всем заранее спасибо!
Игорь
Вот так можно, но лучше проверь. Правда, я не понял что именно нужно переставлять: эл-ты в каждой диагонали или эл-ты диагоналей между собой. Здесь перестановка в каждой диагонали.


program mass;

const N = 6;

var

D:array [1..N, 1..N] of integer;
i, j:integer;
swap:integer; {Переменная для временного хранения эл-ов массива}

begin

randomize;

writeln;

{Заполнение массива и вывод его исходного вида}

for i:=1 to N do
begin
for j:=1 to N do
begin
D[i,j]:=random(100);
write(D[i,j]:3, ' ');
end;
writeln;
end;

{Пререстановка}

for i:=1 to N div 2 do
begin
swap:=D[i,i];
D[i,i]:=D[N-i+1, N-i+1];
D[N-i+1, N-i+1]:=swap;
end;

for i:=1 to N div 2 do
begin
swap:=D[i, N-i+1];
D[i, N-i+1]:=D[N-i+1, i];
D[N-i+1, i]:=swap;
end;

{Вывод результата}

writeln('---------------------');

for i:=1 to N do
begin
for j:=1 to N do
write(D[i,j]:3, ' ');
writeln;
end;

readln;

end.

alex9910
Цитата(Игорь @ 29.01.2012 20:59) *

Вот так можно, но лучше проверь. Правда, я не понял что именно нужно переставлять: эл-ты в каждой диагонали или эл-ты диагоналей между собой. Здесь перестановка в каждой диагонали.


program mass;

const N = 6;

var

D:array [1..N, 1..N] of integer;
i, j:integer;
swap:integer; {Переменная для временного хранения эл-ов массива}

begin

randomize;

writeln;

{Заполнение массива и вывод его исходного вида}

for i:=1 to N do
begin
for j:=1 to N do
begin
D[i,j]:=random(100);
write(D[i,j]:3, ' ');
end;
writeln;
end;

{Пререстановка}

for i:=1 to N div 2 do
begin
swap:=D[i,i];
D[i,i]:=D[N-i+1, N-i+1];
D[N-i+1, N-i+1]:=swap;
end;

for i:=1 to N div 2 do
begin
swap:=D[i, N-i+1];
D[i, N-i+1]:=D[N-i+1, i];
D[N-i+1, i]:=swap;
end;

{Вывод результата}

writeln('---------------------');

for i:=1 to N do
begin
for j:=1 to N do
write(D[i,j]:3, ' ');
writeln;
end;

readln;

end.




а как можно обойтись без div?
Заранее спасибо.
Krjuger
А чем тебе div не нравится? Если хочеш перед циклом считай это значение в отдельную переменную,но делать новый кривой драндулет,когда есть нормальный ...овчинка выделки не стоит.
Lapp
Цитата(Krjuger @ 30.01.2012 0:31) *
А чем тебе div не нравится?

Согласен с автором темы (или с его препом)) - div тут совершенно не при деле. Просто Игорь неправильно понял условие (он сам заметил, кстати, что сомневается, так что это не претензия)). Хотя, я совершенно не понимаю, что тут можно не понять - явно же сказано переставить элементы двух диагоналей.. Если бы речь шла о перестановке внутри каждой, нужно было бы уточнить, как именно - почему обязательно в обратном порядке? а может, циклически? или еще как-то?..
Так что цикл нужен только один и без всякого div:
  {Пререстановка}

for i:=1 to N do begin
swap:= D[i,i];
D[i,i]:= D[i, N-i+1];
D[i, N-i+1]:= swap;
end;
Lapp
Цитата(alex9910 @ 29.01.2012 22:04) *
а как можно обойтись без div?
Заранее спасибо.

Забавно все же устроены мозги человеческие.. Уж если запало что-то - выковыривать бесполезно, надо сделать.. ))
Вот способ перестановки элементов в каждой из двух диагоналей спереду назад за один проход без div, причем в одном цикле smile.gif
  {Пререстановка}

m:= N+1;
for i:=1 to N do begin
swap:= D[i,i];
D[i,i]:= D[i,m-i];
D[i,m-i]:= D[m-i,m-i];
D[m-i,m-i]:= D[m-i,i];
D[m-i,i]:= swap
end;

Конечно, это не более чем курьез.. ))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.