lunes, 21 de noviembre de 2011

Ejercicio 25 (procedimientos y funciones)

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

3 comentarios:

  1. 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

    ResponderEliminar
    Respuestas
    1. Tienes razón, solo se comprueban los casos en los que manejamos numeros pequeños, entonces el algoritmo sería algo como esto:

      Variables:

      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

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | GreenGeeks Review