Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/39: Рейтинг темы: голосов - 39, средняя оценка - 4.92
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
#1

Осуществить циклический сдвиг элементов квадратной матрицы

20.03.2011, 19:12. Просмотров 7056. Ответов 16
Метки нет (Все метки)

Помогите решить эту задачу:
Осуществить циклический сдвиг элементов квадратной матрицы размерности М х N вправо на К элементов следующим образом:
элементы 1-го строке сдвигаются в последний столбец сверху вниз,
из него-в последнюю строку справа налево, из него - в первый столбец снизу вверх, из него - в первую строку ..... Для других элементов-аналогично
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2011, 19:12
Ответы с готовыми решениями:

Осуществить циклический сдвиг элементов квадратной матрицы
(Console Application) Осуществить циклический сдвиг элементов квадратной...

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

Осуществить циклический сдвиг элементов квадратной
Осуществить циклический сдвиг элементов квадратной матрицы на n элементов...

Осуществить циклический сдвиг элементов прямоугольной матрицы
Здравствуйте, было задание Осуществить циклический сдвиг элементов...

Осуществить циклический сдвиг элементов прямоугольной матрицы
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов...

16
IrineK
Заблокирован
20.03.2011, 19:27 #2
Шото непонятно.О_о
Можно конкретный небольшой числовой пример?
0
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 19:48  [ТС] #3
да я и сам как-то не понял..как оно должно выглядить

Добавлено через 2 минуты
Но оч нужно сделать..помогите пожалуйста

Добавлено через 15 минут
у меня есть такой присер..
ДВУМЕРНЫЕ МАССИВЫ

Пример задания: Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

Пример решения задачи:

#include <stdio.h>

int main(int argc, char* argv[])
{
/* Объявляем и инициализируем матрицу 8х8 */
int matrix[8][8] = {
{ 2, 7, 2, 7, 1, 4, 0, 3 },
{ 1, 0, 7, 6, 0, -8, 3, 5 },
{ 2, 7, 1, 8, 1, 4, 9, 3 },
{ 9, 2, 8, 5, 2, 0, 0, 6 },
{ 7, 1, 1, 3, 9, 3, 9, 1 },
{ 8, 2, 4, 9, 1, -6, 4, 9 },
{ 0, 3, 9, 0, 9, 4, 8, 8 },
{ 1, 8, 3, 2, 8, 2, 8, 0 }
};
int i, j, iSumm; /* Счетчик и переменная для хранения суммы */
bool bFlag; /* Флаг */

/*----------------------------------------------*/
/* П Е Р В А Я Ч А С Т Ь З А Д А Н И Я */
/*----------------------------------------------*/
printf("k = ");
for (i = 0; i < 8; i++)
{
/* Присваиваем Флагу исходное значение */
bFlag = true;
for (j = 0; j < 8; j++)
{
/* Сравниваем элемент i-й строки j-го столбца с элементом j-й строки i-го столбца. В случае их несоответствия присваиваем Флагу значение Ложь и прерываем цикл по j конструкцией break */
if (matrix[i][j] != matrix[j][i])
{
bFlag = false;
break;
}
}
/* В случае сохранения флагом исходного значения выводим на экран номер соответствующей строки */
if (bFlag) printf("%d ", i);
}

/*----------------------------------------------*/
/* В Т О Р А Я Ч А С Т Ь З А Д А Н И Я */
/*----------------------------------------------*/
printf("\n\n");
for (i = 0; i < 8; i++)
{
/* Присваиваем переменным исходные значения */
bFlag = false;
iSumm = 0;
for (j = 0; j < 8; j++)
{
/* При нахождение хотя бы одного отрицательного элемента присваиваем Флагу значение Истина, обозначающее необходимость вывода Суммы на экран */
if (matrix[i][j] < 0) bFlag = true;

/* Суммируем значения элементов i-й строки */
iSumm += matrix[i][j];
}
/* В случае нахождения в строке хотя бы одного отрицательного элемента выводим на экран сумму элементов i-й строки */
if (bFlag) printf("Сумма элементов строки #%d = %d\n", i, iSumm);
}

return 0;
}

Результат выполнения программы:
k = 2 6

Сумма элементов строки #1 = 14
Сумма элементов строки #5 = 31

Но как мою сделать???
0
IrineK
Заблокирован
20.03.2011, 19:57 #4
Пусть дана матрица 3х3
1 2 3
8 9 4
7 6 5

Тогда сдвиг на 1 шаг может быть такой (разворачиваем в вектор и сворачиваем с шагом 1):
9 1 2
7 8 3
6 5 4

Или, если крутим послойно, так:
8 1 2
7 9 3
6 5 4

Что правильно?

Добавлено через 8 минут
Рассмотрим 4х4:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

