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

Написать функцию, осуществляющую циклический сдвиг строк и/или столбцов заданной матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ изменения порядка битов в 2-ч байтовом целом http://www.cyberforum.ru/cpp-beginners/thread802912.html
Доброго времени суток!:) Решаю следующую задачу, нужно ввести число, а затем поменять порядок битов в нем на обратный, так вот что-то не получается... заранее благодарю за помощь!) #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; void displayBits(unsigned); unsigned reverseBits(unsigned);
C++ Тип данных - массив Добрый день. Помогите разобраться с шаблоном, а точнее с типом массива. Вот сам код: #include <iostream> #include <iomanip> using namespace std; template <class T,int n> void init (T (&arr) ) { http://www.cyberforum.ru/cpp-beginners/thread802911.html
Динамическое выделение памяти! C++
Программа должна читать с клавы число и имя(до 15 символов). Данные должны вводится в одной функции а выводится во второй. Сохранять данные в main(). Завершатся должна когда пользователь введет 0.Массивы создавать динамически и если необходима увеличивать размер. Я вроде что-то сделал но не работает. Где ошибка? #include <iostream> #include <iomanip> #include <Windows.h> using std::cout;...
преобразование слов в цыфры! C++
вот задача: НАпишите программу преобразующую слова ноль-один-два. в цыфры 0-1-2. только я чёт немного запутался и почему то никак не могу освоить else =( напишите пожалуйста программи и если вас не затруднит прокоментируйте строчки!! Спасибо огромное друзья!! // 118_9.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "DarkJoker.h" int main() {...
C++ Табулирование функции http://www.cyberforum.ru/cpp-beginners/thread802858.html
помогите пожалуйста переделать с паскаля на с++, табулирование функции. program ex1; uses crt; var a,b,h,x:single; i,n:integer; s:string; c:integer; begin clrscr; repeat
C++ Виртуальные абстрактные базовые классы Привет всем!:-) Вчера столкнулся со следующей проблемой: компилятор ругается на чистый виртуальный деструктор. Собственно листинги: //workermi.h #ifndef WORKERMI_H_ #define WORKERMI_H_ #include <iostream> #include <string> подробнее

Показать сообщение отдельно
VaLc_DD
0 / 0 / 0
Регистрация: 17.06.2016
Сообщений: 13
04.11.2016, 17:30     Написать функцию, осуществляющую циклический сдвиг строк и/или столбцов заданной матрицы
Кто может подскажите в чем проблема, вместо свича использовать надо указатель на функции, и по отдельности функции работают, а когда запускаю через указатель тот ошибка на стадии выполнения.
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
/*Задание 3:
Дана матрица порядка MxN (M строк, N столбцов). Необходимо заполнить ее значениями и написать функцию,
осуществляющую циклический сдвиг строк и/или столбцов массива указанное количество раз и в указанную сторону.*/
 
 
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
 
 
 
void st_left(int **mas, int M, int N, int kol){
    cout << "\tCдвиг столбцов влево на\t" << kol << "\n\n";
    if (kol>N)kol = kol%N;
    for (int i = 0; i < M; i++){
        for (int j = 0, c = 0, g = kol; j < N; g++, j++){
            if (g < N)  cout << mas[i][g] << "\t";
            else {
                cout << mas[i][c] << "\t";
                c++;
            }
        }
        cout << "\n";
    }
}
 
void st_right(int **mas, int M, int N, int kol){
    cout << "\tCдвиг столбцов вправо на\t" << kol << "\n\n";
    if (kol>N)kol = kol%N;
    for (int i = 0; i < M; i++){
        for (int j = 0, c = 0, g = kol; j < N; g--, j++){
            if (g > 0)  cout << mas[i][N - g] << "\t";
            else {
                cout << mas[i][c] << "\t";
                c++;
            }
        }
        cout << "\n";
    }
}
 
void str_up(int **mas, int M, int N, int kol){
    cout << "\tCдвиг строк вверх на\t" << kol << "\n\n";
    if (kol>M) kol = kol%M;
    for (int i = 0, g = kol; i < M; g++, i++){
        for (int j = 0; j < N; j++){
            if (g < M)  cout << mas[g][j] << "\t";
            else cout << mas[g - M][j] << "\t";
        }
        cout << "\n";
    }
}
 
void str_down(int **mas, int M, int N, int kol){
    cout << "\tCдвиг строк вниз на\t" << kol << "\n\n";
    if (kol>M) kol = kol%M;
    for (int i = 0, g = kol; i < M; g--, i++){
        for (int j = 0; j < N; j++){
            if (g > 0)  cout << mas[M - g][j] << "\t";
            else cout << mas[-g][j] << "\t";
        }
        cout << "\n";
    }
}
 
int ** Sozdanie(int M, int N)
{
    int **mas = (int**)malloc(M*sizeof(int*));
    for (int i = 0; i < M; i++){
        mas[i] = (int*)malloc(N*sizeof(int));
    }
    return mas;
}
 
void zapoln(int **mas, int M, int N){
    for (int i = 0; i < M; i++){
        for (int j = 0; j < N; j++){
            mas[i][j] = rand() % 33;
        }
    }
}
 
void print(int **mas, int M, int N){
    for (int i = 0; i < M; i++){
        for (int j = 0; j < N; j++){
            cout << mas[i][j] << "\t";
        }
        cout << "\n";
    }
}
void main(){
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    int M, N, kol, sdvig;
    cout << "\nВведите количество строк\t";
    cin >> M;
    cout << "\nВведите количество столбцов\t";
    cin >> N;
 
    do{
        system("CLS");
        int **mas = Sozdanie(M, N);
        zapoln(mas, M, N);
        print(mas, M, N);
        cout << "\nВведите количество сдвигов\t";
        cin >> kol;
        cout << "\n";
        cout << "\n\nВыберите как вы хотите сдвинуть массив\n\n";
        cout << "1\tсдвиг столбцов влево\n";
        cout << "2\tсдвиг столбцов вправо\n";
        cout << "3\tсдвиг строк вверх\n";
        cout << "4\tсдвиг строк вниз\n";
        cout << "ESC\tдля выхода\n";
        void(*p_func[4])(int **, int, int, int) = { st_left, st_right, str_up, str_down };
        sdvig = getch();
 
        p_func[sdvig - 1](mas, M, N, kol);      // проблема тут или в 115 строке, не пойму почему не вызывается функция, и не выводится на печать, по отдельности все работает.
        system("pause");
        for (int i = 0; i < M; i++)
            free(mas[i]);
        free(mas);
    } while (sdvig != 27);
 
 
}
понимаю, что громоздко слишком, но главный вопрос почему не работает именно. По идее ошибка в районе строки 115, но в чем она понять не могу((

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