Version:0.9 StartHTML:0000000105 EndHTML:0000007943 StartFragment:0000000152 EndFragment:0000007909
/******************************************************/
/*************** Isidro Pastor Jorda ******************/
/*************** Noemi Ruth Moya Hinojo ***************/
/******************************************************/
/****************** Telematica ************************/
/******************** FPII ****************************/
/****************** Practica 3 ************************/
/******************************************************/
#include <iostream.h>
#include <stdlib.h>
#include <cstdlib> //include para utilizar las funcion rand();
#include "PilaE.h"
typedef int Vector[TALLAMAX];
bool Ordenar (Vector v);
int main()
{
int i;
Vector v;
i = 0;
while(i <= TALLAMAX -1) // Generamos el vector aleatorio
{
v[i] = (1 + rand()%20 ) - 4; // Asi generamos tambien numeros negativos dentro del vector
cout << v[i] << " ";
i++;
}
if (Ordenar (v) ) // Llamamos a la funcion para ordenar el vector dentro del if
{
cout << endl << " El vector ordenado es: ";
for (i = 0; i <= TALLAMAX - 1; i++) // mostramos por pantalla el vector ordenado
cout << v[i] << " ";
cout << endl << endl;
}
else // Si se produjeron errores durante la ordenacion mostramos el error por pantalla
cerr << endl << " Se Produjeron errores durante la ordenacion" << endl;
system("PAUSE");
return 0;
}
/*****************************************************************************
* Funcion: Ordenar
* Descripcion: Ordena un vector pasado como paramtro a la funcion utilizando
* el metodo de insercion directa usando la clase pila. Creamos
* dos pilas donde iremos haciendo la ordenacion
*
*
* Parametros:
*
* Nombre E/S Descripcion
* ------ ----- -----------
* v E/S Vector a ordenar
*
*
*
* Valor devuelto:
* bool, cierto si se ha podido ordenar el vector correctamente y falso
* si se produjeron errores durante la ordenacion.
*****************************************************************************/
bool Ordenar (Vector v)
{
int i, x, cima;
bool ok, apilado;
Pila a, b;
ok = true; // Variable para controlar si se producen errores
i = 0; // variable indice para recorrer el vector
while ( i <= TALLAMAX-1 && ok) // bucle para recorrer todos los valores del vector
{
apilado = false; // inicializamos una variable de control que sera true cuando hayamos apilado el dato
x = v[i]; // almacenamos el dato que queremos introducir en la pila en x
do
{
if ( a.PilaVacia() ) // si la pila a esta vacia
apilado = a.Apilar(x); // Directamente apilamos el dato x en la pila a
else
{
a.CimaPila(cima); // Obtenemos la cima de la pila a
if ( x < cima ) // y la comparamos con x
{
b.Apilar(cima); // Si x es menor que la cima de a, apilamos en b la cima de a
a.Desapilar(); // y desapilamos de a
}
else
apilado = a.Apilar(x);// Si x es mayor que la cima de a apilamos directamente en a
} // else
/******************************************************
* Una vez hayamos apilado el elemento en la pila a *
* movemos todos los elementos que tengamos en la pila *
* b a la pila a *
*******************************************************/
while (!(b.PilaVacia()) && ok && apilado)
{
b.CimaPila(cima);
ok = a.Apilar(cima);
b.Desapilar();
}
}
while (!apilado && ok); // Si no hemos apilado el dato continuamos las comparaciones tras desapilar de a
i++; // aumentamos el contador indice del vector para coger el siguiente elemento a insertar
} // while
if (ok) // Si todo ha ido bien copiamos los elementos de la pila a al vector
{
for ( i = 0; i <= TALLAMAX - 1; i++)
{
a.CimaPila( v[i] );
a.Desapilar();
}
} // con esto ya tendriamos el vector totalmente ordenado de mayor a menor
return (ok); // Devolvemos ok para saber si se produjeron fallos en la ordenacion
};