Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fuuny
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 13
#1

Ошиба циклического сдвига - C++

15.04.2014, 12:10. Просмотров 245. Ответов 1
Метки нет (Все метки)

Вот задание. Дана действительная квадратная матрица порядка n.
1) осуществить циклический сдвиг элементов прямоугольной матрицы на N элементов вправо или вниз (в зависимости от введенного режима). n может быть больше количества элементов в строке или столбце;
Вот как получилась когда вниз все нормально а вот вправо массив заполняется новыми элементами массива до n позиции.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<iostream>
 
using namespace std;
 
 
 
#define N 6
#define M 6
 
void rotright(int** A, int k)
{
    int q = 0, R[N*M] = { 0 };
    for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++)
        R[q++] = A[i][j];
 
    int* temp = new int[k];
    for (int t = N*M - k, s = 0; t < N*M; t++)
        temp[s++] = R[t];
 
    while (--k >= 0)
    {
        for (int m = N*M - 2; m >= 0; m--)
            R[m + 1] = R[m];
    }
 
    for (int x = 0; temp[x] >= 0; x++)
        R[x] = temp[x];
 
    int n1 = 0, v = 0;
    for (int n2 = 0; n1 < N && v < q; n2++)
    {
        if (n2 >= M) { n2 = 0; n1++; }
        A[n1][n2] = R[v++];
    }
}
 
void rotdown(int** A, int k)
{
    int** temp = new int*[k];
    for (int t = N - k, s = 0; t < N; t++)
        temp[s++] = A[t];
 
    int r = k;
    while (--r >= 0)
    {
        for (int m = N - 2; m >= 0; m--)
            A[m + 1] = A[m];
    }
 
    for (int x = 0; x < k; x++)
        A[x] = temp[x];
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    printf("Матрица \n");
    printf("\n");
    int** A = new int*[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[M];
        for (int j = 0; j < M; j++)
        {
            A[i][j] = rand() % 9 + 0;
            printf("%d ", A[i][j]);
 
 
        }
 
 
        printf("\n");
    }
 
    printf("\n");
 
    int k = 0;
    printf("Сдвиг на позицию k = "); scanf_s("%d", &k);
 
    printf("Сдвиг:\n");
    printf("1.Вправо\n");
    printf("2.Вниз\n");
    printf("\n");
 
    switch (_getch())
    {
    case '1': rotright(A, k); break;
    case '2': rotdown(A, k); break;
    default: break;
    }
 
    for (int s1 = 0; s1 < N; s1++)
    {
        for (int s2 = 0; s2 < M; s2++)
            printf("%d ", A[s1][s2]);
 
 
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
в чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 12:10     Ошиба циклического сдвига
Посмотрите здесь:

Программа циклического сдвига элементов массива - C++
Помогите!Срочно! Составить программу циклического сдвига элементов массива А(10) на 5 позиций влево.Заранее спасибо)))

Функция циклического сдвига побитово вправо - C++
Форумчане, приветствую! Подскажите почему не работает сдвиг вправо? Программа компилируется, но сдвига не происходит. Сверился с...

Как закодировать методом циклического сдвига? - C++
Здравствуйте! Вопрос такой, что представляет из себя кодировка методом циклического сдвига на 2 вправо чётных битов относительно нечётных...

Реализовать функции шифровки и дешифровки методом циклического сдвига битов - C++
Даны текстовые файлы. Реализовать функции шифровки и дешифровки методом циклического сдвига битов на 1 бит вправо в левом полубайте и на 1...

Написать программы шифрования и расшифровки файла методом циклического сдвига - C++
Написать программы шифрования и расшифровки файла методом циклического сдвига. Т.е. каждый символ исходного файла (исходный код - K1)...

Ввести число и вывести результат циклического сдвига его битов на 1 разряд влево - C++
Проверьте пожалуйста, правильное ли решение. Ввести число и вывести результат циклического сдвига его битов на 1 разряд влево (все биты...

Вывести результат последовательного применения циклического сдвига вправо заданной последовательности k раз - C++
Циклическим сдвигом вправо последовательности называется последовательность, получаемая из исходной перемещением последнего элемента в...

Не хватает опыта для того, чтобы понять ошибку в задаче циклического побитового сдвига - C++
Доброго времени суток! Помогите пожалуйста разобраться, почему вместо заданных мною, скажем 4 символов, после циклического сдвига он выдаёт...

Создание циклического алгоритма - C++
Гуры программирование помогите пожалуйста начинающему. Есть задача: Задано натуральное двухзначное число n. Среди чисел 1, 2, ... , n...

Поцедура циклического кодирования - C++
Доброго дня! Помогите программно реализовать процедуру кодирования сообщения с использованием циклического кода, заданного порождающим...

Программирование циклического вычислительного процесса - C++
Даже представить не могу, как это можно реализовать средствами С++(вот такой вот я чайник). Хотя бы дайте алгоритм действий или натолкните...

Программирование циклического вычислительного процесса С++ - C++
#include&quot;iostream&quot; #include&quot;math.h&quot; using namespace std; int main() { int n; double y;


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
15.04.2014, 15:37     Ошиба циклического сдвига #2
Цитата Сообщение от Fuuny Посмотреть сообщение
Дана действительная квадратная матрица
Цитата Сообщение от Fuuny Посмотреть сообщение
осуществить циклический сдвиг элементов прямоугольной матрицы
Так чего дано то?
Ответ Создать тему
Опции темы

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