Dev - C++ - Matriz ejercicio con menú en clases

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Matriz ejercicio con menú en clases

Publicado por Mateo (3 intervenciones) el 07/02/2019 21:00:41
Buenas, necesito ayuda con esto, es que no lo entiendo y no sé si corra bien por qué tengo problemas con mi eclipse y dev c++, soy novato en esto.

*Desarrolle un programa que emplee clases para registrar y administrar "matrices". Para ello el mismo debe mostrar un menú con las siguientes opciones:

1)Leer Matriz por teclado
2)Actualizar matriz
3) mostrar matriz
4)Sumar matrices
5) Producto de una matriz con una escalar
6) Producto de una matriz
7) Matriz inversa
8) Identidad de la matriz

Los requisitos que me piden son:
que como máximo sea 4x4
y que puedo usar cualquier libreria menos math.h

Por favor, ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Matriz ejercicio con menú en clases

Publicado por Alfil (1444 intervenciones) el 08/02/2019 06:49:39
Trata de escribir algún código (aunque sea incorrecto) y trataremos de corregirlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Matriz ejercicio con menú en clases

Publicado por Mateo (3 intervenciones) el 11/02/2019 22:42:41
Lo estoy haciendo en clases, pero cada que pongo dentro del switch algo así:
1
2
3
4
5
6
7
8
9
10
switch(opcion)
{
case '1':
system("cls");
cout << "Has elegido Leer Matriz.\n";
void matrices::leermatriz();{
cout<<"Ingrese su matriz"<<endl;
cin>>matriz[4][4];
break;
}

Me lo coloca como un error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Matriz ejercicio con menú en clases

Publicado por Mateo (3 intervenciones) el 14/02/2019 06:03:12
He hecho esto, pero el eclipse sigue sin correrlo, no sé si sea que lo tengo mal instalado, pero me da errores que no debería
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Matriz ejercicio con menú en clases

Publicado por Alfil (1444 intervenciones) el 14/02/2019 18:01:49
No puedes meter la definición de la función dentro del switch ni dentro de int main ..

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
....
....
 
void matrices::leermatriz() {
 
    cout << "Ingrese su matriz" <<endl;
    cin >> matriz[4][4];
}
 
int main() {
    ....
    ....
    switch(opcion) {
	case 1:
		system("cls");
		cout << "Has elegido Leer Matriz.\n";
		leermatriz();
		break;
	case 2:
		...
		...
		break;
 
        default:
                break;
 
    }
    ....
    ....
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Matriz ejercicio con menú en clases

Publicado por Alfil (1444 intervenciones) el 14/02/2019 20:13:54
Esta sin terminar, tiene un par de procedimientos pendientes de realizar (Actualizar e Inversa) que te los dejo para que trates de completarlos tu mismo. También está pendiente de optimizar el uso de vector y de la variable estática cuentaMatriz para poder utilizar múltiples matrices y seleccionar sobre que matriz operar.

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
#include <iostream>
#include <cstdlib>
#include <vector>
 
using namespace std;
 
class Matriz {
public:
    Matriz();
    Matriz( int, int );
    Matriz( const Matriz &m );
 
    Matriz operator+ ( const Matriz &m2 );
    Matriz operator* ( const Matriz &m2 );
 
    void LeerMatriz();
    void ActualizarMatriz();    //! Pendiente
    void ImprimirMatriz();
    void EscalarMatriz( int );
    void InversaMatriz();       //! Pendiente
    bool IdentidadMatriz();
 
    static int obtenerCuentaMatriz();
private:
    int **m_matriz;
    int cols;
    int rows;
    static int cuentaMatriz;
 
};
 
int Matriz::cuentaMatriz = 0;
 
//! constructor por defecto
Matriz::Matriz(){
    cols = 4;
    rows = 4;
}
 
//! constructor cópia
Matriz::Matriz( const Matriz &m ){ *this = m; }
 
//! constructor por parámetro
Matriz::Matriz( int c , int r ){
    (c < 0 || c > 4 ? 4 : c );
    (r < 0 || r > 4 ? 4 : r );
    cols = c;
    rows = r;
    m_matriz = new int*[rows];
 
    for (int i = 0; i < rows; i++) {
        m_matriz[i] = new int[cols];
    }
}
 
//! Suma de matrices
Matriz Matriz::operator+ (const Matriz &m2)
{
    Matriz matriz_result(rows, cols);
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            matriz_result.m_matriz[i][j] = m_matriz[i][j] + m2.m_matriz[i][j];
        }
    }
    return matriz_result;
}
 
//! Multiplicación de matrices
Matriz Matriz::operator* (const Matriz &m2)
{
    Matriz matriz_result(rows, m2.cols);
    int total;
 
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < m2.cols; j++) {
            for (int k = 0; k < cols; k++) {
                total += (m_matriz[i][k] * m2.m_matriz[k][j]);
            }
            matriz_result.m_matriz[i][j] = total;
            total = 0;
        }
    }
    return matriz_result;
}
 
void Matriz::LeerMatriz(){
 
    int elemento;
    cout << "\n";
    for (int i = 0; i < rows; i++) {
        cout << "Fila " << i + 1 << endl;
        for (int j = 0; j < cols; j++) {
            cout << "Ingresa el elemento " << j + 1 << ": ";
            cin >> elemento;
            m_matriz[i][j] = elemento;
        }
        cout << endl;
    }
    cuentaMatriz++;
}
 
void Matriz::ImprimirMatriz() {
 
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cout << m_matriz[i][j] << " ";
        }
        cout << "\n\n";
    }
    cout << "\n" << endl;
 
}
 
void Matriz::EscalarMatriz( int n ) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            m_matriz[i][j] = m_matriz[i][j] * n;
        }
    }
    cout << "Se multiplicó a la Matriz por el escalar " << n << endl;
}
 
bool Matriz::IdentidadMatriz() {
    if (rows != cols) {
        return false;
    }
 
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (i == j) {
                if (m_matriz[i][j] != 1)
                    return false;
            } else {
                if (m_matriz[i][j] != 0)
                    return false;
            }
        }
    }
    return true;
}
 
int Matriz::obtenerCuentaMatriz() { return cuentaMatriz; }
 
int OpMenu(){
 
    int op;
 
    do{
        cout << "\n"
             << "          Matrices\n"
             << "===============================\n"
             << "1.- Leer ............ (Pulsa 1)\n"
             << "2.- Actualizar ...... (Pulsa 2)\n"
             << "3.- Iprimir ......... (Pulsa 3)\n"
             << "4.- Sumar ........... (Pulsa 4)\n"
             << "5.- Multiplicar ..... (Pulsa 5)\n"
             << "6.- Escalar ......... (Pulsa 6)\n"
             << "7.- Inversa ......... (Pulsa 7)\n"
             << "8.- Identidad ....... (Pulsa 8)\n"
             << "9.- Salir ........... (Pulsa 9)\n"
             << "===============================\n"
             << "INTRODUZCA UNA OPCION (1-9): ";
        cin >> op;
 
        if( cin.fail() || cin.bad() ){
            op = 0;
            cin.clear();
            cin.ignore(80, '\n');
        }
 
    }while( op < 1 || op > 9 );
 
    cout << "\n";
 
    return op;
}
 
int main(){
 
    vector<Matriz> v;
    int opcion;
    int escalar;
    int c, r;
 
    cout << "Número de columnas de la Matriz: ";
    cin >> c;
    cout << "Número de filas de la Matriz: ";
    cin >> r;
 
    Matriz m(c, r);
    Matriz t(c, r);
 
    do{
        opcion = OpMenu();
 
        switch( opcion ){
            case 1:
               m.LeerMatriz();
               v.push_back(m);
               break;
            case 2:
 
                break;
            case 3:
                m.ImprimirMatriz();
                break;
            case 4:
                t = v[0] + v[1];
                t.ImprimirMatriz();
                break;
            case 5:
                t = v[0] * v[1];
                t.ImprimirMatriz();
                break;
            case 6:
                cout << "Escalar: ";
                cin >> escalar;
                m.EscalarMatriz(escalar);
                m.ImprimirMatriz();
                break;
            case 7:
 
                break;
            case 8:
                cout << (m.IdentidadMatriz() ? "" : "No") << " Es identidad." << endl;
                break;
            default:
                break;
        }
 
    }while( opcion != 9 );
 
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar