domingo, 23 de agosto de 2015

ORDENAMIENTOS

ORDENAMIENTO

Consiste en encontrar el menor de todos los elementos del arreglo o vector e intercambiarlo con el que está en la primera posición. Luego el segundo mas pequeño, y así sucesivamente hasta ordenarlo todo. Su implementación requiere O(n2) comparaciones e intercambios para ordenar una secuencia de elementos.

APLICACION
A pesar de que el ordenamiento  es uno de los algoritmos más sencillos de implementar, su ordenO(n2) lo hace muy ineficiente para usar en listas que tengan más que un número reducido de elementos. Incluso entre los algoritmos de ordenamiento de orden O(n2), otros procedimientos como el ordenamiento por inserción son considerados más eficientes. Dada su simplicidad, el ordenamiento es utilizado para introducir el concepto de algoritmo de ordenamiento para estudiantes de ciencias de la computación. A pesar de esto, algunos investigadores como Owen Astrachan han criticado su popularidad en la enseñanza de ciencias de la computación, llegando a recomendar su eliminación de los planes de estudio. Sumado a esto, Jargon File, un libro ampliamente citado en la cultura hacker, lo denomina "el mal algoritmo genérico", y Donald Knuth, uno de los mayores expertos en ciencias de la computación, afirma que el ordenamiento "no parece tener nada para recomendar su uso, a excepción de un nombre pegajoso y el hecho de que conlleva a problemas teóricos interesantes". El ordenamiento  es asintóticamente equivalente, en tiempos de ejecución, con el ordenamiento por inserción en el peor de los casos, pero ambos algoritmos difieren principalmente en la cantidad de intercambios que son necesarios. Resultados experimentales como los descubiertos por Astrachan han demostrado que el ordenamiento por inserción funciona considerablemente mejor incluso con listas aleatorias. Por esta razón, muchos libros de algoritmos modernos evitan usar el ordenamiento de burbuja, reemplazándolo por el ordenamiento por inserción. El ordenamiento  interactúa vagamente con el hardware de las CPU modernas. Requiere al menos el doble de escrituras que el ordenamiento por inserción, el doble de pérdidas de cache, y asintóticamente más predicción de saltos. Varios experimentos de ordenamiento de cadenas en Java hechos por Astrachan muestran que el ordenamiento de burbuja es 5 veces más lento que el ordenamiento por inserción, y 40% más lento que el ordenamiento por selección.


 EJEMPLO:

// USO DE VECTORES
#include<iostream>
#include<math.h>
using namespace std;

// ZONA DE DECLARACION PUBLICA
const int m=3, n=3, z=20;
int i, j, sumatoria, Busca, YY, XX, R, ZZ, Elementos, AUX;

int M[n][m]; // DECLARACION DE UNA MATRIZ
int V[z];

void LeerMatriz(); // DECLARACION FUNCIONES
void EscribirMatriz();
void Buscar(int YY);
int SumarElementos();
void LeerVector(int XX);
void EscribirVector(int XX);
void OrdenaVector(int XX);
void Vectorizando(int ZZ);
void Matriceando(int ZZ);

int main ()
{
 int opcion;
 do
 {      //INICIO DEL DO - WHILE
  cout<<"********* MENU DE UNA MATRIZ **********\n\n";
  cout<<" 1) LECTURA DE LA MATRIZ n*m \n";
  cout<<" 2) ESCRITURA DE LA MATRIZ n*m \n";
  cout<<" 3) ENCONTRAR EL ELEMENTO \n";  
  cout<<" 4) SUMAR ELEMENTOS EN LA MATRIZ \n";
  cout<<" 5) LECTURA DE UN VECTOR[z] \n";
  cout<<" 6) ESCRITURA DE UN VECTOR[z] \n";
  cout<<" 7) ORDENAR EL VECTOR[z] \n";
  cout<<" 8) VECTORIZAR LA MATRIZ \n";
  cout<<" 9) MATRICEAR EL VECTOR \n\n";
   
  cout<<"       DIGITE <0> PARA SALIR \n";
  cout<<"       Elija una Opcion < > \n\n";
  cout<<"*************************************\n\n";
  cout<<"   ELIJA UNA OPCION : "; cin>>opcion;
    //2)ASIGNACION
    switch (opcion)
    { //INICIO DEL CASO 1
    case 1:
     {// CONTENIDO 1 (INICO)
       cout<<"******* LECTURA DE LA MATRIZ ******\n\n";
       LeerMatriz();
       cout<<"************************************\n\n";
    } //FIN DEL CASO 1
     break;    
  case 2:
     {//INICIO DEL CASO 2
       cout<<"******* ESCRITURA DE LA MATRIZ ******\n\n";
       EscribirMatriz();
       cout<<"*********************************\n\n";
     } //FIN DEL CASO 2
    break;

  case 3:
     {//INICIO DEL CASO 3
       cout<<"******* ENCONTRAR UN ELEMENTO DE LA MATRIZ ******\n\n";
       cout<<"Ingrese el e-nesimo elemento a Buscar: "; cin>> Busca;    
       Buscar(Busca);
       cout<<"*********************************\n\n";
     } //FIN DEL CASO 2
    break;

  case 4:
     {//INICIO DEL CASO 4
       cout<<"******* SUMAR ELEMENTOS EN LA MATRIZ ******\n\n";
       R = SumarElementos();
       cout<<"LA SUMA DE LOS ELEMENTOS DE LA MATRIZ ES:"<< R<< endl;
       cout<<"\n******************************************\n\n";
     } //FIN DEL CASO 2
    break;

   case 5:
     {//INICIO DEL CASO 5
      cout<<"******* LECTURA DE UN VECTOR[z] ******\n\n";
      cout<<"Ingrese el número de elementos del V[z]"; cin>>Elementos;
      LeerVector(Elementos);
      cout<<"\n******************************************\n\n";
     } //FIN DEL CASO 2
    break;
 
   case 6:
     {//INICIO DEL CASO 6
      cout<<"*******   ESCRITURA DE UN VECTOR[z] ******\n\n";
      EscribirVector(Elementos);
      cout<<"\n******************************************\n\n";
     } //FIN DEL CASO 2
    break;

   case 7:
     {//INICIO DEL CASO 7
      cout<<"******* ORDENAR EL VECTOR[z] ******\n\n";
      OrdenaVector(Elementos);
      cout<<"\n******************************************\n\n";
     } //FIN DEL CASO 2
    break;

   case 8:
     {//INICIO DEL CASO 8
      cout<<"******* VECTORIZAR LA MATRIZ  ******\n\n";
      cout<<"Ingrese el número de elementos del V[z]"; cin>>Elementos;
      Vectorizando(Elementos);
      cout<<"\n******************************************\n\n";
     } //FIN DEL CASO 2
    break;

   case 9:
     {//INICIO DEL CASO 9
      cout<<"******* MATRICEAR EL VECTOR   ******\n\n";
      Matriceando(Elementos);
      cout<<"\n******************************************\n\n";
     } //FIN DEL CASO 2
    break;


   }// FIN DE SWITCH
 }while (opcion !=0); // FIN DEL DO - WHILE

  cout<<endl;cout<<"\n";
  system("pause");
  return 0;
} //FIN DEL PROGRAMA

// ZONA DE DESARROLLO DE FUNCIONES

void LeerMatriz()
{
  cout<<endl;
  cout<<"LECTURA DE LA MATRIZ M "<<endl;
  for(i=1; i<=n; i++)
    for(j=1; j<=m; j++)
     {
     cout<<"ingrese valor del elemento M["<<i<<"]["<<j<<"] = "; cin>>M[i][j];
     }    
  cout<<endl;
}

void EscribirMatriz()
{
  cout<<endl;
  cout<<"ESCRITURA DE LA MATRIZ M "<<endl;
  for(i=1; i<=n; i++)
    for(j=1; j<=m; j++)
     {
     cout<<"El elemento M["<<i<<"]["<<j<<"] = "<<M[i][j]<<endl;
     }    
  cout<<endl;
}

void Buscar(int YY)
{
 for(i=1; i<=n; i++)
  for(j=1; j<=m; j++)  
   {
     if (M[i][j]==YY)      
     cout<<" Encontrmos al elemento M["<<i<<"]["<<j<<"] = "<<M[i][j] <<endl;
   }    
} // FIN DE BUSCAR

int SumarElementos()
{
 sumatoria = 0;
 for(i=1; i<=n; i++)
  for(j=1; j<=m; j++)
   {
    sumatoria = sumatoria + M[i][j];
   }
   return sumatoria;
} // FIN DE SUMAR

void LeerVector(int XX)
{
 cout<<endl;
 cout<<"LECTURA DEL VECTOR V[z] "<<endl<<endl;
  for(i=1; i<=XX; i++)
   {
   cout<<"Ingrese valor del elemento V["<<i<<"] = "; cin>>V[i];
   }    
 cout<<endl;
}

