Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Amidaken en 30 Abril 2011, 06:59 am



Título: ayuda con codigo en localiza imprime y suprime
Publicado por: Amidaken en 30 Abril 2011, 06:59 am
hola quisiera saber si pueden ayudarme en esto, tengo este codigo donde se supone que hago una base de datos de una tienda de telas bueno el problema es que no funcionan algunas funciones, por lo menos no como deberian.

las funciones que estan fallando son: localiza imprime y suprime.

el codigo que tengo es el siguiente:

Código:
/*Listas sin encabezado doblemente Ligada(No circular)*/
/*inventario*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef int tipo_elem;

struct tela{
       char nombre[30];
       int disponible;
           }a[30];
/*struct tipo{
       char tela;
       int cantidad,;
       int ult;
           };*/
      
//struct bodega{
  //     struct tipo descripcion;
    //         };
struct nodo{
       tipo_elem elem;
       nodo * sig;
           };
      
typedef nodo* posicion;
typedef int logico;
/*FUNCIONES DE LAS OPERACIONES CON LISTAS*/


posicion E;

void inicializa(nodo **inventario)
     {
     *inventario=NULL;
}

void suprimir(posicion p,posicion *inventario)
 {  
     posicion aux,aux2;

if(p==*inventario){
aux=(*inventario)->sig;
free(*inventario);
*inventario=aux;
                    }
else{
aux=*inventario;
while(aux->sig!=NULL && aux->sig!=p)
aux=aux->sig;
if(aux->sig==p)
{
aux2=p->sig;
free(p);
aux->sig=aux2;
}
else
printf("No se encontro");
   }
 }

logico vacia(posicion inventario)
       {      
       if(inventario==NULL)
 return 1;
       else
 return 0;
       }

posicion localiza(tipo_elem x, posicion inventario)
  {
if(vacia(inventario))
    {
return 0;
    }
else{
while (inventario!=NULL && inventario->elem!=x)
      inventario=inventario->sig;
if (inventario==NULL)
      return NULL;
else
      return inventario;
   }
  }

tipo_elem recupera(posicion p)
 {
 if (p!=NULL)
    return (p->elem);
 else
    return -1;   /*valor invalido*/
      }


/*FUNCION IMPRIME*/
int imprimir(posicion inventario)
     {    
if(vacia(inventario))
printf("Lista Vacia");
else{
while (inventario!=NULL)
        {
  printf("%d",inventario->elem);
  inventario=inventario->sig;
        }
   }
     }
    

/*FUNCION ANULA*/
void anula(posicion *inventario)
     {
posicion aux;

    while (*inventario!=NULL)
{
aux=(*inventario)->sig;
free(*inventario);
*inventario=aux;
   }
     }

void inserta(tipo_elem x, posicion p,posicion *inventario)
     {
   int i,opcion;
   int cont=0,num;
   char t;
   do{
printf("\n 1)licra\n 2)popelina\n 3)algodon\n 4)lino\n 5)tergal\n \t");
scanf("%d",&opcion);
printf("Nombre de la tela\n");
scanf("%s",a[cont].nombre);
printf("\n<----DAME LOS ROLLOS A INCERTAR---->\n");
scanf("%d",&num);
     posicion aux;
     aux=(nodo *) malloc(1*sizeof(nodo));
     aux->elem=x;
       if(p==NULL){
 aux->sig=*inventario;
 *inventario=aux;
             }
else{
aux->sig=p->sig;
p->sig=aux;
   }
/*printf("\n<---Se inserto un elemento en la lista ---->\n");*/
printf("%s\n",a[cont].nombre);
printf("rollos: %d\n ",num);
}while(opcion!=5);
printf("fin de la captura\n\n");
getch();
  }    

void fallasdetela()
    {
      int op,tel,mul,falla;
      float m,nop,tel1,mul1,falla1;
 printf("dame la cantdad de rollos");
      scanf("%d",&op);
      if(op%5==0)
      {
          tel=op/5;
          mul=2*tel;
          falla=mul-tel;
          printf("%d",falla);
      }
        else
        {
          printf("dame los rollos q sobran");
          scanf("%d",&m);
          nop=op-m;
          tel1=nop/5;
          mul1=2*tel1;
          falla1=mul1-tel1;
          printf("%f",falla1);
        }
     }

void telagastada()
    {
         int talla,opcion,num,s,r,t,p;
         float a,b,c,d,e,f,g,h,i,j,k,l,m,n,o;
         inicializa (&E);
printf("\ntipo de ropa\n");
printf("\n1)CH\n 2)M\n 3)G\t\t");
    scanf("%d",&talla);
     if(talla==1)
     {
          printf("\n1)blusa\n 2)vestido\n 3)pantalon\n 4)short\n 5)maya \n6)fin\t\t");
     scanf("%d",&opcion);
     switch(opcion!=6)
          {
        case 1:  printf("cuantas piezas hicistes blusa: ");
            scanf("%d",&s);
            printf("cuantos rollos: ");
            scanf("%d",&p);
                 j=.45*s;
                 l=100*p;
                 a=l-j;
                 printf("%f",a);
                 break;
        case 2:  printf("cuantas piezas hicistes vestido:");
            scanf("%d",&r);
            printf("cuantos rollos");
            scanf("%d",&p);
            g=.45*r;
            l=100*p;
                 i=l-g;
                 printf("%f",i);
                 break;
        case 3:  printf("cuantas piezas hicistes pantalon:");
            scanf("%d",&num);
            printf("cuantos rollos");
            scanf("%d",&p);
                 a=1.15*num;
                 l=100*p;
                 c=l-a;
                 printf("%f",c);
                 break;
        case 4:  printf("cuantas piezas hicistes short:");
            scanf("%d",&n);
            printf("cuantos rollos");
            scanf("%d",&p);
            d=.45*n;
                 l=100*p;                
                 f=l-d;
            printf("%f",f);
                 break;
   case 5:  printf("cuantas piezas hicistes maya:");
                 scanf("%d",&t);
                 printf("cuantos rollos");
            scanf("%d",&p);
            k=.15*t;
                 l=100*p;                
                 o=l-k;
            printf("%f",o);
                 break;
       case 6:   printf("FIN DE LA CAPTURA\n");
                 break;
                /* default:
                 printf("opcion invalida!!!!!\n");
                 opcion=0;*/
                 break;
           }
      }
if(talla==2)
   {
      printf("\n1)blusa\n 2)vestido\n 3)pantalon\n 4)short\n 5)maya\n 6)fin\t\t");
 scanf("%d",&opcion);
      switch(opcion!=6)
      {
        case 1:  printf("cuantas piezas hicistes blusa:");
            scanf("%d",&s);
            printf("cuantos rollos");
            scanf("%d",&p);
                 j=1*s;
                 b=100*p;
                 l=b-j;
                 printf("%f",l);
                 break;
        case 2:  printf("cuantas piezas hicistes vestido:");
            scanf("%d",&r);
            printf("cuantos rollos");
            scanf("%d",&p);
            g=1*r;
            b=100*p;
                 i=b-g;
                 printf("%f",i);
                 break;
        case 3:  printf("cuantas piezas hicistes pantalon:");
            scanf("%d",&num);
            printf("cuantos rollos");
            scanf("%d",&p);
                 a=1.30*num;
                 b=100*p;
                 c=b-a;
                 printf("%f",c);
                 break;
        case 4:  printf("cuantas piezas hicistes short:");
            scanf("%d",&n);
            printf("cuantos rollos");
            scanf("%d",&p);
            d=1*n;
            b=100*p;
                 f=b-d;
            printf("%f",f);
                 break;
   case 5:  printf("cuantas piezas hicistes maya:");
                 scanf("%d",&t);
                 printf("cuantos rollos");
            scanf("%d",&p);
                 l=.30*n;
                 b=100*p;
                 o=b-l;
            printf("%f",o);
                 break;
       case 6:   printf("FIN DE LA CAPTURA\n");
                 break;
                /* default:
                 printf("opcion invalida!!!!!\n");
                 opcion=0;
                 break;*/
       }
   }
else {
      printf("\n1)blusa\n 2)vestido\n 3)pantalon\n 4)short\n 5)maya\n 6)fin\t\t");
 scanf("%d",&opcion);
      switch(opcion)
      {
        case 1:  printf("cuantas piezas hicistes blusa:");
            scanf("%d",&s);
            printf("cuantos rollos");
            scanf("%d",&p);
                 j=1.20*s;
                 b=100*p;
                 l=b-j;
                 printf("%f",l);
                 break;
        case 2:  printf("cuantas piezas hicistes vestido:");
            scanf("%d",&r);
            printf("cuantos rollos");
            scanf("%d",&p);
            g=1.20*r;
            b=100*p;
                 i=b-g;
                 printf("%f",i);
                 break;
        case 3:  printf("cuantas piezas hicistes pantalon:");
            scanf("%d",&num);
            printf("cuantos rollos");
            scanf("%d",&p);
                 a=1.50*num;
                 b=100*p;
                 c=b-a;
                 printf("%f",c);
                 break;
        case 4:  printf("cuantas piezas hicistes short: ");
                 scanf("%d",&r);
            printf("cuantos rollos");
            scanf("%d",&p);
            g=1.20*r;
            b=100*p;
                 i=b-g;
                 printf("%f",i);
            break;
   case 5:  printf("cuantas piezas hicistes maya:");
                 scanf("%d",&r);
            printf("cuantos rollos");
            scanf("%d",&p);
            g=1.20*r;
            b=100*p;
                 i=b-g;
                 printf("%f",i);
                 break;
       case 6:   printf("FIN DE LA CAPTURA\n");
                 break;
                /* default:
                 printf("opcion invalida!!!!!\n");
                 opcion=0;
                 break;*/
       }            
     }
  }

