Beruflich Dokumente
Kultur Dokumente
Ejercicio 1
Objetivo: Practicar con literales de array Descripcin: Suponer que se han realizado las siguientes declaraciones:
type Dia_Semana is (Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo); type Num_Semana is range 1..53; type Festivos is array(Dia_Semana,Num_Semana) of Boolean; Festivos_2010 : Festivos;
Escribir la instruccin necesaria para dar el siguiente valor inicial al array Festivos_2010, usando un literal de array: Todos los sbados y domingos a true; el martes de la semana 14 y el jueves de la 28 a true: todo lo dems a false.
Ejercicio 2
Objetivo: Practicar con el recorrido de arrays. Descripcin: Dado el siguiente array que contiene los datos personales de unas personas, hacer un fragmento de programa que muestre por la pantalla los DNIs y los nombres de todas ellas. Suponer que del nombre se usan slo los caracteres del 1 a N_Nombre
type Persona is record Nombre : String(1..30); N_Nombre : Integer range 0..30; DNI : String(1..9); end record
Ejercicio 3
Objetivo: Practicar con las reglas de visibilidad y el paso de parmetros Descripcin: El siguiente procedimiento usa variables globales para comunicarse con sus subprogramas internos. Reescribirlo para que no use variables globales. Para ello, se deben declarar las variables en un lugar inaccesible a los subprogramas internos, y pasarles a stos los datos por parmetros. Pensar cuidadosamente si los parmetros deben ser de entrada, salida, o entrada/salida.
with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO; procedure Muestra is A,B : Integer; X1, S : Integer; procedure Dist is begin X1:=A*A+B*B; end Dist; procedure Suma is begin S:=A+B+X1; end Suma; begin Put("A:"); Get(A); Skip_Line; Put("B:"); Get(B); Skip_Line; Dist; Suma; Put_Line("X1="&Integer'Image(X1)); Put_Line("S ="&Integer'Image(S)); end Muestra;
Ejercicio 4
Objetivo: Practicar con bsquedas en arrays Descripcin: Escribir la funcin cuya cabecera se muestra abajo que busque en el array temp si hay alguna casilla errnea que no cumpla min<=media<=max. La funcin debe retornar true si se encuentra la casilla errnea sin buscar ms. En caso de que no haya ninguna casilla errnea retornar false. Indicar tambin un ejemplo de cmo llamar a esa funcin almacenando el valor retornado en una variable booleana.
type Mes is (Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre); type Temperatura is record Min, Media, Max : Float; end record; type Lista_Temperaturas is array(Mes) of Temperatura;
Realizar un segmento de programa que cree una variable dinmica de tipo Lista_Vehiculos apuntada por Mi_Lista y realice las siguientes asignaciones:
Al elemento 5 del array apuntado por Mi_Lista el valor del registro V1 Al campo Matricula del elemento 12 del array apuntado por Mi_Lista el correspondiente valor del registro V2 Al campo Fecha_Fabricacion del elemento 43 del array apuntado por Mi_Lista el valor 2010
CUIDADO: Se debern crear todas las variables dinmicas que se necesiten para soportar los datos que se piden.
Ejercicio 2
Objetivo: Paso de parmetros de tipo access a los subprogramas. Descripcin: Tenemos el tipo vector y un tipo puntero al mismo definido en los apuntes:
type Vector is array(1..3) of Float; type P_Vector is access Vector;
Se pide crear un procedimiento que permita intercambiar el valor de dos vectores, y que tenga el siguiente prototipo:
procedure Intercambia (V1, V2 : in out P_Vector);
Realizar un programa de prueba que intercambie los valores de dos vectores definidos como variables estticas, y de dos vectores definidos como variables dinmicas. Pintar los vectores que se intercambian antes y despus de llamar al procedimiento.
Realizar tambin la implementacin de todas las operaciones (en el cuerpo del paquete) excepto la extraccin. Comprobar que compila (poner la implementacin de Extrae vaca, con la instruccin null, o comentar la definicin en la especificacin). Nota: extraer el cdigo de este documento o del PDF de los apuntes (copiar/pegar).
Ejercicio 2
Objetivo: Practicar el uso de paquetes. Descripcin: Dadas las dos implementaciones de Conjuntos_Privados,la del Ejercicio 1 y la original, hacer un programa de prueba que realice lo siguiente:
Utilice como Elemento los nmeros del 1 al 100 Defina un conjunto en el que se insertan los nmeros 3, 17, 46 y compruebe si pertenecen los nmeros 65, 17, 23 y 46 mostrando los resultados por pantalla.
Comprobar que el programa funciona de igual modo con cualquiera de las dos implementaciones.
Ejercicio 3
Objetivo: Practicar con el desarrollo de paquetes hijo. Descripcin: Partiendo del paquete desarrollado en el Ejercicio 1 y sin modificarlo, aadir una operacin que devuelva el nmero de elementos que tiene un conjunto determinado:
function Num_Elementos (C : Conjunto) return Natural;
Definir esta operacin en un paquete hijo de Conjuntos_Privados. Hacer un pequeo programa de prueba que inserte tres elementos y pinte el nmero de elementos del conjunto.
Tratamiento de errores
Ejercicio 1
Objetivo: Escribir un manejador de excepcin Descripcin: Tenemos disponible el siguiente paquete
package Brazo_Robot is type Eje is range 1..6; subtype Angulo is Float range -360.0..360.0; -- en grados type Posicion_Ejes is array(Eje) of Angulo; function Pos_Actual return Posicion_Ejes; -- eleva Error_Sensor si se detecta un error con el sensor de posicin procedure Mueve_A (Pos_Nueva : Posicion_Ejes); -- Eleva Motores_Inhibidos si los motores no estn operativos Error_Sensor : exception; Motores_Inhibidos : exception; end Brazo_Robot;
no se eleva Motores_Inhibidos llamar a Pos_Actual en un bucle hasta que la posicin retornada sea la deseada (la indicada en el parmetro) se eleva Error_Sensor poner un mensaje de error en pantalla y terminar
Ejercicio 2
Objetivo: Creacin de bloques para tratamiento de excepciones Descripcin: Con el brazo robot del ejercicio 1 se quiere realizar un desplazamiento en el eje 2 hasta un punto concreto en varios pasos y luego retornar rpidamente a la posicin inicial, anotando las distintas posiciones reales alcanzadas. En la siguiente secuencia de instrucciones:
-- Ir a 105 grados del eje 2 poco a poco Mueve_A ((10.0,100.0,30.0,0.0,180.0,-180.0)); Pos1:=Pos_Actual; Mueve_A ((10.0,101.0,30.0,0.0,180.0,-180.0)); Pos2:=Pos_Actual; Mueve_A ((10.0,102.0,30.0,0.0,180.0,-180.0)); Pos3:=Pos_Actual; Mueve_A ((10.0,103.0,30.0,0.0,180.0,-180.0)); Pos4:=Pos_Actual; Mueve_A ((10.0,104.0,30.0,0.0,180.0,-180.0)); Pos5:=Pos_Actual; Mueve_A ((10.0,105.0,30.0,0.0,180.0,-180.0)); Pos6:=Pos_Actual; -- Regresar a la posicin inicial rpidamente Mueve_A ((10.0,100.0,30.0,0.0,180.0,-180.0)); Pos_Final:=Pos_Actual;
se lanza Error_Sensor se ejecuten las dos ltimas instrucciones. Si se vuelve a lanzar Error_Sensor aqu, ignorar el error se lanza Motores_Inhibidos poner un mensaje de error y abandonar la secuencia de instrucciones lanzando de nuevo la misma excepcin
una variable de un tipo indeterminado que se pasa como parmetro genrico un booleano que indique si existe un valor almacenado disponible o no (valor
Disponible:
funcin que retorna el dato si existe. Si el dato Disponible vale true, pone Disponible a False y retorna Var; si no, lanza una excepcin
Escribe:
Escribir tambin un programa de prueba que instancie el paquete para el tipo Float y pruebe las operaciones.