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

Циклический сдвиг в двумерном динамическом массиве - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дан набор слов на английском языке, разделенных пробелами.Выбелить в последовательности нечетные слова прописными буквами http://www.cyberforum.ru/cpp-beginners/thread717857.html
Дан набор слов на английском языке, разделенных пробелами.Выбелить в последовательности нечетные слова прописными буквами. #include<locale> #include<string.h> #include<stdlib.h> void main() {...
C++ Сглаживание по точкам Всем привет:) такой вопрос, реально ли написать программу: линейное сглаживание по 3 и 5 точкам и нелинейное по 7 точкам??? И что-бы в выходных данных строился график. Если это как-то можно сделать... http://www.cyberforum.ru/cpp-beginners/thread717849.html
Массивы (нужен совет) C++
вот программа в подчеркнутой строке выдает ошибку "выражение должно иметь константное значение" (это касается n) как исправить то? #include <iostream> #include <stdlib.h> using namespace std;...
В массиве найти самую маленькую серию подряд стоящих нечетных элементов... (Как доработать программу?) C++
Помогите доработать программу В заданном массиве целых чисел найти самую маленькую серию подряд стоящих нечетных элементов. Удалить из массива два первых простых числа. Проверить, изменилась ли...
C++ указатели (матрица, найти наибольший из элементов) http://www.cyberforum.ru/cpp-beginners/thread717822.html
дана вещественная матрица n*n .В строках с отрицательным элементом на главной диагонали найти наибольший из элементов. с помощью указателей)
C++ Без операторов цикла вывести цифры числа через пробел Решить не используя операторы цикла. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками. Например Ввод Вывод 179 1 7 9 подробнее

Показать сообщение отдельно
ilizard
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 50

Циклический сдвиг в двумерном динамическом массиве - C++

03.12.2012, 19:06. Просмотров 591. Ответов 7
Метки (Все метки)

Вот такая программа, надо сделать циклический сдвиг в двумерном динамическом массиве по такой вот схеме (см. рис).
да так, чтобы

В результате преобразования должна измениться матрица, просто вывести результат преобразования на экран недостаточно.

Код, выполняющий операцию над матрицей, оформить в виде функции, которой передается указатель на матрицу и размерность матрицы.

Все делаю. Запускаю. Ошибка, и все тут!!! Подскажите, пожалуйста, что не так и как исправить? вот код:

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
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
//-------------------------------------------------------------------------------------------
int ** iniz(int** arr, int n, int m)            //функция инициализирущая матрицу
    {
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                arr[j][i]=rand()%10;
            }
        }
        return arr;
}
//-------------------------------------------------------------------------------------
void vyivod (int** arr, int n, int m)           //функция выводящая матрицу
    {
            cout << "matriza:\n";
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
                cout  << arr[j][i] << " ";
            cout << '\n';
        }
        cout << '\n';
        
}
//---------------------------------------------------------------------------------------
        int ** sortArr (int** arr, int n, int m){    //функция изменяющая массив
 
     int lastElement;       //запоминаем последний элемент
     if (n % 2 == 0){       // смотрим, сколько строк в массиве, и находим "последний" элемент в зависимости от этого
         lastElement = arr[n-1][0];
         }else{
         lastElement = arr[n-1][m-1]; }
     
     int ElementOne;                        
     int ElementTwo;
     for (int i = 0; i < n; i++){           //  для каждой строки опредяем свой вэй, стэп, финиш
         int way, step, finish;              // вэй - элемент с которого начнем изменять
                                         // степ - в какую сторону двигаемся (в четной справа налево, в нечет наоборот 
                        //  финиш - "последний" элемент, в чет -первый, в нечет - последний
         if (i % 2 == 0){    //  определяем стэп, вэй, финиш для чет и нечет строк
                             
               way = 0;
               step = 1;
               finish = (m - 1);
               }else{
                     way = m - 1;
                     step = -1;
                     finish = 0;  }
        
        //далле поставим 0 элемент на место 1, запомнив его.
         if (i == 0){                                    // нулевую строку обработаем отдельно, чтобы объявить ЭлементВан
         ElementOne = arr[i][way + step];
         arr[i][way + step] = arr[i][way]; 
         }else{                                         //  для остальных строк        
               ElementTwo = arr[i][way + step];
               arr[i][way + step] = ElementOne;
               ElementOne = ElementTwo;
               }               
                      
         for (int j = (way + step + step); j != (finish + step); j += step){  //по элементам строки, начиная со 2
             if (j == finish){                                                                 // это если дошли до последнего
                   int lastSwap = arr[i][finish];
                   arr[i][finish] = ElementOne;
                   ElementTwo = arr[i + 1][finish];
                   arr[i + 1][finish] = lastSwap;
                     ElementOne = ElementTwo;
                   }else{                                                                 //а если не последний просто меняет на предыдущий     //запоминая его
             ElementTwo = arr[i][j];  // запоминаем
             arr[i][j] = ElementOne;
             ElementOne = ElementTwo; //  заменяем              }
            } 
                
        } 
     arr[0][0] = lastElement; // ставим на место первого последний
    return arr;
    }
    //------------------------------------------------------------------------------------------
 
int main()
{
    int n,m;
    srand ((unsigned int)time (NULL));
    cout << "n" ; cin >> n ;
    cout << "m";  cin >> m;
    
    int **arr = (int**)malloc(m*sizeof(int*));      //объявление матрицы на экран
    for(int i = 0; i < m; i++)
        arr[i] = (int*)malloc(n*sizeof(int));
    
  iniz(arr,n,m);    //иницилизация
    
vyivod(arr,n,m);  //вывод
 
    sortArr (arr,n,m);  //сортируем
 
    vyivod(arr,n,m); //вывод измененной матрицы
   
    free (arr);
    getch();
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru