tema 3. estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2...

27
17-oct-05 Introducción a los Computadores Tema 3. Estruc. control 1 Tema 3. Estructuras de control Contenido del tema: Expresiones aritméticas Expresiones booleanas. Sentencias de selección. Sentencias de iteración. – Aplicaciones Estructuras de control en C++ Francisco Rus Mansilla Dpto. Lenguajes y Ciencias de la Computación 17-oct-05 Introducción a los Computadores Tema 3. Estruc. control 2 Expresiones aritméticas y lógicas • Una expresión es una combinación de elementos que representan valores (operandos) y conectivas (aritméticas y/o lógicas) que representan operaciones (operadores). • Ejemplos: s<=((d+4.0e-5)*32.1)/SQRT(valor) Y NO fin (angulo==45) O NO (33.56<POW(cifra, exp))

Upload: phamquynh

Post on 02-Nov-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

1

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

1

Tema 3. Estructuras de control

Contenido del tema:– Expresiones aritméticas– Expresiones booleanas.– Sentencias de selección.– Sentencias de iteración.– Aplicaciones– Estructuras de control en C++

Francisco Rus Mansilla

Dpto. Lenguajes y Ciencias de la Computación

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

2

Expresiones aritméticas y lógicas

• Una expresión es una combinación de elementos que representan valores (operandos) y conectivas (aritméticas y/o lógicas) que representan operaciones (operadores).

• Ejemplos:s<=((d+4.0e-5)*32.1)/SQRT(valor) Y NO fin

(angulo==45) O NO (33.56<POW(cifra, exp))

Page 2: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

2

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

3

Elementos léxicos de una expresión

• Operandos:– Constantes literales.– Constantes simbólicas.– Variables.– Llamadas a funciones.

• Operadores:– Aritméticos.– Relacionales.– Lógicos.

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

4

Elementos sintácticos de una expresión

• Notación infija para los operadores binariosa * bsuma >= 20.5

• Notación prefija para los operadores unarios- xNO a

• Posibilidad de uso y anidamiento de paréntesis.(dato + 5) * 32((valor + 0.6 * (2.6 – dato)) * 1E6 + 99.9)

Page 3: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

3

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

5

Elementos semánticos de una expresión

• Todos los elementos son de un determinado tipo. • Todos los operadores y funciones devuelven un

determinado tipo.

Operadoro

función

tipo argumento 1

tipo argumento 2

...

tipo del resultado

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

6

Tipos de los operadores

+ - *

DIV MOD

N Z

N Z N Z

+ - * /

R

RR

Sobrecarga de operadores

Y O

B

B B

NO B B

< > <= >= != ==

tipo simple

tipo simpleB

Page 4: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

4

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

7

Tipos de las funciones predefinidas

ABS

N Z N Z

SQRT R R

POW

Z

Z Z

POW

R

ZR

CHR

N Z C

CAP

C C

ORD ordinal N Z

SUC

PRED

ordinal

ordinalordinal

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

8

Compatibilidad de tipos

• Los operandos binarios deben ser compatiblesentre sí y con los operadores.

• Regla de estilo, que los tipos de los operandos de una expresión DEBEN SER IDÉNTICOS.

• Ejemplo:VAR

N a, b = 3; R c, d = 2.0; B eINICIO

a = (2 * 5) DIV bc = 4E3 * POW(10.5, d) / 25.0e = a > b Y c < da = b / 2.0 // Error semánticoe = a > ‘a’ // Error semántico

Page 5: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

5

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

9

Conversiones de tipo

• Permiten mezclar en la misma expresión datos de distinto tipo.

• Tipos de conversión:– Explícita: TipoDestino(expresión)

• Son indicadas por el programador: 2 + Z(3.6 / 2)• Regla de estilo: todas las conversiones de tipo en una

expresión deben ser explícitas.

– Implícitas: especificadas por el lenguaje• Ejemplo: 2 + 3.5 (convierte el segundo operando al tipo del

primero, esto es, natural o entero)• Regla de estilo: deben evitarse las conversiones implícitas.

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

10

Evaluación de una expresión• Reglas de precedencia:

– Los paréntesis tienen la mayor precedencia: los más internos preceden a los más externos.

– Si no se utilizan paréntesis, el orden en que se realizan las operaciones es el siguiente:

• 1º Operador unario lógico y aritmético: NO y -• 2º Operadores multiplicativos: *, /, DIV, y MOD• 3º Operadores aditivos (binarios): + y –• 4º Operadores relacionales: <, >, <=, >=, ==, !=• 5º Operador lógico de conjunción: Y• 6º Operador lógico de disyunción: O

– Los operadores con la misma precedencia se evalúan de izquierda a derecha.

• Recomendación: en caso de duda, usar paréntesis

Page 6: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

6

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

11

La sentencia de asignación (=)

• Es un operador universal: aplicable a cualquier tipo de datos, simples o compuestos.

variable = expresión

lvalue r-value

Memoria valor

• A la izquierda de la expresión debe haber una variable (contenedor).

• Los tipos de la variable y la expresión deben ser idénticos.• Dos posibles acciones: (1) inicializar una variable después

de declararla y (2) modificar el valor (estado) que ya tenga.

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

12

Precisiones sobre la asignación• Modo de ejecución:

1) Se calcula el resultado correspondiente a la expresión que aparece a la derecha.

2) Se almacena el valor calculado en la variable cuyo nombre aparece a la izquierda.

• El tipo de la expresión de la derecha (r-value) debe ser idéntico al de la variable (l-value)..

• Pueden hacerse conversiones explícitas de tipos entre tipos compatibles antes de realizar la asignación.Ejemplo: suma = 3.5 + R(num), si suma es real y num natural.

A=5A=A+1

Page 7: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

7

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

13

Ejemplos de asignación de literales

Suponiendo las siguientes declaraciones de variables... VAR

Z Num1

N Num2R Num3

C Letra1, Letra2

son válidas:Num1 = -10;

Num2 = 32;Num3 = 1.5E2;

Letra1 = ‘1’;

Letra2 = ‘Ñ’;

no son válidas:Num2 = -20;Num3 = 10;Letra1 = 1;Letra2 = ‘ab’;

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

14

Otros ejemplos de asignaciones

a = ORD(‘8’)-ORD(‘0’) // Na = (b*4) DIV (a+b) // Ze = VERDADERO // Be = a > 4 // Bc1 = ‘a’; c2 = CAP(c1) // Cc2 = CHR(126) // Cc = R(a)/R(b) // R

Page 8: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

8

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

15

Expresiones en C++• El tipo de la expresión/variable de la derecha debe ser

compatible con el tipo de la variable, aunque se aconseja, como regla de estilo, que sean tipos idénticos.

• Sin embargo, existen conversiones implícitas, desaconsejadas. Por ejemplo,

float x;

int y;

x = y; //El tipo de y se pasa a float

• Usaremos conversiones explícitas. Por ejemplo, x = float(y);

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

16

Ejemplos de asignaciones en C++int main () {

int Num1;

unsigned int Num2, Num4=2;

float Num3;

char Letra1, Letra2;

Num1 = -10;

Num2 = (32+10)/Num4;Num3 = 1.5E2;Letra1 = ‘1’;Letra2 = ‘Ñ’;Num2 = -20; // No es correctaNum3 = 10; // Se aconseja mejor usar 10.0Letra1 = 65; // No es correcta, aunque…Letra2 = ‘ab’; // No es correcta

return 0;}

Page 9: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

9

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

17

Estructura secuencial de sentencias

• Se ejecuta una instrucción a continuación de la otra:

• No permite resolver problemas que exijan una toma de decisión: control de selección.

• No permite la ejecución de un conjunto de acciones un número determinado de veces: control de iteración.

INICIO FIN Instrucción 1 Instrucción 2 Instrucción n

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

18

Expresiones lógicas

• También se denominan condicionales o booleanas.

• Permite “hacer preguntas” sobre el estado del programa para tomar decisiones sobre el flujo.

• Al ser evaluadas devuelven un valor lógico: VERDADERO o FALSO.

• Tipos:– Variable lógica: Ej.: B encontrada = FALSO– Con operadores relacionales y/o lógicos:

Ej.: a>3 Y NO(b+5!=9) O encontrada• Los operandos de las expresiones lógicas pueden ser, a su vez,

expresiones lógicas.

Page 10: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

10

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

19

Ejemplos de expresiones lógicasNO((letra==‘Q’)O(letra==‘z’))Y(x>=6)

(largo==ancho)Y NO(x<5)x Y (altura<=5)

((n+m)!=10) O (x<5)

• Deben respetarse las reglas de precedencia (ver capítulo anterior).

• Los paréntesis tienen la mayor precedencia.

VARB resul, x=FALSO, y=FALSO

INICIOresul = NO x Y y // ¿Cuánto vale resul?

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

20

Evaluación por cortocircuito

• El resultado de la evaluación del primer operando condiciona la evaluación de los siguientes.

• Puede evitar errores en la evaluación de operandos.• Si el primer operando de la conjunción (Y) es FALSO, la

expresión es FALSA.• Si el primer operando de la disyunción (O) es

VERDADERO, la expresión es VERDADERA.

VARN a=0, b=2, c=3, d=0; B resul

INICIOresul = (a>0) Y (c DIV a == 3)resul = (d==0) O (d DIV b == 2)

Page 11: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

11

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

21

Equivalencia de expresiones lógicas

• Se aplican las leyes de MorganVAR

Z a,b,c,dB res, x

INICIO// Suponemos inicializadas a, b, c, dres = NO(a==b) // a!=bres = NO((a==b)O(a==c)) // (a!=b)Y(a!=c)res = NO((a==b)Y(c>d)) // (a!=b)O(c<=d)res = x == FALSO // NO xres = x == VERDADERO // xres = (a<b) Y (b<a) // FALSO

res = (a<=b) O (b<=a) // VERDADERO

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

22

Estructuras selectivas

• Permiten controlar la selección de flujos alternativos en un algoritmo.

• Permiten ejecutar un bloque de acciones dependiendo de la evaluación de una condición (o guarda) que es una expresión lógica.

• Tipos de sentencias selectivas:– Sentencias de selección simple– Sentencias de selección binaria– Sentencias de selección múltiple

Page 12: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

12

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

23

Sentencia de selección simple• Sintaxis:SI CondControl ENTONCES

// accionesdentroFINSI//accionseguida

• Ejemplo: probar si un valor es positivo o negativo:

SI dato>0 ENTONCESEscribir( “Dato positivo”)

FINSIEscribir(dato)

Acciones VERDADERO

CondControl FALSO

Diagrama de flujo

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

24

Sentencia de selección binariaSI CondControl ENTONCES// Acciones SI

SINO// Acciones EOC

FINSIaccionseguida

Diagrama de flujo

VERDADEROCondControl

FALSO

Acciones SI Acciones EOC

Page 13: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

13

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

25

Ejemplo sentencia selección binaria

• Probar si un valor es positivo o negativo

SI dato>0 ENTONCESEscribir(“Positivo”)

SINOEscribir(“Negativo o cero”)

FINSIEscribir(dato)

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

26

Ejercicios propuestos

• Algoritmo que lea tres números diferentes e imprima en pantalla los valores máximo y mínimo.

• Algoritmo que lea de teclado los coeficientes de una ecuación de segundo grado e imprima las raíces de dicha ecuación, en caso de que las tenga.

• Algoritmo que lea un número de paquete seguido de un peso en kilos, y que escriba a la salida el número de paquete, seguido de “CLASE1” si el peso del paquete es menor de 32 kilos, “CLASE2” si va de 32 a 128 kilos y “CLASE3” para más de 128 kilos.

Page 14: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

14

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

27

Sentencia de selección múltiple

CASO expresión SEAvalores1: sentencias1valores2: sentencias2

... ...

valoresn: sentenciasnSINO

accionesEOCFINCASOaccionseguida

Selector (ordinal) ¿Cómo funciona la sentencia CASO?

1. Evaluación del selector.2. Comparación del

selector con los valoresi.

3. Ejecución de las sentenciasicorrespondientes.

4. Fin de la sentencia. Ejecución de la accionseguida.Errores posibles:

• El valor del selector aparece en más de una lista de valoresi• El selector no es de tipo ordinal.

Separados por comas, o rangos (..).

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

28

Ejemplo de selección múltiple

CASO Mes SEA1,2,4..6,8,9: /*no ejecutamos

nada con estos valores*/

3: Escribir(“Cumpleaños de Ana”)7: Escribir(“Aniversario de Carolina”)11: Escribir(“Mi cumpleaños”)

Escribir(“Habrá que celebrarlo”)10: Escribir(“Cumpleaños de Juan”)12: Escribir(“Boda de Pepito”)

SINO /* Resto de los valores. No poner el SINO equivale a ponerlo vacío */

Escribir (“Mes erróneo”)FINCASO

Page 15: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

15

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

29

Anidamientos de estructuras selectivasSI CondCtrl1 ENTONCES // 1

acciones1SINO

SI CondCtrl2 ENTONCES // 2acciones2

SINOSI CondCtrl3 ENTONCES // 3

acciones3SINO

acciones4FINSI // 3

FINSI // 2FINSI // 1

SI CondCtrl1 ENTONCESacciones1

SINOSI CondCtrl2 ENTONCESacciones2

SINOSI CondCtrl3 ENTONCESacciones3

SINOacciones4

FINSI

Equivalentes

¡Importante la indentación!

Comentarios como etiquetas aumentan la legibilidad.

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

30

Ejemplo: mayor de tres valoresALGORITMO MayorVAR

Z may, a, b, cINICIO

Escribir(“Introduzca tres numeros”) Leer(a,b,c)SI a>b ENTONCES /*1*/

SI a>c ENTONCES /*2*/may = a

SINOmay = c

FINSI /*2*/

SINOSI b>c ENTONCES /*3*/

may = bSINO

may = cFINSI /*3*/

FINSI /*1*/Escribir(“Mayor: “, may)FIN MayorSigue..

Page 16: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

16

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

31

Debe primarse la claridad del códigoCASO Operador SEA

‘+’ : Resultado = a+b‘-’ : Resultado = a-b

‘*’ : Resultado = a*b

‘/’ : Resultado = a/b

SINOEscribir(“Indefinido”)

FINCASO

SI Operador == ‘+’ ENTONCES // 1Resultado = a+b

SINOSI Operador == ‘-’ ENTONCES // 2

Resultado = a-b

SINOSI Operador == ‘*’ ENTONCES // 3

Resultado = a*b

SINOSI Operador == ‘/’ ENTONCES // 4Resultado = a/b

SINOEscribir(“Indefinido”)

FINSI // 4FINSI // 3

FINSI // 2FINSI // 1

Es más legible que...

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

32

Selección simple y binaria en C++

if (CondControl){accionesSI

}accionseguida

if (CondControl){accionesSI

}else{

accionesEOC}accionseguida

Selección simple

Selección binaria

¡Si la acción es única, puede prescindirse de las llaves!

Page 17: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

17

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

33

Una forma de selección múltiple en C++

if (CondControl){accionesSI

}else if (CondControl1){

accionesCC1}else if (CondControl2){

accionesCC2}else{

accioneselse}accionseguida

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

34

Selección múltiple en C++switch (expresion){

case exp-const: sentencias

break;

case exp-const: sentenciasbreak;

case exp-const: sentencias

break;default: sentencias

}

switch (a+b%2){case 1: c = 3; cin >> d;

break;

case 5:case 6:

case 7: cout << “bingo”;

break;default: cout << “vaya”;

}

Sintaxis

Ejemplo:

Tres valores que ejecutan lo mismo.

Page 18: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

18

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

35

Estructuras repetitivas

• También llamadas bucles o iteraciones.

• Permiten alterar el flujo del programa para repetir grupos de acciones.

• Ejecutan un conjunto de operaciones:a) Un número de veces determinado a priori.b) Un número de veces indeterminado a priori.

• Una condición de control (expresión lógica) permite controlar el número de repeticiones.

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

36

El bucle MIENTRAS

• Las acciones dentro del bucle se repiten un número de veces indeterminado a priori.

MIENTRAS CondControl HACER// Acciones

FINMIENTRAS

AccionesVERDADERO

CondControl

FALSO

Page 19: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

19

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

37

Características del bucle MIENTRAS

• Condición de control del bucle → expresión lógica.

• Las sentencias que forman el cuerpo del bucle se ejecutan 0 o más veces.

• Denominado también bucle pre-prueba (se evalúa la condición antes de ejecutar sus sentencias).

• Si la condición es VERDADERO el bucle se sigue ejecutando.

• Algunos ejemplos de bucles con nombre:– Bucle controlado por contador– Bucle controlado por centinela– Bucle contador

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

38

Bucle controlado por contador• Se ejecuta un número determinado de veces.• Se utiliza una variable de control del bucle (vcb).• Componentes del bucle:

– Inicialización– Evaluación– Incremento

i=1 /*Inicialización*/MIENTRAS i<=10 HACER /*Evaluación*/accionesi=i+1 /*Incremento*/

FINMIENTRAS

• Ejercicio propuesto: ¿cuántas veces se ejecuta el bucle anterior?

Condición de controlVCB

Page 20: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

20

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

39

Bucle controlado por centinela

• Centinela → valor especial de una variable que controla el final del bucle.

• Es necesario actualizar el centinela en cada iteración.• La primera evaluación de la condición exige una lectura

adelantada de la variable de control del bucle.

Leer(centinela) /*lectura adelantada*/MIENTRAS centinela!=0 HACER

accionesLeer(centinela) /*actualización*/

FINMIENTRAS

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

40

Bucle contador

• Útil cuando se quiere contar el número de veces que se ejecuta el bucle.

• La expresión lógica no depende del contador.

cont=0Leer(ch)MIENTRAS ch!= ‘.’ HACER

Escribir(ch)cont=cont+1Leer(ch)

FINMIENTRAS

Page 21: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

21

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

41

El bucle REPETIR

REPETIR// Acciones

HASTA QUE CondControl Acciones

VERDADERO

CondControl FALSO

• Las acciones dentro del bucle se repiten un número de veces indeterminado a priori.

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

42

Características del bucle REPETIR

• Condición de control del bucle → expresión lógica.

• Las sentencias que forman el cuerpo del bucle se ejecutan 1 o más veces.

• Denominado también bucle post-prueba (se evalúa la condición después de ejecutar sus sentencias).

• Si la condición es FALSO el bucle se sigue ejecutando.

• Menos general que el bucle MIENTRAS → hay ciertos bucles que no pueden implementarse con REPETIR.

Page 22: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

22

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

43

El bucle PARA

• Se emplea cuando el número de veces que se repite el bucle se conoce a priori.PARA vcb=vi HASTA vf (PASO p)HACER

// Acciones

FINPARA

Suma=0PARA i = 1 HASTA 10 HACER

Leer(valor)Escribir(valor)Suma=Suma+valor

FINPARA

Ejemplo:

Variable de control del bucle

Valor finalValor inicial

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

44

Cómo se ejecuta un bulce PARA

La variable de control del bucle (VCB) se incrementa (o decrementa, según el paso sea positivo o negativo) automáticamente.El valor de la VCB puede usarse, pero no cambiarse dentro del bucle.La VCB queda indefinida al salir del bucle.La VCB puede ser de cualquier tipo ordinal.El bucle se ejecuta en su totalidad. Los valores de inicial (vi) y final (vf) se evalúan una sola vez, al principio del bucle.

Page 23: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

23

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

45

Bucle MIENTRAS equivalente a PARA

vcb=viMIENTRAS (vcb<=vf) HACER

/*si paso negativo, MIENTRAS (vcb>=vf)*/accionesvcb=vcb + paso

FINMIENTRAS

Ejercicio propuesto: ¿puede construirse un bucle REPETIR equivalente a cualquier bucle PARA?

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

46

Ejemplo: factorial de un número natural

ALGORITMO CalcularFactorialVAR

N factorial, n, indiceINICIO

factorial = 1Escribir(“Introduzca número”)Leer(n)PARA indice = 2 HASTA n HACER

factorial = factorial * indiceFINPARAEscribir(“Resultado: “, factorial)

