Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: el4celeste en 18 Julio 2011, 01:38 am



Título: Matriz
Publicado por: el4celeste en 18 Julio 2011, 01:38 am
Buenas noches...
Bueno tengo que hacer un programa que me permita introducir 4 nombres de alumnos con 6 notas.
Para posteriormente introducir su nombre y que me salgan sus notas...
Ahora se me habia ocurrido hacer una matriz peroo... no la podria hacer poorque son distintos tipos de datos nombre(char) y la nota(int).
Me podrian arrimar alguna sugerencia?¿
Saludos


Título: Re: Matriz
Publicado por: rir3760 en 18 Julio 2011, 02:10 am
Lo primero que debes indicar es el lenguaje de programacion que estas utilizando, C o C++.

En el caso de C ...

Debes declarar dos arrays. El primero para almacenar los nombres y el segundo para las calificaciones. Ambos son "arrays de arrays" ya que cada uno de sus elementos es a su vez un array, eso porque en el primer caso se deben almacenar cada uno de los caracteres del nombre y el segundo para las seis calificaciones por alumno.

Un programa base seria asi:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_ALUMNOS        4
  5. #define NUM_NOTAS          6
  6. #define LONG_MAX_NOMBRE  256
  7.  
  8. int main(void)
  9. {
  10.   char nombre[NUM_ALUMNOS][LONG_MAX_NOMBRE];
  11.   double calif[NUM_ALUMNOS][NUM_NOTAS];
  12.  
  13.   /* ... */
  14.  
  15.   return EXIT_SUCCESS;
  16. }

El resto, leer los nombres y calificaciones, te toca a ti (por favor lee las reglas de los foros).

Un saludo


Título: Re: Matriz
Publicado por: el4celeste en 18 Julio 2011, 02:20 am
Estoy usando el c++ develop pero muy buena sugerencia voy a tratar de traducirlo un poco a el c++(ya que son casi lo mismo),
Muchas gracias!!
Saludos


Título: Re: Matriz
Publicado por: Valkyr en 18 Julio 2011, 02:27 am
Sí estás usando C++ puedes hacer uso de la clase Map de la STL, aquí la referencia:

http://www.cplusplus.com/reference/stl/map/

Yo crearía un mapa de claves string y valores int. Almacenaría los datos y cuando quieras buscar un nombre usas la función find().

También puedes hacerlo con una matriz que sea del tipo string matriz[MAX_ALUMNOS][2]. En la primera fila guardas los nombres y en la segunda guardas las calificaciones. Lo único a tener en cuenta es que tendrías que guardar las calificaciones como una cadena, es decir, si quieres guardar la nota 8, tendrías que almacenarlo así "8", como una cadena.

Saludos.


Título: Re: Matriz
Publicado por: el4celeste en 18 Julio 2011, 02:32 am
Ok bueno la receta ya esta sobre la mesa  :P pues ahora tengo que comenzar a cocinar  ;D
Gracias amigo un Saludo!!!
P.D:Dejo el post sin resover por si alguien aporta algo mas pero creo que con esto ya estoy hecho  :rolleyes:


Título: Re: Matriz
Publicado por: PiroskY en 18 Julio 2011, 05:15 am
no olvides que tanto un char como un int son numeros(ascii)
asi que en cualquiera de los dos podes guardar cualquiera de los 2 tipos, la diferencia es la cantidad de cada uno que vas a poder guardar


Título: Re: Matriz
Publicado por: el4celeste en 18 Julio 2011, 19:13 pm
Bueno he econtrado la solucion Con la ayuda de un gran user de portalhacker.net y leyendo a rajatablas.
Consegui lo siguiente:
Código
  1. #include <iostream>
  2. #include <cstring>
  3. #define NOMBRE   80
  4. #define APT   10
  5. #define MATE 10
  6. #define ELECTRONICA 10
  7. #define INGLES 10
  8. #define HISTORIA 10
  9. #define PROGRAMACION 10
  10. #define ALUMNOS   3
  11. using namespace std;
  12.  
  13. struct Alumnos
  14. {
  15.    char nombre[NOMBRE];
  16.    char nota1[APT];
  17.    char nota2[MATE];
  18.    char nota3[ELECTRONICA];
  19.    char nota4[INGLES];
  20.    char nota5[HISTORIA];
  21.    char nota6[PROGRAMACION];
  22.  
  23. } Boletin[ALUMNOS];
  24.  
  25. void LlenoBoletin(void);
  26. void menu(void);
  27. void buscador(bool opc);
  28.  
  29. int main()
  30. {
  31.    LlenoBoletin();
  32.    menu();
  33.    return 0;
  34. }
  35.  
  36. void LlenoBoletin(void)
  37. {
  38.    for(int a=0; a<=ALUMNOS; ++a)
  39.    {
  40.        cout << "Ingrese el apellido del alumno: ";
  41.        gets(Boletin[a].nombre);
  42.        cout << "Ingrese la calificacion de APT: ";
  43.        gets(Boletin[a].nota1);
  44.        cout << "Ingrese la calificacion de matematica: ";
  45.        gets(Boletin[a].nota2);
  46.        cout << "Ingrese la calificacion de Electronica: ";
  47.        gets(Boletin[a].nota3);
  48.        cout << "Ingrese la calificacion de Ingles: ";
  49.        gets(Boletin[a].nota4);
  50.        cout << "Ingrese la calificacion de Historia: ";
  51.        gets(Boletin[a].nota5);
  52.        cout << "Ingrese la calificacion de Programacion: ";
  53.        gets(Boletin[a].nota6);
  54.  
  55.    }
  56. }
  57.  
  58. void menu(void)
  59. {
  60.    int a;
  61.    cout << "Bienvenido a la agenda." << endl;
  62.    cout<<"1-Buscar por apellido"<<endl;
  63.    cout<<"2-Salir"<<endl;
  64.    cin >> a;
  65.    if(a==1) buscador(true);
  66.  
  67. }
  68.  
  69. void buscador(bool opc)
  70. {
  71.  
  72.    char busqueda[NOMBRE];
  73.    int b=0;
  74.    cout<<"Ingrese el apellido del alumno"<<endl;
  75.    gets(busqueda);
  76.    gets(busqueda);
  77.    cout << endl;
  78.    if(opc)
  79.    {
  80.        for(int a=0; a<=ALUMNOS; ++a)
  81.        {
  82.            if(strcmp(busqueda, Boletin[a].nombre)==0)
  83.            {
  84.                cout << "En APT  " << Boletin[a].nombre << " tiene "
  85.                     << Boletin[a].nota1 << endl;
  86.                     cout << "En Matematica  " << Boletin[a].nombre << " tiene "
  87.                     << Boletin[a].nota2 << endl;
  88.                     cout << "En Electronica  " << Boletin[a].nombre << " tiene "
  89.                     << Boletin[a].nota3 << endl;
  90.                     cout << "En Ingles  " << Boletin[a].nombre << " tiene "
  91.                     << Boletin[a].nota4 << endl;
  92.                     cout << "En Historia  " << Boletin[a].nombre << " tiene "
  93.                     << Boletin[a].nota5 << endl;
  94.                     cout << "En Programacion  " << Boletin[a].nombre << " tiene "
  95.                     << Boletin[a].nota6 << endl;
  96.                ++b;
  97.            }
  98.  
  99.        }
  100.        if(b==0) cout << "No se encontro el alumno " << busqueda << " en la agenda de boletines";
  101.    }
  102.    menu();
  103. }
  104.  
Bueno esta algo medio sucio porque recien termine la parte logica...  ;-)
Obviamente tengo que ponerle un poco de decoracion y orden a ese progrma pero basicamente es eso.
Bueno tema cerrado gracias!!
Saludos


Título: Re: Matriz
Publicado por: leogtz en 18 Julio 2011, 19:15 pm
gets() no es recomendable usarla.


Título: Re: Matriz
Publicado por: <<<-Basura->>> en 19 Julio 2011, 06:13 am
Yo me hice una mas sencilla  :-X

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #define ALUM    4
  5. #define NOTAS           6
  6. #define MAX_NONB   20
  7.  
  8.  
  9. struct regis{
  10. char nomb[MAX_NONB];
  11. int nota[NOTAS];
  12. }registro[ALUM];
  13.  
  14. int main(){
  15. for(int j=0;j<ALUM;j++){
  16. cout << j+1 << " - Alumno: \n"<<endl;
  17. cout << "Nombre: ";
  18. cin >> registro[j].nomb;
  19. for(int i=0;i<NOTAS;i++){
  20. cout << i+1 << " - Nota: ";
  21. cin >> registro[j].nota[i];
  22. }
  23. }
  24.  
  25. cout<< "Nombre\t1-Nota\t2-Nota\t3-Nota\t4-Nota\t5-Nota\t6-Nota\n";
  26. for(int j=0;j<ALUM;j++){
  27. cout<< registro[j].nomb;
  28. for(int i = 0; i < NOTAS ; i++){
  29. cout <<"\t"<< registro[j].nota[i];
  30. }
  31. cout<<endl;
  32. }
  33. return 0;
  34. }
  35.  
  36.