Enunciado
Leer un valor inicial y un valor final y validar que el inicial sea menor que el final. Mostrar todos los números primos que se encuentren en el rango dado por ambos valores.Solución
Introducción
Este ejercicio es uno de los ejemplos más comunes que se plantean para la utilización de estructuras de control, ya que implica estructuras condicionales y repetitivas.Lo primero que se requiere para resolverlo es tener una definición clara de lo que es un número primo: "En matemáticas, un número primo es un número natural mayor que 1 que tiene únicamente dos divisores distintos: él mismo y el 1." (https://es.wikipedia.org/wiki/Número_primo)
Es decir que si el número que se está evaluando es divisible entre cualquier otro número que no sea 1 o sí mismo, dicho número no es primo.
Paso 1: Verificar si un número es primo
Cuando se comienza a programar y se tiene un problema en que se debe ejecutar una acción n veces es recomendable definir cómo se resuelve una vez y luego adaptar esa solución a las n veces (dentro de un bucle). Así pues, tenemos que iniciar encontrando la forma de verificar si un número es o no primo.
Tomaremos como ejemplo el 7. Si realizáramos manualmente el procedimiento de verificación, iniciaríamos dividiendo el 7 entre 2 (el primer entero después del 1), y verificando si alguno de los números anteriores a él lo divide de manera exacta (residuo 0).
7 / 2 = 3 (residuo 1)
7 / 3 = 2 (residuo 1)
7 / 4 = 1 (residuo 3)
7 / 5 = 1 (residuo 2)
7 / 6 = 1 (residuo 1)
De esta forma se demuestra que 7 no es divisible sino solamente entre sí mismo y el 1.
En un bucle podríamos definir entonces:
Booleano bandera
Desde i=2 hasta i>7, 1
bandera = verdadero
Si 7 % i == 0 entonces
bandera = falso
Fin_si
Si bandera == verdadero
Imprimir “Es Primo”
Fin_si
Fin_desde
Nótese la utilización de una variable booleana bandera que servirá para indicar si el número es primo o no, ya que el divisor de un número, en caso de que exista, puede encontrarse al principio, al final o en el medio del rango de números menores del mismo. Este seudo-código puede optimizarse, pero para efectos de explicación lo dejaremos así.
Paso 2: Validar los valores límites
Iniciaremos el algoritmo, puesto que, en comparación al proceso anterior, un condicional no representa un obstáculo.
Inicio
Entero ini=0, fin=0, i=0, j=0
Booleano bandera
Leer(ini)
Leer(fin)
Si ini > fin entonces
Imprimir “Error! El valor inicial debe ser menor al final”
Sino
Desde i=ini hasta i==fin, 1
Desde j=2 hasta j>i, 1
bandera = verdadero
Si i % j == 0 entonces
bandera = falso
Fin_si
Si i <> 1 ^ bandera == verdadero
Imprimir i + “, ”
Fin_si
Fin_desde
Fin_desde
Fin_si
Fin
Código
Si bien, una habilidad que todo programador debe desarrollar es la de "correr" su propio código, mentalmente o en papel, no está de más ver la ejecución del programa en el lenguaje que estamos aprendiendo: C#.
Este pequeño programa puede mejorarse en cuanto a validaciones y optimizarse para que sea más eficiente, así que las sugerencias de mejora son bienvenidas.
ESta bien amigo
ResponderBorrar