Tema 6: Estructuras de Control Programación de Computadores (IWI-131) Tema 6: Estructuras de Control Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl 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
1. Estructuras de Control Selectivas IF THEN (si entonces) Simple IF <condición> THEN acción; cond acción TRUE FALSE Si <condición> = TRUE se ejecuta la acción. Compuesto IF <condición> THEN BEGIN acción1; .... acciónN END; cond acción1 TRUE FALSE acciónN . Sin punto y coma la acción antes de END Luis Pizarro Q. ©2003
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 un IF THEN simple PROGRAM Calculo; VAR 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
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 cond acción2 FALSE TRUE acción1 Caso compuesto se deduce de lo anterior. Luis Pizarro Q. ©2003
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. Aquí se utiliza un IF THEN ELSE simple Luis Pizarro Q. ©2003
1. Estructuras de Control Selectivas IF’s anidados Simple IF <cond 1> THEN IF <cond 2> THEN acción1 ELSE acción2 IF <cond 3> THEN acción3 acción4; No se coloca punto y coma en las acciones antes de ELSE y END c1 acc2 FALSE TRUE acc1 c2 c3 acc4 acc3 Caso compuesto se deduce de lo anterior. Luis Pizarro Q. ©2003
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 IF y < z THEN min:=y min:=z; WRITELN(‘El mínimo es: ’,min) END. Aquí se utilizan IF’s anidados Luis Pizarro Q. ©2003
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 var acc1 alt1 acc21 acc2N . accM alt2 altM accelse ELSE . . . Luis Pizarro Q. ©2003
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
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
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); IF L > 0 THEN A := SQR(L); P := 4*L END ELSE WRITELN(‘El lado debe ser positivo.’) END; Entre el BEGIN y el END hay 3 sentencias: WRITE, READLN y IF THEN ELSE. Luis Pizarro Q. ©2003
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 A := SQRT(3) / 4 * SQR(L); P := 3*L WRITELN(‘El lado debe ser positivo.’) 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
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
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
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; Si <condición> es TRUE se ejecuta la acción. cond acción TRUE FALSE cond acción1 TRUE FALSE acciónN . Luis Pizarro Q. ©2003
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 suma:=suma + numero; END; WRITELN(‘La suma es: ’,suma) END. Luis Pizarro Q. ©2003
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 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
2. Estructuras de Control Repetitivas REPEAT (repetir) REPEAT acción1; ..... acciónN; UNTIL <condición>; Si <condición> = TRUE termina su ejecución. cond acción1 TRUE FALSE acciónN . Obs: no necesita BEGIN ni END. Luis Pizarro Q. ©2003
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 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 WRITELN(‘Debe ingresar un número positivo ’) END. Luis Pizarro Q. ©2003
2. Estructuras de Control Repetitivas FOR (para) Compuesto FOR variable := inicio TO (DOWNTO) final DO BEGIN acción1; .... acciónN END; acción1 acciónN . Inicializa-actualiza variable Obs: variable se va incrementando (decrementando) en 1 (-1) desde inicio hasta final. Luis Pizarro Q. ©2003
Ejemplo: Uso de FOR Calcular la sumatoria 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
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
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
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 menos la sumatoria para que se cumpla donde L es ingresado por el usuario. Luis Pizarro Q. ©2003
Tema 6: Estructuras de Control Programación de Computadores (IWI-131) Tema 6: Estructuras de Control Luis Pizarro Q. Luis.Pizarro@inf.utfsm.cl www.labmc.inf.utfsm.cl/~lpizarro/IWI-131