elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] Matriz resultante bien calculada pero mal presentada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Matriz resultante bien calculada pero mal presentada  (Leído 6,856 veces)
snoopty

Desconectado Desconectado

Mensajes: 86


Ver Perfil
[C++] Matriz resultante bien calculada pero mal presentada
« en: 8 Diciembre 2021, 12:33 pm »

Hola ! La sig Matriz C resultante del producto de A ( 2 Filas, 3 Columnas ) * B ( 3 Filas, 4 Columnas ) arroja los Valores correctos, pero no logro que la Matriz C salga por pantalla como debe ser, presentada bajo 2 Filas y 4 Columnas ya que es Condición del Producto entre dos Matrices que la Matriz Resultante tenga la misma cantidad de Columnas qude la 1 er Matriz ( Y )   la misma cantidad de Filas qude la 2 da Matriz .
//////
Por otra parte, si me explicaran porqué " el FOR de k " sólo tiene en cuenta las Columnas de A;
¿ No debería de haber a continuación " un FOR de k que recorra las Filas de " B " ????  
Lo digo porque:
"i" ( Y ) "j" recorren las Filas y Columnas de " C " ........ y ...
"k" realiza cada Operación recorriendo TANTO las Columnas de " A " ....
...... PERO TAMBIÉN las Filas de " B " !
El Comentario al lado " del FOR de k " lo tomé del razonamiento de quien explicó - súper didácticamente - el Código, pero, " que haya un único FOR de k " no lo entiendo

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main( ){
  5.  
  6.  short int fa, ca, fb, cb, i, j, k;
  7.  
  8.  cout << "Ingrese Nro de Filas de la 1er Matriz: ";
  9.  cin >> fa;
  10.  
  11.  cout << "Ingrese Nro de Columnas de la 1er Matriz: ";
  12.  cin >> ca;
  13.  
  14.  
  15.  cout << "Ingrese Nro de Filas de la 2da Matriz: ";
  16.  cin >> fb;
  17.  
  18.  cout << "Ingrese Nro de Columnas de la 2da Matriz: ";
  19.  cin >> cb;
  20.  
  21.  // DECLARACIÓN DE LAS TRES MATRICES
  22.  int A[fa][ca];
  23.  int B[fb][cb];
  24.  int C[fa][cb];
  25.  
  26.  
  27.  if ( ca == fb ) { // Si se cumple la Condición " 1 ) " del Producto e/ 2 Matrices se procede ...
  28.    // Ingresar Valores de la matriz A
  29.    cout << "\n\tIntroduzca los valores de la 1er Matriz: " << endl;
  30.  
  31.    for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
  32.      // " i < fa " Porque fa va desde fa[0] hasta fa[\0] x lo q a todas las Filas de A le " sobrará fa[\0] "
  33.      for ( j = 0; j < ca; j++ ) { // BUCLE para las Columnas " j " de A
  34.      // " j < ca " Porque ca va desde ca[0] hasta ca[\0] x lo q a todas las Columnas de A le " sobrará ca[\0] "
  35.        cout << "A["<<i<<"]["<<j<<"] :";
  36.        cin >> A[i][j];
  37.      }
  38.  
  39.    // Ingresar Valores de la matriz B
  40.    cout << "\n\tIntroduzca los valores de la 2da Matriz: " << endl;
  41.  
  42.    for ( i = 0; i < fb; i++ ) // BUCLE para las Filas " i " de B
  43.      for ( j = 0; j < cb; j++ ) { // BUCLE para las Columnas " j " de B
  44.        cout << "B["<<i<<"]["<<j<<"] :";
  45.        cin >> B[i][j];
  46.      }
  47.  
  48.    // Cálculo de la Matriz C = A * B  ( C conformada a partir de Filas de A ( Y ) Columnas de B
  49.    for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
  50.      for ( j = 0; j < cb; j++ ) { // BUCLE para las Columnas " j " de B
  51.        C[i][j] = 0;
  52.  
  53.        for ( k = 0; k < ca; k++ ) // PORQUÉ ????? sólo Col de A ...... y las Filas de B ? ; no era que k recorre ambas ??
  54.          C [i][j]  =  C [i][j]  +  ( A [i][k]  *  B [k][j] );
  55.      }
  56.  
  57.    cout << endl;
  58.  
  59.    for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
  60.      for ( j = 0; j < cb; j++ ) // BUCLE para las Columnas " j " de B
  61.        cout << C[i][j] << " ";
  62.  
  63.  } else cout << "\n\tLA MULTIPLICACIÓN ENTRE AMBAS MATRICES NO SE PUEDE REALIZAR" << endl;
  64.  
  65.  return 0;
  66. }

