ADA - Exception

 
Vista:

Exception

Publicado por Nuria (22 intervenciones) el 26/05/2001 18:10:37
Hola de nuevo,

Alguien me puede decir si hay algun motivo por el que no puede declarar una excepcion en un package?
Me da muchos errores.

Muchas gracias

Nuria Ruiz
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:Exception

Publicado por Fernand0 (4 intervenciones) el 29/05/2001 17:06:08
Sin más detales es muy difícil saber lo que pasa ...
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:Exception

Publicado por Nuria (22 intervenciones) el 30/05/2001 16:27:22
Hola Fernand0

Veras, estoy haciendo un paquete para hacer cálculo de matrices y en una de las funciones en las que se calcula el determinante de una matriz quiero evitar que si es cero aparezca un error, sino que a través de una excepción de la solución cero.
Este es parte del package:

with ada.exceptions;
Package Body Matrices Is
...
Function Determinante(A:In Matriz) Return Integer Is
I,J,L,Suma,Det:Integer:=0;
Begin
For I In 1..3 Loop
For J In 1..3 Loop
L:=Minimo(I,J);
Suma:=A(I,J);
For K In 1..L-1 Loop
Suma:=Suma-A(I,K)*A(K,J);
End Loop;
If I>J Then
Suma:=Suma/A(J,J);
End If;
End Loop;
End Loop;
Det:=1;
For I In 1..3 Loop
Det:=Det*A(I,I);
End Loop;
return det;
End Determinante;
...
End Matrices;

He intentado poner la excepción dentro de la función determinante así:
..
return det;
exception
when constraint_error => put("0");
end determinante;

Pero entonces salta un program error, y poner la excepción fuera tampoco puedo porque no tiene un cuerpo y la excepción la tengo que poner después del begin.
¿Que hago mal?

Muchas gracias
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:Exception

Publicado por Fernand0 (10 intervenciones) el 30/05/2001 19:15:20
A ver si entiendo lo que te pasa ....
Si la pones dentro de la función, la excepción es capturada correctamente, sale el 0 en pantalla y luego sale un program_error, es eso correcto?
El problema está claro: la función produce el error, esta es capturada, se escribe el cero, pero no se hace ningún tipo de recuperación con lo que, aunque la función termina 'bien', el programa no sabe como seguir ....

Lo normal en este caso sería que la función a su vez elevase una excepción y que fuera el programa el que la capturara, o bien que la función la dejase pasar y fuera el programa el que capturara esa excepción.
Si quisieras capturar la excepción el el paquete, siempre es posible poner un begin y detrás el código correspondiente a la excepción y su tratamiento.

Vaya lío, espero que te sirva de algo ....
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:Exception

Publicado por Nuria (22 intervenciones) el 31/05/2001 15:15:00
Hola

Algo he pillado... No sabía que se podía poner un begin después de la excepción.
Voy a probar suerte.
De todas formas, se puede poner una excepción general para el paquete? Porque al no tener una etiqueta de begin no me deja declarar ninguna.

Gracias por todo
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:Exception

Publicado por fernand0 (2 intervenciones) el 01/06/2001 09:06:59
No dije que se pueda poner un begin dentro de la excepción (que se puede, creo) sino que un paquete siempre puede tener su begin y algo de código de, por ejemplo, inicialización de cosas referentes al paquete. Esto es:

package body ejemplo is
procedure1 (...) is
begin

end procedure1;

.....

begin

-- aquí podría ir el tratamiento de la excepción
end ejemplo;
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:Exception

Publicado por Nuria (22 intervenciones) el 01/06/2001 14:35:51
Si esto ya lo comprobé el otro día, pero entre el begin y la excepción tengo que poner algo de codigo, había pensado poner algún put espacio en blanco o algo así, pero me parece una chapuzada. Me imagino que debe haber otra manera de poner una excepción general, o igual estoy haciendo algo mal, a saber.
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:Exception

Publicado por Fernand0 (4 intervenciones) el 01/06/2001 20:21:53
Siempre se puede poner la instrucción null que no hace nada y sirve para casos así
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:Exception

Publicado por Nuria (22 intervenciones) el 01/06/2001 20:54:51
Tienes razón, no conocía esta instrucción.
La semana que viene tengo un examen y me parece que voy un poco pez :).

Gracias
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