Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] PILAS Y COLAS-ayuda por favor

Estas en el tema de PILAS Y COLAS-ayuda por favor en el foro de C/C++ en Foros del Web. hola,soy estudiante de sistemas c++ y acabo de tener un final pero me fue mal y quisiera ver como es el ejercicio completo.si alguien puede ...
  #1 (permalink)  
Antiguo 19/06/2013, 20:25
Avatar de swator  
Fecha de Ingreso: junio-2013
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 1
Pregunta PILAS Y COLAS-ayuda por favor

hola,soy estudiante de sistemas c++ y acabo de tener un final pero me fue mal y quisiera ver como es el ejercicio completo.si alguien puede ayudarme se lo agradeceria.les dejo el enunciado
mi mail es [email protected] cualquier cosa avises muchas gracias.





A partir del siguiente código, escribir obligatoriamente en donde se indica CON EL TEXTO "<---- COMPLETAR" las rutinas faltantes o incompletas.

También completar la función main() haciendo que cumpla con el objetivo que se indica más adelante en la función main.

El código entregado se puede alterar si se lo considera necesario y que encuentren un error en el mismo.

Las estructuras a completar son:

t_pila
t_cola

Las funciones a completar son:

void encolar(...., t_dato dato)
void desapilar(...., t_dato dato)
void pilaLlena(...)
void vaciarPila(...)
void vaciarCola(...)
void colaVacia(...)
void main()


#include <iostream>
using namespace std;

typedef int t_dato

struct t_nodo{
t_dato dato;
t_nodo * sig;
};

struct t_pila {
...
}

struct t_cola {
...
}
//----- Rutinas a completar

void encolar(...., t_dato dato) <---- COMPLETAR Y DESARROLLAR

void desapilar(...., t_dato dato) <---- COMPLETAR Y DESARROLLAR

void pilaLlena(...) <---- COMPLETAR Y DESARROLLAR

void vaciarPila(...) <---- COMPLETAR Y DESARROLLAR

void vaciarCola(...) <---- COMPLETAR Y DESARROLLAR

void colaVacia(...) <---- COMPLETAR Y DESARROLLAR

//-----
bool pilaVacia (t_pila pila){
return (pila.cab == NULL);
}
//-----
bool colaLlena (t_cola cola){
t_nodo * aux = new t_nodo;
if (aux) {
delete aux;
return false;
} else
return true;
}

t_dato VerPrimero(t_cola cola) {
if (ColaVacia(cola)) {
return -1;
} else {
return cola.frente->dato;
}
}
//----------------------------
t_dato ExtraerPrimero(t_cola cola) {
t_dato valor;
t_nodo * nodo;
if (ColaVacia(cola)) {
cout << "NO HAY DATOS!";
esperar()
return -1;
} else {
nodo = cola.frente;
cola.frente = cola.frente->sig;
if (!cola.frente)
cola.fondo = NULL;
valor = nodo->dato;
delete nodo;
return valor;
}
}
}
//----------------------------
void limpiarPantalla(){
system("cls");
cout<<"***"<<endl<<"TC2 - Tercer examen de avance"<<endl<<"***"<<endl;
}
//----------------------------
void esperar(){
cout<<endl<<"Pulse una tecla para continuar..."<<endl;
getchar();
}

bool EsValido(t_cola cola, t_dato num) {
return (num < VerPrimero(cola));
}
//-----------------------------
void main (){
/*
Definir y e inicializar las estructuras necesarias
Apilar 100 números al azar.
Extraerlos de la pila y, si cumplen con la condición EsValido(cola, numero), encolarlos.
Mostrar por pantalla los números encolados y el valor promedio de los mismos.
Vaciar las estructuras que se necesiten vaciar antes de terminar el programa.
*/
}
  #2 (permalink)  
Antiguo 20/06/2013, 15:31
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 12 años, 4 meses
Puntos: 17
Respuesta: PILAS Y COLAS-ayuda por favor

Pero entonces no has hecho nada¿¿

Ni siquiera lo has empezado a intentar???

Saludos.
  #3 (permalink)  
Antiguo 21/06/2013, 19:52
Avatar de swator  
Fecha de Ingreso: junio-2013
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: PILAS Y COLAS-ayuda por favor

si,hice todo lo que pude !!!...te lo dejo aca.si podes decirme que es lo que esta mal y guiarme un poco te lo agradeceria.

#include <iostream>
#include <ramdom>

using namespace std;

typedef int t_dato;

typedef struct t_nodo{
t_dato dato;
t_nodo * sig;
};

typedef struct t_pila {
t_nodo *pila;
};

typedef struct t_cola {
t_nodo *frente;
t_nodo *fondo;
};
//----- Rutinas a completar


void encolar(t_cola *&cola, t_dato &dato) <---- COMPLETAR

void desapilar(t_pila *&pila, t_dato &dato) <---- COMPLETAR

bool pilaLlena(t_pila *pila) <---- COMPLETAR