Крутим по спирали:
16 1 2 3
11 12 13 4
10 15 14 5
9 8 7 6

Крутим послойно:
12 1 2 3
11 16 13 4
10 15 14 5
9 8 7 6

Как?
0
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 20:06  [ТС] #5
я так понял,что нужно послойно крутить

Добавлено через 2 минуты
да..походу послойно..

Добавлено через 4 минуты
помоги пожалуста решить..
0
IrineK
Заблокирован
20.03.2011, 20:44 #6
Еще одно уточнение:
квадратная матрица М х N
Если она М х N, то она не квадратная, а прямоугольная.
Квадратная - это N х N.
0
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 20:47  [ТС] #7
согласен..

Добавлено через 1 минуту
наверно имели ввиду прямоугольную..или квадратную неправильно написали
0
IrineK
Заблокирован
20.03.2011, 20:55 #8
Считаем, что нужно рассматривать квадратную. ОК?
0
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 21:06  [ТС] #9
ок...Ток лиж бы решить

Добавлено через 9 минут
ну как там?
0
IrineK
Заблокирован
20.03.2011, 22:19 #10
Лучший ответ Сообщение было отмечено как решение

Решение

C++
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#define N 6
 
int main()
{       int spiral[N][N], Step, cur[4*(N-1)], shift[4*(N-1)];
        int i,j,k,c,edge;
 
//инициализация массива числами от 1 до 20
        srand(time(NULL));
        printf("Original array:\n");
        for(i=0;i<N;i++)
        {       for(j=0;j<N;j++) 
                {   spiral[i][j]=rand()%20+1;
                    printf("%6d",spiral[i][j]);
                }
                printf("\n");
        }
//запрос количества шагов поворота
        printf("\nHow many steps to turn? Step = ");
        scanf("%d",&Step);
        
        for(k=0; k<N/2;k++) //слои
        {       edge = N-1-k;
                
//снять слой      
        c=0;
        for(j=k;j<edge;j++)             
                {      cur[c] = spiral[k][j];
                        c++;
                }
                for(i=k;i<edge;i++)             
                {      cur[c] = spiral[i][edge];
                        c++;
                }
                for(j=edge;j>=k;j--)    
                {      cur[c] = spiral[edge][j];
                        c++;
                }
                for(i=edge-1;i>k;i--)             
                {       cur[c] = spiral[i][k];
                        c++;
                }
//переставить
        for(i=0;i<4*(N-2*k-1);i++)
            shift[(i+Step)%(4*(N-2*k-1))]=cur[i];
 
//одеть слой        
        c=0;
        for(j=k;j<edge;j++)             
                {   spiral[k][j] = shift[c];   
                    c++;
                }
                for(i=k;i<edge;i++)             
                {    spiral[i][edge]= shift[c];
                        c++;
                }
                for(j=edge;j>=k;j--)    
                {    spiral[edge][j]= shift[c];
                        c++;
                }
                for(i=edge-1;i>k;i--)             
                {     spiral[i][k]= shift[c];
                        c++;
                }
        }//for - переход на следующий слой
      
 //Результат
        printf("Result:\n");
        for(i=0;i<N;i++)
        {       for(j=0;j<N;j++) printf("%6d",spiral[i][j]);
                printf("\n");
        }
 
        getch();
        return 0;
}

Добавлено через 9 минут. ну как там?
Мда-с. Весело. :dance3:
3
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 22:25  [ТС] #11
Ты её розвязал????????
0
IrineK
Заблокирован
20.03.2011, 22:27 #12
Ну не за 9 минут, но таки да.
1
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 22:30  [ТС] #13
можеш в кратце обьяснить как ты её делал?
И что оно в конце считает...я так понял матрица сразу задана..
0
IrineK
Заблокирован
20.03.2011, 22:33 #14
Да, сразу. Рандомно.
0
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 22:34  [ТС] #15
дай краткое описание проги)
0
IrineK
Заблокирован
20.03.2011, 22:38 #16
Смотри комментарии. Там по-русски. Могу перевести на другие языки. Но это уже не за так.
1
Sanchez_sch_
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 24
20.03.2011, 22:40  [ТС] #17
ок..А знаеш как написать програму,что считывает текст с файла и выводит его на екран,заменив цыфры 0-9 на слова "один"-"девять".
0
20.03.2011, 22:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2011, 22:40

Осуществить циклический сдвиг элементов прямоугольной матрицы
Помогите решить задачки. Я не оть программирую, а делать над... (С++) 1)...

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

Выполнить циклический сдвиг элементов квадратной матрицы, используя локальные и динамические массивы
Осуществить циклический сдвиг элементов квадратной матрицы размерность M x N...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru