SlideShare una empresa de Scribd logo
1 de 94
Introducción a la
programación
Tema 2. Instrucciones estructuradas
Apuntes generales de la asignatura adaptados por Oriol Borrás Gené @oriolUPM
Curso 2017/18
2
Prueba (10’)
Escribir un programa en Pascal que sume 2 números. Pedir por
pantalla al usuario que los escriba, leer los números. No hace falta que
se muestre el resultado por pantalla.
1. Análisis del problema
2. Pseudocódigo
3. Programa en Pascal
2
Adaptado por Oriol Borrás Gené @oriolupm
Tema 2.
Instrucciones
estructuradas
Adaptado por Oriol Borrás Gené -
@oriolupm
2.1. Instrucciones compuestas
2.2. Instrucciones de selección
2.3. Instrucciones de iteración
4
Objetivo
Exponer la forma de controlar el orden de ejecución de las acciones
del programa:
● Control por selección
● Control por iteración
4
Adaptado por Oriol Borrás Gené @oriolupm
Bloque de instrucciones o instrucciones compuestas:
BEGIN
Secuencia de instrucciones separadas por el carácter “;”
END (sin punto)
(no es necesario el ; después de la última instrucción antes del END)5
2.1. Instrucciones compuestas
5
Adaptado por Oriol Borrás Gené @oriolupm
6
Bloque de instrucciones
Se utiliza en:
● Instrucciones estructuradas de selección y de iteración
● Subprogramas:
○ se usan para modelar subproblemas y sus soluciones
algorítmicas en el marco del diseño descendente y del
refinamiento sucesivo
○ son acciones/cálculos lógicos (para el programador)
6
Adaptado por Oriol Borrás Gené @oriolupm
7
2.2. Instrucciones de selección
● Instrucción IF (SI...ENTONCES)
● Instrucción CASE (CASO DE…)
7
Adaptado por Oriol Borrás Gené @oriolupm
8
Instrucciones de selección
Estructura de control de selección:
● Sirve para cambiar el flujo de ejecución secuencial.
● Permite elegir dinámicamente (en tiempo de ejecución) entre
diferentes secuencias de instrucciones.
8
Adaptado por Oriol Borrás Gené @oriolupm
Sintaxis:
IF <ExpresionBooleana> THEN
<Instruccion1>
[ELSE]
<Instruccion2>
El valor entre corchetes ELSE es opcional,
se puede construir la instrucción solo con IF
y THEN.
9
La instrucción IF…THEN… [ELSE]
9
Adaptado por Oriol Borrás Gené @oriolupm
Semántica:
● Si la ExpresionBooleana
devuelve un valor TRUE, se
ejecuta la Instruccion1.
● Si devuelve un valor FALSE
se ejecuta la instruccion2
Sintaxis:
10
La instrucción IF…THEN… [ELSE]
(pseudocódigo)
10
Adaptado por Oriol Borrás Gené @oriolupm
Si (condición) entonces
Instrucción 1
Sino
Instrucción a
Fin Si
Condición
Instrucción 1 Instrucción a
Si No
11
Selección de secuencias de instrucciones
● Para elegir entre secuencias de instrucciones, hay que definirlas
como un bloque
● Al igual que las instrucciones, dichos bloques han de sangrarse
adecuadamente
● Un ; antes de ELSE produce error
11
Adaptado por Oriol Borrás Gené @oriolupm
12
Ejemplo
BEGIN {cuerpo del programa}
writeln('Introduzca dos números');
readln(x,y);
IF x > y THEN
BEGIN {bloque interior1}
max := x;
writeln('x es mayor que y')
END {if}
ELSE
BEGIN {bloque interior2}
max := y;
writeln('y es mayor o igual que x')
END {else}
END. {programa}
12
Adaptado por Oriol Borrás Gené @oriolupm
13
● El sangrado facilita la lectura del programa para el programador → El
compilador ignora el sangrado
● Poner un ; antes de la parte ELSE → Error de compilación:
Errores comunes (instrucción IF)
13
Adaptado por Oriol Borrás Gené @oriolupm
Instrucción simple
IF <condicion> THEN
instruccion1;
ELSE
instruccion2;
Bloque de instrucciones
IF <condicion> THEN
BEGIN
instruccion1;
instruccion2;
END;
ELSE
instruccionN;
14
Recomendaciones
● Sangrar las instrucciones
● Documentar el fin del bloque con un comentario
● No repetir instrucciones comunes en las distintas ramas
● No utilizar instrucciones IF para la asignación de valores booleanos
14
Adaptado por Oriol Borrás Gené @oriolupm
15
Recomendaciones (ejemplo)
BEGIN {cuerpo del programa}
writeln('Introduzca un número);
readln(x);
IF x >= 0 THEN
BEGIN {bloque interior1}
writeln('El número es positivo');
sqr (x);
END {if}
ELSE
BEGIN {bloque interior2}
writeln('El número es negativo'):
sqr (x);
END {else}
END. {programa}
15
Adaptado por Oriol Borrás Gené @oriolupm
BEGIN {cuerpo del programa}
writeln('Introduzca un número);
readln(x);
IF x >= 0 THEN
writeln('El número es positivo')
ELSE
writeln('El número es negativo');
sqr (x);
END. {programa}
16
Alternativas múltiples
Para elegir entre tres o más alternativas:
● anidar instrucciones IF
● usar la instrucción CASE
16
Adaptado por Oriol Borrás Gené @oriolupm
17
Instrucciones IF anidadas
Adaptado por Oriol Borrás Gené @oriolupm
Sintaxis:
IF <ExpresionBooleana1> THEN
<Instruccion1>
[ELSE IF <ExpresionBooleana2> THEN]
<Instruccion2>
[ELSE IF <ExpresionBooleana2> THEN]
<Instruccionn>
[ELSE]
<Instruccion B>
Sintaxis:
Instrucciones IF anidadas (pseudocódigo)
Adaptado por Oriol Borrás Gené @oriolupm
Fuente:
https://algoritmiafordummies.wikispaces.com/5.1.3.+Sentencia+if+en+es
calera+%28IF-ELSE-IF%29
Si (condición 1) entonces
Instrucción 1
Sino Si (condición 2) entonces
Instrucción 2
Sino Si (condición 3)
Instrucción 3
Sino
Instrucción 4
Fin si
Sintaxis:
Instrucciones IF anidadas 2 (pseudocódigo)
Adaptado por Oriol Borrás Gené @oriolupm
Si (condición 1) entonces
Instrucción 1
Si (condición 2) entonces
Instrucción 2
Sino
Instrucción 3
Fin si
Sino
instrucción 4
Fin si
Condición 1
Condición 2
Instrucción 1
Instrucción 4
Instrucción 2 Instrucción 3
Sí
Sí
No
No
20
Instrucciones IF anidadas: Ejemplo
PROGRAM ListaNota;
VAR
nota:integer;
BEGIN {ListaNota}
readln(nota);
IF (nota=1) THEN
writeln(‘Aprobado’)
ElSE IF (nota=2) THEN
writeln(‘Notable’)
ELSE IF (nota=3) THEN
writeln(‘Sobresaliente’)
ELSE IF (nota=4) THEN
writeln(‘Matricula de honor’)
ELSE
writeln(‘La nota no es válida’);
END. {ListaNota}
20
Adaptado por Oriol Borrás Gené @oriolupm
21
Instrucción CASE: Ejemplo
PROGRAM ListaNota;
VAR
nota:integer;
BEGIN {ListaNota}
readln(nota);
CASE nota OF
1:writeln(‘Aprobado’);
2:writeln(‘Notable’);
3:writeln(‘Sobresaliente’);
4:writeln(‘Matricula de honor’)
ELSE
writeln(‘La nota no es válida’);
END {CASE}
END. {ListaNota}
21
Adaptado por Oriol Borrás Gené @oriolupm
Sintaxis:
CASE <expresionSelectora> OF
<etiqueta1>: <Instrucción1>;
<etiqueta2>: <Instrucción2>;
. . .
<etiquetaN>: <InstrucciónN>
[ELSE
<InstrucciónELSE>; ]
END {CASE}
22
No existe en Pascal
Standard y es
opcional en TP
La instrucción CASE…OF
22
Adaptado por Oriol Borrás Gené @oriolupm
Según var hacer
Caso, = 1
Instrucción 1
Caso, = 2
Instrucción 2
Caso, = 3
Instrucción 3
Caso, si no
Instrucción 4
Fin según
Sintaxis:
23
La instrucción CASE…OF (pseudocódigo)
23
Adaptado por Oriol Borrás Gené @oriolupm
Var
Instrucción 2 Instrucción 1
Caso 1Caso 2
Instrucción 3 Instrucción 4
Caso 3
Caso n
24
La instrucción CASE…OF
Semántica:
1. Se evalúa expresionSelectora
2. Se compara con las etiquetas de forma ordenada, empezando con
la primera.
a. Si la comparación es TRUE se ejecuta la instrucción asociada
a esa etiqueta y termina la instrucción CASE
b. Si la comparación es FALSE, se compara con la siguiente
etiqueta
3. Si ninguna etiqueta coincide con la ExpresiónSelectora, se ejecuta
la instrucción asociada a ELSE (si existe) 24
Adaptado por Oriol Borrás Gené @oriolupm
25
La instrucción CASE
Observaciones
● Expresión selectora tiene que ser de tipo ordinal:
○ integer, char, boolean o enumerado:
■ .. : un intervalo. Ej. : 2 .. 34 (de 2 a 34)
■ , : varios valores concretos. Ej.: 23, 35, 57
● Las etiquetas tienen que tener valor/es constante/s:
○ constantes, literales, listas de constantes o subintervalos
● Las instrucciones: instrucción o bloque (BEGIN y END)
25
Adaptado por Oriol Borrás Gené @oriolupm
26
La instrucción CASE
Ejemplo:
CASE opcion OF
1..15: writeln('Primera Quincena');
16: writeln('Primera Prueba');
17..29: BEGIN {bloque}
writeln('Esto es un bloque');
writeln('Segunda Quincena')
END; {bloque}
30,31: writeln('Segunda Prueba’)
ELSE writeln('valor erróneo');
END {CASE}
26
Adaptado por Oriol Borrás Gené @oriolupm
27
La instrucción CASE
Ejemplo Boolean:
CPROGRAM Carnetconducir;
VAR
carnet:boolean;
BEGIN {Carnetconducir}
carnet:=FALSE;
CASE (carnet) OF
FALSE:writeln('tiene carnet');
TRUE:writeln('no tiene carnet');
END {case}
END. {Carnetconducir}
27
Adaptado por Oriol Borrás Gené @oriolupm
28
IF anidado o CASE
● CASE:
○ Cuando la decisión dependen de una misma expresión
selectora
● IF anidado:
○ Cuando haya alternativas múltiples que dependen de
selectores diferentes
28
Adaptado por Oriol Borrás Gené @oriolupm
29
Ejemplo: IF anidado
Ejemplo
● Decidir si se alquila un coche en función de dos variables selectoras:
○ la posesión del carnet de conducir
○ la edad
● Regla:
○ no tiene carnet → no se alquila coche
○ tiene carnet y es menor de 25 → se alquila a precio alto
○ tiene carnet y es mayor de 25 → se alquila a precio bajo
29
Adaptado por Oriol Borrás Gené @oriolupm
30
IF (Condición1) THEN BEGIN
Instrucción1;
...;
InstrucciónN
END {IF}
ELSE IF (Condición2) THEN BEGIN
InstrucciónA;
...;
InstrucciónZ
END {ELSE IF condición2}
ELSE BEGIN
Instruccióna;
...
Instrucciónz;
END; {ELSE}
Normas de estilo (IF)
IF (Condición) THEN
BEGIN
Instrucción1;
...;
InstrucciónN
END {IF}
ELSE
BEGIN
InstrucciónA;
...;
InstrucciónZ
END; {ELSE}
30
Adaptado por Oriol Borrás Gené @oriolupm
31
CASE Expresión OF
valor1: BEGIN
Instrucción1;
...;
InstrucciónN
END; {Valor1}
...
valorN: BEGIN
InstrucciónA;
...;
InstrucciónZ
END; {ValorN}
ELSE
InstruccionElse;
END; {CASE}
31
Adaptado por Oriol Borrás Gené @oriolupm
Normas de estilo (CASE)
32
Pruebas de condiciones
● Para probar una expresión simple del tipo:
E1 <operador_relacional> E2
● Se requieren tres pruebas:
○ El valor de E1 mayor, menor o igual que el de E2.
La prueba que haga el valor de E1 mayor o menor que el de E2 debe
hacer que la diferencia entre estos dos valores sea lo más pequeña
posible.
32
Adaptado por Oriol Borrás Gené @oriolupm
33
Pruebas de condiciones
● Si la expresión es de la forma:
B1 AND B2 ó B1 OR B2
donde B1 y B2 son expresiones lógicas, esta se cubre para B1 verdadero y
B2 falso, B1 falso y B2 verdadero y ambos B1 y B2 verdadero o falso.
33
Adaptado por Oriol Borrás Gené @oriolupm
34
2.3 Instrucciones de iteración
Definiciones
● Ciclo o bucle o iteración: Secuencia de instrucciones que se
ejecutan repetidamente.
● La iteraciones pueden ser controladas por las siguientes
instrucciones:
○ MIENTRAS (WHILE)
○ REPETIR…HASTA (REPEAT..UNTIL)
○ DESDE o PARA (FOR)
34
Adaptado por Oriol Borrás Gené @oriolupm
35
2.3 Instrucciones de iteración
Definiciones
● Cuerpo del bucle: Son las instrucciones que se encuentran dentro
del bucle.
● Variables controladoras: Son las variables de las que depende la
ejecución del cuerpo del bucle.
○ Deben ser modificadas dentro del cuerpo del bucle.
35
Adaptado por Oriol Borrás Gené @oriolupm
Sintaxis
WHILE <expresión booleana> DO
<instrucción>;
ó
WHILE <expresión booleana> DO
BEGIN
<instrucción1>;
<instrucción2>;
…
END;
36
La instrucción WHILE
36
Adaptado por Oriol Borrás Gené @oriolupm
Semántica
37
Instrucción N-1;
WHILE <condición> DO
BEGIN
instrucN1;
. . .
instrucNk
END; {WHILE}
Instrucción N+1;
La instrucción WHILE
true
¿Condición?
false
instrucN1;
instrucNk;
Instrucción N+1
37
Adaptado por Oriol Borrás Gené @oriolupm
38
La instrucción WHILE (pseudocódigo)
Sintaxis
38
Adaptado por Oriol Borrás Gené @oriolupm
Mientras (condición) hacer
Instrucción 1
Instrucción 2
Repetir
Mientras
(Condición)
Instrucción 1
Instrucción 2
No
Sí
39
Características y ejemplo
● La estructura WHILE modela ciclos preprobados (si es falsa la
condición no se ejecuta).
● La estructura WHILE realiza un número variable de iteraciones
(cero, una o varias)
Ejemplo:
n=5
Calcular ∑ xi = 1+2+...+n utilizando WHILE
i=1
39
Adaptado por Oriol Borrás Gené @oriolupm
40
Características y ejemplo
Ejemplo:
n=5
Calcular ∑ xi = 1+2+...+n
i=1
40
Adaptado por Oriol Borrás Gené @oriolupm
PROGRAM sum;
VAR contador,suma: integer;
BEGIN
{Inicializamos variables}
contador:= 1;
suma:= 0;
WHILE (contador<=5) DO
BEGIN
suma := suma+contador;
contador := contador+1;
END; {while}
writeln('x = ', suma)
END.
41
Función EoLn
La función EoLn se hace verdadera cuando se alcanza una marca de
fin de línea y falsa en otro caso.
41
Adaptado por Oriol Borrás Gené @oriolupm
Var
c: char;
numCar: integer;
numCar:= 0;
WHILE not EoLn DO
BEGIN
Read(c);
numCar:= numCar + 1
END; {whileg}
WriteLn(numCar)
42
Errores comunes
● Realizar ciclos infinitos.
○ ¿Cómo se evitan? Modificando dentro del cuerpo la variable/s
que lo controlan
● No inicializar las variables de control y de proceso del bucle.
○ ¿Cómo se evita? Dándoles valor previamente.
● Dejar el cuerpo del bucle vacío.
○ ¿Cómo se evita? Jamás colocar un ; detrás del DO, pues
provocaría además un ciclo infinito
42
Adaptado por Oriol Borrás Gené @oriolupm
43
Instrucciones WHILE anidadas
Es posible anidar estructuras WHILE:
WHILE <condición-1> DO BEGIN
<instrucciones>;
WHILE <condición-2> DO BEGIN
<instrucciones>
END; {WHILE interior}
<instrucciones>
END {WHILE exterior}
43
Adaptado por Oriol Borrás Gené @oriolupm
44
REPEAT ... UNTIL
Sintaxis
REPEAT
<instrucción1> ;
...
<instrucciónN> ;
UNTIL <expresión booleana>
44
Adaptado por Oriol Borrás Gené @oriolupm
45
REPEAT ... UNTIL (pseudocódigo)
45
Adaptado por Oriol Borrás Gené @oriolupm
Sintaxis
Repetir
Instrucción 1
Instrucción 2
Hasta que (condición)
Condición
Instrucción 1
Instrucción 2
Si
No
46
La instrucción REPEAT ... UNTIL
Nótese:
● Excepcionalmente, todas las instrucciones entre REPEAT y UNTIL
se consideran un bloque de instrucciones, aunque no estén
delimitadas por BEGIN y END.
46
Adaptado por Oriol Borrás Gené @oriolupm
47
REPEAT … UNTIL
instrucción N-1;
REPEAT
instrucN1;
. . .
instrucNk
UNTIL <condición>;
instrucción N+1;
true
¿Condición?
false
Semántica:
instrucN1;
instrucNk
instrucción N+1
instrucc N-1
47
Adaptado por Oriol Borrás Gené @oriolupm
48
Ejemplos
Ejemplo: Lectura de datos
● Leer un número asegurándose que el número es positivo.
Ejemplo
Realizar un programa que calcule:
5
∑ xi = 1+2+...+n utilizando REPEAT
i=0
48
Adaptado por Oriol Borrás Gené @oriolupm
49
Ejemplos
n=5
∑ xi = 1+2+...+n utilizando REPEAT
i=0
49
Adaptado por Oriol Borrás Gené @oriolupm
PROGRAM sum;
VAR contador,suma: integer;
BEGIN
{Inicializamos variables}
contador:= 1;
suma:= 0;
REPEAT
suma := suma+contador;
contador := contador+1;
UNTIL (contador>5);
writeln('x = ',suma)
END.
50
Ejemplos
Ejemplo: Lectura de datos
● Leer un número asegurándose que el número es positivo.
PROGRAM numeropositivo;
VAR
n:integer;
BEGIN
REPEAT
read(n);
UNTIL (n>=0);
write('el numero positivo es = ',n);
END.
50
Adaptado por Oriol Borrás Gené @oriolupm
51
Características y ejemplos
● La estructura REPEAT modela ciclos postprobados: el cuerpo
siempre se ejecuta
● La estructura REPEAT realiza un número variable de
iteraciones.
● Cualquier ciclo REPEAT puede traducirse en un ciclo WHILE
51
Adaptado por Oriol Borrás Gené @oriolupm
52
Errores comunes
● Realizar ciclos infinitos
○ ¿Cómo se evitan? Modificando dentro del cuerpo la variable/s
que lo controlan
● Pensar que puede no ejecutarse ninguna vez
○ Todas las operaciones durante la primera ejecución del cuerpo
son válidas
○ La primera ejecución del cuerpo modifica las variables de la
condición
52
Adaptado por Oriol Borrás Gené @oriolupm
53
WHILE y REPEAT...UNTIL
Usar ciclo
REPEAT...UNTIL
¿Se sabe de antemano que el cuerpo del
bucle ha de ejecutarse al menos una vez?
Usar ciclo
WHILE
Recomendaciones técnicas (preliminares):
NOSI
53
Adaptado por Oriol Borrás Gené @oriolupm
54
FOR .. TO .. DO
Sintaxis (ciclo ascendente):
FOR indice:= <expr. inicial> TO <expr. final> DO
<instrucción>
Sintaxis (ciclo descendente):
FOR indice:= <expr. inic> DOWNTO <expr. fin> DO
<instrucción>
54
Adaptado por Oriol Borrás Gené @oriolupm
55
FOR .. TO .. DO ascendente
(pseudocódigo)
Sintaxis
55
Adaptado por Oriol Borrás Gené @oriolupm
Desde var = Vinicial hasta Vfinal
Instrucción 1
Instrucción 2
Siguiente var
Desde var =
Vinicial a Vfinal
Instrucción 1
Instrucción 2
var > Vfinal
var <= Vfinal
Vinicial := Vinicial +1
56
Semántica ciclo FOR ascendente
FOR Indice:=ExpIni TO ExpFinal DO
BEGIN
instrN1;
...
instrNk
END; {FOR}
¿Indice<=ExpFinal?
false
INC (Indice)
true
56
Adaptado por Oriol Borrás Gené @oriolupm
57
Semántica ciclo FOR descendente
FOR Indice:=ExpIni DOWNTO ExpFinal DO
BEGIN
instrN1;
...
instrNk
END; {FOR}
¿Indice>=ExpFinal?
false
DEC (Indice)
true
57
Adaptado por Oriol Borrás Gené @oriolupm
58
Estructura FOR .. TO .. DO
Ciclo ascendente
● WHILE
● FOR equivalente
indice:=expInicial;
WHILE indice<=expFinal DO BEGIN
<instrucciones>;
indice:=succ(indice);
END; {WHILE}
FOR indice:=expInicial TO expFinal DO BEGIN
<instrucciones>;
END; {FOR} 58
Adaptado por Oriol Borrás Gené @oriolupm
59
Estructura FOR .. TO .. DO
Ciclo descendente
● WHILE
● FOR equivalente
indice:=expFinal;
WHILE indice>=expInicialDO BEGIN
<instrucciones>;
indice := pred(indice);
END; {WHILE}
FOR indice:=expFinal DOWNTO expInicial DO BEGIN
<instrucciones>;
END; {FOR}
59
Adaptado por Oriol Borrás Gené @oriolupm
60
Expresión inicial y final
Las expresiones inicial y final cumplen:
● son tipos compatibles con el tipo de índice.
● se evalúan sólo una vez.
● dependiendo de sus valores puede no ejecutarse el cuerpo del
bucle.
Recomendación importante:
● no modificar su valor dentro del ciclo
60
Adaptado por Oriol Borrás Gené @oriolupm
61
Restricciones para la variable contadora
Índice o contador:
● Tiene que ser de tipo ordinal
Restricciones para índice:
● No modificar dentro del cuerpo (read, asignación,..)
● No usar como índice en un FOR interior
● Al salir del ciclo FOR, suponemos que su valor está sin definir
61
Adaptado por Oriol Borrás Gené @oriolupm
62
Ejemplo
5
∑ xi = 1+2+...+n utilizando FOR
i=0
62
Adaptado por Oriol Borrás Gené @oriolupm
63
Ejemplo de FOR anidados
Ejemplo
Escribe por pantalla los elementos de la matriz de tamaño n*m
definida por aij = (i + j)/2
63
Adaptado por Oriol Borrás Gené @oriolupm
64
Errores comunes y limitaciones
Errores comunes
● Modificar el contador.
○ ¿Cómo se evita? No usando el contador dentro del bucle.
● Poner un ; detrás del DO.
○ indicará cuerpo vacío (no hacer).
Limitaciones
● Incremento/decremento de uno en uno (la alternativa: WHILE)
64
Adaptado por Oriol Borrás Gené @oriolupm
65
Características del FOR
● El valor de la variable de control del FOR se comprueba antes de
ejecutar el bucle
● La estructura FOR realiza un número fijo de iteraciones
● El incremento (o decremento) del índice del bucle es automático
● El bucle termina cuando el valor de la variable de control sale fuera
del intervalo de valores establecido.
65
Adaptado por Oriol Borrás Gené @oriolupm
66
WHILE , REPEAT y FOR
Usar ciclo
REPEAT...UNTIL
¿ Se sabe de antemano que el cuerpo del bucle
ha de ejecutarse al menos una vez?
Usar ciclo
WHILE
Recomendaciones técnicas:
¿ Se sabe de antemano cuántas veces el
cuerpo del bucle ha de ejecutarse?
Usar ciclo
FOR
SI
SI NO
NO
66
Adaptado por Oriol Borrás Gené @oriolupm
67
Pruebas de bucles
Bucles simples (n = valor máximo del bucle)
● Repetir cero, una y dos veces
● Repetir un número medio (típico) de veces (m<n)
● Repetir el n-1, n y n +1
https://www.ecured.cu/Prueba_de_bucles
67
Adaptado por Oriol Borrás Gené @oriolupm
68
Pruebas de bucles
Bucles anidados
● Comenzar por el bucle más interior. Establecer los demás bucles en sus
valores mínimos.
● Llevar a cabo las pruebas de bucles simples para el bucle más interior,
mientras se mantienen los parámetros de iteración (p. Ej. Contadores de
bucles) de los bucles externos en sus valores mínimos. Añadir otras
pruebas para valores fuera de rango o excluídos.
● Progresar hacia fuera, llevando a cabo pruebas para el siguiente bucle,
pero manteniendo todos los bucles externos en sus valores mínimos y los
demás bucles anidados en sus valores "típicos".
● Continuar hasta que se hayan probado todos los bucles.
68
Adaptado por Oriol Borrás Gené @oriolupm
69
Esquematización de algoritmos iterativos
Diferentes estrategias de diseño ➔ diferentes algoritmos iterativos
(esquemas) :
● Esquema de recorrido:
○ Pasan por todos los elementos de la secuencia
○ Saber o no a priori el número de elementos a procesar ➔
determina (While, Repeat, For)
● Esquema de búsqueda:
○ Pasa por los elementos de la secuencia hasta que encuentra
alguno que satisface determinada condición
○ Basta con encontrar al primero
69
Adaptado por Oriol Borrás Gené @oriolupm
70
Esquema de recorrido
Ejemplo 1:
● Contar las apariciones de la letra ‘a’ en una secuencia de
caracteres acabada en ‘.’
Ejemplo 2:
● El número e se define como la suma de la siguiente serie: 1+ 1/1!
+ 1/2! + 1/3! + ..., se desea obtener el valor de la serie para n
términos
70
Adaptado por Oriol Borrás Gené @oriolupm
Esquema de recorrido sin saber a priori número de elementos que se
deben procesar
71
obtener/calcular primer elemento
iniciar tratamiento
WHILE no último elemento DO BEGIN
tratar elemento
obtener/calcular siguiente elemento
END;
tratamiento final
Esquema de recorrido
71
Adaptado por Oriol Borrás Gené @oriolupm
Esquema de recorrido si sabemos a priori el número elementos
(iteraciones)
72
iniciar tratamiento
FOR primer elemento TO ultimo elemento DO
BEGIN
tratar elemento
END;
tratamiento final
Esquema de recorrido
72
Adaptado por Oriol Borrás Gené @oriolupm
73
Esquema de búsqueda
Ejemplo
Determinar si aparece la letra ‘a’ en una secuencia de caracteres
acabada en ‘.’
73
obtener/calcular posible primer elemento
iniciar tratamiento
WHILE no último elemento y no satisface A DO
obtener/calcular siguiente elemento
determinar si encontrado
Adaptado por Oriol Borrás Gené @oriolupm
74
Esquema mixto
Utilizando ambos esquemas obtenemos esquema mixto.
Ejemplo:
Contar el número de caracteres anteriores a la primera aparición de la
letra ‘a’ en una secuencia de caracteres acabada en ‘.’
74
Adaptado por Oriol Borrás Gené @oriolupm
75
Esquema mixto
Ejemplo
El número e se define como la suma de la siguiente serie: 1 + 1/1! +
1/2! + 1/3! + ....
Escribe un bloque de programa que pida un umbral de error y
aproxime el número e hasta que la diferencia entre dos
aproximaciones sucesivas sea menor que el umbral.
75
Adaptado por Oriol Borrás Gené @oriolupm
76
BEGIN {bloque}
Readln(error);
aprox_ant:= 0;
aprox_sig:= 1;
fact:=1;
i:=1;
WHILE (aprox_sig-aprox_ant)>= error DO BEGIN
aprox_ant:= aprox_sig;
aprox_sig:= aprox_ant + 1/fact;
i:= i + 1;
fact:= fact * i;
END; {WHILE}
writeln(error, aprox_sig);
END {bloque}
Esquema mixto
76
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 1 (enunciado)
77
Escriba un programa que imprima los 20 primeros números impares y
sus cuadrados.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 1 (análisis)
78
Escriba un programa que imprima los 20 primeros números impares y
sus cuadrados.
Que hace? (objetivo)
Es un esquema de recorrido que asegura que se procesen todos los
datos de una colección -> Imprimir 20 números impares y sus
cuadrados
Datos de entrada:
Datos de salida:
Adaptado por Oriol Borrás Gené @oriolupm
20 números impares y sus cuadrados
2*N = PAR
2*N+1 = IMPAR
Ejercicio 1 (programa)
79
PROGRAMA impares;
VAR
cont:integer;
Adaptado por Oriol Borrás Gené @oriolupm
BEGIN {programa principal}
END. {programa principal}
readln;
writeln ('NUMERO CUADRADO');
FOR cont:=0 TO 19 DO
writeln(2*cont+1:4,' ', sqr(2*cont+1):9);
• Inicializar cont?
• FOR cont = 1 TO 20?
• Listado de
instrucciones?
• En lugar de 20 n
introducido por teclado?
Ejercicio 1 (resultado)
80
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 2 (enunciado)
81
Escriba un programa que lea y sume hasta que haya sumado diez
valores de datos o hasta que lea un valor negativo, cualquiera que sea
el primer valor.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 2 (análisis)
82
Escriba un programa que lea y sume hasta que haya sumado diez
valores de datos o hasta que lea un valor negativo, cualquiera que sea
el primer valor.
Que hace? (objetivo)
Es un esquema de búsqueda que busca un elemento con cierta
característica dentro de una colección sin tener que procesar todos los
elementos -> suma 10 primeros numeros o hasta que se introduzca
número negativo.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 2 (análisis)
83
Escriba un programa que lea y sume hasta que haya sumado diez
valores de datos o hasta que lea un valor negativo, cualquiera que sea
el primer valor.
Datos de entrada:
Datos de salida:
Adaptado por Oriol Borrás Gené @oriolupm
números escritos
suma de los números
Ejercicio 2 (programa)
84
PROGRAM SumaNumeros;
VAR
cont, numero, suma:integer;
CONST
NUMMAX = 2;
Adaptado por Oriol Borrás Gené @oriolupm
BEGIN
suma:=0;
cont:=0;
END.
writeln ('La suma total es: ',suma,'de un total de ',cont,' numeros introducidos.');
readln;
REPEAT
writeln('Escriba un numero por pantalla');
readln(numero);
IF (numero >= 0) THEN
BEGIN
suma:=suma+numero;
cont:=cont+1;
END
UNTIL ((cont >= NUMMAX) OR (numero < 0));
Ejercicio 3 (enunciado)
85
Un banco antes de conceder un préstamo a 20 años comprueba los
ingresos del solicitante. Si los ingresos son superiores a 12000 euros
anuales el crédito se concede. Si los ingresos son inferiores a 12000
euros anuales pero superiores a 10000 euros y está soltero el crédito
se concede. También se concede si tiene ingresos entre 12000 y
10000 euros y está casado sin hijos.
Escriba un programa que pida los ingresos anuales, el estado civil del
solicitante y si tienes hijos y diga si se le da el crédito o no.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 3 (análisis)
86
Un banco antes de conceder un préstamo a 20 años comprueba los
ingresos del solicitante. Si los ingresos son superiores a 12000
euros anuales el crédito se concede. Si los ingresos son inferiores a
12000 euros anuales pero superiores a 10000 euros y está soltero el
crédito se concede. También se concede si tiene ingresos entre
12000 y 10000 euros y está casado sin hijos.
Escriba un programa que pida los ingresos anuales, el estado civil del
solicitante y si tienes hijos y diga si se le da el crédito o no.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 3 (análisis)
87
Que hace? (objetivo) Calcular si se concede un préstamo
Datos de entrada: sueldo, estado civil y nºhijos
Datos de salida: concesión o denegación
Se concede si las siguientes opciones:
a) Ingresos > 12000
b) 12000>Ingresos>10000 y soltero
c) 12000>Ingresos>10000 y casado sin hijos
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 3 (análisis)
88
Que hace? (objetivo) Calcular si se concede un préstamo
Datos de entrada: sueldo, estado civil y nºhijos
Datos de salida: concesión o denegación
Se concede si las siguientes opciones:
a) Ingresos > 12000
b) 12000>Ingresos>10000 y soltero
c) 12000>Ingresos>10000 y casado sin hijos
Solución: https://drive.google.com/open?id=0By9h3BVSUpBNUWxPM3VlRFk5V1k
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 4 (enunciado)
Implemente un programa que simule una calculadora, mostrando el
siguiente menú:
1. Sumar
2. Restar
3. Multiplicar
4. Dividir
0. Terminar
El programa debe verificar que escribe un número válido entre 0 y 4. Si
se elige opción entre 1 y 4 deberá pedir dos números, mostrará el
resultado y volverá al menú. Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 4 (análisis)
Que hace? (objetivo) Calculadora con 5 opciones: sumar, restar,
multiplicar, divider y terminar.
Datos de entrada: tipo de operación y operandos
Datos de salida: resultado operación
Solución: https://drive.google.com/open?id=0By9h3BVSUpBNTG9vamZWeDFlTDQ
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 1 (CASA)
91
Escriba un programa que realice un bucle con while y muestre en
pantalla del 1 al 10.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 2 (CASA)
92
Escriba un programa que realice un bucle con repeat y muestre en
pantalla del 1 al 10.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 3 (CASA)
93
Escriba un programa que realice un bucle con for y muestre en
pantalla del 1 al 10.
Adaptado por Oriol Borrás Gené @oriolupm
Ejercicio 4 (CASA)
94
Escriba un programa que realice la pregunta ¿Desea continuar,
escriba S o N? y que no deje de hacerla hasta que el usuario teclee N.
Adaptado por Oriol Borrás Gené @oriolupm

Más contenido relacionado

La actualidad más candente

Estructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje CEstructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje CMarvin Romero
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Javaquesada_diego
 
Estructuras de Control - Ivan Walkes Mc.
Estructuras de Control - Ivan Walkes Mc.Estructuras de Control - Ivan Walkes Mc.
Estructuras de Control - Ivan Walkes Mc.Ivan A. Walkes Mc.
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javaHenry Upla
 
Tutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasTutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasMichele André
 
Curso Java Inicial 3 Sentencias De Control De Flujo
Curso Java Inicial   3 Sentencias De Control De FlujoCurso Java Inicial   3 Sentencias De Control De Flujo
Curso Java Inicial 3 Sentencias De Control De FlujoEmilio Aviles Avila
 
Variables, expresiones y ejecución de condiciones les en PSeInt
Variables, expresiones y ejecución de condiciones les en PSeIntVariables, expresiones y ejecución de condiciones les en PSeInt
Variables, expresiones y ejecución de condiciones les en PSeIntCristian C
 
Instrucciones de control alternativas
Instrucciones de control alternativasInstrucciones de control alternativas
Instrucciones de control alternativasAbrirllave
 
ESTRUCTURAS REPETITIVAS
ESTRUCTURAS REPETITIVASESTRUCTURAS REPETITIVAS
ESTRUCTURAS REPETITIVASJorge Leonardo
 
Scjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlScjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlJose Selman
 

La actualidad más candente (17)

Estructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje CEstructuras de Control en Lenguaje C
Estructuras de Control en Lenguaje C
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Java
 
Errores
ErroresErrores
Errores
 
Pseint
PseintPseint
Pseint
 
Estructuras de Control - Ivan Walkes Mc.
Estructuras de Control - Ivan Walkes Mc.Estructuras de Control - Ivan Walkes Mc.
Estructuras de Control - Ivan Walkes Mc.
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control java
 
Sentencias de control
Sentencias de controlSentencias de control
Sentencias de control
 
Tutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasTutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicas
 
Curso Java Inicial 3 Sentencias De Control De Flujo
Curso Java Inicial   3 Sentencias De Control De FlujoCurso Java Inicial   3 Sentencias De Control De Flujo
Curso Java Inicial 3 Sentencias De Control De Flujo
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujo
 
Variables, expresiones y ejecución de condiciones les en PSeInt
Variables, expresiones y ejecución de condiciones les en PSeIntVariables, expresiones y ejecución de condiciones les en PSeInt
Variables, expresiones y ejecución de condiciones les en PSeInt
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Instrucciones de control alternativas
Instrucciones de control alternativasInstrucciones de control alternativas
Instrucciones de control alternativas
 
ESTRUCTURAS REPETITIVAS
ESTRUCTURAS REPETITIVASESTRUCTURAS REPETITIVAS
ESTRUCTURAS REPETITIVAS
 
Estructura selectiva
Estructura selectivaEstructura selectiva
Estructura selectiva
 
Clase 6
Clase 6Clase 6
Clase 6
 
Scjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlScjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow Control
 

Similar a Tema 2: Instrucciones estructuradas #IPG2MURJC

Similar a Tema 2: Instrucciones estructuradas #IPG2MURJC (12)

Estructuras de control C++
Estructuras de control C++Estructuras de control C++
Estructuras de control C++
 
Teoria
TeoriaTeoria
Teoria
 
guia-4.pdf
guia-4.pdfguia-4.pdf
guia-4.pdf
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Diagrama Flujo
Diagrama FlujoDiagrama Flujo
Diagrama Flujo
 
Unidad3.pptx
Unidad3.pptxUnidad3.pptx
Unidad3.pptx
 
3. ESTRUCTURAS DE CONTROL C.pptx
3. ESTRUCTURAS DE CONTROL C.pptx3. ESTRUCTURAS DE CONTROL C.pptx
3. ESTRUCTURAS DE CONTROL C.pptx
 
r90043.PPTX
r90043.PPTXr90043.PPTX
r90043.PPTX
 
Tema4.pdf
Tema4.pdfTema4.pdf
Tema4.pdf
 
Instrucciones de control en c++
Instrucciones de control en c++Instrucciones de control en c++
Instrucciones de control en c++
 
Programas 1
Programas 1Programas 1
Programas 1
 
5.2 instruccion switch
5.2  instruccion switch5.2  instruccion switch
5.2 instruccion switch
 

Más de Oriol Borras Gene

Las Insignias Digitales en Educación
Las Insignias Digitales en EducaciónLas Insignias Digitales en Educación
Las Insignias Digitales en EducaciónOriol Borras Gene
 
Taller "La identidad digital profesional para estudiantes de la ETSII"
Taller "La identidad digital profesional para estudiantes de la ETSII"Taller "La identidad digital profesional para estudiantes de la ETSII"
Taller "La identidad digital profesional para estudiantes de la ETSII"Oriol Borras Gene
 
Redes Sociales en educación: Instagram y TikTok
Redes Sociales en educación: Instagram y TikTokRedes Sociales en educación: Instagram y TikTok
Redes Sociales en educación: Instagram y TikTokOriol Borras Gene
 
Insignias Digitales: reconocimiento y motivación
Insignias Digitales: reconocimiento y motivación Insignias Digitales: reconocimiento y motivación
Insignias Digitales: reconocimiento y motivación Oriol Borras Gene
 
Uso de Telegram en ingeniería dentro de la Universidad
Uso de Telegram en ingeniería dentro de la UniversidadUso de Telegram en ingeniería dentro de la Universidad
Uso de Telegram en ingeniería dentro de la UniversidadOriol Borras Gene
 
Insignias digitales y MOOCS, una nueva forma de profesionalizarse
Insignias digitales y MOOCS, una nueva forma de profesionalizarseInsignias digitales y MOOCS, una nueva forma de profesionalizarse
Insignias digitales y MOOCS, una nueva forma de profesionalizarseOriol Borras Gene
 
LinkedIn: consejos y su algoritmo 2020
LinkedIn: consejos y su algoritmo 2020LinkedIn: consejos y su algoritmo 2020
LinkedIn: consejos y su algoritmo 2020Oriol Borras Gene
 
Taller La Identidad Digital profesional del universitario (ETSII - URJC)
Taller La Identidad Digital profesional del universitario (ETSII - URJC)Taller La Identidad Digital profesional del universitario (ETSII - URJC)
Taller La Identidad Digital profesional del universitario (ETSII - URJC)Oriol Borras Gene
 
Collaborative digital badges in MOOC 25/06/20
Collaborative digital badges in MOOC 25/06/20Collaborative digital badges in MOOC 25/06/20
Collaborative digital badges in MOOC 25/06/20Oriol Borras Gene
 
COMUNICAR CIENCIA EN REDES SOCIALES 2020
COMUNICAR CIENCIA EN REDES SOCIALES 2020COMUNICAR CIENCIA EN REDES SOCIALES 2020
COMUNICAR CIENCIA EN REDES SOCIALES 2020Oriol Borras Gene
 
Trabajo en equipo en entornos digitales #DirectoINAP
Trabajo en equipo en entornos digitales #DirectoINAPTrabajo en equipo en entornos digitales #DirectoINAP
Trabajo en equipo en entornos digitales #DirectoINAPOriol Borras Gene
 
Taller de Identidad Digital 2020 #idUPM
Taller de Identidad Digital 2020 #idUPMTaller de Identidad Digital 2020 #idUPM
Taller de Identidad Digital 2020 #idUPMOriol Borras Gene
 
Taller "Redes sociales digitales como apoyo a la docencia" 2019 #URJC
Taller "Redes sociales digitales como apoyo a la docencia" 2019 #URJCTaller "Redes sociales digitales como apoyo a la docencia" 2019 #URJC
Taller "Redes sociales digitales como apoyo a la docencia" 2019 #URJCOriol Borras Gene
 
¡Escapándonos del aula de Empresa! (Escape room Educativo)
¡Escapándonos del aula de Empresa! (Escape room Educativo) ¡Escapándonos del aula de Empresa! (Escape room Educativo)
¡Escapándonos del aula de Empresa! (Escape room Educativo) Oriol Borras Gene
 
Comunicar ciencia en Redes Sociales
Comunicar ciencia en Redes Sociales Comunicar ciencia en Redes Sociales
Comunicar ciencia en Redes Sociales Oriol Borras Gene
 
Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...
Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...
Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...Oriol Borras Gene
 
Comunidades de aprendizaje con redes sociales: docencia online y presencial #...
Comunidades de aprendizaje con redes sociales: docencia online y presencial #...Comunidades de aprendizaje con redes sociales: docencia online y presencial #...
Comunidades de aprendizaje con redes sociales: docencia online y presencial #...Oriol Borras Gene
 
Adaptación al Marco Común de Competencia Digital Docente
Adaptación al Marco Común de Competencia Digital DocenteAdaptación al Marco Común de Competencia Digital Docente
Adaptación al Marco Común de Competencia Digital DocenteOriol Borras Gene
 
Potenciando el elemento social en la gamificación
Potenciando el elemento social en la gamificaciónPotenciando el elemento social en la gamificación
Potenciando el elemento social en la gamificaciónOriol Borras Gene
 
Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...
Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...
Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...Oriol Borras Gene
 

Más de Oriol Borras Gene (20)

Las Insignias Digitales en Educación
Las Insignias Digitales en EducaciónLas Insignias Digitales en Educación
Las Insignias Digitales en Educación
 
Taller "La identidad digital profesional para estudiantes de la ETSII"
Taller "La identidad digital profesional para estudiantes de la ETSII"Taller "La identidad digital profesional para estudiantes de la ETSII"
Taller "La identidad digital profesional para estudiantes de la ETSII"
 
Redes Sociales en educación: Instagram y TikTok
Redes Sociales en educación: Instagram y TikTokRedes Sociales en educación: Instagram y TikTok
Redes Sociales en educación: Instagram y TikTok
 
Insignias Digitales: reconocimiento y motivación
Insignias Digitales: reconocimiento y motivación Insignias Digitales: reconocimiento y motivación
Insignias Digitales: reconocimiento y motivación
 
Uso de Telegram en ingeniería dentro de la Universidad
Uso de Telegram en ingeniería dentro de la UniversidadUso de Telegram en ingeniería dentro de la Universidad
Uso de Telegram en ingeniería dentro de la Universidad
 
Insignias digitales y MOOCS, una nueva forma de profesionalizarse
Insignias digitales y MOOCS, una nueva forma de profesionalizarseInsignias digitales y MOOCS, una nueva forma de profesionalizarse
Insignias digitales y MOOCS, una nueva forma de profesionalizarse
 
LinkedIn: consejos y su algoritmo 2020
LinkedIn: consejos y su algoritmo 2020LinkedIn: consejos y su algoritmo 2020
LinkedIn: consejos y su algoritmo 2020
 
Taller La Identidad Digital profesional del universitario (ETSII - URJC)
Taller La Identidad Digital profesional del universitario (ETSII - URJC)Taller La Identidad Digital profesional del universitario (ETSII - URJC)
Taller La Identidad Digital profesional del universitario (ETSII - URJC)
 
Collaborative digital badges in MOOC 25/06/20
Collaborative digital badges in MOOC 25/06/20Collaborative digital badges in MOOC 25/06/20
Collaborative digital badges in MOOC 25/06/20
 
COMUNICAR CIENCIA EN REDES SOCIALES 2020
COMUNICAR CIENCIA EN REDES SOCIALES 2020COMUNICAR CIENCIA EN REDES SOCIALES 2020
COMUNICAR CIENCIA EN REDES SOCIALES 2020
 
Trabajo en equipo en entornos digitales #DirectoINAP
Trabajo en equipo en entornos digitales #DirectoINAPTrabajo en equipo en entornos digitales #DirectoINAP
Trabajo en equipo en entornos digitales #DirectoINAP
 
Taller de Identidad Digital 2020 #idUPM
Taller de Identidad Digital 2020 #idUPMTaller de Identidad Digital 2020 #idUPM
Taller de Identidad Digital 2020 #idUPM
 
Taller "Redes sociales digitales como apoyo a la docencia" 2019 #URJC
Taller "Redes sociales digitales como apoyo a la docencia" 2019 #URJCTaller "Redes sociales digitales como apoyo a la docencia" 2019 #URJC
Taller "Redes sociales digitales como apoyo a la docencia" 2019 #URJC
 
¡Escapándonos del aula de Empresa! (Escape room Educativo)
¡Escapándonos del aula de Empresa! (Escape room Educativo) ¡Escapándonos del aula de Empresa! (Escape room Educativo)
¡Escapándonos del aula de Empresa! (Escape room Educativo)
 
Comunicar ciencia en Redes Sociales
Comunicar ciencia en Redes Sociales Comunicar ciencia en Redes Sociales
Comunicar ciencia en Redes Sociales
 
Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...
Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...
Hacia un MOOC más colectivo: herramientas útiles para fomentar y recuperar co...
 
Comunidades de aprendizaje con redes sociales: docencia online y presencial #...
Comunidades de aprendizaje con redes sociales: docencia online y presencial #...Comunidades de aprendizaje con redes sociales: docencia online y presencial #...
Comunidades de aprendizaje con redes sociales: docencia online y presencial #...
 
Adaptación al Marco Común de Competencia Digital Docente
Adaptación al Marco Común de Competencia Digital DocenteAdaptación al Marco Común de Competencia Digital Docente
Adaptación al Marco Común de Competencia Digital Docente
 
Potenciando el elemento social en la gamificación
Potenciando el elemento social en la gamificaciónPotenciando el elemento social en la gamificación
Potenciando el elemento social en la gamificación
 
Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...
Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...
Experiencia en Ingeniería Informática mediante el uso de videos adaptados a l...
 

Último

celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicaFlor Idalia Espinoza Ortega
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 

Último (20)

celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamica
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 

