SoloCodigo
Bases de Datos => Oracle => Mensaje iniciado por: angelman7 en Viernes 3 de Agosto de 2007, 20:49
-
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);
-
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;
-
gracias por tu apoyo