[C con Clase] Duda Sobre Listas

PABLO 22 pablo22_4 en hotmail.com
Dom Dic 2 14:13:01 CET 2012




From: pablo22_4 en hotmail.com
To: cconclase en listas.conclase.net
Date: Mon, 26 Nov 2012 00:13:59 +0000
Subject: Re: [C con Clase] Duda 






Hola tengo una consulta la cual me ha superado muy lejos no encuentro el error, nunca use la lista pero espero que alguien me ayude. Y si la estoy usando mal que me lo hagan saber .Desde ya muchas gracias.
Mi codigo es sobre una practica de listas la cual me tira un error en la parte de ordenacion la verdad nose donde esta el error por que en la parte donde se pasan la lista entre dos funcionesuna adentro de la otra ahi creo q esta el error pero nose cual es ...Ayuda por favorr..En las funciones copiar(coche**,coche**) y ordenar (coche**,int *)

#include <stdio.h>#include <stdlib.h>#include <conio.h>#define V         1#define F         0#define M         20
struct tauto{       int codigo;       char marca[M];       char modelo[M];       char color[M];       struct tauto *sig;};typedef struct tauto coche;

//Prototipos.-void menu();void agregar (coche ** , int *);void borrar  (coche ** , int *);void buscar  (coche ** , int *);void ordenar (coche ** , int *);void mostrar (coche ** , int *);void copiar  (coche  ** , coche  ** );
int main(){    int ind=0,*indx;       //Indice de cantidad de elementos en la lista    indx=&ind;        char opcion='z';         //Opcion para el menu        coche *cabeza;    cabeza=NULL;                     //======== Bucle Menu ========//    for ( ; opcion!='s' && opcion!='S' ; )    {        menu();        fflush(stdin);        printf("%c\n",opcion=getch());        switch (opcion)        {               case '1': agregar(&cabeza,indx);                         break;                case '2': borrar(&cabeza,indx);                         break;               case '3': buscar(&cabeza,indx);                         break;               case '4': ordenar(&cabeza,indx);                         break;               case '5': mostrar(&cabeza,indx);                         break;               case 'S':;               case 's': printf("\nCerrando programa...\n");                         break;               default:                       printf("\nIngrese una opcion valida...\n\n");                       system("pause");                       break;            }    }    //======== Fin Bucle Menu ========//    system("pause");    return 0;}
void agregar( coche **cabeza, int *indx){     coche *p;     p=NULL;     if ( (*cabeza)==NULL )     {        printf("Lista vacia.-\n");                p=(coche *)malloc(sizeof(coche));             printf("\nAuto nro %i : ",*indx+1);        printf("\n\tCodigo :  ");        scanf("%i",&p->codigo);        printf("\tMarca :   ");        scanf("%s",p->marca);        printf("\tModelo :  ");        scanf("%s",p->modelo);        printf("\tColor :   ");        scanf("%s",p->color);                p->sig=NULL;        (*cabeza)=p;     }     else     {        p=(coche *)malloc(sizeof(coche));             printf("\nAuto nro %i : ",*indx+1);        printf("\n\tCodigo :  ");        scanf("%i",&p->codigo);        printf("\tMarca :   ");        scanf("%s",p->marca);        printf("\tModelo :  ");        scanf("%s",p->modelo);        printf("\tColor :   ");        scanf("%s",p->color);                p->sig=(*cabeza);        (*cabeza)=p;     }     (*indx)=(*indx+1);     printf("\n");     system("pause");}
void borrar ( coche **cabeza,int *indx ){     int i,codigo=0,flag=F;          coche *p,*anterior=NULL;     p=(*cabeza);          printf("\nIngrese el codigo del auto a borrar : ");     scanf("%i",&codigo);          for (i=0;i<(*indx);i++)     {         if  ( anterior==NULL )         {             if  ( p->codigo==codigo )            {                  (*cabeza)=p->sig;                  free(p);                  //p=cabeza;                  (*indx)=(*indx-1);                  flag=V;                  printf("\nSe borro con exito! .- \n");                  break;            }else            {                 anterior=p;                 p=p->sig;            }         }         else          {              if  ( p->codigo==codigo )              {                  anterior->sig=p->sig;                  free(p);                  (*indx)=(*indx-1);                  flag=V;                  printf("\nSe borro con exito! .- \n");                  break;              }else              {                   anterior=p;                   p=p->sig;              }         }     }     if ( flag == F )        printf("\nNo se encontro el auto.- \n");     printf("\n");     system("pause");     }

void buscar ( coche **cabeza,int *indx ) {     int i,flag=F;     char mod[M];          coche *p;     p=(*cabeza);          printf("\nIngrese el modelo a buscar : ");     scanf("%s",&mod);     printf("Auto : ");          for ( i=0;i<(*indx);i++ )     {         if ( strcmp(p->modelo,mod)==0 )         {            printf("\n\tCodigo :  %i",p->codigo);            printf("\n\tMarca :   %s",p->marca);             printf("\n\tModelo :  %s",p->modelo);            printf("\n\tColor :   %s\n\n",p->color);            flag=V;            break;         }else              p=p->sig;     }     if ( flag == F )        printf("\n\tNo encontrado.-\n");     printf("\n");     system("pause");}

void mostrar( coche **cabeza,int *indx){     int i;     coche *p;     p=(*cabeza);          printf("\n======Mostrando======\n");     printf("\nElementos en la lista : %i \n",*indx);     for (i=0;i<(*indx);i++)     {         printf("\nAuto nro %i : ",i+1);         printf("\n\tCodigo :  %i",p->codigo);         printf("\n\tMarca :   %s",p->marca);          printf("\n\tModelo :  %s",p->modelo);         printf("\n\tColor :   %s\n\n",p->color);                  p=p->sig;     }     printf("\n");     system("pause");}
void copiar (coche **d, coche **f){     coche *temp,*dest,*fuent;          dest=(*d);     fuent=(*f);          temp->codigo=dest->codigo;     strcpy ( temp->marca,dest->marca );         strcpy ( temp->modelo,dest->modelo );         strcpy ( temp->color,dest->color );              dest->codigo=fuent->codigo;     strcpy ( dest->marca,fuent->marca );         strcpy ( dest->modelo,fuent->modelo );         strcpy ( dest->color,fuent->color );              fuent->codigo=temp->codigo;     strcpy ( fuent->marca,temp->marca );         strcpy ( fuent->modelo,temp->modelo );         strcpy ( fuent->color,temp->color );     }
void ordenar( coche **cabeza,int *indx ){     int i,j;     coche *p,*aux;     p=(*cabeza);          printf("\nElementos en la lista : %i \n",*indx);     for (i=0;i<(*indx)-1;i++)     {            aux=p;               for (j=i+1;j<(*indx);j++)         {             printf("\n[%i][%i]",i,j);             aux=aux->sig;             if (strcmp(p->marca,aux->marca)>0)             {                  printf("\ncambio");                copiar(&p,&aux);             }         }         p=p->sig;     }     printf("\nLista Ordenanda .-\n");     system("pause");}
   void menu(){     system("cls");     printf("\n==============MENU==============");     printf("\n1)Agregar");     printf("\n2)Borrar");     printf("\n3)Buscar");     printf("\n4)Ordenar");     printf("\n5)Mostrar");     printf("\nS)Salir.-");          printf("\n\n\t\tOpcion : ");}














 		 	   		  

_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20121202/48d7d61d/attachment.html>
------------ próxima parte ------------
An embedded and charset-unspecified text was scrubbed...
Name: ATT00001
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20121202/48d7d61d/attachment.ksh>


Más información sobre la lista de distribución Cconclase