02.08.2013 Views

Tema 3 - OCW

Tema 3 - OCW

Tema 3 - OCW

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Metodología y Tecnología de la<br />

Programación<br />

<strong>Tema</strong>rio<br />

Curso 2008/09<br />

<strong>Tema</strong> 3. Elementos Básicos de la<br />

Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

2<br />

1


Introducción<br />

• PROGRAMACIÓN IMPERATIVA<br />

• Programa: lista de instrucciones<br />

u órdenes elementales que han<br />

de ejecutarse una tras otra en el<br />

mismo orden <br />

• Modelo de máquina de von Neumann:<br />

– Procesador (elemento de control)<br />

– Memoria (almacenamiento: instrucciones y datos)<br />

<strong>Tema</strong>rio<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3<br />

4<br />

2


<strong>Tema</strong>rio<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

Pascal<br />

Modula-2<br />

Java<br />

Lenguaje de Especificación de<br />

Algoritmos en Pseudocódigo<br />

Basic<br />

EAP<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables,<br />

Expresiones<br />

3.1.1 Identificadores<br />

Un identificador es un nombre que se le da a un objeto en una especificación. El nombre<br />

puede ser simbólico (símbolos especiales predefinidos en el lenguaje, por ejemplo +) o<br />

alfanumérico (formado por letras y dígitos) y éste a su vez puede ser predefinido por el<br />

lenguaje (por ejemplo DIV), o definido por el usuario, debiendo comenzar siempre por una<br />

letra.<br />

Ejemplo 3.1 Identificadores válidos y no válidos<br />

Identificadores válidos: nombre, DIV, año2002, AsignaturasMatriculadas<br />

Identificadores no válidos: 4curso, ?comprobado, 2002, Dia del Mes<br />

Podemos definir un identificador como la terna I = < N, T, V >, donde N es el nombre del<br />

identificador, T su tipo de dato, y V el valor que tiene.<br />

Ejemplo 3.2 Identificador expresado por medio de su terna<br />

I = < X, Entero, 7 > es el identificador X, de tipo Entero, con el valor 7<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

C<br />

5<br />

6<br />

3


3.1 Identificadores, Constantes, Variables,<br />

Expresiones<br />

3.1.2 Constantes<br />

Una constante es un caso especial de identificador cuyo valor no varía, es decir, es un<br />

literal. La sintaxis de declaración de constante es:<br />

Constantes<br />

∈ ← <br />

Ejemplo 3.3 Declaración y asignación del valor 2002 a la constante del año actual<br />

Constantes<br />

añoActual ∈ Entero ← 2002<br />

Podemos adelantar que una constante pertenecerá a un cierto de tipo de dato concreto, en<br />

particular, a aquel que lo represente de manera total usando la menor especificación posible<br />

de tipo de dato por parte del lenguaje de programación empleado a no ser que se establezca<br />

otro de manera explícita.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables,<br />

Expresiones<br />

3.1.3 Variables (I)<br />

El concepto de variable está directamente asociado a la memoria del computador. Una<br />

variable es un caso especial de identificador cuyo valor puede variar.<br />

Es decir, representará un valor almacenado en memoria que se puede modificar en cualquier<br />

momento (y que será el nuevo valor que estará almacenado en ella a partir de ese momento)<br />

o conservar para ser usado tantas veces como se desee. La sintaxis de declaración de variable<br />

es:<br />

Variables<br />

∈ <br />

El tipo de dato asociado a una variable limita el conjunto de datos que puede almacenar así<br />

como las operaciones aplicables sobre esa variable. Así, una variable que pertenece a un tipo<br />

de dato ENTERO no podrá almacenar datos de tipo REAL ni le sería aplicable una operación<br />

conducente a calcular cuál es su parte decimal.<br />

Todas las variables han de ser declaradas en el programa antes de ser utilizadas. Varias<br />

variables de un mismo tipo pueden ser declaradas en la misma instrucción de declaración.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

7<br />

8<br />

4


3.1 Identificadores, Constantes, Variables,<br />

Expresiones<br />

3.1.3 Variables (II)<br />

Ejemplo 3.4 Declaración de variables y sus tipos de datos asociados<br />

Variables<br />

edad ∈ ENTERO<br />

altura, anchura, profundidad ∈ REAL<br />

Asimismo, toda variable ha de ser inicializada antes de poder hacer uso de ella, lo que<br />

significa darle un cierto valor por primera vez. Esto es necesario, por ejemplo, cuando una<br />

variable aparece como operando en la parte derecha de una expresión de asignación.<br />

Ejemplo 3.5 Declaración e Inicialización de variables (con errores)<br />

Constantes<br />

Pi ∈ REAL ← 3.14<br />

Variables<br />

radio ∈ NATURAL<br />

Acciones<br />

area ← Pi * radio 2<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables,<br />

Expresiones<br />

3.1.4 Expresiones (I)<br />

Una expresión es cualquier combinación válida de operandos y operadores permitidos en el<br />

lenguaje. La situación típica de aparición de expresiones será en la sentencia de asignación.<br />

Su sintaxis es:<br />

Acciones<br />

← <br />

Ejemplo 3.6 Sentencia de asignación de una expresión a una variable<br />

Acciones<br />

Resultado ← 34 * 6 + 13 / 7<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

9<br />

10<br />

5


3.1 Identificadores, Constantes, Variables,<br />

Expresiones<br />

3.1.4 Expresiones (II)<br />

Un caso especial de asignación será aquel en el que aparece la misma variable tanto en la<br />

parte izquierda como en la parte derecha de una sentencia de asignación. La sentencia no ha<br />

de ser tomada como una ecuación matemática al uso, sino que, la parte derecha, donde la<br />

variable (NumDias) aparece como operando, ha de ser evaluada en primer lugar y, una vez<br />

hallado su valor, éste se asignará a la posición de memoria que representa la variable que<br />

aparece también en la parte izquierda de la misma:<br />

NumDias ← NumDias + 31<br />

Es importante que a la hora de evaluar expresiones nos fijemos en la compatibilidad de los<br />

tipos de datos que aparecen en la misma. Esta compatibilidad nos dice, de manera general,<br />

que sólo pueden ser operadas entre sí variables pertenecientes a un mismo tipo de dato. Así<br />

la expresión siguiente (recordar ejemplo 3.5) sufre incompatibilidad de tipos :<br />

area ← Pi * radio 2<br />

<strong>Tema</strong>rio<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

11<br />

12<br />

6


3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

Introducción (I)<br />

Los algoritmos que vamos a ver a lo largo del curso manipulan valores que pertenecen a un<br />

conjunto o clase de valores identificados mediante lo que se llama un tipo de dato. Por tanto,<br />

un tipo de dato es la explicitación de un conjunto de valores, denominado dominio, sobre el<br />

cual se pueden realizar un conjunto de operaciones.<br />

Ejemplo 3.7 Tipo de Dato<br />

El tipo de dato edad podría estar representado por los valores pertenecientes a un<br />

subconjunto de los valores de tipo natural. Las operaciones aplicables sobre edad podrían ser<br />

las de MOSTRAR, INCREMENTAR e INTERVALO (entre dos edades), etc.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

Introducción (II)<br />

Para poder tratar con un tipo de dato es necesario explicitar su dominio y sus operaciones<br />

aplicables. En el caso de que el dominio sea pequeño podemos definirlo por extensión<br />

(enumeración), en caso contrario lo definiremos por comprensión (las propiedades del<br />

conjunto de valores del dominio).<br />

Ejemplo 3.8 Tipo de Dato Paleta de Colores<br />

El dominio del tipo de dato PaletaColores puede estar definido por el conjunto {blanco,<br />

amarillo, naranja, rojo, violeta, azul, verde, negro}, que sería por extensión.<br />

Ejemplo 3.9 Tipo de Dato Secuencia de Caracteres<br />

El dominio del tipo de dato SecuenciaCaracteres puede estar definido de manera recursiva<br />

como:<br />

::= ⏐ <br />

::= a ⏐ b ⏐ ... ⏐ z ⏐ A ⏐ B... ⏐ Z<br />

que sería por comprensión.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

13<br />

14<br />

7


3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

Introducción (III)<br />

En cualquier lenguaje de programación, así como en un lenguaje de especificación de<br />

algoritmos como es EAP, se parte de un conjunto de tipos de datos predefinidos, a partir de<br />

los cuales, se pueden crear nuevos tipos de datos. Los tipos de datos predefinidos en el<br />

lenguaje EAP son:<br />

Natural<br />

Entero<br />

Real<br />

Carácter<br />

Booleano<br />

Todos ellos son de tipo escalar; un tipo de dato escalar es aquel cuyo dominio presenta una<br />

propiedad de orden, un mínimo y un máximo.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

3.2.1 Tipos Natural y Entero (I)<br />

El tipo Entero representa el conjunto de los números enteros, incluyendo los límites de<br />

infinito negativo y positivo: -∞, ..., -1, 0, 1, ..., ∞. El tipo Natural representa el conjunto de<br />

los enteros positivos: 0, 1, ..., ∞.<br />

Las operaciones aplicables sobre Entero y Natural son las principales del cálculo aritmético y<br />

relacional de los números enteros y las podemos clasificar en:<br />

• Operaciones Unarias. Las operaciones unarias de los enteros son la explicitación de<br />

signo, sólo aplicable a Entero, el sucesor de un entero (Suc) y su predecesor (Pred). Su<br />

sintaxis es:<br />

::= <br />

::= ⏐ Suc ⏐ Pred<br />

::= - ⏐ +<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

15<br />

16<br />

8


3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

3.2.1 Tipos Natural y Entero (II)<br />

• Operaciones Binarias. Las operaciones binarias aplicables a los enteros<br />

están agrupadas en aritméticas y relacionales. Las aritméticas son la<br />

adición (+), substracción (-), multiplicación (*), cociente de la división<br />

(div) y resto de la división (mod); las relacionales son la igualdad (=),<br />

desigualdad ( ó ≠), mayor que (>), menor que (= ó ≥) y menor o igual que ( ⏐ < ⏐ >= ⏐


3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

3.2.2 Tipo Real (II)<br />

• Operaciones Binarias. Las operaciones binarias aplicables a los reales están<br />

agrupadas en aritméticas y relacionales. Las aritméticas son la adición (+),<br />

substracción (-), multiplicación (*) y división (/); las relacionales son la<br />

igualdad (=), desigualdad (), mayor que (>), menor que (=) y menor o igual que ( ⏐ < ⏐ >= ⏐


3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

3.2.3 Tipo Carácter (II)<br />

.<br />

Las operaciones aplicables sobre Carácter son:<br />

• Operaciones Unarias. Son operaciones de transferencia (conversión). Su<br />

sintaxis es:<br />

Ord(car). Devuelve el código numérico asignado al carácter.<br />

Chr(num). Devuelve el carácter asociado el código numérico.<br />

• Operaciones Binarias. Las operaciones binarias aplicables a los Carácter son<br />

las operaciones relacionales aplicables a los enteros, previamente obtenidos<br />

los códigos numéricos de los operandos.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

3.2.4 Tipo Booleano (I)<br />

El tipo Booleano o Lógico corresponde a los valores del álgebra de Boole, es decir, una<br />

estructura algebraica del tipo que cumple las leyes conmutativa, de identidad e inversa. En la<br />

Tabla 3.1 se muestran dichas leyes. A partir de las leyes principales se derivan otras como<br />

son la asociativa en la intersección y disyunción, la de absorción, dominación, de doble<br />

complementario y la de De Morgan.<br />

Conmutativas x ∨ y = y ∨ x<br />

x ∧ y = y ∧ x<br />

Distributivas x ∧ ( y ∨ z)<br />

= ( x ∧ y)<br />

∨ ( x ∧ z)<br />

x ∨ ( y ∧ z)<br />

= ( x ∨ y)<br />

∧ ( x ∨ z)<br />

de Identidad x ∨ 0 = x<br />

x ∧1 = x<br />

Inversas x ∨ ¬ x = 1<br />

x<br />

∧ ¬ x = 0<br />

Tabla 3.1: Propiedades del álgebra de Boole.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

21<br />

22<br />

11


3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

3.2.4 Tipo Booleano (II)<br />

El dominio del tipo Booleano es el conjunto ordenado de las constantes lógicas Verdadero y<br />

Falso, siendo Min(Lógico)=Falso y Max(Lógico)=Verdadero. Las operaciones aplicables<br />

sobre Booleano son las mismas del cálculo del álgebra de Boole:<br />

• Operaciones Unarias. La negación es la única operación unaria aplicable a Booleano.<br />

Su sintaxis es:<br />

::= <br />

::= ¬<br />

• Operaciones Binarias. Las operaciones binarias aplicables a los Booleano son la<br />

conjunción (∧) y la disyunción (∨).<br />

::= ⏐<br />

<br />

::= ∧⏐ ∨<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.2 Tipos de Datos Simples: Natural, Entero,<br />

Real, Carácter, Booleano<br />

Ejercicio: Tipos de Datos Simples<br />

Elegir los tipos de datos adecuados para identificar un producto comercial para el<br />

cual hay que indicar las siguientes características<br />

• Año de fabricación<br />

• Precio en pesetas<br />

• Precio en euros<br />

• Indicación de si el producto está agotado<br />

• Departamento al que pertenece (C: Congelados; T: Textil; F: Ferretería)<br />

A continuación dar valores iniciales a cada una de dichas características. Para<br />

conocer el precio en euros habrá que calcularlo necesariamente a partir de su<br />

precio en pesetas usando el tipo de cambio oficial.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

23<br />

24<br />

12


<strong>Tema</strong>rio<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

Cadena, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango,<br />

Registro, Vector, Cadena, Matriz, Secuencia, Fichero<br />

Introducción (I)<br />

Partiendo de los tipos de datos simple y una serie de estructuras se pueden crear nuevos tipos<br />

de datos, algunos de tipo escalar y otros estructurados. Los tipos de datos estructurados son<br />

aquellos que se definen mediante composición de tipos de datos simples.<br />

Para poder llegar a definir tipos de datos estructurados se puede utilizar una definición de<br />

tipo, que es un identificador que representa un nuevo tipo de dato que posteriormente puede<br />

particularizarse. Su sintaxis es la siguiente:<br />

Tipos<br />

= <br />

El nombre de tipo es un identificador o un identificador seguido de varias variables de tipo<br />

(separadas por comas, encerradas en paréntesis).<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

25<br />

26<br />

13


3.3 Tipos de Datos Estructurados: Enumerado, Subrango,<br />

Registro, Vector, Cadena, Matriz, Secuencia, Fichero<br />

Introducción (II)<br />

La definición de tipo más sencilla que podemos encontrar sería la propia redefinición de un tipo<br />

de dato simple, también conocido como tipo Sinónimo, ya que sencillamente trata de dar un<br />

nombre distinto a uno ya existente. El nuevo tipo tendrá el mismo conjunto de valores y de<br />

operaciones aplicables que el tipo original. Su sintaxis es:<br />

Tipos<br />

= <br />

Ejemplo 3.11 Declaración de un tipo Sinónimo<br />

Tipos<br />

Edad = Entero<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango,<br />

Registro, Vector, Cadena, Matriz, Secuencia, Fichero<br />

Introducción (III)<br />

3.3.1 Tipo Enumerado<br />

3.3.2 Tipo Subrango<br />

3.3.3 Tipo Registro<br />

3.3.4 Tipo Vector<br />

3.3.5 Tipo Cadena<br />

3.3.6 Tipo Matriz<br />

3.3.7 Tipo Secuencia<br />

3.3.8 Tipo Fichero<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

27<br />

28<br />

14


3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.1 Tipo Enumerado<br />

El tipo de dato Enumerado es una colección de elementos del mismo tipo en el cual sus<br />

elementos son constantes, y una variable de este tipo sólo puede tomar en un momento dado<br />

un valor de entre ellos. Su sintaxis es:<br />

Tipos<br />

= ⏐ ... ⏐ <br />

El tipo de dato Enumerado dispone de orden relativo de sus elementos, pudiéndose utilizar<br />

sobre ellos las operaciones Suc, Pred y Ord (que obtienen el elemento siguiente, anterior y<br />

la posición del elemento en la secuencia, respectivamente).<br />

Ejemplo 3.12 Declaración del tipo Día de la Semana<br />

Tipos<br />

DiaSemana = Lunes ⏐ Martes ⏐ Miércoles ⏐ Jueves ⏐ Viernes ⏐ Sábado ⏐ Domingo<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.2 Tipo Subrango<br />

El tipo de dato Subrango es un caso especial del tipo Sinónimo, pero que limita la<br />

declaración a un subconjunto de valores del tipo original. El tipo de dato Subrango<br />

contiene los valores consecutivos de un tipo Enumerado o Entero comprendidos entre su<br />

valor inferior y el superior, ambos incluidos. Su sintaxis es:<br />

Tipos<br />

= .. <br />

Ejemplo 3.13 Declaración del tipo de dato Dígito<br />

Tipos<br />

Dígito = 0..9<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

29<br />

30<br />

15


3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.3 Tipo Registro (I)<br />

El tipo de dato Registro es una colección de un número fijo de componentes que pueden<br />

ser de distinto tipo en los que cada componente, denominado campo, está representado con<br />

un identificador y un tipo base. Su sintaxis es:<br />

Tipos<br />

= [ ∈ ,<br />

...,<br />

∈ ]<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.3 Tipo Registro (II)<br />

Ejemplo 3.14 Declaración del registro Fecha<br />

Tipos<br />

Fecha = [Dia ∈ 1..31,<br />

Mes ∈ 1..12,<br />

Año ∈ 1900..2100]<br />

Para acceder a cada campo del registro se utilizará el identificador del tipo seguido de un<br />

punto y el nombre del campo en cuestión.<br />

Por ejemplo, para acceder a los diferentes campos del registro Fecha se utilizan las<br />

notaciones f.Dia, f.Mes y f.Año, respectivamente, donde f es una variable de tipo Fecha.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

31<br />

32<br />

16


3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.4 Tipo Vector<br />

El tipo de dato Vector permite definir un número fijo de elementos, todos ellos del mismo<br />

tipo base, a los cuales se accede mediante un índice (el identificador de su posición en la<br />

secuencia). Su sintaxis es:<br />

Tipos<br />

= Vector [] ∈ <br />

::= ⏐ Entero<br />

Ejemplo 3.15 Declaración de un vector de las facturaciones de los meses del año<br />

Tipos<br />

Facturaciones = Vector [1..12] ∈ Entero<br />

Para acceder a cada elemento del vector se utilizará el identificador del vector seguido del<br />

índice del elemento en cuestión entre corchetes.<br />

Por ejemplo, para acceder al octavo elemento del vector Facturaciones se utiliza la notación<br />

fac[8] donde fac es una variable de tipo Facturaciones.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.5 Tipo Cadena (I)<br />

Un String o Cadena es una clase especial de Vector cuyos elementos que lo componen<br />

son siempre caracteres. El dominio del tipo de dato Cadena está formado por todas las<br />

posibles secuencias de caracteres con longitud igual o menor a la longitud del vector de<br />

caracteres definido. Su sintaxis es:<br />

Tipos<br />

= Vector [] ∈ Caracter<br />

::= ⏐ Entero<br />

Ejemplo 3.16 Declaración de un string Palabra<br />

Tipos<br />

Palabra = Vector [1..20] ∈ Caracter<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

33<br />

34<br />

17


3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.5 Tipo Cadena (II)<br />

El tipo String goza de una serie de operaciones particulares entre las que destacan las<br />

siguientes:<br />

• Concatenar(Cadena1,Cadena2). La operación de concatenación, devuelve una cadena<br />

nueva, formada por todos los elementos de la cadena Cadena1 y los de la cadena Cadena2.<br />

• SubCadena(Cadena,PosInicial,PosFinal). La operación SubCadena obtiene la cadena<br />

encerrada entre las posiciones PosInicial y PosFinal. Ejemplo: SubCadena([a b c d e], 0, 2)<br />

obtiene la subcadena [a b c].<br />

• Insertar(Cadena1,Cadena2,PosInicial). La operación de insertar inserta la cadena Cadena2<br />

en la cadena Cadena1 a partir de la posición PosInicial. Ejemplo: Insertar([a b c d e], [f g], 1)<br />

obtiene la cadena [a f g b c d e].<br />

• Longitud(Cadena). La operación longitud obtiene el número de elementos de la secuencia<br />

Cadena. Ejemplo: Longitud([a b c d e]) devuelve 5.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.6 Tipo Matriz<br />

El tipo de datos Matriz es la versión multidimensional del tipo de dato Vector. Su sintaxis<br />

es:<br />

Tipos<br />

= Matriz [, ..., ] ∈ <br />

::= ⏐ Entero<br />

Ejemplo 3.17 Declaración de los estados del juego Tres en Raya<br />

Tipos<br />

EstadoCasilla = Cruz ⏐ Círculo ⏐ Vacío<br />

Tablero = Matriz [1..3, 1..3] ∈ EstadoCasilla<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

35<br />

36<br />

18


3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

3.3.7 Tipo Secuencia<br />

Una Secuencia es una lista de elementos donde el orden de los elementos tiene<br />

importancia. El tipo de dato Secuencia es aquel cuyo dominio es el formado por todas las<br />

posibles combinaciones que se pueden formar a partir de los elementos que constituyen la<br />

secuencia.<br />

Ejemplo: Una secuencia se especifica como una lista de elementos encerrados por un<br />

paréntesis. Por ejemplo: (a b c d e). [LISP]<br />

3.3.8 Tipo Fichero<br />

Los Ficheros son estructuras de datos almacenadas en memoria externa que pueden ser<br />

manipulados desde un programa, estableciendo una conexión entre dichos ficheros y las<br />

variables de tipo fichero definidas en el programa.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

Ejercicio: Tipos de Datos Estructurados<br />

Diseñar los Tipos de Datos adecuados para la siguiente aplicación:<br />

Se desea tener un registro de la actividad de una Clínica Veterinaria.<br />

Necesitamos almacenar, para cada mascota que visite la clínica, la<br />

siguiente información: código, nombre, tipo de animal (doméstico, salvaje,<br />

exótico) y número de visitas realizadas a la clínica. Se calcula que dicha<br />

clínica manejará un promedio de unos 100 animales. En ocasiones será<br />

interesante ordenar esta información de acuerdo a alguna característica<br />

propia de las mascotas (código o tipo de animal, por ejemplo).<br />

Realizar además las instrucciones necesarias para:<br />

- Contabilizar una nueva visita de una mascota<br />

- Recuperar el nombre de una cierta mascota<br />

- Recuperar la inicial del nombre de una cierta mascota<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

37<br />

38<br />

19


3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro,<br />

Vector, Cadena, Matriz, Secuencia, Fichero<br />

Ejercicios: Tipos de Datos Simples y Estructurados<br />

• Diseñar un Tipo de Dato adecuado para representar los 49 números de la Lotería<br />

Primitiva con la indicación de si están marcados o no.<br />

• Diseñar un Tipo de Dato adecuado para representar una colección de Números<br />

Racionales. A continuación realizar la operación Suma de Racionales.<br />

• Diseñar el Tipo de Dato HoraActual compuesto de los elementos horas, minutos y<br />

segundos. Convertir una variable del tipo HoraActual a segundos y viceversa.<br />

• Diseñar el tablero para competir en red al Juego de los Barcos.<br />

• Diseñar el Tipo de Dato NumeroBinario y convertir una variable de tipo<br />

NumeroBinario a Decimal y viceversa.<br />

<strong>Tema</strong>rio<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

39<br />

40<br />

20


3.4 Estructura Secuencial<br />

Estructuras básicas de la programación imperativa.<br />

La estructura secuencial es la estructura más sencilla para representar las acciones de un<br />

algoritmo. Dichas acciones se describen y se ejecutan de forma sucesiva y en el mismo<br />

orden en el que aparecen.<br />

Su sintaxis es:<br />

Inicio<br />

Fin<br />

<br />

...<br />

<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.4 Estructura Secuencial<br />

Ejemplo 3.18 Estructura secuencial de un programa<br />

Constantes<br />

∅<br />

Tipos<br />

∅<br />

Variables<br />

area, base, altura ∈ Real<br />

Acciones<br />

base ← 2.5<br />

altura ← 5.0<br />

area ← (base * altura) / 2<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

41<br />

42<br />

21


3.5 Estructuras de Control de Flujo<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

La Programación Estructurada es una metodología que fundamentalmente trata<br />

de construir programas que sean fácilmente comprensibles. Un programa no sólo<br />

debe funcionar correctamente sino que además debe estar escrito de manera que<br />

se facilite su comprensión posterior.<br />

La Programación Estructurada sugiere el uso de tres esquemas generales<br />

denominados secuencial (visto en el apartado anterior), iterativo y condicional,<br />

con los cuales se puede llegar a desarrollar de forma comprensible un programa tan<br />

complicado como sea necesario.<br />

SECUENCIAL + ITERATIVO + CONDICIONAL<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.5 Estructuras de Control de Flujo<br />

3.5.1 Estructura de Control Iterativa<br />

Una estructura iterativa (también denominada bucle) engloba una<br />

secuencia de acciones que se describen una sola vez, pero que se pueden<br />

ejecutar varias veces. Las acciones englobadas se llaman CUERPO del<br />

bucle y cada ejecución del cuerpo se denomina ITERACIÓN.<br />

Las estructuras iterativas son:<br />

MIENTRAS REPETIR PARA<br />

while repeat for<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

43<br />

44<br />

22


3.5 Estructuras de Control de Flujo<br />

3.5.1.1 Estructura Iterativa Mientras<br />

Mientras Hacer<br />

<br />

Fin Mientras<br />

3.5.1.3 Estructura Iterativa Para<br />

3.5.1.2 Estructura Iterativa Repetir<br />

Repetir<br />

<br />

Hasta <br />

Para ← .. Hacer<br />

<br />

Fin Para<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.5 Estructuras de Control de Flujo<br />

3.5.1.1 Estructura Iterativa Mientras<br />

n ← 1<br />

Mientras n ≤ 10 Hacer<br />

n ← n + 1<br />

Fin Mientras<br />

3.5.1.3 Estructura Iterativa Para<br />

Para i ← 1 .. 10 Hacer<br />

Imprimir(i)<br />

Fin Para<br />

3.5.1.2 Estructura Iterativa Repetir<br />

n ← 1<br />

Repetir<br />

n ← n + 1<br />

Hasta n ≥ 10<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

45<br />

46<br />

23


3.5 Estructuras de Control de Flujo<br />

3.5.1 Estructura de Control Iterativa<br />

condición<br />

Sí<br />

cuerpo<br />

No<br />

cuerpo<br />

condición<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

No Sí<br />

Figura 3.1 Estructura Iterativa Mientras Figura 3.2 Estructura Iterativa Repetir<br />

3.5 Estructuras de Control de Flujo<br />

Ejemplo 3.19 Factorial de un número entero (Numero) mediante la estructura iterativa Para<br />

Variables<br />

Numero, Resultado, I ∈ Entero<br />

Acciones<br />

Resultado ← 1<br />

Para I ← 2..Numero Hacer<br />

Resultado ← Resultado * I<br />

Fin Para<br />

Ejemplo 3.20 Factorial de un número entero (Numero) mediante la estructura iterativa Mientras<br />

Variables<br />

Numero, Resultado, I ∈ Entero<br />

Acciones<br />

Resultado ← 1<br />

I ← 2<br />

Mientras I ≤ Numero Hacer<br />

Resultado ← Resultado * I<br />

I ← I + 1<br />

Fin Mientras<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

47<br />

48<br />

24


3.5 Estructuras de Control de Flujo<br />

Ejemplo 3.21 Sumar de los elementos de un vector mediante la estructura iterativa Para<br />

Tipos<br />

VectorEnteros = Vector[1..N] ∈ Entero<br />

Variables<br />

I ∈ 1..N<br />

Acciones<br />

Resultado ← 0<br />

Para I ← 1..N Hacer<br />

Resultado ← Resultado + V[I]<br />

Fin Para<br />

Ejemplo 3.22 Elevar al cuadrado los elementos de un vector mediante la estructura iterativa Para<br />

Variables<br />

I ∈ Entero<br />

Acciones<br />

Para I ← 1..N Hacer<br />

Vector[I] ← Vector[I] * Vector[I]<br />

Fin Para<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.5 Estructuras de Control de Flujo<br />

3.5.2 Estructura de Control Condicional<br />

Una estructura condicional (o de selección) consiste en ejecutar una<br />

acción u otra dependiendo de una determinada condición que se analiza<br />

a la entrada de la estructura. La condicional es una de las expresiones más<br />

importantes para el control de un algoritmo. Las dos estructuras de control<br />

condicional más importantes son Si y Según.<br />

Las estructuras condicionales son:<br />

SI SEGÚN<br />

if case<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

49<br />

50<br />

25


3.5 Estructuras de Control de Flujo<br />

3.5.2.1 Estructura Condicional Si<br />

Si Entonces<br />

<br />

Sino<br />

<br />

Fin Si<br />

La expresión unicondicional es un caso particular de la (bi)condicional, en la que<br />

el segundo grupo de acciones es vacío:<br />

Si Entonces Si Entonces<br />

⇒ <br />

Sino Fin Si<br />

∅<br />

Fin Si<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.5 Estructuras de Control de Flujo<br />

3.5.2.2 Estructura Condicional Según<br />

Según Hacer<br />

{ → }<br />

Sí<br />

{ → }<br />

{ → }<br />

En Otro Caso <br />

Fin Según Acción A<br />

condición<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

No<br />

Acción B<br />

Figura 3.3 Estructura Condicional Si<br />

51<br />

52<br />

26


3.5 Estructuras de Control de Flujo<br />

Ejemplo 3.24 Determinación de los días de un mes mediante la estructura condicional Según<br />

Variables<br />

Mes ∈ String<br />

NumDias ∈ Natural<br />

Acciones<br />

Según Mes Hacer<br />

Febrero → NumDias ← 28<br />

Abril → NumDias ← 30<br />

Junio → NumDias ← 30<br />

Septiembre → NumDias ← 30<br />

Noviembre → NumDias ← 30<br />

En Otro Caso<br />

NumDias ← 31<br />

Fin Según<br />

<strong>Tema</strong>rio<br />

Ejemplo 3.23 Calcular si un número es par<br />

mediante la estructura condicional Si<br />

Variables<br />

Numero ∈ Natural<br />

Acciones<br />

Si (Numero Mod 2) = 0 Entonces<br />

{El número es par}<br />

Sino<br />

{El número no es par}<br />

Fin Si<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

53<br />

54<br />

27


3.6 Procedimientos y Funciones<br />

• Un PROCEDIMIENTO está formado por un conjunto de sentencias a<br />

las que se asocia un identificador, y que realizan una acción que se<br />

reconoce por los cambios que se producen en un conjunto de variables o<br />

por realizar alguna operación de entrada/salida.<br />

• Una FUNCIÓN está constituida por un conjunto de sentencias a las que<br />

se asocia un identificador y cuyo efecto se manifiesta porque producen<br />

un valor que es asignado al nombre de la función.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.6 Procedimientos y Funciones<br />

Para realizar su acción, el procedimiento o función puede recibir<br />

una serie de valores a través de un conjunto de variables parámetros<br />

que acompañan a su definición.<br />

Una vez definida una función o procedimiento, podemos usarlo en<br />

cualquier parte del programa donde necesitemos realizar la acción<br />

que desarrolla con tan solo invocarlo mediante su nombre.<br />

Dos posibles formas de entender los Procedimientos y Funciones:<br />

• Abstracción operacional …<br />

• Transferencia de control …<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

55<br />

56<br />

28


3.6 Procedimientos y Funciones<br />

• Abstracción operacional:<br />

El programa le pasa unos valores de entrada y el procedimiento realiza una acción<br />

que consiste en modificar el estado de ciertas variables o, en el caso de las<br />

funciones, que consiste en devolver un valor.<br />

e1 e2<br />

s1<br />

Procedimiento<br />

P<br />

s2<br />

...<br />

...<br />

en<br />

sm<br />

e1 e2 ...<br />

Función<br />

F<br />

Figura 3.5 Procedimientos y Funciones como Abstracciones Operacionales<br />

Para usarlos solo es necesario conocer qué valores es necesario suministrarle y qué<br />

variables modifica. Pero no nos interesa cómo hace la operación.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.6 Procedimientos y Funciones<br />

• Visión de transferencia de control:<br />

Cuando la ejecución de un programa llega a una sentencia de invocación de un<br />

procedimiento (o función), el control se transfiere hacia la primera sentencia de<br />

éste. Cuando el procedimiento llega a su final, el control se transfiere a la<br />

sentencia que sigue a aquella donde se produjo la invocación.<br />

Programa PruebaPotencia<br />

Tipos de Datos<br />

...<br />

Variables<br />

...<br />

Acciones<br />

...<br />

...<br />

Potencia(3,4)<br />

...<br />

Fin<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

s<br />

en<br />

Procedimiento Potencia (x,y)<br />

Variables<br />

...<br />

Acciones<br />

...<br />

...<br />

Fin<br />

Figura 3.5 Procedimientos y Funciones como Transferencia de Control<br />

57<br />

58<br />

29


3.6 Procedimientos y Funciones<br />

Los PROCEDIMIENTOS y FUNCIONES constan de cuatro elementos básicos:<br />

1 Identificador. Nombre que sirve para invocarlo desde cualquier parte del programa. Las<br />

funciones tendrán que ser invocadas desde una expresión ya que devuelven un valor.<br />

2 Lista de parámetros. Los parámetros son una lista de cero o varias variables que<br />

permiten la comunicación entre un procedimiento y el programa que lo usa. Cuando son<br />

declarados se especifica esta lista y cuando son invocados, es necesario que una lista de<br />

argumentos acompañe al nombre. Se realiza una correspondencia uno a uno entre<br />

parámetro y argumento, son expresiones del mismo tipo y aparecen en la misma<br />

posición.<br />

3 Cuerpo. El cuerpo es el conjunto de sentencias que corresponden a la especificación de<br />

la operación. En el caso de una función, en el cuerpo tendrá que aparecer, por lo menos<br />

una vez, el nombre de la función en la parte izquierda de una asignación. Si no sucede<br />

esto significa que la función no devuelve ningún valor.<br />

4 Entorno. Es el conjunto de variables externas al procedimiento que son accesibles y<br />

pueden ser modificadas o simplemente usadas.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.6 Procedimientos y Funciones<br />

• Cabecera de la especificación de un procedimiento:<br />

Procedimiento ( ∈ , ..., ∈ )<br />

• Cabecera de la especificación de una función:<br />

Función ( ∈ , ..., ∈ ) → <br />

Procedimiento Intercambio (↑↓a ∈ Entero, ↑↓b ∈ Entero)<br />

Variables<br />

Función Max (a ∈ Entero, b ∈ Entero) → Entero<br />

temp ∈ Entero<br />

Variables<br />

Acciones<br />

∅<br />

temp ← a<br />

Acciones<br />

a ← b<br />

Si a > b Entonces<br />

b ← temp<br />

Max ← a<br />

Sino<br />

Max ← b<br />

FinSi<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

59<br />

60<br />

30


3.6 Procedimientos y Funciones<br />

Ejercicios: Procedimientos y Funciones<br />

• Diseñar una función que calcule el mayor de tres números<br />

• Diseñar un procedimiento que imprima los elementos impares<br />

de un vector<br />

• Diseñar una función ElevaCuadrado que eleve un elemento al<br />

cuadrado<br />

• Diseñar un procedimiento que eleve al cuadrado los elementos<br />

de un vector haciendo uso de la función ElevaCuadrado<br />

<strong>Tema</strong>rio<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

61<br />

62<br />

31


3.7 Paso de Parámetros<br />

• Los parámetros son variables que permiten la comunicación entre un<br />

procedimiento o función y el código que lo utiliza, entendiendo por comunicación<br />

el intercambio en ambas direcciones.<br />

• Cada parámetro actual (parámetro con que el procedimiento es invocado), o<br />

argumento, es asociado a uno formal (parámetro con que el procedimiento es<br />

definido o declarado).<br />

Programa PruebaPotencia<br />

Tipos de Datos<br />

...<br />

Variables<br />

...<br />

Acciones<br />

...<br />

...<br />

Potencia(3,4)<br />

...<br />

Fin Parámetro actual<br />

Procedimiento Potencia (x,y)<br />

Variables<br />

...<br />

Parámetro formal<br />

Acciones<br />

...<br />

...<br />

Fin<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.7 Paso de Parámetros<br />

• Cuando hablamos de paso de parámetros nos referimos a la manera en que los<br />

valores de los argumentos son ligados a los parámetros del procedimiento. Las<br />

cuatro formas principales son:<br />

POR REFERENCIA POR VALOR<br />

POR VALOR-RESULTADO POR NOMBRE<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

63<br />

64<br />

32


3.7 Paso de Parámetros<br />

3.7.1 Paso por Valor<br />

En el paso de parámetro modo por valor (o paso por valor, representado en EAP<br />

como ↓), en el momento de la invocación del procedimiento o función se evalúa el<br />

argumento y el valor obtenido se asigna al espacio de memoria ligado al<br />

correspondiente parámetro. El procedimiento o función maneja el parámetro y los<br />

cambios realizados no son reconocidos fuera del ámbito local.<br />

Variables<br />

A ∈ Entero<br />

Procedimiento Test1(↓B ∈ Entero)<br />

Constantes<br />

∅<br />

Variables<br />

∅<br />

Acciones<br />

B ← B * B<br />

Inicio<br />

A ← 2<br />

Test1(A)<br />

Fin<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.7 Paso de Parámetros<br />

3.7.2 Paso por Referencia<br />

• Los parámetros son sólo de entrada<br />

• Cualquier cambio realizado en los<br />

valores de los parámetros formales<br />

durante la ejecución del<br />

subprograma se destruye cuando se<br />

termina el subprograma<br />

El modo por referencia (representado en EAP como ↓↑), también conocido como<br />

paso por variable, cada parámetro comparte el espacio de memoria con su<br />

correspondiente argumento. De esta manera los cambios realizados en el código<br />

son asignados a la variable.<br />

Variables<br />

A ∈ Entero<br />

Procedimiento Test2(↓↑B ∈ Entero)<br />

Constantes<br />

∅<br />

Variables<br />

∅<br />

Acciones<br />

B ← B * B<br />

Inicio<br />

A ← 2<br />

Test2(A)<br />

Fin<br />

• Se produce un ahorro de memoria,<br />

ya que los parámetros no necesitan<br />

memoria adicional, sino que utiliza<br />

la asignada a los argumentos<br />

• Los argumentos deben ser variables<br />

y no pueden ser expresiones<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

65<br />

66<br />

33


3.7 Paso de Parámetros<br />

• Ejemplo 3.32 Disponemos de la siguiente definición:<br />

Programa Ejemplo<br />

Variables<br />

i ∈ Entero<br />

a ∈ Vector [1..3] ∈ Entero<br />

Procedimiento Test (f, g ∈ Entero)<br />

Acciones<br />

g ← g+1<br />

f ← 5*i<br />

Acciones<br />

Para i ← 1 ..3 Hacer<br />

a[i] ← i<br />

Fin Para<br />

i ← 2<br />

Test(a[i],i)<br />

Escribir(a[1],a[2],a[3],i)<br />

<strong>Tema</strong>rio<br />

Lo que escribe la sentencia Escribir suponiendo cada<br />

tipo de paso de parámetro es:<br />

• Por valor: 1 2 3 2<br />

• Por referencia: 1 15 3 3<br />

• Por valor-resultado: 1 10 3 3<br />

• Por nombre: 1 2 15 3<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

67<br />

68<br />

34


3.8 Ámbito y Extensión<br />

• Los identificadores que utilizamos en los programas y sus subprogramas<br />

(procedimientos y funciones) se clasifican en dos tipos:<br />

• identificadores locales<br />

• identificadores globales<br />

• Un identificador local es aquel que está declarado y definido dentro de un<br />

subprograma, en el sentido de que está dentro de ese subprograma y es distinto de<br />

los identificadores con el mismo nombre declarados en cualquier parte del<br />

programa principal u otro subprograma. Se dice que tales identificadores son<br />

locales al subprograma en el que están declarados.<br />

• Un identificador global es aquel que está declarado para el programa o algoritmo<br />

principal, del que dependen todos los subprogramas.<br />

• La parte de programa/algoritmo en la que un identificador se define se conoce<br />

como ámbito.<br />

3.8 Ámbito y Extensión<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

• El uso de variables locales tiene muchas<br />

ventajas. En particular, hace a los<br />

subprogramas independientes, con la<br />

comunicación entre el programa<br />

principal y los subprogramas<br />

manipulados estructuralmente a través de<br />

la lista de parámetros del subprograma.<br />

• Para utilizar un procedimiento sólo<br />

necesitamos conocer lo que hace y no<br />

tenemos que estar preocupados de su<br />

diseño, es decir, de cómo está<br />

programado.<br />

• Por el contrario, las variables globales<br />

tienen la ventaja de compartir<br />

información de diferentes subprogramas<br />

sin una correspondiente entrada en la<br />

lista de parámetros.<br />

Programa demo<br />

Tipos<br />

x1 = …<br />

x2 = …<br />

Procedimiento A<br />

Tipos<br />

y1 = …<br />

y2 = …<br />

Procedimiento B<br />

Tipos<br />

z1 = …<br />

z2 = …<br />

Acciones<br />

…<br />

Acciones<br />

…<br />

Procedimiento C<br />

Variables<br />

w1 ∈ …<br />

w2 ∈ …<br />

Acciones<br />

…<br />

Acciones<br />

…<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

69<br />

70<br />

35


3.8 Ámbito y Extensión<br />

• El ámbito de un identificador es la parte de programa dónde se conoce el<br />

identificador. Si un procedimiento está definido localmente a otro procedimiento,<br />

tendrá significado sólo dentro del ámbito de ese procedimiento.<br />

A<br />

B<br />

D E<br />

C<br />

F<br />

G<br />

3.8 Ámbito y Extensión<br />

Programa demos<br />

Variables<br />

a, x, y ∈ Entero<br />

Función f(n ∈ Entero) → Entero<br />

Variables<br />

x ∈ Entero<br />

Acciones<br />

a ← 5<br />

x ← 12<br />

f ← n+a<br />

Acciones<br />

x ← 5<br />

a ← 10<br />

y ← f(x)<br />

Escribir(x,a,y)<br />

Variables Accesibles<br />

definidas en desde<br />

A A,B,C,D,E,F,G<br />

B B,C<br />

C C<br />

D D,E,F,G<br />

E E,F,G<br />

F F<br />

G G<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

• Los identificadores definidos en<br />

un ámbito son accesibles en el<br />

mismo, es decir, en todos los<br />

procedimientos interiores.<br />

• A la variable global a se puede<br />

acceder desde el programa y<br />

desde la función. Sin embargo, x<br />

identifica a dos variables<br />

distintas: una global al programa<br />

accesible desde todo él y otra<br />

local a la función.<br />

• Se escribirá la línea:<br />

5 5 10<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

71<br />

72<br />

36


3.8 Ámbito y Extensión<br />

• La extensión de una variable es el intervalo de tiempo durante el cual la variable<br />

existe, ocupa almacenamiento y es accesible.<br />

• Una variable puede existir fuera del ámbito de su declaración. En el caso del<br />

siguiente ejemplo la extensión de x p es el tiempo que dura la ejecución del<br />

programa P. Mientras que la extensión de v y x a es el intervalo de tiempo en que se<br />

ejecuta el procedimiento A.<br />

Programa P<br />

Variables<br />

x ∈ Vector [1..5] ∈ Real<br />

Acciones<br />

...<br />

A<br />

...<br />

3.8 Ámbito y Extensión<br />

Procedimiento A<br />

Variables<br />

v, x ∈ Entero<br />

Acciones<br />

...<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

• En general, se define la siguiente regla para decidir cuál es el ámbito de<br />

una declaración en un lenguaje estructurado:<br />

“El ámbito de una declaración de un identificador es todo el bloque en<br />

el que está definido, incluyendo aquellos bloques contenidos en ese<br />

bloque, excepto si el identificador es redefinido en el bloque<br />

subordinado o anidado, entendiendo bloque como la unidad de<br />

programa dónde se puede definir objetos locales que solo tienen<br />

significado dentro de ese texto.”<br />

• Normalmente, en la mayoría de lenguajes imperativos el bloque es el<br />

procedimiento o función.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

73<br />

74<br />

37


3.8 Ámbito y Extensión<br />

Ejercicio Paso Por Valor/Referencia y Ámbito: Calcular los valores finales de i, j, k, l suponiendo que<br />

los parámetros del procedimiento Test son: a) pasados en modo por valor; b) pasados en modo por<br />

referencia.<br />

Variables<br />

i, j, k, l ∈ Entero<br />

Procedimiento Test (m, n ∈ Entero)<br />

Variables<br />

l ∈ Entero<br />

Acciones<br />

m ← m + 2<br />

n ← n - 2<br />

k ← n - m<br />

l ← m + n + j + k<br />

Acciones<br />

i ← 4<br />

j ← i * 3<br />

k ← j - 1<br />

l ← k + 2<br />

Test (i, j)<br />

<strong>Tema</strong>rio<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

75<br />

76<br />

38


3.9 Gestión de Memoria<br />

• La memoria se organiza en dos zonas. Una<br />

corresponde al código del programa y la otra a los<br />

datos. Ésta a su vez está dividida en tres zonas:<br />

1. Estática: Área de memoria cuyas posiciones son<br />

asignadas a las variables globales del programa.<br />

2. Pila (stack): Empleada para gestionar el uso de<br />

los procedimientos.<br />

3. Montón (heap): Área de memoria cuyas<br />

posiciones son asignadas a las variables<br />

dinámicas.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.9 Gestión de Memoria<br />

3.9.1 Administración de Memoria Estática<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

C Ó D I G O<br />

D<br />

A<br />

T<br />

O<br />

S<br />

Memoria<br />

Estática<br />

