recuerda:
texto_io > es entrada y salida de caracteres
integer_text_io > es entrada y salida de caracteres numéricos enteros.
Ada tiene 69 palabras reservadas que tu no puedes utilizar para nombrar ninguna variable.
Delimitadores simples:
& >
' >
( >
) >
* >
+ >
- >
. >
: >
; >
< >
= >
> >
| >
Tipos escalares
pi: constant float:=3.1415; > inicializo una constante pi con valor inicial de 3.1416.
final: constant charactere:='.'; > inicializo una constante final con valor inicial de '.'
i, j, k: integer; > i, j, k son números enteros.
Ada es fuertemente tipado, no se puede asignar valor a una variable de un tipo diferente.
type intenger is-; --predefinido
Subtipos
Sirve para caracterizar un subconjunto de los valores de un tipo.
NO constituye un nuevo tipo (la asignación está permitida)
Tipos definidos por enumeración
Hay dos predefinidos (booleanos y caracteres)
type día is (lunes, martes, miercoles, jueves, viernes, sabado, domingo);
subtype laborable is dia range lunes....viernes;
d1: dia; d2: laborable;
Atributos
dia 'first=lunes // el primerodia ' last=domingo // el último
dia ' succ (lunes)=martes // el sucesor (siguiente)
dia 'pred(martes)=lunes // el predecesor (anterior)
dia 'pos(lunes)=0 // posición
dia 'val(1)=martes // valor
dia ' image(lunes)="LUNES" //convertir a cadena de texto
dia 'value ("martes")=martes // convertir una cadena de texto al tipo definido
Tipo booleano
type boolean is (false, true);
a, b, c, d:boolean;
((not a) and b) or (c xor d)
or t f
t t t
f t f
xor t f
t f t
f t f
Tipos escalares
Tipos enteros
Hay algunos predefinidos:
type interger is ... ; //enteros
type short_integer is ...; // enteros cortos
type long_intenger is ...; // enteros largos
subtype natural is intenger range 0.. intenger' last; // desde el 0 adelante
subtype positivo is intenger range 1..intenger 'last; // desde el 1 adelante
¿?¿?
Prioridades:
and, or, xor
not
=, /=, <, <=, >, >=, in, not in
+, - (binarios)
....
Tipos reales
type mis_reales is digits 7;
No se admite aritmética mixta:
n:integer; x:float;
n+x //¡incorrecto!
float (n) +x
n+integer (x) // ambos correctos!!
La conversión de real a entero efectúa redondeo.
Estructuras de control
if...then
...
end if;
if...then
...
else
...
end if;
if ....then
....
elsif...then
...
elsif...then
...
else
....
end if;
case...is...
when .... => .... // 1 opción when ....|...|... => ... // varias opciones
when ... . . ... => ... // con rango
when ... => NULL; //nulo
when others => ... //por defecto
end case;
Instrucciones iterativas
while...loop
...
end loop;
for d in dia loop ... end loop;
for d in lunes.. viernes loop
...
end loop;
for d in reverse lunes. . viernes loop
...
end loop;
loop
...
end loop;
loop
...;
exit;
...;
end loop;
lopp
...
exit when ...;
...
end loop;
Procedimientos y funciones
Paso de parámetros:
in (entrada), out(salida), in out(entrada y salida).
Ada por defecto todos sera solo de entrada.
produce toto(x:T1; y: in out T2) is
...
end toto;
toto(e,z); --llamada normal
toto (y=>z, x=>e); --llamada nombrada
funciones
function factorial (n:natural)
return natural is
begin
if n in 0..1
then return 1;
else return n*factorial (n-1);
end if;
end factorial;
Existe sobrecarga, puedo llamar a 7 funciones de la misma manera (suma de coches, suma de motos...) el compilador por el contexto de los operandos(enteros, reales, vectores...) que estoy usando me sabrá distinguir a que función me estoy refiriendo.
Es decir, el significado se distingue por el contexto.
No se pueden modificar la aridad ni la sintaxis de llamada (prefija o infija).
Ada no distingue entre mayúsculas y minúsculas.
En Ada las funciones y podrecimientos deben estar en funciones y procedimientos. En C tenias 3 funciones y el orden de llamada era indistinta. En Ada hay jerarquía, Y el orden importa...
0 comentarios:
Publicar un comentario