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. 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 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. Luis.Pizarro@inf.utfsm.cl www.labmc.inf.utfsm.cl/~lpizarro/IWI-131