1

Necesito hacer una matriz de 10x10 en el cual voy a rellenar 9x9 y la ultima fila y columna van a ser la suma de la fila:

MATRIZ       .      .  . . . RESULTADO FILAS

5  6  7  2  3    . . . 23

4  2  1  0  6    . . . 13

3  2  7  6  5    . . . 23

7  8  5  2  1    . . . 23

19 18 20 10 15 <<-- RESULTADO COLUMNAS

Pero no me sale, aquí está el código:

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>

    int main()
    {

    int matriz[9][10];
    int horizontal[10];
    int vertical[9];
    int fila,columna;
    int suma=0;
    int i;

    /*Bucle que registra los numeros introducidos de teclado*/
    for(fila=0;fila<9;fila++)
    {
        for(columna=0;columna<10;columna++)
        {
            printf("Introduce un numero para la posicion %d,%d: ",fila,columna);
            scanf("%d",&matriz[fila][columna]);
        }
    }

    /*Bucle que suma las filas y registra el resultado en el vector vertical*/
    for(fila=0;fila<9;fila++)
    {
        suma=0;
        for(columna=0;columna<10;columna++)
        {
            suma+=matriz[fila][columna];
        }
        vertical[fila]=suma;
    }

    /*Recorre el vector vertical y muestra los resultados*/
    for(i=0;i<9;i++)
    {
        printf("%d\n",vertical[i]);
    }

    /*Bucle que suma las columnas y registra el resultado en el vector horizontal*/
    for(columna=0;columna<10;columna++)
    {
        suma=0;
        for(fila=0;fila<9;fila++)
        {
            suma+=matriz[fila][columna];
        }
        horizontal[columna]=suma;
    }

    /*Recorre el vector horizontal y muestra los resultados*/
    for(i=0;i<10;i++)
    {
        printf("%d",horizontal[i]);
    }
    system("PAUSE");
    }**
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
anónimo
  • 13
  • 1
  • 3

2 Answers2

1

Para empezar, no sigues tus propios enunciados:

[…] matriz de 10x10 en el cual voy a rellenar 9x9 y la ultima fila y columna van a ser la suma de la fila.

Código:

int matriz[9][10];

Eso no es una matriz de 10x10 si no una de 9x10.

/*Bucle que registra los numeros introducidos de teclado*/
for(fila=0;fila<9;fila++)
{
    for(columna=0;columna<10;columna++)
    {
        printf("Introduce un numero para la posicion %d,%d: ",fila,columna);
        scanf("%d",&matriz[fila][columna]);
    }
}

Ahí no rellenas 9x9 si no 9x10.


No me queda claro cuál es tu error porque la imagen que creo que querías añadir a la pregunta, no fue añadida. Mi propuesta es que las sumas las hagas en una sola pasada, no en varias:

int matriz[10][10] = {0}; // {0} Inicializa a cero toda la matriz

// Bucle que registra los numeros introducidos de teclado.
for (int fila = 0; fila < 9; ++fila)
{
    for (int columna = 0; columna < 9; ++columna)
    {
        printf("Introduce un numero para la posicion %d,%d: ",fila,columna);
        scanf("%d",&matriz[fila][columna]);
    }
}

// Suma los elementos en la ultima fila/columna
for (int fila = 0; fila < 9; ++fila)
{
    for (int columna = 0; columna < 9; ++columna)
    {
        matriz[9][columna] += matriz[fila][columna];
        matriz[fila][9] += matriz[fila][columna];
    }
}

// Mostrar resultados
for (int fila = 0; fila < 10; ++fila)
{
    for (int columna = 0; columna < 10; ++columna)
    {
        printf("%d ", matriz[fila][columna]);
    }
    printf("\n");
}

Puedes ver el código funcionando en Try it online!.

Otras cosas a tener en cuenta.

  • Incluyes MUCHAS cabeceras innecesarias:

    • Incluyes <iostream> que además de que no estás usando nada de dicha cabecera, es una cabecera de C++ cuando claramente estás programando en C.
    • Incluyes <math.h> y ni usas ni necesitas usar nada de dicha cabecera.
    • Incluyes <string> que además de que no estás usando nada de dicha cabecera, es una cabecera de C++ cuando claramente estás programando en C.
    • Incluyes <stdlib.h> y ni usas ni necesitas usar nada de dicha cabecera.
    • Incluyes <conio.h> y ni usas ni necesitas usar nada de dicha cabecera.
    • Incluyes <windows.h> y ni usas ni necesitas usar nada de dicha cabecera.
    • Incluyes <time.h> y ni usas ni necesitas usar nada de dicha cabecera.

    En resumen, sólo necesitas incluir <stdio.h>.

  • La función main en C, si no recibe parámetros debe tener void en la lista de argumentos. Y debería devolver valor.
  • Las variables deben tener el ámbito más pequeño posible, eso es menos propenso a errores.
  • Favorece el preincremento frente al postincremento.
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
1

Hice una modificación a tu código en el cual se utiliza la misma matriz para calcular las sumas, y de esta forma imprimir el resultado más fácil.

Agregué unos scanf para poner una dimensión "variable" de la matriz y así poder hacer pruebas, ya que es extenuante tener que meter 81 valores cada vez (en tu caso 9 y 9). Si quieres, puedes eliminarlos y fijar int nf=9, nc=9; o al valor que quieras, incluso asimétrico (P.E. 10x9)

#include <stdio.h>

int main() {
    int matriz[50][50];
    int nf, nc; // numero de filas y columnas, sin incluir las de resultado
    int fila, columna, suma;

    printf("Numero de filas: ");
    scanf("%d", &nf);
    printf("Numero de columnas: ");
    scanf("%d", &nc);
    printf("\n");

    /*Bucle que registra los numeros introducidos de teclado*/
    for(fila=0;fila<nf;fila++) {
        for(columna=0;columna<nc;columna++) {
            printf("Introduce un numero para la posicion %d,%d: ",fila,columna);
            scanf("%d",&matriz[fila][columna]);
        }
    }

    /* Sumar horizontalmente y guardar los resultados en la ultima posicion de la matriz */
    for(fila=0; fila<nf; fila++) {
        suma=0;
        for(columna=0; columna<nc; columna++) {
            suma += matriz[fila][columna];
        }
        matriz[fila][columna] = suma;
    }

    /* Sumar verticalmente y guardar los resultados en la ultima posicion de la matriz */
    for(columna=0; columna<=nc; columna++) {
        suma=0;
        for(fila=0; fila<nf; fila++) {
            suma += matriz[fila][columna];
        }
        matriz[fila][columna] = suma;
    }

    /* Imprimir la matriz en pantalla */
    for(fila=0; fila<=nf; fila++) {
        for(columna=0; columna<=nc; columna++) {
            printf("%d\t", matriz[fila][columna]);
        }
        printf("\n");
    }
    printf("\nPrograma terminado, presione una tecla ... ");
    fflush(stdin);
    getchar();
    return 0;
}

[*] Como podrás notar, también se imprime la última celda, el total de los totales.

aeportugal
  • 7,106
  • 2
  • 9
  • 21