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

Ваш аккаунт

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

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

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

Pascal.Массивы.Получить Квадратную Матрицу

31K
13 января 2008 года
Sebastian Va1mond
9 / / 13.01.2008
Даны действительные числа a1, a2,..., an. Получить квадратную матрицу порядка n:
a1 a2 a3 an
a2 a3 an a1
a3 an a1 a2
an a1 a2 a3

Пожалуйста выложите исходный код
31K
14 января 2008 года
Sebastian Va1mond
9 / / 13.01.2008
Может ктонибудь алгоритм предложит йа непредставляю просто как ето решать :(
5.3K
15 января 2008 года
Somebody
185 / / 24.12.2006
Код:
uses crt;
var a:array [1..20] of integer;
    b:array [1..20,1..20] of integer;
    i,j,n:integer;
begin
clrscr;
write('n: '); readln(n);
for i:=1 to n do read(a); readln;
for i:=1 to n do begin
    for j:=1 to n do begin
        b[i,j]:=a[(i+j-2) mod n+1];
        write(b[i,j]);
        end;
    writeln;
    end;
readln;
end.
14K
15 января 2008 года
Progr\.
72 / / 15.10.2007
Вот вариант куда более экзотичнее:
Код:
type Mass = array[1..50,1..50] of Integer;

var i, j, n, temp: Integer;
    DMass: Mass;

begin
Randomize;
Write('Vvedite N (stolbcov i strok) = ');
Readln(n);

  for i := 1 to n do
  begin
  // рандом генерация, раскомментируй, что числа были рандомные
 //   DMass[1,i] := Random(50);
//   Write(DMass[1,i], '  ');
// закомментируй следующую строку, если раскоментил предыдущие.
Read(DMass[1,i]);
  end;

 Writeln;
 Writeln;

 // основной код, заполняем (динамическое программирование)
temp := 0;
 for i := 2 to n do
 begin
   if i = 2 then begin for temp := 1 to n do Write(Dmass[1,temp], '  '); Writeln; end;
  for j := 1 to n do
  begin
      if  ((j+1)mod n) = 0 then temp := n
      else temp := ((j+1)mod n);
  DMass[i,j] := DMass[i-1, temp];
    Write(DMass[i,j], '  ');
  end;
 Writeln;
 end;


end.
5.3K
16 января 2008 года
Somebody
185 / / 24.12.2006
Ход мыслей понятен, но есть много чего сказать.
1) Отступы сделаны рандомно (=ужасно).
2)
Цитата:
 
Код:
for i := 2 to n do
 begin
   if i = 2 then...


Что всё это делает в цикле? Это надо бы вытащить из цикла.
3)

Цитата:
 
Код:
if  ((j+1)mod n) = 0 then temp := n
      else temp := ((j+1)mod n);


В общем это более-менее нормально, просто хочу предложить ещё вариант:
temp:=(j+n) mod n+1
4) Ну и надо бы ещё ReadLn или даже 2 штуки, если ждать enter'а.

14K
16 января 2008 года
Progr\.
72 / / 15.10.2007
Цитата:
1) Отступы сделаны рандомно (=ужасно).


Но это ведь не критично, правда? Главное в отступах что? - то, чтоб при просмотре было логично, да чтоб при множестве begin-end'ов было видно какой от какого.

Цитата:
Что всё это делает в цикле? Это надо бы вытащить из цикла.


Знаю, просто когда прогонял проверкой (Трассировкой) нужно было посмотреть сразу результат, вот и пихнул.

Цитата:
В общем это более-менее нормально, просто хочу предложить ещё вариант:
temp:=(j+n) mod n+1


У каждого свой вариант, так что не отрицаю ;)

Цитата:
4) Ну и надо бы ещё ReadLn или даже 2 штуки, если ждать enter'а.


Писал на PascalABC - не было под рукой Delphi, вот и не поставил, они там не нужны.

5.3K
17 января 2008 года
Somebody
185 / / 24.12.2006
OK
Цитата:
Но это ведь не критично, правда? Главное в отступах что? - то, чтоб при просмотре было логично, да чтоб при множестве begin-end'ов было видно какой от какого.


Лично меня такие отступы запутывают, так как то, что между begin'ом и end'ом на разном уровне.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог