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

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

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

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


Новичок
*

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

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


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

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

Всем заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Игорь
сообщение 29.01.2012 19:59
Сообщение #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 
 К началу страницы 
+ Ответить 
alex9910
сообщение 29.01.2012 21:04
Сообщение #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 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 29.01.2012 23:31
Сообщение #4


Профи
****

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

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


А чем тебе div не нравится? Если хочеш перед циклом считай это значение в отдельную переменную,но делать новый кривой драндулет,когда есть нормальный ...овчинка выделки не стоит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 30.01.2012 3:47
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 30.01.2012 4:27
Сообщение #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 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 17.07.2024 20:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"