IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Заполнение целочисленного двумерного квадратного массива
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Кто сможет решить данную задачу?

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

Всем заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 56
Пол: Мужской

Репутация: -  2  +


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


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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Цитата(Игорь @ 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?
Заранее спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


А чем тебе div не нравится? Если хочеш перед циклом считай это значение в отдельную переменную,но делать новый кривой драндулет,когда есть нормальный ...овчинка выделки не стоит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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;


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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;

Конечно, это не более чем курьез.. ))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 4:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name