Ayuda a corregir programa en C++ Listas enlazadas

Iniciado por orbel2, 25 Abril 2017, 19:32 PM

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

orbel2

Buenos Días, todos los demas puntos me funcionana correctamente pero para sacar los pares e impares no me funciona lo estaba intentando solo con los pares y no me da. Adjunto el programa. estoy trabajando en Dev c++

#include <iostream>
#include <malloc.h>


using namespace std;

struct lista
{
   int dato;
   struct lista *liga;

   };
   
struct lista *nuevo, *x, *null, *ant, *cab;
int i, n, valor, sw=0,par=0, num,pos=0,neg=0;

void crear_lista()
{

     i=1;
     cout<<"ingrese los nodos a crear"<<endl;
    cin>>n;
    nuevo=(struct lista *)malloc(sizeof(struct lista));
    cab=nuevo;
    cout<<"ingrese un valor"<<endl;
    cin>>valor;
    nuevo->dato=valor;
    nuevo->liga=NULL;
    ant=nuevo;
    while(i<n)
    {
       i=i+1;
      nuevo=(struct lista *)malloc(sizeof(struct lista));
      cout<<"ingrese un nuevo valor"<<endl;
      cin>>valor;
      nuevo->dato=valor;
      ant->liga=nuevo;
      nuevo->liga=NULL;
      ant=nuevo;
   
    }

}

void mostrar()
{
  x=cab;
  while(x!=NULL)
  {
     cout<<x->dato;
     x=x->liga;
  }

}

void buscar()
{
   sw=0;
   x=cab;
   cout<<"ingrese el dato a buscar"<<endl;
   cin>>valor;
   while(x!=NULL)
   {
     if(x->dato == valor)
        sw=1;
   }
   if(sw==1)
      cout<<"el dato se enncuentra en la lista"<<endl;
   else
      cout<<"el dato no se enncuentra en la lista"<<endl;
}


void borrar()
{
   x=cab;
    cout<<"Ingrese el dato a borrar"<<endl;
    cin>>valor;
    while(x!=NULL) {
        if(x->dato==valor) {
            if(x==cab) {
                cab=x->liga;
                x=NULL;
                free(x);
            } else {
                ant->liga=x->liga;
                free(x);
                x=ant->liga;
            }
        } else {
            ant=x;
            x=x->liga;
   }
   }
}

void pos_neg()
{
   int pos=0;
   int neg=0;
   x=cab;
   cout<<"ingrese el numero"<<endl;
   cin>>valor;
   while(x!=NULL)
   {
     if(x->dato > valor){
        pos=pos+1;
         ant=x;
            x=x->liga;
   }else{
          neg=neg+1;
            ant=x;
            x=x->liga;
      }
       
}
cout<<"los numeros positivos son:"<<pos<<endl;
cout<<"los numeros negativos son:"<<neg<<endl;
}

void pares()
{
int par=0;
x=cab;
while(x!=NULL);
{
  if(x->dato % 2 == 0)
       par=par+1;
   
         
}
cout<<"los numeros pares son:"<<par<<endl;   ///cout<<x->dato;
}


int main()
{
   int op, nuevo=NULL, ant=NULL, x=NULL, cab=NULL,par=0;
   cout<<"[1.] Crear la Lista"<<endl;
   cout<<"[2.] Buscar un Dato"<<endl;
   cout<<"[3.] Borrar un dato"<<endl;
   cout<<"[4.] Mostrar los datos"<<endl;
   cout<<"[5.] Pares"<<endl;
   cout<<"[6.] Positivos y Negativos"<<endl;
   cout<<"[7.] Salir"<<endl;

   do
   {
      cout<<"Digite una opcion"<<endl;
      cin>>op;
      switch(op)
      {
      case 1:crear_lista();
         break;
      case 2:buscar();
         break;
      case 3:borrar();
         break;
      case 4:mostrar();
         break;
      case 5:pares();
   
         break;
      case 6:pos_neg();
         break;
      
      }
   
   }
      while(op!=7);
      system("PAUSE()");

}

MAFUS

En algunas funciones te olvidas de recorrer la lista y en el main tienes un gran problema en la línea de definición de variables.