Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2012, 18:38   #1
ilizard314
Новичок
Джуниор
 
Регистрация: 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;
}
Изображения
Тип файла: png сдвиг.png (3.0 Кб, 62 просмотров)
ilizard314 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
циклический сдвиг элементов массива 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