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

Циклический сдвиг матрицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Данная матрицы сложения со слов порядка n * n. http://www.cyberforum.ru/cpp-beginners/thread577133.html
Помогите решить срочно..Пожалуйста. Данная матрицы сложения со слов порядка n * n. Слова разделяются пробелами. Определить и вывести на экраны слова побочной диагонали.
C++ Разделить введенную строку пополам и соединять в обратном порядке помогите пожалуйста написать программу! программа должна разделять введенную строку пополам и соединять в обратном порядке!если слово нечетное то оставить букву в середине без изменений! http://www.cyberforum.ru/cpp-beginners/thread577125.html
C++ Массив Задача
День добрый!! Помогите с задачей. Дан массив размера N. Найти номера двух ближайших по значению элементов из этого массива (то есть элементов с наименьшим модулем разности) и вывести эти номера в порядке возрастания. Заранее спасибо!!
C++ Нужна помощь по блок схемах!
К этой програме мне нужна блок схема, помогите пожалуйста. class parampampam { private: #define DEFAULT_SIZE ( 5 ) int **matrix; int *array; size_t size; size_t index_array;
C++ Одномерные,двумерные массивы на языке С\С+ http://www.cyberforum.ru/cpp-beginners/thread577092.html
огромная просьба,извините заранее за назойливость только начала изучать с+,очень нужен для работы.тут встала проблема две задачи на массивы.не могли бы мне помочь с решением их и составлением блок-схем для них а дальше ухвачу. 1 задача.В произвольном одномерном массиве, содержащий числовые значения, определить местоположение элементов массива равными значению максимального элемента. 2 задача.В...
C++ Функция Polyline Подскажите использрвание этой функции! подробнее

Показать сообщение отдельно
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
16.05.2012, 23:11     Циклический сдвиг матрицы
Незнаю поможет Вам или нет!!
Вот завалялась программа, сдвигает элементы матрицы вправо и вниз, в зависимости от выбраного режима!

Матрица считывается и записывается в файл

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "iostream"
#include "fstream"
 
using namespace std;
 
enum direction 
{ 
    right = 1, down 
}; // направление сдвига - в право / в лево
 
/* функция moves "сдвигает" массив вправо или вниз
mass - массив
change - количество элементов на которое происходит сдвиг
motion - в право (right) или в низ (down) */
void moves(int **mass, int change, direction motion, int n);
int **Matrix(int n); //прототип функции которая выделяет память под динамический массив
int **mass = 0; //указатель на нулевой массив
 
int main()
{
    setlocale(LC_CTYPE,"Russian"); //русский шрифт в консоле
 
    int n, i, j, change, motion; //объявляем целочисленные переменные
    cout << "Введите размерность матрицы(одно число, так как матрица квадратная): ";
    cin >> n; //считываем размер матрицы 
 
    mass = Matrix(n); //вызываем функцию которая выделяет память под динамический массив
    
    ifstream inarray("matrix.txt"); // открытие файла для ввода;
    if (!inarray) //если файла не существует
    {
        cout << "File can not be opened" << endl; //выводим сообщение
        return 0;   //выход из программы
    }
 
    for (i = 0; i < n ; ++i)
    {
        for (j = 0; j < n; ++j) 
        {
            inarray >> mass[i][j]; //считываем матрицу из файла matrix.txt
        }                           
    }                               
    inarray.close(); //закрываем файл
 
    ofstream outarray("matrix1.txt");//открытие файла для вывода
    if (!outarray) ////если файла не существует
    {
        cout << "File cannot be opened" << endl;//выводим сообщение
        return 0; // выход из программы
    }
 
    while(1)
    {
        // выводим массив на консоль
        for( i = 0; i < n; ++i )
        {
            for( j = 0; j < n; ++j )
            {
                cout << mass[i][j] << " ";
            }
        cout << endl;    
        }
        // спрашиваем куда двигать будем
        // 1 - в паво; 2 - в низ;  0 - выход из программы
        cout << "\n\nВыберите направление сдвига\n1 - Вправо\n2 - Вниз\n0 - Выход\nВаш выбор - ";
        cin >> motion; // считываем число
        if( motion < 1 || motion > 2) //если меньше 0 или больше 2, тогда... 
        {
            return 0; //завершаем програму
        }
        // спрашиваем на сколько надо сдвинуть
        cout << "\nНа сколько элементов сдвинуть? - ";
        cin >> change;
        if( change <= 0) //если число меньше или равно нулю, тогда...
            {
                return 0; //завершаем програму
            }
        // сдвигаем
        moves(mass, change, (direction)motion, n); //вызываем функцию которая сдвигает элементы
 
        
        for (i = 0; i < n; ++i)
        {
            for ( j = 0; j < n; ++j)
            {
                outarray << mass[i][j] << " "; ////выводим в matrix1.txt массив с переставлеными столбцами 
            }
            outarray << endl;
        }
        outarray << endl;
 
        cout << endl;
    }
    
    // высвобождение динамической памяти
    for (i = 0; i < n; ++i)
        delete [] mass[i];
    delete [] mass;
 
    return 0;
}
 
int **Matrix(int n) //описания функции динамического выделения памяти под матрицу
{
    int i; //обьявили переменую
    int **matr = new int *[n]; // указатель на массив указ-лей;
    for (i = 0; i < n; ++i) 
        matr[i] = new int [n];  
                
    return matr; //возвращаем массив
}
 
 
void moves(int **mass, int change, direction motion, int n) //функция сдвига
{
        int begin = 0; // начало массива
        int position = begin + change - 1;  // позиция записи в промежуточный массив
        int mas[100]; // промежуточный массив
        int i, j; // счётчики циклов
 
        for ( j = 0; j < n; ++j )
        {
        // 1) копируем числа в промежуточный массив
        for( i = 0; i < n; ++i )
        {
            if( position >= n - 1 ) 
            {
                position = begin;
            }
            else
            {
                position++;
            }
                if( motion == direction::right ) // если сдвигаем в право
                {
                    mas[position] = mass[j][i];
                }            
                else // если сдвигаем вниз
                {
                    mas[position] = mass[i][j];
                }
        }
        for( i = 0; i < n; ++i )
        {
            if(motion == direction::right)
            {
                mass[j][i] = mas[i];
            }
            else
            {
                mass[i][j] = mas[i];
            }
        }
    }
}
Желательно ввести размер матрицы такой как в matrix.txt

Не по теме:


сопровождение и консультация не предоставляется

Миниатюры
Циклический сдвиг матрицы  
Вложения
Тип файла: txt matrix.txt (209 байт, 26 просмотров)
 
Текущее время: 19:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru