13 - implementacióndatosyestructurascontrol

21
Implementación de datos

Upload: lautaro-albertuz

Post on 08-Dec-2015

217 views

Category:

Documents


1 download

DESCRIPTION

kjbh

TRANSCRIPT

Page 1: 13 - ImplementaciónDatosYEstructurasControl

Implementación de datos

Page 2: 13 - ImplementaciónDatosYEstructurasControl

Tipos predefinidos y tipos no estructurados definidos por el

usuarioEjemplo: Descriptor de un Número entero

• En el caso, de subrangos se guardará la misma información que para el base, pero en el descriptor se agregará los límites superiores e inferiores.

• Los tipos enumeración se implementan asignándole un valor de 0 a n-1 a cada constante

• Los booleanos y los caracteres se implementan como enumerativos.

Entero

Allí se guarda el valor

Page 3: 13 - ImplementaciónDatosYEstructurasControl

Tipos estructurados“Registros”

• Ejemplo: Descriptor detype t = record a:real; b: integer;

end

recorda

bEntero

t

Lugar dónde se almacenan los valores de los campos

Real

Page 4: 13 - ImplementaciónDatosYEstructurasControl

Tipos estructurados“Arreglos”

• Ejemplo: Descriptor detype a = array [0..10] of real;

entero010

real

amatriz

Acá se dejaría lugar para tantos elementos como tenga la matriz

Información sobre los índices de la matriz

Page 5: 13 - ImplementaciónDatosYEstructurasControl

Tipos estructurados“Unión discriminada”

• Ejemplo: Descriptor de

type z = record a:integer;

case b: boolean of true: (c:integer); false: (d:integer; e: real)

endainteger

b

lógico

zReg. Variante

truefalse

dentero

e

real

centero

Valor Lógico Parte

variante

Page 6: 13 - ImplementaciónDatosYEstructurasControl

Tipos estructurados“Punteros”

• Ejemplo: Descriptor de

t

type T = ↑ integer;var t: T;

Memoria Libre

Allí se guarda el valor

Pila de ejecución

Page 7: 13 - ImplementaciónDatosYEstructurasControl

Estructuras de Control

A Nivel de Sentencia A nivel de Unidad

Estructuras de control

• Son el medio por el cual los programadores pueden determinar el flujo de ejecución entre los componentes de un programa

Page 8: 13 - ImplementaciónDatosYEstructurasControl

A Nivel de Unidad : Cuando el flujo de control se pasa entre unidades. Intervienen los pasajes de parámetros.

A Nivel de Sentencia: Se dividen en tres grupos

Secuencia Selección Iteración

Estructuras de control a nivel de sentencia

Page 9: 13 - ImplementaciónDatosYEstructurasControl

Secuencia• Es el flujo de control más simple.• Indica la ejecución de una sentencia a continuación

de otra.• El delimitador más general y más usado es el “ ; ”.• Hay lenguajes que no tienen delimitador y establecen

que por cada línea vaya una instrucción. Se los llaman orientados a línea. Ej: Fortran

• Se pueden agrupar sentencias en una, llamada Sentencia compuesta, llevan delimitadores como Begin y End. Ej: Algol, Pascal, { y } en C, C++, etc.

Page 10: 13 - ImplementaciónDatosYEstructurasControl

Distinción en entre sentencia y expresión

• En cualquier lenguaje convencional, ej. Pascal, existe diferencia entre sentencia de asignación y expresión

• En otros lenguajes tales como C definen la sentencia de asignación, como una expresión con efectos laterales.

• Las sentencias de asignación devuelven valores.• Evalúa de derecha a izquierda

Ejemplo a=b=c=0; • La mayoría de los lenguajes de programación requieren

que sobre el lado izquierdo de la asignación aparezca un l-valor. C permite cualquier expresión que denote un l-valor. Ej.: ++ p = *q;

(i<j?z:y)=4;

Page 11: 13 - ImplementaciónDatosYEstructurasControl

Selección

• Esta estructura de control permite que el programador pueda expresar una elección entre un cierto número posible de sentencias alternativa

• Evolución:

➠ If lógico de Fortran:

If (condición lógica) sentencia

Si la condición es verdadera ejecuta la sentencia

Page 12: 13 - ImplementaciónDatosYEstructurasControl

➠If then else de Algol:If (condición lógica) then sentencia1

else sentencia2 Este permite tomar dos caminos posibleProblemas:

Ambigüedad, no establecía por lenguaje cómo se asociaban los else con los If abiertos.

➠ If then else de Pl/1, Pascal y C sin ambigüedad

Establecen por lenguaje que cada else cierra con el último If abierto.

Desventajas:

Ilegibilidad, programas con muchos If anidados pueden ser ilegibles. Utilizar Begin End.

Page 13: 13 - ImplementaciónDatosYEstructurasControl

➠If then else de Algol 68 y Ada sin ambigüedad y más legibles

Incorpora las cláusulas que cierran los if : fi

Ejemplo: If i=0

then

j:= j+1;

else

j:=j-1;

fi

Tanto Ada como Algol 68 permiten la abreviatura elif que reemplaza al else if

Page 14: 13 - ImplementaciónDatosYEstructurasControl

➠Sentencia Select de Pl/1Pl/1 incorpora la sentencia de selección entre dos o más

opcionesSelect

when(A) sentencia1;when(B) sentencia2;

............ Otherwise sentencia n;

End;Reemplazaría a los If anidados

If (A) then sentencia1 else If (B) then sentencia2

else If .................else sentencia n;

Page 15: 13 - ImplementaciónDatosYEstructurasControl

➠Sentencia de selección múltiple en otros lenguajes

Algol 68La expresión debe ser de tipo enteraLa rama i-ésima corresponde se ejecuta cuando la expresión

da el valor i.Tiene una cláusula opcional Out que se ejecuta cuando el

valor dado por la expresión no está expresado en el conjunto de valores

Si no se coloca se ejecuta por defecto Out y Skip. La sentencia Skip es una sentencia nula.Pascal

Incorpora que los valores de la expresión sean Ordinales y ramas con etiquetas. No importan el orden en que aparecen las ramas.

Es inseguro porque no establece qué sucede cuando un valor no cae dentro de las alternativas puestas

Page 16: 13 - ImplementaciónDatosYEstructurasControl

AdaCombina los aspectos positivos del Pascal y de Algol68

Las expresiones pueden ser de tipo entero o enumeración

Se debe estipular en las selecciones todos los valores posibles que puede tomar la expresión

Tiene la cláusula Others que se puede utilizar para representar a aquellos valores que no se especificaron explícitamente

Si en la sentencia no se coloca la rama para un posible valor y no aparece la opción Others, no pasará la compilación.

Page 17: 13 - ImplementaciónDatosYEstructurasControl

C, C++Para múltiple selección provee el constructor Switch

Cada rama es etiquetada por uno o más valores constantes

Cuando se coincide con una etiqueta del Switch se ejecutan las sentencias asociadas y se continúa con las sentencias de las otras entradas.

Existe la sentencia break, que provoca la salida

Tiene una cláusula default que sirve para los casos que el valor no coincida con ninguna de las opciones establecidas

Page 18: 13 - ImplementaciónDatosYEstructurasControl

Ejemplo de ADA:Case Operador is

when ´+´ => result:= a + b;

when ´-´ => result:= a - b;

when others => result:= a * b;

end case

Ejemplo de C, C++:Switch Operador {

case ´+´ :

result:= a + b; break;

case ´-´:

result:= a - b; break;

default :

result:= a * b;

}

Page 19: 13 - ImplementaciónDatosYEstructurasControl

IteraciónEste tipo de instrucciones se utilizan para representar

aquellas acciones que se repiten un cierto número de veces

Su evolución:➠Sentencia Do de Fortran

Do label var-de-control= valor1, valor2...........

Label continue La variable de control solo puede tomar valores enteros El Fortran original evaluaba si la variable de control había llegado al límite al final del bucle, o sea que siempre una vez lo ejecutaba

Page 20: 13 - ImplementaciónDatosYEstructurasControl

➠Sentencia For de Pascal, Algol 68, ADA, C , C++ La variable de control puede tomar cualquier valor ordinal, no solo enterosPascal no permite que se toquen ni los valores del límite inferior y superior, ni el valor de la variable de control.

La variable de control puede ser de cualquier valor ordinal.

El valor de la variable fuera del bloque se asume indefinida

Algol 68 no permite que se toque el valor de la variable de control, pero sí los valores de los límites superior e inferior, porque los evalúa en el comienzo. Además el alcance de la variable de control es solo en el bucle.

Page 21: 13 - ImplementaciónDatosYEstructurasControl

Ada encierra todo proceso iterativo entre las cláusulas loop y end loop. Permite el uso de la sentencia Exit para salir del loop y la variable de control NO necesita declararse, se declara implícitamente cuando se entra al bucle y desaparece cuando se sale de élC, C++ se compone de tres partes: una inicialización y dos expresiones

La primer expresión (2do. Parámetro) es el testeo que se realiza ANTES de cada iteración. Si no se coloca el for queda en LOOP.En el primer y último parámetro se pueden colocar sentencias separadas por comas