Tema 2: Instrucciones estructuradas #IPG2MURJC

  • 1. Introducción a la programación Tema 2. Instrucciones estructuradas Apuntes generales de la asignatura adaptados por Oriol Borrás Gené @oriolUPM Curso 2017/18
  • 2. 2 Prueba (10’) Escribir un programa en Pascal que sume 2 números. Pedir por pantalla al usuario que los escriba, leer los números. No hace falta que se muestre el resultado por pantalla. 1. Análisis del problema 2. Pseudocódigo 3. Programa en Pascal 2 Adaptado por Oriol Borrás Gené @oriolupm
  • 3. Tema 2. Instrucciones estructuradas Adaptado por Oriol Borrás Gené - @oriolupm 2.1. Instrucciones compuestas 2.2. Instrucciones de selección 2.3. Instrucciones de iteración
  • 4. 4 Objetivo Exponer la forma de controlar el orden de ejecución de las acciones del programa: ● Control por selección ● Control por iteración 4 Adaptado por Oriol Borrás Gené @oriolupm
  • 5. Bloque de instrucciones o instrucciones compuestas: BEGIN Secuencia de instrucciones separadas por el carácter “;” END (sin punto) (no es necesario el ; después de la última instrucción antes del END)5 2.1. Instrucciones compuestas 5 Adaptado por Oriol Borrás Gené @oriolupm
  • 6. 6 Bloque de instrucciones Se utiliza en: ● Instrucciones estructuradas de selección y de iteración ● Subprogramas: ○ se usan para modelar subproblemas y sus soluciones algorítmicas en el marco del diseño descendente y del refinamiento sucesivo ○ son acciones/cálculos lógicos (para el programador) 6 Adaptado por Oriol Borrás Gené @oriolupm
  • 7. 7 2.2. Instrucciones de selección ● Instrucción IF (SI...ENTONCES) ● Instrucción CASE (CASO DE…) 7 Adaptado por Oriol Borrás Gené @oriolupm
  • 8. 8 Instrucciones de selección Estructura de control de selección: ● Sirve para cambiar el flujo de ejecución secuencial. ● Permite elegir dinámicamente (en tiempo de ejecución) entre diferentes secuencias de instrucciones. 8 Adaptado por Oriol Borrás Gené @oriolupm
  • 9. Sintaxis: IF <ExpresionBooleana> THEN <Instruccion1> [ELSE] <Instruccion2> El valor entre corchetes ELSE es opcional, se puede construir la instrucción solo con IF y THEN. 9 La instrucción IF…THEN… [ELSE] 9 Adaptado por Oriol Borrás Gené @oriolupm Semántica: ● Si la ExpresionBooleana devuelve un valor TRUE, se ejecuta la Instruccion1. ● Si devuelve un valor FALSE se ejecuta la instruccion2
  • 10. Sintaxis: 10 La instrucción IF…THEN… [ELSE] (pseudocódigo) 10 Adaptado por Oriol Borrás Gené @oriolupm Si (condición) entonces Instrucción 1 Sino Instrucción a Fin Si Condición Instrucción 1 Instrucción a Si No
  • 11. 11 Selección de secuencias de instrucciones ● Para elegir entre secuencias de instrucciones, hay que definirlas como un bloque ● Al igual que las instrucciones, dichos bloques han de sangrarse adecuadamente ● Un ; antes de ELSE produce error 11 Adaptado por Oriol Borrás Gené @oriolupm
  • 12. 12 Ejemplo BEGIN {cuerpo del programa} writeln('Introduzca dos números'); readln(x,y); IF x > y THEN BEGIN {bloque interior1} max := x; writeln('x es mayor que y') END {if} ELSE BEGIN {bloque interior2} max := y; writeln('y es mayor o igual que x') END {else} END. {programa} 12 Adaptado por Oriol Borrás Gené @oriolupm
  • 13. 13 ● El sangrado facilita la lectura del programa para el programador → El compilador ignora el sangrado ● Poner un ; antes de la parte ELSE → Error de compilación: Errores comunes (instrucción IF) 13 Adaptado por Oriol Borrás Gené @oriolupm Instrucción simple IF <condicion> THEN instruccion1; ELSE instruccion2; Bloque de instrucciones IF <condicion> THEN BEGIN instruccion1; instruccion2; END; ELSE instruccionN;
  • 14. 14 Recomendaciones ● Sangrar las instrucciones ● Documentar el fin del bloque con un comentario ● No repetir instrucciones comunes en las distintas ramas ● No utilizar instrucciones IF para la asignación de valores booleanos 14 Adaptado por Oriol Borrás Gené @oriolupm
  • 15. 15 Recomendaciones (ejemplo) BEGIN {cuerpo del programa} writeln('Introduzca un número); readln(x); IF x >= 0 THEN BEGIN {bloque interior1} writeln('El número es positivo'); sqr (x); END {if} ELSE BEGIN {bloque interior2} writeln('El número es negativo'): sqr (x); END {else} END. {programa} 15 Adaptado por Oriol Borrás Gené @oriolupm BEGIN {cuerpo del programa} writeln('Introduzca un número); readln(x); IF x >= 0 THEN writeln('El número es positivo') ELSE writeln('El número es negativo'); sqr (x); END. {programa}
  • 16. 16 Alternativas múltiples Para elegir entre tres o más alternativas: ● anidar instrucciones IF ● usar la instrucción CASE 16 Adaptado por Oriol Borrás Gené @oriolupm
  • 17. 17 Instrucciones IF anidadas Adaptado por Oriol Borrás Gené @oriolupm Sintaxis: IF <ExpresionBooleana1> THEN <Instruccion1> [ELSE IF <ExpresionBooleana2> THEN] <Instruccion2> [ELSE IF <ExpresionBooleana2> THEN] <Instruccionn> [ELSE] <Instruccion B>
  • 18. Sintaxis: Instrucciones IF anidadas (pseudocódigo) Adaptado por Oriol Borrás Gené @oriolupm Fuente: https://algoritmiafordummies.wikispaces.com/5.1.3.+Sentencia+if+en+es calera+%28IF-ELSE-IF%29 Si (condición 1) entonces Instrucción 1 Sino Si (condición 2) entonces Instrucción 2 Sino Si (condición 3) Instrucción 3 Sino Instrucción 4 Fin si
  • 19. Sintaxis: Instrucciones IF anidadas 2 (pseudocódigo) Adaptado por Oriol Borrás Gené @oriolupm Si (condición 1) entonces Instrucción 1 Si (condición 2) entonces Instrucción 2 Sino Instrucción 3 Fin si Sino instrucción 4 Fin si Condición 1 Condición 2 Instrucción 1 Instrucción 4 Instrucción 2 Instrucción 3 Sí Sí No No
  • 20. 20 Instrucciones IF anidadas: Ejemplo PROGRAM ListaNota; VAR nota:integer; BEGIN {ListaNota} readln(nota); IF (nota=1) THEN writeln(‘Aprobado’) ElSE IF (nota=2) THEN writeln(‘Notable’) ELSE IF (nota=3) THEN writeln(‘Sobresaliente’) ELSE IF (nota=4) THEN writeln(‘Matricula de honor’) ELSE writeln(‘La nota no es válida’); END. {ListaNota} 20 Adaptado por Oriol Borrás Gené @oriolupm
  • 21. 21 Instrucción CASE: Ejemplo PROGRAM ListaNota; VAR nota:integer; BEGIN {ListaNota} readln(nota); CASE nota OF 1:writeln(‘Aprobado’); 2:writeln(‘Notable’); 3:writeln(‘Sobresaliente’); 4:writeln(‘Matricula de honor’) ELSE writeln(‘La nota no es válida’); END {CASE} END. {ListaNota} 21 Adaptado por Oriol Borrás Gené @oriolupm
  • 22. Sintaxis: CASE <expresionSelectora> OF <etiqueta1>: <Instrucción1>; <etiqueta2>: <Instrucción2>; . . . <etiquetaN>: <InstrucciónN> [ELSE <InstrucciónELSE>; ] END {CASE} 22 No existe en Pascal Standard y es opcional en TP La instrucción CASE…OF 22 Adaptado por Oriol Borrás Gené @oriolupm
  • 23. Según var hacer Caso, = 1 Instrucción 1 Caso, = 2 Instrucción 2 Caso, = 3 Instrucción 3 Caso, si no Instrucción 4 Fin según Sintaxis: 23 La instrucción CASE…OF (pseudocódigo) 23 Adaptado por Oriol Borrás Gené @oriolupm Var Instrucción 2 Instrucción 1 Caso 1Caso 2 Instrucción 3 Instrucción 4 Caso 3 Caso n
  • 24. 24 La instrucción CASE…OF Semántica: 1. Se evalúa expresionSelectora 2. Se compara con las etiquetas de forma ordenada, empezando con la primera. a. Si la comparación es TRUE se ejecuta la instrucción asociada a esa etiqueta y termina la instrucción CASE b. Si la comparación es FALSE, se compara con la siguiente etiqueta 3. Si ninguna etiqueta coincide con la ExpresiónSelectora, se ejecuta la instrucción asociada a ELSE (si existe) 24 Adaptado por Oriol Borrás Gené @oriolupm
  • 25. 25 La instrucción CASE Observaciones ● Expresión selectora tiene que ser de tipo ordinal: ○ integer, char, boolean o enumerado: ■ .. : un intervalo. Ej. : 2 .. 34 (de 2 a 34) ■ , : varios valores concretos. Ej.: 23, 35, 57 ● Las etiquetas tienen que tener valor/es constante/s: ○ constantes, literales, listas de constantes o subintervalos ● Las instrucciones: instrucción o bloque (BEGIN y END) 25 Adaptado por Oriol Borrás Gené @oriolupm
  • 26. 26 La instrucción CASE Ejemplo: CASE opcion OF 1..15: writeln('Primera Quincena'); 16: writeln('Primera Prueba'); 17..29: BEGIN {bloque} writeln('Esto es un bloque'); writeln('Segunda Quincena') END; {bloque} 30,31: writeln('Segunda Prueba’) ELSE writeln('valor erróneo'); END {CASE} 26 Adaptado por Oriol Borrás Gené @oriolupm
  • 27. 27 La instrucción CASE Ejemplo Boolean: CPROGRAM Carnetconducir; VAR carnet:boolean; BEGIN {Carnetconducir} carnet:=FALSE; CASE (carnet) OF FALSE:writeln('tiene carnet'); TRUE:writeln('no tiene carnet'); END {case} END. {Carnetconducir} 27 Adaptado por Oriol Borrás Gené @oriolupm
  • 28. 28 IF anidado o CASE ● CASE: ○ Cuando la decisión dependen de una misma expresión selectora ● IF anidado: ○ Cuando haya alternativas múltiples que dependen de selectores diferentes 28 Adaptado por Oriol Borrás Gené @oriolupm
  • 29. 29 Ejemplo: IF anidado Ejemplo ● Decidir si se alquila un coche en función de dos variables selectoras: ○ la posesión del carnet de conducir ○ la edad ● Regla: ○ no tiene carnet → no se alquila coche ○ tiene carnet y es menor de 25 → se alquila a precio alto ○ tiene carnet y es mayor de 25 → se alquila a precio bajo 29 Adaptado por Oriol Borrás Gené @oriolupm
  • 30. 30 IF (Condición1) THEN BEGIN Instrucción1; ...; InstrucciónN END {IF} ELSE IF (Condición2) THEN BEGIN InstrucciónA; ...; InstrucciónZ END {ELSE IF condición2} ELSE BEGIN Instruccióna; ... Instrucciónz; END; {ELSE} Normas de estilo (IF) IF (Condición) THEN BEGIN Instrucción1; ...; InstrucciónN END {IF} ELSE BEGIN InstrucciónA; ...; InstrucciónZ END; {ELSE} 30 Adaptado por Oriol Borrás Gené @oriolupm
  • 31. 31 CASE Expresión OF valor1: BEGIN Instrucción1; ...; InstrucciónN END; {Valor1} ... valorN: BEGIN InstrucciónA; ...; InstrucciónZ END; {ValorN} ELSE InstruccionElse; END; {CASE} 31 Adaptado por Oriol Borrás Gené @oriolupm Normas de estilo (CASE)
  • 32. 32 Pruebas de condiciones ● Para probar una expresión simple del tipo: E1 <operador_relacional> E2 ● Se requieren tres pruebas: ○ El valor de E1 mayor, menor o igual que el de E2. La prueba que haga el valor de E1 mayor o menor que el de E2 debe hacer que la diferencia entre estos dos valores sea lo más pequeña posible. 32 Adaptado por Oriol Borrás Gené @oriolupm
  • 33. 33 Pruebas de condiciones ● Si la expresión es de la forma: B1 AND B2 ó B1 OR B2 donde B1 y B2 son expresiones lógicas, esta se cubre para B1 verdadero y B2 falso, B1 falso y B2 verdadero y ambos B1 y B2 verdadero o falso. 33 Adaptado por Oriol Borrás Gené @oriolupm
  • 34. 34 2.3 Instrucciones de iteración Definiciones ● Ciclo o bucle o iteración: Secuencia de instrucciones que se ejecutan repetidamente. ● La iteraciones pueden ser controladas por las siguientes instrucciones: ○ MIENTRAS (WHILE) ○ REPETIR…HASTA (REPEAT..UNTIL) ○ DESDE o PARA (FOR) 34 Adaptado por Oriol Borrás Gené @oriolupm
  • 35. 35 2.3 Instrucciones de iteración Definiciones ● Cuerpo del bucle: Son las instrucciones que se encuentran dentro del bucle. ● Variables controladoras: Son las variables de las que depende la ejecución del cuerpo del bucle. ○ Deben ser modificadas dentro del cuerpo del bucle. 35 Adaptado por Oriol Borrás Gené @oriolupm
  • 36. Sintaxis WHILE <expresión booleana> DO <instrucción>; ó WHILE <expresión booleana> DO BEGIN <instrucción1>; <instrucción2>; … END; 36 La instrucción WHILE 36 Adaptado por Oriol Borrás Gené @oriolupm
  • 37. Semántica 37 Instrucción N-1; WHILE <condición> DO BEGIN instrucN1; . . . instrucNk END; {WHILE} Instrucción N+1; La instrucción WHILE true ¿Condición? false instrucN1; instrucNk; Instrucción N+1 37 Adaptado por Oriol Borrás Gené @oriolupm
  • 38. 38 La instrucción WHILE (pseudocódigo) Sintaxis 38 Adaptado por Oriol Borrás Gené @oriolupm Mientras (condición) hacer Instrucción 1 Instrucción 2 Repetir Mientras (Condición) Instrucción 1 Instrucción 2 No Sí
  • 39. 39 Características y ejemplo ● La estructura WHILE modela ciclos preprobados (si es falsa la condición no se ejecuta). ● La estructura WHILE realiza un número variable de iteraciones (cero, una o varias) Ejemplo: n=5 Calcular ∑ xi = 1+2+...+n utilizando WHILE i=1 39 Adaptado por Oriol Borrás Gené @oriolupm
  • 40. 40 Características y ejemplo Ejemplo: n=5 Calcular ∑ xi = 1+2+...+n i=1 40 Adaptado por Oriol Borrás Gené @oriolupm PROGRAM sum; VAR contador,suma: integer; BEGIN {Inicializamos variables} contador:= 1; suma:= 0; WHILE (contador<=5) DO BEGIN suma := suma+contador; contador := contador+1; END; {while} writeln('x = ', suma) END.
  • 41. 41 Función EoLn La función EoLn se hace verdadera cuando se alcanza una marca de fin de línea y falsa en otro caso. 41 Adaptado por Oriol Borrás Gené @oriolupm Var c: char; numCar: integer; numCar:= 0; WHILE not EoLn DO BEGIN Read(c); numCar:= numCar + 1 END; {whileg} WriteLn(numCar)
  • 42. 42 Errores comunes ● Realizar ciclos infinitos. ○ ¿Cómo se evitan? Modificando dentro del cuerpo la variable/s que lo controlan ● No inicializar las variables de control y de proceso del bucle. ○ ¿Cómo se evita? Dándoles valor previamente. ● Dejar el cuerpo del bucle vacío. ○ ¿Cómo se evita? Jamás colocar un ; detrás del DO, pues provocaría además un ciclo infinito 42 Adaptado por Oriol Borrás Gené @oriolupm
  • 43. 43 Instrucciones WHILE anidadas Es posible anidar estructuras WHILE: WHILE <condición-1> DO BEGIN <instrucciones>; WHILE <condición-2> DO BEGIN <instrucciones> END; {WHILE interior} <instrucciones> END {WHILE exterior} 43 Adaptado por Oriol Borrás Gené @oriolupm
  • 44. 44 REPEAT ... UNTIL Sintaxis REPEAT <instrucción1> ; ... <instrucciónN> ; UNTIL <expresión booleana> 44 Adaptado por Oriol Borrás Gené @oriolupm
  • 45. 45 REPEAT ... UNTIL (pseudocódigo) 45 Adaptado por Oriol Borrás Gené @oriolupm Sintaxis Repetir Instrucción 1 Instrucción 2 Hasta que (condición) Condición Instrucción 1 Instrucción 2 Si No
  • 46. 46 La instrucción REPEAT ... UNTIL Nótese: ● Excepcionalmente, todas las instrucciones entre REPEAT y UNTIL se consideran un bloque de instrucciones, aunque no estén delimitadas por BEGIN y END. 46 Adaptado por Oriol Borrás Gené @oriolupm
  • 47. 47 REPEAT … UNTIL instrucción N-1; REPEAT instrucN1; . . . instrucNk UNTIL <condición>; instrucción N+1; true ¿Condición? false Semántica: instrucN1; instrucNk instrucción N+1 instrucc N-1 47 Adaptado por Oriol Borrás Gené @oriolupm
  • 48. 48 Ejemplos Ejemplo: Lectura de datos ● Leer un número asegurándose que el número es positivo. Ejemplo Realizar un programa que calcule: 5 ∑ xi = 1+2+...+n utilizando REPEAT i=0 48 Adaptado por Oriol Borrás Gené @oriolupm
  • 49. 49 Ejemplos n=5 ∑ xi = 1+2+...+n utilizando REPEAT i=0 49 Adaptado por Oriol Borrás Gené @oriolupm PROGRAM sum; VAR contador,suma: integer; BEGIN {Inicializamos variables} contador:= 1; suma:= 0; REPEAT suma := suma+contador; contador := contador+1; UNTIL (contador>5); writeln('x = ',suma) END.
  • 50. 50 Ejemplos Ejemplo: Lectura de datos ● Leer un número asegurándose que el número es positivo. PROGRAM numeropositivo; VAR n:integer; BEGIN REPEAT read(n); UNTIL (n>=0); write('el numero positivo es = ',n); END. 50 Adaptado por Oriol Borrás Gené @oriolupm
  • 51. 51 Características y ejemplos ● La estructura REPEAT modela ciclos postprobados: el cuerpo siempre se ejecuta ● La estructura REPEAT realiza un número variable de iteraciones. ● Cualquier ciclo REPEAT puede traducirse en un ciclo WHILE 51 Adaptado por Oriol Borrás Gené @oriolupm
  • 52. 52 Errores comunes ● Realizar ciclos infinitos ○ ¿Cómo se evitan? Modificando dentro del cuerpo la variable/s que lo controlan ● Pensar que puede no ejecutarse ninguna vez ○ Todas las operaciones durante la primera ejecución del cuerpo son válidas ○ La primera ejecución del cuerpo modifica las variables de la condición 52 Adaptado por Oriol Borrás Gené @oriolupm
  • 53. 53 WHILE y REPEAT...UNTIL Usar ciclo REPEAT...UNTIL ¿Se sabe de antemano que el cuerpo del bucle ha de ejecutarse al menos una vez? Usar ciclo WHILE Recomendaciones técnicas (preliminares): NOSI 53 Adaptado por Oriol Borrás Gené @oriolupm
  • 54. 54 FOR .. TO .. DO Sintaxis (ciclo ascendente): FOR indice:= <expr. inicial> TO <expr. final> DO <instrucción> Sintaxis (ciclo descendente): FOR indice:= <expr. inic> DOWNTO <expr. fin> DO <instrucción> 54 Adaptado por Oriol Borrás Gené @oriolupm
  • 55. 55 FOR .. TO .. DO ascendente (pseudocódigo) Sintaxis 55 Adaptado por Oriol Borrás Gené @oriolupm Desde var = Vinicial hasta Vfinal Instrucción 1 Instrucción 2 Siguiente var Desde var = Vinicial a Vfinal Instrucción 1 Instrucción 2 var > Vfinal var <= Vfinal Vinicial := Vinicial +1
  • 56. 56 Semántica ciclo FOR ascendente FOR Indice:=ExpIni TO ExpFinal DO BEGIN instrN1; ... instrNk END; {FOR} ¿Indice<=ExpFinal? false INC (Indice) true 56 Adaptado por Oriol Borrás Gené @oriolupm
  • 57. 57 Semántica ciclo FOR descendente FOR Indice:=ExpIni DOWNTO ExpFinal DO BEGIN instrN1; ... instrNk END; {FOR} ¿Indice>=ExpFinal? false DEC (Indice) true 57 Adaptado por Oriol Borrás Gené @oriolupm
  • 58. 58 Estructura FOR .. TO .. DO Ciclo ascendente ● WHILE ● FOR equivalente indice:=expInicial; WHILE indice<=expFinal DO BEGIN <instrucciones>; indice:=succ(indice); END; {WHILE} FOR indice:=expInicial TO expFinal DO BEGIN <instrucciones>; END; {FOR} 58 Adaptado por Oriol Borrás Gené @oriolupm
  • 59. 59 Estructura FOR .. TO .. DO Ciclo descendente ● WHILE ● FOR equivalente indice:=expFinal; WHILE indice>=expInicialDO BEGIN <instrucciones>; indice := pred(indice); END; {WHILE} FOR indice:=expFinal DOWNTO expInicial DO BEGIN <instrucciones>; END; {FOR} 59 Adaptado por Oriol Borrás Gené @oriolupm
  • 60. 60 Expresión inicial y final Las expresiones inicial y final cumplen: ● son tipos compatibles con el tipo de índice. ● se evalúan sólo una vez. ● dependiendo de sus valores puede no ejecutarse el cuerpo del bucle. Recomendación importante: ● no modificar su valor dentro del ciclo 60 Adaptado por Oriol Borrás Gené @oriolupm
  • 61. 61 Restricciones para la variable contadora Índice o contador: ● Tiene que ser de tipo ordinal Restricciones para índice: ● No modificar dentro del cuerpo (read, asignación,..) ● No usar como índice en un FOR interior ● Al salir del ciclo FOR, suponemos que su valor está sin definir 61 Adaptado por Oriol Borrás Gené @oriolupm
  • 62. 62 Ejemplo 5 ∑ xi = 1+2+...+n utilizando FOR i=0 62 Adaptado por Oriol Borrás Gené @oriolupm
  • 63. 63 Ejemplo de FOR anidados Ejemplo Escribe por pantalla los elementos de la matriz de tamaño n*m definida por aij = (i + j)/2 63 Adaptado por Oriol Borrás Gené @oriolupm
  • 64. 64 Errores comunes y limitaciones Errores comunes ● Modificar el contador. ○ ¿Cómo se evita? No usando el contador dentro del bucle. ● Poner un ; detrás del DO. ○ indicará cuerpo vacío (no hacer). Limitaciones ● Incremento/decremento de uno en uno (la alternativa: WHILE) 64 Adaptado por Oriol Borrás Gené @oriolupm
  • 65. 65 Características del FOR ● El valor de la variable de control del FOR se comprueba antes de ejecutar el bucle ● La estructura FOR realiza un número fijo de iteraciones ● El incremento (o decremento) del índice del bucle es automático ● El bucle termina cuando el valor de la variable de control sale fuera del intervalo de valores establecido. 65 Adaptado por Oriol Borrás Gené @oriolupm
  • 66. 66 WHILE , REPEAT y FOR Usar ciclo REPEAT...UNTIL ¿ Se sabe de antemano que el cuerpo del bucle ha de ejecutarse al menos una vez? Usar ciclo WHILE Recomendaciones técnicas: ¿ Se sabe de antemano cuántas veces el cuerpo del bucle ha de ejecutarse? Usar ciclo FOR SI SI NO NO 66 Adaptado por Oriol Borrás Gené @oriolupm
  • 67. 67 Pruebas de bucles Bucles simples (n = valor máximo del bucle) ● Repetir cero, una y dos veces ● Repetir un número medio (típico) de veces (m<n) ● Repetir el n-1, n y n +1 https://www.ecured.cu/Prueba_de_bucles 67 Adaptado por Oriol Borrás Gené @oriolupm
  • 68. 68 Pruebas de bucles Bucles anidados ● Comenzar por el bucle más interior. Establecer los demás bucles en sus valores mínimos. ● Llevar a cabo las pruebas de bucles simples para el bucle más interior, mientras se mantienen los parámetros de iteración (p. Ej. Contadores de bucles) de los bucles externos en sus valores mínimos. Añadir otras pruebas para valores fuera de rango o excluídos. ● Progresar hacia fuera, llevando a cabo pruebas para el siguiente bucle, pero manteniendo todos los bucles externos en sus valores mínimos y los demás bucles anidados en sus valores "típicos". ● Continuar hasta que se hayan probado todos los bucles. 68 Adaptado por Oriol Borrás Gené @oriolupm
  • 69. 69 Esquematización de algoritmos iterativos Diferentes estrategias de diseño ➔ diferentes algoritmos iterativos (esquemas) : ● Esquema de recorrido: ○ Pasan por todos los elementos de la secuencia ○ Saber o no a priori el número de elementos a procesar ➔ determina (While, Repeat, For) ● Esquema de búsqueda: ○ Pasa por los elementos de la secuencia hasta que encuentra alguno que satisface determinada condición ○ Basta con encontrar al primero 69 Adaptado por Oriol Borrás Gené @oriolupm
  • 70. 70 Esquema de recorrido Ejemplo 1: ● Contar las apariciones de la letra ‘a’ en una secuencia de caracteres acabada en ‘.’ Ejemplo 2: ● El número e se define como la suma de la siguiente serie: 1+ 1/1! + 1/2! + 1/3! + ..., se desea obtener el valor de la serie para n términos 70 Adaptado por Oriol Borrás Gené @oriolupm
  • 71. Esquema de recorrido sin saber a priori número de elementos que se deben procesar 71 obtener/calcular primer elemento iniciar tratamiento WHILE no último elemento DO BEGIN tratar elemento obtener/calcular siguiente elemento END; tratamiento final Esquema de recorrido 71 Adaptado por Oriol Borrás Gené @oriolupm
  • 72. Esquema de recorrido si sabemos a priori el número elementos (iteraciones) 72 iniciar tratamiento FOR primer elemento TO ultimo elemento DO BEGIN tratar elemento END; tratamiento final Esquema de recorrido 72 Adaptado por Oriol Borrás Gené @oriolupm
  • 73. 73 Esquema de búsqueda Ejemplo Determinar si aparece la letra ‘a’ en una secuencia de caracteres acabada en ‘.’ 73 obtener/calcular posible primer elemento iniciar tratamiento WHILE no último elemento y no satisface A DO obtener/calcular siguiente elemento determinar si encontrado Adaptado por Oriol Borrás Gené @oriolupm
  • 74. 74 Esquema mixto Utilizando ambos esquemas obtenemos esquema mixto. Ejemplo: Contar el número de caracteres anteriores a la primera aparición de la letra ‘a’ en una secuencia de caracteres acabada en ‘.’ 74 Adaptado por Oriol Borrás Gené @oriolupm
  • 75. 75 Esquema mixto Ejemplo El número e se define como la suma de la siguiente serie: 1 + 1/1! + 1/2! + 1/3! + .... Escribe un bloque de programa que pida un umbral de error y aproxime el número e hasta que la diferencia entre dos aproximaciones sucesivas sea menor que el umbral. 75 Adaptado por Oriol Borrás Gené @oriolupm
  • 76. 76 BEGIN {bloque} Readln(error); aprox_ant:= 0; aprox_sig:= 1; fact:=1; i:=1; WHILE (aprox_sig-aprox_ant)>= error DO BEGIN aprox_ant:= aprox_sig; aprox_sig:= aprox_ant + 1/fact; i:= i + 1; fact:= fact * i; END; {WHILE} writeln(error, aprox_sig); END {bloque} Esquema mixto 76 Adaptado por Oriol Borrás Gené @oriolupm
  • 77. Ejercicio 1 (enunciado) 77 Escriba un programa que imprima los 20 primeros números impares y sus cuadrados. Adaptado por Oriol Borrás Gené @oriolupm
  • 78. Ejercicio 1 (análisis) 78 Escriba un programa que imprima los 20 primeros números impares y sus cuadrados. Que hace? (objetivo) Es un esquema de recorrido que asegura que se procesen todos los datos de una colección -> Imprimir 20 números impares y sus cuadrados Datos de entrada: Datos de salida: Adaptado por Oriol Borrás Gené @oriolupm 20 números impares y sus cuadrados 2*N = PAR 2*N+1 = IMPAR
  • 79. Ejercicio 1 (programa) 79 PROGRAMA impares; VAR cont:integer; Adaptado por Oriol Borrás Gené @oriolupm BEGIN {programa principal} END. {programa principal} readln; writeln ('NUMERO CUADRADO'); FOR cont:=0 TO 19 DO writeln(2*cont+1:4,' ', sqr(2*cont+1):9); • Inicializar cont? • FOR cont = 1 TO 20? • Listado de instrucciones? • En lugar de 20 n introducido por teclado?
  • 80. Ejercicio 1 (resultado) 80 Adaptado por Oriol Borrás Gené @oriolupm
  • 81. Ejercicio 2 (enunciado) 81 Escriba un programa que lea y sume hasta que haya sumado diez valores de datos o hasta que lea un valor negativo, cualquiera que sea el primer valor. Adaptado por Oriol Borrás Gené @oriolupm
  • 82. Ejercicio 2 (análisis) 82 Escriba un programa que lea y sume hasta que haya sumado diez valores de datos o hasta que lea un valor negativo, cualquiera que sea el primer valor. Que hace? (objetivo) Es un esquema de búsqueda que busca un elemento con cierta característica dentro de una colección sin tener que procesar todos los elementos -> suma 10 primeros numeros o hasta que se introduzca número negativo. Adaptado por Oriol Borrás Gené @oriolupm
  • 83. Ejercicio 2 (análisis) 83 Escriba un programa que lea y sume hasta que haya sumado diez valores de datos o hasta que lea un valor negativo, cualquiera que sea el primer valor. Datos de entrada: Datos de salida: Adaptado por Oriol Borrás Gené @oriolupm números escritos suma de los números
  • 84. Ejercicio 2 (programa) 84 PROGRAM SumaNumeros; VAR cont, numero, suma:integer; CONST NUMMAX = 2; Adaptado por Oriol Borrás Gené @oriolupm BEGIN suma:=0; cont:=0; END. writeln ('La suma total es: ',suma,'de un total de ',cont,' numeros introducidos.'); readln; REPEAT writeln('Escriba un numero por pantalla'); readln(numero); IF (numero >= 0) THEN BEGIN suma:=suma+numero; cont:=cont+1; END UNTIL ((cont >= NUMMAX) OR (numero < 0));
  • 85. Ejercicio 3 (enunciado) 85 Un banco antes de conceder un préstamo a 20 años comprueba los ingresos del solicitante. Si los ingresos son superiores a 12000 euros anuales el crédito se concede. Si los ingresos son inferiores a 12000 euros anuales pero superiores a 10000 euros y está soltero el crédito se concede. También se concede si tiene ingresos entre 12000 y 10000 euros y está casado sin hijos. Escriba un programa que pida los ingresos anuales, el estado civil del solicitante y si tienes hijos y diga si se le da el crédito o no. Adaptado por Oriol Borrás Gené @oriolupm
  • 86. Ejercicio 3 (análisis) 86 Un banco antes de conceder un préstamo a 20 años comprueba los ingresos del solicitante. Si los ingresos son superiores a 12000 euros anuales el crédito se concede. Si los ingresos son inferiores a 12000 euros anuales pero superiores a 10000 euros y está soltero el crédito se concede. También se concede si tiene ingresos entre 12000 y 10000 euros y está casado sin hijos. Escriba un programa que pida los ingresos anuales, el estado civil del solicitante y si tienes hijos y diga si se le da el crédito o no. Adaptado por Oriol Borrás Gené @oriolupm
  • 87. Ejercicio 3 (análisis) 87 Que hace? (objetivo) Calcular si se concede un préstamo Datos de entrada: sueldo, estado civil y nºhijos Datos de salida: concesión o denegación Se concede si las siguientes opciones: a) Ingresos > 12000 b) 12000>Ingresos>10000 y soltero c) 12000>Ingresos>10000 y casado sin hijos Adaptado por Oriol Borrás Gené @oriolupm
  • 88. Ejercicio 3 (análisis) 88 Que hace? (objetivo) Calcular si se concede un préstamo Datos de entrada: sueldo, estado civil y nºhijos Datos de salida: concesión o denegación Se concede si las siguientes opciones: a) Ingresos > 12000 b) 12000>Ingresos>10000 y soltero c) 12000>Ingresos>10000 y casado sin hijos Solución: https://drive.google.com/open?id=0By9h3BVSUpBNUWxPM3VlRFk5V1k Adaptado por Oriol Borrás Gené @oriolupm
  • 89. Ejercicio 4 (enunciado) Implemente un programa que simule una calculadora, mostrando el siguiente menú: 1. Sumar 2. Restar 3. Multiplicar 4. Dividir 0. Terminar El programa debe verificar que escribe un número válido entre 0 y 4. Si se elige opción entre 1 y 4 deberá pedir dos números, mostrará el resultado y volverá al menú. Adaptado por Oriol Borrás Gené @oriolupm
  • 90. Ejercicio 4 (análisis) Que hace? (objetivo) Calculadora con 5 opciones: sumar, restar, multiplicar, divider y terminar. Datos de entrada: tipo de operación y operandos Datos de salida: resultado operación Solución: https://drive.google.com/open?id=0By9h3BVSUpBNTG9vamZWeDFlTDQ Adaptado por Oriol Borrás Gené @oriolupm
  • 91. Ejercicio 1 (CASA) 91 Escriba un programa que realice un bucle con while y muestre en pantalla del 1 al 10. Adaptado por Oriol Borrás Gené @oriolupm
  • 92. Ejercicio 2 (CASA) 92 Escriba un programa que realice un bucle con repeat y muestre en pantalla del 1 al 10. Adaptado por Oriol Borrás Gené @oriolupm
  • 93. Ejercicio 3 (CASA) 93 Escriba un programa que realice un bucle con for y muestre en pantalla del 1 al 10. Adaptado por Oriol Borrás Gené @oriolupm
  • 94. Ejercicio 4 (CASA) 94 Escriba un programa que realice la pregunta ¿Desea continuar, escriba S o N? y que no deje de hacerla hasta que el usuario teclee N. Adaptado por Oriol Borrás Gené @oriolupm