jueves, 17 de mayo de 2012

Programa : contiene busqueda y ordenamiento


#include <conio.h>
#include <iostream.h>
#include <stdio.h>

const int n=5;
void  ingrese(char[n][15],int [n]);
void apro_repro(int[n],int);
void burbuja(char[n][15],int[n]);
void seleccion(char[n][15],int[n]);
void insercion(char[n][15],int[n]);
void binaria(char[n][15],int[n]);
int main()
{
 int opc,a;
 char nombres[n][15];
 int notas[n];


 do{
 gotoxy(25,3); cout<<" Bienvenido ";
 gotoxy(25,5); cout<<"Escoja La Opcion";
 gotoxy(20,6); cout<<" 1----> Ingrese Alumnos";
 gotoxy(20,7); cout<<" 2----> Ordenamientos";
 gotoxy(20,8); cout<<" 3----> Alumnos Aprobados";
 gotoxy(20,9); cout<<" 4----> Ingrese Reprobados";
 gotoxy(20,10);cout<<" 5----> Busqueda Binaria";
 gotoxy(20,12);cout<<" ----> Leer Opcion";   gotoxy(40,12);  cin>>opc;
      if(opc==1)
  {
     ingrese(nombres,notas);
      }
  if(opc==2)
  { cout<<endl;
    for(int i=0;i<n;i++)
    cout<<notas[i]<<", "<<nombres[i]<<endl;
    cout<<endl<<endl;

    cout<<"Por Cual Metodo desea Ordenar"<<endl;
    cout<<" 1 ----> Por Intercambio"<<endl;
    cout<<" 2 ----> Por Seleccion "<<endl;
    cout<<" 3 ----> Por Inserccion"<<endl;
    cout<<" Leer opcion ---->"; cin>>a;
       if(a==1)
       {  burbuja(nombres,notas);}
       if(a==2)
       {  seleccion(nombres,notas);}
       if(a==3)
       {insercion(nombres,notas);}
    }
         if(opc==3)
  {  apro_repro(notas,1);
     }
  if(opc==4)
  {  apro_repro(notas,2);
  }
  if(opc==5)
  {  binaria(nombres,notas);}

    getch();
        clrscr();
 }while(opc!=5);

}
// La Funcion Ingrese(), sirve para insertar las notas y nombres en el vector.
void  ingrese(char nombre[n][15], int notas[n])
{
  for(int i=0;i<n;i++)
   { cout<<"Ingrese Nombre del Alumno: ";
    cin>>nombre[i];
    cout<<"Ingrese Nota del Alumno, "<<nombre[i]<<" : ";
    cin>>notas[i];}
}
// La funcion apro_repro(),sirve para mostrar los alumnos reprobados y aprobados y el promedio de cada uno
void apro_repro(int notas[n], int opc)
{
  int aprobados,reprobados,a,x;
     aprobados=reprobados=a=x=0;

  for(int i=0;i<n;i++)
  { if(notas[i]<5)
    { reprobados++;
      x=x+notas[i];
        }
     else
      {aprobados++;
       a=a+notas[i]; }
     }

  if(opc==1)
   {
     cout<<" La cantidad de aprobados es: "<<aprobados<<endl;
     cout<<" El promedio de aprobados es: "<<(a/aprobados)<<" pts "<<endl; }

   if(opc==2)
   {
     cout<<" La cantidad de reprobados es: "<<reprobados<<endl;
     cout<<" El promedio de reprobados es: "<<(x/reprobados)<<" pts "<<endl;}
 }
// funcion burbuja(), sirve para un ordenamiento sencillo.
void burbuja(char nombres[n][15],int notas[n])
{
char ax[15];
int j, i,aux;
for(i=0;i<n-1;i++)
{  for(j=0;j<n-1;j++)
   { if(notas[j]>notas[j+1])
     {
       aux=notas[j];
       notas[j]=notas[j+1];
       notas[j+1]=aux;

       strcpy(ax,nombres[j]);
       strcpy(nombres[j], nombres[j+1]);
       strcpy(nombres[j+1],ax);
     }
   }
}
for(i=0;i<n;i++)
 cout<<nombres[i]<<", "<<notas[i]<<endl;
}

// funcion seleccion(), sirve para un ordenamiento selectivo basado en los minimos.
void seleccion(char nombres [n][15],int notas [n])
{
 int aux,i,j,minimo;
 char aux1[15];
 for(i=0;i<n-1;i++)
 {
    minimo=i;
    for(j=i+1;j<n;j++)
    {
  if(notas[j]<notas[minimo])
  {minimo=j;    }
}
  //intercambio de notas
  aux=notas[i];
  notas[i]=notas[minimo];
  notas[minimo]=aux;
  //intercambio de nombres
  strcpy(aux1,nombres[i]);
  strcpy(nombres[i],nombres[minimo]);
  strcpy (nombres[minimo],aux1);
 }

for(i=0;i<n;i++)
 cout<<nombres[i]<<", "<<notas[i]<<endl;
 }


void insercion(char nombres [n][15],int notas [n])
{

char aux1[15];
int i,k,aux;
bool band=false;
for (k=1;k < n; k++){
    aux=notas[k];
    strcpy(aux1,nombres[k]);
    i=k-1;
    band=false;
    while( i>=0 && !band )
    {       if(aux < notas[i]){
            notas[i+1]=notas[i];
            strcpy(nombres[i+1],nombres[i]);
            i--;
                              }
        else
        {       band=true;       }
    }
    notas[i+1]=aux;
    strcpy(nombres[i+1],aux1);
}

for(i=0;i<n;i++)
 cout<<nombres[i]<<", "<<notas[i]<<endl;
}
// funcion Binanria(), sirve para hacer una busqueda de un dato, se necesita que este ordenada.... =D
void binaria(char nombres [n][15],int notas [n])
{
int dato,centro,inferior,superior;
   inferior=0;
   superior=n-1;

   cout<<"Ingrese Nota a Buscar"<<endl;
   cin>>dato;

   while(inferior<=superior)
   {
    centro=((superior-inferior)/2+inferior);
    if(notas[centro]==dato)
    { cout<<"Alumno: "<<nombres[centro]<<", nota: "<< notas[centro]<<endl;
     return;
      }
      else
      {if(dato<notas[centro])
         { superior = centro - 1;}
       else
         { inferior= centro+1;  }
         }
     }
  cout<<"No se encontro esa nota";
}

  getch();
 }



No hay comentarios: