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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
-Линка-
Сообщений: n/a
27.12.2010, 01:03     Осуществить циклический сдвиг элементов прямоугольной матрицы #1
Помогите решить задачки. Я не оть программирую, а делать над... (С++)

1) Вычислить 12 значений функции y=ax^2+bx+c на отрезке [e,f], сохранить их в массиве Y и определить, является ли функция убывающей, возрастающей или немонотонной на этом отрезке.

2) Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в зависимости от введенного режима). n может быть больше количества элементов в строке или столбце.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2010, 01:03     Осуществить циклический сдвиг элементов прямоугольной матрицы
Посмотрите здесь:

Циклический сдвиг прямоугольной матрицы на n элементов вправо C++
C++ Осуществить циклический сдвиг элементов квадратной матрицы
Массивы: осуществить циклический сдвиг элементов массива C++
C++ Осуществить циклический сдвиг элементов массива влево на одну позицию
Как осуществить циклический сдвиг элементов квадратной матрицы C++
C++ Осуществить циклический сдвиг элементов квадратной
Осуществить циклический сдвиг элементов C++
C++ Осуществить циклический сдвиг массива на N элементов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
27.12.2010, 01:33     Осуществить циклический сдвиг элементов прямоугольной матрицы #2
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;
}
Merlin666
 Аватар для Merlin666
96 / 96 / 10
Регистрация: 26.12.2010
Сообщений: 220
27.12.2010, 01:48     Осуществить циклический сдвиг элементов прямоугольной матрицы #3
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
//
// Вычислить 12 значений функции y=ax^2+bx+c на отрезке [e,f], 
// сохранить их в массиве Y и определить, является ли функция убывающей,
// возрастающей или немонотонной на этом отрезке.
//
#include "StdAfx.h";
#include <iostream>
#include <cmath>;
using namespace std;
 
bool IsDown(int x[12])
{
    bool flag=true;
 
    for (int i=0;i<11;i++)
        if (x[i]<x[i+1]) flag=false;
 
    return flag;
}
 
bool IsRaised(int x[12])
{
    bool flag=true;
 
    for (int i=0;i<11;i++)
        if (x[i]>x[i+1]) flag=false;
 
    return flag;
}
 
void main()
{
    int x[12];
    int a, b, c, e, f, count, i=0;
 
    cout<<"Enter a, b, c: ";
    cin>>a>>b>>c;
 
    cout<<"Enter e, f: ";
    cin>>e>>f;
 
    count=e;
 
    for (int j=0;j<=11;j++)
    {
        x[j]=a*count*count+b*count+c;
        count=count+double((f-e)/12);
    }
    
    for (int j=0; j<=11; j++)
        cout<<x[j]<<" ";
 
    if (IsRaised(x)) cout<<"Raised";
    else if (IsDown(x)) cout<<"Down";
    else cout<<"Not Monotonical...";
}
Добавлено через 1 минуту
C++
1
count=count+double((f-e)/12);
Замени просто на
C++
1
count+=(f-e)/12;
Добавлено через 40 секунд
Если нужны не только целые значения - поменяй типы данных) int на double или float=)
Yandex
Объявления
27.12.2010, 01:48     Осуществить циклический сдвиг элементов прямоугольной матрицы
Ответ Создать тему
Опции темы

Текущее время: 10:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru