lunes, 22 de octubre de 2012

algoritmos de busqueda ejemplos









#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define n 100
struct alumno
{
    char nomb[20], apell[20],carnet[15];
    int adad;
    float peso;

};
struct alumno stud[n];
int buscarnom(struct alumno stud[n],char abuscar[20],int inicio, int fin);
int buscarapell(struct alumno stud[n],char abuscar[20],int inicio, int fin);

int main()
{   
    struct alumno stud[n];
    int x=0,op, j,r=0, i,ornom=0,orapell=0;
    char carne[20];
   
   
    //float ;
    do{
        system("cls");
    printf("\n\t PROGRAMA DE BUSQUEDA DE DATOS \n");
    printf("\n\t 1- A\244adir estudiantes");
    printf("\n\t 2- Ordenar por Nombres ");
    printf("\n\t 3- Ordenar por Apellido ");
    printf("\n\t 4- Ordenar por Edad ");
    printf("\n\t 5- Ordenar por Peso ");
    printf("\n\t 6- Buscar por Nombre ");
    printf("\n\t 7- Buscar por Apellido ");
    printf("\n\t 8- Buscar por Carnet ");
    printf("\n\t 9- Ver Datos ");
    printf("\n\t 10- SALIR");


    printf("\n\n\n Ingrese el numero de la opcion:    ");
    scanf("%d",&op);
 system("cls");
    switch(op){
        case 1:{
                printf("\t A\244adiendo Estudiantes\n ");
                printf("\n\t Ingrese Nombre ");
                scanf("%s",stud[r].nomb);
                printf("\n\t Ingrese Apellido ");
                scanf("%s",stud[r].apell);
                printf("\n\t Ingrese Numero de Carnat ");
                scanf("%s",stud[r].carnet);
                printf("\n\t Ingrese Edad ");
                scanf("%d",&stud[r].adad);
                printf("\n\t Ingrese Peso ");
                scanf("%f",&stud[r].peso);
                r=r+1;

   
        system("pause");
    break;}

    case 2:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
    struct alumno temp;
    for (i=1; i<r; i++){
        for (j=0 ; j<r - 1; j++)
            if ((strcmp(stud[j].nomb,stud[j+1].nomb))>0){
                temp = stud[j];
                 stud[j] = stud[j+1];
                stud[j+1] = temp;}}
               

        system("pause");
        orapell=0;
        ornom=1;
    break;}
   
        case 3:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
struct alumno temp;
for (i=1; i<r; i++){
        for (j=0 ; j<r - 1; j++)
            if ((strcmp(stud[j].apell,stud[j+1].apell))>0){
                temp = stud[j];
                 stud[j] = stud[j+1];
                stud[j+1] = temp;}}


        system("pause");
                orapell=1;
                ornom=0;
    break;
            }

   

    case 4:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
struct alumno temp;
for (i=1; i<r; i++){
        for (j=0 ; j<r - 1; j++)
            if (stud[j].adad>stud[j+1].adad){
                temp = stud[j];
                 stud[j] = stud[j+1];
                stud[j+1] = temp;}}


            system("pause");
                orapell=0;
                ornom=0;
                break;
               
            }
               
               
    case 5:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
