ADA - Hacer este programa recursivamente

 
Vista:

Hacer este programa recursivamente

Publicado por Anikilator (2 intervenciones) el 26/02/2007 15:59:48
Muy buenas, necesito ayuda con un ejerccio que me piden redacte tanto recursivamente como Iterativamente.
Seria muy de gran ayuda que si alguien fuese capaz de hacerlo me pasase el archivo en adagide por correo o lo escriba aqui si quiere, pero esque ando muy perdido y lo necesito para el martes por la tarde a más tardar., me hariais un grandisimo favor.

Gracias de antemano

AQUI EL ENUNCIADO:

ESCENARIO:

Para automatizar la gestión de las reservas de agua de una cuenca hidrográfica y poder realizar estudios de impacto ambiental, se ha redactado un documento con la descripción de los elementos implicados en la gestión y las tareas asociadas a ella.

Una cuenca hidrográfica tiene un nombre y se compone de un conjunto de embalses. Cada embalse recoge agua de un conjunto de cuencas fluviales. Una cuenca fluvial se caracteriza por su nombre, su área y el tipo de suelo que existe en ella. El área de la cuenca está medida en km2 como un número con dos decimales. El tipo de suelo viene clasificado como permeable, semipermeable o poco permeable.

Existe un coeficiente K utilizado para hacer cálculos que es el coeficiente de absorción del terreno. Este coeficiente depende del tipo de suelo, según la tabla:

Tipo de Suelo K
Permeable 25.4
Semipermeable 15.2
Poco permeable 12.7

El volumen de agua (en litros) recogida en una cuenca a partir de la precipitación recogida se calcula mediante la fórmula:

V = ((P * A * 106) / k) * (1 - e-k)
Donde:

A = Area de la cuenca
K = Coeficiente de absorción
P = Precipitación recogida
Cada cuenca hidrográfica está sometida a un régimen de precipitaciones durante un cierto periodo de tiempo. Estas precipitaciones vienen registradas junto con el nombre de la cuenca fluvial donde se han producido. La precipitación viene medida en litros/m2.

REPRESENTACIÓN ABSTRACTA DEL DOMINIO DE LOS ELEMENTOS:

Letra = ['a','z'] U ['A','Z'] U {'ñ', 'Ñ'}
Nombre = Colección (6, Letra)
Area = {0} U |R+
Suelo = {Permeable, Semipermeable, Poco_Permeable}
Cuenca_Fluvial = Tupla (Nombre, Area, Suelo)
Precipitacion = {0} U |R+
Precipitaciones = Coleccion (Precipitacion)
Volumen = {0} U |R+
Embalse = Coleccion (Cuenca_Fluvial)
Embalses = Coleccion (Embalse)
Cuenca_Hidrografica = Tupla (Nombre, Embalses, Precipitaciones)
Porcentaje = [0, 100]
Invariantes:

INV (Precipitaciones) = "Cualquier nombre de cuenca fluvial de todas las de la cuenca hidrográfica puede aparecer 0 o más veces en 'Precipitaciones'".
REPRESENTACIÓN ABSTRACTA DE LAS TAREAS:

FUNCIÓN Volumen_Cuenca (C : Cuenca_Fluvial; P : Precipitacion) --> Volumen
--PRE : cierto
--POST: 'resultado' es el volumen de agua medida en litros recogida en la cuenca 'C'

FUNCIÓN Volumen_Embalse (E : Embalse; PS : Precipitaciones) --> Volumen
--PRE : cierto
--POST: 'resultado' es el volumen de agua medida en litros recogida en el embalse 'E'

FUNCIÓN Es_Suelo_Valido (CH : Cuenca_Hidrografica; S : Suelo; P : Porcentaje) --> |B
--PRE : cierto
--POST: 'resultado' es cierto si en todos los embalses de la cuenca hidrografica 'CH' se cumple que en todas sus cuencas fluviales de suelo 'S' el volumen de agua recogido supera (>=) el 'P' % del total de agua recogida en el embalse.

Se pide:

1.Escribir un programa (con pruebas) en el que se especifiquen y redacten RECURSIVAMENTE en Ada los tipos y las funciones anteriores.

2.Escribir un programa (con pruebas) en el que se especifiquen y redacten ITERATIVAMENTE en Ada los tipos y las funciones anteriores.
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
Imágen de perfil de Alejandro

Implementación recursiva e iterativa de funciones para gestión de cuencas hidrográficas

Publicado por Alejandro (155 intervenciones) el 30/06/2023 18:18:46
A continuación, se muestra la implementación recursiva e iterativa de las funciones requeridas en el lenguaje de programación Ada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
with Ada.Text_IO;
 
procedure Cuencas_Hidrograficas is
   -- Definición de tipos de datos
   type Letra is ('a' .. 'z', 'A' .. 'Z', 'ñ', 'Ñ');
   type Nombre is array (1 .. 6) of Letra;
   type Area is delta 0.001 digits 6 range 0.0 .. Ada.Float'Digits';
   type Suelo is ('Permeable', 'Semipermeable', 'Poco_Permeable');
   type Cuenca_Fluvial is record
      Nombre : Nombre;
      A : Area;
      Tipo_Suelo : Suelo;
   end record;
   type Precipitacion is delta 0.001 digits 6 range 0.0 .. Ada.Float'Digits';
   type Precipitaciones is array (Natural range <>) of Precipitacion;
   type Volumen is delta 0.001 digits 6 range 0.0 .. Ada.Float'Digits';
   type Embalse is array (Natural range <>) of Cuenca_Fluvial;
   type Cuenca_Hidrografica is record
      Nombre : Nombre;
      Embalses : Embalse;
      Precipitaciones : Precipitaciones;
   end record;
   type Porcentaje is range 0 .. 100;
 
   -- Implementación recursiva de la función Volumen_Cuenca
   function Volumen_Cuenca (C : Cuenca_Fluvial; P : Precipitacion) return Volumen is
   begin
      -- Cálculos recursivos
      -- ...
   end Volumen_Cuenca;
 
   -- Implementación recursiva de la función Volumen_Embalse
   function Volumen_Embalse (E : Embalse; PS : Precipitaciones) return Volumen is
   begin
      -- Cálculos recursivos
      -- ...
   end Volumen_Embalse;
 
   -- Implementación recursiva de la función Es_Suelo_Valido
   function Es_Suelo_Valido (CH : Cuenca_Hidrografica; S : Suelo; P : Porcentaje) return Boolean is
   begin
      -- Cálculos recursivos
      -- ...
   end Es_Suelo_Valido;
 
   -- Implementación iterativa de las funciones
   -- ...
 
   -- Pruebas
   -- ...
 
begin
   -- Código principal
   -- ...
 
end Cuencas_Hidrograficas;

Recuerda que esta es solo una plantilla de implementación para las funciones requeridas. Debes completar los cálculos y lógica específica de cada función según los requisitos del enunciado. Además, se pueden agregar pruebas para verificar el correcto funcionamiento de las funciones.

Espero que esta solución te sea de ayuda. ¡Buena suerte con tu proyecto!
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