7
REPÚBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD RÓMULO GALLEGOS AREA DE INGENIERIA DE SISTEMAS ESCUELA DE INGENIERÍA EN INFORMÁTICA ESTRUCTURAS DISCRETAS II PROF. ARGENIS MENDOZA GUIA DE EJERCICIOS PILAS pilagenerica.h /**************************Pila Genérica*********************************/ template <class T> class PilaGenerica{ class NodoPila{ public: NodoPila *siguiente; T elemento; NodoPila(T x){ elemento = x; siguiente = NULL; } }; NodoPila *cima; public: //Constructor de la clase pilagenerica PilaGenerica(){ cima = NULL; } //Método para añadir elementos a la pila void meter(T elemento); //Método para sacar elementos de la pila T sacar(); const //Método para consultar el elemento en la cima de pila T cimaPila(); const bool pilaVacia(); void limpiarPila(); ~PilaGenerica(){ limpiarPila(); } }; //Implementación Métodos //Método para la Verificación del estado de la pila template <class T> const bool PilaGenerica<T>::pilaVacia() { return cima == NULL; }

Guia Pilas

  • Upload
    argemen

  • View
    590

  • Download
    8

Embed Size (px)

Citation preview

Page 1: Guia Pilas

REPÚBLICA BOLIVARIANA DE VENEZUELAUNIVERSIDAD RÓMULO GALLEGOSAREA DE INGENIERIA DE SISTEMAS

ESCUELA DE INGENIERÍA EN INFORMÁTICAESTRUCTURAS DISCRETAS II

PROF. ARGENIS MENDOZA

GUIA DE EJERCICIOS PILAS

pilagenerica.h

/**************************Pila Genérica*********************************/ template <class T> class PilaGenerica{

class NodoPila{ public:

NodoPila *siguiente; T elemento; NodoPila(T x){

elemento = x; siguiente = NULL;

} };

NodoPila *cima; public:

//Constructor de la clase pilagenerica PilaGenerica(){

cima = NULL; } //Método para añadir elementos a la pila void meter(T elemento); //Método para sacar elementos de la pila T sacar(); const //Método para consultar el elemento en la cima de pila T cimaPila(); const bool pilaVacia(); void limpiarPila(); ~PilaGenerica(){

limpiarPila(); }

}; //Implementación Métodos //Método para la Verificación del estado de la pila

template <class T> const bool PilaGenerica<T>::pilaVacia() {

return cima == NULL; }

Page 2: Guia Pilas

//Método para poner un elemento en la pila template <class T> void PilaGenerica<T>::meter(T elemento){

NodoPila *nuevo; nuevo = new NodoPila(elemento); nuevo->siguiente = cima; cima = nuevo;

}

//Método para sacar un elemento de la pila template <class T> T PilaGenerica<T>::sacar(){

if(pilaVacia()){ throw "Pila vacía, no se puede extraer elementos!";

} T aux = cima->elemento; cima = cima->siguiente; return aux;

}

//Método para la obtención del elemento cima de la pila template <class T> const T PilaGenerica<T>::cimaPila(){

if(pilaVacia()) throw "Pila Vacía";

return cima->elemento; }

//Método para el vaciado de la pila template <class T> void PilaGenerica<T>::limpiarPila(){

NodoPila *n; while(!pilaVacia()){

n = cima; cima = cima->siguiente; delete n;

} }

programa.cpp

#include<iostream> #include"pilagenerica.h" using namespace std;

int main(){ PilaGenerica<int> p, p2; int i, num; for(i=0;i<4;i++){

cout << "Ingrese un numero entero: ";

Page 3: Guia Pilas

cin >> num; p.meter(num);

} while(!p.pilaVacia()){

num = p.sacar(); cout << num << endl; p2.meter(num);

} while(!p2.pilaVacia()){

p.meter(p2.sacar()); } cout << "ELIMINAR UN DATO DE LA PILA" << endl; cout << "Ingrese el numero: "; cin >> num; int aux; bool b=false; while(!p.pilaVacia()){

aux= p.sacar(); if(aux!=num){

p2.meter(aux); } else{

b=true; }

} if(b){

cout << "Dato eliminado!" << endl; } else{

cout << "Dato no pudo eliminarse. No esta en la pila!" << endl; } while(!p2.pilaVacia()){

p.meter(p2.sacar()); }

cout << "PILA RESULTANTE: " << endl; while(!p.pilaVacia()){

cout << p.sacar() << endl; } return 0;

}

programa2.cpp

#include<iostream> #include"pilagenerica.h" using namespace std;

struct Estudiante{ int cedula; string apellido;

Page 4: Guia Pilas

string nombre; float nota;

}; int main(){

PilaGenerica<Estudiante> pila; Estudiante reg; char r; int c=0; float nt=0; cout << "CARGA DE DATOS EN LA PILA" << endl; do{

cout << "DATOS DEL ESTUDIANTE" << endl; cout << "Cedula: "; cin >> reg.cedula; cout << "Apellido: "; cin >> reg.apellido; cout << "Nombre: "; cin>> reg.nombre; cout << "Nota: "; cin >> reg.nota; pila.meter(reg); c++; cout << "Desea ingresar otro estudiante(s/n): "; cin >> r;

}while(toupper(r)=='S'); while(!pila.pilaVacia()){

reg = pila.sacar(); cout << reg.cedula << " " << reg.apellido << " " << reg.nombre << " " << reg.nota

<< endl; } cout << "Total registros: " << c << endl;

}

#include<iostream> #include "pilagenerica.h" using namespace std;

struct Persona{ char cedula[12]; string nombre; string apellido; int edad;

};

int main(){ struct Persona p,aux, mayor; mayor.edad = 0; PilaGenerica<Persona> pila, pila2; for (int i = 0; i<2; i++){

cout << "DATOS PERSONA" << endl; cout << "Cedula: ";

Page 5: Guia Pilas

cin >> p.cedula; cout << "Nombre: "; cin >> p.nombre; cout << "Apellido: "; cin >> p.apellido; cout << "Edad: "; cin >> p.edad; pila.meter(p);

} cout <<"DATOS ALMACENADOS EN LA PILA" << endl; while(!pila.pilaVacia()){

aux = pila.sacar(); if(aux.edad>mayor.edad){

mayor = aux; } cout << aux.cedula << " " << aux.apellido << ", " << aux.nombre << endl; pila2.meter(aux);

}

cout << "Persona con mayor edad es: " << mayor.nombre << ", " << mayor. apellido << endl; while(!pila2.pilaVacia()){

pila.meter(pila2.sacar());

}

}

programa4.cpp

#include<iostream> #include "cpila.h" using namespace std;

int main(){ PilaGenerica<int> p1, p2; int c1 = 0, c2 = 0, acum1 = 0, acum2 = 0, dato; float prom = 0; char r = 'S'; cout << "CARGA DE DATOS EN LAS PILAS" << endl; do{

cout << "Ingrese numero: "; cin >> dato; if(dato%2==0){

p1.meter(dato); c1++; acum1+=dato;

} else{

p2.meter(dato); c2++; acum2 = acum2 + dato;

Page 6: Guia Pilas

} cout << "Desea ingresar otro dato(s/n): "; cin >> r;

}while(r=='s' || r=='S'); cout << "RESULTADOS:" << endl; cout <<"Pila Uno:" << endl; while(!p1.vacia()){

cout << p1.sacar() << endl; } cout << "Total de datos cargados en la pila uno es: " << c1 << endl; cout << "Pila Dos: " << endl; while(!p2.vacia()){

cout << p2.sacar() << endl; } cout << "Total de datos cargados en la pila dos es: " << c2 << endl; if(c1>c2){

cout <<"Pila uno contiene mas datos que la Pila dos" << endl; } else{

if(c2>c1){ cout << "Pila dos contiene mas datos que la Pila Uno: " << endl;

} else{

cout << "Pila Uno y Pila dos contiene la misma cantidad de datos" << endl; }

} prom = (float)(acum1+acum2)/(c1+c2); cout << "El promedio de los datos cargados en la pilas es: " << prom << endl; return 0;

}

Ejercicios Propuestos

1. Desarrollar la implementación dinámica del TDA pila. Las operaciones básicas a considerar son: crearpila, meter, sacar, cimapila, pilavacia.

2. Diseñar un programa que permita cargar Nº cantidad de datos de tipo real en una pila. Al finalizar la carga de los datos. El programa debe mostrar lo siguiente: a) el total datos cargados en la pila, b) el total datos negativos, c) el total datos positivos, d) el mayor de los datos cargados, e) el menor de los datos cargados. Luego de realizar las operaciones con los datos, la pila debe mantener los valores cargados al final del programa. Puede utilizarse una pila, una cola o una lista enlazada como estructura auxiliar.

3. Diseñar un programa que permita manejar los datos de los estudiantes de la sección de estructuras discretas II. Los datos del estudiante son: cédula, nombres, apellidos, sexo, nota. La inserción de los datos está condicionada de la manera siguiente: Si la nota del estudiante es mayor a 5,50 puntos, el registro debe almacenarse en una lista. Si la nota del estudiante es menor o igual a 5,50 puntos, el registro debe almacenarse en una pila. La escala de nota está comprendida entre 1 y 10 puntos. Se deben validar la entrada de la notas. El programa no puede permitir cargar notas con un valor que no este comprendido entre dichos valores. Una

Page 7: Guia Pilas

vez cargados los datos, el programa debe mostrar: a) Promedio de notas de la sección, b) Total de estudiantes aprobados, c)Total de estudiantes reprobados, d) Los datos de la persona con la nota mas alta.

4. Crear un método en la clase pila que permita comparar dos pilas, a fin de determinar si ambas son iguales o no.

5. Desarrollar un programa que permita manejar información personal y académica de los estudiantes inscritos en la sección 1 de la asignatura base de datos, utilizando como estructura de almacenamiento una pila. Los datos que se deben cargar por cada estudiante son los siguientes: cédula, apellido, nombre, sexo, correo electrónico, nota obtenida en el primero, segundo y tercer lapso. El programa debe calcular la nota final obtenida, una vez ingresada las notas obtenidas en cada uno de los lapsos. Las operaciones que debe ofrecer el programa al usuario son: a) agregar estudiante, b) buscar estudiante por cédula, c) buscar por apellido, d) mostrar listado de estudiantes cargados, e) mostrar cantidad de estudiantes aprobados, f) mostrar cantidad estudiantes reprobados, g) eliminar estudiante, h) mostrar el promedio obtenido por la sección. Se recomienda utilizar un menú de opciones, donde se muestren cada una de las operaciones que pueden realizarse. Puede crearse una clase estudiante o una estructura con los atributos indicados para el estudiante.