void EscribirVector(int XX)
{
 cout<<endl;
 cout<<"ESCRITURA DEL VECTOR V[z] "<<endl<<endl;
  for(i=1; i<=XX; i++)
   {
   cout<<"Elemento V["<<i<<"] = "<< V[i]<< endl;
   }    
 cout<<endl;
} // FIN DEL ESCRIBIR

void OrdenaVector(int XX)
{

 for(i=1; i<=XX; i++)
  for(j=1; j<=XX-1; j++)
   {
    if(V[j] > V[j+1])
     {
       AUX = V[j];
       V[j] = V[j+1];
       V[j+1] = AUX;
     }
   }
   EscribirVector(XX);
} // FIN DE ORDENA

void Vectorizando(int ZZ)
{
 int k;  
 k=1;  
 for(i=1; i<=n; i++)
  for(j=1; j<=m; j++)
   {
     V[k]=M[i][j];
     k++;
   }
}

void Matriceando(int ZZ)
{
 int k;  
 k=1;  
 for(i=1; i<=n; i++)
  for(j=1; j<=m; j++)
   {
    M[i][j] = V[k];
     k++;
   }
}

ESTRUCTURA VECTOR (MATRIZ)

MATRICES
Una matriz es un vector de vectores o un también llamado array bidimensional. La manera de declarar una matriz es C++ es similar a un vector:
int es el tipo de dato, matrix es el nombre del todo el conjunto de datos y debo de especificar el numero de filas y columnas.
Las matrices también pueden ser de distintos tipos de datos como char, float, double, etc. Las matrices en C++ se almacenan al igual que los vectores en posiciones consecutivas de memoria.
Usualmente uno se hace la idea que una matriz es como un tablero, pero internamente el manejo es como su definición lo indica, un vector de vectores, es decir, los vectores están uno detrás del otro juntos.
La forma de acceder a los elementos de la matriz es utilizando su nombre e indicando los 2 subíndices que van en los corchetes.
No olvidar que tanto filas como columnas se enumeran a partir de 0. Bueno y para recorrer una matriz podemos usar igualmente un bucle. En este caso usando 2 for:
EJEMPLO :

#include<iostream>
#include<math.h>
using namespace std;

// ZONA DE DECLARACION PUBLICA
const int m=3, n=3;
int i, j, sumatoria, Busca, YY, R;

int M[n][m]; // DECLARACION DE UNA MATRIZ

void LeerMatriz(); // DECLARACION FUNCIONES
void EscribirMatriz();
void Buscar(int YY);
int SumarElementos();

int main ()
{
 int opcion;
 do
 {      //INICIO DEL DO - WHILE
  cout<<"********* MENU DE UNA MATRIZ **********\n\n";
  cout<<" 1) LECTURA DE LA MATRIZ n*m \n";
  cout<<" 2) ESCRITURA DE LA MATRIZ n*m \n";
  cout<<" 3) ENCONTRAR EL ELEMENTO \n";  
  cout<<" 4) SUMAR ELEMENTOS EN LA MATRIZ \n\n";
  cout<<"       DIGITE <0> PARA SALIR \n";
  cout<<"       Elija una Opcion < > \n\n";
  cout<<"*************************************\n\n";
  cout<<"   ELIJA UNA OPCION : "; cin>>opcion;
    //2)ASIGNACION
    switch (opcion)
    { //INICIO DEL CASO 1
    case 1:
     {// CONTENIDO 1 (INICO)
       cout<<"******* LECTURA DE LA MATRIZ ******\n\n";
       LeerMatriz();
       cout<<"************************************\n\n";
    } //FIN DEL CASO 1
     break;    
  case 2:
     {//INICIO DEL CASO 2
       cout<<"******* ESCRITURA DE LA MATRIZ ******\n\n";
       EscribirMatriz();
       cout<<"*********************************\n\n";
     } //FIN DEL CASO 2
    break;

  case 3:
     {//INICIO DEL CASO 3
       cout<<"******* ENCONTRAR UN ELEMENTO DE LA MATRIZ ******\n\n";
       cout<<"Ingrese el e-nesimo elemento a Buscar: "; cin>> Busca;    
       Buscar(Busca);
       cout<<"*********************************\n\n";
     } //FIN DEL CASO 2
    break;

  case 4:
     {//INICIO DEL CASO 4
       cout<<"******* SUMAR ELEMENTOS EN LA MATRIZ ******\n\n";
       R = SumarElementos();
       cout<<"LA SUMA DE LOS ELEMENTOS DE LA MATRIZ ES:"<< R<< endl;
       cout<<"\n******************************************\n\n";
     } //FIN DEL CASO 2
    break;

   }// FIN DE SWITCH
 }while (opcion !=0); // FIN DEL DO - WHILE

  cout<<endl;cout<<"\n";
  system("pause");
  return 0;
} //FIN DEL PROGRAMA

