ADA - estudiante pescando

 
Vista:

estudiante pescando

Publicado por Sergio (1 intervención) el 13/11/2005 16:06:24
Hola

Estoy realizando una practica que consta de de dos subprogramas, uno de los cuales es una funcion que no me sale correctamente.

Lo que me piden es una función booleana separada de practica2 llamada Es_Primo con un parámetro natural que devolverá True si el valor pasado como parámetro es un número primo y False en caso contrario.

Pero al entregarlo en el porgrama de Gestion Automatica de Practicas de mi asignatura,, que te lo compila y te lo ejecute me da los siguientes errores :

Fallo en la función Es_Primo.
Con 9.
Con 15.
Con 25.
Con 49.
Con 95.
Con 121.
Con 169.
Con 189.

9 sé, que no me lo dectecta como primo con los demas numeros me da un CONSTRAINT_ERROR ¿Cual es el fallo?

He aqui mi codigo de la función ES_Primo

separate(Practica2)
function Es_Primo(N: in Natural) return Boolean is --Comienzo de la funcion ES_Primo
begin
If N >= 2 then
for num in 2..n-1 loop --loop que busca los divisores de N

if n mod num = 0 then
return False;
else
return True;
end if;
end loop;
end if;
if N = 1 or N = 2 then -- 1 y 2 siempre son primos
return True;
else
return False;
end if;
end Es_Primo; --Fin de la funcion Es_Primo


Otra error que me devulve el programa de Gestion Automatica de Practicas es que "indentado es incorrecto" ¿a que se refiere? ¿a la tabulacion?

Gracias anticipdas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:estudiante pescando

Publicado por ruben (1 intervención) el 27/11/2005 13:06:05
if N = 1 or N = 2 then -- 1 y 2 siempre son primos
return True;
else
return False;

Al poner else false, estas negando cualquier resultado verdadero que te haya dado el loop que busca divisores de num

Yo estoy tambien con Ada y me esta matando....
un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estudiante pescando

Publicado por Kikikot (1 intervención) el 23/02/2006 16:21:12
Yo hubiese hecho:

separate(Practica2)

function Es_Primo(N: in Natural) return Boolean is

tope:integer:=N**(1/2) --Raiz cuadrada de N (para que haga menos cuentas)
num:integer:=2;

begin

while N mod num /= 0 and N <= tope loop
num:=num+1;
end loop;

if N mod num = 0 then
return true;
else
return false;
end if;

end Es_Primo;

Es una opinión.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar