Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Makspane7
1

Массив: Осуществить циклический сдвиг элементов квадратной матрицы размером М * Н вправо на К элементов

07.05.2012, 19:35. Показов 2266. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
у меня маленькая просьба, не могли вы бы мне помочь с прогой на массивы

1) Осуществить циклический сдвиг элементов квадратной матрицы размером М*Н вправо на К элементов таким образом: элементы 1й строки - в последний столбец сверху вниз, из него - в последнюю строку справа налево, из этой строки - первый столбец снизу вверх, а из него - в первую строку ... для остальных элементов аналогично..

оригинал
1)Здійснити циклічний ссув елементів квадратної матриці розміром М*Н управо на К елементів таким чином:елементи 1го рядка--в останній стовпець зверху вниз, із нього -в останній рядок справа наліво, із цього рядка --перший стовпець від низу до верху, а з нього -- в перший рядок ...для решти елементів аналогвчно..
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2012, 19:35
Ответы с готовыми решениями:

Осуществить циклический сдвиг элементов массива вправо на одну позицию
4. Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на одну позицию...

Осуществить циклический сдвиг элементов массива влево1|вправо2 на k позиций
Дан массив размера N и число k (0 < k < 5, k < N). Осуществить циклический сдвиг элементов массива...

Дан массив размера N. Осуществить циклический сдвиг
Дан массив размера N. Осуществить циклический сдвиг элементов массива влево на одну позицию

Дан массив размера n и чесло к (0<k<5, k<n) осуществить цикличекий сдвиг элементов массива на л позиций.
помагите сделать прогу в Delphi Дан массив размера n и чесло к (0&lt;k&lt;5, k&lt;n) осуществить цикличекий...

1
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
08.05.2012, 07:51 2
Лучший ответ Сообщение было отмечено как решение

Решение

Для первой строки понятно. А для второй строки, третьей и следующих?

Добавлено через 10 часов 46 минут
Вот такой код:
Delphi
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
Const
  M = 10; //Размерность матрицы
  H = 15; //Если квадратная - M = H
  K = 7;  //Сдвиг на...
Var
  //Сама матрица
  matr : Array[1..M,1..H] of Integer;
 
  //Массив для временных вычислений
  Temp : Array[1..M*2+N*2-4] of Integer;
  i,j,c : Integer;
begin
  //Перенесём сдвигаемый участок во временный массив
  For i:=1 To H-1 Do //верхняя строка
  Temp[i]:=matr[1,i];
 
  For i:=1 To M-1 Do //последний столбец
  Temp[i+H-1]:=matr[i,H];
 
  For i:=H DownTo 2 Do //нижняя строка сзаду на перёд
  Temp[H-1+M-1+((2+H)-i-2+1)]:=matr[M,i];
 
  For i:=M DownTo 2 Do //первый столбец снизу вверх
  Temp[H-1+M-1+H-1+(2+M-i-2+1)]:=matr[i,1];
 
  //Сдвиг временного массива на K -элементов вправо
  For i:=1 To (K Mod High(Temp)) Do
  Begin
    //Сдвиг на одну позицию
    c:=Temp[High(Temp)];
    For j:=High(Temp) DownTo 2 Do Temp[j]:=Temp[j+1];
    Temp[1]:=c;
  End;
 
  //Перенесём сдвигаемый участок
  //из временного массива в матрицу
  For i:=1 To H-1 Do //верхняя строка
  matr[1,i]:=Temp[i];
 
  For i:=1 To M-1 Do //последний столбец
  matr[i,H]:=Temp[i+H-1];
 
  For i:=H DownTo 2 Do //нижняя строка сзаду на перёд
  matr[M,i]:=Temp[H-1+M-1+((2+H)-i-2+1)];
 
  For i:=M DownTo 2 Do //первый столбец снизу вверх
  matr[i,1]:=Temp[H-1+M-1+H-1+(2+M-i-2+1)];
end.
Это сдвиг внешнего кольца матрицы на K элементов вправо. Как быть с остальными - не понял.
Заполнение матрицы - на форуме много задач.

Добавлено через 30 минут
Вставил заполнение матрицы и изменил сдвиг:
Delphi
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
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils;
 
Const
  M = 10; //Размерность матрицы
  H = 15; //Если квадратная - M = H
  K = 7;  //Сдвиг на...
Var
  //Сама матрица
  matr : Array[1..M,1..H] of Integer;
 
  //Массивы для временных вычислений
  Temp,Temp1 : Array[1..M*2+N*2-4] of Integer;
  i,j,c : Integer;
begin
  //Заполнение матрицы...
  Randomize;
  For i:=1 To M Do
  For j:=1 To H Do
  matr[i,j]:=Random(1000); //Значениями: от 0 до 1000
 
  //Перенесём сдвигаемый участок во временный массив
  For i:=1 To H-1 Do //верхняя строка
  Temp[i]:=matr[1,i];
 
  For i:=1 To M-1 Do //последний столбец
  Temp[i+H-1]:=matr[i,H];
 
  For i:=H DownTo 2 Do //нижняя строка сзаду на перёд
  Temp[H-1+M-1+((2+H)-i-2+1)]:=matr[M,i];
 
  For i:=M DownTo 2 Do //первый столбец снизу вверх
  Temp[H-1+M-1+H-1+(2+M-i-2+1)]:=matr[i,1];
 
  //Сдвиг временного массива на K -элементов вправо
  For i:=1 To High(Temp) Do
  Temp1[((i-1+K) Mod High(Temp))+1]:=Temp[i];
 
  //Перенесём сдвигаемый участок
  //из временного массива в матрицу
  For i:=1 To H-1 Do //верхняя строка
  matr[1,i]:=Temp1[i];
 
  For i:=1 To M-1 Do //последний столбец
  matr[i,H]:=Temp1[i+H-1];
 
  For i:=H DownTo 2 Do //нижняя строка сзаду на перёд
  matr[M,i]:=Temp1[H-1+M-1+((2+H)-i-2+1)];
 
  For i:=M DownTo 2 Do //первый столбец снизу вверх
  matr[i,1]:=Temp1[H-1+M-1+H-1+(2+M-i-2+1)];
end.
0
08.05.2012, 07:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2012, 07:51
Помогаю со студенческими работами здесь

Циклический сдвиг вправо
8. Напишите процедуру, реализующую циклический сдвиг вправо элемен¬тов одномерного массива на...

Осуществить циклический сдвиг
Даны целые числа N, L, вектор {a} где i=l,2,...,N. Осуществить циклический сдвиг компонент вектора...

Осуществить циклический сдвиг цифр
помогите!Нужно сделать задачу в визуальной среде Дельфи! вот текст задачи:осуществить циклический...

осуществить циклический сдвиг массива
3. Составить и выполнить программу, которая с помощью подпрограммы-функции, осуществляющей...


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

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