• Sábado 27 de Abril de 2024, 18:49

Autor Tema:  Numeros  (Leído 2009 veces)

angelman7

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Numeros
« en: Viernes 3 de Agosto de 2007, 20:49 »
0
hola tengo un problema con este programa, la idea es que lea los numeros primos y que diga cuales son primos y cuales no, pero lo cuando identifica funciona bien, despues del 8 comienza a decir que es primo y al mismo tiempo dice que no, entonces, si pueden ayudarme a corregir este error gracias:


codigo:

create or replace procedure Gen_Primos( N number )as

raiz number(5);
modulo number;
acumula number(5);

begin

raiz := sqrt(N);
acumula := 0;

for contador in 2..raiz loop
modulo := mod(N,contador);
if( modulo != 0 )then

   DBMS_OUTPUT.PUT_LINE(N||' primo '||' modulo '|| modulo || ' contador '|| contador || ' raiz ' || raiz  );
else
   acumula := acumula + 1;
   DBMS_OUTPUT.PUT_LINE(N||' no primo '||' modulo '|| modulo || ' contador '|| contador || ' raiz ' || raiz || ' acumula = ' || acumula   );
end if;


end loop;
end;
/


--execute Gen_Primos(1);
--execute Gen_Primos(2);
--execute Gen_Primos(3);
--execute Gen_Primos(4);
execute Gen_Primos(5);
execute Gen_Primos(6);
execute Gen_Primos(7);
execute Gen_Primos(8);
execute Gen_Primos(9);
execute Gen_Primos(10);
execute Gen_Primos(11);
--execute Gen_Primos(13);
--execute Gen_Primos(17);
--execute Gen_Primos(19);
--execute Gen_Primos(23);

bogotanoazul

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Numeros
« Respuesta #1 en: Sábado 4 de Agosto de 2007, 00:29 »
0
pruebalo asi (tenias problemas con el algoritmo el ciclo tiene que empezar en 1):


CREATE OR REPLACE PROCEDURE GEN_PRIMOS(N NUMBER) AS

  RAIZ    NUMBER(5);
  MODULO  NUMBER;
  ACUMULA NUMBER(5);

BEGIN

  RAIZ    := SQRT(N);
  ACUMULA := 0;

  FOR CONTADOR IN 1 .. RAIZ LOOP
    MODULO := MOD(N, CONTADOR);
    IF (MODULO = 0) THEN
       ACUMULA := ACUMULA + 1;
    END IF;  
    END LOOP;
       
    IF ACUMULA < 2 THEN  
       DBMS_OUTPUT.PUT_LINE(N || ' primo ' );
    ELSE                      
       DBMS_OUTPUT.PUT_LINE(N || ' no primo ');
    END IF;
 
 
END;
Fabio Guzman M.
     Ing. Sistemas
Bogotá Distrito Capital

angelman7

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Numeros
« Respuesta #2 en: Sábado 4 de Agosto de 2007, 05:55 »
0
gracias por tu apoyo