Gracias x leer el mensaje.



MOD: Modificado el asunto del tema. No escribir todo en mayúsculas.
MOD: Indentar el código para que sea legible.


« Última modificación: 8 Diciembre 2021, 13:06 pm por K-YreX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: [C++] Matriz resultante bien calculada pero mal presentada
« Respuesta #1 en: 8 Diciembre 2021, 13:20 pm »

La matriz no se muestra correctamente porque eso no es automático, tienes que hacerlo tú.

En el último for() estás mostrando todos los valores en una línea seguido de un espacio entre cada elemento.
Si quieres que se muestre como una matriz, tienes que agregar un salto de línea después de mostrar cada fila.

Sobre la otra pregunta. Imagina las matrices:
Código:
A = | 1  2 |          B = | 5  6 |
    | 3  4 |              | 7  8 |
Si hacemos C = A * B, el resultado es:
Código:
C = | (1 * 5 + 2 * 7)    (1 * 6 + 2 * 8) |
    | (3 * 5 + 4 * 7)    (3 * 6 + 4 * 8) |
Cada vez que avanzamos una columna de la matriz A (1 -> 2 | 3 -> 4) también avanzamos una fila de la matriz B (5 -> 7 | 6 -> 8)
Al avanzar ambas a la vez, sólo se utiliza un for(). Como ca == fb, da igual hacer el for() usando ca o fb como condición. Si te fijas la K se utiliza tanto en A como en B pero en A hace variar las columnas y en B hace variar las filas.

Si se usase otro for() dentro para B, entonces estarías haciendo combinatoria (todos con todos) porque no avanzarías filas (de B) y columnas (de A) a la vez:
Código:
(1 * 5 + 1 * 7 + 2 * 5 + 2 * 7)    (1 * 6 + 1 * 8 + 2 * 6 + 2 * 8)
(3 * 5 + 3 * 7 + 4 * 5 + 4 * 7)    (3 * 6 + 3 * 8 + 4 * 6 + 4 * 8)


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
snoopty

Desconectado Desconectado

Mensajes: 86


Ver Perfil
Re: [C++] Matriz resultante bien calculada pero mal presentada
« Respuesta #2 en: 9 Diciembre 2021, 09:24 am »

2da ) Respuesta : Enorme explicación. Clara y precisa. Gracias !
Respecto de la 1era ) veré entonces cómo resolverlo. Saludos !

Ya logré el formato de Salida correcto. Faltaban ciertas llaves, y .... :
Código
  1. for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
  2. {
  3. for ( j = 0; j < cb; j++ ) // BUCLE para las Columnas " j " de B
  4. {
  5.  
  6. cout << C[i][j] << " ";
  7. }
  8. cout << endl; // SALTO DE LÍNEA DEL FOR DE LAS FILAS
  9.              // p q quede un " blank " e/ la 1er FILA y la 2da
  10. }
  11. }

MOD: No hacer doble post: Modificar el mensaje anterior para agregar lo que se quiera.
« Última modificación: 9 Diciembre 2021, 14:36 pm por K-YreX » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Todo bien con mi prueba de SVCD pero....
Multimedia
mike angi 6 3,216 Último mensaje 17 Febrero 2004, 19:26 pm
por mike angi
teclado matriz necesito electonico,pago bien
Electrónica
electrik 1 3,293 Último mensaje 23 Junio 2007, 22:33 pm
por skapunky
Me han jodido pero bien.... « 1 2 »
Dudas Generales
Loonatik 15 7,127 Último mensaje 16 Octubre 2010, 16:57 pm
por тαптяα
matriz 5*5 no me da error pero no compila « 1 2 »
Programación C/C++
creiko 11 5,118 Último mensaje 29 Mayo 2016, 00:04 am
por creiko
Imprimir bien la matriz
Programación C/C++
QuieroAprender 1 2,360 Último mensaje 28 Marzo 2020, 04:36 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines