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

Матрицы. Классы. Проверка ввода - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка функции max () | min() http://www.cyberforum.ru/cpp-beginners/thread632299.html
Задача: Дано три числа, записанный в отдельных строках. Упорядочите их в порядке убывания. Программа должна считывать три числа a, b, c, затем программа должна менять их значения так, чтобы стали выполнены условия a <= b <= c, затем программа выводит тройку a, b, c. Я хочу решить его таким способом... Но возникает проблема при компиляции... Почему? #include <iostream> #include <cmath>...
C++ Написать программу, результат работы которой - округление дробного числа до целого по математическим правилам. Здравствуйте, Друзья. Задание: Написать программу, результат работы которой - округление дробного числа до целого по математическим правилам. Вот код #include <iostream> using namespace std; void Okruglenie(float); void main() { http://www.cyberforum.ru/cpp-beginners/thread632292.html
rand C++
srand(time(NULL)); int s = rand()%1000 +1; генерирует бред вроде 3,4,7,10,14,19,21,26,29... как сделать чтобы значения были примерно такие : 458,985,100,5,857,40,756
C++ Реализация комбинаторики
Задача имеет следующий вид. Есть набор строка символов неопределенной(заранее) длины. Нужно из данной строки подсчитать и вывести все варианты возможных комбинаций от одного символа и до length(str). Подсчитать кол-во вариантов не проблема (\sum_{i=0}^{length}\frac{length!}{i!*(length-i)!}) - проблема в переборе все возможных вариантов. Прошу помочь с алгоритмом. Используется C++....
C++ Сложение 2-х целых двоичных чисел, хранящихся в массивах A и B http://www.cyberforum.ru/cpp-beginners/thread632267.html
Задачка из Кормена. Результат записать в массив С. Написал, что-то вроде: int main() { int i,q=0; for(i=n-1;i>=0;i--) { c = a^b^q; q = (q+a+b)>>1; }
C++ задача непонятная Объясните, пожалуйста, что нужно сделать, а то формулу не могу вывести, т.е. что нужно делать и с какой последовательностью. Было бы здорово если объяснение с примером ) подробнее

Показать сообщение отдельно
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208

Матрицы. Классы. Проверка ввода - C++

02.08.2012, 23:40. Просмотров 645. Ответов 4
Метки (Все метки)

Все привет. Нужно реализовать класс матриц. Почти всё сделал. Но не могу понять, что у меня за ошибка при проверке ввода?
Вот вывод и код программы с комментариями. Подскажите, если кто знает, что за цикл непонятного происхождения у меня в консоли?

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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
 
class Matrix{
    int max_val;      //максимальное значение элемента матрицы
    int size;         //размер матрицы
    int ** mtx;       //двумерный массива для хранения матрицы
public:
    Matrix() {};                //конструктор по умолчанию
    Matrix(int s, char type);   //параметрический конструктор
    
    //сумма матриц
    Matrix Add(Matrix op);
 
    //произведение матриц
    Matrix Mul(Matrix op);
    
    //вывод матрицы в консоль
    void Show();
 
    //изменяет значение элемента матрицы с адресом (i,j) на val
    void Correct(int i, int j ,double val){
        mtx[i][j] = val;
    }
    
    //функция доступа для размера матрицы
    int get_size(){ return size; }
    
    //выбор операции
    static char chose_operations();
 
    //выбор способа заполнения 
    static char chose_fill();
   
    //запрос на коректировку элементов матрицы
    bool chose_correct();
 
    //проверка находится ли индекс в пределах размера матрицы
    bool valid_index(int i){ 
        if(i < 0 || i > (size - 1)) return false;
        else return true;
    }
};
 
int main(){
    char ch, fill;
    int size;
    
    setlocale(LC_ALL,"Rus");
 
    for(;;){
        ch = Matrix::chose_operations();
        if(ch == '0') break;
        
        cout << "\n";
 
        do{
            fflush(stdin);
            cout << "Введите размер матриц: ";
            cin >> size;
        }while(cin.rdbuf()->in_avail()!=1);
        
        cout << "\nМатрица 1:\n";
        Matrix op1(size, Matrix::chose_fill());
        for(;;){
            cout << "\nВы ввели матрицу 1:\n";
            op1.Show();
            if(!op1.chose_correct()) break;
        }
        
        cout << "\nМатрица 2:\n";
        Matrix op2(size,Matrix::chose_fill());
        for(;;){
            cout << "\nВы ввели матрицу 2:\n";
            op2.Show();
            if(!op2.chose_correct()) break;
        }
        
        Matrix result;
 
        switch(ch){
        case'1':
            result = op1.Mul(op2);
            cout << "\nРезультат умножения:\n";
            result.Show();  
            break;
        case'2':
            result = op1.Add(op2);
            cout << "Результат сложения:\n";
            result.Show();  
            break;
        }
        
        cout << "\nДля продолжения нажмите любую кнопку.";
        getch();
        system("cls");
    }
}
 
Matrix::Matrix(int s, char type){
    int i,j;    //переменные для доступа к элемента матрицы
        
    //установка максимального значение элементов матрицы
    max_val = 1000;
 
    //установка размера матрицы
    if(s > 10) size = 10;
    else if(s < 1) size = 1;
    else size = s;
 
    //динамическое выделение памяти под двумерный массив для матрицы
    mtx = new int*[size];
    for(i=0; i<size; i++)
        mtx[i] = new int[size];
 
    //заполнение матрицы в соответствие с выбором пользователя
    switch(type){
        case '0':
        case '1':
            for(i=0; i<size; i++)
                for(j=0; j<size; j++)
                    mtx[i][j] = (i == j)? type - 48:0;
            break;
        case 'r':
            srand(time(NULL));
 
            for(i=0; i<size; i++)
                for(j=0; j<size; j++)
                    mtx[i][j] = rand() % max_val;
            break;
        case 'm':
            for(i=0; i<size; i++)
                for(j=0; j<size; j++){
                    do{
                        fflush(stdin);
                        cout << "Введите mtx [" << i << "][" << j << "]: "; 
                        cin >> mtx[i][j];
                        mtx[i][j] = mtx[i][j] % max_val;
                    }while(cin.rdbuf()->in_avail()!=1);
                }
            cout << "\n";
            break;
    }
}
 
Matrix Matrix::Add(Matrix op){
    int i, j;
    Matrix result(size,'0');    //создали матрицу для суммы матриц заполненную нулями
    
    for(i=0; i<size; i++)
        for(j=0; j<size; j++)
            result.mtx[i][j] = mtx[i][j] + op.mtx[i][j];
 
    return result;
}
 
Matrix Matrix::Mul(Matrix op){
    int i, j, k;
    Matrix result(size,'0');    //создали матрицу для произведения матриц заполненную нулями
 
    for(k=0; k<size; k++)
        for(i=0; i<size; i++)
            for(j=0; j<size; j++)
                result.mtx[k][i]+=(mtx[k][j] * op.mtx [j][i]);
 
    return result;
}
 
bool Matrix::chose_correct(){
    int ch,i,j,change_val;
 
    do{
        fflush(stdin);
        cout << "Коректировать элементы матрицы (0-нет, 1-да): ";
        cin >> ch;
    }while(cin.rdbuf()->in_avail()!=1 || ch!=0 && ch!=1);
    
    if(!ch) return false;
    else {
        do{
            fflush(stdin);
            cout << "Введите номер строки: ";
            cin >> i;
        }while(cin.rdbuf()->in_avail()!=1 || !valid_index(i) );
 
        do{
            fflush(stdin);
            cout << "Введите номер столбца: ";
            cin >> j;
        }while(cin.rdbuf()->in_avail()!=1 || !valid_index(j));
 
        do{
            fflush(stdin);
            cout << "Введите значение элемента mtx[" << i << "][" << j << "]: ";
            cin >> change_val;
        }while(cin.rdbuf()->in_avail()!=1);
            
        Correct(i,j,change_val);
    }
}
 
char Matrix::chose_fill(){
    char ch;
    
    cout << "Способ заполнения:\n"
         << " Рандом - r\n"
         << " Вручную - m\n"
         << " Единичная - 1\n";
    
    do{
        fflush(stdin);
        cout << "сделайте выбор: ";
        cin >> ch;
    }while(ch != 'r' && ch != 'm' && ch!= '1' || cin.rdbuf()->in_avail()!=1);
    
    return ch;
}
 
char Matrix::chose_operations(){
    char ch;
 
    cout << "Меню:\n"
        << " 1.Умножение матриц\n"
        << " 2.Сложение матриц\n";
    do{
        fflush(stdin);
        cout << "Выберите действие (0 - выход): ";
        cin >> ch;
    }while(ch < '0' || ch > '2' || cin.rdbuf()->in_avail()!=1);
 
    return ch;
}
 
void Matrix::Show(){
    for(int i=0; i<size; i++){
        for(int j=0; j<size; j++){
            cout.width(6);
            cout.setf(ios::right);
            cout << mtx[i][j] << ' ';
        }
        cout << "\n";
    }
}
Миниатюры
Матрицы. Классы. Проверка ввода  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru