ayuda moda en pilas

Iniciado por fR3Kmy, 13 Diciembre 2011, 02:01 AM

0 Miembros y 1 Visitante están viendo este tema.

fR3Kmy

Hola amigos de elhacker.net he estado ene ste foro desde buuu muchos años (cuando se descargaban hackers para msn hace como 7 años) bueno tengo la siguiente duda
tengo mi código de PILA y tengo de todo push pop vacio tope pero tengo problemas con LA MODA ya que al implementar la moda solo me reconose si los números que se repiten son los del comienzo aquí va el código en cuestión...
DEV C++

    #include <iostream.h>
    class Pila{
    private:
    public:
    int Tope;
    int of;

    void ValorTope(){
    Tope=-1;
    }

    bool Vacia(){
    bool v;
    if(Tope==-1){
    v=true;
    }
    else{
    v=false;
    }
    return v;
    }

    void Push(int x, int P[100]){
    if(Tope==99){
    cout<<"la Pila esta llena"<<endl;
    }
    P[Tope+1]=x;
    Tope=Tope+1;
    }

    void Pop(){
    if (Tope==-1){
    cout<<"la Pila esta Vacia"<<endl;
    }
    else{
    Tope=Tope-1;
    }
   }

    void Anula(){
    Tope=-1;
    cout<<"Se ha anulado la pila";
    }

   void Muestra(int P[100]){
      int i;
  for(i=0;i<=Tope;i++){
            cout<<P<<endl; }
   }

    int MuestraTope(int P[100]){
    return P[Tope];
    }

void Moda(int P[100]){
   int i,j,c,pos,Aux[100],Cnt[100],mayor=0,Noperaciones=0;

   for(i=0;i<Tope;i=i+1){  // Saca copia del arreglo
      Aux=P;
   }
   for(i=0;i<=Tope;i=i+1){
      c=1;
      for(j=i+1;j<=Tope;j=j+1){
         if(Aux==Aux[j]){//compara el numero con los demas
            c=c+1;   
         }
      }
     Noperaciones++;
      Cnt=c;
      if(mayor<c){
         mayor=c;//se le asigna el mayor valor repeticiones
      }
   }
   c=0;
   for(i=0;i<=Tope;i=i+1){//busca si el valor repetido es unico
      if(Cnt==mayor){
         pos=i;
         c=c+1;   
      }
   }
   if(c==1){
      cout<<" La moda es:"<<P[pos]<<endl;
   }else{
      cout<<" No tiene moda"<<endl;
   }
       cout<<"Numero de Operaciones: "<<Noperaciones<<endl;
}
    };

    void Menu(){
    cout<<"   Opciones pila P "<<endl;
    cout<<"\n";
    cout<<"  1   VACIA(P) "<<endl;
    cout<<"  2   PUSH(x,P) "<<endl;
    cout<<"  3   ANULA(L) "<<endl;
    cout<<"  4   POP(P) "<<endl;
    cout<<"  5   MuestraPila(P) "<<endl;
    cout<<"  6   TOPE(P) "<<endl;
   cout<<"  7   MODA(P)"<<endl;
    cout<<"\n";
   
    }
    int main(){
    Pila pila1;
    Pila pilaaux;
    Pila pilaaux2;
    int P[100];
    int x;
    pila1.ValorTope();
    pilaaux.ValorTope();
    pilaaux2.ValorTope();
    int opcion;
    while(true){
    Menu();
    cout<<"Elija una opcion: ";
    cin>>opcion;
    cout<<endl;
    switch(opcion){     
    case 1:{
    if(pila1.Vacia()==true){
    cout<<"la pila esta vacia"<<"\n"<<endl;
    }
    else{
    cout<<"la pila no esta vacia"<<"\n"<<endl;
    }
}
    break;   
    case 2:{
    cout<<"Que elemento desea ingresar a la pila: ";
    cin>>x;
    pila1.Push(x,P);
    cout<<endl;
}
    system("PAUSE");
    break;
    case 3:{
      if(pila1.Vacia()==true){
    cout<<"La Pila esta vacia\n"<<endl;
    }
    else{
      pila1.Anula();
      cout<<endl;
   }
   cout<<endl;
}
    system("PAUSE");
    break;
    case 4:{
    if(pila1.Vacia()==true){
    cout<<"La Pila esta vacia\n"<<endl;
    }
    else{
    pila1.Pop();
    }
}
    system("PAUSE");
    break;
    case 5:{
    if(pila1.Vacia()==true){
    cout<<"La pila esta vacia\n"<<endl;
    }
    else{
      pila1.Muestra(P);
      
    }
}
    system("PAUSE");
    break;   
    case 6:{
    if(pila1.Vacia()==true){
    cout<<"La Pila esta vacia\n"<<endl;
    }
    else{
    cout<<"El tope es "<<pila1.MuestraTope(P)<<endl;
    }
}
    system("PAUSE");
    break;
   case 7:{
      if(pila1.Vacia()==true){
    cout<<"La Pila esta vacia\n"<<endl;
    }
    else{
      pila1.Moda(P);
      cout<<endl;
   }
}
    system("PAUSE");
      break;
   
    }
   }
   }

de ante mano muchas gracias
si llegue a romper alguna regla del sub-foro díganme y con gusto lo arreglare
recibo cualquier tipo de sugerencia ya que se que serán constructivas.