int agregar_juguete(base_t* base,char* idfabrica,char* idjuguete,char* valor,char* peso){ if (!hash_pertenece(base->fabricas,idfabrica)) return -1; //verifico si la fabrica existe //creo el juguete juguete_t* juguete = crear_juguete(idjuguete,valor,peso); if (juguete==NULL) return -2; //no se pudo crear el juguete fabrica_t* fabrica = hash_obtener(base->fabricas,idfabrica); if (lista_insertar_ultimo(fabrica->juguetes,(void*)juguete)!=true) return -3; //agrego el juguete y verifico si se pudo return 0; }
int main(int argc, char** argv){ if(argc != 3){ printf("Uso: ./join <Archivo1> <Archivo2>\n"); exit(1); } FILE* archivo1 = fopen(argv[1], "r"); FILE* archivo2 = fopen(argv[2], "r"); if(!archivo1 || !archivo2) { if(archivo1) fclose(archivo1); if(archivo2) fclose(archivo2); printf("Error al abrir un archivo o no existe\n"); exit(1); } hash_t* hash = hash_crear(free); if(!hash){ liberar(hash, archivo1, archivo2); exit(1); } ssize_t len1 = 0, len2=0; size_t capacidad = 0; char* linea1 = NULL; char* linea2 = NULL; while((len2 = getline(&linea2, &capacidad, archivo2 ) > 0)){ char* campo_1 = obtener_campo1(linea2); if(!hash_guardar(hash, campo_1, linea2)){ liberar(hash, archivo1, archivo2); exit(1); } free(campo_1); linea2 = NULL; } while((len1 = getline(&linea1, &capacidad, archivo1 ) > 0)){ char cadena[MAX_LEN]; char* campo_1 = obtener_campo1(linea1); if(hash_pertenece(hash, campo_1)){ char* aux = cadena; acoplar(&aux, linea1, (char*)hash_obtener(hash, campo_1)); printf("%s", cadena); } free(campo_1); } liberar(hash, archivo1, archivo2); free(linea1); free(linea2); return 0; }
int valuar_juguetes(base_t* base,char* idfabrica){ if (!hash_pertenece(base->fabricas,idfabrica)) return -1; int sonrisas = 0; int i; //creo la mochila y la inicializo int* mochila = calloc(base->capacidad+1,sizeof(int)); fabrica_t* fabrica = hash_obtener(base->fabricas,idfabrica); //creo el iterador para recorrer los juguetes que tiene la fabrica lista_iter_t* iterador = lista_iter_crear(fabrica->juguetes); juguete_t* juguete = lista_iter_ver_actual(iterador); while(juguete!=NULL){ for(i=base->capacidad;i>0;i--){ if (i-(juguete->peso)>=0){ if (mochila[i]<(mochila[i-juguete->peso]+juguete->valor)) mochila[i]=(mochila[i-juguete->peso]+juguete->valor); } } lista_iter_avanzar(iterador); juguete = lista_iter_ver_actual(iterador); } sonrisas = mochila[base->capacidad]; lista_iter_destruir(iterador); free(mochila); return sonrisas; }