struct alumno temp;
for (i=1; i<r; i++){
        for (j=0 ; j<r - 1; j++)
            if (stud[j].peso>stud[j+1].peso){
                temp = stud[j];
                 stud[j] = stud[j+1];
                stud[j+1] = temp;}}
           
               
                system("pause");
                orapell=0;
                ornom=0;
                break;
            }
               
    case 6:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
                if(ornom==0){
                struct alumno temp;
                for (i=1; i<r; i++){
                    for (j=0 ; j<r - 1; j++)
                        if ((strcmp(stud[j].nomb,stud[j+1].nomb))>0){
                            temp = stud[j];
                             stud[j] = stud[j+1];
                            stud[j+1] = temp;}}
               
                }
                int pos;
            char abuscar[20];
            printf("Ingrese el Nombre a Buscar:   ");scanf("%s",abuscar);

            pos=buscarnom(stud,abuscar,0, r);
            if(pos>=0)
                {printf("\tEstudiante Encontrado\n\n");
                            printf("\nNOMBRE:  %s",stud[pos].nomb);
                            printf("\nAPELLIDO:  %s",stud[pos].apell);
                            printf("\nN# CARNET:  %s",stud[pos].carnet);
                            printf("\nEDAD:  %d",stud[pos].adad);
                            printf("\nPESO:  %f\n",stud[pos].peso);

                }
                else
                    printf("\tEl nombre no coinside con los datos guardados\n\n");

               
                system("pause");
                break;
            }
    case 7:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
                if(orapell==0){
                struct alumno temp;
                for (i=1; i<r; i++){
                        for (j=0 ; j<r - 1; j++)
                            if ((strcmp(stud[j].apell,stud[j+1].apell))>0){
                                temp = stud[j];
                                 stud[j] = stud[j+1];
                                stud[j+1] = temp;}}


                }
            int pos;
            char abuscar[20];
            printf("Ingrese el Apellido a Buscar:   ");scanf("%s",abuscar);

            pos=buscarapell(stud,abuscar,0, r);
            if(pos>=0)
                {printf("\tEstudiante Encontrado\n\n");
                            printf("\nNOMBRE:  %s",stud[pos].nomb);
                            printf("\nAPELLIDO:  %s",stud[pos].apell);
                            printf("\nN# CARNET:  %s",stud[pos].carnet);
                            printf("\nEDAD:  %d",stud[pos].adad);
                            printf("\nPESO:  %f\n",stud[pos].peso);

                }
                else
                    printf("\tEl apellido no coinside con los datos guardados\n\n");
           
               
                system("pause");
                break;
            }
    case 8:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
                int orcarnt=0;
                printf("Irgresa numero de carnet a buscar:   ");scanf("%s",carne);
                for(i=0;i<r;i++){
                    if(strcmp(stud[i].carnet,carne)==0)
                        {
                            orcarnt=1;   
                            printf("\n\nNOMBRE:  %s",stud[i].nomb);
                            printf("\nAPELLIDO:  %s",stud[i].apell);
                            printf("\nN# CARNET:  %s",stud[i].carnet);
                            printf("\nEDAD:  %d",stud[i].adad);
                            printf("\nPESO:  %f\n\n",stud[i].peso);
                        }           
               
                }
                if(orcarnt==0){
                printf("El numero de carnet no coinside con los datos guardados\n\n ");
                }
           
               
                system("pause");
                break;
            }
    case 9:{
                if(r==0){printf("PRIMERO DEBE INGRESAR DATOS\n\n");system("pause");break;}
                for(j=0;j<r;j++){
                    printf("DATOS DE ESTUDIANTE N# %d\n",j+1);
                    printf("\nnonbre %s   ",stud[j].nomb);
                    printf("\napellido %s   ",stud[j].apell);
                    printf("\ncarnet %s  ",stud[j].carnet);
                    printf("\nedad %d   ",stud[j].adad);
                    printf("\npeso %f \n\n  ",stud[j].peso);}

           
               
                system("pause");
                break;
            }   
       
    case 10:{
                x=1;
                printf("\n\n    SALIENDO .........................\n\n\n");
               
            break;
           
            }
   
}
    }while(x==0);
}


int buscarnom(struct alumno stud[n],char abuscar[20],int inicio, int fin)
{

int  izq,der, cen;
izq=0; der=fin-1;
while( izq <= der ){
cen=( izq + der )/2;
if( strcmp(stud[cen].nomb, abuscar)==0 )
return (cen);
if( strcmp(stud[cen].nomb, abuscar)<0 )
izq=cen+1;
else
der=cen-1;
}
return(-1);
                   


}


int buscarapell(struct alumno stud[n],char abuscar[20],int inicio, int fin)
{

int  izq,der, cen;
izq=0; der=fin-1;
while( izq <= der ){
cen=( izq + der )/2;
if( strcmp(stud[cen].apell, abuscar)==0 )
return (cen);
if( strcmp(stud[cen].apell, abuscar)<0 )
izq=cen+1;
else
der=cen-1;
}
return(-1);
                   


}

No hay comentarios:

Publicar un comentario