Помощь - Поиск - Пользователи - Календарь
Полная версия: заполнение матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Insomnia
7 6 5 4 3 2 1
6 5 4 3 2 1 2
5 4 3 2 1 2 3
4 3 2 1 2 3 4
3 2 1 2 3 4 5
2 1 2 3 4 5 6
1 2 3 4 5 6 7
как заполнить матрицу размером n*n таким образом?
---
подскажите , от чего мне надо отталкиваться? побочную диагональ я могу заполнить еденицами, а как мне симметрично относительно их, заполнить последующими числами?!
Freedom
Тут у нас идёт уже Математика. Смотрим если бы у нас была матрица такого типа

j=1 j=2 j=3 j=4 j=5 j=6 j=7

i=1 1 2 3 4 5 6 7
i=2 2 1 2 3 4 5 6
i=3 3 2 1 2 3 4 5
i=4 4 3 2 1 2 3 4
i=5 5 4 3 2 1 2 3
i=6 6 5 4 3 2 1 2
i=7 7 6 5 4 3 2 1

тогда элемент a[i,j] будет иметь значение |i-j|+1

а эту матрицу нам остаётся отразить слева направо и тогда получится что

j=1 j=2 j=3 j=4 j=5 j=6 j=7

i=1 7 6 5 4 3 2 1
i=2 6 5 4 3 2 1 2
i=3 5 4 3 2 1 2 3
i=4 4 3 2 1 2 3 4
i=5 3 2 1 2 3 4 5
i=6 2 1 2 3 4 5 6
i=7 1 2 3 4 5 6 7

элемент a[i,n-j+1] будет иметь значение |i-j|+1

 for i:=1 to n do
for j:=1 to n do
a[i,n-j+1]:=abs(i-j)+1;
Insomnia
Код

const    n=5;  
var    a: array[1..n,1..n] of integer;    
          i,j:integer;  
begin    
writeln('vvedite massiv');    
randomize;  
  for i:=1 to n do      
   for j:=1 to n do      
  a[i,j]:=random(6);
for i:=1 to n do  
  for j:=1 to n do    
    write(a[i,j]:3);    
    writeln;  
for i:=1 to n do  
  for j:=1 to n do    
   a[i,n-j+1]:=abs(i-j)+1;      
for i:=1 to n do  
  for j:=1 to n do    
Write(a[i,j]:3);    
ReadLn
end.

вроде вот так..
если считая по главной диагонали, то
Код

const    n=5;  
var    
  a: array[1..n,1..n] of integer;  
   i,j:integer;  
begin    
writeln('vvedite massiv');    
randomize;    
for i:=1 to n do      
  for j:=1 to n do      
     a[i,j]:=random(6);  
  for i:=1 to n do    
   for j:=1 to n do      
     write(a[i,j]:3);      
     writeln;  
for i:=1 to n do    
  for j:=1 to n do    
   a[i,j]:=abs(i-j)+1;      
for i:=1 to n do    
  for j:=1 to n do    
   Write(a[i,j]:3);  
ReadLn  
end.
Freedom
 
for i:=1 to n do
for j:=1 to n do
Write(a[i,j]:3);



Write(a[i,j]:3); - тут не правильно, у вас массив типа integer, а не real поэтому write(a[i,j]);
и ещё лучше выводить
таким образом
 For i:=1 to n do begin
for j:=1 to n do Write(a[i,j],' ');
writeln;
end;
Insomnia
хм, верно.
спасибо вам большое за помощь yes2.gif
volvo
Цитата
Write(a[i,j]:3); - тут не правильно
С чего бы? У Паскаля изменился синтаксис? Или правильнее вталкивать всегда один пробел после выведенного значения, независимо от того, сколько цифр напечатано, так что-ли?

Ну, тогда попробуй заполнить матрицу 10*10 (вместо 5*5), и увидишь, что твой способ корёжит вывод данных, а write(a[i,j]:3) - нет...

Или теперь специально введенные для удобства в язык средства принято "не уметь использовать", а пользоваться нужно сомнительными самопальными заменителями?

P.S. Как же мне нравится, когда приходит человек, едва-едва знакомый с языком, и начинает налево и направо рассуждать о правильности или неправильности тех или иных конструкций...
Freedom
Цитата(volvo @ 27.12.2010 20:34) *

P.S. Как же мне нравится, когда приходит человек, едва-едва знакомый с языком, и начинает налево и направо рассуждать о правильности или неправильности тех или иных конструкций...


Извиняюсь, согласен язык я знаю едва едва, но как говорится на ошибках учатся. Но вот мне интересно зачем автор темы в своих программах заполняет матрицу случайными числами?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.