#include "stdlib.h"
#include "stdio.h"
#include "conio.h"
#include "iostream.h"
#include "ctype.h"
#include "time.h"


// Declaracion de Prototipos

void inicializa ( int a [ 100 ], int *n );

void menu ( char *opcion );

void lee_n_a    ( int a [ 100 ], int *n );

void lee_x_a    ( int a [ 100 ], int *n );

void lee_r_a    ( int a [ 100 ], int *n );

void lee_f_a    ( int a [ 100 ], int *n );

void duplica_a  ( int a [ 100 ], int b [ 100 ], int n );

void escribe_a  ( int a [ 100 ], int  n );

void bubbl      ( int a [ 100 ], int  n );

void selec      ( int a [ 100 ], int  n );

void inser      ( int a [ 100 ], int  n );

void quick      ( int a [ 100 ], int  n, int izq, int der );

void partition  ( int a [ 100 ], int  n, int izq, int der, int *m );

void recorre    ( int a [ 100 ], int lugar, int kf );

void buscachico ( int a [ 100 ], int k0, int kf, int *lugar );

void intercambia ( int *a, int *b );


// Declaracion del void main

void main ( void )

{

  int corriendo;

  char opcion;


  int a [ 100 ];

  int b [ 100 ];

  int n;


  inicializa ( a, &n );

  duplica_a  ( a, b, n );

  corriendo = 1;

  while ( corriendo == 1 )

	{

	  menu ( &opcion );

	  switch ( opcion )

		 {

		   case 'n': lee_n_a   ( a, &n );

			     duplica_a ( a,  b, n ); break;

		   case 'x': lee_x_a   ( a, &n );

			     duplica_a ( a,  b, n ); break;

		   case 'r': lee_r_a   ( a, &n );

			     duplica_a ( a,  b, n ); break;

		   case 'f': lee_f_a   ( a, &n );

			     duplica_a ( a,  b, n ); break;


		   case 'e': escribe_a ( b, n ); break;

		   case 'y': escribe_a ( a, n ); break;


		   case 'b': bubbl ( a, n ); break;

		   case 's': selec ( a, n ); break;

		   case 'i': inser ( a, n ); break;

		   case 'q': quick ( a, n, 0, n - 1 ); break;


		   case 'z': corriendo = 0; break;

		    default: corriendo = 1; break;

		 }

	}

}


// Declaracion de los voids

void inicializa ( int a [ 100 ], int *n )

  {

    *n = 3;

    a [ 0 ] = 0;

    a [ 1 ] = 1;

    a [ 2 ] = 2;

  }

void menu ( char *opcion )

  {

    clrscr();

    cout << endl << "n lectura de n elementos            ";
    cout << endl << "x lectura de x elementos            ";
    cout << endl << "r lectura de n elementos al azar    ";
    cout << endl << "f lectura de n elementos por archivo";
    cout << endl;
    cout << endl << "e escritura del arreglo sin ordenar";
    cout << endl << "y escritura del arreglo ya ordenado";
    cout << endl;
    cout << endl << "b ordenamiento burbuja         ";
    cout << endl << "q ordenamiento quick           ";
    cout << endl << "s ordenamiento seleccion o intercambio";
    cout << endl << "i ordenamiento inserci¢n o corrimiento";
    cout << endl;
    cout << endl << "z alir                         ";
    cout << endl;
    cout << endl << "Opcion: ";

    *opcion = getche();

    *opcion = tolower ( *opcion );

  }

void lee_n_a ( int a [ 100 ], int *n )

  {

    int k = 0;

    int z;


    clrscr ();

    cout << endl << "Dame n: "; cin >> *n;

    while ( k <= *n - 1 )

	  {

	    cout << endl << "Dame a [ " << k << " ]: "; cin >> z;

	    a [ k ] = z;

	    k++;

	  }

  }

void lee_x_a ( int a [ 100 ], int *n )

  {

    char resp;

    int k;

    int z;


    clrscr ();

    k = -1;

    cout << endl << "Desea Leer Datos ( s / n ): ";

    resp = getche ();

    resp = tolower ( resp );

    while ( resp == 's' )

	  {

	    k++;

	    cout << endl << "Dame a [ " << k << " ]: "; cin >> z;

	    a [ k ] = z;


	    cout << endl << "Desea Seguir Leyendo Datos ( s / n ): ";

	    resp = getche ();

	    resp = tolower ( resp );

	  }

    *n = k + 1;

  }

void lee_r_a ( int a [ 100 ], int *n )

  {

    int k = 0;


    clrscr ();

    cout << endl << "Dame n: "; cin >> *n;

    randomize ();

    while ( k <= *n - 1 )

	  {

	    a [ k ] = random ( 100 );

	    k++;

	  }

  }

