Plantee e implemente un subprograma en PASCAL que indique si un número entero es o no un número primo. Además del subprograma, implemente un programa principal apropiado para probar su funcionamiento.
PROGRAM numeros_primos(input,output);
(*Programa que incluya un subprograma que diga si un numero es primo o no*)
VAR
numero:integer;
(**********************************************************************************)
PROCEDURE primo;
BEGIN
write('Escriba un numero entero y positivo: ');
REPEAT
read(numero);
IF ((numero=2) OR (numero=3)) THEN writeln('El numero ',numero,' es primo.') ELSE
IF ((numero MOD numero=0) AND (numero MOD 1=0) AND (numero MOD 2 <>0) AND (numero MOD 3 <>0)) THEN writeln('El numero ',numero,' es primo.') ELSE writeln('El numero ',numero,' no es primo.');
UNTIL numero>0;
END;
(***********************************************************************************)
BEGIN
primo;
read(numero);
END.
Ejemplo de ejecución
Anterior Siguiente
Suscribirse a:
Enviar comentarios (Atom)
el programa no esta bien si introduces 125 te pone que es primo.... de esa forma solo consigues saber si son primos numeros muy pequeños. un saludo
ResponderEliminarTienes razón, solo se comprueban los casos en los que manejamos numeros pequeños, entonces el algoritmo sería algo como esto:
EliminarVariables:
lista : Lista de todos los números primos.
n: número que queremos comprobar si es primo o no.
primo: Número primo que comprobaremos si divide a n.
limite: sqrt(n), sólo se comprueban los números primos menores o iguales a este número.
es_primo: Variable booleana de control. Indica si un número es primo o no. Se inicializa a VERDADERO.
Programa:
1. Inicializamos n {Nota: Si sólo queremos comprobar ese número, no puede ser mayor que el mayor primo almacenado al cuadrado, si queremos hacer una lista de primos no puede ser mayor que el último primo almacenado}
2. Mientras n < máximo {el número más grande con el que puede operar el lenguaje} hacer
1. {Inicialización de variables:} es_primo=VERDADERO limite=sqrt(n) primo=primer_primo(lista)
2. Mientras (es_primo=VERDADERO) y (primo<=limite) y (lista no ha acabado) hacer
1. Si (entero módulo primo) = 0
2. entonces es_primo=FALSO
3. Sino: primo=siguiente_primo(primo, lista)
3. Fin Mientras
4. Si es_primo=verdadero
5. entonces almacenar_primo(primo, lista)
6. n=n+2 {recordemos que solo comprobamos los números impares}
3. Fin Mientras
Este comentario ha sido eliminado por el autor.
ResponderEliminar