|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.12.2012, 18:38 | #1 |
Новичок
Джуниор
Регистрация: 04.12.2012
Сообщений: 1
|
Не понимаю, почему не работает циклический сдвиг динамического массива!!
На вас последняя надежда! Никто не может помочь! Написала программу, а она не работает!
Вот такая программа, надо сделать циклический сдвиг в двумерном динамическом массиве по такой вот схеме (см. рис). да так, чтобы В результате преобразования должна измениться матрица, просто вывести результат преобразования на экран недостаточно. Код, выполняющий операцию над матрицей, оформить в виде функции, которой передается указатель на матрицу и размерность матрицы. Все делаю. Запускаю. Ошибка, и все тут!!! Подскажите, пожалуйста, что не так и как исправить? вот код: #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; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
циклический сдвиг элементов массива | Carter | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 19.12.2011 19:54 |
Вопрос про циклический сдвиг массива С++ | Юлия12 | Общие вопросы C/C++ | 4 | 08.02.2010 08:52 |
циклический сдвиг массива | goacher | Общие вопросы C/C++ | 4 | 28.05.2008 20:11 |
циклический сдвиг массива | goacher | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 27.05.2008 22:26 |