Certamen #2 ICI-142 Pauta de Correccion (1) (a) uso de funciones (definicion, valor de retorno) 4 ptos. (b) uso de punteros 4 ptos. (c) solucion 17 ptos. struct nodo* centro(struct nodo *inicio){ struct nodo *ant, *izq, *der; izq = inicio; der = inicio; while (der->sgte!=NULL){ ant = der; der = der->sgte; } while (izq!=der) && (der->sgte=!izq){ izq = izq->sgte; der = ant; ant = izq; while (ant->sgte!=der) && (ant->sgte!=NULL) ant = ant->sgte; } return (izq); } (2) (a) uso de funciones (definicion, valor de retorno) 3 ptos. (b) validacion m,n 3 ptos. (c) solucion 14 ptos int desplazarNodo(struct nodo **, int n, int m){ struct nodo *aux=*inicio,*aux_n=*inicio,*ant; int N=1,k,i; while (aux->sgte!=NULL){ aux = aux->sgte; N++; } if (n>N) return 0; if (n-m>0){ i = 1; while (isgte; i++; } ant->sgte = aux_n->sgte; k = n-m-1; if (k==0){ aux_n->sgte = *inicio; *inicio = aux_n; }else{ i=0; aux = *inicio; while (isgte; i++; } ant->sgte = aux_n; aux_n->sgte = aux; } return 1; }else return 0; } (3) (a) lectura archivos 5 ptos (b) creacion lista doble 5 ptos. (c) creacion lista simple 5 ptos. main(){ FILE *trabaj; char *rut,*nombre, linea[100],*edad; struct trabajador *nuevoTrabajador,*inicio=NULL; trabaj = fopen("trabajadores.txt","r"); if (trabaj==NULL){ printf("error.......\n"); exit(0); } while (fgets(linea,100,trabaj)!=NULL){ rut = strtok(linea,":"); nombre = strtok(NULL,":"); edad = strtok(NULL,":"); nuevoTrabajador=crearTrabajador(rut,nombre,edad); agregarTrabajador(&inicio,nuevoTrabajador); crearListaFamilia(nuevoTrabajador->rut,nuevoTrabajador->familia); } fclose(trabaj); } void crearListaFamilia(char rut[13], struct familiar *familia){ FILE *famil; char linea[200],*rutFam,*edad; *famil = fopen("familia.txt","r"); if (famil==NULL){ printf("error.......\n"); exit(0); } while (fgets(linea,200,famil)!=NULL){ rut=strtok(linea,":"); if (!strcmp(rut,rutAux)){ do{ rutFam = strtok(NULL,":"); if (rutFam!=NULL){ edad = strtok(NULL,":"); nuevoFamiliar = crearFamiliar(rutFam,edad); agregarFamiliar(nuevoTrabajador->familia,nuevoFamiliar); } }while (edad!=NULL) } } fclose(famil); } void agregarTrabajador(struct trabajador **inicio,struct trabajador *nuevoTrabajador){ struct trabajador *tmp; if (*inicio == NULL){ nuevoTrabajador->izq = NULL; nuevoTrabajador->der = NULL; *inicio = nuevoTrabajador; } else{ tmp = *inicio; while (tmp->der!=NULL) tmp = tmp->der; nuevoTrabajador->der=NULL; tmp->der = nuevoTrabajador; nuevoTrabajador->izq = tmp; } } void agregarFamiliar(struct familiar **inicio, struct familiar *nuevoFamiliar){ struct familiar *tmp; if (*inicio == NULL){ nuevoFamiliar->sgte = *inicio; *inicio = nuevoFamiliar; } else{ tmp = *inicio; while (tmp->sgte!=NULL) tmp = tmp->sgte; tmp->sgte = nuevoFamiliar; nuevoFamiliar->sgte=NULL; } }