Download Estructuras de Control - Departamento de Informática USM

Document related concepts
no text concepts found
Transcript
Departamento de Informática
Universidad Técnica Federico Santa María
Programación de Computadores (IWI-131)
Tema 6:
Estructuras de Control
Luis Pizarro Q.
[email protected]
www.labmc.inf.utfsm.cl/~lpizarro/IWI-131
1. Estructuras de Control Selectivas

Existen 4 tipos de estructuras de control
selectivas:
1. IF THEN
2. IF THEN ELSE
3. IF’s anidados
4. CASE OF
Luis Pizarro Q. ©2003
2
1. Estructuras de Control Selectivas

IF THEN (si entonces)
Si <condición> = TRUE
se ejecuta la acción.
Simple
IF <condición> THEN
acción;
Compuesto
IF <condición> THEN
BEGIN
acción1;
Sin punto y coma
la acción antes
....
de END
acciónN
END;
Luis Pizarro Q. ©2003
cond
FALSE
cond
FALSE
TRUE
acción
TRUE
acción1
..
.
acciónN
3
Ejemplo de Programa Selectivo

Escriba un programa que calcule el valor absoluto de la
diferencia del cuadrado de 2 cantidades si la primera es
múltiplo de 3 y su raíz no es mayor que el doble de la
segunda cantidad.
Aquí se utiliza
PROGRAM Calculo;
un IF THEN
VAR
simple
x, y: REAL;
BEGIN
WRITE(‘Ingrese 2 cantidades: ’);
READLN(x,y);
IF (x MOD 3 = 0) AND NOT (SQRT(x) > 2*y) THEN
WRITELN(‘El resultado es: ’,ABS(SQR(x)-SQR(y)))
END.
Si la condición no se cumple el programa no devuelve resultado alguno.
Luis Pizarro Q. ©2003
4
1. Estructuras de Control Selectivas

IF THEN ELSE (si entonces, si no)
Simple
IF <condición> THEN
acción1
ELSE
acción2;
Si <condición> = TRUE
se ejecuta la acción.
Sin punto y coma la
acción antes de ELSE
TRUE
cond
FALSE
acción1
acción2
Caso compuesto se deduce de lo anterior.
Luis Pizarro Q. ©2003
5
Ejemplo de Programa Selectivo

Determinar si un número entero es par o impar.
PROGRAM Par_o_Impar;
VAR
x: INTEGER;
BEGIN
WRITE(‘Ingrese Número: ’);
READLN(x);
IF x MOD 2 = 0 THEN
WRITELN(‘El número es par’)
ELSE
WRITELN(‘El número es impar’)
END.
Luis Pizarro Q. ©2003
Aquí se utiliza un
IF THEN ELSE
simple
6
1. Estructuras de Control Selectivas

IF’s anidados
Simple
IF <cond 1> THEN
IF <cond 2> THEN
acción1
ELSE
acción2
ELSE
IF <cond 3> THEN
acción3
ELSE
acción4;
No se coloca punto y
coma en las acciones antes
de ELSE y END
TRUE
TRUE
acc1
c2
FALSE
acc2
FALSE
c1
TRUE
c3
acc3
Caso compuesto se deduce de lo anterior.
Luis Pizarro Q. ©2003
FALSE
acc4
7
Ejemplo de Programa Selectivo

Buscar el mínimo de tres números.
PROGRAM Minimo;
VAR
x,y,z,min: INTEGER;
BEGIN
WRITE(‘Ingrese tres números: ’);
READLN(x,y,z);
IF x < y THEN
IF x < z THEN
min:=x
ELSE
min:=z
ELSE
IF y < z THEN
min:=y
ELSE
min:=z;
WRITELN(‘El mínimo es: ’,min)
END.
Luis Pizarro Q. ©2003
Aquí se utilizan
IF’s anidados
8
1. Estructuras de Control Selectivas

CASE OF (en caso de). Selección Múltiple
CASE <variable> OF
altern1: acción1;
altern2: BEGIN
acción21;
......
acción2N
END;
....
alternM: acciónM
ELSE acciónElse
END;
Luis Pizarro Q. ©2003
var
alt1
acc1
alt2
acc21
..
.
altM
. . . accM
ELSE
accelse
acc2N
9
Ejemplo de Programa Selectivo Múltiple

