Introducción al Lenguaje de Programación Ada

Documentos relacionados
FUNDAMENTOS DE OBJECT PASCAL

Manual de turbo pascal

Parte I: Programación en Ada

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

U nidad 6: A rreglos: U nidim ensionales y m ultidim ensionales

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Primer Parcial. Programación 1 Instituto de Computación Año 2017

Instrumentación de Tiempo Real

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

APUNTES DE CÁTEDRA: ARREGLOS MULTIDIMENSIONALES

Introducción a PL/SQL

Primer Parcial. Programación 1 Instituto de Computación Año 2011

Introducción a C# y la plataforma.net

Bloque II. Elementos del lenguaje de programación Java

Tema 2. El lenguaje JAVA

CALENDARIO AÑO 2016 PICO Y PLACA AUTOMOVILES SERVICIO ESPECIAL PICO Y PLACA TAXIS

CALENDARIO AÑO 2016 PICO Y PLACA AUTOMOVILES SERVICIO ESPECIAL PICO Y PLACA TAXIS

Fundamentos de Programación Visual Basic

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tema 5.- Recursividad

FUNDAMENTOS DE INFORMÁTICA

LENGUAJE ST. (Structured Text) ST (Structured Text): 5to lenguaje definido en la norma IEC

GUÍA BÁSICA DE SCHEME v.4

2. Estructuras condicionales

MODULO II PROGRAMACIÓN ORIENTADA A EVENTOS

Java para programadores

Java. Introducción a la Programación Orientada a Objetos

SENA Distrito Capital Centro de Electricidad, Electrónica y Telecomunicaciones ADSI - Ing. Espec. Javier Vaquiro

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL.

PRÁCTICA: LENGUAJE VHDL

Estatutos de Control C# Estatutos de Decisión (Selección)

FACULTADE DE INFORMÁTICA Departamento de Computación Estructura de Datos e da Información. Ejercicios de recursividad

Tema 3.- Predicados y sentencias condicionales

VHDL: Código Secuencial. Arquitectura del Computador 2017

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Esquemas repetitivos en Fortran 90

Codificación en C. Como pasar de Pseudocódigo a C (con pequeños trucos de C++)

VHDL. Lenguaje de descripción hardware Estructura Básica de diseño

Estructuras de Decisión Múltiple

GUIA EXAMEN FINAL/EXTRAORDINARIO

Donde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false).

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

SUBRANGO ENUMERADOS CONJUNTOS

Dobles: Es el caso de la instrucción if-else (punto 1.2).

UNIVERSIDAD CARLOS III DE MADRID. Ejercicios de VHDL. Circuitos Integrados y Microelectrónica. Luis Entrena. Celia López.

fundamentos de programación (unidad 4) programación estructurada en Java

Tema 4.- Pilas y Colas

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015

Calidad del Software. Ejercicios Tema 4 Conceptos de pruebas

Algorítmica y Complejidad. Tema 3 Ordenación.

Fundamentos de programación JAVA

ALGORITMOS Y ESTRUCTURAS DE DATOS. Ejercicios Resueltos CUADERNILLO DE PRACTICA

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Academia técnica de computación A.T.C.

ESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

Curso de PHP. Tema 2: Lenguaje PHP básico

Ordinales, Enumerados y Conjuntos

Repaso Visual Basic Interfaz Gráfica

Introducción al lenguaje C

Ejercicios de C. 1. Estructura de un programa. Objetivos: Practicar con el editor - usar el editor emacs emacs nombre.c

TEMA 4. ESTRUCTURAS DE CONTROL

PROGRAMACIÓN CON VBA: MACROS EXCEL Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Parte II: Estructuras de datos y algoritmos

Programación y Computación Ingenierías. Dr. Eric Jeltsch F. FUNCIONES Y PROCEDIMIENTOS. Universidad de La Serena.

Capítulo 8. Construcción de guiones

Motivación. 4: Control de flujo Condicionales. Motivación. Condicionales

APENDICE CODIFICACION DE LAS ESTRUCTURAS BASICAS

INFORMATICA VISUAL BASIC 2008

Conocer los tipos de esquemas condicionales. Entender su funcionamiento y sus diferencias. 1. Introducción. 3. Esquemas condicionales en C

Estructuras de Control. Secuencia y Selección

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

Parte I: Programación en un lenguaje orientado a objetos

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

3.2. Programación estructurada. Principal. Modulo 1 Modulo 2 Modulo 3 Modulo 4. Modulo Modulo Modulo 3 1 Modulo 4 1 Modulo 4 2. Pág.

ALGORITMOS Y ESTRUCTURAS DE DATOS PRIMERA PARTE

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

PHP: Lenguaje de programación

ELEMENTOS BÁSICOS PARA LA PROGRAMACIÓN DE FUNCIONES TIPOS DE DATOS. Constantes

