1. Programación Distribuida y en Tiempo Real
EJERCICIO 1. TIPOS DE DATOS ENTEROS
Escribir un programa en ADA con las siguientes características:
1.Defina los tres tipos de datos siguientes:
• A: entero dentro del intervalo [-120, 120].
• B: entero dentro del intervalo [0, 50]
• C: entero sin signo de 1 byte.
2.Inicialice tres variables (una por cada tipo de dato definido) y
calcule las operaciones:
• A + B
• A + C
• B + C
3.Imprima por pantalla los resultados de cada una de las operaciones
anteriores.
with Ada.Text_IO;
use Ada.Text_IO;
procedure Ejercicio1 is --procedimiento principal
package Integer_InOut is new Integer_IO(Integer);
use Integer_InOut;
subtype A is integer range -120 .. 120;-- Entero de rango -120-120
subtype B is integer range 0 .. 50; -- Entero de rango 0 a 50
subtype C is integer range 0 .. Integer'last; --Entero sin signo
de rango 0 a último entero permitido
--Parte de declaraciones
varA : A := -42;
varB : B := 25;
varC : C := 100;
begin --Cuerpo de sentencias ejecutables
put("El valor A es:");
put(varA);
New_line;
put_line("El valor B es:");
put(varB);
New_line;
put("El valor C es:");
put(varC);
New_line;
put_line("El valor A + B es:");
put(varA + varB);
Francisco Manuel García Vallejo Página 1 de 10
2. Programación Distribuida y en Tiempo Real
New_line;
put_line("El valor A + C es:");
put(varA + varC);
New_line;
put_line("El valor B + C es:");
put(varB + varC);
end;
Francisco Manuel García Vallejo Página 2 de 10
3. Programación Distribuida y en Tiempo Real
EJERCICIO 2. TIPOS DE DATOS DISCRETOS
Escribir un programa en ADA que defina un tipo de datos discreto
llamado “Semáforo” que pueda tomar los valores {Rojo, Amarillo,
Verde}.
with Ada.Text_IO;
use Ada.Text_IO;
procedure Ejercicio2 is --procedimiento principal
type Semaforo is (Rojo, Amarillo, Verde); -- Creamos el tipo
enumerado Semaforo con los tres valores
package Semaforo_IO is new Enumeration_IO(Semaforo); -- Lo
utilizamos para poder realizar entradas y salidas con los tipos
enumerados
use Semaforo_IO;
--Parte de declaraciones
varA : Semaforo := Semaforo'val(1); --Creamos una variable
tipo semaforo, cuyo valor lo asignamos por la posicion que ocupa,
en este caso he dicho posición 1 que corresponde al segundo
elemeno
varB : Semaforo := Amarillo; --Creamos una variable tipo
semaforo asignadole un valor directamente
varC : Semaforo := Semaforo'last; --Creamos una variable tipo
semaforo cuyo valor es el ultimo
begin
--Cuerpo de sentencias ejecutables
put(varA); --Mostramos por pantalla el contenido de la
variable
New_line;
put(varB);
New_line;
put(varC);
New_line;
put_line("Ejercicio 2");
end;
Francisco Manuel García Vallejo Página 3 de 10
4. Programación Distribuida y en Tiempo Real
EJERCICIO 3. TIPOS DE DATOS REALES
Escribir un programa en ADA con las siguientes características:
1.Defina los tipos de datos siguientes:
• A: coma fija dentro del intervalo [-50, 50] con precisión 0.01.
• B: coma flotante dentro del intervalo [-200, 200] con tres dígitos
decimales.
2.Inicialice dos variables (una por cada tipo de dato definido) y calcule
la operación A + B.
3.Imprima por pantalla el resultado de la operación anterior.
with Ada.Text_IO;
use Ada.Text_IO;
procedure Ejercicio3 is
-- Necesario para leer/escribir Reales Float.
type Float_B is digits 3 range -2.0E2 .. 2.0E2;
--Float_B_IO sirve para reales en coma flotante
use Float_B_IO;
type Float_A is delta 0.01 range -100.00 .. 100.00;
--Coma fija decimal
subtype Fija_A is Floatfija_A is range -50.00 .. 50.00;
package Float_A_IO is new Float_IO(Float_A);
--Float_B_IO sirve para reales en coma flotante
use Float_A_IO;
A : Fija_A := Fija_A'last;
B : Float_B := Float_B'first;
begin
put_line("El valor A es:");
--put(A);
put_line("El valor B es:");
put(B);
put_line("El valor B + B es:");
Float_B(A)
put(A + B);
end ;
Francisco Manuel García Vallejo Página 4 de 10
5. Programación Distribuida y en Tiempo Real
EJERCICIO 4. ARRAYS
Escribir un programa en ADA con las siguientes características:
1. Defina los tipos de datos siguientes:
1. A: vector de 150 posiciones de datos reales.
2. B: matriz de tres dimensiones con tamaño 200x200x200 de
datos enteros.
3. C: vector de datos reales con cualquier tamaño.
2. Inicialice tres variables (una por cada tipo de dato definido) a 0.
3. Imprimir por pantalla el resultado.
with Ada.Text_IO;
use Ada.Text_IO;
procedure Ejercicio4 is
posicionesA : constant Integer := 150;
--Creamos la constante que nos indica le numero de valores del
vector A
type VectorA is array(0 .. posicionesA-1) of Float;
posicionesB : constant Integer := 199;
type MatrizB is array( 0 .. posicionesB , 0 .. posicionesB , 0 ..
posicionesB ) of Integer;
type VectorC is array( integer range <> ) of Float;
--package Float_IO is new Float_IO(Float);
--Float_IO sirve para reales en coma flotante
--use Float_IO;
--package Integer_IO is new Integer_IO(Integer);
--Float_IO sirve para enteros
--use Integer_IO;
A : VectorA := (0.0, others => 0.0);
B : MatrizB := (others => (others => (others => 0)));
C : VectorC(1 .. 10) := (others => 0.0);
begin
put_line("Ejercicio 4");
--Put_Line(B(50,50,50)'Img);
end;
--Compila Bien pero al ejecutarlo se produce un desbordamiento
Francisco Manuel García Vallejo Página 5 de 10
6. Programación Distribuida y en Tiempo Real
EJERCICIO 5. CADENAS
Escribir un programa en ADA con las siguientes características:
1. Inicialice una constante de tipo cadena que contenga la
expresión “TIEMPO REAL”.
2. Imprimir por pantalla la constante anterior.
with Ada.Text_IO;use Ada.Text_IO;
procedure Ejercicio5 is
tiemporeal : constant String := "TIEMPO REAL";
begin
put_line("Ejercicio 5");
Put(tiemporeal);
end;
Francisco Manuel García Vallejo Página 6 de 10
7. Programación Distribuida y en Tiempo Real
EJERCICIO 6. REGISTROS
Escribir un programa en ADA con las siguientes características:
1. Definir el tipo de datos “Datos_personales” con los siguientes
campos:
1. Nombre: cadena de texto
2. Apellidos: cadena de texto
3. Fecha de nacimiento: registro con día, mes y año.
2. Inicializar una variable del tipo definido con tus datos
personales.
3. Imprimir por pantalla la variable definida anteriormente.
with Ada.Text_IO;use Ada.Text_IO;
procedure ejercicio6 is
package Integer_InOut is new Integer_IO(Integer);
use Integer_InOut;
type NombreMes is
(Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octu
bre,Noviembre,Diciembre);
type TipoDia is new Integer range 1 .. 31;
type TipoAnio is new Integer range 0 .. 4000;
type Date is
record
Dia : TipoDia;
Mes : NombreMes;
Anio : TipoAnio;
end record;
type Personal is
record
Nombre : String(1 .. 20) ;
Apellidos : String(1 .. 20);
Nacimiento : Date;
end record;
yo : Personal;
Francisco Manuel García Vallejo Página 7 de 10
8. Programación Distribuida y en Tiempo Real
begin
-- yo := (Nombre => "Francisco Manuel ", Apellidos => "Garcia
Vallejo ", Nacimiento => (Dia => 21, Mes => Diciembre, Anio
=>1968) );
yo.Nombre := "Francisco Manuel " ;
yo.Apellidos := "Garcia Vallejo ";
yo.Nacimiento := (21,Diciembre,1968) ;
put_line( "Ejercicio 6" );
put_line( "Mi nombre es: " );
put_line( yo.Nombre );
put_line( "Mis apellidos son: " );
put_line( yo.Apellidos );
put_line( "Nací el día: " );
put_line( yo.Nacimiento.Dia'Img );
put_line( "Nací el més: " );
put_line( yo.Nacimiento.Mes'Img );
put_line( yo.Nacimiento.Anio'Img );
end ejercicio6 ;
Francisco Manuel García Vallejo Página 8 de 10
9. Programación Distribuida y en Tiempo Real
EJERCICIO 7. TIPOS DINÁMICOS
Escribir un programa en ADA con las siguientes características:
1. Definir un tipo de datos “Nodo” para elaborar una lista enlazada
de elementos tipo “Datos_personales” definido en el ejercicio
anterior.
2. Inicializar una variable de tipo “Nodo” con tus datos personales.
3. Imprimir por pantalla la variable definida anterior
with Ada.Text_IO;use Ada.Text_IO;
procedure Ejercicio7 is
package Integer_InOut is new Integer_IO(Integer);
use Integer_InOut;
type NombreMes is
(Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octu
bre,Noviembre,Diciembre);
type TipoDia is new Integer range 1 .. 31;
type TipoAnio is new Integer range 0 .. 4000;
type Date is
record
Dia : TipoDia;
Mes : NombreMes;
Anio : TipoAnio;
end record;
type Personal is
record
Nombre : String(1 .. 20) ;
Apellidos : String(1 .. 20);
Nacimiento : Date;
end record;
type Nodo is access Personal;
yo : Personal;
liEnPersonal : Nodo;
Francisco Manuel García Vallejo Página 9 de 10
10. Programación Distribuida y en Tiempo Real
begin
-- yo := (Nombre => "Francisco Manuel ", Apellidos => "Garcia
Vallejo ", Nacimiento => (Dia => 21, Mes => Diciembre, Anio
=>1968) );
liEnPersonal := new Personal;
yo.Nombre := "Francisco Manuel " ;
yo.Apellidos := "Garcia Vallejo ";
yo.Nacimiento := (21,Diciembre,1968) ;
liEnPersonal.all.Nombre := "Francisco Manuel " ;
liEnPersonal.all.Apellidos := "Garcia Vallejo ";
liEnPersonal.all.Nacimiento := (21,Diciembre,1968) ;
put_line( "Ejercicio 7: Con el Registro Yo del Ejercicio 6" );
put_line( "Mi nombre es: " );
put_line( yo.Nombre );
put_line( "Mis apellidos son: " );
put_line( yo.Apellidos );
put_line( "Nací el día: " );
put_line( yo.Nacimiento.Dia'Img );
put_line( "Nací el més: " );
put_line( yo.Nacimiento.Mes'Img );
put_line( "Nací el año: " );
put_line( yo.Nacimiento.Anio'Img );
put_line( "Ejercicio 7: Con La lista enlazada del tipo Nodo" );
put_line( "Mi nombre es: " );
put_line( liEnPersonal.Nombre );
put_line( "Mis apellidos son: " );
put_line( liEnPersonal.Apellidos );
put_line( "Nací el día: " );
put_line( liEnPersonal.Nacimiento.Dia'Img );
put_line( "Nací el més: " );
put_line( liEnPersonal.Nacimiento.Mes'Img );
put_line( "Nací el año: " );
put_line( liEnPersonal.Nacimiento.Anio'Img );
end Ejercicio7 ;
Francisco Manuel García Vallejo Página 10 de 10