void lee_f_a ( int a [ 100 ], int *n )

  {

    int z;

    int k = -1;

    int leyendo;


    FILE *archivo;

    if ( ( archivo = fopen ( "C:\\CUADERNO\\C4Q15.CPP", "r+" ) ) == NULL )

       {

	 cout << endl << "Archivo no Existe!";

       }

    else

       {

	 leyendo = 1;

	 while ( leyendo == 1 )

	       {

		 if ( ! ( feof ( archivo ) ) )

		    {

		      k++;

		      leyendo = 1;

		      fscanf ( archivo, "%d\n", &z );

		      a [ k ] = z;

		    }

		 else

		    {

		      leyendo = 0;

		      *n = k + 1;

		    }

	       }

	 cout << endl << "n: " << *n;

	 getch();

	 fclose ( archivo );

       }

  }

void duplica_a ( int a [ 100 ], int b [ 100 ], int n )

  {

    int k;


    k = 0;

    while ( k <= n - 1 )

	  {

	    b [ k ] = a [ k ];

	    k++;

	  }

  }

void escribe_a ( int a [ 100 ], int n )

  {

    clrscr ();

    int k = 0;

    while ( k <= n - 1 )

	  {

	    cout << endl << "a [ " << k << " ] = " << a [ k ];

	    k++;

	  }

    cout << endl << "n = " << n;

    getch ();

  }

void bubbl ( int a [ 100 ], int n )

  {

    int j;

    int k;


    j = 0;

    while ( j <= n - 2 )

	  {

	    k = 0;

	    while ( k <= n - 2 )

		  {

		    if ( a [ k ] > a [ k + 1 ] )

		       {

			 intercambia ( &a [ k ], &a [ k + 1 ] );

		       }

		    k++;

		  }

	    j++;

	  }

  }


void selec ( int a [ 100 ], int n )

  {

    int k;

    int lugar;


    k = 0;

    while ( k <= n - 1 )

	  {

	    buscachico ( a, k, n - 1, &lugar );

	    if ( lugar == k )

	       { // No hay Intercambio;

	       }

	    else

	       {

		 intercambia ( &a [ k ], &a [ lugar ] );

	       }

	    k++;

	  }

  }

void inser ( int a [ 100 ], int n )

  {

    int k;

    int lugar;

    int chico;


    k = 0;

    while ( k <= n - 1 )

	  {

	    buscachico ( a, k, n - 1, &lugar );

	    if ( lugar == k )

	       { // No hay Corrimiento;

	       }

	    else

	       {

		 chico = a [ lugar ];

		 recorre ( a, lugar, k + 1 );

		 a [ k ] = chico;

	       }

	    k++;

	  }

  }

void quick ( int a [ 100 ], int n, int izq, int der )

  {

    int m;

    if ( der <= izq )

       { // Termina Llamada Recursiva;

       }

    else

       { // Haciendo Particion;

	 partition ( a, n, izq, der, &m );

	 quick     ( a, n, izq, m - 1 );

	 quick     ( a, n, m + 1, der );

       }

  }

void partition ( int a [ 100 ], int n, int izq, int der, int *m )

  {

    int temp;

    int bajo;

    int alto;


    temp = a [ izq ];

    alto = der;

    bajo = izq;

    while ( bajo < alto )

	  {

	    while ( a [ bajo ] <= temp && bajo < alto )

		  {

		    bajo++;

		  }

	    while ( temp < a [ alto ] )

		  {

		    alto--;

		  }

	    if ( bajo < alto )

	       {

		  intercambia ( &a [ bajo ], &a [ alto ] );

	       }

	  }

    a [ izq ] = a [ alto ];

    a [ alto ] = temp;

    *m = alto;

  }

void recorre ( int a [ 100 ], int lugar, int kf )

  {

    int j;


    j = lugar;

    while ( kf <= j )

	  {

	    a [ j ] = a [ j - 1 ];

	    j--;

	  }

  }

void buscachico ( int a [ 100 ], int k0, int kf, int *lugar )

  {

    int k;

    int chico;


    *lugar = k0;

    chico = a [ k0 ];


    k = k0;

    while ( k <= kf )

	  {

	    if ( a [ k ] < chico )

	       {

		 chico = a [ k ];

		 *lugar = k;

	       }

	    k++;

	  }

  }

void intercambia ( int *a, int *b )

  {

    int temp;

    temp = *a;
      *a = *b;
      *b = temp;

  }


Hosted by www.Geocities.ws

1