Title: Unidad temtica 3
1Unidad temática 3
- Estructuras de control
- Objetivos
- Conocer cuál es el proceso de resolución de
problemas - Conocer el concepto y uso de organigramas
- Conocer las estructuras selectivas y repetitivas
- Conocer el concepto de función
- Aplicar todos estos conocimientos a la resolución
de problemas topográficos - Contenidos
- Tema 5. Resolución de problemas
- Tema 6. Estructuras selectivas
- Tema 7. Estructuras repetitivas
- Tema 8. Funciones
2Tema 5
- Resolución de problemas
- 1. Introducción
- 2. Resolución de problemas
- 3. Organigramas
- 4. Estructuras secuenciales
- Bibliografía
- - (1) - tema 5
- - (2) - cap. 3
31. Introducción
- Necesidad de instrucciones adicionales
- que permitan ejecutar un conjunto de
instrucciones u otro en función de un determinado
resultado - ejemplo escribir un programa que lea un número
entero e imprima el texto es par si el número
es par o es impar si el número es impar. - que permitan repetir un conjunto de instrucciones
- ejemplo escribir un programa que calcule la suma
de 100 números enteros leídos desde teclado. - Instrucciones básicas de control
43. Organigramas
- Gráfico formado por una serie de líneas que
conectan entre sí diversas figuras geométricas,
que representan un tipo de instrucción en
particular
53. Organigramas
63. Organigramas
inicio
cont 1
suma 0
cierto
falso
cont lt 5?
leer número num
suma suma num
cont cont 1
escribir suma
fin
74. Estructuras secuenciales
- Instrucción acción u operación que conduce a la
resolución de un problema - Cuando finaliza la ejecución de una instrucción
se procede a la siguiente - Bloque de instrucciones en C conjunto de
instrucciones que van encerradas entre dos llaves - main()
- ...
-
8Tema 6
- Estructuras selectivas
- 1. Introducción
- 2. Selección simple
- 3. Selección doble
- 4. Instrucciones de selección anidadas
- 5. Selección múltiple
- Bibliografía
- - (1) - tema 5
91. Introducción
- Motivación poder resolver problemas en los que
se requiere ejecutar un bloque de instrucciones
según unas condiciones u otro bloque en otro
caso. - Instrucciones selectivas o alternativas o de
decisión - 1. Evalúan una expresión (lógica o relacional)
- 2. En función del resultado bifurcan el control
de ejecución del programa hacia un bloque de
instrucciones u otro
102. Selección simple
- Comportamiento y sintaxis
... if (expresion) instruccion_1 ... instruc
cion_m instruccion_n ...
112. Selección simpleEjemplo
- Programa que determina si un número leído es
positivo.
include ltstdio.hgt main() int a printf
(\nIntroduce un numero) scanf (d, a)
if (agt0) printf (\nEs positivo\n)
123. Selección doble
- Comportamiento y sintaxis
... if (expresion) instruccion_a1 ... instru
ccion_am else instruccion_b1 ... instrucc
ion_bm instruccion_n ...
133. Selección dobleEjemplo
- Programa que determina si un número leído es
positivo o negativo.
include ltstdio.hgt main() int a printf
(\nIntroduce un numero) scanf (d, a)
if (agt0) printf (\nEs positivo\n) else
printf (\nEs negativo\n)
144. Instrucciones de selección anidadas
- Resolución de una ecuación de primer grado
154. Instrucciones de selección anidadas
- Programa en C.
- include ltstdio.hgt
- main ()
- float a, b
- printf (Introduce el valor de a y b
(axb)) - scanf (ff, a, b)
- if (a ! 0.0)
- printf (La solucion es f \n, -b/a)
- else
- if (b ! 0.0)
- printf (La solucion es imposible \n)
- else
- printf (La solucion es indeterminada
\n) -
165. Selección múltiple
switch (expresion) case expr1 instruccion
a1 ...
instrucción ai break
... case exprn instruccion m1
... instrucción mj
break default instruccion n1
... instrucción nk
break
175. Selección múltipleEjemplo
- include ltstdio.hgt
- main()
- char calificacion
- int nota
- printf (Introduce el valor de la
calificacion) - scanf (c, calificacion)
- switch (calificacion)
- case A nota 4
- break
- case B nota 5
- break
-
case C nota 6 break
case D nota 7 break
case E nota 8 break
default nota -1 if (nota ! -1) printf
(Nota d \n, nota) else printf
(Calificacion desconocida\n)
185. Selección múltipleAlternativas comunes
switch (expresion) case expr1_1 ... case
expr1_x instruccion a1
... instrucción ai
break ... case exprm_1 ... case
exprm_y instruccion m1
... instrucción mj
break default instruccion n1
... instrucción nk
break
195. Selección múltiple. Alternativas
comunesEjemplo
- include ltstdio.hgt
- main()
- char calificacion
- int nota
- printf (Valor de la nota)
- scanf (d, nota)
- switch (nota)
- case 0
- case 1
- case 2
- case 3
- case 4printf(\nSusp)
- break
case 5 case 6printf(\nAprob)
break case 7 case
8printf(\nNotab) break case
9 case 10printf(\nSobr)
break defaultprintf(\nDesconoc)
20Tema 7
- Estructuras repetitivas
- 1. Introducción
- 2. Instrucción while
- 3. Bucles infinitos, terminación de bucles y
contadores - 4. Instrucción do...while
- 5. Instrucción for
- 6. Instrucciones repetitivas anidadas
- Bibliografía
- - (1) - tema 5
211. Introducción
- Motivación poder resolver problemas en los que
se requiere ejecutar repetidamente un bloque de
instrucciones. - Elementos a identificar
- bloque de instrucciones que tiene que ejecutarse
repetidamente - número de veces que estas instrucciones deben
ejecutarse - a veces no es conocido este número de
repeticiones - se puede determinar especificando que el bloque
de instrucciones se ejecute mientras se cumpla
una determinada condición - Instrucciones repetitivas o bucles
-
222. Instrucción while
- Comportamiento y sintaxis
-
... while (expresion) instruccion_1 ... inst
ruccion_m instruccion_n ...
232. Instrucción whileEjemplo
- Calcular la suma de N números enteros siendo N un
número solicitado al usuario. - include ltstdio.hgt
- main ()
- int N, suma0, numero
- printf (Introduce la cantidad de numeros a
leer) - scanf (d, N)
- while (N!0)
- printf (Introduce el valor del numero )
- scanf (d, numero)
- suma suma numero
- NN-1
-
- printf (El valor de la suma es d\n, suma)
-
243. Bucles infinitos, terminación de bucles y
contadoresBucles infinitos
- Ejemplo. Programa que calcula el interés
producido por un capital - include ltstdio.hgt
- main ()
- int capital, tasa
- float interes
- printf (Introduce el valor del capital)
- scanf (d, capital)
- tasa10
- while (tasa!20)
- interestasacapital/100.0
- printf (Interes producido f con una tasa
d\n, - interes, tasa)
- tasatasa3
-
-
253. Bucles infinitos, terminación de bucles y
contadoresTerminación de bucles
- Caso 1. El enunciado no especifica cuántas veces
ni hasta cuándo debe repetirse el bloque de
instrucciones. - Solución Mostrar un mensaje por pantalla al
usuario donde se pregunta si desea introducir más
datos. Continuará el bucle si la respuesta es SI. - Ejemplo Hacer un programa en C que calcule la
suma de una serie de números leídos desde
teclado. - char resp
- ...
- while (respS resps)
- ...
- printf (Hay algun valor mas? (s/n) )
- fflush (stdin)
- scanf (c, resp)
-
263. Bucles infinitos, terminación de bucles y
contadoresTerminación de bucles
- Caso 2. El enunciado no especifica cuántas veces
debe repetirse el bloque de instrucciones, pero
sí indica hasta cuándo. - Ejemplo Hacer un programa en C que calcule la
suma de una serie de números leídos desde teclado
hasta que se introduzca el valor 0. - int valor
- ...
- while (valor ! 0)
- printf (Introducir el valor )
- scanf (d, valor)
- ...
-
273. Bucles infinitos, terminación de bucles y
contadoresTerminación de bucles
- Caso 3. El enunciado especifica cuántas veces
debe repetirse el bloque de instrucciones. - Ejemplo Hacer un programa en C que calcule la
suma de una serie 20 de números leídos desde
teclado. - int valor, contador0
- ...
- while (contador lt 20)
- ...
- contadorcontador1
-
283. Bucles infinitos, terminación de bucles y
contadoresTerminación de bucles
- Caso 4. El enunciado no especifica cuántas veces
debe repetirse el bloque de instrucciones, sino
que es el usuario el que lo determina durante la
ejecución del programa. - Ejemplo Hacer un programa en C que calcule la
suma de una serie N de números leídos desde
teclado. - int valor, contador0, N
- printf (Cuantos numeros van a leerse?)
- scanf (d, N)
- ...
- while (contador lt N)
- ...
- contadorcontador1
-
293. Bucles infinitos, terminación de bucles y
contadoresContadores
- Variable cuyo valor se incrementa o decrementa en
una cantidad constante en cada iteración. - Hacer un programa que calcule
- la suma de una serie 20 de
- números leídos desde teclado.
include ltstdio.hgt main() int valor,
contador20, suma0 while (contadorgt0)
printf (Valor) scanf (d, valor)
sumasumanumero contador--
printf(Valor de la sumad\n,
suma)
304. Instrucción do...while
- Comportamiento y sintaxis
-
... do instruccion_1 ... instruccion_m
while (expresion) instruccion_n ...
314. Instrucción do...whileEjemplo
- Calcular los múltiplos de 4 comprendidos entre 4
y N. - include ltstdio.hgt
- main ()
- int N, ultimo_multiplo
- do
- printf (Introduce un valor para N mayor
o igual a 4) - scanf (d, N)
- if (Nlt4) printf (Dato incorrecto.\n)
- while (Nlt4)
- ultimo_multiplo4
- while (ultimo_multiploltN)
- printf (Un multiplo es el valor d\n,
ultimo_multiplo) - ultimo_multiploultimo_multiplo4
-
-
325. Instrucción for
- Comportamiento y sintaxis
-
... for (expr_1 expr_2 expr_3) instruccion_1
... instruccion_m instruccion_n ...
335. Instrucción forEjemplo
- Calcular la suma de una serie N de números leídos
desde teclado. -
- include ltstdio.hgt
- main ()
- int suma0, N, numero, i
- printf (Cuantos numeros van a leerse?)
- scanf (d, N)
- for (i1 iltN i)
- printf (Introduce el valor del numero
) - scanf (d, numero)
- sumasumanumero
-
- printf (El valor de la suma es d\n, suma)
-
34Resumen
- Si se conoce el número de iteraciones antes de
ejecutar el bucle, se utiliza la instrucción for. - En caso contrario
- si el bucle se ejecutará siempre al menos una
vez, se utiliza la instrucción do...while - si el bucle se ejecutará cero o más veces, se
utiliza la instrucción while
356. Instrucciones repetitivas anidadas
- Cuando el bloque de instrucciones de una
estructura repetitiva incluye a su vez otra
instrucción repetitiva. - correctas incorrecta
366. Instrucciones repetitivas anidadas Ejemplo
- Se dispone de un conjunto de N alumnos y de cada
uno de ellos se desea saber la nota de tres
asignaturas. -
- / bucle alumnos /
- for (alumno1 alumnoltN alumno)
- / bucle asignaturas /
- for (asignatura1 asignaturalt3
asignatura) - printf (Nota de la asignatura d del alumno
d, - asignatura, alumno)
- ...
- / fin bucle asignaturas /
- / fin bucle alumnos /
-
37Tema 8
- Funciones
- 1. Introducción
- 2. Definición de función
- 3. Transferencia de información entre funciones
- 4. Paso de argumentos a funciones
- 5. Variables locales y globales
- Bibliografía
- - (1) - tema 6
381. Introducción
- Programación modular
- dividir la complejidad de un problema
- identificar subproblemas o tareas más simples
- reutilizar el código
- Módulo
- Características básicas
- Alta cohesión
- Bajo acoplamiento
- En C los módulos se implementan como funciones
- Todos los programas contienen al menos la función
main.
392. Definición de función
- Una función permite agrupar un conjunto de
instrucciones en un bloque que realizará una
tarea elemental. - Para que una función se ejecute, es necesario que
otra función la llame. - Función invocadora / invocada
402. Definición de funciónEstructura de una
función en C
- Cabecera
- tipo_dato nombre_funcion (lista_args_formales)
- tipo_dato tipo de dato del valor que devuelve la
función (void si no devuelve nada) - nombre_funcion nombre con el que debe llamarse a
la función - lista_args_formales conjunto de pares tipo_dato
nombre_vble, separados por comas. - Permiten la transferencia de información a la
función desde donde es invocada. - Ejemplos
- int numero_primo (int num)
- float cent_to_rad (float angulo)
- void imprimir (int a, float b, char c)
412. Definición de funciónEstructura de una
función en C
- Cuerpo
-
- declaración de variables
- conjunto de instrucciones
-
- Ejemplo
float cent_to_rad (float angulo) float
nuevo_angulo nuevo_angulo
angulo3.1416/200 return (nuevo_angulo)
423. Transferencia de información entre
funciones
- Devolución de una función
- return expresion
- sólo puede devolver un valor
- La función invocadora puede
- asignar el valor devuelto a una variable
- nombre_vble nombre_funcion(arg1,...,argn)
- utilizar directamente el dato devuelto en una
instrucción - printf (d\n, nombre_funcion(arg1,...,argn))
434. Paso de argumentos a funciones
- Zona de memoria asociada a una función
- Cuando comienza su ejecución se reserva el
espacio necesario para almacenar los argumentos
formales y el resto de variables. - Cuando finaliza, se libera, y por tanto, los
valores de las variables se pierden. - Los parámetros se copian en esta zona de memoria.
Por tanto, se puede modificar su valor sin
afectar al dato de la función invocadora.
444. Paso de argumentos a funcionesEjemplo 1
include ltstdio.hgt void modificar (int a)
aa3 printf (\nValor desde la funcion d\n,
a) main() int a2 printf (\nValor antes
de llamar a la funcion d\n, a) modificar
(a) printf (\nValor despues de llamar a la
funcion d\n, a)
Valor antes de llamar a la funcion 2 Valor desde
la funcion 6 Valor despues de llamar a la funcion
2
454. Paso de argumentos a funcionesEjemplo 2
include ltstdio.hgt float cent_to_rad (float
angulo) float nuevo_angulo nuevo_angulo
angulo3.1416/200 return (nuevo_angulo)
main() float a printf (\nValor del
angulo a convertir) scanf (f, a) a
cent_to_rad (a) printf (\nValor del angulo en
radianes f\n, a)
465. Variables locales y globalesVariables locales
- Ámbito de una variable
- porción del programa donde se conoce (puede
consultarse su valor) - Variable local
- Su ámbito se restringe a la función que la ha
declarado - Lo mismo ocurre con un argumento formal
475. Variables locales y globalesVariables globales
- Variable global
- Se define fuera de cualquier función
- Su ámbito son todas las funciones del programa
485. Variables locales y globalesCuestiones a
tener en cuenta
- Las variables locales y los argumentos formales
tienen prioridad sobre las variables globales. - Efecto colateral
- alteración del valor de una variable global a
causa de una función - No es aconsejable el uso de variables globales en
lugar del paso de parámetros. - La legibilidad del programa se reduce
- Puede dar lugar a efectos colaterales
difícilmente localizables