예제 #1
0
int imprInvM(dTrioVet *vector, char *erro){
    int x=0;
    dTrioVet *teste;
    if(vector != NULL){
    printf("\n\n\n\n\n\n\n\n\n\n\nInversos Modulares em Z%d:\n--\n|----------------------------------------------------------------------|", vector->n);
    for (teste = vector; teste!=NULL ; teste=teste->prox , x++){
        if((x%2)==0){
            printf("\n| Inverso modular de %5.d = %5.d", teste->x, teste->y );
        }else{
            printf("    Inverso modular de %5.d = %5.d |", teste->x, teste->y );
        }
    }
    printf("\n|----------------------------------------------------------------------|\n--\n");
    if(x==0){
        printf("\n\nImpressao nao execultada");
        return 1;
    }
    free(vector);
    pausa("\n\n Digire qualquer tecla para continuar: ");
    return 0;
    }else{
        pausa(erro);
        return 0;
    }
}
예제 #2
0
//----------------------------------------------------------------------------
int main(void) {

   int i;
   int x,y;

   glcd_inicializar();	// preparar el hardware

   // rejilla
   /*
    for (y=0;y<64;y++) {
        for (x=0;x<128;x++) {
            if (((x+y)%2) == 0) {
                glcd_putpixel(x,y,1);
            } else {
                glcd_putpixel(x,y,0);
            }
        }
    }
      */
   
   // apagar y encender la pantalla
   pausa(20000);
   glcd_display_off();
   pausa(20000);
   glcd_display_on();
 
   // mostrar una imagen en las coordenadas (1,1)
   glcd_putxbitmap(1,1,0,med_sim2);



   // hacer un triangulo a base de pixels
   for (y=0;y<10;y++) {
      for (x=0;x<y;x++) {
         glcd_putpixel(85+x,y,1);
         glcd_putpixel(85-x,y,1);
         glcd_putpixel(85+x,63-y,1);
         glcd_putpixel(85-x,63-y,1);
      }
   }

   // sacar un texto con el font por defecto
   glcd_font_puts(&font5x7,57,20,"Hola GLCD!");

   // dibujar un par de rectángulos
   glcd_rectangle(50,30,120,50,1);
   glcd_rectangle(55,35,115,45,1);

   // probar la redirección de printf()
   glcd_putchar_setxy(57,37);
   printf("Cont=");

   while (1) {
      for(i=0;i<10000;i++) {
         glcd_putchar_setxy(90,37);
         printf("%04d",i);
      }
   }
}
예제 #3
0
int start()
{
    int opcion = 0;
    ArrayList *calendario = al_newArrayList();
    cargarEventosDeArchivo(calendario);

    do
    {
        system("cls");
        printMenu();
        pedirInt(&opcion,"Ingrese una opcion:\n",7,1,"Ingrese una opcion valida. Entre 1 y 6\n");

        switch(opcion)
        {
            case NUEVO:
                if(crearNuevoEvento(calendario))
                    printf("Hubo un error al intentar crear el evento\n");
                pausa("Presione una tecla para volver\n");
                break;
            case CONSULTAR_DIA:
                if(consultarFecha(calendario))
                    printf("Hubo un error con la consulta\n");
                pausa("Presione una tecla para volver\n");
                break;
            case MODIFICAR:
                if(modificarEvento(calendario))
                    printf("No se pudo completar la modificacion\n");
                break;
            case ELIMINAR:
                if(eliminarEvento(calendario))
                    printf("No fue posible eliminar el evento\n");
                pausa("Presione una tecla para volver\n");
                break;
            case EXPORTAR:
                if(exportarCalendario(calendario))
                    printf("Hubo un error al intentar exportar el calendario\n");
                pausa("Presione una tecla para volver\n");
                break;
            case LIMPIAR:
                if(limpiarCalendario(calendario))
                    printf("No se pudo completar la operacion\n");
                    pausa("Presione una tecla para volver\n");
                break;
        }
    }while( opcion != SALIR);

    guardarEventosEnArchivo(calendario);
    limpiarMemoria(calendario);
    calendario->deleteArrayList(calendario);
    return 0;
}
int main ()
    {
        FILE *pf;
        int mat[TAM][TAM]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
        t_lista lista;
        t_dato dato;
        dato.clave=-1;
        pf=fopen("archivo.bin","rb+");
        if(!pf)
            {
            printf("No se pudo abrir el archivo.");
            exit(1);
            }
        printf("Los montos del arch. son: \n");
        mostrarArch(pf);
        pausa();
        system("cls");
        crearLista(&lista);
        printf("Ingrese clave y monto (clave=0 para salir): \n");
        scanf("%d %d",&dato.clave,&dato.monto);
        while(dato.clave!=0)
            {
            if(!insertarEnLO(&lista,&dato))
                printf("\nNo se pudo insertar.\n");
            printf("\nIngrese clave y monto (clave=0 para dejar de cargar): \n");
            scanf("%d %d",&dato.clave,&dato.monto);
            }
        system("cls");
        printf("La lista es: \n\n");
        mostrarLista(&lista);
        pausa();
        if(!elimSumarRepeLO(&lista))
            {
            printf("\nLista vacia. Cerrando Programa.");
            pausa();
            exit(1);
            }
        system("cls");
        printf("Tras eliminar repetidos, la lista es: \n\n");
        mostrarLista(&lista);
        pausa();
        buscarEnMat(mat,&lista,pf);
        system("cls");
        printf("Tras actualizar, el archivo queda: \n\n");
        mostrarArch(pf);
        fclose(pf);
        pausa();
        return 0;
    }
