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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Дан набор слов на английском языке, разделенных пробелами.Выбелить в последовательности нечетные слова прописными буквами http://www.cyberforum.ru/cpp-beginners/thread717857.html
Дан набор слов на английском языке, разделенных пробелами.Выбелить в последовательности нечетные слова прописными буквами. #include<locale> #include<string.h> #include<stdlib.h> void main() { setlocale(LC_ALL, "Russian"); FILE *file; char st;
C++ Сглаживание по точкам Всем привет:) такой вопрос, реально ли написать программу: линейное сглаживание по 3 и 5 точкам и нелинейное по 7 точкам??? И что-бы в выходных данных строился график. Если это как-то можно сделать подскажите добрым советом:) http://www.cyberforum.ru/cpp-beginners/thread717849.html
Массивы (нужен совет) C++
вот программа в подчеркнутой строке выдает ошибку "выражение должно иметь константное значение" (это касается n) как исправить то? #include <iostream> #include <stdlib.h> using namespace std; int main() { srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
В массиве найти самую маленькую серию подряд стоящих нечетных элементов... (Как доработать программу?) C++
Помогите доработать программу В заданном массиве целых чисел найти самую маленькую серию подряд стоящих нечетных элементов. Удалить из массива два первых простых числа. Проверить, изменилась ли серия подряд стоящих нечетных элементов. (Функцией описать нахождение самой маленькой, подряд стоящей, нечётной серии элементов.) #include <iostream> #include <conio.h>
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
03.12.2012, 19:06     Циклический сдвиг в двумерном динамическом массиве
Вот такая программа, надо сделать циклический сдвиг в двумерном динамическом массиве по такой вот схеме (см. рис).
да так, чтобы

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

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

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

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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru