Title: Estructuras bsicas de control del flujo de ejecucin
1Estructuras básicas de control del flujo de
ejecución
Departamento de Sistemas Informáticos y
Programación
- Facultad de CC. FísicasLaboratorio de
Programación curso 05/06 TEMA 2
2Contenido
-
- Composición secuencial
- Selección
- Condicional
- if simple
- if...else
- Con tipos ordinales
- switch
- Iteración
- while
- for
- do...while
-
3Composición secuencial
- Las instrucciones en C se ejecutan en el orden
en que aparecen escritas. - Orden de evaluación de los operadores.
- La unidad de estructuración es el bloque de
código. - Las declaraciones sólo sobreviven hasta el
final del bloque. - //Diferencias?
- int x 0
- x x 1
- x
- // //
-
- int x 0 int x 0
- x x 1 x x 1
- x
- x
4Composición secuencial
- Orden de evaluación de los operadores
- () de dentro a fuera
- !, , -- de derecha a izq
- /, , de izq a derecha
- , - de izq a derecha
- lt, gt, gt, lt de izq a derecha
- , ! de izq a derecha
- de izq a derecha
- de izq a derecha
prioridad - prioridad
5Selección condicional if simple
-
- Condiciona la ejecución de una instrucción o de
un grupo de instrucciones. - Sintaxis
- if (expresión) instrucción
- if (expresión) secuencia de
instrucciones - expresión debe ser un tipo bool.
Los paréntesis son obligatorios sintaxis if
expresión debe ser un tipo bool.
6Selección condicional if simple
- Ejemplo if
-
- int main()
-
- int n
- cout ltlt Introduzca un entero comprobaremos si
es par. \n - cin gtgt n
- if(n 2 0) cout ltlt n ltlt es par. \n
- char caracter
- cin gtgt caracter
- return 0
-
Cierto distinto de cero Falso cero
Al llegar al condiciona 1º se evalúa la
condición si es cierta se ejecuta el cuerpo. Si
es falsa se obvia.
7Selección condicional if simple
- // Diferencias?
- if(n 2 1)
- p p x
- n n 1
-
- //
- if(n 2 1)
- p p x
- n n 1
-
Normas de estilo Para una única instrucción
corta una línea. if (expresión)
instrucción Para un bloque if (expresión)
instruccion 1 instruccion n Para una
única instrucción larga if (expresión)
instruccion
8Selección condicional if .. else
- Para elegir condicionalmente entre la ejecución
de dos instrucciones. - Sintaxis
- if (expresión) instrucción else
instrucción - if (expresión)
- secuencia de instrucciones else
secuencia de instrucciones
9Selección condicional if .. else
- Ejemplo if ... else
- int main()
-
- int magico 123 / número mágico /
- int intento
- cout ltlt "Adivina el número mágico "
- cin gtgt intento
- if(intento magico)
- cout ltlt " Correcto "
- else cout ltlt ".. Incorrecto .."
- return 0
-
10Selección condicional if .. else
- Ejemplo if ... else
- int main()
-
- int n
- cout ltlt Introduzca un entero comprobaremos si
es par. \n - cin gtgt n
- if(n 2 0) cout ltlt n ltlt es par. \n
- else cout ltlt n ltlt es impar.
- char caracter
- cin gtgt caracter
- return 0
-
11Selección condicional if .. else
- Ejemplo if ... else
- int main()
-
- short int mes, dias
- cout ltlt Introduzca entero correspondiente al
mes. Le diremos cuantos dias tiene. \n - cin gtgt mes
- if(mes 1) dias 31
- else if (mes 2) dias 28
- else if (mes 3) dias 31
- else ...
- cout ltlt El mes ltlt mes ltlt tiene ltlt dias
- ltlt dias
- getchar()
- return 0
-
Evaluación secuencial. Podemos ahorrar pasos?
12Selección condicional if .. else
- Ejemplo if ... else
- int main()
-
- short int mes, dias
- cout ltlt Introduzca entero correspondiente al
mes. Le diremos cuantos dias tiene. \n - cin gtgt mes
- if(mes lt 7)
- if (mes 2 1) dias 31
- else if (mes 2) dias 28
- else dias 30
- else
- if (mes 2 1) dias 30
- else dias 31
-
- cout ltlt El mes ltlt mes ltlt tiene ltlt dias
- ltlt dias
- getchar()
- return 0
-
13Selección Aplicación programación defensiva
- Comprobación de la validez de los datos
- Uso del if para comprobar que el usuario no
introduce datos incorrectos. - // Ejemplo calcular la raíz cuadrada y el
recíproco de un número introducido por el usuario.
14Selección Aplicación programación defensiva
- int main()
-
- double usenum
- cout ltlt Este programa calcula la raiz
cuadrada ltlt - y el reciproco del numero que Vd nos dé. \n
- cout ltlt Introduzca numero. \n
- cin gtgt usenum
- if (usenum lt 0.0)
- cout ltlt La raiz cuadrada de un numero
lt ltlt negativo no existe.\n - else
- cout ltlt La raiz cuadrada de ltlt usenum
- ltlt es ltlt sqrt(usenum)ltlt \n
-
- if (usenum 0.0)
- cout ltlt El reciproco de 0 no existe\n
- else
- cout ltlt El reciproco de ltlt usenum ltlt es
- ltlt (1/usenum)
-
15Selección Errores comunes en uso del if
- Emparejamientos if..else
- // Ejemplo 10 es el numero mágico. Los números
negativos están fuera de rango - if (i gt 0)
- if (i 10)
- cout ltlt Has adivinado el numero magico \n
else - cout ltlt El numero esta fuera del rango
// El compilador trata estos enunciados con el
siguiente significado if (i gt 0) if (i
10) cout ltlt Has adivinado el numero magico
\n else cout ltlt El numero esta fuera del
rango
16Selección Errores comunes en uso del if
- // Para corregir el problema, la sintaxis
correcta es - if (i gt 0)
- if (i 10)
- cout ltlt Has adivinado el numero magico \n
-
- else
- cout ltlt El numero esta fuera del rango
17Selección Errores comunes en uso del if
- Uso de cadenas de desigualdades
- Es incorrecto utilizar expresiones como las
siguientes -
- if (x lt y lt z)
- cout ltlt z está entre x e y
- if (x y z)
- cout ltlt los tres numeros son iguales
-
- En estos casos es necesario emplear condiciones
compuestas - if ((x lt z) (z lt y))
- cout ltlt z está entre x e y
- if ((x y) (y z))
- cout ltlt los tres numeros son iguales
Son expresiones incorrectas pero compilan
18Selección Errores comunes en uso del if
- Uso de en lugar de
- No tiene el sentido que nosotros pensamos
-
- if (x 12) ltHaz algogt
- else ltHaz otra cosagt
-
- Muchos compiladores no detectan el error y
realizan la conversión del int al bool
directamente.
Siempre se ejecuta cláusula true
19Selección múltiple la instrucción switch
- Para elegir condicionalmente entre la ejecución
de varios grupos de instrucciones en función del
valor que tome variable. - switch (variable)
- case constante1
- secuencia de instrucciones
- break
- case constante2
- secuencia de instrucciones
- break
- . . .
- default
- secuencia de instrucciones
La instrucción break termina la ejecución del
switch. Si un caso no termina con break, cuando
le toque ejecutarse, su ejecución proseguirá con
la secuencia de instrucciones del siguiente caso
(si existe).
20Selección múltiple la instrucción switch
- Ejemplo de switch
- char menu()
-
- char c
- cout ltlt "1 - Comprobar ortografía\n"
- cout ltlt "2 - Corregir errores\n"
- cout ltlt "Introduce tu opción "
- cin gtgt c
- switch(c)
- case '1'
- comprobar() // llamada a otra función
- break
- case '2'
- corregir() // llamada a otra función
- break
- default
- cout ltlt "Opción no válida"
- c '0'
-
21Selección múltiple la instrucción switch
- Ejemplo de switch
- int main()
-
- short int mes, dias
- cout ltlt Introduzca entero correspondiente al
mes. Le diremos cuantos dias tiene. \n - cin gtgt mes
- switch(mes)
- case 1 case 3 case 5 case 7
- dias 31
- break
- case 9 case 11
- dias 30
- break
- default
- dias 28
- cout ltlt El mes ltlt mes ltlt tiene ltlt dias
- ltlt dias
- getchar()
- return 0