Hora: Martes m1 - m3
Debido a su uso para crear programas profesionales, los culales se leen muchas más veces de las que se escriben, la legibilidadd es mucho más importante que la rápidez de escritura. Además, Ada es un lenguage "case insensitive", es decir, sus identificadores y palabras claves son equivalentes sin importar el uso de mayúsculas y minúsculas.
Para ello necesitamos un mecanismo que permita crear partes de un programa similares, a partir de una plantilla, es muy útil para crear bibliotecas.
procedure Identificador is
[Declaraciones]
begin
Sentencias_del_Programa
end Identificador;
Y un ejemplo común de la sintaxis de un lenguaje es el programa "Hola mundo":
procedure Hola_Mundo is
begin
Ada.Text_IO.Put_Line("¡Hola, mundo!");
end Hola_Mundo;
- Letras mayúsculas: A, ..., Z y minúsculas: a, ..., z.
- Dígitos: 0, ..., 9.

- Last: Integer'Last es el máximo valor que puede tomar la variable de tipo Integer. También es el último valor de un tipo enumerado o del índice de un vector.
- First: Integer'First es el mínimo valor que puede tomar la variable de tipo Integer. También es el primer valor de un tipo enumerado o del índice de un vector.
- Range: Vector'Range indica el rango que ocupa la variable Vector, es decir, equivale a Vector'First..Vector'Last. En el caso de más de una dimensión, el valor Matriz'Range(1) indica el rango de la primera dimensión.
- Succ: TColor'Succ(ROJO) indica el siguiente valor a ROJO que toma el tipo TColor, si no existe, se eleva la excepción Constraint_Error.
- Pred: TDía'Pred(VIERNES) indica el anterior valor a VIERNES que toma el tipo TDía, si no existe, se eleva la excepción Constraint_Error.
- Pos: El atributo Pos indica la posición ocupada por un determinado valor en un tipo enumeración. Por ejemplo: TColor'Pos(ROJO). La primera posición se considera 0.
- Val: El atributo Val indica el valor que ocupa una determinada posición en un tipo enumeración. Por ejemplo: COLOR'Val(1).
- Para identificar unívocamente un valor de un tipo enumeración se emplea TColor' (ROJO) y TIndicador'(ROJO) para distinguir el valor ROJO del tipo TColor o TIndicador.
- Size: tamaño en bits de un objeto.
- Valid: si tiene una representación válida para su tipo. Útil cuando se obtienen valores desde el «mundo exterior» mediante Unchecked_Conversion u otro mecanismo.
- First, Last: aplicados a arrays dan el primer y el último índices del array.
- Range: Vector'Range indica el rango que ocupa la variable Vector, es decir, equivale a Vector'First..Vector'Last. En el caso de más de una dimensión, el valor Matriz'Range(1) indica el rango de la primera dimensión
[ { elsif condición then secuencia_de_sentencias } ]
[ else secuencia_de_sentencias ]
end if ;

sentencia_selección_por_casos ::=
case expresión is
alternativa_caso { alternativa_caso }
end case ;
alternativa_caso ::=
when elección {
elección } => secuencia_de_sentencias
elección ::= expresión_simple
rango_discreto
others

-LOOP
sentencia_bucle_simple ::=
[ identificador_bucle : ] loop
secuencia_de_sentencias
end loop [ identificador_bucle ] ;
sentencia_bucle_iterativo ::=
[ identificador_bucle : ] for parámetros_for loop
secuencia_de_sentencias
end loop [ identificador_bucle ] ;
parámetros_for ::= identificador in [ reverse ] rango_discreto
sentencia_bucle_iterativo ::=
[ identificador_bucle : ] while condición loop
secuencia_de_sentencias
end loop [ identificador_bucle ] ;
sentencia_exit ::= exit [ nombre_bucle ] [ when condición ] ;
sentencia_return ::= return [ expresión ] ;
* Sentencia abort
- Procedimientos: son llamados como sentencias y no devuelven resultado.
- Funciones: son llamadas como componentes de expresiones y devuelven un resultado
* Procedimientos
especificación_procedimiento ::=
procedure identificador
[ ( especificación_parámetro { ; especificación_parámetro } ) ]
especificación_parámetro ::= identificador { , identificador } : [ modo ] tipo
[ := expresión ]
modo ::= in
out
in out
cuerpo_procedimiento ::=
especificación_procedimiento is
[ parte_declarativa ]
begin
secuencia_de_sentencias
[ exception
manejador_de_excepción { manejador_de_excepción } ]
end [ identificador ]
- in: el parámetro formal es una constante y permite sólo la lectura del valor del parámetro real asociado.
- in out: el parámetro formal es una variable y permite la lectura y modificación del valor del parámetro real asociado.
- out: el parámetro formal es una variable y permite únicamente la modificación del valor del parámetro real asociado.
especificación_función ::=
function ( identificador
símbolo_operador )
[ ( especificación_parámetro { ; especificación parámetro } ) ]
return tipo
especificación_parámetro ::= identificador { , identificador } : [ in ] tipo
[ := expresión ]
cuerpo_función ::=
especificación_función is
[ parte_declarativa ]
begin
secuencia_de_sentencias
[ exception
manejador_de_excepción { manejador_de_excepción } ]
end [ identificador
símbolo_operador ] ;
Toda llamada a una función produce una nueva copia de cualquier objeto declarado dentro de ella, incluyendo los parámetros. Cuando la función finaliza, desaparecen sus objetos. Por lo tanto, es posible utilizar llamadas recursivas a una misma función.
* Parámetros nombrados
Por ejemplo: procedure Prueba_Por_Defecto (A : in Integer := 0; B: in Integer := 0);
1- Prueba_Por_Defecto (5, 7); -- A = 5, B = 7
2- Prueba_Por_Defecto (5); -- A = 5, B = 0
3- Prueba_Por_Defecto; -- A = 0, B = 0
4- Prueba_Por_Defecto (B => 3); -- A = 0, B = 3
5- Prueba_Por_Defecto (1, B => 2); -- A = 1, B = 2
En el Lenguaje Ada se puede utilizar un identificador con más de un significado, y a esto es lo que se conoce como sobrecarga.
Se pueden emplear identificadores iguales en distintos tipos enumeración.
- No cambiar la sintaxis.
- No cambiar el número de parámetros de un operador (recuérdese que + y - pueden ser unarios o binarios).
- La precedencia se mantiene.
Un subprograma sobrecargará un significado ya existente siempre que su especificación sea diferente, es decir, pueden existir dos subprogramas con el mismo identificador siempre que se distingan por el número o tipo de sus parámetros
Ada tiene cinco bibliotecas predefinidas independientes para operaciones de entrada/salida. Y son:
- Direct I/O: se usa para acceso directo a archivos que contienen unicamente elementos del mismo tipo.
- Sequential I/O: se usa para el acceso secuencial a archivos que unicamente contienen elementos de un tipo especificado.
- Storage I/O: nos permite almacenar un único elemento en un buffer de memoria.
- Stream I/O: es el paquete de entrada/salida más flexible. Todos los atributos de E/S pueden sobreescribirse con subprogramas definidos por el usuario y es posible definir nuestros propios tipos de Stream I/O usando técnicas avanzadas de orientación a objetos.
- Text I/O: es el tipo de entrada/salida más usada, en ella todos los datos del archivo se representan en formato de texto legible.
* Biblioteca predefinida
Existen varios paquetes predefinidos para la entrada/salida en Ada:
- Paquete Ada.Direct_IO
- Paquete Ada.Sequential_IO
- Paquete Ada.Storage_IO
- Paquete Ada.Streams
- Paquete Ada.Streams.Stream_IO
- Paquete Ada.Text_IO, con sus paquetes genéricos anidados: Complex_IO, Decimal_IO, Enumeration_IO, Fixed_IO, Float_IO, Integer_IO y Modular_IO.
-Paquete Ada.Text_IO.Editing
- Paquete Ada.Float_Text_IO
- Paquete Ada.Integer_Text_IO
Bueno esto es todo sobre mi entrada acerda del Lenguaje Ada, espero les sea útil.
Saludos :)
Ada tiene cinco bibliotecas predefinidas independientes para operaciones de entrada/salida. Y son:
- Direct I/O: se usa para acceso directo a archivos que contienen unicamente elementos del mismo tipo.
- Sequential I/O: se usa para el acceso secuencial a archivos que unicamente contienen elementos de un tipo especificado.
- Storage I/O: nos permite almacenar un único elemento en un buffer de memoria.
- Stream I/O: es el paquete de entrada/salida más flexible. Todos los atributos de E/S pueden sobreescribirse con subprogramas definidos por el usuario y es posible definir nuestros propios tipos de Stream I/O usando técnicas avanzadas de orientación a objetos.
- Text I/O: es el tipo de entrada/salida más usada, en ella todos los datos del archivo se representan en formato de texto legible.
* Biblioteca predefinida
Existen varios paquetes predefinidos para la entrada/salida en Ada:
- Paquete Ada.Direct_IO
- Paquete Ada.Sequential_IO
- Paquete Ada.Storage_IO
- Paquete Ada.Streams
- Paquete Ada.Streams.Stream_IO
- Paquete Ada.Text_IO, con sus paquetes genéricos anidados: Complex_IO, Decimal_IO, Enumeration_IO, Fixed_IO, Float_IO, Integer_IO y Modular_IO.
-Paquete Ada.Text_IO.Editing
- Paquete Ada.Float_Text_IO
- Paquete Ada.Integer_Text_IO
Bueno esto es todo sobre mi entrada acerda del Lenguaje Ada, espero les sea útil.
Saludos :)
Muy bien, cinco puntos extra. Se me hace raro que no estés publicando para el laboratorio; ahí te hace más falta.
ResponderEliminar