Pila<br />

(Stack)<br />

Montón<br />

(Heap)<br />

• Cuando a una variable, al comenzar la ejecución del programa se le asigna espacio<br />

de almacenamiento y mientras dura la ejecución dicho espacio está ligado a esa<br />

variable, decimos que se trata de una variable estática.<br />

• En ciertos lenguajes de programación (Fortran o Cobol, por ejemplo) todas las<br />

variables que intervienen en el programa son estáticas, de manera que durante la<br />

ejecución del programa coexistirán en memoria las variables globales junto con las<br />

variables y datos de los procedimientos y funciones del programa.<br />

• En los lenguajes de programación imperativos las variables globales son estáticas,<br />

es decir, su extensión es la duración del programa que las declara. Pero cada<br />

procedimiento no tiene su propia área de datos, sino que existe la administración<br />

con pila propia de los lenguajes estructurados en bloques (los procedimientos y<br />

funciones).<br />

77<br />

78<br />

39


3.9 Gestión de Memoria<br />

3.9.2 Administración de Memoria basada en Pila<br />

• Por pila nos vamos a referir a la zona de la memoria<br />

que está implicada en el uso de los procedimientos,<br />

cuyo espacio se asigna y libera, como veremos,<br />

mediante operaciones de apilar y desapilar (push y<br />

pop).<br />

• Cada vez que se activa un bloque, es decir, se invoca un procedimiento o función, se<br />

añade a la pila su registro de activación (RA) y cuando acaba su ejecución, se elimina<br />

de la pila su RA.<br />

• Por RA entendemos el conjunto de información que necesita un procedimiento para<br />

su ejecución (objetos locales y parámetros) y la dirección de la instrucción donde<br />

continuará la ejecución del programa cuando finalice el procedimiento o función.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.9 Gestión de Memoria<br />

3.9.2 Administración de Memoria basada en Pila<br />

• Luego una llamada a un procedimiento P implica:<br />

1. Crear su RA<br />

2. Apilar su RA<br />

3. Transferir el control a la primera sentencia de P<br />

…y la terminación de P implica:<br />

1 Recuperar dirección de retorno (dir_ret) del RA.<br />

2 Desapilar su RA<br />

3 Transferir el control a dir_ret<br />

parám var_loc<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

Apilar Desapilar<br />

dir_ret<br />

79<br />

80<br />

40


3.9 Gestión de Memoria<br />

Ejemplo: evolución de la pila durante la<br />

ejecución de un programa<br />

parám var_loc dir_ret<br />

RA(Sub1) = a d <br />

RA(Sub2) = c d <br />

Procedimientos<br />

