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
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
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
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?
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