Escribir un programa que permita obtener la nota
de alguno de sus tres certámenes, asumiendo que
éstas ya han sido ingresadas al programa.
PROGRAM Notas;
VAR
numero: INTEGER;
BEGIN
WRITE(‘Ingrese número de certamen: ’);
READLN(numero);
CASE numero OF
1: WRITELN(‘Certamen 1: ’,60);
2: WRITELN(‘Certamen 2: ’,70);
3: WRITELN(‘Certamen 3: ’,80);
ELSE WRITELN(‘Debe ingresar un número entre 1 y 3’)
END
END.
Luis Pizarro Q. ©2003
10
Ejemplo de Programa Selectivo Múltiple

Ver si un dígito ingresado es par o impar.
PROGRAM Par_o_Impar;
VAR
caracter: CHAR;
BEGIN
WRITE(‘Ingrese un dígito: ’);
READLN(caracter);
CASE caracter OF
‘0’, ‘2’, ‘4’, ‘6’, ‘8’: WRITE(‘Par’);
‘1’, ‘3’, ‘5’, ‘7’, ‘9’: WRITE(‘Impar’)
ELSE WRITE(‘No es dígito’)
END
END.
Luis Pizarro Q. ©2003
11
Ejemplo General

Calcular área y perímetro de alguna de las siguientes figuras:
cuadrado, círculo, triángulo equilátero; a pedido del usuario.
PROGRAM Area_y_Perimetro;
TYPE
figura = (cuadrado,circulo,triangulo);
VAR
f: figura; A, P: REAL ;
L: REAL; R: REAL ;
BEGIN
WRITE(‘Seleccione una de las siguientes figuras ’);
WRITE(‘cuadrado, circulo, triangulo: ’);
READLN(f);
A := 0;
P := 0;
CASE f OF
cuadrado: BEGIN
WRITE(‘Ingrese lado del cuadrado: ’);
READLN(L);
Entre el BEGIN y
IF L > 0 THEN
el END hay 3
BEGIN
sentencias:
A := SQR(L);
WRITE, READLN
P := 4*L
y IF THEN ELSE.
END
ELSE
WRITELN(‘El lado debe ser positivo.’)
END;Luis Pizarro Q. ©2003
12
Ejemplo General
circulo:
BEGIN
WRITE(‘Ingrese radio del círculo: ’);
READLN(R);
IF R > 0 THEN
BEGIN
A := 3.14*SQR(R);
P := 2*3.14*R
END
ELSE
WRITELN(‘El radio debe ser positivo.’)
END;
triangulo: BEGIN
WRITE(‘Ingrese lado del triángulo: ’);
READLN(L);
IF L > 0 THEN
BEGIN
A := SQRT(3) / 4 * SQR(L);
P := 3*L
END
ELSE
WRITELN(‘El lado debe ser positivo.’)
END
ELSE WRITELN(‘Nombre no válido.’)
END; {fin del CASE}
IF (A > 0) AND (P > 0) THEN
WRITELN(‘Area: ’, A, ‘ Perímetro: ’, P)
END.
Luis Pizarro Q. ©2003
13
Ejercicios de Programación





Escriba un programa que calcule el promedio
de sus certámenes y le permita averiguar si
ud. aprobará el curso o no.
Escriba un programa que ordene de mayor a
menor 3 números.
Escriba un programa que resuelva la
ecuación ax2+bx+c=0.
Escriba un programa que permita resolver un
sistema de ecuaciones de 2x2.
Control 1: Miércoles 19 en clases.
Luis Pizarro Q. ©2003
14
2. Estructuras de Control Repetitivas

Existen 3 tipos de estructuras de control
repetitivas:
1. WHILE
2. REPEAT
3. FOR TO (FOR DOWNTO)
Luis Pizarro Q. ©2003
15
2. Estructuras de Control Repetitivas

WHILE (mientras)
Simple
WHILE <condición> DO
acción;
Compuesto
WHILE <condición> DO
BEGIN
acción1;
....
acciónN
END;
Luis Pizarro Q. ©2003
Si <condición> es TRUE
se ejecuta la acción.
cond
FALSE
cond
FALSE
TRUE
acción
TRUE
acción1
..
.
acciónN
16
Ejemplo: Uso de WHILE

Escribir un programa que sume todos los números
ingresados por el usuario hasta que se lea el 0.
PROGRAM Sumar;
VAR
numero,suma: INTEGER;
BEGIN
suma:=0;
WRITE(‘Ingrese número: ’);
READLN(numero);
WHILE numero <> 0 DO
BEGIN
suma:=suma + numero;
WRITE(‘Ingrese número: ’);
READLN(numero);
END;
WRITELN(‘La suma es: ’,suma)
END.
Luis Pizarro Q. ©2003
17
Ejemplo: Uso de WHILE

