Título: Calculo de números primos Publicado por: jamatbar en 12 Noviembre 2011, 14:26 pm Me han dado el siguiente código de programa en c, es un programa que pide un numero por teclado e indica si el número es o no primo, comprobando todos los posibles divisores:
Código
He probado el código y es un poco malo, si el número es primo directamente se sale del programa, y si el número no lo es, te lo repite por cada divisor que tenga, y me han pedido que haga que solo se imprima un mensaje indicando si el número es primo o no al final del bucle. Para esto, nos dicen que utilicemos una variable de control, cuando encuentre un divisor se active dicha variable. Y al final del bucle se mostrará el mensaje adecuado segun el valor de la variable de control. He pensado que se tendría que usar la variable de control flag, pero no sé como implementarla muy bien, ¿alguien podría aclararmelo?, yo lo he intentado poniendo esto: Código
Pero aun así, al probarlo me sigue dando error, ¿alguna solución? Saludos Título: Re: Calculo de números primos Publicado por: DickGumshoe en 12 Noviembre 2011, 14:44 pm No sé si te servirá, pero yo hice este programa hace tiempo (aunque en él no uso "for"):
Código
Saludos. Título: Re: Calculo de números primos Publicado por: jamatbar en 12 Noviembre 2011, 14:52 pm Gracias por la ayuda, aunque me piden que use una variable de control (flag), por eso no puedo ponerlo como tu lo tienes.
Saludos! Título: Re: Calculo de números primos Publicado por: $Edu$ en 12 Noviembre 2011, 15:02 pm Ademas si usas el metodo de DickgumShoe y lo probarias con un numero muy grande tendrias que hacer miles de ifs mas xD para ahorrar esos ifs es que se usan los bucles DickgumShoe.
Y lo de la variable flag, le puedes llamar como quieras, solo sera una variable auxiliar pero veo que la declaras y le asignas valores pero nunca verificas el valor para hacer algo.. cosa que esta al pedo sino xD Título: Re: Calculo de números primos Publicado por: jamatbar en 12 Noviembre 2011, 15:19 pm Ademas si usas el metodo de DickgumShoe y lo probarias con un numero muy grande tendrias que hacer miles de ifs mas xD para ahorrar esos ifs es que se usan los bucles DickgumShoe. Y lo de la variable flag, le puedes llamar como quieras, solo sera una variable auxiliar pero veo que la declaras y le asignas valores pero nunca verificas el valor para hacer algo.. cosa que esta al pedo sino xD EL problema es que no sé muy bien como usarla XD Título: Re: Calculo de números primos Publicado por: $Edu$ en 12 Noviembre 2011, 15:44 pm Yo siempre recomiendo leer tranquilo un buen manual del lenguaje de programacion que quieren aprender, aprenderlo bien de bien, usar bucles bien de bien, saber muchas cosas y luego ahi si te vendra a la mente muchas posibles soluciones
Título: Re: Calculo de números primos Publicado por: тαптяα en 12 Noviembre 2011, 15:55 pm Aquí por si lo quereis primos, os dejo el codigo locos que escribe los primeros numeros primos, echadle un ojo.
Código
Título: Re: Calculo de números primos Publicado por: $Edu$ en 12 Noviembre 2011, 16:05 pm Ahi tenes tu variable flag jamatbar, es la que el uso como "primo" que tambien podes declararla como booleana para que le asignes True or False
Título: Re: Calculo de números primos Publicado por: CobraCY en 12 Noviembre 2011, 16:10 pm Bueno soy nuevo y se me dio echarle una mano.
Puedes hacerlo con un while o con un for, para el caso recomiendo el for, también puedes usar un flag int o bool, me gusta más el bool, pero bueno te dejo un ejemplo con el bool y otro con el int y también. Código Este usa el flag en Int Ahora uno que usa el Flag en bool Código Este usa el flag en Bool, como ves solo cambian, mmm en realidad no cambia nada xD. :) Saludos. Título: Re: Calculo de números primos Publicado por: jamatbar en 12 Noviembre 2011, 16:40 pm Vale, leyendo más o menos lo que habeís puesto he hecho lo siguiente:
Código
Si meto un número primo me dice que es primo (sólo con una sentencia),¿que puedo hacer para poner una función si el numero que meto es no primo? Además, me he dado cuenta de que si meto un 1,2 o 3 el programa sale directamente, ¿por qué? Saludos Título: Re: Calculo de números primos Publicado por: Ferno en 12 Noviembre 2011, 17:09 pm Si ponés un 1 o un 2 en tu programa, no entra ni siquiera una vez en el for, porque no se cumple la condición (i < valor), ya que i comienza en el número 2.
Sin embargo, no está bien el algoritmo. Ese bucle no hace nada. ¿Como sabés si es primo o no ahí? Primero pensá el problema matemáticamente, luego pasalo a la máquina tal cual lo pienses. En este caso, un número es primo si y solo si es divisible sólo por si mismo y por el 1. Entonces, para pasarlo a máquina, tendrás que ver si el número es divisible por algún número entre el 1 y el mismo. Para eso se usa el bucle, cuando encuentres algún número que divida a tu valor, entonces no será primo (ahí entra el flag en funcionamiento), sino, es primo. Título: Re: Calculo de números primos Publicado por: jamatbar en 12 Noviembre 2011, 17:18 pm Perdon, me comí un par de líneas de código, ya lo he editado
Saludos Título: Re: Calculo de números primos Publicado por: rir3760 en 12 Noviembre 2011, 17:33 pm En el caso de la aproximacion de fuerza bruta esta se puede mejorar un poco reduciendo el rango y utilizando al contador del bucle como bandera. De esta forma:
Código
Un saludo Título: Re: Calculo de números primos Publicado por: jamatbar en 12 Noviembre 2011, 17:48 pm Ya he conseguido hacerlo, muchas gracias a todos por vuestra ayuda.
Saludos! Título: Re: Calculo de números primos Publicado por: jamatbar en 12 Noviembre 2011, 18:03 pm A ver, el programa me ha quedado así:
Código
Ahora me piden que: Para mejorar la eficiencia del programa, el bucle debe finalizar una vez encontrado el primer divisor. Para ello deberá hacer uso de la variable de control usada en el apartado anterior. No lo entiendo, ¿se supone que el programa ya termina cuando encuentra un divisor no? Saludos Título: Re: Calculo de números primos Publicado por: Ferno en 12 Noviembre 2011, 18:14 pm Te recomiendo enormemente ponerle respectivas llaves a todas las instrucciones, más allá de que lleven una sola sentencia o no.
Ahora bien, no, ahí el programa sigue hasta terminar con el bucle for. Para que termine cuando el flag lo indique o cuando llegue a terminar todas las repeticiones deberás usar otra estructura repetitiva (while o do-while) con 2 condiciones: Que el flag siga siendo falso y hasta que llegue al valor en cuestión. Título: Re: Calculo de números primos Publicado por: CobraCY en 12 Noviembre 2011, 18:15 pm ya mira, cuando haces el FOR, dices: "Declara una variable 'i' que inicie en dos(2) y que se aumente en 1(i++) mientras que sea menor a el valor de 'n'.".
Con esto haces que tu variable 'i' haga el recorrido desde el numero 2 hasta n. Si vez bien el código que te puse usé la siguiente linea para el FOR: Código
Con esto digo: "Declara una variable 'i' que inicie en dos(2) y que se aumente en 1(i++) mientras que mi variable 'i' sea menor que 'n' y además que mi variable 'flag' sea sea exactamente igual a cero(0)". Si te das cuenta en tu código haces un 'if' donde preguntas si el residuo de tu valor entre el valor que lleva la variable 'i' es cero(0), entonces cambie tu flag a 0, ese valor puedes utilizarlo en el for para que si 'flag' es distinto(!=) de cero(0) entonces continúe con la ejecución del for. Saludos. Título: Re: Calculo de números primos Publicado por: RyogiShiki en 12 Noviembre 2011, 18:26 pm NO he visto las respuestas, pero dejo este video que ayuda mucho:
http://www.youtube.com/watch?feature=player_embedded&v=FU1hi6cSpjQ Título: Re: Calculo de números primos Publicado por: satu en 12 Noviembre 2011, 20:24 pm Hola
Además el bucle se podría acortar hasta la mitad: Código
Saludos Título: Re: Calculo de números primos Publicado por: CobraCY en 12 Noviembre 2011, 21:13 pm te hice un video rápido para ver si te puedo ayudar.
t3zY9IXOxzU Saludos. Título: Re: Calculo de números primos Publicado por: s00rk en 12 Noviembre 2011, 23:59 pm No se puede utilizar dentro del if el break; y ya ? xD
Terminara el for y continuara :silbar: Título: Re: Calculo de números primos Publicado por: CobraCY en 13 Noviembre 2011, 00:22 am si, pero el está pidieron que utilicemos un flag. Así que hay que cumplir con sus exigencias xD.
Saludos. Título: Re: Calculo de números primos Publicado por: jamatbar en 13 Noviembre 2011, 22:47 pm Gracias a todos por vuestras ayudas, y hombre, no son exigencias, es que básicamente me lo piden con eso XD
Título: Re: Calculo de números primos Publicado por: jamatbar en 13 Noviembre 2011, 23:14 pm Mi código ha quedado así:
Código
Pero ahora me piden que una vez comprobado que el dos no es divisor, probar sólo con los números impares. EDITO poniendo lo que he intentado: Código
¿Con eso bastaría no? Saludos Título: Re: Calculo de números primos Publicado por: rir3760 en 14 Noviembre 2011, 02:17 am No porque si revisas el bucle te daras cuenta que solo estas dividiendo entre los numeros pares mientras que el enunciado te pide revisar la serie 2, 3, 5, 7, ... N.
Un problema con el (debido a esa serie) es que debes manejar el caso especial donde el numero es par, si es dos es primo, cualquier otro no lo es. Con los cambios: Código
Un saludo Título: Re: Calculo de números primos Publicado por: xBurninGx en 14 Noviembre 2011, 03:09 am Hola,
si nos ponemos a hacer código, cuando mejor sea mejor, no? para saber si es un número es primo, no hay que llegar a dividirle entre todos los numeros anteriores a ese número para saberlo, por una demostración algebraica, que no me voy a para a explicar, con probar hasta la raíz cuadrada de ese mismo número es suficiente (raíz cuadrada inclusive, así que hace falta sustituir el menor por un menor o igual en el for). ahora, para saber la raíz cuadrada de un número hace falta importar la biblioteca math.h, además de tener en cuenta al compilar, poner la opción "-lm", con lo que un ejemplo de compilación puede ser: gcc -lm -o prueba prueba.c y el programa quedaría de la siguiente manera: Código
Saludos Título: Re: Calculo de números primos Publicado por: do-while en 14 Noviembre 2011, 09:06 am ¡Buenas!
Puestos a liarla: Código
XD ¡Saludos! Título: Re: Calculo de números primos Publicado por: rir3760 en 14 Noviembre 2011, 23:33 pm Hay que tener cuidado al utilizar el valor de retorno de scanf:
Código En caso de error o fin de archivo la funcion retorna EOF, eso causaria la salida del bucle con el valor de la variable "numero" como (todavia) "no definido" o "basura". Un saludo |