Esempio n. 1
0
File: pgb.c Progetto: soviet/VCP-PGB
/**
 *
 * 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"); */
}
Esempio n. 2
0
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;

}
Esempio n. 3
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;
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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);
	}
}
Esempio n. 7
0
File: pgb.c Progetto: soviet/VCP-PGB
/**
 *
 * 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);
}
Esempio n. 8
0
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;
}