No es un bug, es una característica no documentada

viernes, 13 de febrero de 2015

Programación. Introducción a ADA

8:52 Posted by Inazio , No comments

Características generales

è   Lenguaje de propósito general
è   Es profesional (complejo, no pensado para aprendices)
è   Incorporación de puntos clave de la teoría de la programación
·        Legibilidad. Evita notación demasiado concisa (es más costoso el mantenimiento que la producción de software. “Un programa se lee más veces de las que se escribe”).
·        Fuerte y esteticamente tipado. Gran cantidad para definir datos de tipos diferentes. Cada dato puede usarse sólo en operaciones específicas de su tipo. La utilización inadecuada se detecta en tiempo de compilación.
·        Diseño a gran escala. Programación modular. Mecanismos de encapsulación. Compilación separada.
·        Abstracción de datos. Separación clara entre especificación, representación e implementación.
·        Módulos genéricos
·        Programa concurrente. Descripción de procesos que pueden ejecutarse concurrentemente. Definición de operaciones de sincronización entre esos procesos.
·        Manejo de excepciones. Definición de comportamientos de recuperación ante situaciones de error no previstas.

Escribir en ADA

è   El fichero tendrá extensión .adb
è   ; para finalizar una orden
è   No existen las llaves
è   -- es un comentario
è   with sirve para incluir paquetes
è   procedure [nombre] is es el procedimiento principal, que tendrá el mismo nombre que el archivo fuente.
è   use hace referencia a los paquetes
è   begin es el comienzo del programa
è   put(“”); es para mostrar por pantalla cadenas de texto
è   get(“”); sirve para capturar caracteres
è   constant es usado para la declaración de constantes
è   while loop  / end loop es para condiciones de mientras que…
è   if
            then
end if                         es usado para condiciones de si…
è   /= distinto de
è   := Asignación
è   = Comparación

Compilación en ADA 

Para compilar debes instalar el gnat.

Para su instalación, escribe:
è   sudo apt-get update (para actualizar repositorios)
è   sudo apt-get install gnat-4.6 (versión hasta la fecha – 10/02/2015)

Para compilar, escribe este comando:
è   gnatmake nombreArchivoSinLaExtensión

E/S Simple

è   text.io – Entrada y salida de caracteres
è   integer_text.io – Entrada y salida de enteros

Reservas

ADA tiene 69 palabras reservadas. Son éstas:

Tipos escalables

pi:constant float:=3.1415; -- Inicializo constante pi con valor de 3.1415
final:constant character:=’.’; -- Inicializo constante final con valor inicial de ‘.’
i, j, k: integer; -- i, j y k son enteros

ADA es fuertemente tipado. No se puede asignar valor a una variable de un tipo diferente.

Subtipos

Caracteriza 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 ya predefinidos. Booleanos y caracteres.

type dia is (lunes, martes, miercoles, jueves, viernes, sabado, domingo);
subtype laboral is dia range lunes..viernes;
d1:dia;d2:laboral;

Atributos

dia ‘first:=lunes; -- Primero
dia ‘last:=sabado; -- Último
dia ‘succ(lunes):=martes; -- Sucesor
dia ‘pred(martes):=lunes; -- Preedecesor
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 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);

Tipos enteros

Hay algunos predefinidos:
è   type integer is …; -- enteros
è   type short-integer is …; -- enteros cortos
è   type long –integer is …; -- enteros largos
è   subtype natural is integer range 0..integer ‘last; -- De 0 en adelante
è   subtype positives is integer range 1..integer ‘last; -- De 1 en adelante

Orde de las propiedades

1.      and, or, xor
2.      not
3.      =, /=, <, <=, >, >=, in, not in
4.      +. – (binarios)
5.     

Tipos reales

type misReales is digits 7;
n:integer;x:float;

-- No se admite aritmetica mixta

n+x -- incorrecto

-- Forma correcta (una de las dos)

float(n)+x
n+integer(x)

La conversion de real a entero aplica un redondeo

Estructuras de control

If

       if
            then …
       end if;

       if
            then …
            else …
       end if;

       if
            then …
            elsif
                        then …
            else …
       end if;

Case

       case … is …
            when … =>…  -- Una opción
            when … | … | … => … -- Varias opciones
            when … .. … => … -- Con rango
            when … => NULL; -- Nulo
            when others => … -- Default
       end case;

Estructuras iterativas

While

       while … loop
            …
       end loop;

For

       for d in dia loop
            …
       end loop;

       for d in reverse lunes..viernes loop
            …
       end loop;
       loop
            …
       end loop;

       loop
            …;
            exit;
            …;
       end loop;

       loop
            …
            exit when…;
            …
       end loop;

Estructuración de control. Subalgoritmos

Procedimientos y funciones

Paso de parámetros:
       in (entrada), out(salida), in out (entrada/salida)

En ADA, por defecto, todas son de entrada.

procedure 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 sobrcarga, puedo llamar a 7 funciones de la misma manera (suma de coches, de motos…), que el compilador distinguirá las funciones por el contexto de los operandos (enteros, reales, vectores).
Es decir, el significado es distinguido por el contexto.

Las funciones y procedimientos deben estar en funciones y procedimientos. Hay jerarquía, y el orden importa.

Vectores

Definiciones restringidas

type t1 is array (1..10) of boolean; -- Vector de 10 posiciones de booleanos

type t2 is array (dia) of t1; -- t2 es vector de posiciones de lunes a sábado que contienen valores contenidos en t1

type t3 is array (lunes..jueves, -10..14) of t1; -- Matriz

x:t1, y:t2, z:t3;

y(i+j);
y(martes);
y(martes)(i+j);
z(martes,i+j);
x(5..8);
y(martes..viernes);

Definiciones no restringidas

type matriz is array (positive range <>. positive range <>) of real; /* range <> es de cualquier rango */

function “+”(a,b:matriz)
            return matriz is
begin .. end “+”;

Atributos relacionados con los índices

function “+”(a,b,matriz)
            return matriz is
   suma:matriz(a'range(1),a'range(2));

begin
            for i in a'range(1) loop
                        for j in a'range(2) loop
                                   suma(i,j):=a(i,j)+b(i,j);
                        end loop;
            end loop;
            return suma;
end “+”;

Constantes de tipos vectoriales

m1:=((1..3=>1.0);(1=>2.0;2=>3.0;3=>4.0));
m2:=mat23’(1=>(1=>1.0;others=>0.0);2=>(2:=1.0,others=>0.0));

Others exige límites conocidos

Tipo no restringido predefinido: strings

type string is array(positive range <>) of character;
x0:string(1..8);
subtype s1 is string(2..8);
subtype línea is string(1..80);

x1:s1;
l:linea;

1(3..10):=x0;
1(2..4:=x0(2..6);
1(1..8):=x0(1..4)&”A”&x1(2..4);

Las constantes tipo cadena entre comillas dobles.
x0 es una cadena de caracteres de longitud exactamente 8

Cadenas à Tamaño exacto. De ocho caracteres exactamente, por ejemplo
Cadena bount it à No tan estrictas. Hasta 8 caracteres

Punteros

type celda;
type enlace is access celda;
type celda is
       record
            valor:integer;
            siguiente:enlace;
       end record;
e:enlace;

e:=new celda;
e.valor:=13;

Liberación de memoria de datos inaccesibles

with unchecked_deallocation;
procedure disponer is new
       unchecked_desallocation(celda,enlace);

e:enlace;
disponer(e);

0 comentarios:

Publicar un comentario