Transferencia de control Sentencia If...then...else

Anuncio
Introducción a la Programación
Prof. Yerson Rodríguez
Flujo de control
Transferencia de control
El concepto de flujo de control
de un programa se refiere al
orden en que se ejecutan las
acciones individuales de un
programa. Aunque la secuencia
de ejecución normal de un
programa es lineal, existen
métodos que permiten salir del
flujo lineal a través del uso de las
estructuras de control.
Las estructuras de control
se clasifican en:
• Estructuras de control
Selectivas.
• Estructuras de control
Repetitivas.
1
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control selectivo
Sentencia If...then...else
Dado que las expresiones lógicas
toman el valor verdadero o falso, se
necesita una sentencia de control
que permita que se ejecuten ciertas
instrucciones en caso de que una
condición sea verdadera o que se
ejecuten otras instrucciones en
caso de que la condición no se
cumpla y su evaluación sea falsa.
En Pascal esa alternativa se realiza
con la sentencia o estructura de
control if-then-else.
Unidad V
Diagrama de flujo de la sentencia:
if-then-else
Condición
Condición
Acción A
Acción A
Acción B
Acción B
Pseudocódigo:
Si expresión lógica
entonces hacer acción A
sino hacer Acción B
Fin_si
2
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control selectivo
Sentencia If...then...else
Reglas de Funcionamiento.
1. Se evalúa la expresión lógica.
2. Si el resultado anterior arroja
true (verdadero), se ejecutará
la acción A, y el control pasa a
la sentencia siguiente a la
condición if-then-else (no se
ejecuta la acción B).
3. Si el resultado da falso, se
ejecuta entonces, la acción B.
El control pasa luego a la
siguiente
sentencia
del
programa sin pasar por la
acción A.
Diagrama de flujo de la sentencia:
if-then-else
Condición
Condición
Acción A
Acción A
Acción B
Acción B
3
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
Sentencia If...then...else
program numeros;
uses
crt;
var
numero: real;
begin
WriteLn (‘Introduzca un número: ‘);
ReadLn (numero);
if numero > 0.0
then
WriteLn (‘El número es positivo ‘)
else
WriteLn (‘El número es negativo ‘);
WriteLn (‘Siempre pasará por aquí... ‘)
end. {archivo ifthenel}
Unidad V
Programa que solicita
se ingrese un número
por el teclado y luego
da un mensaje en
pantalla indicando si
este es positivo o
negativo.
Ejecución:
Introduzca un número:
9↵
El número es positivo
Siempre pasará por aquí...
4
Introducción a la Programación
Prof. Yerson Rodríguez
Sentencia If...then...else
Sangrado (indentación).
Omisión del else.
Sintácticamente, el sangrado y la
separación de líneas no son
necesarias. Por ejemplo el
compilador aceptará las siguientes
sentencias.
En determinados casos se desea
que una determinada acción sólo
se ejecute si una cierta condición
es verdadera y no realizar ninguna
acción si la condición es falsa, en
ese caso se omite del formato la
utilización de la cláusula else.
ReadLn (numero);
if numero > 0.0 then WriteLn (‘positivo‘) else
WriteLn (‘negativo‘);
WriteLn (‘Siempre pasará por aquí... ‘);
Sin embargo, las sangrías
favorecen la legibilidad de los
programas, por ello es muy
recomendado.
Pseudocódigo:
Si expresión lógica
entonces hacer acción A
Fin_si
5
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
Sentencia If...then...else
Sentencias Compuestas.
En numerosas ocasiones en lugar
de realizar sólo una acción, cuando
se cumpla o no se cumpla una
determinada condición, se desea
realizar varias acciones. Esto se
realiza mediante sentencias
compuestas.
Una sentencia compuesta es un
conjunto de sentencias separadas
por puntos y comas y encerradas
entre las palabras begin y end. El
cuerpo de un programa o
procedimiento es una sentencia
compuesta.
Unidad V
begin
sentencia 1;
sentencia 2;
sentencia 3;
sentencia 4;
:
:
sentencia n
end;
El punto y coma de una sentencia
anterior al end final de if es
opcional y se suprime casi
siempre.
6
Introducción a la Programación
Prof. Yerson Rodríguez
IF anidadas
Sentencia If...then...else
Sentencias if anidadas
La sentencia que sigue a la palabra reservada then o else puede ser
cualquiera, incluso otra sentencia if...then...else. Cuando una o
ambas bifurcaciones de una sentencia if...then...else contienen
también una sentencia if...then...else, se dice que dichas sentencias
if están anidadas, y al proceso general se le llama anidamiento. Una
sentencia if anidada se puede utilizar para construir decisiones con
diferentes alternativas.
Suelen usarse cuando se requiere evaluar varias condiciones lógicas
sucesivamente unas detrás de otras. En el programa cada condición
que sucesivamente se evalué estará dentro de la condición anterior,
ósea unas dentro de otras.
7
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
program Mayor;
var
a, b, c
: integer;
num-mayor
: integer;
begin
WriteLn (‘Introduzca tres números enteros ‘);
ReadLn (a, b, c);
if a > b
then
if a >c
then
num-mayor := a;
else
num-mayor := c;
else
if b > c
then
num-mayor := b;
else
num-mayor := c;
WriteLn (El número mayor es ‘, num-mayor)
end. {archivo mayor}
Unidad V
Programa que solicita
tres números enteros
distintos y luego
muestra el mayor de
ellos, usando para ello
estructuras if anidadas.
Ejecución:
Introduzca tres números enteros
15 23 19 ↵
El número mayor es 23
8
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control selectivo
Sentencia Case...of...else...end
La estructura de control
case...of...else...end
se
utiliza para elegir entre
diferentes alternativas. Una
sentencia case se compone
de
varias
sentencias
simples. Cuando case se
ejecuta, una (y solo una
vez) de las sentencias
simples se selecciona y
ejecuta.
Case selector of
Lista constantes 1: sentencia 1;
Lista constantes 2: sentencia 2;
Lista constantes 3: sentencia 3;
.
.
.
Lista constantes n: sentencia n
Else (*Opcional *)
Sentencia z;
End (* fin de la sentencia case*)
9
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control selectivo
Sentencia Case...of...else...end
Reglas de Funcionamiento.
1.
2.
3.
4.
5.
6.
Unidad V
La expresión selector se evalúa y se compara con las listas de constantes; las
listas de constantes son listas de uno o más posibles valores que puede
tomar selector separadas por comas. Solo se ejecuta una sentencia. Si el
valor del selector esta en la lista de constantes 1, entonces se ejecutará la
sentencia 1. Luego el programa se seguirá ejecutando a partir del end. Cada
sentencia puede ser una sentencia simple o compuesta.
La cláusula else es opcional y funciona igual que en la sentencia IF.
Si el valor de selector no está comprendido en ninguna lista de constantes y
no existe la cláusula else, no sucede nada y el programa se seguirá
ejecutando a partir del end. En caso de que exista la cláusula else, pero el
valor de selector no coincide con ninguna de las listas de constantes, se
ejecutarán las sentencias a continuación de la cláusula else.
El selector debe ser de tipo ordinal (integer, char, boolean o enumerado). No
se pueden usar números reales dado que no son ordinales.
Todas las constantes case deben ser únicas y de tipo ordinal compatibles con
el tipo del selector.
Cada sentencia, excepto la última debe ir seguida de un punto y coma.
10
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
program adivinanza (imput, output);
const
impar
= 0;
par
= 1;
var
digito, paridad, mod5, sudigito, : integer;
begin
WriteLn (‘Escriba un digito secreto entre 0 y 9 ‘);
WriteLn (‘Introduzca 0 si es impar 1 si es par‘);
ReadLn (paridad);
WriteLn (‘Indique el resto de dividir su digito entre 5’);
ReadLn (mod5);
case paridad of
par
: case mod5 of
0: sudigito := 0;
1: sudigito := 6;
2: sudigito := 2;
3: sudigito := 8;
4: sudigito := 4;
end;
impar
: case mod5 of
0: sudigito := 5;
1: sudigito := 1;
2: sudigito := 7;
3: sudigito := 3;
4: sudigito := 9;
end;
end;
WriteLn (‘El digito que escribió es ‘, sudigito)
end. {archivo caseadiv}
Programa que solicita
indicar si un número
secreto es par o impar,
además solicita el resto de
dividirlo entre 5. Luego el
programa le dice cual fue el
número que escribió.
Ejecución:
Escriba un número secreto entre 0 y 9
Introduzca 0 si es impar y 1 si es par
0↵
Indique el resto de dividirlo entre 5
3↵
El digito que escribió es 8
11
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control repetitivo
Sentencia for...to...do
En numerosas ocasiones se puede
desear un bucle que se ejecute un
número determinado de veces, y
cuyo número se conozca por
anticipado. Para aplicaciones de
este tipo se utiliza la sentencia
for...to...do.
La sentencia for...to...do requiere
que conozcamos por anticipado el
número de veces que se ejecutan
las sentencias del interior del bucle.
Si se desea que las sentencias
controladas se ejecuten hasta que
ocurra una determinada situación,
no se debe utilizar la sentencia for.
Unidad V
Diagrama de flujo de la sentencia:
for...to...do
Ciclo
Ciclo
Acción A
Acción A
Pseudocódigo:
Desde i ← valor inicial hasta valor final hacer
sentencia(s)
Fin_desde
12
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
Sentencia for...to...do
program sumar;
const
max = 100;
var
numero, suma : integer;
Programa que suma
todos los enteros
entre 1 y 100 y
muestra el resultado
por pantalla.
begin
suma := 0;
for numero := 1 to max do
suma := suma + numero;
write (‘La suma de los ‘,max,’ primeros ‘);
writeln (‘números es igual a ‘);
write (suma)
end.
13
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
Sentencia for...to...do
program sumador;
var
i, numero, cant, suma : integer;
begin
writeln ('Cuantos números desea sumar?');
readln (cant);
suma := 0;
for i := 1 to cant do
begin
write ('Introduzca N°', i ,': ');
readln (numero);
suma := suma + numero
end;
write ('La suma de los ', cant,' números ');
write ('introducidos es igual a: ');
write (suma)
end. {archivo forsuma}
Unidad V
Programa que solicita
la cantidad de
números que se
desea sumar y luego
muestra por pantalla
la suma de estos.
Ejecución:
Cuantos números desea sumar?
3↵
Introduzca N° 1: 5 ↵
Introduzca N° 2: 4 ↵
Introduzca N° 3: 6 ↵
La suma de los 3 números
introducidos es igual a: 15
14
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control repetitivo
Sentencia for...downto...do
La sentencia de control repetitivo
for...downto...do es una variante de
la sentencia for...to...do.
Diagrama de flujo de la sentencia:
for...downto...do
Su funcionamiento es similar, lo que
varía es que en lugar de incrementar
en una unidad al contador, este se
decrementa en una unidad.
Ósea que este tipo de ciclo o bucle
se ejecutará repetidamente desde
un valor inicial “mayor” hasta un
valor final “menor” descontándose
una unidad del contador cada vez.
Ciclo
Ciclo
Acción A
Acción A
Pseudocódigo:
Desde i ← valor final hasta valor inicial hacer
sentencia(s)
Fin_desde
15
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control repetitivo
Sentencia for...to/downto...do
Reglas de Funcionamiento.
1. Las variables de control, valor inicial y valor final
deben ser todas del mismo tipo, pero el tipo real
no esta permitido. Los valores iniciales o finales
pueden ser tanto expresiones como constantes.
2. Antes de la primera ejecución del bucle, a la
variable de control se asigna el valor inicial.
3. La última ejecución del bucle normalmente ocurre
cuando la variable de control es igual al valor final.
4. Cuando se utiliza la variable reservada to la
variable de control se incrementa en cada
iteración. Si por el contrario se utiliza downto,
entonces se decrementa.
5. Es ilegal intentar modificar el valor de la variable
de control, el valor inicial y el valor final dentro del
bucle.
Unidad V
Diagrama de flujo de:
for...to/downto...do
Ciclo
Ciclo
Acción A
Acción A
16
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
Sentencia for...downto...do
program sumador;
var
i, numero, cant, suma : integer;
begin
writeln ('Cuantos números desea sumar?');
readln (cant);
suma := 0;
for i:= cant downto 1 do
begin
write ('Introduzca N°', i ,': ');
readln (numero);
suma := suma + numero
end;
write ('La suma de los ', cant,' números ');
write ('introducidos es igual a: ');
write (suma)
end. {archivo fordsum}
Programa que solicita
la cantidad de
números que se
desea sumar y luego
muestra por pantalla
la suma de estos.
Ejecución:
Cuantos números desea sumar?
3↵
Introduzca N° 3: 5 ↵
Introduzca N° 2: 4 ↵
Introduzca N° 1: 6 ↵
La suma de los 3 números
introducidos es igual a: 15
17
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control repetitivo
Sentencia while...do
La sentencia while...do es aquella
donde el número de iteraciones no
se conoce por anticipado y el cuerpo
del bucle se repite mientras se
cumple una determinada condición.
Cuando se ejecuta lo primero que
sucede es la evaluación de la
expresión lógica. Si se evalúa falso,
ninguna acción se realiza y el
programa sigue con la siguiente
sentencia después del bucle. Si la
expresión se evalúa y resulta
verdadero, entonces se ejecuta el
cuerpo del bucle y se evalua de
nuevo la expresión.
Unidad V
Diagrama de flujo de la sentencia:
while...do
Condición
Condición
Acción A
Acción A
Pseudocódigo:
Mientras condición hacer
sentencia(s)
Fin_mientras
18
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control repetitivo
Sentencia while...do
Diagrama de flujo de:
while...do
Reglas de Funcionamiento.
1. La condición se evalúa antes y después de cada
ejecución del bucle. Si la condición es verdadera se
ejecuta el bucle, si es falsa, el control pasa a la
siguiente sentencia sin pasar por el bucle.
2. Si la condición se evalúa a falso cuando se ejecuta el
bucle por primera vez, las sentencias dentro del bucle
no se ejecutarán nunca.
3. Mientras la condición sea verdadera el bucle se
ejecutará. Esto significa que el bucle se ejecutará
indefinidamente a menos que “algo” dentro del bucle
modifique la condición haciendo que su resultado sea
falso y se salga del bucle. Si la expresión nunca
cambia de valor, entonces el bucle no se para nunca
y se dice que es un bucle infinito.
Condición
Condición
Acción A
Acción A
19
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
Sentencia while...do
program sumador;
var
i, numero, cant, suma : integer;
begin
writeln ('Cuantos números desea sumar?');
readln (cant);
suma := 0;
i := 1;
while i <= cant do
begin
write ('Introduzca N°', i ,': ');
readln (numero);
suma := suma + numero;
i := i + 1
end;
write ('La suma de los ', cant,' números ');
write ('introducidos es igual a: ');
write (suma)
end. {archivo whilesum}
Unidad V
Programa que solicita
la cantidad de
números que se
desea sumar y luego
muestra por pantalla
la suma de estos.
Ejecución:
Cuantos números desea sumar?
3↵
Introduzca N° 1: 5 ↵
Introduzca N° 2: 4 ↵
Introduzca N° 3: 6 ↵
La suma de los 3 números
introducidos es igual a: 15
20
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control repetitivo
Sentencia repeat...until
La estructura de control repetitivo
repeat...until es una variante del
bucle while...do y especifica un
bucle condicional que se repite
hasta que la condición se hace
verdadera.
Después de cada iteración del
cuerpo del bucle se evalúa la
condición. Si la condición es
verdadera, el bucle termina y sale
de él, ejecutándose la siguiente
sentencia después del bucle. Si la
condición es falsa se repite el
cuerpo del bucle nuevamente.
Diagrama de flujo de la sentencia:
repeat...until
Acción A
Acción A
Condición
Condición
Pseudocódigo:
Repetir
sentencia(s)
Hasta_que condición
21
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
E. de control repetitivo
Sentencia repeat...until
Reglas de Funcionamiento.
1. La condición (expresión lógica) se evalúa
al final del bucle, después de que se
ejecutan todas las sentencias del cuerpo
del bucle.
2. Si la expresión lógica es verdadera, se
vuelve a repetir el cuerpo del bucle y se
ejecutan todas las sentencias.
3. Si la expresión lógica es falsa, se sale
del bucle y se ejecuta la siguiente
sentencia posterior a until.
4. La sintaxis de la sentencia repeat...until
no requiere begin ni end.
Unidad V
Diagrama de flujo de
repeat...until
Acción A
Acción A
Condición
Condición
22
Introducción a la Programación
Prof. Yerson Rodríguez
Ejemplo
Sentencia repeat...until
program sumador;
var
i, numero, cant, suma : integer;
begin
writeln ('Cuantos números desea sumar?');
readln (cant);
suma := 0;
i := 1;
repeat
write ('Introduzca N°', i ,': ');
readln (numero);
suma := suma + numero;
i := i + 1
until (i > cant);
write ('La suma de los ', cant,' números ');
write ('introducidos es igual a: ');
write (suma)
end. {archivo repeatsu}
Programa que solicita
la cantidad de
números que se
desea sumar y luego
muestra por pantalla
la suma de estos.
Ejecución:
Cuantos números desea sumar?
3↵
Introduzca N° 1: 5 ↵
Introduzca N° 2: 4 ↵
Introduzca N° 3: 6 ↵
La suma de los 3 números
introducidos es igual a: 15
23
Unidad V
Introducción a la Programación
Prof. Yerson Rodríguez
Bibliografía
Joyanes A., Luis, Programación en Turbo/Borland Pascal 7. 3ra Ed. Osborne/McGrawHill Interamericana, Madrid, 1998
Rodnay, Zaks, Programación en Pascal, Turbo Pascal. 1ra Ed. Anaya Multimedia,
Madrid, 1986
Joyanes A., Luis, Turbo/Borland Pascal 7. 1ra Ed. Osborne/McGraw-Hill
Interamericana, Madrid, 1997
Noton, Peter. Introducción a la Computación. 3ra Edición. México. McGraw-Hill
Interamericana, México, D.F., 2003.
Prieto E., Alberto y otros, Introducción a la Informática. 3da Ed. McGraw-Hill
Interamericana, Madrid, 2002
Mata T., Ramón, Cushman, Pauline, Introducción a la Programación. 1ra Ed. McGrawHill Interamericana, México, D.F., 2001
Unidad V
24
Descargar