Imprimir bien la matriz

Iniciado por QuieroAprender, 28 Marzo 2020, 04:04 AM

0 Miembros y 1 Visitante están viendo este tema.

QuieroAprender

Hola buenas noches, podrían decirme por favor, porque esto me imprime las posiciones y no los valores que deberían.
#include<stdio.h>
#include<stdlib.h>
    main()
    { int m,n,p,o,x=0,y=0;
        printf("......Primera matriz (A).....\n Fila:");
        scanf("%d",&m);
        printf(" Columnas:");
        scanf("%d",&n);
        printf("......Segunda matriz (B).....\n Fila:");
        scanf("%d",&p);
        printf(" Columnas:");
        scanf("%d",&o);
        printf("\n Por favor introduzca los elementos de (A):\n");
        if(n!=p){
            printf("No cumple la condicion de multiplicacion");
        }else{
    int a[20][20],b[20][20],c[20][20],S,mul=0;
        for(x=1;x<=m;x++)
            for(y=1;y<=n;y++)
        {
            printf("A[%d][%d]:",x,y);
            scanf("%d",&a
  • [y]);
            }
            printf("Introduzca los valores de (B):\n");
           for(x=1;x<=p;x++)
                for(y=1;y<=o;y++)
            {
                printf("B[%d][%d]:",x,y);
                scanf("%d",&b
  • [y]);
            }
            for(x=1;x<=m;x++)
                for(y=1;y<=o;y++)
                    for(S=1;S<=o;S++)
    {


                mul=mul+(a
  • *b[y]);
                c
    • [y]=mul;}

              system("cls");
              printf("....Matriz resultante....\n");
              for(x=1;x<=m;x++)
              {   printf("\n");
                  for(y=1;y<=o;y++)
                      {printf("%d",c
    • [y]);
                          printf("\n");
              }
          }}}


K-YreX

Utiliza las etiquetas de Código GeSHi para insertar tu código. Las puedes seleccionar encima del cuadro de texto en el desplegable que dice Código GeSHi (selecciona las del lenguaje de programación apropiado, en tu caso C). Si te fijas has creado listas y tachados en tu código por utilizar letras entre corchetes sin ponerlo dentro de etiquetas de Código GeSHi. Así es muy complicado poder ver bien tu código.

Veo varias cosas importantes:
  • Deberías utilizar nombres de variables descriptivos. Así no hay manera de acordarse de qué representa cada variable.
  • Primero muestras el mensaje para introducir los valores de A y después compruebas que las matrices sean válidas. Hazlo mejor en el orden inverso.
  • Utiliza constantes para guardar los números sueltos que aparezcan en el programa. Harán tu código más fácil de modificar.

    #include <stdio.h>
    //...
    #define MAX_SIZE 20
    //...
    int main(){ // LA FUNCION MAIN RETORNA UN VALOR ENTERO (INT) NORMALMENTE 0 CUANDO TODO VA BIEN
        //...
        int matriz1[MAX_SIZE][MAX_SIZE]; // Uso de la constante para los tamaños
        //...
        return 0;
    }


  • Los índices en C/C++ (y en otros lenguajes de programación) empiezan en 0. El primer elemento de un array o de una matriz es el elemento 0, no el 1.
  • Con respecto al anterior punto, el último elemento de un array de longitud n, no es array[n] sino array[n-1]. En tus bucles estás accediendo a posiciones fuera de memoria.

    Ejemplo de programa con matriz:

    #include <stdio.h>

    #define MAX_SIZE 20

    int main(){
        int matriz[MAX_SIZE][MAX_SIZE];
        int filasUtiles = 10, columnasUtiles = 10; // Lo defino aqui aunque lo suyo seria pedirlo por teclado ya que se presupone que no conocemos la longitud util de la matriz aun
        // Si se pide por teclado seria conveniente comprobar que dichos valores no son superiores a MAX_SIZE ya que sino tendriamos un problema

        for(int i = 0; i < filasUtiles; ++i){
            for(int j = 0; j < columnasUtiles; ++j){
                printf("Introduce el valor del elemento [" + i + "][" + j + "]: ");
                scanf("%d", &matriz[i][j]);
            }
        }

        printf("\n***** Matriz resultante: *****\n");
        for(int i = 0; i < filasUtiles; ++i){
            for(int j = 0; j < columnasUtiles; ++j){
                printf("%d\t", matriz[i][j]); // \t indica un tabulador. Tambien puedes usar un espacio simplemente
            }
            printf("\n");
        }

        return 0; // Si esta linea no se pone, se pondra implicitamente. Pero la funcion main() siempre devolvera un int.
    }
Código (cpp) [Seleccionar]

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