Recursivos<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

Programa M<br />

Variables<br />

a, b, c ∈ Real<br />

Procedimiento Sub1 (↓a∈Real)<br />

Variables<br />

d ∈Real<br />

Procedimiento Sub2 (↓c∈Real)<br />

Variables<br />

d∈Real<br />

Acciones<br />

c←c+b<br />

Acciones<br />

Sub2(b)<br />

<br />

Acciones<br />

Sub1(a)<br />

<br />

Pila Vacía → RA(Sub1) →<br />

RA(Sub2)<br />

RA(Sub1) → RA(Sub1) → Pila Vacía<br />

3.9 Gestión de Memoria<br />

3.9.1 Administración de la Memoria Montón<br />

• En algunos lenguajes se incluyen variables dinámicas, que pueden ser creadas y<br />

destruidas en cualquier momento durante la ejecución del programa. Esto quiere<br />

decir que se le asigna almacenamiento cuando surge la necesidad de usar esa<br />

variable, y además, se puede liberar ese almacenamiento cuando ya no sea<br />

necesario el uso de la variable.<br />

• Un montón es un segmento de memoria que es<br />

utilizado como un almacén de palabras de memoria de<br />

dónde se le asigna espacio de almacenamiento a las<br />

variables dinámicas.<br />

• El estado del montón en un determinado momento de<br />

la ejecución está constituido por un conjunto de áreas<br />

asignadas con bloques libres o huecos entre ellas:<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

Libre<br />

Libre<br />

Libre<br />

Libre<br />

81<br />

82<br />

41


<strong>Tema</strong>rio<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

3.1 Identificadores, Constantes, Variables, Expresiones<br />

3.2 Tipos de Datos Simples: Natural, Entero, Real, Carácter, Booleano<br />

3.3 Tipos de Datos Estructurados: Enumerado, Subrango, Registro, Vector,<br />

String, Matriz, Secuencia, Fichero<br />

3.4 Estructura Secuencial<br />

3.5 Estructuras de Control de Flujo: Programación Estructurada<br />

3.6 Procedimientos y Funciones<br />

3.7 Paso de Parámetros<br />

3.8 Ámbito y Extensión<br />

3.9 Gestión de Memoria<br />

3.10 Entrada/Salida<br />

3.10 Entrada/Salida<br />

• 2 operaciones básicas<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

• Leer (fichero, lista de variables de entrada)<br />

• Escribir (fichero, lista de variables de salida)<br />

donde<br />

• lista de variables de entrada/salida: donde se almacenará los valores leídos (operación<br />

de lectura) o se escribirán en el dispositivo de salida (operación de escritura).<br />

• fichero: Es la variable de tipo fichero asociada al dispositivo<br />

• Entrada estándar / Salida estándar<br />

• Los dispositivos de entrada/salida suelen ser mucho más lentos que el procesador:<br />

las lecturas y escrituras de información se hacen por bloques<br />

cada línea se almacena en un buffer de entrada o de salida, de modo que las operaciones<br />

de lectura y escritura se realizarán sobre los buffers asociados a los ficheros<br />

correspondientes.<br />

Metodología y Tecnología de la Programación<br />

<strong>Tema</strong> 3. Elementos Básicos de la Programación Imperativa<br />

83<br />

84<br />

42

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!