// Este ejercicio muestra el uso de break en bucles for. Tb. muestra // la utilización de bucles for() infinitos (función un_aleatorio()) #include<stdio.h> #include<stdlib.h> // La función rand() se define en stdlib.h. // La función rand() proporciona un entero entre 0 y RAND_MAX, que es 32767 en stdlib.h // En CW, ponen 32767 // En TurboC, ponen 0x7FFF #include<time.h> // Esto lo voy a utilizar para generar una semilla verdaderamente aleatoria. // Para ser exactos, empleo la función clock(), que me indica el tiempo // transcurrido desde el arranque el sistema. #include<math.h> // Esto lo necesitamos para disponer de logaritmos, y calcular // el número máximo de intentos. La función ceil() proporciona, // por cierto, el menor entero que es mayor que su argumento. // La lógica de la búsqueda binaria tiene aquí su aplicación #define maximo 512 int un_aleatorio(int); void main(void) { int numero_buscado = un_aleatorio(maximo),numero_dado = 0; int numero_pregunta; printf("M A S T E R M I N D\n\n"); printf("He pensado un numero entre 1 y %d.¿Sabrás cual es en %d intentos?\n\n", maximo,(int)(ceil(log(maximo)/log(2)))); for(numero_pregunta=1; numero_pregunta<=10;numero_pregunta++) { printf("Intento número %d : ",numero_pregunta); scanf("%d",&numero_dado); // Si el pringaíllo lo ha encontrado, salimos del bucle! if (numero_dado == numero_buscado) break; // En caso contrario, damos la pista correspondiente y seguimos if (numero_dado < numero_buscado) printf("\nNo, %d es menor que el número que he pensado.\n", numero_dado); else printf("\nNo, %d es mayor que el número que he pensado.\n", numero_dado); } // Aquí acaba el bucle for if (numero_dado != numero_buscado) printf("\n\nJa! Había pensado el %d\n\n", numero_buscado); else printf("\n\nEnhorabuena! Era el %d!\n\n>Fin<\n\n",numero_buscado); } // Esta función se puede aprovechar para otras cosas similares. // Ojo: no se debe utilizar para cálculo numérico, porque produce // un reticulado entero. int un_aleatorio(int max) { int resultado; srand(clock()); for(;;) { resultado = rand(); if ((resultado>0) && (resultado<=max)) break; } return resultado; }