// ZONA DE DESARROLLO DE FUNCIONES

void LeerMatriz()
{
  cout<<endl;
  cout<<"LECTURA DE LA MATRIZ M "<<endl;
  for(i=1; i<=n; i++)
    for(j=1; j<=m; j++)
     {
     cout<<"ingrese valor del elemento M["<<i<<"]["<<j<<"] = "; cin>>M[i][j];
     }    
  cout<<endl;
}

void EscribirMatriz()
{
  cout<<endl;
  cout<<"ESCRITURA DE LA MATRIZ M "<<endl;
  for(i=1; i<=n; i++)
    for(j=1; j<=m; j++)
     {
     cout<<"El elemento M["<<i<<"]["<<j<<"] = "<<M[i][j]<<endl;
     }    
  cout<<endl;
}

void Buscar(int YY)
{
 for(i=1; i<=n; i++)
  for(j=1; j<=m; j++)  
   {
     if (M[i][j]==YY)      
     cout<<" Encontrmos al elemento M["<<i<<"]["<<j<<"] = "<<M[i][j] <<endl;
   }    
} // FIN DE BUSCAR

int SumarElementos()
{
 sumatoria = 0;
 for(i=1; i<=n; i++)
  for(j=1; j<=m; j++)
   {
    sumatoria = sumatoria + M[i][j];
   }
   return sumatoria;
} // FIN DE SUMAR

ESTRUCTURA VECTOR


Los vectores son una forma de almacenar datos que permiten contener una serie de valores del mismo tipo, cada uno de los valores contenidos tiene una posición asociada que se usará para accederlos. Está posición o índice será siempre un número entero positivo.
En C la cantidad de elementos que podrá contener un vector es fijo, y en principio se define cuando se declara el vector. Los vectores se pueden declarar de la siguiente forma:
 tipo_elemento nombre[largo];
Esto declara la variable nombre como un vector de tipo_elementos que podrá contener largo cantidad de elementos, y cada uno de estos elemento podrá contener un valor de tipo tipo_elemento.
Por ejemplo:
 double valores[128];
En este ejemplo declaramos un vector de 128 elementos del tipo double, los índices de los elementos irían entre 0 (para el primer elemento y 127 para el último).
De la misma forma que con las otras declaraciones de variables que hemos visto se le puede asignar un valor iniciar a los elementos.
O también se pueden declarar:
 tipo_elemento nombre[largo]={valor_0, valor_1, valor_2};
En caso estamos asignadole valores a los primeros 3 elementos del vector nombre. Notar que largo debe ser mayor o igual a la cantidad de valores que le estamos asignando al vector, en el caso de ser la misma cantidad no aporta información, por lo que el lenguaje nos permite escribir:
 tipo_elemento nombre[]={valor_0, valor_1, valor_2};
