Foros del Web » Programación para mayores de 30 ;) » C/C++ »

mi cerebro ya no da para mas T.T

Estas en el tema de mi cerebro ya no da para mas T.T en el foro de C/C++ en Foros del Web. hola, que gusto saber de gente que puede ayudar a mas gente, en fin soy un pequeño n00b que tiene un pequeño problema con c++ ...
  #1 (permalink)  
Antiguo 01/11/2009, 18:11
 
Fecha de Ingreso: noviembre-2009
Ubicación: León
Mensajes: 9
Antigüedad: 14 años, 6 meses
Puntos: 0
mi cerebro ya no da para mas T.T

hola, que gusto saber de gente que puede ayudar a mas gente, en fin soy un pequeño n00b que tiene un pequeño problema con c++ y es el siguiente:


Código c++:
Ver original
  1. /*necesito un programa que me pueda ayudar a introducir hasta 300 nombres de alumnos , y que cada nombre tenga la posibilidad de
  2.  introducir 3 calificaciones, estas calificaciones apareceran en el resultado, junto con el promedio del alumno.
  3. */
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. int main (int argc, char * const argv[])
  9.  
  10. {
  11.     int numeroDeNombres;
  12.     bool cuantosSon;
  13.     int i, j;
  14.     char nombreDelAlumno;
  15.     char arrayDeNombres[numeroDeNombres];
  16.     float calificaciones,;
  17.     float arrayDeCalificaciones[j];
  18.    
  19.     cout << "Cuantos nombres vas a poner? \n";
  20.     cin >>numeroDeNombres;
  21.    
  22.     cuantosSon =true;
  23.     while (numeroDeNombres > 300)
  24.         {
  25.             cout << "No puedes meter mas de 300 nombres \n"
  26.             <<"Introduce otro valor \n";
  27.             cin>> numeroDeNombres;
  28.             cuantosSon= false;
  29.         }  
  30.    
  31.     for (i=1; i<=numeroDeNombres; i++)
  32.     {
  33.         cout << "Escribe el nombre del alumno numero "<< i<<"\n";
  34.         cin >> nombreDelAlumno;
  35.         arrayDeNombres[numeroDeNombres]= nombreDelAlumno;
  36.        
  37.        
  38.         for (j=1; j<=3; j++)
  39.         {
  40.             cout << "escribe la calificacion "<<j<<".....";
  41.             cin>> calificaciones;
  42.             arrayDeCalificaciones[j]=calificaciones;
  43.            
  44.         }
  45.        
  46.        
  47.        
  48.     }
  49.    
  50.     for(i=1; i<=numeroDeNombres; i++)
  51.     {
  52.         cout << "\nLas calificiones de "<<arrayDeNombres[numeroDeNombres]<<" son de ";
  53.         for (j=1; j<=3; j++)
  54.         {
  55.             cout << " "<<arrayDeCalificaciones[j]<<", ";
  56.        
  57.         }
  58.        
  59.         cout <<"\n" <<"el promedio es de "<< (arrayDeCalificaciones[j]) / j<<"\n";
  60.    
  61.     }
  62.  
  63. return 0;
  64.  
  65. }

bueno mi bronca es que a la hora de correr el programa, me aparece como resultados el ultimo dato que le meti (o sea el nombre del ultimo alumno y sus calificaciones con un promedio de 0) y pues eso no lo debe de hacer. Como ven?, me podrían guiar por favor? De antemano gracias!

Un ejemplo de lo que debería hacer el programa:

Cuantos nombres vas a poner?
2
Escribe el nombre del alumno numero 1
E
escribe la calificacion 1.....4
escribe la calificacion 2.....3
escribe la calificacion 3.....4
Escribe el nombre del alumno numero 2
T
escribe la calificacion 1.....5
escribe la calificacion 2.....4
escribe la calificacion 3.....1

Las calificiones de E son 4, 3, 4,
el promedio es de 3.66666667

Las calificiones de T son 5, 4, 1,
el promedio es de 3.33333333
  #2 (permalink)  
Antiguo 02/11/2009, 06:36
 
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: mi cerebro ya no da para mas T.T

hola bueno viendo tu codigo es obvio q te salgo solo lo ultimo porque:

tu tienes 2 arrays.

arrayDeNombres[]
arrayDeCalificaciones[]

estos 2 arrayas son independientes por ende lo q haces primero es escribir el primer nombre

arraydeNombres[1]="jose"
y luego pides sus notas
arrayDeCalificaciones[1]=11
arrayDeCalificaciones[2]=15
arrayDeCalificaciones[3]=18

y luego pides otro nombre
arraydeNombres[1]="miguel"
y vuelves a pedir sus notas

arrayDeCalificaciones[1]=10
arrayDeCalificaciones[2]=5
arrayDeCalificaciones[3]=8

q es lo q pasa aca as SOBREESCRITO encima de los resultados anteriores (si te fijas los indicadores son los mismos 1,2,3)

lo q podrias hacer es en tu segundo for
Código a:
Ver original
  1. for (j=1; j<=3; j++)
  2.         {
  3.             cout << "escribe la calificacion "<<j<<".....";
  4.             cin>> calificaciones;
  5.             arrayDeCalificaciones[j]=calificaciones;
  6.         }

cambiarlo por

Código a:
Ver original
  1. h=1;
  2. for (j=1; j<=3; j++)
  3.         {
  4.             cout << "escribe la calificacion "<<j<<".....";
  5.             cin>> calificaciones;
  6.             arrayDeCalificaciones[h]=calificaciones;
  7.             h++;
  8.         }

esto hara que cada 3 celdas del arrayas contenga las notas de cada alumnos es decir

//notas del primero
arrayDeCalificaciones[1]=11
arrayDeCalificaciones[2]=15
arrayDeCalificaciones[3]=18
//notas del segundo
arrayDeCalificaciones[4]=10
arrayDeCalificaciones[5]=5
arrayDeCalificaciones[6]=8
asi sucesivamente.

espero que me hayas entendido .

saludos
  #3 (permalink)  
Antiguo 02/11/2009, 12:17
 
Fecha de Ingreso: noviembre-2009
Ubicación: León
Mensajes: 9
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: mi cerebro ya no da para mas T.T

oye pues de entrada muchísimas gracias por tomarte el tiempo para responderme y pues si efectivamente te entiendo el concepto de que se están sobreescriendo los elementos xD, Y pues bueno creo que toda vía ando cayendo en lo mismo, y pues deja pongo el código como lo interprete en tu respuesta.

Código c++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main (int argc, char * const argv[])
  6. {
  7.     int numeroDeNombres;
  8.     bool cuantosSon;
  9.     int i, j,h;
  10.     char nombreDelAlumno;
  11.     char arrayDeNombres[numeroDeNombres];
  12.     float calificaciones,;
  13.     float arrayDeCalificaciones[h];
  14.    
  15.     cout << "Cuantos nombres vas a poner? \n";
  16.     cin >>numeroDeNombres;
  17.    
  18.     cuantosSon =true;
  19.     while (numeroDeNombres > 300)
  20.         {
  21.             cout << "No puedes meter mas de 300 nombres \n"
  22.             <<"Introduce otro valor \n";
  23.             cin>> numeroDeNombres;
  24.             cuantosSon= false;
  25.         }  
  26.    
  27.     for (i=1; i<=numeroDeNombres; i++)
  28.     {
  29.         cout << "Escribe el nombre del alumno numero "<< i<<"\n";
  30.         cin >> nombreDelAlumno;
  31.         arrayDeNombres[numeroDeNombres]= nombreDelAlumno;
  32.        
  33.         h=1;
  34.         for (j=1; j<=3; j++)
  35.         {
  36.             cout << "escribe la calificacion "<<j<<".....";
  37.             cin>> calificaciones;
  38.             arrayDeCalificaciones[h]=calificaciones;
  39.             h++;
  40.            
  41.         }
  42.        
  43.        
  44.        
  45.     }
  46.    
  47.     for(i=1; i<=numeroDeNombres; i++)
  48.     {
  49.         h=1;
  50.         cout << "\nLas calificiones de "<<arrayDeNombres[numeroDeNombres]<<" son de ";
  51.         for (j=1; j<=3; j++)
  52.         {
  53.             cout << " "<<arrayDeCalificaciones[h]<<", ";
  54.             h++;
  55.        
  56.         }
  57.        
  58.         cout <<"\n" <<"el promedio es de "<< (arrayDeCalificaciones[h]) / j<<"\n";
  59.    
  60.     }
  61. return 0;
  62. }

jajaja y pues bueno como vez sigo en las misma...T.T

Es que no entiendo en que la estoy regando jaja

De nuevo muchas gracias.
  #4 (permalink)  
Antiguo 02/11/2009, 12:59
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: mi cerebro ya no da para mas T.T

intenta con una matriz

char arrayDeNombres[numeroDeNombres][30];

donde:

numeroDeNombres es el total de nombres que vas a ingresar y 30 (numero cualquiera) es el total de caracteres que puede contener el nombre....

saludos y bienvenido pequeño n00b
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #5 (permalink)  
Antiguo 02/11/2009, 13:39
 
Fecha de Ingreso: noviembre-2009
Ubicación: León
Mensajes: 9
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: mi cerebro ya no da para mas T.T

hola! muchísimas gracias por la sugerencia!
mmm... a ese tipo de arreglo se les llama bidimensional, no? Ah! que cosas, me perdí esa clase en la escuela xD, bueno, esto nos serviría para meter mas de un caracter al arreglo cierto? por que ese es otro problema que tengo, no puedo meter otro mas de un caracter.

Oye, si puedo preguntar, en que parte la estoy regando, bueno me refiero a que estoy reescribiendo todos mis datos en lugar de guardarlos en diferentes partes del arreglo y por eso se repite los mismos resultados en todas las respuestas, lo que no capto es como llegue a ese error. De nuevo muchas, muchas gracias!
  #6 (permalink)  
Antiguo 02/11/2009, 13:47
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: mi cerebro ya no da para mas T.T

si se le llama arreglo bidimensional tambien, si sirve para meter mas de un caracter en el arreglo...

el error lo tienes originalmente en esta linea:

arrayDeNombres[numeroDeNombres]= nombreDelAlumno;

porque esta tomando solo el ultimo nombre que ingresaste, con la matriz se solucionaria ese problema
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #7 (permalink)  
Antiguo 02/11/2009, 14:07
 
Fecha de Ingreso: noviembre-2009
Ubicación: León
Mensajes: 9
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: mi cerebro ya no da para mas T.T

mi estimadisimo Anubis, puse esto:

Código c++:
Ver original
  1. //declare la variable
  2. char arrayDeNombres[numeroDeNombres][300];
  3.  
  4. //luego lo puse en mi primer ciclo for
  5.  
  6. for (i=1; i<=numeroDeNombres; i++)
  7.     {
  8.         h=1;
  9.         cout << "Escribe el nombre del alumno numero "<< i<<"\n";
  10.         cin >> nombreDelAlumno;
  11.         arrayDeNombres[numeroDeNombres][300]= nombreDelAlumno;
  12.        
  13.        
  14.         for (j=1; j<=3; j++)
  15.         {
  16.             cout << "escribe la calificacion "<<j<<".....";
  17.             cin>> calificaciones;
  18.             arrayDeCalificaciones[h]=calificaciones;
  19.            
  20.            
  21.         }
  22.         h++;
  23. }
  24.  
  25. // y luego en la parte donde imprime los resultados esto
  26.  
  27. for(i=1; i<=numeroDeNombres; i++)
  28.     {
  29.         h=1;
  30.         cout << "\nLas calificiones de "<<arrayDeNombres[numeroDeNombres][300]<<" son de ";
  31.         for (j=1; j<=3; j++)
  32.         {
  33.             cout << " "<<arrayDeCalificaciones[h]<<", ";
  34.         }
  35.        
  36.         cout <<"\n" <<"el promedio es de "<< (arrayDeCalificaciones[h]) / h<<"\n";
  37.         h++;
  38.    
  39.     }

