Вывести значения массива по спирали

Задача

Вывести на экран значения массива по спирали. Будем понимать под этим следующее. Если массив состоит из 100 элементов, то выводить по 10 элементов в каждой строке, при этом каждая вторая строка должна выводиться "задом наперед": сначала последние элементы строки, а затем первые.

Решение

 

Алгоритм решения задачи: 

  1. Если номер строки нечетный (1-я, 3-я и т. д.), то выводить числа от первого в строке до 10-го в строке;
  2. иначе, наоборот, выводить от 10-го в строке до 1-го.

Как, зная строку, определить индекс первого числа этой строки по массиву? Надо умножить номер строки на 10 (если каждая строка содержит 10 элементов) и вычесть 9. Например, вторая строка начинается с 11-го элемента: 2 * 10 - 9 = 11.

Программа на языке Паскаль: 

 

var
	arr: array[1..100] of integer;
	i, j: byte;
begin
	randomize;
	for i:=1 to 100 do arr[i] := random(50);
	// обычный вывод
	for i:=1 to 100 do begin
		write(arr[i]:4);
		if i mod 10 = 0 then writeln;
	end;
	writeln;
	// вывод по спирали
	for i:=1 to 10 do 
		if i mod 2 <> 0 then begin
			for j:=i*10-9 to i*10 do write(arr[j]:4);
			writeln;
		end
		else begin
			for j:=i*10 downto i*10-9 do write(arr[j]:4);
			writeln;
		end;			
end.

 

Пример выполнения программы:

  10  26   2  30  45   5  22  15  12   9
   3  10  44  27   8   9  19  14   0  25
  41  34  38   3   5  39  13  26  45  35
   9   0  32  17  39  36  41  26  46   2
  42  26  32   3  49  44  32  33  41  36
  47  44   2  41  31   5  18   7  41   2
  34  45  28   0  21   9  41  28  19  21
  19   4  32  18  25  17  16   1   9  41
  49  28  49  46  35  21  15  12  38  16
  29   0  20  49  18  21  21  26   6  21
 
  10  26   2  30  45   5  22  15  12   9
  25   0  14  19   9   8  27  44  10   3
  41  34  38   3   5  39  13  26  45  35
   2  46  26  41  36  39  17  32   0   9
  42  26  32   3  49  44  32  33  41  36
   2  41   7  18   5  31  41   2  44  47
  34  45  28   0  21   9  41  28  19  21
  41   9   1  16  17  25  18  32   4  19
  49  28  49  46  35  21  15  12  38  16
  21   6  26  21  21  18  49  20   0  29

 

Тема

Одномерные массивы

Уровень

Комбинированные задачи