Registros. Programación 1. InCo - FING. Programación 1 Registros InCo - FING 1 / 20

UTN FRLP Ing. en Sistemas de Información Algoritmos y Estructura de Datos Trabajos Prácticos Curso 2010

Transcripción:

Instrumentación de Tiempo Real Introducción al Lenguaje de Programación Ada Mario Aldea Rivas Departamento de Electrónica y Computadores Universidad de Cantabria GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 1 1. El lenguaje Ada Ada (en honor de Lady Augusta Ada Byron) Lenguaje inspirado en Pascal Creado en 1983 (Ada 83) por el DoD de los EEUU - Lenguaje de propósito general - pero orientado a sistemas empotrados de tiempo real - detecta muchos errores en tiempo de compilación: facilita la creación de programas fiables Revisión en 1995 (Ada 95): versión mejorada, incluye programación orientada al objeto Nueva versión a punto de salir (Ada 06) mejoras en todos los aspectos (también en tiempo real) GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 2

Comparación con Pascal: Estructura de un programa Ada: procedure Mi_Programa is Pascal: program Mi_Programa; Max_Empleados : constant := 50; const Max_Empleados = 50; type T_Empleados is range 1.. Max_Empleados; Num_Empleados : T_Empleados := 10; procedure Un_Proc is...; -- instrucciones end Un_Proc;...; -- instrucciones end Mi_Programa; type T_Empleados=1..Max_Empleados; var Num_Empleados : T_Empleados; procedure Un_Proc;...; (* instrucciones *) end;...; { instrucciones } end. GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 3 Comparación con Pascal: Instrucciones de control Ada: if I < 0 then Negativo := True; I := Abs (I); else Negativo := False; end if; for I in 1..100 loop Suma := Suma + I; Pascal: if I < 0 then Negativo := True; I := Abs (I); end else Negativo := False; for I:=1 to 100 do Suma := Suma + I; loop Anadir_Gota; Medir_Nivel (En_Nivel_Mx); exit when En_Nivel_Mx; repeat Anadir_Gota; Medir_Nivel (En_Nivel_Mx); until En_Nivel_Mx; GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 4

Comparación con Pascal: Procedimientos y funciones Ada: Pascal: procedure Suma (A, B : in Integer; S : out Integer) is S := A + B; end Suma; function Area (R : Float) return Float is PI : constant := 3.141592; return PI * R * R; end Area; procedure Suma (A, B : Integer; S : var Integer); S := A + B; end; function Area (R : Real): Real; const PI : 3.141592; Area := PI * R * R; end; GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 5 Comparación con Pascal: Entrada/Salida Ada: Pascal: with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure Mi_Programa is N : Integer; Put ("Introduce número..."); Get (N); Skip_Line; Put ("Has escrito el "); Put (N); New_Line; -- o también: Put_Line ("Has escrito el " & Integer'Image(N)); end Mi_Programa; program Mi_Programa; var N : Integer; Write ( Introduce número... ); Readln (N); Writeln ( Has escrito el, N); end. GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 6

Tipos numéricos Definición de tipos: type Nota_Examen is range 0.. 10; type Nota_Con_2_Decimales is digits 2 range 0.0.. 10.0; Declaración de variables y constantes I : Integer; Precio : Float; Nota : Nota_Examen; Nota_Inicial : Nota_Examen := 5; Nota_De_Corte : constant Nota_Con_2_Decimales := 5.0; Ejemplos de uso: I := I + 1; Precio := 10.0 * Float (I); GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 7 Arrays Definición de tipos: type Notas_Alumnos is array (1.. N) of Nota_Examen; Declaración de variables y constantes: Diez_Numeros : array (1.. 10) of Integer; Notas : Notas_Alumnos := (others => 5); -- valor inicial Vector : constant array (1.. 10) of Float := (3 => 4.0, others => 3.0); Ejemplos de uso: for I in Notas Range loop Notas (I) := Notas (I) + 1; Diez_Numeros := (others => 1); GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 8

Strings Definición de tipos: type Nombre_Cliente is new String (1.. 15); Declaración de variables y constantes: Nombre : Nombre_Cliente := "Pepe García "; Direccion : String (1.. 30); Saludo : constant String := "Hola!"; Ejemplos de uso: Nombre (4) := 'a'; -- Ahora Nombre es Pepa García Nombre (1.. 4) := "Jose"; -- Ahora Nombre es -- Jose García N := Nombre Length; -- N vale 15 Direccion := "General Dávila"; -- Error: no tiene -- 30 caracteres!! hay que completar hasta 15 caracteres GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 9 Registros Definición de tipos: type Ficha_Cliente is record Nombre : Nombre_Cliente; Edad : Integer; end record; Declaración de variables y constantes: Cliente1 : Ficha_Cliente; Cliente_Fijo : constant Ficha_Cliente := (Nombre => "José García ", Edad => 20); Cliente_Vacio : Ficha_Cliente := (Nombre => (others => ' '), Edad => 0); Ejemplos de uso: Cliente_Vacio.Nombre (1.. 7) := "Antonio"; Cliente1 := ("Pepa García ", 20); GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 10

Instrucción condicional lógica (if) Forma simple: if I < 0 and not Neg then I := 0; end if; Con else: if Valor in 50.. 70 then Valor correcto := True; Put_Line ("OK"); else Valor_Correcto := False; end if; Forma múltiple: if Nivel > 50.0 then Activa_Alarma (Grave); elsif Nivel > 40.0 then Activa_Alarma (Media); elsif Nivel > 30.0 then Activa_Alarma (Leve); else Funcionamiento_Normal; end if; GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 11 Instrucción condicional discreta (case) Cubre todos los casos: case Hoy is when Lunes Martes Jueves => Trabajo; when Miercoles => Trabajo; Futbol; when Viernes => Trabajo; Salir; when Sabado => Salir; when Domingo => null; end case; No cubre todos los casos: Nota : Integer; case Nota is when 0.. 4 => Suspenso; when 5.. 6 => Aprobado; when 7 8 => Notable; when 9.. 10 => Sobresaliente; when others => Nota_Incorrecta; end case; como no se cubren todos los valores es obligatorio poner "others" GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 12

Lazos Lazo simple: for I in 1..100 loop Suma := Suma + I; Lazos y arrays: for I in Vector range loop Suma := Suma + Vector (I); Orden inverso: for J in reverse 1..10 loop...; Con condición de salida: loop Suma := Suma + N; exit when Suma > 100; N := N + 1; Lazo while: while Suma <= 100 loop J := J + 2; Suma := Suma + J; GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 13 Procedimientos y funciones Parámetros "in" y "out": procedure Resta (Minuendo : Float; Sustrayendo : in Float; Resultado : out Float) is Resultado := Minuendo - Sustrayendo; end Resta; si no se pone nada es "in" Llamada a un procedimiento: Resta (14, 12, R); Resta (Minuendo => 14, Sustrayendo => 12, Resultado => R); Resta (Sustrayendo => 12, Minuendo => 14, Resultado => R); mejor así, para evitar confusiones si se cambia el orden no pasa nada GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 14

Procedimientos y funciones (cont.) Parámetros "out": procedure Incrementa (Valor : in out Integer; Incremento : in Integer) is Valor := Valor + Incremento; end Incrementa; Funciones: function Suma (A, B : in Integer) return Integer is return A + B; end Suma; Llamada a una función: S := Suma (4, C); las funciones sólo pueden tener parámetros "in" GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 15 Práctica de programación en Ada: Juego del ahorcado Completar el programa que se muestra a continuación: with MaRTE_OS; with Text_IO; use Text_IO; procedure Ahorcado is subtype Palabra is String (1.. 20); Objetivo : Palabra; -- palabra a acertar Acertadas : Palabra := (others => '_'); -- palabra -- con las letras acertadas en su sitio y con -- '_' en las letras que faltan por acertar Long_Palabra : Integer; -- Longitud de la palabra -- objetivo GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 16

Práctica de programación en Ada: Juego del ahorcado (cont.) procedure Busca_Aciertos (Objetivo : Palabra; Long_Palabra : Integer; Letra : Character; Acertadas : in out Palabra; Acierto : out Boolean) is -- Comprueba si Letra está en Objetivo, en caso -- afirmativo retorna True en Acierto. Además -- marca en Acertadas las letras que se han -- acertado...; end Busca_Aciertos; GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 17 Práctica de programación en Ada: Juego del ahorcado (cont.) function Todas_Acertadas (Acertadas : Palabra; Long_Palabra : Integer) return Boolean is -- Retorna true cuando todas las letras han sido -- acertadas. Esto puede saberse porque no hay -- ningún _ en los Long_Palabra primeros -- caracteres de Acertadas...; end Todas_Acertadas; GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 18

Práctica de programación en Ada: Juego del ahorcado (cont.) -- Pide palabra objetivo (con su longitud) Get_Line (Objetivo, Long_Palabra); -- Bucle de intentos loop -- Muestra palabra 'Acertadas' -- Pide letra Busca_Aciertos (Objetivo, Long_Palabra, Letra, Acertadas, Acierto); -- Indica si ha acertado o fallado (incrementa el -- contador de fallos cuando haya fallado) exit when Todas_Acertadas (Acertadas, Long_Palabra) or alcanzado el límite de fallos; -- Muestra palabra objetivo e indica si ganó o perdió end Ahorcado; GRUPO DE COMPUTADORES Y TIEMPO REAL Mario Aldea Rivas 19