예제 #5
0
int imprVet(dVector *vet, char *titulo, char *erro){
    dVector *teste;
    if (vet !=NULL){
        printf("%s", titulo);
    for (teste = vet; teste!=NULL ; teste=teste->prox){
        printf("\n|  %5.d |", teste->x);
    }
    free(vet);
    pausa("\n\n\n\nDigite qualquer tecla pra continuar: ");
    return 0;
    }else{
        pausa(erro);
        return 0;
    }
}
예제 #6
0
int menu(){
    int op;
    fflush(stdin);
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n-----------MENU-----------\n1-Frase para ASCII\n2-ASCII para Frase\n3-Verificaçao de Inversos Modulares\n4-Raizes Modulares\n0-Sair do programa\n--------------------------\n\n\nDigite sua opçao: ");
    scanf(" %d", &op);
    switch (op){
        case 1:
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            return imprInt(entradaString("\n--------ASCII para Decimal------\n\nDigite a String: "), "\n\n\nASC II: ");
            break;
        case 2:
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            return imprChar(entradaASCII("\n--------Decimal para ASCII------\n\nDigite a String ASCII separando por Espaços e digitando 0 no fim: "),"\n\n\nConversao do codigo ASCII: ", "\n\nErro: string nao recebida\nDigite qualquer tecla para continuar: ");
            break;
        case 3:
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            return imprInvM( invMod(entradaInt("\n\n\n\nDigite o tamanho do conjunto ( Zn ) a ser analizado: ")), "\n\nNao ha inversos modulares neste conjunto Zn\nDigite qualquer tecla para continuar: ");
            break;
        case 4:
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            return imprVet(raizMod(entradaInt("\n\n\n\nDigite o tamanho do conjunto ( Zn ) a ser analizado: "), entradaInt("\n\n\n\nDigite o Radicando n da raiz √n: ")), "\n\n\n Raizes Modulares: ", "\n\nNao ha raizes deste numero nesse conjunto Zn\nDigite qualquer tecla para continuar: ") ;
            break;
        case 0:
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nObrigado por usar o programa.\n\n ");
            return 1;
            break;
        default:
            pausa("\n\n\nOpçao incorreta. Digite qualquer tecla para continuar");
            return 0;
    }
    return 0;
}
예제 #7
0
파일: main.cpp 프로젝트: untxi/turing
int main(){
    LinkedList<string> miArchivo;
    bool bandera = false;
    do{
        char miOpcion;
        system("cls");
        misOpciones();
        cout << "Seleccione una opcion:  ";
        cin  >> miOpcion;
        if (miOpcion == 'I' || miOpcion == 'i'){
            system("cls");
            string tiraUsuario;
            cout << "Digite la tira que desea ingresar a la Maquina: ";
            cin >> tiraUsuario;
            cout << "Cargando Maquina de Turing...\n";
            lectorArchivoTxt();
            maquinaTuring maquinaUpLoad = predibujo();
            ejecutarTuring miTuring = miTuring(tiraUsuario, maquinaTuring)

        }
        if (miOpcion == 'M' || miOpcion == 'm'){
            mainG();
            system("cls");}
        if (miOpcion == 'S' || miOpcion == 's'){
            bandera = true;
            break;}
        else{pausa();}

        system("cls");
        misOpciones();
    }
예제 #8
0
파일: utilitarios.c 프로젝트: Ziero/c
void funcion_vectores()
{
    const char opcionesNumero[][30]={"123V",
                               "ejercicio22",
                               "ejercicio ",
                               "ejercicio",
                               "Volver"
                               };
    char op;
    do{
        op=menu(opcionesNumero, "Menu de ejercicios con fechas del TP1");
        switch(op){
            case '1': ejercicio22(); pausa(""); break;

        }
    } while(op!='V');
    pausa("Menu principal");
}
예제 #9
0
int imprInt(char *cripto, char *titulo){
    printf("%s", titulo);
    for(int x=0; x<(strlen(cripto)*sizeof(char)); x++){
        printf(" %d", *(cripto+x));
    }
    free(cripto);
    pausa("\n\nDigite qualquer tecla pra continuar: ");
    return 0;
}
예제 #10
0
파일: utilitarios.c 프로젝트: Ziero/c
void funcion_fechas()
{
    const char opcionesNumero[][30]={"123V",
                               "ejercicio14",
                               "ejercicio15",
                               "ejercicio16",
                               "Volver"
                               };
    char op;
    do{
        op=menu(opcionesNumero, "Menu de ejercicios con fechas del TP1");
        switch(op){
            case '1': ejercicio14(); pausa(""); break;
            case '2': ejercicio15(); pausa(""); break;
            case '3': ejercicio16(); pausa(""); break;
        }
    } while(op!='V');
    pausa("Menu principal");

}
예제 #11
0
파일: main.c 프로젝트: Ziero/c
int main()
{
    const char opciones[][30]={"NFVMQ",
                               "Numeros",
                               "Fechas",
                               "Vectores",
                               "Matrices",
                               "Salir"};
    char op;
    do{
        op=menu(opciones, "Programa de Prueba del TP1");
        switch(op){
            case 'N': funcion_numeros(); pausa(""); break;
            case 'F': funcion_fechas(); pausa(""); break;
            case 'V': funcion_vectores(); pausa(""); break;
            case 'M': printf("\nEligio opcion M"); pausa(""); break;
        }
    } while(op!='Q');
    pausa("fin del programa");
    return 0;
}
예제 #12
0
파일: utilitarios.c 프로젝트: Ziero/c
void funcion_numeros()
{
    const char opcionesNumero[][30]={"1234V",
                               "ejercicio1",
                               "ejercicio2",
                               "ejercicio3",
                               "ejercicio4",
                               "Volver"
                               };
    char op;
    do{
        op=menu(opcionesNumero, "Menu de ejercicios numericos del TP1");
        switch(op){
            case '1': ejercicio1(); pausa(""); break;
            case '2': ejercicio2(); pausa(""); break;
            case '3': ejercicio3(); pausa(""); break;
            case '4': ejercicio4(); pausa(""); break;
        }
    } while(op!='V');
    pausa("Menu principal");

}
예제 #13
0
// mostra os comandos do jogo
void ajuda_comandos(){
    char buffer[255] = {'\0'};
    FILE *fd = fopen("comandos.txt", "r");
    zenter_cls(AJUDA_NOME);
    putz("[Comandos]", 11);
    
    if(fd == NULL) return;
    while(fgets(buffer, 255, fd) != NULL) {
        if(buffer[0] == ' ') printz(7, "%s", buffer);
        else printz(15, "%s", buffer);
    }
    fclose(fd);
    pausa();
 }
예제 #14
0
int main()
{
	char opcion;
	char mOpciones[][30] = {"ABVLS", "Alta", "Baja", "Ver Archivo", "Ver Arbol", "Salir"};
	char titulo[] = "ABM Socios";
	FILE* archSocios;
	t_arbol indice;


	archSocios = fopen("../Archivos_ABMArbol/Socios.dat", "r+b");

	if(!archSocios)
	{
		puts("Error abriendo el archivo");
		return ERROR_ARCHIVO;
	}


	crear_arbol_res(&indice);

	cargar_arbol_de_archivo_ordenado_res(&indice, "../Archivos_ABMArbol/Socios.idx", /*cmp_ind*/cmp_ind_res);


    opcion = menu(mOpciones, titulo);
    while(opcion != 'S')
	{
		system("cls");

		switch(opcion)
		{
			case 'A': opcAlta(archSocios, &indice); break;
			case 'B': opcBaja(archSocios, &indice); break;
			case 'V': opcVer(archSocios, &indice); break;
			case 'L': opcVerArbol(&indice); break;
		}

		pausa("");

		opcion = menu(mOpciones, titulo);
	}


	grabar_arbol_en_archivo_ordenado_res(&indice, "../Archivos_ABMArbol/Socios.idx");

	///vaciar_arbol(&indice);
	vaciar_arbol_res(&indice);

    return 0;
}
예제 #15
0
파일: sudoku.c 프로젝트: rnhmjoj/Sudoku
/*
 * Legge la mossa del giocatore
 */
void leggi_mossa(){
	int x, y, m;
	printf("%s%s%s", VERDE, "(x,y,m): ", BIANCO);
	scanf("%d,%d,%d", &x, &y, &m);
	if(!sudoku[x][y][1])
		printf("%-50sNon puoi cambiare il numero in (%d,%d)",ROSSO, x, y);
	else if(!(0 < m < 10))
		printf("%-45sSolo numeri tra 1 e 9 estremi inclusi.", ROSSO);
	else if(!(0 < x < 10) || !(0 < y < 10))
		printf("%.45sLe cordinate sono tra 1 e 9 estremi inclusi.", ROSSO);
	else{
		sudoku[x][y][0] = m;
		return;
	}
	pausa();
}
예제 #16
0
파일: main.c 프로젝트: jesusgoku/Zanahoria
int main(int argc, char **argv)
{
	int m = 0, n = 0; // m para filas, n para columnas
	char ** tablero; // Tablero de juego
	char ** tableroCopia; // Tablero de Copia
	char ** auxiliar; // Apuntador Auxiliar
	int i = 0, j = 0, k = 0; // Variables auxiliares
	int conejosIniciales = 0; // Se almacenaran los conejos ingresados por el usuario
	int puntaje = 0, nivel = 0, conejosVivos = 0; // Estado del juego
	float trampolines = 0; // Se llevara la cantidad de trampolines
	int coordZF = 0, coordZC = 0;
	int siguienteMovimiento = 0;
	Bool gameOver = False;
	Bool movValido = False;
	FILE *fp = NULL;
	Bool recuperarPartida = False;
	ItemRanking ranking[RANKING_NUM];
	ItemRanking paso;
	TipoNodoNombre *lista_partidas;
	int lista_partidas_num;
	char partida_ruta[50];
	char partida_nombre[NODO_NOMBRE_MAX_LENGTH + 1];

	// Inicializo la lista
	lista_partidas = lista_vacia();

	// Cargo el Ranking
	inicializarRanking(ranking, RANKING_NUM);
	cargarRanking(ranking, RANKING_NUM);

	// Doy la bienvenida
	clearScr();
	printZanahoria();
	pausa();
	clearScr();

	// Instrucciones del Juego
	if(!preguntayn("Conoces las reglas del juego?")){
		mostrarAyuda();
	}

	// Lista de Partidas
	lista_partidas = generar_lista_partidas();

	if(lista_partidas != NULL){
		clearScr();
		recuperarPartida = False;
		recuperarPartida = (Bool)preguntayn("Existen partidas guardadas, quieres cargar una?");

		if(recuperarPartida)
		{
			lista_partidas_num = longitud_lista(lista_partidas);
			clearScr();
			printf("Se encontraron %i partida(s):\n\n", lista_partidas_num);
			mostrar_lista(lista_partidas);
			do{
				i = 0;
				printf("\nSelecciona una partida: ");
				clearStdin();
				scanf("%i", &i);
				if(i < 1 || i > lista_partidas_num) printMsjError("Partida no valida!");
			}while(i < 1 || i > lista_partidas_num);
			sprintf(partida_ruta, "%s%s%i%s", FOLDER_PARTIDAS, FILE_PARTIDA_PREFIX, i - 1, FILE_PARTIDA_EXT);
			tablero = cargarPartida(partida_ruta, &m, &n, &conejosIniciales, &conejosVivos, &nivel, &puntaje, &trampolines);
			if(tablero == NULL){
				printMsjError("Error: No se logro conseguir memoria para el tablero!");
				return 1;
			}
		}
	}

	// // Verifico si existe una partida guardada
	// fp = fopen(FILE_PARTIDA, "r");

	// // Existe una partida guardada
	// if(fp != NULL){
		
	// 	// Cierro el fichero para poder abrirlo desde la funcion
	// 	fclose(fp);
	// 	fp = NULL;
		
	// 	clearScr();
	// 	recuperarPartida = False;
	// 	recuperarPartida = (Bool)preguntayn("Existe una partida guardada, desea cargarla?");

	// 	// Si la respuesta fue afirmativa recupero el estado del juego
	// 	if(recuperarPartida)
	// 		tablero = cargarPartida(FILE_PARTIDA, &m, &n, &conejosIniciales, &conejosVivos, &nivel, &puntaje);

	// }

	if(!recuperarPartida){

		// Preguntamos el tamano del tablero
		clearScr();
		pedirDimensionTablero(&m, &n);

		// Preguntamos los conejos iniciales
		clearScr();
		pedirConejosIniciales(&m, &n, &conejosIniciales);
		conejosVivos = conejosIniciales;
		
		// Reservo memoria para el tablero
		tablero = (char **)pedirMemoriaMatriz(m, n, 'c');
		if(tablero == NULL)
		{
			printMsjError("Error: No se logro conseguir memoria para el tablero!");
			return 1;
		}
		tablero_ini(tablero, m , n);

		// Ubico la zanahoria
		ubicarZanahoriaInicial(tablero, m, n);

		// Ubico los conejos iniciales
		ubicarConejosIniciales(tablero, m, n, conejosVivos);


	}

	// Reservo la memoria para una copia del tablero
	tableroCopia = (char **)pedirMemoriaMatriz(m, n, 'c');
	if(tableroCopia == NULL){
		printMsjError("Error: No se logro conseguir memoria para el tablero!");
		return 1;
	}
	// Doy valores iniciales al tablero
	tablero_ini(tableroCopia, m, n);

	// Comienza el Ciclo de Juego
	for(;;){
		clearScr();
		// Muestro el tablero
		tablero_pretty_view(tablero, m , n);
		// Muestro el estado del juego
		//println("Conejos Vivos: %i - Nivel: %i - Puntaje: %i", conejosVivos, nivel + 1, puntaje);
		printf("%sConejos Vivos: %i%s", COLOR_ROJO_CLARO_S, conejosVivos, ESTILO_NORMAL_S);
		printf(" - %sNivel: %i%s", COLOR_VERDE_CLARO_S, nivel + 1, ESTILO_NORMAL_S);
		printf(" - %sPuntaje: %i%s\n", COLOR_MARRON_CLARO_S, puntaje, ESTILO_NORMAL_S);
		// Pido movimiento al usuario
		siguienteMovimiento = pedirSiguienteMovimiento();
		// Establesco el movimiento como no valido hasta que se demuestre lo contrario
		movValido = False;
		// Realizo el siguiente movimiento si es posible
		if(siguienteMovimiento >= 1 && siguienteMovimiento <= 9){
			// Verificamos si el movimiento ingresado se puede realizar
			// Si es asi movemos la zanahoria
			movValido = ejecutarMovimientoZanahoria(siguienteMovimiento, tablero, m, n, nivel) ? True : False;
			if(!movValido){
				printMsjErrorPausa("Movimiento no valido!");
			}else{
				gameOver = (ejecutarMovimientoConejos(tablero, tableroCopia, m, n, &conejosVivos, &puntaje) == 0) ? True : False;
			}
		}else if(siguienteMovimiento == MOVE_TRANSPORT){
			// Ejecutamos la teletransportacion y movemos a los conejos
			movValido = True;
			ejecutarTeletransportacion(tablero, m , n);
			gameOver = (ejecutarMovimientoConejos(tablero, tableroCopia, m, n, &conejosVivos, &puntaje) == 0) ? True : False;
		}else if(siguienteMovimiento == ACTION_SAVE){
			lista_partidas_num = longitud_lista(lista_partidas);
			clearScr();
			if(lista_partidas_num) printf("Puedes guardar unar partida nueva o sobreescribir una existente.\n\n");
			if(lista_partidas_num && preguntayn("Deseas sobreescribir una partida?")){
				clearScr();
				printf("Hay %i Partida(s) Disponibles:\n\n", lista_partidas_num);
				mostrar_lista(lista_partidas);
				do{
					i = 0;
					printf("\nIngresa el numero de la que deseas sobreescribir: ");
					clearStdin();
					scanf("%i", &i);
					if(i < 1 || i > lista_partidas_num) printMsjError("Partida no valida!");
				}while(i < 1 || i > lista_partidas_num);
				// Sobreescribir una partida
				sprintf(partida_ruta, "%s%s%i%s", FOLDER_PARTIDAS, FILE_PARTIDA_PREFIX, i - 1, FILE_PARTIDA_EXT);
				pedirCadena("\nBreve descripcion partida", partida_nombre, NODO_NOMBRE_MAX_LENGTH);
				if(guardarPartida(partida_ruta, tablero, m, n, partida_nombre, conejosIniciales, conejosVivos, nivel, puntaje, trampolines)){
					modificar_valor_posicion(lista_partidas, i - 1, partida_nombre);
					printMsjOkPausa("Partida Guardada!");
				}
			}else{
				// Guardar Partida Nueva
				sprintf(partida_ruta, "%s%s%i%s", FOLDER_PARTIDAS, FILE_PARTIDA_PREFIX, lista_partidas_num, FILE_PARTIDA_EXT);
				clearScr();
				pedirCadena("Breve descripcion partida", partida_nombre, NODO_NOMBRE_MAX_LENGTH);
				if(guardarPartida(partida_ruta, tablero, m, n, partida_nombre, conejosIniciales, conejosVivos, nivel, puntaje, trampolines)){
					lista_partidas = insertar_por_cola(lista_partidas, partida_nombre);
					printMsjOkPausa("Partida Guardada!");
				}
			}
			// // Verficamos si ya existe una partida guardada
			// fp = fopen(FILE_PARTIDA, "r");
			// if(fp != NULL){
			// 	fclose(fp);
			// 	fp = NULL;
			// 	// Preguntamos si desea sobreescribir la partida existe
			// 	if(preguntayn("Ya existe una partida guardada, desea sobreescribirla?")){
			// 		if(guardarPartida(FILE_PARTIDA, tablero, m, n, conejosIniciales, conejosVivos, nivel, puntaje))
			// 			printMsjOkPausa("Partida Guardada!");
			// 	}
			// }else{
			// 	if(guardarPartida(FILE_PARTIDA, tablero, m, n, conejosIniciales, conejosVivos, nivel, puntaje))
			// 		printMsjOkPausa("Partida Guardada!");
			// }
		}else if(siguienteMovimiento == ACTION_QUIT){
			clearScr();
			//println("Gracias por jugar!");
			printGraciasPorJugar();
			break;
		}

		if(movValido){
			puntaje += PUNTAJE_MOV;
			// Intercambio los tableros
			auxiliar = tablero;
			tablero = tableroCopia;
			tableroCopia = auxiliar;

			// Paso de Nivel
			if(conejosVivos == 0){
				// Inicializo el Tablero
				posicionZanahoria(tablero, m, n, &coordZF, &coordZC);
				tablero_ini(tablero, m , n);
				tablero[coordZF][coordZC] = ZANAHORIA;
				// Aumento el nivel en una unidad
				nivel++;
				// Aumento el puntaje
				puntaje += PUNTAJE_NIVEL;
				// Incremento los conejos
				conejosVivos = conejosIniciales + (redondeoEntero(conejosIniciales * TASA_AUMENTO_CONEJOS) * nivel);
				ubicarConejosIniciales(tablero, m , n, conejosVivos);
				// Ubico los Trampolines
				if(nivel >= NIVEL_TRAMPOLINES_START){
					trampolines += nivel == NIVEL_TRAMPOLINES_START ? TRAMPOLINES_INICIALES : trampolines * TASA_AUMENTO_TRAMPOLINES;
					ubicarTrampolines(tablero, m, n, (int)trampolines);
				}
			}
		}

		// Acciones en caso de Perder el Juego
		if(gameOver){
			clearScr();
			// tablero_view(tablero, m, n);
			printConejoGameOver();
			// Verificamos si puede entrar al ranking
			if(puntaje > ranking[0].puntaje){
				paso.puntaje = puntaje;
				pedirCadena("\nFelicidades has ingresado al ranking!!\n\nDate tu nombre", paso.nombre, MAX_SIZE_NAME);
				i = ingresarRanking(ranking, RANKING_NUM, &paso);
				clearScr();
				mostrarRankingDestacado(ranking, RANKING_NUM, i);
			}
			break;
		}
	} // for - ciclo de juego

	// Libero la memoria otorgada para el tablero
	liberarMemoriaMatriz((void **)tablero);
	liberarMemoriaMatriz((void **)tableroCopia);
	tablero = tableroCopia = NULL;

	// Guarda el Ranking en el disco
	guardarRanking(ranking, RANKING_NUM);

	return 0;
}
예제 #17
0
Window::Window(QWidget *parent)
{
    chek = false;

    quadro = new Board(0);
    if(quadro == NULL){
        qDebug() << "quadro Falhou!";
        chek = true;
    }else{
        qDebug() << "quadro Sucesso!";
    }

    layout = new QGridLayout;
    if(layout == NULL){
        qDebug() << "layout Falhou!";
        chek = true;
    }else{
        qDebug() << "layout Sucesso!";
    }

    file = new QFile();
    if(file == NULL){
        qDebug() << "file Falhou!";
        chek = true;
    }else{
        qDebug() << "file Sucesso!";
    }

    lcdLevel = new QLCDNumber();
    if(lcdLevel == NULL){
        qDebug() << "lcdLevel Falhou!";
        chek = true;
    }else{
        qDebug() << "lcdLevel Sucesso!";
    }

    lcdScore = new QLCDNumber();
    if(lcdScore == NULL){
        qDebug() << "lcdScore Falhou!";
        chek = true;
    }else{
        qDebug() << "lcdScore Sucesso!";
    }

    labelLevel = new QLabel("Level:",this);
    if(labelLevel == NULL){
        qDebug() << "labelLevel Falhou!";
        chek = true;
    }else{
        qDebug() << "labelLevel Sucesso!";
    }

    labelScore = new QLabel("Score:",this);    
    if(labelScore == NULL){
        qDebug() << "labelScore Falhou!";
        chek = true;
    }else{
        qDebug() << "labelScore Sucesso!";
    }

    labelLife = new QLabel("Vida:",this);
    if(labelLife == NULL){
        qDebug() << "labelLife Falhou!";
        chek = true;
    }else{
        qDebug() << "labelLife Sucesso!";
    }

    botaoStart = new QPushButton("Start");
    if(botaoStart == NULL){
        qDebug() << "botaoStart Falhou!";
        chek = true;
    }else{
        qDebug() << "botaoStart Sucesso!";
    }

    botaoPause = new QPushButton("Pause");
    if(botaoPause == NULL){
        qDebug() << "botaoPause Falhou!";
        chek = true;
    }else{
        qDebug() << "botaoPause Sucesso!";
    }

    botaoReset = new QPushButton("Reset");
    if(botaoReset == NULL){
        qDebug() << "botaoReset Falhou!";
        chek = true;
    }else{
        qDebug() << "botaoReset Sucesso!";
    }

    menuBar = new QMenuBar;
    if(menuBar == NULL){
        qDebug() << "menuBar Falhou!";
        chek = true;
    }else{
        qDebug() << "menuBar Sucesso!";
    }

    fileMenu = new QMenu(tr("&File"), this);
    if(fileMenu == NULL){
        qDebug() << "fileMenu Falhou!";
        chek = true;
    }else{
        qDebug() << "fileMenu Sucesso!";
    }

    barraProgresso = new QProgressBar();    
    if(barraProgresso == NULL){
        qDebug() << "barraProgresso Falhou!";
        chek = true;
    }else{
        qDebug() << "barraProgresso Sucesso!";
    }

    barraVida = new QProgressBar();
    if(barraVida == NULL){
        qDebug() << "barraVida Falhou!";
        chek = true;
    }else{
        qDebug() << "barraVida Sucesso!";
    }

    tempo = new QTimer(this);
    if(tempo == NULL){
        qDebug() << "tempo Falhou!";
        chek = true;
    }else{
        qDebug() << "tempo Sucesso!";
    }

    contadorBarra = 1;
    baseScore =5;
    tamInicioBarra = 0;
    tamFimBarra = baseScore;
    barraVida->setMaximum(3);
    contadorVida = 0;

    aboutAct = new QAction(tr("&About"), this);
    if(aboutAct == NULL){
        qDebug() << "aboutAct Falhou!";
        chek = true;
    }else{
        qDebug() << "aboutAct Sucesso!";
    }

    aboutAct->setStatusTip(tr("Show the application's About box"));

    connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
    connect(botaoStart, SIGNAL(clicked()), quadro, SLOT(inicio()));
    connect(botaoPause, SIGNAL(clicked()), quadro, SLOT(pausa()));
    connect(botaoReset, SIGNAL(clicked()), quadro, SLOT(reset()));
    connect(quadro, SIGNAL(nivelDificuldade(int)), lcdLevel, SLOT(display(int)));
    connect(quadro, SIGNAL(pontosGanho(int)), lcdScore, SLOT(display(int)));
    connect(quadro, SIGNAL(barra_Progresso()), this, SLOT(barraDeProgresso()));
    connect(quadro, SIGNAL(barra_Vida()), this, SLOT(barraDeVida()));
    connect(quadro, SIGNAL(sinalReset()), this, SLOT(resetJogo()));
    connect(quadro, SIGNAL(salvaScore()), this, SLOT(save()));

    this->resize(304,400);
    this->setMaximumSize(304,400);

    quadro->setMinimumSize(104,200);
    quadro->setMaximumSize(304,400);

    createMenu();
    layout->addWidget(menuBar);
    layout->addWidget(quadro,3,0,10,3);
    layout->addWidget(labelLevel, 3, 4);
    layout->addWidget(lcdLevel,4,4);
    layout->addWidget(labelScore, 5,4);
    layout->addWidget(lcdScore,6,4);
    layout->addWidget(botaoStart,7,4);
    layout->addWidget(botaoPause,8,4);
    layout->addWidget(botaoReset,9,4);
    layout->addWidget(barraProgresso);
    layout->addWidget(labelLife);
    layout->addWidget(barraVida);

    this->setLayout(layout);
    this->show();

    if(chek == true)
    {
        falhaCritica();
    }
}
예제 #18
0
파일: cumples.cpp 프로젝트: javier-iesn/prj
int main(int argc, char**argv) {
   int diasMeses[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   CUMPLES cump[]={
      {"PAPA",{12,11,2006},'C'},
      {"MAMA",{14,1,2007},'C'},
      {"PAQUI",{1,11,1958},'C'},
      {"ANTONIO",{22,3,1960},'C'},
      {"JUAN",{6,6,1963},'C'},
      {"FRANC",{6,8,1965},'C'},
      {"MARI",{21,10,1969},'C'},
      {"JORGE",{30,9,1975},'C'},

      {"RAFA",{21,9,1987},'C'},
      {"ALBERTO",{9,8,2006},'C'},
      {"DAVID",{13,5,2006},'C'},
      {"LAURA",{20,4,1996},'C'},
      {"ANTOÑIN",{26,4,1994},'C'},

      {"ESTHER",{20,2,2007},'C'},
      {"CRISTINA",{7,3,2007},'C'},
      
      {"PAPA, ANTONIO, CHICO RICO",{13,6,2006},'S'},
      {"MAMA, MARI",{12,9,2006},'S'},
      {"PAQUI",{4,10,2006},'S'},
      {"JUAN",{24,6,2006},'S'},
      {"FRANC",{3,12,2006},'S'},
      {"JORGE",{23,4,2006},'S'},

      {"RAFA",{24,10,2006},'S'},

      {"DIA DEL PADRE",{19,3,2007},'S'},
      {"DIA DE LA MADRE",{6,5,2006},'S'},


      {"ESTHER",{1,7,2006},'S'},
      {"CRISTINA",{24,7,2006},'S'},

      {"JUAN JOSÉ",{5,7,1958},'C'},
      {"MARÍA",{8,9,2006},'S'},
      {"FÁTIMA",{17,12,2006},'C'},
      {"JUAN JOSÉ",{19,3,2007},'S'},

      {"RENOVACIÓN CERTIFICADO FNMT",{25,4,2006},'C'}
      
   };
   FECHA actual=fechaActual();
   int hayCumples=0, dias,i,j;


   setlocale(LC_ALL,"spanish_spain.1252"); //poner teclado español

   if (argc>1) {
      for(i=1; i<argc; i++) {
         if (argv[i][0]=='-' || argv[i][0]=='/') {
            for(j=1;argv[i][j];j++) {
               switch(argv[i][j]) {
                  case 'l': case 'L':
                     printf("\n\n");
                     listarCumples(cump,sizeof(cump)/sizeof(CUMPLES));
                     printf("\n\n");
                     break;
                  case 'h': case 'H': case '?':
                     printf("\n\nUso %s [opcion].",argv[0]);
                     printf("\nOpcion: -l -> listar cumples");
                     printf("\n        -h -> esta ayuda");
                     printf("\nSi se omite opción se listarán los cumples o santos a menos de 5 días vista.\n\n");
                     break;
               }
            }
         }
      }
      exit(0);
   }

   for(int i=0; i<sizeof(cump)/sizeof(CUMPLES); i++) {
      if (cump[i].cumple.dia>5 && actual.mes==cump[i].cumple.mes) {
         dias=cump[i].cumple.dia-actual.dia;
      } else if (actual.mes+1==cump[i].cumple.mes) {
         dias=diasMeses[actual.mes]-actual.dia+cump[i].cumple.dia;
      } else {
         dias=-1;
      }


      if (dias<=5 && dias >=0) {
         hayCumples=1;
         if (dias==0) {
            printf("\n* Hoy es ");
         } else {
            printf("\n* Faltan %d días para ",dias);
         }
         if (cump[i].tipo=='C') {
            printf("el Cumpleaños de: %s->%02d/%02d/%04d.\n",cump[i].nombre,cump[i].cumple.dia,cump[i].cumple.mes,cump[i].cumple.anio);
         } else {
            printf("el Santo de: %s.\n",cump[i].nombre);
         }
      }
   }
   if (hayCumples) {
      pausa();
   }
   return 0;
}
예제 #19
0
파일: main.c 프로젝트: ArayaPls/lab_eda2
void main(){
	//mostramos una imagen super fancy
	imprimeImagenPrincipal("        ");
	printf("\n\n\tPulsa [ENTER] para comenzar!\n");
	pausa();
	//srand(time(NULL));
	char opcion[STRING_MAX];
	char opcionJuego[STRING_MAX];
	boolean menu = TRUE; //variable del bucle del menu de opciones inicial
	boolean juego = FALSE; //variable del bucle del juego
	boolean buclePreJuego = FALSE; //variable del bucle de las opciones del juego
	boolean bucleTurnosJuego = FALSE; //variable del bucle de las jugadas

	//============================================
	// BUCLE MENU PRINCIPAL
	//--------------------------------------------
	while(menu){
		//limpia la consola
		limpiar();
		imprimeMenuPrincipal();
		fflush(stdin); //limpia buffer entrada
		fgets(opcion, STRING_MAX, stdin);

		//Opciones de entrada

		//opcion 1: entrar a un juego nuevo.
		if(atoi(opcion) == 1){
			buclePreJuego = TRUE;
		}
		//opcion 2: salir
		if(atoi(opcion) == 2){
			menu = FALSE;
		}

		//====================================================
		// BUCLE PRE-JUEGO
		//----------------------------------------------------
		
		char cantidadJugadores[STRING_MAX];
		nodo* jugadores = NULL; //jugadores
		nodo* mazo = NULL; //mazo del juego
		nodo* pozo = NULL; //donde se tiran las cartas
		nodo** manos = NULL; // cartas de los jugadores (puntero doble porque es un malloc de nodo*)

		while(buclePreJuego){
			//====================================================
			// CONDICIONES PRE-JUEGO
			//----------------------------------------------------
			limpiar();
			printf("Condiciones pre-juego.\n");
			
			//cuantos jugadores (incluyendo el humano)
			printf("ingrese la cantidad de jugadores [2-10]: ");
			fflush(stdin);
			fgets(cantidadJugadores,STRING_MAX, stdin);
			printf("jugadores: %d\n", atoi(cantidadJugadores));

			if(atoi(cantidadJugadores) < 2){
				buclePreJuego = FALSE;
			}
			else{
				//hacemos un arreglo de listas enlazadas que seran las manos.
				manos = (nodo**)malloc(sizeof(nodo*)*atoi(cantidadJugadores));
				
				//generamos el mazo del juego con orden aleatorio
				mazo = crearMazo();

				//colocamos una carta del mazo en el pozo.
				nodo* cartaInicial = obtener(mazo,0); //sacamos la primera carta 
				pozo = push(pozo, cartaInicial->dato, cartaInicial->dato2);
				mazo = borrarTipo(mazo, cartaInicial->dato,cartaInicial->dato2);

				//agrega los jugadores a una lista...
					//...los CPU...
					int t;
					for(t=0;t<atoi(cantidadJugadores)-1;t++)
					{
						jugadores = push(jugadores, JUGADOR_CPU,-1);
					}
					//...y al humano.
					jugadores = push(jugadores, JUGADOR_HUMANO,-1);

				//agregamos las manos
				int j,m;
				for(j=0;j<atoi(cantidadJugadores);j++){
					manos[j] = NULL;
					for(m=0; m<MANO_INICIAL;m++){
						//numero random
						
						//vemos una carta
						cartaInicial = obtener(mazo,0); //sacamos la primera carta
						//se coloca en la mano
						manos[j]= push(manos[j],cartaInicial->dato,cartaInicial->dato2);
						//se borra del mazo
						mazo = borrarTipo(mazo, cartaInicial->dato,cartaInicial->dato2);
					}
				}
				//muestra los turnos del juego antes de comenzar.
				muestraTurnos(jugadores);
			//borrar
				//printf("largo del mazo: %d\n", largo(mazo));
				//listarCartas(mazo);
			//fin borrar
				printf("\nPresione ENTER para comenzar la partida...");
				pausa();

				//terminamos condiciones pre-juego
				buclePreJuego = FALSE;
				//y vamos al bucle de turnos...
				bucleTurnosJuego = TRUE;
			}
		}
		//----------------------------------------------------------
		// FIN bucle pre-juego
		//==========================================================

		//==========================================================
		// BUCLE TURNOS DEL JUEGO
		//----------------------------------------------------------
		limpiar();
		int turno=-1; 	//turno actual
		char opcionJuego[STRING_MAX]; 	//entrada por teclado
		char sentido = 1; 	//sentido de los turnos (para cartas invertir)
		nodo* jugadorActual;	//jugador que le toca turno			

		while(bucleTurnosJuego){

			//verifica si quedan cartas en el mazo
			if(largo(mazo)<1){
				//si no hay cartas voltea el pozo
				mazo = volteaPozo(&mazo,&pozo);
			}
			turno = estableceTurno(atoi(cantidadJugadores),turno, sentido);
			//imprime estado del juego
			imprimeEstadoJuego(mazo,pozo);
			//obtiene el jugador que le corresponde el turno.
			jugadorActual = obtener(jugadores,turno);

			if( jugadorActual->dato == JUGADOR_HUMANO){
				printf("Tu turno!\n");
				//muestra la mano del jugador
				mostrarMano(manos[turno],"  ");
				//imprimirCartitas(largo(manos[turno]));

				//interaccion en turno
				printf("  Botar carta: ");
				fflush(stdin);
				fgets(opcionJuego,STRING_MAX,stdin);
				//reaccion a la opcion
					//==================================================
					// JUGADA DEL JUGADOR HUMANO
					//--------------------------------------------------

					//si el turno no es exitoso, no se avanza al siguiente jugador...
					if(!logicaTurno(&manos[turno], &mazo, &pozo, &turno, opcionJuego)){
						if(sentido){
							turno--;
						}
						else
							turno++;
					}
					else{
						if(largo(manos[turno])==0){
							limpiar();
							printf("\n\t\aFELICIDADES, HAS GANADO!!!\n\n");
							imprimeEstadoJugadores(jugadores,manos);
							printf("\n\t\aFELICIDADES, HAS GANADO!!!\n\n");
							bucleTurnosJuego = FALSE;
							printf("Presione [ENTER] para ontinuar...");
							pausa();
						}
					}
											
					//para salir
					if(atoi(opcionJuego) == -1){
						bucleTurnosJuego = FALSE;
					}
					//--------------------------------------------------
					// FIN jugada del jugador humano
					//==================================================
				//este "limpiar" permite que se vean solo las jugadas
				//de las CPU que se hacen hasta que le toca al usuario.
				limpiar();
			}
			else{
				//==========================================================
				//JUGADA AUTOMATICA DE COMPUTADORAS
				//----------------------------------------------------------
				printf("Turno Computadora %d, mano:", turno+1);
				imprimirCartitas(largo(manos[turno]));
				//si el turno no es exitoso, no se avanza al siguiente jugador...
				if(!jugadaAutomatica(&manos[turno], &mazo, &pozo, &turno)){
					if(sentido){
						turno--;
					}
					else
						turno++;
				}
				else{
					if(largo(manos[turno])==0){
						limpiar();
						imprimeEstadoJuego(mazo,pozo);
						printf("\n\t\aLA COMPUTADORA %d, HA GANADO!\n",turno+1);
						imprimeEstadoJugadores(jugadores,manos);
						printf("\n\t\aLA COMPUTADORA %d, HA GANADO!\n",turno+1);
						bucleTurnosJuego = FALSE;
						printf("Presione [ENTER] para continuar...");
						pausa();
					}
				}
				//-----------------------------------------------------------
				// FIN jugada automatica de computadoras
				//===========================================================
			}
		}
		//--------------------------------------------------------------
		// FIN bucle turnos juego
		//==============================================================

		//======================================
		// LIBERACION DE MEMORIA
		//--------------------------------------
		//liberamos lista de jugadores
		jugadores = anular(jugadores);
		//libera el mazo
		mazo = anular(mazo);
		//libarar el pozo
		pozo = anular(pozo);
		//libramos manos
		if(manos != NULL){
			int d;
			for(d=0; d < atoi(cantidadJugadores);d++){
				manos[d] = anular(manos[d]);
			}
			free(manos);	
		}
		//-------------------------------------
		// FIN liberacion memoria
		//=====================================
	}
	//--------------------------------
	// FIN bucle menu principal
	//================================
}
예제 #20
0
파일: main.c 프로젝트: Sel2016/microchip
void main (void)
{
    TRISC0=0;   // Led Amar
    TRISC1=0;   // Led Verd
    TRISC2=0;   // LED Verm
    TRISC6=0;   // saida TX EUSART
    ADCON1=0x0F;    // coloca pinos I/O em modo digital (nao analogico)

    acordar();

    unsigned int D0, D1, D2, D3, minAnterior, contador, segInicial;
    char msg[30];

    LED_VERM=1;
     // inicia porta serial com 9600 bps @ 8mhz

    initExt7SegLCD();   // inicia barramento I2C e escreve ".12:34."
    pausa(1); piscaSeg(0);

    // Inicio do Relogio e Display

    contador=0;    // o contador esta acima do limite (59)
    minAnterior=10; // o minuto nunca chegaria a 10 (forca display)

    while (1)
    {

        
        getDS1307();

        sprintf(msg," _[%x:%x:%x]_", hora, minuto, segundo );
            while(BusyUSART());
            putsUSART( msg );

        D0 = (hora & 0b00110000) >> 4;  // utiliza somente 2 bits da nibble esq
        D1 = hora & 0b00001111;         // utiliza somente 4 bits da nibble dir
        D2 = (minuto & 0b11110000) >> 4;// utiliza somente 4 bits da nibble esq
        D3 = minuto & 0b00001111;       // utiliza somente 4 bits da nibble dir

            /*
            sprintf(msg,"___ %d%d:%d%d ...%xseg_ \r\n",
                D0, D1, D2, D3 ,segundo);
            while(BusyUSART());
            putsUSART( msg );
             */

        if (D3 != minAnterior)  // se mudou o minuto, entao mostre novo horario
        {
            StartI2C();
                __delay_us(16); // delay experimental
                WriteI2C(HT16K33_ADDR << 1);

                WriteI2C(0x00);

                WriteI2C(numbertable[D0] & 0xff ); // preenche todos os bits
                WriteI2C(numbertable[D0] >> 8);    // qualquer byte
                // obs: acima como foram usados somente 2 bits, alguma "sujeira"
                // poderia ter ficado escrita no registrador, por isso a necessidade
                // de "preencher" os outros bits com & 0xff

                WriteI2C(numbertable[ D1 ] & 0xFF ); // preenche todos os bits
                WriteI2C(numbertable[ D1 ] >> 8);    // qualquer byte

                WriteI2C(0xFF); // escreve ":" sempre no segundo 0 de mostrar
                WriteI2C(0xFF >> 8);    // qualquer byte

                WriteI2C(numbertable[ D2 ] & 0xFF );// preenche todos os bits
                WriteI2C(numbertable[ D2 ] >> 8);    // qualquer byte

                WriteI2C(numbertable[ D3 ] & 0xFF );// preenche todos os bits
                WriteI2C(numbertable[ D3 ] >> 8);    // qualquer byte

                NotAckI2C();    // encerra envio
                __delay_us(16); // delay experimental
            StopI2C();
            minAnterior=D3; // variavel para proxima checagem e mudanca
        }

        pausa(1);   // utiliza TIMER0 para realizar contagem precisa de 1 seg
        
        
        if ( (contador % 2) == 0) piscaSeg(1);  // gera a piscada ":" par
        else piscaSeg(0); // ou impar " ", a cada mudanca de contador (seg)

        
        sprintf(msg,"\r\nSeg=%d, Cont=%d", segundo, contador );
            while(BusyUSART());
            putsUSART( msg );


            // rotina abaixo de calculo de desvio de segundos
            // ainda deve ser corrigida para o algoritmo correto

            if (contador >= 2 ) // cont >= 40+10
                { 
                    
                    dormir();

                    sprintf(msg,"\r\nSeg=%d, Cont=%d (volta do sleep)", segundo, contador );
                    while(BusyUSART());
                    putsUSART( msg );
                    contador=0;
            
                }

        contador++; // incrementa controle de contagem de segundos
    }
예제 #21
0
파일: main.c 프로젝트: coneggo/microchip
void main(void)
{
    // Configuracao das portas com LEDs
    TRISCbits.TRISC0=0;    // LED Amarelo para simples sinalizacao
    TRISCbits.TRISC1=0;    // LED Verde para simples sinalizacao
    TRISCbits.TRISC2=0;    // LED Vermelho para simples sinalizacao

    // Configuracao do pino TX da porta serial EUSART / para RS232
    TRISCbits.TRISC6=1;    // TX da EUSART
    // O programa ira informar na porta serial o status
    // e logs de funcionamento da coleta de dados I2C

    // agora a CHAMADA para configuracao GLOBAL da PIC
    configuracao_PIC();

    // Preparacao para configuracao do modulo MSSP I2C (com Errata aplicada)
    /* 17. Module: MSSP (ERRATA for PIC18F4550 and PIC18F2525, etc)
     * ================
     *
     *  It has been observed that following a Power-on Reset, I2C mode may not
     *  initialize properly by just configuring the SCL and SDA pins as either
     *  inputs or outputs. This has only been seen in a few unique system
     *  environments. A test of a statistically significant sample of pre-
     *  production systems, across the voltage and current range of the
     *  application's power supply, should indicate if a system is
     *  susceptible to this issue.
     *
     * Work around = Before configuring the module for I2C operation:
     * 1. Configure the SCL and SDA pins as outputs by clearing
     *  their corresponding TRIS bits.
     * 2. Force SCL and SDA low by clearing the corresponding LAT bits.
     * 3. While keeping the LAT bits clear, configure SCL and SDA as
     *  inputs by setting their TRIS bits.
     *
     * Once this is done, use the SSPCON1 and SSPCON2 registers to
     *  configure the proper I2C mode as before.
     */

    TRISCbits.TRISC3=0;    // SCL do I2C colocado como saida por causa de bug*
    TRISCbits.TRISC4=0;    // SDA do I2C colocado como saida por causa de bug*
    LATC3=0;            // bug* pede que zere-se o LAT das portas SCL e SDA
    LATC4=0;            // durante inicializacao do I2C para evitar flutuacoes
    // eletricas que ficariam nas portas antes de liga-las

    Delay10KTCYx(10);   // simples pausa para troca de estado na SDA e SCL

    TRISCbits.TRISC3=1;    // SCL do I2C, agora corretamente como saida
    TRISCbits.TRISC4=1;    // SDA do I2C, agora corretamente como saida
    // here ends "errata workaround"

    // entao a CHAMADA para diversas configuracoes referentes ao I2C (MSSP)
    configuracao_I2C();

    // e a inicializacao da porta serial EUSART
    configuracao_EUSART();

    while(BusyUSART());
    putrsUSART("\n\r_INIT SERIAL.\n\r");


    /*************************
     *
     * INICIO DO PROGRAMA
     *
     *************************/

    LED_AMAR=0;
    LED_VERM=1;
    LED_VERD=0;

    // Inicializacao do MSSP I2C

    CloseI2C(); // simplesmente fechando qualquer possibilidade de I2C anterior
    // comando nao necessario no boot da PIC
    //macro = #define CloseI2C()  SSPCON1 &=0xDF

    while(BusyUSART());
    putrsUSART("SSPAD=");
    putsUSART( itoa(NULL,SSPADD,10) );
    putrsUSART(" (hex=0x");
    putrsUSART( itoa(NULL,SSPADD,16) );
    putrsUSART("); Abrindo MSSP I2C (Master,Slew_off)\n\r");

    OpenI2C(MASTER,SLEW_OFF);   // configuracao implicita da SSPCON1 e SSPSTAT

    while (1)
    {
        testaColisao();
        getDS1307();



        //testaColisao();
        getTemperaturaHumidade();

        pausa(10);
    }
}