Escribir un programa que sume todos los números
ingresados por el usuario hasta que se lea el 0.
(Otra manera)
PROGRAM Sumar;
VAR
numero,suma: INTEGER;
seguir: BOOLEAN;
BEGIN
suma:=0;
seguir:=TRUE;
WHILE seguir DO
BEGIN
WRITE(‘Ingrese número: ’);
READLN(numero);
IF numero <> 0 THEN
suma:=suma + numero
ELSE
seguir:=FALSE
END;
WRITELN(‘La suma es: ’,suma)
END.
Luis Pizarro Q. ©2003
18
2. Estructuras de Control Repetitivas

REPEAT (repetir)
REPEAT
acción1;
.....
acciónN;
UNTIL <condición>;
Si <condición> = TRUE
termina su ejecución.
acción1
..
.
acciónN
cond
Obs: no necesita BEGIN ni END.
FALSE
TRUE
Luis Pizarro Q. ©2003
19
Ejemplo: Uso de REPEAT

Escribir un programa que determine si un número es
perfecto. (cuando la suma de sus divisores es el mismo
número) PROGRAM Perfecto;
VAR
numero,suma,divisor: INTEGER;
BEGIN
suma:=1; {ya que 1 siempre es divisor}
WRITE(‘Ingrese número: ’);
READLN(numero);
IF numero > 0 THEN
BEGIN
divisor:=2;
REPEAT
IF numero MOD divisor = 0 THEN
suma:=suma+divisor;
divisor:=divisor+1;
UNTIL divisor >= numero-1;
IF suma = numero THEN
WRITELN(‘El número ’,numero, ‘ es perfecto’)
ELSE
WRITELN(‘El número ’,numero, ‘ no es perfecto’)
END
ELSE
WRITELN(‘Debe ingresar un número positivo ’)
Luis Pizarro Q. ©2003
END.
20
2. Estructuras de Control Repetitivas

FOR (para)
Compuesto
FOR variable := inicio TO (DOWNTO) final DO
BEGIN
acción1;
Inicializa
....
actualiza
variable
acciónN
END;
acción1
..
.
Obs: variable se va incrementando (decrementando)
en 1 (-1) desde inicio hasta final.
acciónN
Luis Pizarro Q. ©2003
21
Ejemplo: Uso de FOR
n

Calcular la sumatoria

i 1
1
i
PROGRAM Sumatoria;
VAR
n,i: INTEGER;
suma: REAL;
BEGIN
suma:=0;
WRITE(‘Ingrese límite superior de la sumatoria: ’);
READLN(n);
FOR i:= 1 TO n DO
suma:= suma + 1/i;
WRITELN(‘La sumatoria es: ’,suma:5:2)
END.
Luis Pizarro Q. ©2003
22
Ejemplo: Uso de FOR

Escribir un programa que calcule el factorial de un
número.
PROGRAM Factorial;
VAR
numero,factorial,contador: INTEGER;
BEGIN
factorial:=1;
WRITE(‘Ingrese un número positivo: ’);
READLN(numero);
IF numero > 1 THEN
FOR contador:= numero DOWNTO 1 DO
factorial:= factorial * contador;
WRITELN(‘El factorial de ’,numero, ‘ es: ’,factorial)
END.
Luis Pizarro Q. ©2003
23
Ejemplo: Uso de FOR

Calcular la productoria de todos los números
pares hasta 30.
PROGRAM Productoria;
VAR
producto,i: INTEGER;
BEGIN
producto:=1;
FOR i:= 2 TO 30 STEP 2 DO
producto:= producto * i;
WRITELN(‘La productoria es ’,producto)
END.
Luis Pizarro Q. ©2003
24
Ejercicios de Programación



Escriba un programa que imprima N términos
de la serie de Fibonacci 1,1,2,3,5,8,13,21,...
Calcule la potencia de un número, por
ejemplo, xy. Hacerlo mediante 2 formas
distintas (WHILE, REPEAT, FOR)
Calcule cuántos términos debe tener al n
1
menos la sumatoria para que se cumpla  i  L
i 1
donde L es ingresado por el usuario.
Luis Pizarro Q. ©2003
25
Departamento de Informática
Universidad Técnica Federico Santa María
Programación de Computadores (IWI-131)
Tema 6:
Estructuras de Control
Luis Pizarro Q.
[email protected]
www.labmc.inf.utfsm.cl/~lpizarro/IWI-131