ejercicios-básicos

9
Elementos básicos del lenguaje Ada Ejercicio 1 Objetivo: Practicar con literales de array Descripción: 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 instrucción necesaria para dar el siguiente valor inicial al array Festivos_2010, usando un literal de array: T odos los sábados y domingos a true; el martes de la semana 14 y el jueves de la 28 a true: todo lo demás a false. Ejercicio 2 Objetivo: Practicar con el recorrido de arrays. Descripción: 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 qu e del nombre se usan sólo los caracteres del 1 a N_Nombre  type Persona is record  Nombre : String(1..3 0);  N_Nombre : Integer range 0..30;  DNI : String(1..9);  end record  Lista_Personas : array (1..50) of Persona; Ejercicio 3 Objetivo: Practicar con las reglas de visibilidad y el paso de parámetros Descripción: 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 parámetros. Pensar cuidadosamente si los parámetros deben ser de entrada, salida, o entrada/salida.

Upload: angel-custodio-calderon-paredes

Post on 05-Jul-2015

38 views

Category:

Documents


0 download

TRANSCRIPT

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 1/9

 

Elementos básicos del lenguaje Ada

Ejercicio 1

Objetivo:Practicar con literales de array

Descripción:

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 instrucción necesaria para dar el siguiente valor inicial al array Festivos_2010,usando un literal de array:

Todos los sábados y domingos a true; el martes de la semana 14 y el jueves de la 28 a true: todo

lo demás a false.

Ejercicio 2

Objetivo:

Practicar con el recorrido de arrays.

Descripción:

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 sólo los caracteres del 1 a N_Nombre

type Persona is recordNombre : String(1..30);N_Nombre : Integer range 0..30;DNI : String(1..9);

end record

Lista_Personas : array (1..50) of Persona;

Ejercicio 3

Objetivo:

Practicar con las reglas de visibilidad y el paso de parámetros

Descripción:

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 unlugar inaccesible a los subprogramas internos, y pasarles a éstos los datos por parámetros. Pensar 

cuidadosamente si los parámetros deben ser de entrada, salida, o entrada/salida.

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 2/9

 

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 isbegin

X1:=A*A+B*B;end Dist;procedure Suma isbegin

S:=A+B+X1;end Suma;

beginPut("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 búsquedas en arrays

Descripción:

Escribir la función cuya cabecera se muestra abajo que busque en el array temp si hay alguna

casilla errónea que no cumpla min<=media<=max. La función debe retornar true si se

encuentra la casilla errónea sin buscar más. En caso de que no haya ninguna casilla errónea

retornará false.

Indicar también un ejemplo de cómo llamar a esa función 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 recordMin, Media, Max : Float;

end record;

type Lista_Temperaturas is array(Mes) of Temperatura;

function Hay_Errores(Temp : in Lista_Temperaturas) return Boolean is ...

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 3/9

 

Estructuras de datos dinámicas

Ejercicio 1

Objetivo:Practicar con la creación y uso de variables dinámicas.

Descripción:

Con los siguientes tipos de datos:

type Info_Vehiculo is recordPropietario : String (1..20);Matricula : String (7);Fecha_Fabricacion : Natural := 1970;

end record;type P_Info_Vehiculo is access Info_Vehiculo;type Lista_Vehiculos is array (1..50) of P_Info_Vehiculo;type P_Lista_Vehiculos is access Lista_Vehiculos;

Se crean las siguientes variables:

Mi_Lista : P_Lista_Vehiculos;V1 : Info_Vehiculo; -- Asignar aquí un valor inicialV2 : Info_Vehiculo; -- Asignar aquí un valor inicial

Realizar un segmento de programa que cree una variable dinámica 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 deberán crear todas las variables dinámicas que se necesiten para soportar los datos

que se piden.

 

Ejercicio 2Objetivo:

Paso de parámetros de tipo access a los subprogramas.

Descripción:

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);

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 4/9

 

Realizar un programa de prueba que intercambie los valores de dos vectores definidos como

variables estáticas, y de dos vectores definidos como variables dinámicas. Pintar los vectores que se

intercambian antes y después de llamar al procedimiento.

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 5/9

 

Modularidad y programación orientada a

objetos

Ejercicio 1Objetivo:

Practicar con paquetes y tipos privados.

Descripción:

Modificar la especificación del paquete Conjuntos_Privados de los apuntes para representar el

conjunto como un array de datos del tipo Elemento. Utilizar un array de un tamaño fijo y un

contador para indicar el número actual de elementos en el conjunto.

with Elementos; -- define el tipo Elemento, que es discretouse Elementos;package Conjuntos_Privados is

type Conjunto is private;

function Vacio return Conjunto;procedure Inserta (E : Elemento;

C : in out Conjunto);procedure Extrae (E : Elemento;

C : in out Conjunto);-- pertenenciafunction "<" (E: Elemento; C: Conjunto) return Boolean;

privatetype Conjunto is array ...;

end Conjuntos_Privados;

Realizar también la implementación de todas las operaciones (en el cuerpo del paquete) excepto la

extracción. Comprobar que compila (poner la implementación de Extrae vacía, con la instrucción

null, o comentar la definición en la especificación).

 Nota: extraer el código de este documento o del PDF de los apuntes (copiar/pegar).

 

Ejercicio 2Objetivo:

Practicar el uso de paquetes.

Descripción:

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 números del 1 al 100

● Defina un conjunto en el que se insertan los números 3, 17, 46 y compruebe si

 pertenecen los números 65, 17, 23 y 46 mostrando los resultados por pantalla.Comprobar que el programa funciona de igual modo con cualquiera de las dos implementaciones.

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 6/9

 

Ejercicio 3

Objetivo:

Practicar con el desarrollo de paquetes hijo.

Descripción:

Partiendo del paquete desarrollado en el Ejercicio 1 y sin modificarlo, añadir una operación quedevuelva el número de elementos que tiene un conjunto determinado:

function Num_Elementos (C : Conjunto) return Natural;

Definir esta operación en un paquete hijo de Conjuntos_Privados. Hacer un pequeño programa

de prueba que inserte tres elementos y pinte el número de elementos del conjunto.

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 7/9

 

Tratamiento de errores

Ejercicio 1

Objetivo:Escribir un manejador de excepción

Descripción:

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 posición

procedure Mueve_A (Pos_Nueva : Posicion_Ejes);-- Eleva Motores_Inhibidos si los motores no están operativos

Error_Sensor : exception;Motores_Inhibidos : exception;

end Brazo_Robot;

Escribir un procedimiento llamado Ir_A que:

•Llame a Mueve_A para dirigirse a la posición que se le pasa en un parámetro a Ir_A.

•Si se eleva Motores_Inhibidos poner un mensaje de error en la pantalla y terminar 

•Si no se eleva Motores_Inhibidos llamar a Pos_Actual en un bucle hasta que la posición retornada

sea la deseada (la indicada en el parámetro)

•Si se eleva Error_Sensor poner un mensaje de error en pantalla y terminar 

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 8/9

 

Ejercicio 2

Objetivo:

Creación de bloques para tratamiento de excepciones

Descripción: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 rápidamente a la posición inicial, anotando las distintas

 posiciones reales alcanzadas. En la siguiente secuencia de instrucciones:

-- Ir a 105 grados del eje 2 poco a pocoMueve_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 posición inicial rápidamenteMueve_A ((10.0,100.0,30.0,0.0,180.0,-180.0));Pos_Final:=Pos_Actual;

crear los bloques y manejadores de excepción necesarios para que:

•Si se lanza Error_Sensor se ejecuten las dos últimas instrucciones. Si se vuelve a lanzar 

Error_Sensor aquí, ignorar el error 

•Si se lanza Motores_Inhibidos poner un mensaje de error y abandonar la secuencia de

instrucciones lanzando de nuevo la misma excepción

5/6/2018 Ejercicios-básicos - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-basicos 9/9

 

Abstracción de tipos mediante unidades

genéricas

Ejercicio 1Objetivo:

Escribir un paquete genérico e instanciarlo

Descripción:

Escribir un paquete llamado Almacen que sirva para almacenar un dato que se puede consumir.

Después de consumido el dato deja de estar disponible. Dispondrá de las siguientes variables

definidas en el cuerpo:

•Var: una variable de un tipo indeterminado que se pasa como parámetro genérico

•Disponible: un booleano que indique si existe un valor almacenado disponible o no (valor 

inicial False)

Las operaciones de este paquete serán:

•Hay_Dato: función que devuelve el dato Disponible

•Lee: función que retorna el dato si existe. Si el dato Disponible vale true, pone

Disponible a False y retorna Var; si no, lanza una excepción

Escribe: procedimiento que da valor a Var y pone Disponible a true;

Escribir también un programa de prueba que instancie el paquete para el tipo Float y pruebe las

operaciones.