Que declarará nombre como el vector de largo 3.
Para acceder a un elemento accederemos a través de su posición. Es decir:
tipo_elemento elemento;
...
elemento = nombre[2];
Asumiendo que tenemos el vector anterior definido estaríamos guardando valor_2 en elemento.
Veamos algunos ejemplos:
/*
* Ejemplo : El producto escalar de dos vectores
*/
#include <stdio.h>
double producto_escalar(double v1[], double v2[], int d);
int main()
{
const int largo = 3;
double vector_1[] = {5,1,0};
double vector_2[] = {-1,5,3};
double resultado = producto_escalar(vector_1, vector_2, largo);
// imprime el resultado
printf("(%f, %f, %f) . (%f, %f, %f) = %f\n",
vector_1[0], vector_1[1], vector_1[2],
vector_2[0], vector_2[1], vector_2[2],
resultado);
return 0;
}
/* producto escalar entre dos vectores */
double producto_escalar(double v1[], double v2[], int d)
{
double resultado = 0;
int i;
for (i=0; i < d; i++) {
resultado += v1[i] * v2[i];
}
return resultado;
}
En el ejemplo anterior usamos los vectores de C para representar vectores matemáticos y calcular el producto escalar entre ellos. Una peculiaridad que se puede notar es que al recibir un arreglo en una función no se especifica el largo, volveremos a esto en un capítulo posterior.
Otra función clásica es la búsqueda de un máximo o mínimo, que podemos escribirla de la siguiente manera:
int buscar_maximo(double valores[], int num_valores)
{
int maximo_pos = 0;
for (int i = 1; i < num_valores; i++) {
if (valores[i] > valores[maximo_pos]) {
maximo_pos = i;
}
}
return maximo_pos;
}
Otro ejemplo sencillo, calcular el promedio de los valores.
double promedio(double valores[], int largo)
{
double suma=0;
for (int i=0;i<largo;i++) {
suma+=valores[i];
}
return suma/largo;
}
Cuando una función recibe un vector por parámetro y cambia su contenido y el cambio es permanente (se ve aún fuera de la función). Esto puede parecer extraño después del énfasis que pusimos en resaltar que todos los parámetros de una función se reciben por valor, pero se aclarará en el siguiente capitulo.
Mientras tanto usemos esto para definir una función que le aplique otra función que recibe por parámetro a cada elemento del vector, guardando el resultado en el mismo vector y una llamada de ejemplo a esta.
void cuadrados(double vector[], int largo)
{
for (int i=0;i<largo;i++) {
vector[i]=cuadrado(vector[i]);
}
}
...
double cuadrado(double valor) {
return valor*valor;
}
...
cuadrados(elementos,num_elem);
...
De la misma forma que venimos usando vectores de tipos básicos, podemos tener vectores de vectores, estos se declaran de la siguiente forma:
int matriz[3][7];
int tabla[3][4]={ { 1, 2, 3, 4},
{ 5, 6, 7, 8}, /* los espacios y saltos de líneas no son tomados en cuenta */
{ 9,10,11,12} };
double v[2][2][2];
...
printf("tabla[0][1]: %i\n", tabla[0][3]); // Imprime 4
printf("tabla[2][0]: %i\n", tabla[2][0]); // Imprime 9
...
En este ejemplo tabla es un vector de longitud 3, cuyos elementos son vectores de longitud 4 de elementos de tipo int.
En resumen, suponiendo que v[n] es un vector de cualquier tipo de dato con n cantidad de posiciones, al vector v se le aplican las siguientes reglas:
  1. La primera posición siempre será v[0]
  2. La última posición es v[n-1]
  3. En versiones previas a C99 n es una constante definida antes de la declaración de v[n]

EJEMPLO
// USO DE VECTORES
#include<iostream>
#include<math.h>
using namespace std;

// ZONA DE DECLARACION PUBLICA
int i, m, contador, SUMADOR, Max, Min, may, men;
double Promedio;
const int n=10;
int Lista[n], Numero; // DECLARACION DE UN VECTOR

int main ()
{
 int opcion;
 do
 {      //INICIO DEL DO - WHILE
  cout<<"********* MENU DE FUNCIONES **********\n\n"; 
  cout<<" 1) LECTURA DE LA LISTA DE NUMEROS \n";
  cout<<" 2) ESCRITURA DE LA LISTA DE NUMEROS \n";  
  cout<<" 3) ENCONTRAR EL n-esimo ELEMENTO \n";    
  cout<<" 4) CONTAR ELEMENTOS EN EL VECTOR \n";
  cout<<" 5) SUMAR LOS ELEMENTOS EN EL VECTOR \n";  
  cout<<" 6) PROMEDIO DE LOS ELEMENTOS DEL VECTOR \n";    
  cout<<" 7) MAX y MIN DE LOS ELEMENTOS DEL VECTOR \n";      
  cout<<" 8) BAJO y SOBRE EL PROMEDIO DE LOS ELEMENTOS DEL VECTOR \n\n";        
  cout<<"       DIGITE <0> PARA SALIR \n";
  cout<<"       Elija una Opcion < > \n\n";
  cout<<"*************************************\n\n";
  cout<<"   ELIJA UNA OPCION : "; cin>>opcion;
    //2)ASIGNACION
    switch (opcion)
    { //INICIO DEL CASO 1
    case 1: 
     {// CONTENIDO 1 (INICO)
       cout<<"******* LECTURA DE LA LISTA DE LOS NUMEROS ******\n\n";
       for(i=1; i<=n; i++)
       {
       cout<<"ingrese el Numero al Vector Lista["<<i<<"] = "; cin>> Lista[i];
       }       
       cout<<"*********************************\n\n";
    } //FIN DEL CASO 1
     break;      
  case 2: 
     {//INICIO DEL CASO 2
       cout<<"******* ESCRITURA DE LA LISTA DE LOS NUMEROS ******\n\n";
       for(i=1; i<=n; i++)
       {
       cout<<" Lista["<<i<<"] = "<< Lista[i] <<endl;
       }       
       cout<<"*********************************\n\n";
     } //FIN DEL CASO 2
    break;
     
  case 3: 
     {//INICIO DEL CASO 3
       cout<<"******* ENCONTRAR EL n-esimo ELEMENTO ******\n\n";
       cout<<"Ingrese el e-nesimo elemento a Buscar: "; cin>> m;
       
       for(i=1; i<=n; i++)
       {
        if (i==m)        
          cout<<" Encontrmos en la Lista["<<i<<"] = "<< Lista[i] <<endl;
       }       
       cout<<"*********************************\n\n";
     } //FIN DEL CASO 2
    break;

  case 4: 
     {//INICIO DEL CASO 4
       cout<<"******* CONTAR ELEMENTOS EN EL VECTOR ******\n\n";
       cout<<"Ingrese el elemento a CONTAR: "; cin>> Numero;
       contador=0; // INICIALIZACION
       for(i=1; i<=n; i++)
       {
        if (Numero==Lista[i])        
         contador = contador + 1;
       } 
       cout<<"Hay "<< contador << " Elementos con el numero "<< Numero <<" en la lista"<<endl;      
       cout<<"******************************************\n\n";
     } //FIN DEL CASO 4
    break;


  case 5: 
     {//INICIO DEL CASO 4
       cout<<"******* SUMAR LOS ELEMENTOS EN EL VECTOR ******\n\n";
       SUMADOR=0; // INICIALIZACION
       for(i=1; i<=n; i++)
       {
        SUMADOR = SUMADOR + Lista[i];
       } 
       cout<<"La suma de los Elementos en la lista es: "<< SUMADOR <<endl;      
       cout<<"******************************************\n\n";
     } //FIN DEL CASO 5
    break;

  case 6: 
     {//INICIO DEL CASO 6
       cout<<"******* PROMEDIO DE LOS ELEMENTOS DEL VECTOR ******\n\n";
       SUMADOR=0; // INICIALIZACION
       for(i=1; i<=n; i++)
       {
        SUMADOR = SUMADOR + Lista[i];
       } 
       Promedio = SUMADOR/n;
       cout<<"El promedio de los Elementos en la lista es: "<< Promedio <<endl;      
       cout<<"******************************************\n\n";
     } //FIN DEL CASO 6
    break;

  case 7: 
     {//INICIO DEL CASO 7
       cout<<"******* <MAX y MIN DE LOS ELEMENTOS DEL VECTOR ******\n\n";
       Max = 0;
       Min = 100;
       for(i=1; i<=n; i++)
       {
          if (Lista[i] > Max)
            Max = Lista[i];

          if (Lista[i] < Min)
            Min = Lista[i];
       } 
       cout<<"El minimo de los Elementos en la lista es: "<< Min <<endl;      
       cout<<"El maximo de los Elementos en la lista es: "<< Max <<endl;      
       cout<<"******************************************\n\n";
     } //FIN DEL CASO 6
    break;


  case 8: 
     {//INICIO DEL CASO 8
       cout<<"******* BAJO y SOBRE EL PROMEDIO DE LOS ELEMENTOS DEL VECTOR ******\n\n";

       SUMADOR=0; // INICIALIZACION
       for(i=1; i<=n; i++)
       {
        SUMADOR = SUMADOR + Lista[i];
       } 
       Promedio = SUMADOR/n;
       cout<<"El promedio de los Elementos en la lista es: "<< Promedio <<endl;      

       may = 0;
       men = 0;
       for(i=1; i<=n; i++)
       {
        if (Lista[i] < Promedio)
           men = men + 1;
        if (Lista[i] > Promedio)
           may = may + 1;
       } 
       cout<<"Menores al promedio de los Elementos en la lista es: "<< men <<endl;      
       cout<<"Mayores al promedio de los Elementos en la lista es: "<< may <<endl;      
       cout<<"******************************************\n\n";
     } //FIN DEL CASO 6
    break;
     
   }// FIN DE SWITCH  
 }while (opcion !=0); // FIN DEL DO - WHILE

  cout<<endl;cout<<"\n";
  system("pause");
  return 0;
} //FIN DEL PROGRAMA