PRE-LABORATORIO 2 ESTRUCTURAS DE SELECCIÓN Y REPETITIVAS ESTRUCTURA DE SELECCIÓN: Las estructuras condicionales comparan una variable contra otro(s) valor(es), para que en base al resultado de esta comparación, se siga un curso de acción dentro del programa. Cabe mencionar que la comparación se puede hacer contra otra variable o contra una constante, según se necesite. Los Operadores Relacionales (ver tabla 2.1) permiten realizar la comparación entre dos expresiones aritméticas con la finalidad de tomar una decisión en función del resultado de dicha comparación; dicho resultado tiene un valor booleano: verdadero ó falso. Tabla 2.1. Operadores relacionales o de comparación. Operador > < = >= =N2) And (N1>=N3) THEN NMayor:=N1; IF (N2>=N1) And (N2>=N3) THEN NMayor:=N2; IF (N3>=N1) And (N3>=N2) THEN NMayor:=N3; WRITELN ('El numero mayor es: ',NMayor); readkey END. DM / AA
2
2. 2.- Estructura Selectiva Doble. El programa ejecuta las instrucciones verdaderas en el caso de que la condición evaluada sea cierta, en caso contrario el programa ejecuta las instrucciones falsas que se encuentran después de la línea ELSE. IF (condición) THEN BEGIN instrucción_verdadera_1; instrucción_verdadera_2; ... instrucción_verdadera_n END ELSE BEGIN instrucción_falsa_1; instrucción_falsa_2; ... instrucción_falsa_n END; Observe que la instrucción que está antes de la instrucción ELSE no lleva punto y coma “;”. Además se recuerda que si se va a ejecutar una sola instrucción, se puede omitir las instrucciones BEGIN y END tanto para las instrucciones verdaderas como para las falsas. Ejemplos de estructura selectiva doble: Escribir un programa en Pascal que muestre un mensaje afirmativo si el número introducido es múltiplo de 5. PROGRAM multiplo5; USES crt; VAR num:Integer; BEGIN CLRSCR; WRITE('Introduzca un numero : '); READLN(num); IF num mod 5 = 0 THEN WRITE('El numero introducido es múltiplo de 5') ELSE WRITE('El numero introducido no es múltiplo de 5'); readkey END.
DM / AA
3
2. 3.- Estructura Selectiva Múltiple. En este tipo de estructura se realizan múltiples comparaciones, al final de la estructura se puede colocar un único caso contrario, el cual se ejecutaría en el caso de que las demás condiciones no se hayan cumplido. IF (condición) THEN BEGIN instrucción_1; ... instrucción_verdadera_n; END ELSE IF (condición) THEN BEGIN Instrucción_1; ... instrucción_n END ELSE BEGIN instrucción_falsa_1; ... instrucción_falsa_n END END; Ejemplo de estructura condicional múltiple: Escribir un programa en Pascal que detecte si un número introducido desde le teclado es positivo o negativo. PROGRAM EJER4; USES CRT; VAR num:INTEGER; BEGIN CLRSCR; WRITE ('Introduzca un numero entero: '); READLN (num); IF (num > 0) THEN WRITE ('El numero es positivo') ELSE IF (num < 0) THEN WRITE ('El numero es negativo') ELSE WRITE ('El numero no es positivo ni negativo, es 0'); readkey END. DM / AA
4
2. 4.- Estructuras Anidadas. Una estructura de control puede ejecutarse dentro de otra, en este caso se dice que son estructuras anidadas, por ejemplo: Determine el mayor de tres números. PROGRAM NumMayor; USES Crt; VAR n1,n2,n3,mayor : integer ; BEGIN WRITELN('Escribe tres numeros enteros : '); READLN(n1,n2,n3); IF n1>n2 THEN IF n1>n3 THEN mayor:=n1 ELSE mayor:=n3 ELSE IF n2>n3 then mayor:=n2 ELSE mayor:=n3; WRITELN('El mayor es ',mayor); readkey end.
EJERCICIO PROPUESTO TIPO CONDICIONAL. 1.- Escribir un programa en Pascal que lea dos números desde el teclado y si el primero es mayor que el segundo intercambie sus valores.
DM / AA
5
ESTRUCTURA DE REPETITIVAS: Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es necesario utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad específica de veces. Esta cantidad puede ser fija (previamente determinada por el programador) o puede ser variable (estar en función de algún dato dentro del programa). En PASCAL existen tres estructuras de repetición que son las estructuras: FOR - DO, REPEAT - UNTIL, Y WHILE - DO. 2.5.- FOR – DO: Su sintaxis es: FOR contador := principio TO final DO STEP incremento BEGIN instrucción_1; instrucción_2; … END; donde “contador” es una variable que puede almacenar un dato ordinal, “principio” es el valor que se le asigna a esa variable antes de realizar la acción, “final” es el valor máximo que puede alcanzar la variable “contador” antes de finalizar la acción. La variable “incremento” es el valor que se va a suma a la variable “contador” cada vez que se entra al ciclo. Si se va a ejecutar una sola instrucción dentro de la estructura, se puede omitir las instrucciones BEGIN y END; si el contador es entero y se desea incrementar de uno en uno, entonces se puede omitir la sentencia STEP y la variable de incremento. Existe también la opción equivalente FOR identificador := principio DOWNTO final DO BEGIN instrucción _1; instrucción _2; … END; en la que el valor del identificador se decrementa en uno cada vez que se realiza la acción. La limitación básica de la estructura For-Do es que la acción que implícitamente se realiza cada vez es simplemente el aumento o decremento de una variable ordinal. No obstante, hay que tener presente que las variables ordinales no son solamente los Integer. La variable que se utiliza como contador en la estructura For-Do puede modificarse también en la acción que se repite, pero hay que ser extremadamente cuidadoso porque de lo contrario se puede generar un bucle infinito. DM / AA
6
2.6.- REPEAT - UNTIL. Su sintaxis es: REPEAT instrucción_1 instrucción_2; … UNTIL (condición) En esta estructura se especifica que se repita el conjunto de acciones situado entre el REPEAT y el UNTIL mientras que no sea verdadero el valor de la condición. Las acciones se realizan al menos una vez porque la verificación de la condición se hace después que las acciones.
2.7.- WHILE – DO: En esta estructura se realiza la comprobación de la condición que ha de finalizar la repetición antes de ejecutarse la acción. Su sintaxis es: WHILE (condición) DO BEGIN instrucción_1 instrucción_2; … END; donde la condición es una expresión cuyo resultado es un dato Boolean, y las instrucciones se repetirán mientras la condición se evalúe verdadera.
Cuando se ha de programar un procedimiento repetitivo, la elección de una de las tres estructuras se hará siempre considerando la claridad y facilidad de programación.
En PASCAL también existe la sentencia de control no estructurado GOTO, pero no se considerará pues en este curso se pretende que el alumno ejercite la programación estructurada. Sin embargo, si se considerará la función EXIT cuyo efecto es interrumpir la ejecución del bloque en el que se encuentra. Si se trata del programa principal, producirá la interrupción de la ejecución del programa.
DM / AA
7
Bucles controlados por condición 1. Solicitar al usuario la continuación del bucle: Este método consiste simplemente en pedir al usuario si existena más entradas. Suma := 0; Writeln ( „¿ Existen más números en la lista (s / n) ? ‟ ); Readln ( Resp ); While ( ( Resp = „s‟ ) or ( Resp = „S‟ ) ) do Begin Writeln ( „ Introduzca un número: „ ); Readln ( Numero ); Suma := Suma + Numero; Writeln ( „ ¿ Existen más números (s / n) ? ‟ ); Readln ( Resp ) End;
2. Valor Centinela: Un centinela es un valor especial utilizado para señalar el final de una lista de datos. El valor elegido debe ser totalmente distinto de los posibles valores de la lista para que se pueda utilizar para señalar el final de la lista. Suma := 0; Read ( Numero ); While Numero >= 0 do Begin Suma := Suma + Numero; Read ( Numero ) End;
3. Uso de banderas o interruptores: Una bandera o interruptor (flag) es una variable lógica que se utiliza para conservar el estado (verdadero o falso) de una condición. El valor del interruptor debe inicializarse antes de comenzar el bucle y debe cambiar su estado (Valor) dentro del cuerpo del bucle para preparar la siguiente iteración. Positivo := false; While not Positivo do Begin Write ( „ Introduzca un entero mayor que cero „ ); Readln ( N ); if N > 0 then Positivo := true End;
DM / AA
8
EJERCICIO PROPUESTO TIPO REPETITIVO. 1.- Escribir un programa en Pascal que visualice en pantalla los números múltiplos de 5 comprendidos entre 1 y 100. Usando la Estructura FOR-DO 2.- Escribir un programa en Pascal que calcule el promedio de los números ingresados por teclado hasta que el usuario teclee N al realizar la pregunta ¿Desea continuar ingresando números S/N?. Usando la Estructura REPEAT. 3.- Escribir un programa que calcule la suma de los números hasta un número dado (introducido por el usuario). Usando la Estructura WHILE-DO. 4.- Escribir un programa en Pascal que detecte si un número es primo o no. Un número es primo si sólo es divisible por sí mismo y por la unidad. Ejemplo: 2,3,4,7,11,17,19 son números primos, 9 no es número primo, es divisible por 1, 9, 3. El algoritmo para resolver este problema pasa por dividir sucesivamente el número estudiado por 2,3,4, etc., hasta el propio número.
DM / AA
9
LABORATORIO 2 ESTRUCTURAS DE SELECCIÓN Y REPETITIVAS 1.1.- OBJETIVO. Al finalizar el laboratorio, el alumno estará en la capacidad de resolver problemas apoyados en la toma de desiciones, por medio de la selección de acciones dentro de un conjuntos de alternativas y por medio de la repetición de dichas acciones usando el Lenguaje de Programación Turbo Pascal.
1.2.- EJERCICIOS. 1.- Escribir un programa en Pascal que una vez leída una hora en formato (horas, minutos, segundos) indique cual será el tiempo dentro de un segundo. 2.- Escribir un programa en Pascal que calcule el salario semanal de un trabajador en base a las horas trabajadas y el pago por hora trabajada. · Horas ordinarias (40 primeras horas de trabajo) – 2 Bs./hora · 1.5 veces precio hora ordinaria 3.- Escribir un programa en Pascal que genere la tabla de multiplicar de un número introducido por el teclado. 4.- Leer 100 números enteros y posteriormente calcule y muestre lo siguiente: Cantidad de números positivos. Promedio de los números pares. Mayor numero positivo. Menor numero negativo.
DM / AA
10