void acomoda()
     {  int op,opc;
     float tel,mul,falla,m;
      printf("dame telas q hay");
      printf("\n1)licra\n 2)popelina\n 3)algodon\n 4)lino\n 5)tergal\n 6)fin\t\t");
      scanf("%d",&opc);
      switch(opc!=6)
      {
        case 1: telagastada();
                break;
        case 2: telagastada();
                break;
        case 3: telagastada();
                break;
        case 4: telagastada();
                break;
        case 5: telagastada();
                break;
        case 6: printf("FIN DE LA CAPTURA\n");
                break;
               /* default:
                printf("opcion invalida!!!!!\n");
                opc=0;
                break;*/
      }
     }

/*void capturar()
 {
   int i,x,opcion;
   int cont=0,num;
   char t;
   do{
printf("\n 1)licra\n 2)popelina\n 3)algodon\n 4)lino\n 5)tergal\n \t");
scanf("%d",&opcion);
printf("Nombre de la tela\n");
scanf("%s",a[cont].nombre);
printf("\n<----DAME LOS ROLLOS A INCERTAR---->\n");
scanf("%s",&num);
inserta(x,NULL,&E);
printf("\n<---Se inserto un elemento en la lista ---->\n");
printf("%s\n",a[cont].nombre);
printf("fin de la captura\n\n");
}while(opcion!=5);
getch();
  }*/


int main (){
    system("cls");
int x,opcion;
posicion pun;
int n, i,opc;
inicializa (&E);
int a[30];

do{
    printf ("...........Menu............\n");
    printf ("1-incerta\n");
    /*printf ("2-capturar\n");*/
    printf ("3-localiza.....\n");
    printf ("4-imprime....\n");
    printf ("5---->acomoda\n");
    printf ("6-Suprime.....\n");
    printf ("7-anula.......\n");
    printf ("8-vasia.......\n");
    printf ("9-Salir.......\n");
    printf ("Elige una opcion:....\n");
    scanf ("%d", &opc);
   switch(opc){
        case 1:
/*printf ("\nDame numero a insertar.....\n");
scanf("%d",& x);*/
inserta(x,NULL,&E);
break;
        /*case 2:
            capturar();
getch();            
break;*/
case 3:
           printf ("\nDame numero a localizar.....\n");
      scanf ("%d",& x);
      pun=localiza(x,E);
      if(pun==NULL)
  printf("Numero no encontrado\n");
      else
  printf("%p\n",pun);
      getch();
      break;
     case 4:
printf("\n<-La lista es:\n");
imprimir(E);
getch();
break;
case 5:
acomoda();
getch();
break;
        case 6:
           printf("\n dame el nombre de la tela:\t");
           scanf("%d",&opcion);
      printf ("\nDame numero a suprimir.....\n");
           scanf ("%d",& x);
      suprimir(localiza(x,E),&E);
      printf("numero suprimido");
      break;
case 7:
anula(&E);
printf("Lista Anulada");
getch();
break;
   case 8:
if(vacia(E))
printf("SI");
else
printf("NO");
getch();
break;
case 9:
             printf("fin");
             break;
     default:
 printf("Opcion No Valida");
   }
} while(opc!=9);
return 0;
}

espero puedan ayudarme por que no encuentro el error en el codigo y gracias de antemano