void vaciarPila(t_pila *&pila,t_dato &dato) <---- COMPLETAR

void vaciarCola(t_cola *&cola,t_dato &dato) <---- COMPLETAR

bool colaVacia(t_cola *cola) <---- COMPLETAR

//-----
bool pilaVacia (t_pila pila){
return (pila.cab == NULL);
}
//-----
bool colaLlena (t_cola *cola){
t_nodo * aux = new t_nodo;
if (aux) {
delete aux;
return false;
} else
return true;
}

t_dato VerPrimero(t_cola *cola) {
if (ColaVacia(cola)) {
return -1;
} else {
return cola.frente->dato;
}
}
//----------------------------
t_dato ExtraerPrimero(t_cola *cola) {
t_dato valor;
t_nodo * nodo;
if (ColaVacia(cola)) {
cout << "NO HAY DATOS!";
esperar()
return -1;
} else {
nodo = cola.frente;
cola.frente = cola.frente->sig;
if (!cola.frente)
cola.fondo = NULL;
valor = nodo->dato;
delete nodo;
return valor;
}
}
}
//----------------------------
void limpiarPantalla(){
system("cls");
cout<<"***"<<endl<<"TC2 - Tercer examen de avance"<<endl<<"***"<<endl;
}
//----------------------------
void esperar(){
cout<<endl<<"Pulse una tecla para continuar..."<<endl;
getchar();
}

bool EsValido(t_cola cola, t_dato num) {
return (num < VerPrimero(cola));
}
//-----------------------------
void main (){
/*


t_pila * pilaRamdom;
t_dato dato;
t_dato num;
t_cola * cola;
cola=new t_nodo;
float Acum;
Acum=0;
int Cant;
Cant=0;

if (!(pilaVacia(pilaRamdom))){
apilar (pilaRamdom,dato)
}else{
cout<<"la pila esta vacia"<<endl;
}
if (!(pilaLlena(pilaRamdom))){
desapilar(pilaRamdom,dato)
}else{
cout<<"la pila esta vacia"<<endl;
}
desapilar(pilaRamdom,dato)
if(!(colaLlena (cola))){
encolar(cola,dato);
}
while(!(pilaVacia(pilaRamdom))){
desapilar(pilaRamdom,dato);
if(EsValido(t_cola cola, t_dato num)){
if(!(colaLlena (cola))){
encolar(cola,dato);
desapilar(pilaRamdom,dato);

}
}else{
desapilar(pilaRamdom,dato)

}
} while (!(colaVacia (cola))){
desencolar(cola,dato);
Acum=Acum+cola->frente.dato; //guardo la suma total de los numero de la cola.
Cant++ //guardo la cantidad de numeros.
cout<<cola->frente.dato<<end;//muestro el dato mientras no sea null.
cola=cola->frente *sig //avanzo.
}esperar()
limpiarPantalla();
cout<<"el promedio es :"Acum/Cant<<end;
vaciarCola(cola,dato);
}

Definir y e inicializar las estructuras necesarias
Apilar 100 números al azar.
Extraerlos de la pila y, si cumplen con la condición EsValido(cola, numero), encolarlos.
Mostrar por pantalla los números encolados y el valor promedio de los mismos.
Vaciar las estructuras que se necesiten vaciar antes de terminar el programa.
*/
}
aclaracion:se me mezclaron las llaves
  #4 (permalink)  
Antiguo 22/06/2013, 05:34
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 12 años, 4 meses
Puntos: 17
Respuesta: PILAS Y COLAS-ayuda por favor

Acostúmbrate a poner el código entre las etiquetas de resaltado de sintaxis, no es tan difícil y ayudarás a la lectura del mismo.

El código que has puesto ahí es el mismo que en el primer post, y no veo que hayas comenzado a intentar completar ninguno de los que pone "<---- COMPLETAR" no?

Saludos.
  #5 (permalink)  
Antiguo 22/06/2013, 08:49
Avatar de swator  
Fecha de Ingreso: junio-2013
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: PILAS Y COLAS-ayuda por favor

hice el main,mas tarde subo esos modulos y me decis como estan.como es lo de la etiqueta?
  #6 (permalink)  
Antiguo 22/06/2013, 08:54
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 12 años, 4 meses
Puntos: 17
Respuesta: PILAS Y COLAS-ayuda por favor

Cuando subas lo que tienes podremos ayudarte a mejorar tu código.

Cuando estás escribiendo tu respuesta, tienes arriba en las opciones un campo de selección con la palabra "Highlight", elijes ahí C++ en este caso, y dentro de las etiquetas pones tu código, para que salga con su resaltado, tabulaciones, etc:

Código C++:
Ver original
  1. int main(){
  2.     cout << "Hi world\n";
  3.     return 0;
  4. }

Un saludo.
  #7 (permalink)  
Antiguo 22/06/2013, 08:58
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 10 años, 7 meses
Puntos: 94
Respuesta: PILAS Y COLAS-ayuda por favor

