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

Какой способ хранения матрицы выбрать, если требуется делать много перестановок элементов? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввод значений в строку http://www.cyberforum.ru/cpp-beginners/thread798767.html
Суть: Выводится список групп в консоль, затем выбираем группу, затем выводится список людей, затем человека выбираем. Проблема: Если ввести любое другое сочетание символов при выборе группы...
C++ Переполнение Доброго времени суток! Есть код: void menu() { IndexList Universal; List *tmp = NULL; int punkt_menu; char *value = NULL; instructions(); http://www.cyberforum.ru/cpp-beginners/thread798728.html
конструктор и деструктор для cout C++
Здарова! нужно решить задачу: есть код: int main() { cout <<"Hellow world"<<endl; } нужно без модифицирования функции main заставить чтобы она выводила
C++ Сортировка чисел по возрастанию
пожалуйста напишите программу сразу говорю я только начал обучаться! поэтому с которая будет сортировать введённые мной числа! по возрастанию!! (2.1.3) > (1.2.3) (без header algorithm) только лишь с...
C++ Игра с лампами и выключателями http://www.cyberforum.ru/cpp-beginners/thread798714.html
Добрый вечер, я уже несколько часов бьюсь над простейшей игрой с выключателями. Помогите нубу разобраться с циклом while - именно там программа завершает свой логический ход. Заранее спасибо) ...
C++ как изобразить декартову систему координат ?немогу дорешать задачку Задана окружность, с помощью координат центра и радиуса. Вывести в декартовой системе координат (x и y от -1000 до 1000) как задать окружность - знаю.. две пересекающиеся прямые как систему... подробнее

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

Какой способ хранения матрицы выбрать, если требуется делать много перестановок элементов? - C++

02.03.2013, 18:26. Просмотров 395. Ответов 1
Метки (Все метки)

Здравствуйте! У меня было задание, написать такую программу, которой надо сделать циклический сдвиг в двумерном динамическом массиве по такой вот схеме (см. рис). http://www.cyberforum.ru/attachments/208514d1354547418

сделала. матрицу сохраняла в динамической памяти, с помощью new int.

Но преподаватель остался недоволен, сказал что есть способ хранения памяти, который будет эффективней при таких перестановках элемента. А я не могу догадаться как хранить ее! Помогите, пожалуйста.

И еще вопрос, чем отличается new int от malloc?

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