ESTRUCTURAS 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. La primera de ellas, la estructura FOR - DO, tiene la siguiente sintaxis: 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; …

3

No obstante. y las instrucciones se repetirán mientras la condición se evalúe verdadera. en la estructura WHILE . La variable que se utiliza como contador en la estructura For-Do puede modificarse también en la acción que se repite. hay que tener presente que las variables ordinales no son solamente los Integer. Sin embargo. 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. Una estructura muy similar a la FOR . … END. pero hay que ser extremadamente cuidadoso porque de lo contrario se puede generar un bucle infinito. donde la condición es una expresión cuyo resultado es un dato Boolean.DO pero más versátil es la REPEAT UNTIL. en la que el valor del identificador se decrementa en uno cada vez que se realiza la acción.ESTRUCTURAS REPETITIVAS 2 END. .DO se realiza la comprobación de la condición que ha de finalizar la repetición antes de ejecutarse la acción. … 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. Su sintaxis es: REPEAT instrucción_1 instrucción_2. Su sintaxis es: WHILE (condición) DO BEGIN instrucción_1 instrucción_2. Las acciones se realizan al menos una vez porque la verificación de la condición se hace después que las acciones.

pero no se considerará pues en este curso se pretende que el alumno ejercite la programación estructurada. En PASCAL también existe la sentencia de control no estructurado GOTO. While Numero >= 0 do begin Suma := Suma + Numero. Readln ( Numero ). while ( ( Resp = ‘s’ ) or ( Resp = ‘S’ ) ) do begin Writeln ( ‘ Introduzca un número: ‘ ).ESTRUCTURAS REPETITIVAS 3 Cuando se ha de programar un procedimiento repetitivo. Solicitar al usuario la continuación del bucle: este método consiste simplemente en pedir al usuario si existena más entradas. si se considerará la función EXIT cuyo efecto es interrumpir la ejecución del bloque en el que se encuentra. Sin embargo. Readln ( Resp ) end. • Bucles controlados por condición 1. Suma := Suma + Numero. 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. Writeln ( ‘ ¿ Existen más números (s / n) ? ’ ). Writeln ( ‘¿ Existen más números en la lista (s / n) ? ’ ). 2. Uso de banderas o interruptores: una bandera o interruptor (flag) es una variable lógica que se utiliza para conservar el . Read ( Numero ) end 3. Si se trata del programa principal. la elección de una de las tres estructuras se hará siempre considerando la claridad y facilidad de programación. Readln ( Resp ). Suma := 0. Read ( Numero ). producirá la interrupción de la ejecución del programa. Valor Centinela: un centinela es un valor especial utilizado para señalar el final de una lista de datos.

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.ESTRUCTURAS REPETITIVAS 4 estado (verdadero o falso) de una condición. .

VAR Fahrenheit. READLN (respuesta). USES CRT. WRITE ('Celsius: '). WRITELN (' '). READLN (Celsius).ESTRUCTURAS REPETITIVAS 5 Positivo := false. Celsius:REAL. while not Positivo do begin Write ( ‘ Introduzca un entero mayor que cero ‘ ). 1. T1C.'). BEGIN CLRSCR. REPEAT BEGIN WRITE ('¿DESEA PASARLO A FAHRENHEIT O CELSIUS? F/C: ').Escribir un programa en Pascal que calcula el equivalente en grados Fahrenheit o Celsius de las siguientes temperaturas.T2F:REAL. WRITE (Fahrenheit:5:2.' grados Fahrenheit. respuesta:CHAR. Readln ( N ). if N > 0 then Positivo := true end Ejercicios prácticos de tipo repetitivo. Temperatura 1 = 32º Fahrenheit Temperatura 2 = 10 º Celsius {Regla de 3: Celsius / 5 = (Fahrenheit – 32) 9} PROGRAM EJER1. UNTIL (respuesta='C') OR (respuesta='F') OR (respuesta='c') OR (respuesta='f'). . WRITELN (''). IF UPCASE(respuesta)='F' THEN BEGIN WRITELN ('Introduzca los grados para pasar a Fahrenheit: '). Fahrenheit:= ((9 * Celsius) / 5) + 32. END.

ESTRUCTURAS REPETITIVAS 6 END ELSE IF UPCASE (respuesta)='C' THEN BEGIN WRITELN ('Introduzca los grados para pasar a Celsius: '). WRITE (Celsius:5:2. x:=x+1. END. . END. 3. Celsius:= ((Fahrenheit .Escribir un programa en Pascal que realice un bucle con Repeat y muestre en pantalla del 1 al 10. VAR x:INTEGER. PROGRAM EJER2. PROGRAM EJER3. USES CRT. REPEAT WRITELN (x). BEGIN CLRSCR. USES CRT.32) / 9) * 5.Escribir un programa en Pascal que realice un bucle con WHILE y muestre en pantalla del 1 al 10. END. WHILE X <= 10 DO BEGIN WRITELN (x). x:=0. READKEY. READKEY. WRITE ('Fahrenheit: '). VAR x:INTEGER. BEGIN CLRSCR.' grados Celsius. x:=0. END. READLN (Fahrenheit). 2.').

4.Escribir un programa en Pascal que visualice en pantalla los números pares entre 1 y 25.Escribir un programa en Pascal que realice un bucle con FOR y muestre en pantalla del 1 al 10. PROGRAM EJER5. 5. READKEY. END. USES . END. END. VAR num:INTEGER. USES CRT. PROGRAM EJER4. UNTIL num= 26. BEGIN CLRSCR. READKEY. VAR x:INTEGER. UNTIL x=10. REPEAT WRITELN (num). PROGRAM EJER5B. BEGIN CLRSCR.ESTRUCTURAS REPETITIVAS 7 x:=x+1. num:=2. READKEY. FOR x:=0 TO 10 DO WRITELN(x). num:= num + 2. USES CRT.

PROGRAM EJER6B. num:= 5. WHILE sem <= 25 DO BEGIN IF sem mod 2=0 THEN WRITELN(sem). 6. BEGIN CLRSCR. READKEY.ESTRUCTURAS REPETITIVAS 8 CRT. END. END. END. END.Escribir un programa en Pascal que visualice en pantalla los números múltiplos de 5 comprendidos entre 1 y 100. sem:=sem + 1. USES CRT. BEGIN CLRSCR. WHILE num <= 100 DO BEGIN WRITELN (num). BEGIN CLRSCR. VAR sem:INTEGER. PROGRAM EJER6. USES CRT. VAR num:INTEGER. sem:=1. READKEY. VAR sem:INTEGER. num:= num + 5. FOR sem:= 1 TO 100 DO BEGIN .

WHILE num <= 10 DO BEGIN WRITELN (x).y 10. . 8. x:=1. x:= x + 1. END. PROGRAM EJER8. READLN (num). END.Escribir un programa en Pascal que genere la tabla de multiplicar de un número introducido por el teclado. num:INTEGER. 7. BEGIN CLRSCR. num:= num + 1. x. READKEY. USES CRT. END. BEGIN CLRSCR. WRITELN (''). WRITE ('Introduzca un numero para hacer su tabla de multiplicar: '). REPEAT WRITELN (tabla). VAR num. VAR tabla. num:=1. tabla:= num * x. USES CRT. READKEY. END. x:INTEGER. Escribir un programa en Pascal que sume los números comprendidos entre 1 PROGRAM EJER7.ESTRUCTURAS REPETITIVAS 9 IF sem mod 5=0 THEN WRITELN(sem). x:= x + num.

FOR sem:=1 TO 10 DO BEGIN WRITE(num). UNTIL respuesta='N'. READLN(num).ESTRUCTURAS REPETITIVAS 10 UNTIL x=11. READLN (respuesta). 9.Escribir un programa en Pascal que realice la pregunta ¿Desea continuar S/N? y que no deje de hacerla hasta que el usuario teclee N. READKEY. BEGIN CLRSCR. REPEAT WRITELN ('DESEA CONTINUAR: S/N '). USES CRT.sem:INTEGER. VAR num. USES CRT. VAR respuesta:CHAR. WRITE(' = '). WRITE(' * '). PROGRAM EJER9B. READKEY. BEGIN CLRSCR. PROGRAM EJER9. WRITE(sem). BEGIN . WRITE('Introduzca un numero entero: '). END. VAR respuesta:STRING. PROGRAM EJER8B. USES CRT. {Pascal distingue entre ‘N’ y ‘n’} READKEY. END. END. END. WRITELN(num*sem).

END. BEGIN CLRSCR..cap_fin:REAL. WRITE ('Intruduzca el capital para calcular cuanto tardara '). VAR resp:CHAR. UNTIL respuesta='NO'. REPEAT WRITELN ('DESEA CONTINUAR: SI/NO ').05. READLN (cap_ini). READKEY. con un interes del 5%: '). WRITE ('en duplicarse. CONST interes = 0. VAR tiempo:REAL. READKEY. USES CRT. BEGIN CLRSCR. USES CRT.Escribir un programa en Pascal que calcule cuantos años tarda en duplicarse un capital depositado al 5% de interés anual PROGRAM EJER10. READLN(resp). WHILE UPCASE(resp)='S' DO BEGIN WRITE('Desea continuar? '). 10.ESTRUCTURAS REPETITIVAS 11 CLRSCR. resp:='S'. IF cap_ini < 0 THEN BEGIN WRITE ('No se puede incluir un capital negativo'). cap_ini. END. EXIT. PROGRAM EJER9C. READLN (respuesta). END. . WRITELN ('').

Escribir un programa que calcule la suma de los números hasta un número dado (introducido por el usuario). END. PROGRAM EJER10B.05.tiempo:3:0. USES CRT. WRITE('Capital duplicado en '). VAR . USES CRT. tiempo:= tiempo + 1. WHILE cap_fin < (cap_ini*2) DO BEGIN cap_fin:=cap_fin+(cap_fin*interes).cap_fin:REAL. WRITELN(cap_ini:5:2). cap_fin:= cap_ini. UNTIL cap_fin > (cap_ini * 2). cap_fin:=cap_ini. WRITE('Capital inicial -----: '). READLN(cap_ini). 11. VAR cap_ini. BEGIN CLRSCR. CONST INTERES=0. READKEY. num_year:=0. WRITE('Capital inicial -----: '). WRITELN ('Capital final: '. PROGRAM EJER11. END. num_year:INTEGER. WRITE(num_year).. END.ESTRUCTURAS REPETITIVAS 12 END. tiempo:=0. READKEY. WRITE(' años'). WRITE('Capital final -------: ').' años en duplicarse'). WRITELN ('Tardara'. WRITELN(cap_fin:5:2). REPEAT cap_fin:=cap_fin + (cap_fin * interes). num_year:=num_year + 1.cap_fin:5:2.' pts').

y. BEGIN CLRSCR. READLN (num).Escribir un programa que pida un número y si el que se introduce por el teclado es menor de 100 que vuelva a solicitarlo. WHILE num >= 0 DO BEGIN WRITELN (x). WRITE('---->'). WRITE('Introduzca un numero -> '). WRITE ('Este programa calcula la suma de los numeros hasta uno ').1.num:INTEGER. suma:LONGINT. WRITE ('introducido por el usuario: '). x:= x + num. WRITE('Suma '). READKEY. VAR i. WRITELN (''). VAR num:INTEGER.. USES CRT. WRITE(suma). num:INTEGER. END. USES CRT. . READKEY. WRITE(num). num:=num . FOR i:=0 TO num DO suma:=suma+ i. BEGIN {Este programa no finaliza hasta que se escribe un numero mayor a 100} CLRSCR. WRITE('0-'). BEGIN CLRSCR. END. PROGRAM EJER11B. x:=0. PROGRAM EJER12.ESTRUCTURAS REPETITIVAS 13 x. READLN(num). END. 12.

x:=1. END. WHILE num<=100 DO BEGIN WRITE('Introduzca un numero -> '). num:=num . BEGIN CLRSCR. PROGRAM EJER12B. END.1.Escribir un programa en Pascal que calcule el factorial de un número. WRITELN (x). num. PROGRAM EJER13. x. . WHILE num > 1 DO BEGIN x:=x * num. WRITELN (''). READKEY. BEGIN CLRSCR. 13. READLN(num). READLN (num). END.ESTRUCTURAS REPETITIVAS 14 REPEAT WRITELN ('Introduzca un numero: '). {Este programa hace el factorial de un numero} USES CRT. y:REAL. READKEY. WRITE ('Introduzca un numero para hacer su factorial: '). END. READKEY. END. READLN(num). VAR factorial. UNTIL num > 100. WRITE('Introduzca un numero -> '). USES CRT. VAR num:INTEGER. READLN (num).

