///////////////////////////////// SERIE DI FIBONACCI /////////////////////////////////// ////////////////////////////// 3 SOLUCIONES DIFERENTES /////////////////////////////////// #include #include /* Usando tres variables locales*/ void fibonacci ( int limite ) { int fibi_2 = 0; int fibi_1 = 1; int fibi; if (limite<1) return; printf("1"); fibi = fibi_1 + fibi_2; while ( fibi <= limite ) { printf(" %d", fibi); fibi_2 = fibi_1; fibi_1 = fibi; fibi = fibi_1 + fibi_2; } printf("\n"); } /* Usando dos variables locales y un do-while*/ void fibonacci2 ( int limite ) { int fibi_2 = 0; int fibi = 1; if (limite<1) return; printf("1"); do { printf(" %d", fibi); fibi_2 = fibi - fibi_2; fibi = fibi + fibi_2; } while ( fibi <= limite ); printf("\n"); } /* Usando dos variables locales y un for. */ void fibonacci3 ( int limite ) { int fibi_2 = 0; int fibi = 1; if (limite<1) return; printf("1"); for ( fibi_2 = 0, fibi = 1; fibi <= limite ; fibi += fibi_2, fibi_2 = fibi - fibi_2) printf(" %d", fibi); printf("\n"); } void main ( ) { int limite; printf("Dame el limite\n"); scanf("%d%*c",&limite); fibonacci(limite); fibonacci2(limite); fibonacci3(limite); } ///////////////////////////////// GATO y RATON /////////////////////////////////// #include #include #include /***************************************************************************** ** Definicion de un tipo de datos nuevo, Tganador. ** En realidad Tganador es como si fuera un entero que ** puede tomar los valores GATO, RATON. ** El nuevo tipo es Tganador es un entero enumerado (enum significa enumera) y ** se debe enumerar los valores que puede tomar. A los valores se les puede ** dar nombre como GATO y RATON. Estos nombres no se podran usar para nada ** mas, ni variables ni funciones. Ademas, como GATO aparece el primero de ** la lista toma el valor entero 0. El valor RATON toma el valor 1. **/ typedef enum {GATO, RATON} Tganador; /* Declaración de funciones. */ Tganador juego( void ); void mensaje_mov(char quien[], int dado, int posicion_final); int tira_dado( ); /* Definición de constantes. */ #define POS_INI_GATO 29 /* Posicion inicial gato */ #define POS_INI_RATON 0 /* Posicion inicial raton */ #define CASILLAS_TABLERO 60 /* Numero de casillas tablero */ void main ( ) { Tganador quien; printf("Empieza el Juego!!!\n"); quien = juego(); switch (quien) { case GATO: printf("Gato: he ganado!!!\n"); break; case RATON: printf("Ratón: he ganado!!!\n"); break; default: printf("Qué paso?\n"); } } /**************************************************************************** ** Función: juego ** ***************************************************************************** ** Descripcion: ** La funcion juego desarrolla el juego del gato y del raton hasta que uno ** de los dos gana. Cuando uno de los dos gana se devolverá quien gano. ** ***************************************************************************** ** ** Parámetros de entrada: ** Ninguno. ** ***************************************************************************** ** ** Parámetros de salida: ** Entero enumerado Tganador. ** Valdrá GATO si el ganador fue el gato. ** Valdrá RATON si el ganador fue el ratón. ** *****************************************************************************/ Tganador juego( void ) /* Esta es la definición de la función. */ { int gato = POS_INI_GATO; int raton = POS_INI_RATON; int dado; srand(time(0)); do { dado = tira_dado(); raton = (raton + dado)% CASILLAS_TABLERO; mensaje_mov("Raton", dado, raton); if ( gato == raton ) return RATON; dado = tira_dado(); gato = ((gato - 2*dado)+ CASILLAS_TABLERO) % CASILLAS_TABLERO; mensaje_mov("Gato", dado, gato); if ( gato == raton ) return GATO; } while ( 1 ); /* Bucle infinito!!! */ } /**************************************************************************** ** Función: mensaje_mov ** ***************************************************************************** ** Descripcion: ** Escribe por pantalla que el nombre del jugador que se guarda en el ** vector de caracteres quien ha sacado el valor guardado en dado y ** se mueve a la casilla con valor posicion_final. ** ** ***************************************************************************** ** ** Parámetros de entrada/salida: (aunque no lo vamos a modificar dentro) ** Vector de caracteres quien. ** ** Parámetros de entrada: ** el entero dado, que indica que sacó el jugador con nombre quien. ** el entero posición final, que indica a qué casilla va el jugador ** quien. ** ***************************************************************************** ** ** Parámetros de salida: ** Nada. ** *****************************************************************************/ void mensaje_mov(char quien[], int dado, int posicion_final) { printf("%s: He sacado un %d. Voy a la casilla %d\n", quien, dado, posicion_final); } int tira_dado () { return (rand()%6)+1; }