/** * * Funcion que construye desde un string de enteros, el arbol, usa notacion * preorden(prefija), osea de izq a der. * **/ void construir(Arbol **raiz, int valor, int i, int padre, int lado) { /* printf("inicioConst\n"); */ if((*raiz) == NULL && bandera == 0) { /* Gramatica */ /* Si el padre es una funcion de coloracion su hijo debe ser un terminal */ if(padre < 7 && valor < 16) { int setear = abs((i % 16) - (valor % 16)) + 16; valor = (setear < 32) ? setear: 16; } /* Si el padre es una funcion generica su hijo derecho debe ser una funcion generica o funcion de coloracion */ else if(padre > 6 && padre < 16 && lado == 1 && valor > 15) { int setear = abs((i % 16) - (valor % 16)); valor = (setear < 16) ? setear: 0; } *raiz = crearNodo(valor, i); bandera = 1; } else if((*raiz) != NULL) { if((*raiz)->valor > 15) { /* printf("\tterminal-\n"); */ } else { /* printf("\tfuncion-\n"); */ if(funciones[(*raiz)->valor] == 1) { /* printf("\tizq arg1\n"); */ construir(&((*raiz)->izq), valor, i, (*raiz)->valor, 0); } else if(funciones[(*raiz)->valor] == 2) { /* printf("\tizq arg2"); */ construir(&((*raiz)->izq), valor, i, (*raiz)->valor, 0); /* printf("\tder arg2"); */ construir(&((*raiz)->der), valor, i, (*raiz)->valor, 1); } } } /* printf("FinConst\n"); */ }
int main () { int elemento; LISTA lista; construir(&lista); tamanho(&lista); adicionar(&lista, 0, 6); exibeLista(&lista); tamanho(&lista); adicionar(&lista, 1, 7); adicionar(&lista, 2, 5); adicionar(&lista, 3, 10); exibeLista(&lista); tamanho(&lista); adicionar(&lista, 3, 17); exibeLista(&lista); deletarElemento(&lista, 1); exibeLista(&lista); elemento = busca(&lista, 6); if (elemento != -1){ printf("%d\n", elemento); }else{ printf("Elemento não encontrado!\n"); } tamanho(&lista); return 0; }
bool Importar::importa() { std::vector<std::string> dnis; std::vector<std::string> nombres; std::string lin; std::auto_ptr<StringLexer> lex; bool toret = false; InputFile f( nombreArchivo ); if ( f.isOpen() ) { f.readLn( lin ); while ( !f.isEof() ) { lex.reset( new StringLexer( &lin ) ); // Leer el DNI std::string dni = lex->getNumber(); std::string nombre; if ( !dni.empty() ) { // Pasar la letra del NIF, si está presente if ( esNif( lin, *lex ) ) { dni += lex->getCurrentChar(); lex->advance(); } // Pasar la coma o punto y coma, si existen lex->skipDelim(); if ( esSeparador( lex->getCurrentChar() ) ) { lex->advance(); lex->skipDelim(); } // Tomar el nombre if ( lex->getCurrentChar() == '"' ) { lex->advance(); nombre = lex->getLiteral( "\"" ); } else { nombre = lin.erase( 0, lex->getCurrentPos() ); } } else break; // Guardar y avanzar dnis.push_back( dni ); nombres.push_back( nombre ); f.readLn( lin ); } toret = ( construir( dnis, nombres ) != NULL ); } return toret; }
int main () { LISTA lista; construir(&lista); adicionar(&lista, 4); adicionar(&lista, 6); adicionar(&lista, 7); adicionar(&lista, 8); tamanho(&lista); mostrar(&lista); adicionar(&lista, 45); tamanho(&lista); mostrar(&lista); }
void ConstruirHeap(TipoGrafo grafo, Heap heap, int *pos,Imagem imagem){ int i; int n=grafo.numvertices; for (i=1;i<=grafo.numvertices;i++){ if (i<=imagem.w){ heap[i].peso=CalculaEnergiaPixel(imagem,0,i-1); } else{ heap[i].peso=infinito; } heap[i].vertice=i; pos[i]=i; } construir(heap,n,pos); }
void heapsort(int *a, int *n,int *copias,int *comparacoes) { int esq, dir; int x; construir(a, n,copias,comparacoes); /*constroi o heap*/ esq = 1; dir = *n; *copias += 2; while (dir > 1) { /*ordena o vetor*/ *comparacoes += 1; x = a[1]; a[1] = a[dir]; a[dir] = x; dir--; *copias += 4; refazer(esq, dir, a,copias,comparacoes); } }
/** * * Funcion que que convierte el cromosma binario en un Arbol, esta funcion es * llamada por la funcionObjetivo del AG * **/ void convertion(bool *chrm, bool grafica) { Arbol *A, *izq, *aux, *aux2; int i, nChrm, h, hmax, setear, nuevo_valor, *array;/* [8] = {6, 0, 16, 7, 1, 18, 4, 21}; */ bool lado = 0; FILE *filetree; char *str; char nombres[][35] = { /* Funciones de Coloracion */ "Greedy Coloring", "ColoringMoreFrequentColor", "ColoringLessFrequentColor", "UnColoring", "ColoringNeighbors", "InterchangeColor", "UncoloringNeighbors", /* Funciones que se repiten - solo de coloracion */ "EqualX", "IfX", "AndX", /* Funciones Genericas */ "While", "If", "And", "Equal", "Or", "Not", /* Terminales */ "vertexLargestDegree","vertexMinimumDegree", "firstVertex", "vertexLowestNumberedColor", "vertexHighestNumberedColor", "vertexMoreFrequentColor", "vertexLessFrequentColor", "vertexSaturationDegree", "vertexMoreUncoloredNeighbors", "vertexIncidenceDegree", "not_Increase?", "ExistUncoloredVertex?", /* Terminales que se repiten */ "vertexLowestNumberedColor", "vertexHighestNumberedColor", "vertexMoreFrequentColor", "vertexLessFrequentColor"}; A = NULL; nChrm = sizeChrm / nByte; contador = nChrm; bandera = 0; h = 0; hmax = 12; array = calloc(nChrm, sizeof(int)); getChrm(chrm, array); for(i=0; i<5; i++) funciones[i] = 1; for(i=5; i<16; i++) funciones[i] = 2; funciones[15] = 1; funciones[6] = 1; for(bandera=0, i=0; i<nChrm; i++) { /* /\* Si el primer elemento es un Terminal se cambia por una Funcion *\/ */ /* if(i == 0 && array[i] > 15) */ /* { */ /* setear = abs((0 % 16) - (array[i] % 16)); */ /* array[0] = (setear < 16) ? setear: 0; */ /* } */ /* /\* Si el ultimo elemento es una Funcion se cambia por un Terminal *\/ */ /* if(i == (nChrm - 1) && array[(nChrm - 1)] < 16) */ /* array[nChrm - 1] = array[nChrm - 1] + 16; */ construir(&A, array[i], i, -1, -1); if(bandera == 0) { /* Guardamos el arbol en otro arbol auxiliar */ aux = A; /* Creamos un segundo Arbol auxiliar con los datos del nodo que correspondia */ aux2 = crearNodo(array[i], i); /* El arbol original lo setiamos y creamos un nodo con una Funcion, que sea siempre con dos argumentos, una funcion generica*/ setear = abs((A->id % 16) - (A->valor % 16)); nuevo_valor = ((setear < 15) ? setear: 14); if(funciones[nuevo_valor] == 1) nuevo_valor = nuevo_valor + 10; if(nuevo_valor == 5 || nuevo_valor == 6) { nuevo_valor = nuevo_valor + 8; } A = crearNodo(nuevo_valor, contador++); /* El nuevo nodo tiene de hijo a la izq al primer auxiliar y el der. al segundo auxiliar si LADO es 0 si es 1 viceversa. Se van rotando para que los arboles no sean tan desbalanciados*/ if(lado == 0) { A->izq = aux; A->der = aux2; lado = 1; } else { A->izq = aux2; A->der = aux; lado = 0; } } bandera = 0; /* printf("Fin Costruir\n\n"); */ } /* Liberar el arreglo con las F y T */ /* free(array); */ rebuilt(A); /* salidaNameArbol(A); */ if(grafica) { i = snprintf(NULL, NULL, "%s/Arbol.dot", ruta_resultados); str = malloc((i+1) *sizeof(char)); snprintf(str, i+1, "%s/Arbol.dot", ruta_resultados); filetree = fopen(str, "w"); free(str); fprintf(filetree, "digraph G{\n"); fprintf(filetree, "%d [ label = \"%s\" ];\n", A->id, nombres[A->valor]); izq = A->izq; fprintf(filetree, "%d [ label = \"%s\" ];\n", izq->id, nombres[izq->valor]); imprimir(A, filetree, nombres); fprintf(filetree, "}"); fclose(filetree); i = snprintf(NULL, NULL, "dot %s/Arbol.dot -o %s/arbol.png -Tpng", ruta_resultados, ruta_resultados); str = malloc((i+1) *sizeof(char)); snprintf(str, i+1, "dot %s/Arbol.dot -o %s/arbol.png -Tpng", ruta_resultados, ruta_resultados); printf("%s\n",str); if(system(str)) printf("No se pudo dibujar el Arbol\n"); free(str); } conexion(A, grafica); freeArbol(A); free(array); }
int main(){ Persona* RH = (Persona*)malloc(N*sizeof(Persona)); Modelo* modelos = (Modelo*)malloc(M*sizeof(Modelo)); int opcion=-1; int id=0; int fec=0; int zrh=0; int zmod=0; while(opcion !=0){ printf("que quieres\nagregar empleado -1\neliminar empleado - 2\nhacer un modelo -3\nver por fecha -4\nver nomina -5\n salir - 0 \n"); scanf("%d",&opcion); switch(opcion) { case 1: //printf("agregando"); addNomina(RH,zrh); zrh++; //printf("agregado"); break; case 2: delNomina(RH,zrh); zrh--; break; case 3: construir(modelos,RH,zmod); zmod++; break; case 4: printf("log in para poder ver tus modelos(osea tu numero de nomina)"); scanf("%d",&id); printf("en que fehca deseas buscar? formato 19930317"); scanf("%d",&fec); printByDate(modelos,RH, fec,id, zmod); break; case 5: printrh(1,3,modelos,RH,zmod); //printf("edificio %d pisps \n",(modelos->edificio->pisos)); break; default: printf("error\n"); break; } } edit(RH,zrh); if(!fork()) { //hijo printf("log in para poder ver tus modelos(osea tu numero de nomina)\n"); scanf("%d",&id); printf("en que fehca deseas buscar? formato 19930317\n"); scanf("%d",&fec); printByDate(modelos,RH, fec,id, zmod); exit(0);//matando al hijo } else { //padre wait(0);//dado que solo tengo 1 consola para probarlo pues tiene que ser "paralelo" uno tras otro printf("log in para poder ver tus modelos(osea tu numero de nomina)\n"); scanf("%d",&id); printf("en que fehca deseas buscar? formato 19930317\n"); scanf("%d",&fec); printByDate(modelos,RH, fec,id, zmod); } // del(RH,zrh,modelos,zmod); free(RH); free(modelos); return 0; }