FIN CalcularFactorial

Page 24: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

24

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

47

Ejemplo: suma de números naturales

/* Este algorimo suma los n primeros números naturales, sin contar el cero */ALGORITMO SumarNaturalesVAR

N num, suma, contadorINICIO

Escribir(“Introduzca el número n:”)Leer(num)suma = 0PARA contador = 1 HASTA num HACER

suma = suma + contadorFINPARAEscribir(“La suma es: “, suma)

FIN SumarNaturales

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

48

Anidamientos de estructuras repetitivas

• Al igual que en las estructuras selectivas, no hay restricciones en las sentencias del cuerpo del bucle.

• La estructura interna debe de estar incluida en la externa totalmente:

Bucle más externo

Bucle anidado

Bucle anidado

Page 25: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

25

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

49

Bucles PARA anidados

• La VCB toma valores de modo tal que por cada valor de la variable control del bucle del ciclo externo se debe ejecutar totalmente el bucle interno.

• Muy útiles en el recorrido de estructuras dé más de una dimensión (véanse los arrays).

PARA vcb1 = vi1 HASTA vf1 (PASO s1) HACERPARA vcb2 = vi2 HASTA vf2 (PASO s2) HACER

// AccionesFINPARA

FINPARA

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

50

Ejemplo: triángulo de números naturales• Escribir un algoritmo que escriba un triángulo de números.• La altura se introduce como dato y debe ser menor de 10.• Ejemplo: con altura=4 quedaría como sigue:

11 2 1

1 2 3 2 11 2 3 4 3 2 1

• Observaciones:– Un bucle por cada línea de dígitos.– Cada línea se realiza en dos mitades: una incremental, desde uno hasta el

número correspondiente a la fila, y otra decremental hasta uno.• Ejemplo: la línea 3

1 2 3 2 1

Page 26: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

26

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

51

Solución del algoritmo del triángulo

ALGORITMO Triangular

CONST

C BLANCO= ‘ ‘

VAR

N altura,blancos,fila

N mitad1,mitad2

INICIO

Leer(altura)

PARA fila=1 HASTA altura HACER

PARA blancos=1 HASTA (altura-fila) HACER

Escribir(BLANCO)

FINPARA

PARA mitad1=1 HASTA fila HACER

Escribir(mitad1)

FINPARA

PARA mitad2=fila-1 HASTA 1 (PASO -1) HACER

Escribir(mitad2)

FINPARA

Escribir(‘\n’)

FINPARA

FIN Triangular

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

52

Estructuras repetitivas en C++

while (expresion) {// acciones

}

for (inicialización; condición; incremento){// acciones

}

do {// acciones

} while (expresion);

¡Ojo!, es MIENTRAS, no HASTA

Equivale a nuestro MIENTRAS

Ej: for (i=0; i<MAX; i++){ // }

Page 27: Tema 3. Estructuras de control - lcc.uma.esrusman/docencia/ic/tema3_2005_2006.pdf · 2 Introducción a los Computadores 17-oct-05 Tema 3. Estruc. control 3 Elementos léxicos de una

27

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

53

Bases de la programación estructurada

"Se demuestra que todo problema que pueda resolverse en un numero finito de pasos puede expresarse usando únicamente 3 tipos de estructuras o bloques fundamentales, con una sola entrada y una sola salida para organizar dichos pasos:

– Una caja proceso o de tratamiento secuencial.– Un mecanismo de decisión binaria.– Un mecanismo de bucle generalizado.“

(Bohm y Jacopini, 1965)

17-oct-05Introducción a los ComputadoresTema 3. Estruc. control

54

Bibliografía

• Programación en C++. Algoritmos, estructuras de datos y objetos. L. Joyanes. McGraw-Hill, 2000

• Cómo programar en C/C++. H.M. Deitel, P.J. Deitel. Prentice Hall, 1995

• Pascal. Dale/Orshalick. Ed. McGraw Hill 1986

• Programación I. José A. Cerrada y Manuel Collado. U.N.E.D. 1993.

• Fundamentos de Programación. Joyanes Aguilar. McGraw Hill. 2ª Edición, 1996.