Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 4
1

Повернуть массив на 90 градусов

14.12.2012, 14:05. Показов 2307. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно повернуть массив на 90 градусов,но только нужно повернуть его так чтобы то что внутри массива осталось как прежде вот пример :
старый массив
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

новый массив
13 9 5 1
14 6 7 2
15 10 11 3
16 12 8 4

вот код программы проблема в том что массив переворачивается полностью

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
uses crt;
const nmax=50;
type matr=array[1..nmax,1..nmax] of integer;
procedure Pov90(var a:matr;n:byte);
var i,p,k:byte;
    x:integer;
begin
p := n div 2;
for i:=1 to p do
for k:=i to n-i do
  begin
    x:=a[i,k];
    a[i,k]:=a[n-k+1,i];
    a[n-k+1,i]:=a[n-i+1,n-k+1];
    a[n-i+1,n-k+1]:=a[k,n-i+1];
    a[k,n-i+1]:=x;
  end;
end;
 
var a:matr;
    xn,xk:integer;
    n,i,k:byte;
begin
clrscr;
randomize;
repeat
write('Ðàçìåð ìàòðèöû äî ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
writeln('Ââåäèòå íèæíèé è âåðõíèé ïðåäåëû äèàïàçîíà ÷èñåë:');
readln(xn,xk);
until xn<xk;
writeln('Èñõîäíàÿ ìàòðèöà:');
for i:=1 to n do
  begin
    for k:=1 to n do
      begin
       a[i,k]:=random(xk-xn+1)+xn;
       write(a[i,k]:5);
      end;
    writeln;
  end;
writeln;
Pov90(a,n);
writeln('Ïîâîðîò íà 90 ãðàäóñîâ ïî ÷àñîâîé ñòðåëêå:');
for i:=1 to n do
  begin
    for k:=1 to n do
    write(a[i,k]:5);
    writeln;
  end;
readln
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2012, 14:05
Ответы с готовыми решениями:

Повернуть массив вправо на 90 градусов
Задание: 1.С помощью подпрограммы сформировать массив Ann из целых чисел. С заданными верхним и...

Повернуть элементы матрицы на 90 градусов
При помощи случайных чисел определить элементы квадратной матрицы размерности n × n ....

Повернуть элементы матрицы на 90 градусов
И если не сложно, вот ещё: При помощи случайных чисел определить элементы квадратной матрицы...

Повернуть матрицу на 90 градусов
В двумерный массив размером NxN ввести произвольные числа из диапазона от -4 до 10 (включая...

3
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.12.2012, 17:35 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Если нужен поворот внешнего периметра, то измени процедуру так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure Pov90(var a:matr;n:byte);
var i,k:byte;
    x:integer;
begin
for k:=1 to n-1 do
  begin
    x:=a[1,k];
    a[1,k]:=a[n-k+1,1];
    a[n-k+1,1]:=a[n,n-k+1];
    a[n,n-k+1]:=a[k,n];
    a[k,n]:=x;
  end;
end;
2
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 4
14.12.2012, 17:56  [ТС] 3
Теперь то что внутри остается как и должно быть, но внешний периметр поворачивается не понять как
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.12.2012, 18:02 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Ну если не понимаешь ничего, то создай такую матрицу.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const nmax=50;
type matr=array[1..nmax,1..nmax] of integer;
procedure Pov90(var a:matr;n:byte);
var i,k:byte;
    x:integer;
begin
for k:=1 to n-1 do
  begin
    x:=a[1,k];
    a[1,k]:=a[n-k+1,1];
    a[n-k+1,1]:=a[n,n-k+1];
    a[n,n-k+1]:=a[k,n];
    a[k,n]:=x;
  end;
end;
 
var a:matr;
     n,i,k:byte;
begin
clrscr;
randomize;
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
  begin
    for k:=1 to n do
      begin
       a[i,k]:=(i-1)*n+k;
       write(a[i,k]:4);
      end;
    writeln;
  end;
writeln;
Pov90(a,n);
writeln('Поворот на 90 градусов по часовой стрелке:');
for i:=1 to n do
  begin
    for k:=1 to n do
    write(a[i,k]:4);
    writeln;
  end;
end.
1
14.12.2012, 18:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2012, 18:02
Помогаю со студенческими работами здесь

Повернуть матрицу на 90 градусов.
Помогите пожалуйста 🙏🏾 Задана квадратная матрица N-го порядка, состоящая 0 и 1. Повернуть элементы...

Повернуть матрицу на 180 градусов.
Добрый вечер уважаемые программисты... Помогите решить матрицу, у меня небольшой завал ( Дана...

Повернуть двумерную матрицу на 90 и 180 градусов
2. Вводим с клавиатуры размерности двухмерной матрицы (количество строк и столбцов) целых чисел...

Повернуть квадратную матрицу на угол 45 градусов по часовой стрелке
Помогите пожалуйста. Долго бился, не получилось ничего. Условие: Как повернуть квадратный массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru