Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Numero Primo PL SQL

Estas en el tema de Numero Primo PL SQL en el foro de Oracle en Foros del Web. Hola tengo un pequeño problema tengo un examen final dentro de 3 dias y aun no se como sacar un numero primo, lo que quiero ...
  #1 (permalink)  
Antiguo 22/11/2008, 02:29
 
Fecha de Ingreso: noviembre-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Sonrisa Numero Primo PL SQL

Hola tengo un pequeño problema tengo un examen final dentro de 3 dias y aun no se como sacar un numero primo, lo que quiero hacer es crear una funcion y que reciba un parametro ( n) entonces cuando use esta funcion quiero que me RETORNE si el parametro "n" es o no primo. Aqui esta lo que hice ojala me den una mano se los agradezco.

CREATE OR REPLACE FUNCTION PRIMO(N NUMBER)
RETURN VARCHAR2
IS
VAR VARCHAR2(20);
BEGIN
FOR I IN 2..N-1 LOOP
IF MOD(N,I)=0 THEN
VAR:='NO ES PRIMO';
ELSE
VAR:= 'ES PRIMO';
END IF;
END LOOP;
RETURN (VAR);
END;
/
  #2 (permalink)  
Antiguo 22/11/2008, 09:52
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Respuesta: Numero Primo PL SQL

Encontré este código por internet, no lo tengo probado, pero parece estar bien.

Código:
FUNCTION is_prime (
number_in IN INTEGER
)
RETURN BOOLEAN
IS
c_limit INTEGER := ABS ( number_in );
retval BOOLEAN DEFAULT TRUE;
divisor INTEGER := 2;
BEGIN
WHILE ( divisor < c_limit AND retval )
LOOP
retval := MOD ( number_in, divisor ) <> 0;
divisor := divisor + 1;
END LOOP;

RETURN retval;
END is_prime;
Saludos
  #3 (permalink)  
Antiguo 23/11/2008, 00:59
 
Fecha de Ingreso: noviembre-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Numero Primo PL SQL

bueno despues de largo rato halle la solucion :
aqui está para los que necesiten

CREATE OR REPLACE FUNCTION PRIMO(N NUMBER)
RETURN VARCHAR2 AS VAR VARCHAR2(20);
BEGIN
FOR I IN 2..N-1 LOOP
IF MOD(N,I)=0 THEN VAR:='NO ES PRIMO';
GOTO paso1;
ELSE VAR:='ES PRIMO';
END IF;
END LOOP;
<<paso1>>
RETURN VAR;
END;
/
  #4 (permalink)  
Antiguo 23/11/2008, 05:19
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Numero Primo PL SQL

Hola elcalinperu,

recordando algunas buenas prácticas de programación te recomiendo sustituir el 'GOTO paso1;' por 'EXIT;'.

Por otra parte, teniendo en cuenta criterios de divisibilidad, el algoritmo sería mucho más eficiente si en lugar de 'FOR I IN 2..N-1 LOOP' pusieras 'FOR I IN 2..FLOOR(SQRT(N)) LOOP'.

Un saludo.
  #5 (permalink)  
Antiguo 23/11/2008, 07:00
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Respuesta: Numero Primo PL SQL

Cita:
Iniciado por MutenRo Ver Mensaje
Hola elcalinperu,

recordando algunas buenas prácticas de programación te recomiendo sustituir el 'GOTO paso1;' por 'EXIT;'.
Totalmente de acuerdo. Yo a los programadores de mi equipo les tengo totalmente prohibido usar etiquetas.
  #6 (permalink)  
Antiguo 23/11/2008, 13:47
 
Fecha de Ingreso: noviembre-2008
Mensajes: 4
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Numero Primo PL SQL

mm ya veo muchas gracias si me olvide de ponerle que acepte numeros negativos poniendo en el for un ABS(n)-1 y claro usando el SQRT seria un mejor algoritmo gracias por su ayuda
no sabia que instruccion darle porque en java necesito de BREAK asi que ya que pl sql acepta la programacion estructurada GOTO no dude en ponerlo, entonces EXIT funciona como BREAK eso no sabia bueno gracias otra vez :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:26.