Matriz

Iniciado por el4celeste, 18 Julio 2011, 01:38 AM

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

el4celeste

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

rir3760

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:
#include <stdio.h>
#include <stdlib.h>

#define NUM_ALUMNOS        4
#define NUM_NOTAS          6
#define LONG_MAX_NOMBRE  256

int main(void)
{
   char nombre[NUM_ALUMNOS][LONG_MAX_NOMBRE];
   double calif[NUM_ALUMNOS][NUM_NOTAS];
   
   /* ... */
   
   return EXIT_SUCCESS;
}


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

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

el4celeste

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

Valkyr

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.

el4celeste

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:

PiroskY

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

el4celeste

Bueno he econtrado la solucion Con la ayuda de un gran user de portalhacker.net y leyendo a rajatablas.
Consegui lo siguiente:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
#define NOMBRE   80
#define APT   10
#define MATE 10
#define ELECTRONICA 10
#define INGLES 10
#define HISTORIA 10
#define PROGRAMACION 10
#define ALUMNOS   3
using namespace std;

struct Alumnos
{
    char nombre[NOMBRE];
    char nota1[APT];
    char nota2[MATE];
    char nota3[ELECTRONICA];
    char nota4[INGLES];
    char nota5[HISTORIA];
    char nota6[PROGRAMACION];
   
} Boletin[ALUMNOS];

void LlenoBoletin(void);
void menu(void);
void buscador(bool opc);

int main()
{
    LlenoBoletin();
    menu();
    return 0;
}

void LlenoBoletin(void)
{
    for(int a=0; a<=ALUMNOS; ++a)
    {
        cout << "Ingrese el apellido del alumno: ";
        gets(Boletin[a].nombre);
        cout << "Ingrese la calificacion de APT: ";
        gets(Boletin[a].nota1);
        cout << "Ingrese la calificacion de matematica: ";
        gets(Boletin[a].nota2);
        cout << "Ingrese la calificacion de Electronica: ";
        gets(Boletin[a].nota3);
        cout << "Ingrese la calificacion de Ingles: ";
        gets(Boletin[a].nota4);
        cout << "Ingrese la calificacion de Historia: ";
        gets(Boletin[a].nota5);
        cout << "Ingrese la calificacion de Programacion: ";
        gets(Boletin[a].nota6);
       
    }
}

void menu(void)
{
    int a;
    cout << "Bienvenido a la agenda." << endl;
    cout<<"1-Buscar por apellido"<<endl;
    cout<<"2-Salir"<<endl;
    cin >> a;
    if(a==1) buscador(true);
   
}

void buscador(bool opc)
{
     
    char busqueda[NOMBRE];
    int b=0;
    cout<<"Ingrese el apellido del alumno"<<endl;
    gets(busqueda);
    gets(busqueda);
    cout << endl;
    if(opc)
    {
        for(int a=0; a<=ALUMNOS; ++a)
        {
            if(strcmp(busqueda, Boletin[a].nombre)==0)
            {
                cout << "En APT  " << Boletin[a].nombre << " tiene "
                     << Boletin[a].nota1 << endl;
                     cout << "En Matematica  " << Boletin[a].nombre << " tiene "
                     << Boletin[a].nota2 << endl;
                     cout << "En Electronica  " << Boletin[a].nombre << " tiene "
                     << Boletin[a].nota3 << endl;
                     cout << "En Ingles  " << Boletin[a].nombre << " tiene "
                     << Boletin[a].nota4 << endl;
                     cout << "En Historia  " << Boletin[a].nombre << " tiene "
                     << Boletin[a].nota5 << endl;
                     cout << "En Programacion  " << Boletin[a].nombre << " tiene "
                     << Boletin[a].nota6 << endl;
                ++b;
            }
       
        }
        if(b==0) cout << "No se encontro el alumno " << busqueda << " en la agenda de boletines";
    }
    menu();
}

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

leogtz

gets() no es recomendable usarla.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

<<<-Basura->>>

Yo me hice una mas sencilla  :-X

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

#define ALUM     4
#define NOTAS          6
#define MAX_NONB  20


struct regis{
char nomb[MAX_NONB];
int nota[NOTAS];
}registro[ALUM];

int main(){
for(int j=0;j<ALUM;j++){
cout << j+1 << " - Alumno: \n"<<endl;
cout << "Nombre: ";
cin >> registro[j].nomb;
for(int i=0;i<NOTAS;i++){
cout << i+1 << " - Nota: ";
cin >> registro[j].nota[i];
}
}

cout<< "Nombre\t1-Nota\t2-Nota\t3-Nota\t4-Nota\t5-Nota\t6-Nota\n";
for(int j=0;j<ALUM;j++){
cout<< registro[j].nomb;
for(int i = 0; i < NOTAS ; i++){
cout <<"\t"<< registro[j].nota[i];
}
cout<<endl;
}
return 0;
}

<<<--Basura-->>>