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

Осуществить циклический сдвиг элементов прямоугольной матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Бинарное дерево http://www.cyberforum.ru/cpp-beginners/thread221032.html
Здравствуйте.Прошу помощи.Никак не могу разобраться в задании.Нужно сделать бинарное дерево и с помощью дерева привести выражение к бесскобочной логике: (a*b+c)/(a-(d+a)).Что это значит?
C++ Библиотеки. Работа с файлами Предварительно создаются два файла данных А и B. Зависимости от типа данных это выполняется с применением программы или в текстовом редакторе. Содержимое файла C создается в процессе выполнения программы в соответствии задаче. Логическую функцию выполнить в статической и динамической библиотеках. Записать в С все символы с кодовыми номерами 58-70 и 100-120 из А и В. Дополнить файл А... http://www.cyberforum.ru/cpp-beginners/thread221030.html
С++ классы C++
Описать класс с контурами ,операциями,преобразование типов Бинарное число
C++ то напечатает программа?
( задание значения переменной ? условия повтора : шаг ) - по моему такая анолгия ( ? : ) с for? или нет? помогите решить задачу ЭТО НЕ ТОТ СКРИН!СМОТРИ НИЖЕ
C++ структуры http://www.cyberforum.ru/cpp-beginners/thread221014.html
Вообще не представляю как делать эту задачу. может кто знает? Напишите программу, которая вычисляет значение у= 1+х^2 +х^3 +… + х^п при любом х. Вычисления продолжать до тех пор, пока очередное слагаемое больше заданного значения z. Найти количество слагаемых.
C++ Массивы структур Написать консольную программу на языке C++ с использованием структур. Программа должна позволять пользователю добавлять данные в массив структур, просматривать этот массив, а также выполнять дополнительную операцию в соответствии с индивидуальным заданием: Поля структуры: персональный код, фамилия, вес. Операция: найти фамилию человека, у которого наибольший вес. Помогите решить пожалуйста (.... подробнее

Показать сообщение отдельно
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
27.12.2010, 01:33     Осуществить циклический сдвиг элементов прямоугольной матрицы
2.
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 (int i = a - sdvig; i >= sdvig; --i)
                    matrix[i][index] = matrix[i - sdvig][index];
                for (int 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 (int i = b - sdvig; i >= sdvig; --i)
                        matrix[index][i] = matrix[index][i - sdvig];
                    for (int 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;
}
 
Текущее время: 13:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru