llenguatge pascal

48
1 Fundamentos de Informática. Electrónica. EUETIB. Programación estructurada y Pascal/Delphi Introducción Conceptos generales, estructura de un programa y tipos de datos IN

Upload: afdagfs

Post on 05-Jan-2016

10 views

Category:

Documents


2 download

DESCRIPTION

Llenguatge de programació Pascal

TRANSCRIPT

Page 1: Llenguatge PASCAL

1Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Introducción Conceptos generales, estructura de un

programa y tipos de datosIN

Page 2: Llenguatge PASCAL

2Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

• Estructura general.– Bloques– Sintaxis

• Identificadores de variables.• Palabras reservadas.• Tipos de variables y necesidad de su

definición.

Características generales de un lenguaje

Page 3: Llenguatge PASCAL

3Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Estructura de un programa en Pascal/Delphi

PROGRAM nombreProg;

PROCEDUREFUNCTION

BEGIN

END.

cabecera del programa

USESCONSTTYPEVAR

identificadores de libreríasdefinición de constantes

declaración de tipos de datos declaración de variables

definición de procedimientosdefinición de funciones

………. cuerpo del programa

{$APPTYPE CONSOLE} aplicación de consola, caso del Delphi

Page 4: Llenguatge PASCAL

4Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

DATOS

INTERNOS

ESTATICOS

DINAMICOS

SIMPLES

ESTRUCTURADOS

EXTERNOS

SET

ESTANDAR

NO ESTANDAR

BOOLEANCHAR

ESCALAR

SUBRANGE

(Enumerado)

(Intervalo)

HOMOGENEOS

HETEROGENEOS

(ARRAY)

(RECORD)

Tipos de datosTipos de datos

(POINTER)

REALINTEGER

Page 5: Llenguatge PASCAL

5Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

TIPOS estándar: Definición de variables

{Comentarios acerca del programa}PROGRAM {nombrePro} ;

{$APPTYPE CONSOLE} uses SysUtils ;

VAR{lista idVar}: INTEGER ;{lista idVar}: REAL ;{lista idVar}: CHAR ;{lista idVar}: BOOLEAN ;

BEGIN………………………………

END.

Los comentarios pueden estar en cualquier posición. También puede utilizarse:

(*……..*)

Directivas Delphi paraaplicaciones de Consola.

Page 6: Llenguatge PASCAL

6Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Datos tipo INTEGER

Son números enteros positivos y negativos, sin parte decimal los valores máximo y mínimo dependerán de la representación elegida.

Si la representación interna es de32 bits en complemento a 2, entonces:

Ejemplos: 1234 válido

1.2 no válido; no se permiten decimales

- 231 … +(231-1)[–2147483648 … +2147483647]

Concepto

Representación

Conviene entender que si no hay verificación (a veces sucede o es opcional por cuestión de eficiencia), pueden darse situaciones curiosas como codificar un positivo como negativo.

Page 7: Llenguatge PASCAL

7Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Datos tipo REAL

En Informática, son los números con o sin decimales representados en formato científico.

Representación interna:

Ejemplos: 3.65E-4 válidoválido3.14

Intervalo (range) de representación

s Exponente Mantisa

Como siempre, según representación

3.28976543456789213456789 (atención a la precisión)

Ver, por ejemplo ejercicios IEEE 754

Precisión 15–16 dígitos significativosEn Delphi, el IEEE754 de doble precisión, tiene:5.0 x 10^–324 .. 1.7 x 10^308

Page 8: Llenguatge PASCAL

8Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Tipos Alfanuméricos

Datos tipo CHAR

Representación interna: código ASCII8 bits

Corresponden a los símbolos alfanuméricos que componen el conjunto de caracteres ASCII.

Prácticamente todas las versiones (no std) incluyen un tipo CADENA o STRING como tipo elemental .

Ejemplos: 'M’válidoválido

no válido'1'A

(Sólo como texto)

'Mi casa’ no válido (El tipo CHAR acepta sólo un carácter)

Ejemplo: 'Mi casa’ Sería válido

Pero el PASCAL estándar lo considera variable estructurada (vector de caracteres): lo veremos más adelante

Datos tipo STRING

Page 9: Llenguatge PASCAL

9Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Tipos lógicos , booleanos o de decisión

Toman dos únicos valores: Verdadero (TRUE) y Falso (FALSE).

Representación interna: Con 1 bit sería suficiente, pero dependerá de la implementación: 8 bits o incluso más puede ser normal.

Operadores lógicos: AND, OR, XOR, NOT

Ejemplos: si FALSE

TRUEA = 2B = 3X = 0

A = B

B > A

( (A+B)>2 ) OR ( X=1 ) TRUE

True False

Cualquier expresión lógica podrá ser asignada a una variable lógica (lo veremos más adelante)

Page 10: Llenguatge PASCAL

10Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composición SECUENCIALCS

COMPOSICIÓN SECUENCIAL

Page 11: Llenguatge PASCAL

11Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

COMPOSICIÓN

ITERATIVA

SECUENCIAL

ALTERNATIVA

COMPOSICIÓN SECUENCIAL

Page 12: Llenguatge PASCAL

12Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Definición: Una acción compuesta, está formada por una secuencia de acciones elementales.

Pseudocódigo Formato PASCALOrdinograma equivalente

SECUENCIA

{a1}; {a2}; ... {an}

FSECUENCIA

BEGIN{a1}; {a2}; .. {an}

END

{a1}

{an}

Composición Secuencial

A

COMPOSICIÓN SECUENCIAL

Page 13: Llenguatge PASCAL

13Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Operación ASIGNACIÓN

• Formato:

{id_variable} := {expresión válida}

suma := num1 + num2

Operación básica, junto a las de E/S

{expresión válida} puede ser una constante o variable del mismo tipo o cualquier expresión válida para el tipo.

COMPOSICIÓN SECUENCIAL

Page 14: Llenguatge PASCAL

14Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi COMPOSICIÓN SECUENCIAL

• lógicos

AND, OR, XOR, NOT

• de relación

• matemáticos

+ , - , * , / , DIV , MOD

< , <=, > , >= , = , <>

Operadores básicos Pascal/Delphi

Page 15: Llenguatge PASCAL

15Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Operadores matemáticosPueden ser utilizados con tipos enteros o reales.

Se puede asignar un resultado INTEGER a una variable REAL (mixed mode). En algunas versiones y lenguajes es necesario una función de conversión para cambio de tipo.

IntegerInteger

IntegerIntegerInteger

IntegerInteger

RealRealReal

RealRealReal

RealRealRealRealReal Real Real

ErrorErrorError

ErrorErrorError

+-*/

MODDIV

IntegerInteger RealRealReal

Realoperador

TIPO DE LOS OPERANDOS

COMPOSICIÓN SECUENCIAL

Page 16: Llenguatge PASCAL

16Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Expresiones lógicas:………….

VAR

i,j: INTEGER;

a,b: BOOLEAN;

BEGIN

…………….

i:=3; j:= 4;

a:= i<j;

b:= (i=j) OR a;

a:=b;………..

END.

Notar que las variables a y b sólo pueden tomar los valores TRUE o FALSE

COMPOSICIÓN SECUENCIAL

Operadores lógicos/de relación

Page 17: Llenguatge PASCAL

17Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

A B = A B

Recordar que según el teorema de Shanon-Morgan podemos escribir una expresión lógica.

noEs:= NOT (((Cantidad MOD 10) = 0 ) OR ((Cantidad MOD 12) = 0))

Así, si queremos evaluar una expresión lógica para saber si una cantidad no es múltiplo de 10 ni de 12, podemos escribir:

o bien:noES:= (NOT((Cantidad MOD 10) = 0 )) AND (NOT ((Cantidad MOD 12) = 0))

Complementario de unión es lo mismo que intersección de complementarios.

COMPOSICIÓN SECUENCIAL

Operadores lógicos/de relación

noEs:= ((Cantidad MOD 10) <> 0 ) AND ((Cantidad MOD 12) <> 0)

aunque también seria correcto:

Page 18: Llenguatge PASCAL

18Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Problemática de ambigüedad en las operaciones

y:= a + b * c ;

posibilidades de lectura: ( a + b ) * c

a + ( b * c )

Para resolver estas ambigüedades, los lenguajes establecen unos criterios de “prioridad” de evaluación.

Sea el caso de la expresión

COMPOSICIÓN SECUENCIAL

Page 19: Llenguatge PASCAL

19Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Prioridades en las operaciones

Todas las subexpresiones entre paréntesis se evalúan primero.

Cuando las subexpresiones son con paréntesis anidados, se evalúa primero el paréntesis más interno.

Prioridad de los operadores en Delphi:

Los operadores con igual orden de operación en una misma expresión se evalúan de izquierda a derecha.

primero NOT* , / , DIV , MOD , AND+ , - , OR , XOR

último = , <> , < , > , <= , >=

1.

2.

3.

4.

COMPOSICIÓN SECUENCIAL

Page 20: Llenguatge PASCAL

20Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Operaciones de entrada/salida

PROCEDIMIENTO DE ENTRADA

sirve para leer datos

exterior ordenador

READ ({lista_var})

READLN ({lista_var})

formato:

PROCEDIMIENTO DE SALIDA

sirve para escribir datos

exteriorordenador

WRITE ({lista_var y/o constantes})

WRITELN ({lista_var y/o constantes})

formato:

La diferencia entre Write y Writeln es obvia.

La diferencia entre Read y Readln es más sutil : tiene que ver con el bloque leído y el separador utilizado (no es demasiado importante por ahora pero es bueno que lo entienda)

COMPOSICIÓN SECUENCIAL

Page 21: Llenguatge PASCAL

21Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Formato salida

{id_var}:a:d a: ancho total del campo d: numero de decimales ( sólo en el tipo REAL)

Ejemplos:

Writeln (‘Hola’);Writeln (’Hola’:10);

Writeln (radio:10:2,contador:4);

si radio := 3,5 (REAL) contador := 3 (INTEGER)

_ _ _ _ _ _ 3.50_ _ _ 3

La mayoría de lenguajes de programación permiten que las primitivas de salida especifiquen el formato. En el caso de Pascal, se hace de una manera muy simple, mediante descriptores de ancho de campo.

Hola_ _ _ _ _ _Hola

Visto por pantalla

COMPOSICIÓN SECUENCIAL

Page 22: Llenguatge PASCAL

22Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Ejemplo Composición SECUENCIAL

PROGRAM sumar ;{Algoritmo para calcular la

suma de dos enteros}

VAR

BEGINSECUENCIA

END.FSECUENCIA

a,b,suma : INTEGER;

Writeln (’Suma de dos enteros’);{Presentación}

Writeln ; Writeln (’Hasta otra'){Despedida}Writeln (’la suma vale: ’, suma:6);Mostrar (suma)

Write (’Entre dato 2:'); Readln (b);Write (’Entre dato 1:'); Readln (a);Leer (a)

Leer (b)suma := a+b;suma = a+b

COMPOSICIÓN SECUENCIAL

{$APPTYPE CONSOLE}uses SysUtils;

Page 23: Llenguatge PASCAL

23Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

algunas Funciones librerías estándar Delphi

COMPOSICIÓN SECUENCIAL

Matemáticas (System, Sysutils, Math)(F) Abs (V: Tipo): Tipo; devuelve el valor absoluto de V

(F) Round (V: Extended): Int64; devuelve el redondeo matemático de V

(F) Trunc (V: Extended): Int64; devuelve la parte entera de V

(F) Ceil (V: Extended): Integer; devuelve el redondeo por exceso de V

(F) Frac (V: Extended): Extended; devuelve la parte fraccionaria de V

(F) Int (V: Extended): Extended; devuelve la parte entera de V

(F) Sqr (V: Extended): Extended; devuelve el cuadrado de V

(F) Sqrt (V: Extended): Extended; devuelve la raíz cuadrada de V

(F) Power (Base, Exp: Extended): Extended; devuelve Base^Exp

(F) Exp (V: Real): Real; devuelve número e^V

(F) Ln (V: Real): Real; logaritmo neperiano (V)

(F) Pi: Extended devuelve 3.1415926535897932385

(F) Sin (A: Extended): Extended; devuelve el seno de A (A en radianes)

(F) Cos (A: Extended): Extended; devuelve el coseno de A (A en radianes)

(F) Tan (A: Extended): Extended; devuelve la tangente de A (sin(a)/cos(a))

Como ejemplo entre muchas otras funciones.

Consultar manual del lenguaje.

Page 24: Llenguatge PASCAL

24Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Variables y operaciones alfanuméricas

Definición: VAR

text1,text2: STRING[25];

Operaciones básicas:

Lectura/escritura: READ/READLN

WRITE/WRITELN

ASIGNACION: text2:= text1;

(text1)

COMPOSICIÓN SECUENCIAL

Page 25: Llenguatge PASCAL

25Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composición ALTERNATIVACA

Page 26: Llenguatge PASCAL

26Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

COMPOSICIÓN

ITERATIVA

ALTERNATIVA

SECUENCIAL

COMPOSICIÓN ALTERNATIVA

Page 27: Llenguatge PASCAL

27Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composición Alternativa SIMPLEDefinición: La acción se produce únicamente si se cumple una determinada

expresión lógica o predicado {p}.

Pseudocódigo Formato PASCAL Ordinograma equivalente

SI {p}

ENTONCES {Sq-A}

FSI

IF {p}

THEN {a} ;NO

SIVF

{p}

{Sq-A}notar que: - la acción {a}, en el caso de Pascal, es una acción elemental. Si es una secuencia, debe explicitarse. - en cualquier caso, al final de la composición, se continua a partir del punto de salida. - el final del IF no existe en forma diferenciada.

Delimitador

COMPOSICIÓN ALTERNATIVA

Page 28: Llenguatge PASCAL

28Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

ejemplo ALTERNATIVA SIMPLE

PROGRAM comparacion;

VAR a,b: REAL;

BEGIN

IF a>bTHEN

Writeln (a:8:2, ' es el mayor ');END.

Writeln ('introducir datos ');

Readln (a,b);

Recordar: Para evitar el problema de separador entre datos se puede acudir a dos READLN independientes.

COMPOSICIÓN ALTERNATIVA

Programa que dados dos números, identifica el mayor de ellos.

Page 29: Llenguatge PASCAL

29Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composición Alternativa DOBLE

Definición: Permite la elección entre dos tratamientos alternativos en función de que se cumpla o no el predicado {p}

Pseudocódigo Formato PASCAL Ordinograma equivalente

SI {p} ENTONCES

{Sq-A} SI_NO

{Sq-B} FSI

IF {p} THEN

{a1} ELSE

{a2} ;

NOSI{p}

{Sq-A} {Sq-B}

notar que, en Pascal, las acciones {a1} y {a2} son elementales. Si son una secuencia, debe explicitarse (BEGIN/END)

delimitador

;

COMPOSICIÓN ALTERNATIVA

Page 30: Llenguatge PASCAL

30Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Comentarios a estructuras alternativas simple y doble

c1.

c2.

{p} es cualquier expresión evaluable a resultado booleano (donde una variable boolean sería un caso particular)

En Pascal, las acciones {a1} o {a2} son acciones elementales, entre ellas, cualquier estructura básica.

BEGIN __________ _________ __{SQ}___ __________

END

{a}

A > B(A > B) AND (Y=0) OR SWITCH

SWITCH siendo SWITCH una variable booleanasí:

podrían ser expresiones lógicas válidas.

Por consiguiente, como ha quedado indicado previamente, si desea incluirse una secuencia, ésta debe explicitarse mediante BEGIN/END

COMPOSICIÓN ALTERNATIVA

Page 31: Llenguatge PASCAL

31Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

ejemplo composición ALTERNATIVA DOBLE

Reconsideremos nuestro anterior programa de comparar de modo que aporte mayor información

En cualquier caso, este programa es sintácticamente correcto pero el lector habrá observado que incorpora un error semántico

notar que un delimitador en esta posición provocaría un error ya que significaría el final del IF. En Pascal, es el propio ELSE quien hace las veces de delimitador

PROGRAM comparacion;

VAR a,b: REAL;BEGIN

Writeln ('introducir datos ');

IF a>bTHEN Writeln (a:8:2,' es el mayor ')

END.

ELSE Writeln (b:8:2,' es el mayor');

Readln (a,b);

COMPOSICIÓN ALTERNATIVA

Page 32: Llenguatge PASCAL

32Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composiciones ALTERNATIVAS ANIDADAS

PROGRAM comparación;VAR a,b: REAL;

BEGINWriteln ('introducir datos ');

IF a>b

IF a<b

THEN Writeln (a:8:2,' es el mayor ')

END.

ELSE

THEN Writeln (b:8:2,' es el mayor')ELSE Writeln ('son iguales');

Readln (a,b);

En efecto, resulta claro que la condición contraria a a>b no es a<b sino a<=b. Así pues, el programa correcto se podría construir a partir de estructuras alternativas imbricadas. Es decir, donde la acción {a} de una estructura alternativa es, a su vez, otra estructura alternativa.

COMPOSICIÓN ALTERNATIVA

Page 33: Llenguatge PASCAL

33Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Otro ejemplo general

FSECUENCIA

SECUENCIA

{Presentación}Leer (dato1 , dato2)

SI dato1<dato2

SI dato2<dato1

ENTONCES

ENTONCES

ENTONCES Mostrar (dato1, ‘es divisor de’, dato2}

ENTONCES Mostrar (dato2, ‘es divisor de’, dato1}

SI_NO Mostrar (‘no son divisores’)

SI_NO

SI_NO

SI_NO

SI

SI

FIN_SI

FIN_SI

FIN_SIFIN_SI

{cociente dato2/dato1 es exacto}

{cociente dato1/dato2 es exacto}

Mostrar (‘no son divisores’)

Mostrar (‘son iguales’)

{Despedida}

COMPOSICIÓN ALTERNATIVA

Dados dos valores, indicar si uno es divisor del otro.

Page 34: Llenguatge PASCAL

34Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Problemática de las ESTRUCTURAS ALTERNATIVAS ANIDADAS no completas

Sea un tramo de programa con el aspecto siguiente

- En este caso existen dos estructuras alternativas anidadas IF/THEN pero un solo ELSE.

- La cuestión, ahora está en discernir a cuál de las dos estructuras IF/THEN corresponde el único ELSE. - La identación de la escritura parece sugerir que la regla ELSE corresponde al IF de {p1}, y sin embargo, esto no es así.

IF {p1}

IF {p2}THEN

ELSE

THEN{acción_A}

{acción_B}

COMPOSICIÓN ALTERNATIVA

Page 35: Llenguatge PASCAL

35Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Regla del THEN más internoEl primer ELSE que se encuentra constituye la alternativa del THEN más interno.

así:

COMPOSICIÓN ALTERNATIVA

IF {p1}

IF {p2}

THEN

ELSE

THEN{acción_A} ;

{acción_B} ;

BEGIN

END

Page 36: Llenguatge PASCAL

36Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

composición alternativa MULTIPLE (presentación)

- En muchas ocasiones la decisión no debe tomarse entre dos, sino entre más alternativas.

- De hecho, deberíamos diferenciar, como mínimo, dos casos:

a) cuando las alternativas son mutuamente excluyentes

b) cuando las alternativas no tienen por qué ser excluyentes (pueden darse más de una)

El caso a) puede materializarse mediante composiciones alternativas dobles anidadas

El caso b) puede materializarse mediante composiciones alternativas simples en secuencia

IF {p1} THEN {acción_1} ELSE

IF {p2} THEN {acción_2}. ELSE ........

IF {p1} THEN {acción_1};

IF {p2} THEN {acción_2};

IF .....

COMPOSICIÓN ALTERNATIVA

Page 37: Llenguatge PASCAL

37Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

composición alternativa MULTIPLE ( SELECCION 1 entre N)

{lista_const_i} son listas de constantes del mismo tipo que la expresión de control de la selección que ha de ser de tipo enumerado (por ahora, cualquier estándar, excepto REAL)

Pseudocódigo Formato PASCAL Ordinograma equivalente

SEGUN_SEA {id_var} HACER

{lista_const_1} : {S1} {lista_const_2} : {S2}

..... {lista_const_n} : {Sn} [NINGUNA : {Sx}]

FSEGUN_SEA

CASE {var} OF

{lista_1} : {a1} {lista_2} : {a2}

..... {lista_n} : {an} [ELSE : {ax}]

END;

{expr}

...S1 S2 Sn Sx

1

1 -expresión evaluable a variable enumerada

Así pues, la mayoría de lenguajes de programación, al hablar de estructura alternativa múltiple, se refieren a una selección 1 entre n, según el valor de una variable forme parte de una u otra lista de valores no repetidos.

COMPOSICIÓN ALTERNATIVA

Page 38: Llenguatge PASCAL

38Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composición ITERATIVACI

Page 39: Llenguatge PASCAL

39Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

COMPOSICION

SECUENCIAL

ITERATIVA

ALTERNATIVACOND. INICIAL

COND. FINAL

repetitiva

COND. INTERMEDIA

variante

COMPOSICIÓN ITERATIVA

Page 40: Llenguatge PASCAL

40Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Descripción: La condición de salida del lazo se evalúa al principio de la composición.Por consiguiente, si la expresión no es cierta, la acción puede no ejecutarse ni una sola vez.

Pseudocódigo Formato PASCALOrdinograma equivalente

MIENTRAS {p} HACER

{SQ}

FMIENTRAS

WHILE {p}DO

Composición ITERATIVA de condición inicial

NO

SI

{predicado}

{SQ}delim

{Acción}

fin del WHILE

COMPOSICIÓN ITERATIVA

Page 41: Llenguatge PASCAL

41Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Ejemplo de composición ITERATIVA de condición INICIAL

PROGRAM suma;

VAR suma,numero,n_limite : INTEGER;

SECUENCIA

FSECUENCIA.

opcional

Algoritmo para obtener la suma de losn primeros números naturales:

suma:=0;{Presentación}

Leer (n_limite)numero:=1

MIENTRAS numero <= n_limite

suma:=suma+numeronumero:=numero+1

FMIENTRAS

HACER

Mostrar (suma)

BEGIN

suma:=0;Writeln ('Suma n primeros naturales');

Write ('Entre n: '); Readln (n_limite);numero:=1;

WHILE numero<= n_limite

suma:=suma+numero;numero:=numero+1

END;

END.

BEGINDO

;

Writeln ('La suma vale:’,suma:8:2);

COMPOSICIÓN ITERATIVA

Page 42: Llenguatge PASCAL

42Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Definición:En este caso, el predicado de salida se sitúa después de ejecutar la acción. Por consiguiente, ésta se realiza siempre, al menos una vez.

Como en el caso de la estructura iterativa de condición inicial, el número de veces que se realiza la acción depende de la condición. Naturalmente, la acción deberá contener alguna sub-acción que modifique algún elemento de la expresión lógica que constituye la condición de salida.

Pseudocódigo Formato PASCAL Ordinograma equivalente

REPETIR

HASTA_QUE {p}

REPEAT

UNTIL {p}

{SQ}{SQ} {SQ}

exp_logNO

SI

Composición ITERATIVA de condición final

delim

COMPOSICIÓN ITERATIVA

Page 43: Llenguatge PASCAL

43Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Ejemplo composición ITERATIVA de condición FINAL

SECUENCIA SECUENCIA

suma:=0 suma:=0 , numero:=1{Presentación} {Presentación}

Leer (n_limite)numero:=1

MIENTRAS numero <= n_limite REPETIR

suma:=suma+numerosuma:=suma+numero

numero:=numero+1numero:=numero+1

FMIENTRASHASTA QUE numero > n_limite

FSECUENCIA

FSECUENCIA.

HACER

Tomemos el mismo ejemplo que ya empleamos para ilustrar la estructura iterativa de condición inicial

No es casualidad que la expresión lógica de la variante con condición final sea la complementaria a la de condición inicial.Nótese, que el algoritmo, ahora, no es valido para n_limite=0.

y realicemos una propuesta alternativa con condición final.

Mostrar (suma)

COMPOSICIÓN ITERATIVA

Mostrar (suma)

Leer (n_limite)

Page 44: Llenguatge PASCAL

44Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Ejemplo composición ITERATIVA de condición FINAL

SECUENCIA

suma:=0;{Presentación}

Leer (n_limite}numero:=1

REPETIRsuma:=suma+numeronumero:=numero+1

HASTA QUE numero > n_limite

FSECUENCIA

PROGRAM suma;

suma,numero,n_limite : INTEGER;

BEGIN

suma:=0;Writeln ('Suma n primeros naturales');

Write ('Entre n: '); Readln (n_limite);numero:=1;

REPEAT

UNTIL numero> n_limite ;

suma:=suma+numero;numero:=numero+1;

END.

El programa correspondiente al algoritmo de estructura iterativa con condición final:

VAR

Writeln (‘La suma vale: ‘,suma);

COMPOSICIÓN ITERATIVA

Mostrar (‘La suma vale: ‘,suma}

Page 45: Llenguatge PASCAL

45Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composición REPETITIVA

Concepto: Podemos pensar en un caso particular de iteración, basada en conocer la lista de valores de una variable de control para los cuales debe realizarse la acción (variables enumeradas de Pascal)

Pseudocódigo estructura repetitiva Pseudocódigo equivalente iterativo

DESDE {var}={valor inicial} HASTA {valor final}{var}={valor inicial}

HACER HACER

FMIENTRAS

MIENTRAS {var} <> {valor fina}

{Sq} {Sq}

FDESDE

Caso particular:

{var}:= {valor siguiente}

COMPOSICIÓN ITERATIVA

Page 46: Llenguatge PASCAL

46Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Composición REPETITIVA

Caso Pascal

FOR {var}={valor inicial} {valor final}

{var}:={valor inicial};

DODO BEGIN

END

WHILE {var} <> {valor fina}

{Acción} {Acción}

{var}:= succ({var}) {caso TO}

{var}:= pred({var}) {para el caso DOWNTO}

TO DOWNTO

;

Formato general Equivalente con iterativa de condición inicial

{var} deberá ser una variable de tipo enumerada ('scalar' o 'subrange') y tomará todos los valores del intervalo recorrido en sentido ascendente (TO) o descendente (DOWNTO). Al principio, probablemente, no trabajará con variables declaradas explícitamente como enumeradas. Baste saber, por ahora, que los tipos estandar INTEGER y CHAR son dos casos especiales de tipos enumerados y que el tipo REAL, obviamente, no lo es.

La manera de recorrer la relación de valores en la estructura equivalente sería mediante la función valor siguiente (succ). Obviamente en el caso de enteros, la función succ equivale a incrementar una unidad.

i:= i + 1 equivale a i:= succ(i)Lógicamente, esto no tendría sentido para otras variables enumeradas, ni siquiera para el tipo estándar CHAR.

COMPOSICIÓN ITERATIVA

Page 47: Llenguatge PASCAL

47Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Ejemplo Composición REPETITIVA

SECUENCIASECUENCIA

FSECUENCIA

{Presentación}

DESDE numero:=1 HASTA n_limite

suma:=suma+numero

suma:=0;

HACER

FDESDE

suma:=0{Presentación}

Leer (n_limite}numero:=1

MIENTRAS numero <= n_limite

suma:=suma+numero;numero:=numero+1

FMIENTRAS

FSECUENCIA

HACER

Si tomamos nuevamente nuestro antiguo ejemplo, veremos que, en efecto, se trataba de una estructura repetitiva ...

... y, por tanto, podríamos haber descrito el algoritmo en la forma

Nótese como, en este caso, la variable de control es actualizada automáticamente por la propia estructura

COMPOSICIÓN ITERATIVA

Mostrar (‘La suma vale: ‘,suma}

Leer (n_limite}

Mostrar (‘La suma vale: ‘,suma}

Page 48: Llenguatge PASCAL

48Fundamentos de Informática. Electrónica. EUETIB.

Programación estructurada y Pascal/Delphi

Ejemplo Composición REPETITIVA

SECUENCIA{Presentación}

Leer (n_limite)

Mostrar (suma)

DESDE numero:=1 HASTA n_limite

suma:=suma+numero;

suma:=0

HACER

FDESDE

FSECUENCIA

A partir de este pseudocódigo, El texto del programa Delphi correspondiente:

PROGRAM suma;

FOR numero:=1 TO n_limite

VAR suma,numero,n_limite : INTEGER;

BEGIN

suma:=0;Writeln ('Suma n primeros naturales');

Write ('Entre n: '); Readln (n_limite);

Writeln ('El resultado es :',suma)

suma:=suma+numero;

END.

DO

COMPOSICIÓN ITERATIVA

{$APPTYPE CONSOLE}uses SysUtils;