num. BEGIN CLRSCR. BEGIN CLRSCR. i:=i+1. WRITE('La media es: '). END. suma:=suma+num. i:=0. READKEY. num:=num-1. WRITE('Introduzca un numero -> '). PROGRAM EJER14. Un número es primo si sólo es divisible por sí mismo y por la unidad. WRITE(temp). fac:=1. READLN(num). REPEAT WRITE('Introduzca un numero: '). USES CRT.. UNTIL i=5. VAR i:INTEGER. WHILE num>=1 DO BEGIN fac:=fac*num. temp:=num. WRITE(' es '). temp:=num.suma:REAL.Escribir un programa en Pascal que detecte si un número es primo o no. READLN(num). END..ESTRUCTURAS REPETITIVAS 15 PROGRAM EJER13B. READKEY. VAR temp. WRITE(fac). num. 15. WRITELN(suma/i:5:2). END.Escribir un programa en Pascal que calcule la media de 5 números introducidos por el teclado. . WRITE('El factorial de ').fac:LONGINT. 14. USES CRT.

{Variable que usamos dentro del bucle} BEGIN {p. Repeat Write('Introduzca un numero entero para ver si es primo: ').ESTRUCTURAS REPETITIVAS 16 Ejemplo: 2. Si algun numero divide al numero.4. exceptuando el 1 y ellos mismos. es el unico numero par que lo es. 3 El algoritmo para resolver este problema pasa por dividir sucesivamente el número estudiado por 2. excepto el 2. Var num: Word. {Guardamos el valor de la raiz del numero} noesprimo: Boolean. USES Crt.') Else BEGIN raiznum := round(sqrt(num)). Read(num). UNTIL num > 1. {Nos sirve para marcar los numeros que son pares} i: Byte. {Pedimos un numero y no lo aceptamos hasta que sea > 1} par := num mod 2 = 0.OUTPUT).3.4. hasta el propio número.} raiznum: Integer. {Los numeros primos son enteros mayores que 1 sin divisores enteros positivos.19 son números primos 9 no es número primo. 9. Todos los primos son impares.1) DO BEGIN If (num mod i) = 0 THEN noesprimo := true END. Writeln. redondeada} FOR i := raiznum To (num . es divisible por 1..p} CLRSCR. etc.11.3. {Almacenamos la raiz del numero. {Comprobamos la divisibilidad de los numeros superiores a la raiz cuadrada del numero introducido.} . {Variable para decir que un numero no es primo} par: Boolean. {par va a ser True cuando el numero sea par} If num = 2 THEN Write('El 2 es primo.7.17. excepto el 2.') Else if par THEN Write('Todo numero par no es primo. Program primo15 (INPUT. noesprimo toma el valor true. Solo es necesario comprobar la divisibilidad por numeros superiores a la raiz cuadrada del numero.

WRITE(' es un numero primo'). END. WRITE(' no es un numero primo'). READKEY. END ELSE BEGIN WRITE(num).p} PROGRAM EJER15B. IF flag=1 THEN BEGIN WRITE(num). FOR i:=2 TO (num-1) DO BEGIN IF (num mod i)=0 THEN flag:=1. READLN(num). END. WRITE('Introduzca un numero -> '). USES CRT. . READKEY.num. {p. VAR i. BEGIN CLRSCR.ESTRUCTURAS REPETITIVAS 17 If noesprimo THEN Write(num. flag:=0. END. END.flag:INTEGER.' es un numero primo').' no es un numero primo') Else Write(num. {Mostramos por pantalla si el numero es primo o no} END.

el valor reflejo de 753 es 357. 10.Utilizando ciclos anidados generar las siguientes parejas de enteros 0 1 1 1 2 2 3 2 4 3 5 3 6 4 7 4 8 5 9 5 5.Mostrar en pantalla todos los pares comprendidos entre 20 y 200.Leer un número entero de tres dígitos y mostrar todos los enteros comprendidos entre 1 y cada uno de los dígitos. • Los números a imprimir no deben ser más de veinte. Si gana el 45% de interés anual.000 Bs. 6.. • Menor numero negativo..Mostrar los números enteros que se encuentran dentro del intervalo formado por dos números positivos.Generar la tabla de multiplicar del 1 hasta el 10.Suponga una computadora que no “sabe” multiplicar.Se tiene la siguiente información de los empleados de una compañía: # de empleados.Leer dos números y mostrar todos los números terminados en 4 comprendidos entre ellos..Una persona guarda en el banco 120.. su cuadrado es 625. horas trabajadas. .. deducciones. 1. Se desea calcular e imprimir al final.. 11. encontrar si su cuadrado termina en las mismas cifras que el número X. Otro ejemplo: X = 25. 3. 7.Dado cualquier número entero positivo X.PROBLEMAS PROPUESTOS 18 EJERCICIOS PROPUESTOS.. Se entiende por valor reflejo la escritura invertida del número.Determinar el valor reflejo de un número entero positivo. • Mayor numero positivo.Leer 100 números enteros y posteriormente calcule y muestre lo siguiente: • Cantidad de números positivos... • Promedio de los números pares.. el de 7 es 7. Calcule cuánto tendrá a los 5 años. nombre del empleado.. 4..Mostrar en pantalla todos los enteros comprendidos entre 1 y 100. teniendo en cuenta lo siguiente: • Los números positivos deben ser datos de entrada (no importa el orden). salario básico por hora. • Debe existir por lo menos un número entre los dos valores dados. DESGLOSE DE DIGITOS. 12. Por ejemplo: X = 5. Dado dos números naturales A y B hallar el producto A x B utilizando sumas Sucesivas. 13. el total de salarios pagados a todos los empleados y el promedio salarial por empleado. 14. su cuadrado es 25. termina en 5 como X. por ejemplo. 8.Determinar el promedio de n valores.. 9.. 2. termina en 25 como X.

..Si 32768 es el tope superior para los números entero cortos. 38..Leer un número entero de dos dígitos menor que 20 y determinar si es primo. 39.Mostrar en pantalla todos los números terminados en 6 comprendidos entre 25 y 205. .Leer dos números entero y mostrar todos los múltiplos de 5 comprendidos entre el menor y el mayor.. 18. 20. 24.Leer 2 números enteros y determinar cuál de los dos tiene mayor cantidad de dígitos...Mostrar en pantalla el promedio entero de los n primeros múltiplos de 3 para un número n leído.. 34.Mostrar en pantalla los primeros 20 múltiplos de 3... 27... 17.. 35... 31. 30. 28.Leer un número entero y mostrar todos sus componentes numéricos o sea aquellos para quienes el sea un múltiplo..Leer un número entero y si es múltiplo de 4 determinar si su último dígito es primo.Leer un número entero y determinar a cuánto es igual el primero de sus dígitos.Leer un número entero de 3 dígitos y determinar si tiene el dígito 1.Leer un número entero y determinar a cuánto es igual la suma de todos los enteros comprendidos entre 1 y el número leído... 26. 16. determinar cuál es el número primo más cercano por debajo de él.Leer un número de dos dígitos y determinar si pertenece a la serie de Fibonacci.Leer números hasta que digiten 0 y determinar a cuánto es igual el promedio de los números terminados en 5.. 33. 19.Promediar los x primeros múltiplos de 2 y determinar si ese promedio es mayor que los y primeros múltiplos de 5 para valores de x y y leídos..PROBLEMAS PROPUESTOS 19 15..Leer un número entero de tres dígitos y determinar cuántos dígitos primos tiene. 21. 23.Leer un número entero de dos dígitos y mostrar en pantalla todos los enteros comprendidos entre un dígito y otro....Leer dos números enteros y determinar si la diferencia entre los dos es un número primo.Leer un número entero y determinar a cuánto es igual el promedio entero de sus dígitos. 25...Leer 2 números enteros y determinar cual de los dos tiene mayor cantidad de dígitos primos.Escribir en pantalla el resultado de sumar los primeros 20 múltiplos de 3. 32.Leer un número entero de dos dígitos y determinar si sus dos dígitos son primos. 37. 22.Leer números hasta que digiten 0 y determinar a cuanto es igual el promedio entero de los número primos leídos. 29. 36.Leer un número entero y determinar a cuánto es igual la suma de sus dígitos pares.Leer un número entero y determinar cuál es el mayor de sus dígitos. 40..Leer un entero y mostrar todos los múltiplos de 5 comprendidos entre 1 y el número leído.

Sign up to vote on this title
UsefulNot useful