Cita:
como es lo de la etiqueta?
es para poner el codigo, clickea donde dice Highlight, elegi C++ y en el medio escribi todo el codigo

Código C++:
Ver original
  1. int main() {
  2.  int a=0;
  3.  
  4. return 0;
  5. }

Saludos

EDIT: justo respondieron
  #8 (permalink)  
Antiguo 22/06/2013, 20:52
Avatar de swator  
Fecha de Ingreso: junio-2013
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: PILAS Y COLAS-ayuda por favor

Código C++:
Ver original
  1. void vaciarPila(t_pila *&pila,t_dato &dato)
  2.  
  3.     t_nodo* pEli;               //creo un nodo auxiliar.
  4.     if (!pilaVacia(pila)){          //me fijo si esta vacia.
  5.         valor = pila->cabeza->valor;    //al dato le asigno el valor del que desapilo.
  6.         pEli = pila->cabeza;        //al *aux le asigno  el que saco.
  7.         pila->cabeza = pila ->cabeza ->sig;         //al que queda como tope le asigno el sig.
  8.         delete pEli;            //elimino el *aux.
  9.        
  10.     }else
  11.         cout << "La pila estaba vacia";     //si la pila está vacía.
  12.  
  13. bool colaVacia(t_cola *cola)
  14.  
  15. if (!cola) {                        //pregunto si no hay cola.
  16.         return true;       
  17.     } else {
  18.         return ((cola->frente == NULL)&&(cola->fondo==NULL))//sino pregunto si es NULL.
  19.     }
  20. }
  21. void apilar(t_pila * &pila, const char valor)
  22.  
  23.     t_nodo *pNuevo;             //creo el nuevo nodo.
  24.     if (!pilaLlena(pila)){              //me fijo si está llena.
  25.     pNuevo = new t_nodo;           
  26.     pNuevo ->valor = valor;             //le asigno el dato al nuevo nodo.
  27.  
  28.     pNuevo -> sig = pila -> cabeza;         //apunto el nuevo al que estaba primero.
  29.     pila -> cabeza = pNuevo;            //apunto el que estaba primero al nuevo
  30.     }else
  31.         cout << "No hay espacio para agregar un elemento a la pila";    //si está llena.
  32.  
  33. Void pilavacia(t_pila *&pila,t_dato &dato)
  34.     if (!pila) {                        //pregunto si no hay pila.
  35.         return true;       
  36.     } else {
  37.         return pila->cabeza == NULL;            //sino pregunto si es NULL.
  38.     }
  39. }

void vaciarCola(t_cola *&cola,t_dato &dato) <---- COMPLETAR
void encolar(t_cola *&cola, t_dato &dato) <---- COMPLETAR
en estos 2 anteriores la sistematica sería igual que pilas ?

bool pilaLlena(t_pila *pila) en este modulo no encuentro como fijar un el tope o que está llena. Alguna ayudita??
  #9 (permalink)  
Antiguo 22/06/2013, 21:30
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: PILAS Y COLAS-ayuda por favor

Edito: Para ver si la pila o cola estan llenas, por ejemplo no pueden tener mas de 10 elementos, puedes poner un campo en la struct pila o cola que se valla modificando, por ejemplo un campo que se llame espacios_vacios = 10, cada ves que encolas o apilas un nodo le quitas 1, es decir, apilas cualquier numero y espacios_vacios lo cambias a 9, etc... para ver si esta llena preguntas si es igual a 0 y si es 0 pues pones un mensaje que no se pueden apilar mas nodos, etc...

Por otro lado:
Código C++:
Ver original
  1. Void pilavacia(t_pila *&pila,t_dato &dato)
  2.     if (!pila) {                        //pregunto si no hay pila.
  3.         return true;      
  4.     } else {
  5.         return pila->cabeza == NULL;            //sino pregunto si es NULL.
  6.     }
  7. }

Encuentro que queda mejor:

Código C++:
Ver original
  1. void pilavacia(t_pila *pila,)
  2.     if (pila)
  3.         return false;      
  4.     else
  5.         return true;
  6. }

Ya que si el puntero apunta a NULL devolvera true y si no apunta a NULL quiere decir que apunta a una direccion de memoria 'x' que hace automaticamente que no este vacia.

Última edición por ElPatoGarrido; 22/06/2013 a las 22:01
  #10 (permalink)  
Antiguo 23/06/2013, 12:19
Avatar de swator  
Fecha de Ingreso: junio-2013
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: PILAS Y COLAS-ayuda por favor

gracias por la info!..pero me faltaria ayuda con los modulos de encolar y desencolar que no encuentro la sistematica.
  #11 (permalink)  
Antiguo 05/07/2013, 12:34
Avatar de swator  
Fecha de Ingreso: junio-2013
Mensajes: 6
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: PILAS Y COLAS-ayuda por favor

Gracias a todos por la ayuda pude aprobar los 2 examenes!!

Etiquetas: colas, listas, pilas, punteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:39.