Familia * Crear_familia(Persona *ref,char *name,char *Pap,char *Mom){ Familia *pers=(Familia*)malloc (sizeof(Familia)); strcpy(pers->nomb_Familia,name); pers->Madre=Buscar(Mom,ref); pers->Padre=Buscar(Pap,ref); pers->sig=NULL; return pers; }
Persona * Crear(Persona *ref,char *name,char *Pap,char *Mom){ Persona *pers=(Persona*)malloc (sizeof(Persona)); strcpy(pers->nombre,name); pers->Madre=Buscar(Mom,ref); pers->Padre=Buscar(Pap,ref); pers->sig=NULL; return pers; }
void Reemplazar(Persona *pers,char *name,char *Pap,char *Mom){ Persona *a=pers; while(a!=NULL){ if(strncmp(a->nombre,name,10)==0 && a->Padre==NULL){ pers->Madre=Buscar(Mom,pers); pers->Padre=Buscar(Pap,pers); } a=a->sig; } }
int main() { Lista L; int i, n, e; L = NULL; printf("Ingrese valor de N "); scanf("%d",&n); for(i=1; i<=n; i++) agregarIzq(&L, i); mostrar(L); printf("Ingrese valor de e "); scanf("%d",&e); if(Buscar(L,e)) printf("Se encuentra : %d\n",e); else printf("No se encuentra : %d\n",e); system("pause"); }
void Tabla::AsignarValor (const char *Id, Token * UnToken, unsigned *Indices, int Dim) { Variable *Aux = Buscar (Id); if (!Aux) Crear (Id, UnToken, 0 /*VengoDe */ , Indices, Dim); else Aux->AsignarValor (UnToken, Indices, Dim); return; }
Token * Tabla::Leer (const char *Id, unsigned *Indices, int Dim) { Variable *Aux = Buscar (Id); if (!Aux) { Buzon.SetIdentificadorAsociado (Id); Buzon.Error (VARIABLE_NO_EXISTE); return 0; } return Aux->Leer (Indices, Dim); }
/*Lee el archivo y almacena todas las familias y personas contenidas */ void open_file(Persona *personas, Familia *familias){ //~ Se define un archivo para trabajarlo FILE *archivo; //~ Creamos dos variables de Persona Ref tiene la estructura inicial del problema y Pers indica el elemento actual Persona *pers,*ref=(Persona*)malloc (sizeof(Persona)); Familia *ref_fam=(Familia*)malloc(sizeof(Familia)),*fami; int empieza=0,empieza_fam=0; char caracteres[50],aux[50],papa[50]="",hijo[50]="",mama[50]="",apellido[50],famil_nomb[50]; //~ creo las variables de nombre que ayudaran en el proceso archivo = fopen("Test.txt","r"); //~ reviso si el arhivo fue cargado o salgo del programa if (archivo == NULL) exit(1); //~ en caso de entrar al programa empieza a leer el archivo while (feof(archivo) ==0) { fgets(caracteres,50,archivo); //~ Revisa si la linea corresponde al padre if(strncmp(caracteres,"Nombre de la familia",10)==0){ fgets(caracteres,50,archivo); strcpy(famil_nomb,caracteres); } else if (strncmp(caracteres,"Padre: ",7)==0) { //~ Corta la cadena solo con el nombre Recortar(caracteres,papa,7,strlen(caracteres)); //~ Imprime el nombre para corroborar printf("%s ",papa); //~ Busca en la lista si el nombre ya fue ingresado if(Buscar(papa,ref)!=NULL) { printf("\nFue ingresado\n"); } else if(empieza==0){ ref=Crear(NULL,papa,"",""); printf(" Creando.....\n"); //~ Le indico a pers la posicion actual de ref para empezar a trabajar con el pers=ref; empieza++; } else{ pers->sig=Crear(ref,papa,"",""); pers=pers->sig; printf(" Creando.....\n"); } int i=0; while(papa[i]!=' ') i++; i++; Recortar(papa,apellido,i,strlen(papa)); } else if (strncmp(caracteres,"Madre: ",7)==0) { Recortar(caracteres,mama,7,strlen(caracteres)); printf("%s",mama); if(Buscar(mama,ref)!=NULL) { printf(" Fue ingresado\n"); } else{ pers->sig=Crear(ref,mama,"",""); pers=pers->sig; printf(" Creando.....\n"); } if(empieza_fam==0){ ref_fam=Crear_familia(ref,famil_nomb,papa,mama); fami=ref_fam; empieza_fam++; } else{ fami->sig=Crear_familia(ref,famil_nomb,papa,mama); fami=fami->sig; } } else if (strncmp(caracteres,"Hijos: ",7)==0) { Recortar(caracteres,hijo,7,strlen(caracteres)); if(strncmp(caracteres,"Hijos: sin hijos",16)==0) { int x=0; for(x=0;x<50;x++){ apellido[x]='\0'; papa[x]='\0'; caracteres[x]='\0'; aux[x]='\0'; hijo[x]='\0'; mama[x]='\0'; famil_nomb[x]='\0'; } } else { int len=0,num=0,verificador=0,num_hijo=0; while(verificador==0){ num=0; while(hijo[len]!=',' && hijo[len]!='\n'&& hijo[len]!='\r'&& hijo[len]!=' ' ){ aux[num]=hijo[len]; len++; num++; } aux[num]=' '; aux[num+1]='\0'; len+=2; printf("%s%s",aux,apellido); if(aux[strlen(aux)-1]!=' '){ strcat(aux," "); } strcat(aux,apellido); if(Buscar(aux,ref)!=NULL) { printf(" Fue ingresado\n"); Reemplazar(ref,aux,papa,mama); fami->Hijos[num_hijo]=Buscar(aux,ref); num_hijo++; } else{ pers->sig=Crear(ref,aux,papa,mama); pers=pers->sig; printf(" Creando.....\n"); fami->Hijos[num_hijo]=Buscar(aux,ref); num_hijo++; } if(hijo[len-2]=='\n'|| hijo[len-2]=='\r'|| hijo[len-2]==' ' ){ verificador=1; int x=0; for(x=0;x<50;x++){ apellido[x]='\0'; papa[x]='\0'; caracteres[x]='\0'; aux[x]='\0'; hijo[x]='\0'; mama[x]='\0'; famil_nomb[x]='\0'; } } } } } else{ printf("%s",caracteres); } } *personas = *ref; *familias = *ref_fam; fclose(archivo); }