y me da por resultado esto

Cuantos nombres vas a poner?
2
Escribe el nombre del alumno numero 1
E
escribe la calificacion 1.....2
escribe la calificacion 2.....3
escribe la calificacion 3.....3
Escribe el nombre del alumno numero 2
W
escribe la calificacion 1.....5
escribe la calificacion 2.....6
escribe la calificacion 3.....6

Las calificiones de W son de 6, 6, 6,
el promedio es de 6

Las calificiones de W son de 6, 6, 6,
el promedio es de 6

Tomando en cuenta lo que el colega xdunkelheitx me recomendó que hiciera que era el poner otra variable, (en ete caso "h")




jajajajaja creo no lo hice bien xD o vamos si era eso lo que tenia que hacer, o de pano te mal interprete?

Última edición por emmanegr; 02/11/2009 a las 14:14
  #8 (permalink)  
Antiguo 02/11/2009, 16:36
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: mi cerebro ya no da para mas T.T

hola de nuevo

para que te des una idea te pongo esto:

Código c:
Ver original
  1. #include "stdafx.h"
  2.  
  3.  
  4. int _tmain(int argc, _TCHAR* argv[])
  5. {
  6.     char arrayDeNombres[2][30];
  7.     int numeroDeNombres = 1;
  8.     bool cuantosSon;
  9.     int i, j,h = 0;
  10.  
  11.     float promedio = 0;
  12.  
  13.  
  14.     printf("Cuantos nombres vas a poner? \n");
  15.     scanf("%d", &numeroDeNombres);
  16.  
  17.     cuantosSon =true;
  18.     while (numeroDeNombres > 300)
  19.     {
  20.         printf("No puedes meter mas de 300 nombres \n Introduce otro valor \n");
  21.         scanf("%d", &numeroDeNombres);
  22.         cuantosSon= false;
  23.     }  
  24.  
  25.     float arrayDeCalificaciones[100];
  26.     for (i=0; i<numeroDeNombres; i++)
  27.     {
  28.         printf("Escribe el nombre del alumno numero %d \n", i);
  29.         scanf("%s", &arrayDeNombres[i]);
  30.  
  31.         for (j=0; j<3; j++)
  32.         {
  33.             printf("escribe la calificacion %d .....", j+1);
  34.             scanf("%f", &arrayDeCalificaciones[h]);
  35.             h++;
  36.         }
  37.     }
  38.  
  39.     h = 0;
  40.     for(i=0; i<numeroDeNombres; i++)
  41.     {
  42.         printf("\nLas calificiones de %s son de ", &arrayDeNombres[i]);
  43.         for (j=0; j<3; j++)
  44.         {
  45.             printf("%f, ", arrayDeCalificaciones[h]);
  46.             promedio += arrayDeCalificaciones[h];
  47.             h++;
  48.         }
  49.         promedio = promedio / 3;
  50.         printf("\n el promedio es de %f\n", promedio);
  51.         promedio = 0;
  52.     }
  53.  
  54.     return 0;
  55. }

de momento solo te puedo ayudar con eso porque estoy trabajando, pero espero te pueda servir.....

saludos
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #9 (permalink)  
Antiguo 02/11/2009, 17:51
 
Fecha de Ingreso: noviembre-2009
Ubicación: León
Mensajes: 9
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: mi cerebro ya no da para mas T.T

OMG! funciono a la perfección! Pues mi estimadisimo Anubis muchísimas gracias por ayudar lOS indefensos novatos xD, un gran apoyo bro!

Saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:10.