Dudas sobre suma de filas y columnas en C++.

Iniciado por Gagy, 9 Marzo 2013, 16:26 PM

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

Gagy

Saludos a todos!
Tengo que hacer un ejercicio en C++ el cuál es una tabla que representa la audiencia de distintas cadenas de televisión los siete días de la semana. Aquí la imagen:
http://imageshack.us/photo/my-images/9/foto090313160927.jpg/

Bien, lo que tengo que hacer es decir qué día es el más visto y qué cadena es la más vista, por lo que tengo que tengo que sumar cada fila y cada columna. Lo que ocurre es que no me suma bien, no sé por qué. Además no sé cómo poner el nombre de las distintas cadenas de televisión en lugar de números, representados en la tabla por 1,2,3,4 y 5.

¿Podríais echarme un cable? Aquí el código que tengo hasta ahora, un código muy básico ya que soy un principiante:
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
char a;
double matriz[][8]={{1   ,   2     ,   1.4   ,    4.6   ,    5     ,     7     ,     6.2   ,   6.2},
                    {2   ,   3     ,   3.6   ,    5     ,    4.5   ,     2.7   ,     5.2   ,   5.2},
                    {3   ,   2.5   ,   3.5   ,    3     ,    6     ,     3     ,     5.1   ,   5.1},
                    {4   ,   3.2   ,   4.5   ,    2     ,    2.2   ,     1     ,     3.5   ,   0.9},
                    {5   ,   1.7   ,   1.3   ,    4.5   ,    4.7   ,     2.8   ,     4.8   ,   3.3}};
int i,j, suma=0;
cout<<"          Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo"<<endl; 
//   //i es el numero de filas
i=0;
while(i<5)

{
//  for(j=0;j<8;j++)
j=0;
while(j<8)
{
suma=suma+matriz[i][j];
cout<<"      "<<matriz[i][j];           
  j++;
}
cout<<"           La suma de la fila "<<i+1<<" es "<<suma<<endl;                   
suma=0;
i++;   
}   
for(j=0;j<7;j++)                                                         
{
  for(i=0;i<5;i++) 

  suma=suma+matriz[i][j];
  cout<<"La suma de la columna "<<j+1<<" es "<<suma<<endl;
  suma=0;
}             
cin>>a;
}

leosansan

#1
Cita de: jps96 en  9 Marzo 2013, 16:26 PM
...........................................
Lo que ocurre es que no me suma bien, no sé por qué


Tienes que declarar suma como float en lugar de int.

Saluditos....

P.D:Tienes una columna de más al sumar. que tendrás que descontar desde los índices, 1 en lugar de cero


amchacon

No sé si ha sido al copiar, pero deberías poner el código un poquito más elegante:

Código (cpp) [Seleccionar]
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
    double matriz[][8]= {
        {1   ,   2     ,   1.4   ,    4.6   ,    5     ,     7     ,     6.2   ,   6.2},
        {2   ,   3     ,   3.6   ,    5     ,    4.5   ,     2.7   ,     5.2   ,   5.2},
        {3   ,   2.5   ,   3.5   ,    3     ,    6     ,     3     ,     5.1   ,   5.1},
        {4   ,   3.2   ,   4.5   ,    2     ,    2.2   ,     1     ,     3.5   ,   0.9},
        {5   ,   1.7   ,   1.3   ,    4.5   ,    4.7   ,     2.8   ,     4.8   ,   3.3}
    };
    int i,j;
    double suma=0;

    cout<<"          Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo"<<endl;

    i=0;

    while(i<5)
    {

        j=0;
        while(j<8)
        {
            suma=suma+matriz[i][j];
            cout<<"      "<<matriz[i][j];
            j++;
        }

        cout<<"           La suma de la fila "<<i+1<<" es "<<suma<<endl;
        suma=0;
        i++;
    }

    for(j=0; j<7; j++)
    {
        for(i=0; i<5; i++)
            suma=suma+matriz[i][j];

        cout<<"La suma de la columna "<<j+1<<" es "<<suma<<endl;
        suma=0;
    }
    cin.get();

    return 0;
}


Muy ingenioso lo del cin>>a del final. Aunque no hace falta que te inventes una variable, también puedes usar el método get:

Código (cpp) [Seleccionar]
cin.get();

El error era que suma tiene que ser double, de lo contrario no coge los decimales.

Además de eso, decirte que la librería #include<cmath> no es necesaria (es para cálculos tipo coseno/seno... Para sumas no hace falta).

Y por último que no se te olvide el return 0 del final ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

#3

No tiene porque ser double, con un float para el tamaño de números que maneja es suficiente.

Con las cadenas incluidas, aunque te queda darle "forma" a la salida:


Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;
int main()
{
char a,cadenas [5][7]={ "A3","TV1" ,"CUATRO" ,"T4 " ,"SEXTA"};;
double matriz[][8]={{1   ,   2     ,   1.4   ,    4.6   ,    5     ,     7     ,     6.2   ,   6.2},
                   {2   ,   3     ,   3.6   ,    5     ,    4.5   ,     2.7   ,     5.2   ,   5.2},
                   {3   ,   2.5   ,   3.5   ,    3     ,    6     ,     3     ,     5.1   ,   5.1},
                   {4   ,   3.2   ,   4.5   ,    2     ,    2.2   ,     1     ,     3.5   ,   0.9},
                   {5   ,   1.7   ,   1.3   ,    4.5   ,    4.7   ,     2.8   ,     4.8   ,   3.3}};
int i,j ;
float suma=0;
cout<<"          Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo"<<endl;
//   //i es el numero de filas
i=0;
while(i<5)

{
//  for(j=0;j<8;j++)
j=0;
while(j<8)
{
if (j>=1)
   suma=suma+matriz[i][j];
if (j==0)
   cout<<"      "<<cadenas[i];
cout<<"      "<<matriz[i][j];
 j++;
}
cout<<"           La suma de la fila "<<i+1<<" es "<<suma<<endl;
suma=0;
i++;
}
for(j=0;j<7;j++)
{
 for(i=0;i<5;i++)

 suma=suma+matriz[i][j];
 cout<<"La suma de la columna "<<j+1<<" es "<<suma<<endl;
 suma=0;
}
return 0;
}


Saluditos!
................

Gagy

Muchiiiisimas gracias a los dos.
Pero leosansan, se me cierra tu código en cuanto lo ejecuto. ¿A qué puede ser debido?

rir3760

Supongo las razón es utilizar un IDE (tal vez Dev-C++, no lo mencionas) que no genera una pausa de forma automática.

Si quieres esa pausa hay varias opciones, por ejemplo una llamada a la funcion get justo antes del final de la función principal:
Código (cpp) [Seleccionar]
int main()
{
   // ...
   
   cin.get();
   return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Gagy

Muchas gracias rir3760! Sí, utilizo Dev-C++  :P

Por cierto, ahora no me suma el primer número de cada fila, seguro que es muy fácil, pero no doy con la tecla jeje
Aver si alguien me echa un cable. Por ahora el código lo tenemos así:

#include <iostream>
     
    using namespace std;
    int main()
    {
    char a,cadenas [5][7]={ "A3","TV1" ,"CUATRO" ,"T4 " ,"SEXTA"};;
    double matriz[][8]={{2     ,  1.4   ,    4.6   ,    5     ,     7     ,     6.2   ,   6.2},
                       {3     ,   3.6   ,    5     ,    4.5   ,     2.7   ,     5.2   ,   5.2},
                       {2.5   ,   3.5   ,    3     ,    6     ,     3     ,     5.1   ,   5.1},
                       {3.2   ,   4.5   ,    2     ,    2.2   ,     1     ,     3.5   ,   0.9},
                       {1.7   ,   1.3   ,    4.5   ,    4.7   ,     2.8   ,     4.8   ,   3.3}};
    int i,j ;
    float suma=0;
    cout<<"          Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo"<<endl;
    //   //i es el numero de filas
    i=0;
    while(i<5)
     
    {
    //  for(j=0;j<8;j++)
    j=0;
    while(j<8)
    {
    if (j>=1)
       suma=suma+matriz[i][j];
    if (j==0)
       cout<<"      "<<cadenas[i];
    cout<<"      "<<matriz[i][j];
     j++;
    }
    cout<<"      La suma de la fila "<<i+1<<" es "<<suma<<endl;
    suma=0;
    i++;
    }
    for(j=0;j<7;j++)
    {
     for(i=0;i<5;i++)
     
     suma=suma+matriz[i][j];
     cout<<"La suma de la columna "<<j+1<<" es "<<suma<<endl;
     suma=0;
    }
    cin.get();
    return 0;
    }
     

amchacon

Cita de: leosansan en  9 Marzo 2013, 17:54 PM

No tiene porque ser double, con un float para el tamaño de números que maneja es suficiente.
Lo he puesto double para que sea del mismo tipo que la matriz.

Cita de: jps96 en  9 Marzo 2013, 19:17 PMPor cierto, ahora no me suma el primer número de cada fila, seguro que es muy fácil, pero no doy con la tecla
Quizás sea por esto:


Código (cpp) [Seleccionar]
while(j<8)
    {
    if (j>=1)
       suma=suma+matriz[i][j];


j mayor o igual a 1?
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

#8
Tal como te lo deje, en mi código sumaba los números de forma correcta, el primer número de cada fila servía para indicar la impresión de la TV en cada caso, no se sumaba. Podrían ser esos primeros números cualesquiera, pero si no los pones no vale el >=1,porque como los tienes ahora se "come" la primera columna.

Saluditos!. ...


P.D Usa las etiquetas GeSHi de C++, así el código sale coloreado y es más fácil de seguir.

Gagy

Tienes razón amchacon! Se me había pasado por alto por completo.
Por último, y para concluir el problema, nos pregunta:
-Qué día es el más visto.
-Qué cadena es la más vista.
Siendo el sábado y A3 las respuestas correspondientes, con 32'4 y 24'8 millones de espcectadores.
Entonces, ¿cómo podría el programa saber cuál es el número mayor de cada fila y cada columna? ¿Alguna explicación?