Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2013, 09:55   #1
Илья Дикушин
 
Регистрация: 27.07.2013
Сообщений: 6
По умолчанию Вывод чисел

"Напишите программу, которая выводит на экран квадратную числовую таблицу размера n*n, имеющую следующий вид при n = 5:"
1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
3 4 5 1 2
2 3 4 5 1
Прошу, помогите разобраться с алгоритмом выведения. Тут вроде все просто: задаем переменную n она же количество строк и столбцов, а за одно переменные i и j. Переменная i контролирует цикл, выводящий строки, а пер. j контролирует цикл, выводящий столбцы:
...
for i:=1 to n do begin
for j:=1 to n do begin
...
end;
end;
...
Но вот в чем загвоздочка: я никак не могу понять, каким образом выводятся цифры до 1 в прямом порядке (т.е. как в последней строке 2345 и 1 !) Подскажите алгоритм, пожалуйста.
Илья Дикушин вне форума Ответить с цитированием
Старый 27.07.2013, 11:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На вскидку:
Код:
var
  i,j,n,k:integer;
begin
  n:=1;
  for i:=1 to 5 do begin
    for j:=1 to 5 do begin
      k:=(n mod 6);
      if k=0 then k:=6;
      write(k:5);
      inc(n);
    end;
    writeln;
  end;
  readln;
end;
Не проверял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2013, 12:45   #3
Илья Дикушин
 
Регистрация: 27.07.2013
Сообщений: 6
По умолчанию

И вправду, хитро использовать mod (а я дубасил по 5 пять переменных...). Но опять не получается правильный результат, хотя программка резво компилируется. В силу особенностей задания я несколько изменил программу, а именно, во второй строке должна выводиться цифра 5, там алгоритм как бы перетягивает единицу в конец строки, а цифры, начиная с конца идут с ней, как показано на веху. Но опять не получилось. Вот моя программка:
Код:
uses crt;
var i,j,n,k,h: integer;
begin
clrscr;
write ('Bring in height and width: '); {h - задает количество строк и столбцов,
                                                  как по заданию}
read (h);
n:=1;
clrscr;
for i:=1 to h do 
begin
for j:=1 to h do
k:=(n mod (h+1));
 if j:=1 to h do begin
 k=0 then k:=h;
write (k:5);
inc (n);
end;
writeln;
end;
readln;
end.
Но получается такой результат:
1 2 3 4 5 {Сначала-то все хорошо}
5 1 2 3 4
5 5 1 2 3 {А потом понеслось!))}
4 5 5 1 2
3 4 5 5 1
Как теперь можно исправить алгоритм? Я голову ломаю уже 3-й день, а задачка кажется ехидно-постой.(((

Последний раз редактировалось Илья Дикушин; 27.07.2013 в 12:53.
Илья Дикушин вне форума Ответить с цитированием
Старый 27.07.2013, 14:28   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Это циклический сдвиг массива. Здесь, ИМХО, даже квадратную матрицу использовать не надо. Алгоритм решения задачи такой:
1. У нас есть исходный одномерный массив. Мы его выводим на экран, как первую строку как бы матрицы.

2. Сдвигаем циклически массив вперёд на одну позицию и выводим полученную строку на экран, как очередную строку нашей матрицы.
Шаг два повторяем до тех пор, пока у нас не будет выведено n строк нашей матрицы на экран.

Циклический сдвиг элементов одномерного массива смотрите здесь: http://www.programmersforum.ru/showp...6&postcount=29

Последний раз редактировалось Вадим Мошев; 27.07.2013 в 14:32.
Вадим Мошев вне форума Ответить с цитированием
Старый 27.07.2013, 14:34   #5
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

необходимо вывести значения "с лёту"? или подойдет решение с двумерным массивом?)
unbanned вне форума Ответить с цитированием
Старый 27.07.2013, 15:04   #6
Илья Дикушин
 
Регистрация: 27.07.2013
Сообщений: 6
По умолчанию

Я думаю, что с лету. А на счет циклического сдвига я думал, но нет, не подошло.
Илья Дикушин вне форума Ответить с цитированием
Старый 27.07.2013, 15:32   #7
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

жаль, с квадратной матрицей можно было бы наподобие такого сделать

Код:
const
  n = 5;

var
  i, j: integer;
  val, c: integer;
  a: array[1..n, 1..n] of integer;

begin
  for i := 1 to n do
  begin
    val := 1;
    for j := i to n do
    begin
      a[i, j] := val;
      inc(val);
    end;    
  end;
  
  c := n;
  for i := 2 to n do
  begin
    val := c;
    dec(c);
    for j := 1 to i - 1 do
    begin
      a[i, j] := val;
      inc(val);
    end;    
  end;
  
  for i := 1 to n do 
  begin
    for j := 1 to n do
    begin
      write(a[i, j]:5);
    end;  
    writeln;
  end;  
  
end.
ну или как нить так, без матрицы и с кучей переменных

Код:
const
  n = 5;

var
  i, j, k: integer;
  c, val: integer;

begin

  c := n;
  for i := 1 to n do 
  begin

    if i >= 2 then begin
      val := c;
      dec(c);
      for k := 1 to i - 1 do 
      begin
        write(val:5);
        inc(val); 
      end;    
    end;  
  
    val := 1;
    for j := i to n do
    begin
      write(val:5);
      inc(val);  
    end;    

    writeln;
  end;
  
end.

Последний раз редактировалось unbanned; 27.07.2013 в 19:33.
unbanned вне форума Ответить с цитированием
Старый 28.07.2013, 11:48   #8
Илья Дикушин
 
Регистрация: 27.07.2013
Сообщений: 6
По умолчанию

Первый алгоритм с матрицей остроумен. Мне понравился 3-й цикл изменения переменных в матрице. Играем с переменной val. И первый код оказался универсальным, если задавать переменную n, а не иметь её в константе. Посибки)) А то всю голову изломал. То мы код взламываем, то код взламывает нас...
Илья Дикушин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод чисел vovken1997 Паскаль, Turbo Pascal, PascalABC.NET 9 16.11.2012 13:55
Вывод чисел Dima-War Общие вопросы C/C++ 2 27.03.2012 20:53
Вывод трехзначных чисел Dark Raven Помощь студентам 1 18.03.2012 11:44
Вывод чисел Matt_Tuck Фриланс 11 15.03.2010 23:03