Ayuda, sumatoria de filas y columnas de arreglo en C

Iniciado por luis9430, 2 Enero 2019, 03:05 AM

0 Miembros y 2 Visitantes están viendo este tema.

luis9430

tengo un arreglo bidimensional con la funcion rand en el que suma el total de filas pero no se como hacer para que tambien sume el total de columnas

en la fila 16 es donde quiero agregar el total de cada columna

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int arr[16][12],x,y,acu;



main ()

{



printf("\n");
printf("vendedor vento  Jetta   Polo   Teramont Beetle  Golf    Gol    Passat    Up!   Tiguan  Touareg  TOTAL ");
printf("\n");

srand(time(NULL));
for(x=0;x<15;x++)
for(y=0;y<12;y++)

arr[x][y]=1+rand()%9;


for(x=0;x<15;x++){

   acu=0;
for(y=0;y<12;y++)
acu=acu+arr[x][y];
arr[x][11]=acu;
   }



for(x=0;x<15;x++){
printf("\n");

for(y=0;y<12;y++)
printf("\t$%d", arr[x][y]);

}
getchar();
return 0;
}

K-YreX

Lo primero de todo coloca tu código entre etiquetas GeSHi, ya que como puedes comprobar tú mismo ese código es ilegible. Y también hay alguna instrucción en dos líneas, corrige eso para que se pueda entender mejor.

Para sumar cada columna tienes que pensar la relación que tiene una columna (la segunda coordenada es siempre la misma). Entonces dos bucles anidados, el exterior se mueve por las columnas y el interior por las filas, y una vez que acaba el bucle interior y se ha ido sumando cada valor, se almacena al final de esa columna. Suerte :-X

PD: No uses la librería <conio.h> ya que no es estándar. Sólo la necesitas para usar <getch()>. Puedes sustituir <getch()> por <getchar()> y así ya no necesitas incluir esa librería.
Código (cpp) [Seleccionar]

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

luis9430

ya lo modifique, soy nuevo en esto, intente realizarlo y al colocarlo me da 0 la suma de cada columna

MAFUS

Dónde dices for(y=0;y<12;y++)
  acu=acu+arr[x][y];

Debe decir y<11 porque sino también sumarán la propia suma.

Para la suma de las columnas es similar pero en vez de moverte primero por filas y dentro de ellas por columnas, primero debes moverte por columnas y dentro de ellas por filas.

luis9430

Gracias! , pero en columnas he intentado de todo y me sigue saliendo 0 en la suma de todas ellas

K-YreX

Muestra cómo estás haciendo la suma por columnas para poder ver el error...
Código (cpp) [Seleccionar]

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

luis9430

Cita de: YreX-DwX en  2 Enero 2019, 22:28 PM
Muestra cómo estás haciendo la suma por columnas para poder ver el error...


este seria para la suma de columnas , lo que busco es que en la fila 16 salga la sumatoria

for(x=0;x<15;x++){

    acu=0;
for(y=0;y<11;y++)
acu=acu+arr[x][y];
arr[y][15]=acu;
              }

al final me queda asi


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

int arr[16][12],x,y,acu,i,acu1;
int maximo[16];


main ()

{



printf("\n");
printf("vendedor vento  Jetta   Polo   Teramont Beetle  Golf    Gol    Passat    Up!   Tiguan  Touareg  TOTAL ");
printf("\n");

srand(time(NULL));
for(x=0;x<15;x++)

for(y=0;y<11;y++)



arr[x][y]=1+rand()%9;

//suma de filas
for(x=0;x<15;x++){

    acu=0;
for(y=0;y<11;y++)
acu=acu+arr[x][y];
arr[x][11]=acu;

}


//suma de columnas
for(x=0;x<15;x++){

    acu=0;
for(y=0;y<11;y++)
acu=acu+arr[x][y];
arr[y][15]=acu;

}



//impresion
for(x=0;x<16;x++){
printf("\n");

for(y=0;y<12;y++)
printf("\t$%d", arr[x][y]);
                             
}


getch();
return 0;
}



K-YreX

La suma de columnas está mal porque si te fijas tienes una matriz de 12 columnas y tú estás intentando guardar la suma en la columna 15...
Código (cpp) [Seleccionar]

for(x=0;x<15;x++){
    acu=0;
    for(y=0;y<11;y++)
        acu=acu+arr[x][y];
    arr[y][15]=acu; // Esto siempre vale arr[11][15]
}


Tienes que pensar bien la relación de los índices. Por ejemplo la suma de filas lo que hace es sumar la fila x y lo guarda en la posición matriz
  • [11]. Pero la suma de columnas, suma la columna x y lo estás guardando en la posición matriz[11][15]. Entonces tienes dos problemas, primero que siempre sobrescribes la misma posición y segundo que esa posición está fuera de la matriz.

    PD: Si quieres sumar una columna y guardar la suma en la última posición de esa columna tienes que dejar la última fila sin valores al igual que la última columna.
    Código (cpp) [Seleccionar]

    const int FILAS = 16, COLUMNAS = 12;
    int i, j;
    int matriz[FILAS][COLUMNAS];

    for(i = 0; i < FILAS-1; i++) // no escribimos en la ultima fila
        for(j = 0; j < COLUMNAS-1; j++) // no escribimos en la ultima columna
            matriz[i][j] = valor;

    // suma de filas
    for(i = 0; i < FILAS-1; i++){ // este for recorre las filas desde la 0 hasta la 14 incluida
        suma = 0;
        for(j = 0; j < COLUMNAS-1; j++) // este for recorre las columnas desde la 0 hasta la 10 incluida
            suma += matriz[i][j];
        matriz[i][j] = suma; // guardamos en la posicion [x][11] la suma de la fila x

    // tambien se puede hacer sin usar una variable suma
    for(i = 0; i < FILAS-1; i++){
        matriz[i][COLUMNAS-1] = 0; // ponemos la ultima posicion de la fila a 0...
        for(j = 0; j < COLUMNAS-1; j++)
            matriz[i][COLUMNAS-1] += matriz[i][j]; // ... y vamos acumulando cada posicion de esa fila


    La parte de sumar las columnas te la dejo a ti para que practiques. Suerte :-X
    Pista: Tienes que darle la vuelta a los <for> y guardar en la posición [15]
  • la suma de la columna x... :silbar:
Código (cpp) [Seleccionar]

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

luis9430

muchisimas gracias esta claro lo que hay que hacer  ;D Solo una ultima duda , " = valor "
que se supone que seria?


for(i = 0; i < FILAS-1; i++) // no escribimos en la ultima fila
    for(j = 0; j < COLUMNAS-1; j++) // no escribimos en la ultima columna
        matriz[i][j] = valor;


K-YreX

<valor> es el número que vayas a guardar, en tu caso un número aleatorio. He puesto <valor> para no escribirlo todo.
Código (cpp) [Seleccionar]

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