Resultados 1 al 2 de 2

Punteros a estructuras

  1. #1 Punteros a estructuras 
    Iniciado
    Fecha de ingreso
    Oct 2009
    Mensajes
    1
    Descargas
    0
    Uploads
    0
    Por favor ayudemen con el sigueinte código debo aplicarle puntero y no tengo ni idea de como hacerlo. Les agradeceré mucho su ayuda.

    Les adjunto el código es creado en C++.

    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<ctype.h>

    #define p printf
    #define s scanf

    int indice=-1;
    #define max 10


    void Menu();
    void IngresoAlumn();
    void Ordenar();
    void Buscaralumno();
    void Eliminacionfisica();
    //void Eliminaciologica();
    void Salir();
    void REGRESAR();

    struct alumno
    {
    char Ced[25];
    char Nomb[25];
    char Ape[25];
    int Ed;
    };

    alumno E;
    alumno Lista[max],aux;

    void main()
    {

    Menu();
    getch();
    }

    void Menu()
    {
    clrscr();
    p("\n\t\tPROGRAMA MENÚ");
    p("\n\n\t1. Ingreso de Datos.");
    p("\n\t2. Buscar alumno por Cedula");
    p("\n\t3. Mostra Lista de alumnos ordenada");
    p("\n\t4. Eliminar un alumno de la lista");
    int N;
    do
    {
    p("\n\n\tIngrese la opción:\t");
    s("%d",&N);
    }while(N<1 || N>5);
    switch(N)
    {
    case 1:
    p("\n\n\tIngresar un alumno");
    IngresoAlumn();
    break;
    case 2:
    p("\n\n\tBuscar el alumno por cedula");
    Buscaralumno();
    break;
    case 3:
    p("\n\n\tLista de alumnos ordenada");
    Ordenar();
    break;
    case 4:
    p("\n\n\tEliminar un Alumno de la Lista");
    Eliminacionfisica();
    //Eliminacionlogica();
    break;
    case 5:
    Salir();
    break;
    }
    }
    void IngresoAlumn()
    {
    clrscr();
    printf("\nIngrese Nombre:\t");
    scanf("%s",&E.Nomb);
    printf("Ingrese Apellido:\t");
    scanf("%s",&E.Ape);
    printf("Ingrese Cedula:\t");
    scanf("%s",&E.Ced);
    printf("Ingrese edad:\t");
    scanf("%d",&E.Ed);
    indice++;
    Lista[indice]=E;
    REGRESAR();
    }

    void Buscaralumno()
    {
    clrscr();
    char Ced[9];
    printf("Ingrese Cedula:\t");
    scanf("%s",&Ced);
    for(int i=0;i<=indice;i++)
    {
    if(strcmp(Lista[i].Ced,Ced)==0)
    {
    printf("Nombre:%s - Apellido:%s - Edad:%d",Lista[i].Nomb, Lista[i].Ape, Lista[i].Ed);

    i=indice;
    }
    }
    REGRESAR();
    }

    void Ordenar()
    {
    clrscr();
    alumno aux;
    for(int i=0;i<=indice-1;i++)
    {
    for(int j=i+1;j<=indice;j++)
    {

    if(strcmp(Lista[i].Nomb,Lista[j].Nomb)>0)
    {
    aux=Lista[i];
    Lista[i]=Lista[j];
    Lista[j]=aux;
    }
    else
    if(strcmp(Lista[i].Nomb,Lista[j].Nomb)==0)
    {
    if(strcmp(Lista[i].Ape,Lista[j].Ape)>0)
    {
    aux=Lista[i];
    Lista[i]=Lista[j];
    Lista[j]=aux;
    }

    }
    }
    }
    for(int x=0;x<=indice;x++)
    {
    printf("\nApellido:%s - Nombre:%s - cedula:%s - Edad:%d",Lista[x].Ape, Lista[x].Nomb, Lista[x].Ced, Lista[x].Ed);


    }
    REGRESAR();
    }

    void REGRESAR()
    {
    char r;
    do
    {
    printf("\t\nDesea realizar otra Opción:S/N\t");
    r=toupper(getche());
    }while(r!='S' && r!='N');
    if(r=='S')
    Menu();
    if(r=='N')
    Salir();
    }

    void Salir()
    {
    clrscr();
    gotoxy(25,20);
    printf("M U C H A S G R A C I A S");
    }

    void Eliminacionfisica()
    {
    clrscr();
    int i;
    int Control;
    char Ced[9];
    printf("Ingrese Cedula:\t");
    scanf("%s",&Ced);
    for(i=0;i<=indice;i++)
    {
    if(strcmp(Lista[i].Ced,Ced)==0)
    {
    Control=i;
    i=indice;
    }
    }
    for(i=Control;i<indice-1;i++)
    Lista[i]=Lista[i+1];
    indice--;
    REGRESAR();
    }


    /*void Eliminacionlogica();
    {
    p("\nIngrese Cedula a Eliminar");
    s("%s",Ced);

    for(int i=0;i<indice;i++)
    {
    if(strcmp(Lista[i].Ced,Ced)==0)
    Lista[i].Estado=I;
    }
    REGRESAR();
    } */
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    Hola Nelsou, supongo que lo que en realidad querés es tener un código similar pero que haga uso de punteros y memoria dinámica para el manejo de estructuras.

    Obviamente no voy a escribirte el código, lo mas probable es que sea una tarea que te asignaron a vos y no estamos acá para hacerle la tarea a nadie.

    Se te puede ayudar pero para eso es necesario que plantees dudas concretas.

    La idea principla en esto es usar listas enlazadas. Es decir, cada dato de tipo Alumno (en tu caso) deberá tener un puntero haciendo referencia a otro dato (en el caso de listas simplemente enlazadas) o dos datos (en el caso de listas doblemente enlazadas).

    Esquematicamente sería algo así:

    Cabeza -> Alumno1{datos} -> Alumno2{datos} -> ..... -> AlumnoN{datos} -> NULL

    Cabeza -> Alumno1{datos} <-> Alumno2{datos} <-> ..... <-> AlumnoN{datos} -> NULL


    Como consejo en cuanto al código, te recomendaría que te rijas por el estandar ANSI. No declares main como void, main debería ser int siempre.


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

Temas similares

  1. Punteros Modula-2
    Por Cypress en el foro PROGRAMACION DESKTOP
    Respuestas: 2
    Último mensaje: 10-04-2007, 05:12
  2. Punteros para ficheros binarios en C++
    Por Dwarft en el foro PROGRAMACION DESKTOP
    Respuestas: 1
    Último mensaje: 04-08-2004, 15:42
  3. informacion sobre punteros
    Por ^K3``N30 en el foro GENERAL
    Respuestas: 2
    Último mensaje: 21-05-2003, 00:51

Marcadores

Marcadores