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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
anton6262906
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 17
#1

нужно разобраться с кодом - C++

26.12.2011, 22:19. Просмотров 230. Ответов 0
Метки нет (Все метки)

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
#include <iostream>//подключение библиотек
 
using namespace std;
typedef int* stroka;              
 
class Matrix
{
public:
        stroka* matrix;
        int a, b;//обьявление переменных
        Matrix(int a1, int b1)
        {
                this->a = a1, this->b = b1;
                matrix = new stroka[a];
                for (int i = 0; i < a; ++i)
                        matrix[i] = new int[b];
        }
        ~Matrix(void)
        {
                for (int i = 1; i < a; ++i)
                        delete[]matrix[i];
                delete[]matrix;
        }
        void sdvig (int flag, int sdvig, int index)
        {
                if (!(sdvig % a) && flag == 2 || flag == 1 && !(sdvig % b))
                        return;
                else
                        if (flag == 2 && index >= 0 && index < b) // столбец
                        {
                                sdvig = sdvig > 0 ? sdvig % a : sdvig % a + a;
                                int* tmp = new int[sdvig];
                                for (int i = 0; i < sdvig; ++i)
                                {
                                        tmp[i] = matrix[a - sdvig + i][index];                                           // сохраняем последние элементы [сдвиг]
                                        matrix[a - sdvig + i][index] = matrix[(a - 2*sdvig + i >= 0 ? a - 2*sdvig + i : (2 * (a - sdvig) + i) % a)][index];     // на их место предыдущие [сдвиг]
                                }
                                for ( i = a - sdvig; i >= sdvig; --i)
                                        matrix[i][index] = matrix[i - sdvig][index];
                                for ( i = 0; i < sdvig; ++i)
                                        matrix[i][index] = tmp[i];
                                delete[]tmp;
                        }
                        else 
                                if (flag == 1 && index >= 0 && index <= a) // строка
                                {
                                        sdvig = sdvig > 0 ? sdvig % b : sdvig % b + b;
                                        int* tmp = new int[sdvig];
                                        for (int i = 0; i < sdvig; ++i)
                                        {
                                                tmp[i] = matrix[index][b - sdvig + i];                                           // сохраняем последние элементы [сдвиг]
                                                int t = b - 2*sdvig + i >= 0 ? b - 2*sdvig + i : (2 * (b - sdvig) + i) % b;
                                                matrix[index][b - sdvig + i] = matrix[index][t];        // на их место предыдущие [сдвиг]
                                        }
                                        for ( i = b - sdvig; i >= sdvig; --i)
                                                matrix[index][i] = matrix[index][i - sdvig];
                                        for ( i = 0; i < sdvig; ++i)
                                                matrix[index][i] = tmp[i];
                                        delete[]tmp;
                                }
        }
        friend ostream& operator<< (ostream& os, const Matrix& Buffer)
        {
                for (int i = 0; i < Buffer.a; ++i)
                {
                        for (int j = 0; j < Buffer.b; ++j)
                                os << Buffer.matrix[i][j] << "  ";
                        os << endl;
                }
                return os;
        }
};
 
int main(void)
{
        Matrix Buffer(7, 5);
 
        for (int i = 0; i < Buffer.a; ++i)
                for (int j = 0; j < Buffer.b; ++j)
                        Buffer.matrix[i][j] = i + j + 1;        
        
        
        cout << Buffer << endl;
        Buffer.sdvig(1 /* столбец */, 3 /* сдвиг*/ , 3);
        cout << Buffer;
 
        system("Pause");
        return 0;
}
он рабочий 100%
вот только проблемма понять что он делает за чем..нужна помощь в понятии и осознании того что здесь выполняется вот само задание:
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в зависимости от введенного режима). n может быть больше количества элементов в строке или столбце.
я нашол этот код на этом сайте и задание тоже вот просто для себя хочу разобраться что здесь происходит..в общем я понимаю а чтгобы отдельные строчки обьяснить не могу((
буду очень благодарен за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 22:19     нужно разобраться с кодом
Посмотрите здесь:

Нужно разобраться с кодом - C++
что делается в 6 строке и с 44-60? #include &lt;iostream&gt;; #include &lt;string.h&gt;; using namespace std; 6 char **AddPtr (char...

Нужно разобраться с кодом (Объяснить что к чему)! - C++
Здравствуйте необходима помочь разобраться с кодом Может кто ни будь добавить комментарий к строкам программы float...

Разобраться с кодом - C++
Есть готовый код программы, решающей следующую задачу: Для двух прямолинейных кусков круглой трубы известны их внешние диаметры,...

Не могу разобраться с кодом - C++
Не могу разобраться с участком кода, а именно зачем нужны &quot;++&quot; *buffer-&gt;DataEnd++ = data32;

Помогите разобраться с кодом - C++
Код - проверка ввода данных. Если вводиться &quot;x6x&quot;, то вызывается исключение, правильным вводом являются только символы, например: &quot;xxx&quot;,...

Необходимо разобраться с кодом - C++
Объясните пожалуйста что делает эта программа #include &lt;vector&gt; #include &lt;cstdio&gt; using namespace std; void f(int v, int...

Немогу разобраться с кодом - C++
код писал не я, помогите пожалуйста разобраться.Я не могу понять за что отвечает та или иная переменная.Я знаю что это С а не С++,но в этой...

Не могу разобраться с кодом - C++
Здравствуйте! Скажите, что выполняет программа в данном фрагменте и что обозначают стрелки? p1 = (struct st1*)malloc(sizeof(struct...

Не могу разобраться с кодом - C++
Суть состоит в том чтобы составить программу, выводящую на экран расписание экзаменов и зачетов (предмет,вид...

Не могу разобраться с кодом - C++
Ввести строку, содержащую несколько слов. Определить самое длинное и самое короткое слово. Имеется код, но я не пойму по какому принципу...

Не могу разобраться с кодом (Указатели) - C++
Всем салют! Решил освоить С++. Обучение прохожу сам по книге Лафоре &quot;ООП в С++&quot;. Разобрал полкниги, вопросов не возникало до главы...

Не получается разобраться с кодом (структуры) - C++
Есть выдержка из программы: struct BAZA// структура база { char name ; char fam ; char otch ; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru