Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Gagy en 9 Marzo 2013, 16:26 pm



Título: Dudas sobre suma de filas y columnas en C++.
Publicado por: Gagy en 9 Marzo 2013, 16:26 pm
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:
Código:
#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;
}


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: leosansan en 9 Marzo 2013, 16:52 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....(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

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



Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: amchacon en 9 Marzo 2013, 17:33 pm
No sé si ha sido al copiar, pero deberías poner el código un poquito más elegante:

Código
  1. #include <iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int main()
  5. {
  6.    double matriz[][8]= {
  7.        {1   ,   2     ,   1.4   ,    4.6   ,    5     ,     7     ,     6.2   ,   6.2},
  8.        {2   ,   3     ,   3.6   ,    5     ,    4.5   ,     2.7   ,     5.2   ,   5.2},
  9.        {3   ,   2.5   ,   3.5   ,    3     ,    6     ,     3     ,     5.1   ,   5.1},
  10.        {4   ,   3.2   ,   4.5   ,    2     ,    2.2   ,     1     ,     3.5   ,   0.9},
  11.        {5   ,   1.7   ,   1.3   ,    4.5   ,    4.7   ,     2.8   ,     4.8   ,   3.3}
  12.    };
  13.    int i,j;
  14.    double suma=0;
  15.  
  16.    cout<<"          Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo"<<endl;
  17.  
  18.    i=0;
  19.  
  20.    while(i<5)
  21.    {
  22.  
  23.        j=0;
  24.        while(j<8)
  25.        {
  26.            suma=suma+matriz[i][j];
  27.            cout<<"      "<<matriz[i][j];
  28.            j++;
  29.        }
  30.  
  31.        cout<<"           La suma de la fila "<<i+1<<" es "<<suma<<endl;
  32.        suma=0;
  33.        i++;
  34.    }
  35.  
  36.    for(j=0; j<7; j++)
  37.    {
  38.        for(i=0; i<5; i++)
  39.            suma=suma+matriz[i][j];
  40.  
  41.        cout<<"La suma de la columna "<<j+1<<" es "<<suma<<endl;
  42.        suma=0;
  43.    }
  44.    cin.get();
  45.  
  46.    return 0;
  47. }

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
  1. 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 ;)


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: 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.

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


Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int main()
  5. {
  6. char a,cadenas [5][7]={ "A3","TV1" ,"CUATRO" ,"T4 " ,"SEXTA"};;
  7. double matriz[][8]={{1   ,   2     ,   1.4   ,    4.6   ,    5     ,     7     ,     6.2   ,   6.2},
  8.                    {2   ,   3     ,   3.6   ,    5     ,    4.5   ,     2.7   ,     5.2   ,   5.2},
  9.                    {3   ,   2.5   ,   3.5   ,    3     ,    6     ,     3     ,     5.1   ,   5.1},
  10.                    {4   ,   3.2   ,   4.5   ,    2     ,    2.2   ,     1     ,     3.5   ,   0.9},
  11.                    {5   ,   1.7   ,   1.3   ,    4.5   ,    4.7   ,     2.8   ,     4.8   ,   3.3}};
  12. int i,j ;
  13. float suma=0;
  14. cout<<"          Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo"<<endl;
  15. //   //i es el numero de filas
  16. i=0;
  17. while(i<5)
  18.  
  19. {
  20. //  for(j=0;j<8;j++)
  21. j=0;
  22. while(j<8)
  23. {
  24. if (j>=1)
  25.    suma=suma+matriz[i][j];
  26. if (j==0)
  27.    cout<<"      "<<cadenas[i];
  28. cout<<"      "<<matriz[i][j];
  29.  j++;
  30. }
  31. cout<<"           La suma de la fila "<<i+1<<" es "<<suma<<endl;
  32. suma=0;
  33. i++;
  34. }
  35. for(j=0;j<7;j++)
  36. {
  37.  for(i=0;i<5;i++)
  38.  
  39.  suma=suma+matriz[i][j];
  40.  cout<<"La suma de la columna "<<j+1<<" es "<<suma<<endl;
  41.  suma=0;
  42. }
  43. return 0;
  44. }
  45.  

Saluditos!
................(http://st.forocoches.com/foro/images/smilies/dancer2.gif)


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: Gagy en 9 Marzo 2013, 18:00 pm
Muchiiiisimas gracias a los dos.
Pero leosansan, se me cierra tu código en cuanto lo ejecuto. ¿A qué puede ser debido?


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: rir3760 en 9 Marzo 2013, 19:03 pm
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
  1. int main()
  2. {
  3.   // ...
  4.  
  5.   cin.get();
  6.   return 0;
  7. }

Un saludo


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: Gagy en 9 Marzo 2013, 19:17 pm
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í:

Código:
#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;
    }
     


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: amchacon en 9 Marzo 2013, 19:44 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.

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
Quizás sea por esto:


Código
  1. while(j<8)
  2.    {
  3.    if (j>=1)
  4.       suma=suma+matriz[i][j];

j mayor o igual a 1?


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: leosansan en 9 Marzo 2013, 20:04 pm
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.
(http://)
Saluditos!. ...
(http://www.planetsmilies.com/avatars/simpsons/simpsons0001.gif)

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


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: Gagy en 9 Marzo 2013, 20:07 pm
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?


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: amchacon en 9 Marzo 2013, 20:20 pm
Entonces, ¿cómo podría el programa saber cuál es el número mayor de cada fila y cada columna? ¿Alguna explicación?
Código para saber el mayor número de un vector (pongamos que es de 10 numeros):

Código
  1. int Mayor = Vector[0]; // Suponemos que fuese el primero
  2.  
  3. for (int i = 1; i < 10;i++) // Recorremos el vector
  4. {
  5.   if (Mayor > Vector[i]) // Si este elemento es mayor que el que tenemos
  6.         Mayor = Vector[i]; // Lo marcamos entonces como el mayor
  7. }
  8.  
  9. // Fin, en la variable Mayor tendremos el numero que buscamos
  10.  

Siendo Vector el vector correspondiente.


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: Gagy en 9 Marzo 2013, 20:39 pm
Gracias amchacon!
Pero lo de Vector no lo he comprendido bien porque me sale error.
Por ejemplo, para referirnos a la primera fila habría que sustituir Vector por...?
¡Gracias por vuestra ayuda a un principiante!  :P


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: amchacon en 9 Marzo 2013, 21:26 pm
Gracias amchacon!
Pero lo de Vector no lo he comprendido bien porque me sale error.
Por ejemplo, para referirnos a la primera fila habría que sustituir Vector por...?
¡Gracias por vuestra ayuda a un principiante!  :P
Con vector me refiero a una cosa asi:

Código
  1. int Numeros[10];

Numeros sería un vector.


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: leosansan en 9 Marzo 2013, 22:37 pm
Tienes razón amchacon! Se me había pasado por alto por completo.
Por último............................. ¿cómo podría el programa saber cuál es el número mayor de cada fila y cada columna? ¿Alguna explicación?

Por ejemplo así:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int main()
  5. {
  6.    char diasSemana [7][10] ={"LUNES", "MARTES", "MIERCOLES", "JUEVES", "VIERNES", "SABADO","DOMINGO"};
  7.    char a,cadenas [5][8]={ "A3","TV1" ,"CUATRO" ,"T4 " ,"SEXTA"};;
  8.    float matriz[][8]={{1   ,   2     ,   1.4   ,    4.6   ,    5     ,     7     ,     6.2   ,   6.2},
  9.                        {2   ,   3     ,   3.6   ,    5     ,    4.5   ,     2.7   ,     5.2   ,   5.2},
  10.                        {3   ,   2.5   ,   3.5   ,    3     ,    6     ,     3     ,     5.1   ,   5.1},
  11.                        {4   ,   3.2   ,   4.5   ,    2     ,    2.2   ,     1     ,     3.5   ,   0.9},
  12.                        {5   ,   1.7   ,   1.3   ,    4.5   ,    4.7   ,     2.8   ,     4.8   ,   3.3}};
  13.    int i,j ,indice;
  14.    float suma=0,mayor=0;
  15.    for(i=0;i<7;i++)
  16.        cout<<"    "<<diasSemana [i];
  17.    cout<<endl;
  18.  
  19.     for (i=0;i<5;i++)
  20.        {
  21.            for(j=1;j<8;j++)
  22.                {
  23.                    if (j>=1)
  24.                        suma +=matriz[i][j];
  25.                    if (j==0)
  26.                        cout<<"      "<<cadenas[i];
  27.                    cout<<"        "<<matriz[i][j];
  28.                 }
  29.            cout<<"        La audiencia de la television "<<cadenas [i]<<" es "<<suma<<endl;
  30.            if (suma>mayor)
  31.                {
  32.                    mayor=suma;
  33.                    indice=i;
  34.                }
  35.            suma=0;
  36.        }
  37.    cout<<endl<<"La television mas vista fue "<<cadenas [indice]<<" con "<< mayor<<" millones de espectadores "<<endl<<endl;
  38.     mayor=0;
  39.     for(j=1;j<8;j++)
  40.        {
  41.            for(i=0;i<5;i++)
  42.                suma+=matriz[i][j];
  43.            cout<<"La audiencia del "<<diasSemana [j-1]<<" fue "<<suma<<endl;
  44.            if (suma>mayor)
  45.                {
  46.                    mayor=suma;
  47.                    indice=j;
  48.                }
  49.  
  50.          suma=0;
  51.        }
  52.    cout<<endl<<"El dia de mas audiencia fue el "<<diasSemana [indice-1]<<" con "<< mayor<<" millones de espectadores "<<endl<<endl;
  53.    cin.get();
  54.    return 0;
  55. }
  56.  
  57.  

Código
  1.    LUNES    MARTES    MIERCOLES    JUEVES    VIERNES    SABADO    DOMINGO
  2.        2        1.4        4.6        5        7        6.2        6.2        La audiencia de la television A3 es 32.4
  3.        3        3.6        5        4.5        2.7        5.2        5.2        La audiencia de la television TV1 es 29.2
  4.        2.5        3.5        3        6        3        5.1        5.1        La audiencia de la television CUATRO es 28.2
  5.        3.2        4.5        2        2.2        1        3.5        0.9        La audiencia de la television T4  es 17.3
  6.        1.7        1.3        4.5        4.7        2.8        4.8        3.3        La audiencia de la television SEXTA es 23.1
  7.  
  8. La television mas vista fue A3 con 32.4 millones de espectadores
  9.  
  10. La audiencia del LUNES fue 12.4
  11. La audiencia del MARTES fue 14.3
  12. La audiencia del MIERCOLES fue 19.1
  13. La audiencia del JUEVES fue 22.4
  14. La audiencia del VIERNES fue 16.5
  15. La audiencia del SABADO fue 24.8
  16. La audiencia del DOMINGO fue 20.7
  17.  
  18. El dia de mas audiencia fue el SABADO con 24.8 millones de espectadores
  19.  
  20.  

Saluditos!. ....(http://www.planetsmilies.com/avatars/simpsons/simpsons0015.gif)

P.D: ¡ Y sin vectores !, sólo con mayor e indice.


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: Gagy en 9 Marzo 2013, 22:54 pm
¡¡Infinitas gracias amchacon y leosansan!!  ;-)
Problema resuelto  :D


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: leosansan en 9 Marzo 2013, 23:10 pm
¡¡Infinitas gracias amchacon y leosansan!!  ;-)
Problema resuelto  :D

De nada, de nada  >:D. Da gusto ayudar cuando la gente postea un código, aunque no funcione ni de lejos, y concrete las preguntas como ha sido tu caso y si además hay "piques" sanotes más divertido aún. De verdad, me lo he pasado "pipa".

Saluditos!
. ....
(http://smilies-gifs.com/emoticonos-grandes/31grandes.gif)


Título: Re: Dudas sobre suma de filas y columnas en C++.
Publicado por: amchacon en 9 Marzo 2013, 23:28 pm
y si además hay "piques" sanotes más divertido aún.
:rolleyes: