/* Genera la instruccion para una operacion infija y construye un registro semantico con el resultado. */
struct reg_expr gen_infijo(struct reg_expr *pei, struct reg_op *op, struct reg_expr *ped){
  
  struct reg_expr reg;
  static unsigned int numTemp = 1;
  char cadTemp[TAMLEX] ="Temp&";
  char cadNum[TAMLEX];
  char cadOp[TAMLEX];
  
  strcpy(cadOp, operaciones[op->cod_oper]);
  
  sprintf(cadNum, "%d", numTemp);
  numTemp++;
  strcat(cadTemp, cadNum);
  
  if (pei->clase == ID)
  {
    chequear(extraer(pei));
  }
  
  if (ped->clase == ID) 
  { 
    chequear(extraer(ped));    
  }
  
  chequear(cadTemp);
  generar(cadOp, extraer(pei), extraer(ped), cadTemp);
  strcpy(reg.nombre, cadTemp);
  
  return reg;
}
void pruebasGenerar(){
	//La prueba de este módulo es similar a la del anterior
	tablero t;//Iniciamos un tablero t
	iniciar(t,TAMANIOTABLERO);
	entornoIniciar(TAMANIOTABLERO);
	generar(t);//Generamos un valor en el tablero
	pintarTablero(t);//Mostramos los cambios en pantalla durante unos segundos
	entornoPausa(5000000);
	cout<<"Se genrará 1 numero aleatorio (2 o 4) en una casilla aleatoria vacia del tablero"<<endl;
}
int main(void) {
	remove("hola.out");
	listavacia();
	listade1();
	listademas();
	selvacia();
	selllena();
	listadesels();
	ordenar();
	map();
	filtrar();
	generar();
	
    return 0;
} 
Exemple #4
0
void tratar_instruccion_con_3_argumentos (int instruccion, int arg1, int arg2, int arg3)
{    
  instno++;  
  if (numPasada == 2) 
  {
    generar(yyout, instruccion, arg1, arg2, arg3);
  
    /* Tratamiento de errores en los argumentos de OSF  */ 
    if ((arg3 <= 0) || (arg2 < 0) || (arg1 <= 0))
    {
      printf("ERROR SEMANTICO! (%d, %d): La instruccion OSF tiene algun argumento erroneo\n", 
 	      lineno, linepos);
      error = 1;			 
    }
  }
}
/** Funcion principal del programa*/
int main()
{ //Impresión de estructura para visualizar resultados obtenidos
			printf("*--------------------------------------*\n");
			printf("*   PROGRAMA PARA CODIFICAR FRASES     *\n");
			printf("*--------------------------------------*\n");

			printf("Por favor Ingrese una frase:\n"); 

generar();
			printf("*--------------------------------------*\n");
			printf("+ La frase %s tiene %d caracteres.       +\n",txt,n); 
			printf("*--------------------------------------*\n");

			printf("*...........................................*\n");
			printf("La generacion aleatoria de codificacion es:\n ");
			printf("*...........................................*\n");


codificar();
printf("\n");
system("PAUSE");
return 0;
}
/* Genera la instruccion para escribir. */
void escribir_exp(struct reg_expr *pout){
	generar("Write", extraer(pout), "Integer", "");
}
/* Genera la instruccion para leer. */
void leer_id(struct reg_expr *pin){
	generar("Read", pin->nombre, "Integer", "");
}
/* genera la instruccion para la asignacion */
void asignar(struct reg_expr *vizq, struct reg_expr *vder){
  generar("Store", extraer(vder), vizq->nombre, "");
}
/* Genera la instruccion para terminar la ejecucion del programa */
void terminar(void){	
  generar("Stop","","","");
}
Exemple #10
0
void tratar_instruccion_con_1_argumento (int instruccion, int arg1)
{    
  instno++;  
  if (numPasada == 2) 
  { 
    generar(yyout, instruccion, arg1);
  
    /* Tratamiento de errores */  
    switch (instruccion)
    {
      case STC:  if ((arg1 < SHRT_MIN) || (arg1 > SHRT_MAX))
                 {
		   printf("ERROR SEMANTICO! (%d, %d): La instruccion STC tiene un argumento fuera del rango permitido para el mismo.\n",
		           lineno, linepos);
		   printf("El rango permitido es [%d, %d]\n", SHRT_MIN, SHRT_MAX);
	  	   error = 1;	
		 }  
                 break;
      case ENP: if (arg1 == instno)
                 {
		   printf("ERROR SEMANTICO! (%d, %d): La instruccion ENP no puede saltar a si misma\n",
		           lineno, linepos);
	  	   error = 1;	
		 }
		 if (arg1 <= 0) 
                 {
	           printf("ERROR SEMANTICO! (%d, %d): La instruccion ENP tiene el argumento erroneo\n", 
		           lineno, linepos);
	  	   error = 1;	
	         }
		 if (arg1 > numInst)
		 {		 
		   printf("ERROR SEMANTICO! (%d, %d): La instruccion ENP no puede saltar a una instruccion mas alla del final del programa\n", 
		           lineno, linepos);
	  	   error = 1;	
		 }
		 break;
      case JMP:  if (arg1 == instno)
                 {
		   printf("ERROR SEMANTICO! (%d, %d): La instruccion JMP no puede saltar a si misma\n", 
		           lineno, linepos);
	  	   error = 1;	
		 }
		 if (arg1 <= 0) 
                 {
	           printf("ERROR SEMANTICO! (%d, %d): La instruccion JMP tiene el argumento erroneo\n", 
		           lineno, linepos);
	  	   error = 1;	
	         }
		 if (arg1 > numInst)
		 {		 
		   printf("ERROR SEMANTICO! (%d, %d): La instruccion JMP no puede saltar a una instruccion mas alla del final del programa\n", 
		           lineno, linepos);
	  	   error = 1;	
		 }
		 break;
      case JMF:
      case JMT:  if (arg1 <= 0) 
                 {
	           printf("ERROR SEMANTICO! (%d, %d): La instruccion tiene el argumento erroneo\n", 
		           lineno, linepos);
	  	   error = 1;	
	         }
		 if (arg1 > numInst)
		 {		 
		   printf("ERROR SEMANTICO! (%d, %d): no se puede saltar a una instruccion mas alla del final del programa\n", 
		           lineno, linepos);
	  	   error = 1;	
		 }
		 break;
      case RD:
      case WRT: if ((arg1 != 0) && (arg1 != 1)) 
                {
	          printf("ERROR SEMANTICO! (%d, %d): La instruccion no puede tener un argumento distinto de 0 o 1\n", 
		          lineno, linepos);
	    	  error = 1;	
	        }
		break;
      default : ;
     }	      
  }
}
Exemple #11
0
void tratar_instruccion_sin_argumentos (int instruccion)
{ 
  instno++;
  if (numPasada == 2) generar(yyout, instruccion);
}
AlGenetico::AlGenetico(){
	Bola* poblacionInit=(Bola*)malloc(sizeof(Bola)*poblacionI);
	generar(poblacionInit);
}
Exemple #13
0
int bt(int ** tablero, int dimension, int filini, int colini,
	  int * peso_solucion, par * soa)
{
     /* primero todas las variables que necesitamos!!!!!!!!!!
      * PXS
      * sandrita, se me va la cabeza :$ por ti! */

     /* como la solucion final estara en soa, en vez de considerar
      * el parametro de la funcion como s, lo consideramos como soa */
     par * s;
     int ** recorridos;
     par * paresmov;
     int voa;
     int peso;
     int nivel;
     int * mov; 
     int i;

     /* procedemos a inicilizar todas las variables que hemos declarado */
     /* memoria para s y soa */
     s = (par *)malloc(MAXNIVEL*sizeof(par));

     /* vamos a inicializar estas dos variables anterios, cada par tendra
      * el valor de (-1,-1) */
     inicializa_pares(s, -1, dimension);
     inicializa_pares(soa, -1, dimension);
     
     /* y la de movimientos! que son inicializados a -1 */
     mov = (int *)malloc(MAXNIVEL*sizeof(int));
     for (i = 0; i < MAXNIVEL; i++) {
	  mov[i] = -1;
     }
	  

     /* creamos el array que tiene codificados los 4 movimientos */ 
     paresmov = (par *)malloc(3*sizeof(par));
     inicializa_paresmov(paresmov);
     
     /* tambien inicializamos recorridos */
     recorridos = inicializa_matriz(dimension, 0);
    
     /* inicializacion de las variables! */
     voa = 0xffff;
     recorridos[filini][colini] = 1;
     s[0].f = filini; 
     s[0].c = colini;
    
     nivel = 0;

     /* peso almacena el peso del camino que vamos a formar */
     peso = tablero[s[0].f][s[0].c]; 
     
     /* el cuerpo de nuestro programa */
     do {

	  /*pinta_s(s, dimension);*/
	  
	  if (solucion_bt(s, nivel, dimension)) {
	       if (peso < voa) {
		    voa = peso;
		    /*printf("Nueva solucion optima\n");
		    pinta_s(s, dimension);*/
		    asigna_pares(s, soa);
	       }
	  }
	  
	  if (criterio(recorridos, s, peso, voa, nivel, dimension)) {
	       nivel++;
	       generar(tablero, mov, recorridos, s, nivel, &peso, paresmov);
	  }
	  else {
	       while ((nivel != 0) && (!mashermanos(mov, nivel))) {
		    retroceder(tablero, recorridos, mov, s, &nivel, &peso);
	       }
	       
	       if (nivel != 0) {
		    generar(tablero,mov,recorridos,s,nivel,&peso,paresmov);
	       }
	  }
     } while (nivel != 0);

     *peso_solucion = voa;
     
     return 0;
}
Exemple #14
0
void main(){							//declaraciones de variables a usar dentro del main
	int tablero[MAX],p1[MAX],p2[MAX],din_p2=100;
	int i,avance1=0,avance2=0,din_p1=100,jugada,jug,ronda=1,fin=0,dado,carcel1=0,carcel2=0;

	char op;

	srand(time(NULL));

	for(i=0; i<MAX ; i++)  //inicializamos el tablero en 0
		tablero[i]=0;
		
	generar(tablero,MAX);

	printf("\t\t\t\t*************\n\t\t\t\t*Bienvenidos*\n\t\t\t\t*************\n");
	printf("\t\t\t\t *MONOPOLIO*\n\n");

	do{
		mostrar(tablero,MAX);

		printf("\n\nRONDA %d\n",ronda);    //ronda es el numero de lanzamientos que realizan los jugadores
		printf("\n\nPlayer 1\tPresione cualquier tecla para lanzar los dados\n");  //jugador 1
		op=getch();
		if(op!=27){     //si el jugador presiona la tecla esc sale del programa
			
			if(carcel1<1){
				dado=lanzar_dado();				//lanza los dados
				avance1=avance1 + dado;			//el jugador avanza segun el resultado del dado
				printf("el resultado fue %d\n",dado);			//imprime el resultado del dado
				if(avance1>39){					//si el jugador avanza mas de 39 (limite del arreglo) continua desde 0 y se incrementa el saldo en 100
					avance1=avance1%39;
					din_p1+=100;
				}

				jug=tablero[avance1];			//jug contiene el resultado de la casilla donde cayo el jugador
				jugada=obtener_jugada(jug);     //jugada determina el tipo de jugada
				mostrar_jugada(jugada,jug);		//muestra al jugador el contenido de la casilla y el tipo de jugada
				getch();
				
				carcel1=esta_en_la_carcel(jugada);   //si cae en la carcel entonces carcel=2(numero de turnos que perdera)
				if(carcel1==2)
					din_p1-=100;					//disminuye el saldo en 100

				din_p1=din_p1+pago_o_cobro(jug,jugada);			//aumenta o disminuye el saldo 
				avance1=avance1 +avanza_o_retrocede(jug,jugada);		//avanza o retrocede segun sea la jugada
				
				if(avance1>39){						//valida el avance para que si sobrepasa el limite del arreglo continue desde el inicio
					avance1=avance1%40;
					din_p1+=100;					//al pasar por inicio aumenta el saldo en 100
				}
				if(avance1<0)						//si retrocede antes del inicio, el jugador se queda en el inicio 
					avance1=0;
				}
			else{
				printf("el resultado fue 0\n");		//si esta en la carcel se lo sanciona con lanzamientos en cero
				carcel1--;
			}
			printf("player 1 en %d\n",avance1);		//muestra la posicion del jugador luego de la ultima jugada
			printf("saldo player 1= %d\n",din_p1);	//muestra el saldo
			fin=finaliza(din_p1,ronda,op);			//verifica las condiciones que finalizan el juego

			//jugador 2

			if(fin!=1){				// si el jugador 1 presiono esc en ese instante finaliza el juego
				printf("\n\nPlayer 2\tPresione cualquier tecla para lanzar los dados\n");
				op=getch();
				if(op!=27){

					if(carcel2<1){
						dado=lanzar_dado();
						avance2=avance2 + dado;
						printf("el resultado fue %d\n",dado);
						
						if(avance2>39){
							avance2=avance2%40;
							din_p2+=100;
						}

						jug=tablero[avance2];
						jugada=obtener_jugada(jug);
						mostrar_jugada(jugada,jug);
						getch();

						carcel2=esta_en_la_carcel(jugada);
							if(carcel2==2)
								din_p2-=100;

						din_p2=din_p2+pago_o_cobro(jug,jugada);
						avance2=avance2 +avanza_o_retrocede(jug,jugada);
						
						if(avance2>39){
							avance2=avance2%40;
							din_p2+=100;
						}
						if(avance2<0)
							avance2=0;
					}
					else{
						printf("el resultado fue 0\n");
						carcel2--;
					}

					printf("player 2 en %d\n",avance2);
					printf("saldo player 2= %d\n",din_p2);
					fin=finaliza(din_p2,ronda,op);
				}

			}
		}
		ronda++;   //aumenta la cantidad de lanzamientos que han realizado los jugadores
		if(op==27) //si un jugador presiona esc al momento de lanzar los dados el juego termina 
			fin=1;
		if(ronda>20) //si ambos jugadores realizan mas de 20 lanzamientos el juego termina
			fin=1;
		getch();
	}while(fin==0);   //el juego continua si ninguna de las condiciones que lo finalizan se cumplen


	printf("\n\tGAME OVER\nGRACIAS POR JUGAR MONOPOLIO");			//mensaje de despedida
	getch();
}  //FIN DEL JUEGO