elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cartero Pilas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cartero Pilas  (Leído 1,187 veces)
jonicio96

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Cartero Pilas
« en: 15 Mayo 2014, 21:51 pm »

Es un cartero que recibe n cartas para m casas. Entonces comienzas ingresando n m luego dices para que casa iba cada carta por ej 0,0,2,3 (es el destinatario) finalmente esto se agrega a pilas donde se dice cuantas cartas tiene cada casa y si le sobraron cartas porque no eran de ninguna casa. El programa funciona, pero me dicen que cada casa tiene que tener un buzón que es una PILA y no se como hacer m pilas diferentes ¿Podrían ayudarme por favor?
Código:
#include<iostream>
#include<string.h>
using namespace std;

struct pila {
int destino;
struct pila *sgt;
};

void push(struct pila **p, int destino){
struct pila *extra;
extra= new pila;
extra->destino=destino;
extra->sgt=*p;
*p=extra;
};

int pop(struct pila **p){
int auxiliar;
struct pila *extra;
extra=*p;
auxiliar=extra->destino;
*p=extra->sgt;
return auxiliar;
delete extra;
};


int main(){
struct pila *p, *mano, *buzon;
int cant_casas,cant_cartas,destino,cont,aux,tope;
    cin>>cant_casas>>cant_cartas;

cout<<"Ingrese destinos de las cartas"<<endl;
for(int a=0;a<cant_cartas;a++){ /*llena la pila con los destinos correspondientes*/
cin>>destino;
push(&p,destino);
}
cout<<"El cartero ha comenzado a trabajar"<<endl;
for (int i=0;i<cant_casas;i++){ /*itera la cantidad de casas*/
cont=0;
cout<<"El cartero ha llegado a la casa "<<i<<endl;
cout<<"Revisando cartas"<<endl;
tope=cant_cartas;
for(int j=0; j<tope;j++){
aux=pop(&p); /* almacena el primera carta con su destino y la elimina de la pila p*/
if (aux==i){/*compara el destino de la carta con la casa actual*/
cont++;
cant_cartas--;
push(&p,destino);
cout<<"Carta para esta casa"<<endl;
/*se supone que cada buzon es una pila tambien, falta implementar eso*/
}
else{
push(&mano,aux); /*si la carta no es para el destino, entonces se guarda en la "mano" */
cout<<"Carta para otra casa"<<endl;
}
}
for (int k=0;k<cant_cartas;k++){/*itera sobre las cartas restantes en "mano" para devolverlas a la pila "p"*/
int aux4=pop(&mano);
push(&p,aux4);
}
cout<<"Se han encontrado "<<cont<<" cartas para esta casa"<<endl;
cout<<""<<endl;
}
cout<<"No quedan mas casas que visitar"<<endl;
cout<<"Han sobrado "<<cant_cartas<<" cartas en el bolso"<<endl;
while(1);
}


En línea

Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Re: Cartero Pilas
« Respuesta #1 en: 26 Junio 2014, 03:02 am »

Antes de decir nada quisiera comentar tres cosas:
a) Que no he dedicado más que 45segundos para ver el codigo, por tanto puedo estar metiendo la pata
b) Que la duda ya estará resuelta
c) Quizás ayude a otra persona que se encuentre en una situacion similar.


Para tener 'm' buzones dado tu código no seria más que poner
Código
  1. struct pila *buzon[m];
  2.  

Donde m puede ser una constante (C++), una variable (se trata de C++, en C no es válido), una macro (C++/C) o simplemente un número.

Por ejemplo:
Código
  1. push(&p,destino);
  2. cout<<"Carta para esta casa"<<endl;
  3. /*se supone que cada buzon es una pila tambien, falta implementar eso*/
  4.  

Cambiaría a algo parecido a:
Código
  1. push(&buzon[i],1);
  2. cout<<"Carta para esta casa"<<endl;
  3.  

Notar que buzon es el buzon de la casa i. El valor 1 es por poner algo en la pila. En este caso representa una carta y como no hay datos del remitente ....

El codigo se simplificaria bastante si se plantea el problema como que el cartero tiene las cartas agrupadas por viviendas antes de salir de la oficina, de esta manera solo se tendría un array de pilas de tal modo que el cartero cogeria el monton de cartas de la vivienda i sin necesidad de revisar el resto. esto basicamente permitiría que el bucle de llenado de datos quedara tal que
Código
  1. for(int a=0;a<cant_cartas;a++){ /*llena la pila con los destinos correspondientes*/
  2. cin>>destino;
  3. push(&p[destino], 1 );
  4. }
  5.  
Y el bucle de entrega de cartas en:
Código
  1. for (int i=0;i<cant_casas;i++){ /*itera la cantidad de casas*/
  2.   cont=0;
  3.   cout<<"El cartero ha llegado a la casa "<<i<<endl;
  4.   cout<<"Revisando cartas"<<endl;
  5.   int total = 0;
  6.   while(pop(&p[i]))
  7.   {
  8.      cout << "carta entregada a la vivienda " << i << endl;
  9.      total++;
  10.   }
  11.   cout << total << " cartas entregadas en esta casa" << endl;
  12. }
  13.  

Suerte!


« Última modificación: 26 Junio 2014, 03:22 am por Flakito81 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pilas recargables
Electrónica
sirnejo 2 2,322 Último mensaje 28 Abril 2005, 05:45 am
por DevilInsideTk
pilas
Electrónica
airam_dark_artist 1 2,555 Último mensaje 18 Abril 2005, 10:29 am
por + enrique ZP
pilas urgente
Electrónica
jiale 2 2,168 Último mensaje 23 Mayo 2005, 21:54 pm
por botboat
Pilas en c++
Programación C/C++
GABETORAP 3 2,699 Último mensaje 2 Diciembre 2011, 01:56 am
por .:UND3R:.
Pilas en c++
Programación C/C++
GABETORAP 1 1,939 Último mensaje 2 Diciembre 2011, 05:41 am
por [L]ord [R]NA
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines