1. UNIVERSIDAD NACIONAL EXPERIMENTAL
DE LOS LLANOS OCCIDENTALES
EZEQUIEL ZAMORA
JORGE LEONARDO HIDALGO RODRIGUEZ
C.I.: N° V-19187649
BARINAS, 17 DE JULIO DE 2016
3. 3
INTRODUCCIÓN
Las estructuras repetitivas o bucles es una de las estructuras permitidas
en la programación estructurada. Los bucles tienen que repetirse un número
finito de veces. Si no nos encontramos con un bucle infinito y el algoritmo no
tendrá solución. No será un algoritmo ya que no cumplirá la condición de
finitud.
Las condiciones repetitivas se componen básicamente de dos
elementos:
Un cuerpo del bucle o conjunto de instrucciones que se ejecutan
repetidamente
Una condición de salida para dejar de repetir las instrucciones y
continuar con el resto del algoritmo.
En c++ existen varias estructuras repetitivas. Según lo que se quiera
conseguir o la naturaleza del algoritmo o programa, se utilizarán unas u otras.
Estas estructuras son las siguientes:
El bucle while. Es aquel que utilizaremos para realizar repeticiones de
sentencias cuando no sabemos, a priori, las veces que se han de
repetir. Para más información sobre ese bucle puedes consultar el
siguiente post: El bucle while.
El bucle do-while. Tiene una función similar al bucle while. Los
programadores utilizamos dicho bucle para controlar errores de
entrada, puedes ver más información en el siguiente enlace: El bucle
do-while.
El bucle for. Se utiliza cuando, a priori, sabemos cuántas repeticiones
se han de realizar a una o un conjunto de sentencias. Para más
información pulsa en este enlace: El bucle for.
4. 4
COMPILADOR
Normalmente los compiladores de C++ son aptos para compilar
lenguaje C, pero los compiladores de C no son capaces de procesar el
lenguaje C++, esto se debe a que este último contiene una buena cantidad de
palabras reservadas y características que no están soportadas por C. Gran
parte de la sintaxis es la misma y por supuesto que quien programe en C
tendrá una buena base para programar en C++, pero estos no son lenguajes
totalmente equivalentes entre sí, así como tampoco lo son Visual Basic y
Visual Bsic . NET y mucho menos aun C++ y C#.
Lo primero y lo más importante, es que los archivos de cabecera que
conforman la librería estándar de C, no son los mismos que conforman la
librería estándar de C++, aunque si podemos utilizar las librerías de C en C++
(espero no estar repitiendo demasiado lo mismo). El caso es que en C
incluimos el archivo stdio.h en el cual están contenidas las funciones
necesarias para la entrada y salida de información, en C++ el archivo de
cabecera en el que se encuentran las funcione para ingresar y extraer datos
del sistema, tiene por título “iostream” del inglés “Imput-Output Stream”, que
significa “flujo de entrada y salida”.
A diferencia de C, en C++ no se coloca la extensión de archivo “.h” a
los ficheros de cabecera que se incluyen mediante la directiva “#include”. Por
otra parte, debido a que C++ se diseñó con el propósito de ser “compatible
hacia abajo” con su hermano mayor, este incorpora cada uno de los archivos
que integran la librería estándar de C, pero les cambia ligeramente el nombre
agregando la letra “c” al comienzo de cada uno de ellos y por supuesto
eliminando la extensión de archivo como en todos los demás que conforman
las bibliotecas de C++. Por ejemplo “stdio.h” cambia su título a “cstdio”.
5. 5
Otra diferencia importante, es que se introduce el concepto de los
Espacios de Nombres (namespace), lo cual es un elemento propio de la
programación avanzada y que en C++ se implementa en cada una de las
funciones presentes en las bibliotecas, por lo tanto al invocar algún elemente
que se encuentre definido dentro de ellas, se debe especificar a qué espacio
de nombres pertenece, cosa que no se hacía en C, sencillamente porque al
ser un lenguaje menos moderno, no incorporaba este mecanismo de control
de títulos.
ESTRUCTURA DE CONTROL REPETITIVA
Si bien con las estructuras condicionales podemos tomar un camino u
otro en la consecutividad de las instrucciones, esas sentencias solo se realizan
una vez y en el orden en que se encuentran escritas, sin embargo en muchos
casos es necesario regresar algunas sentencias atrás en el código y repetir
varias veces un determinado número de instrucciones, para poder resolver
eficientemente un problemas concreto sin escribir tantas líneas de código, es
por ello que son necesarias las estructuras de control repetitivas, también
conocidas como sentencias repetitivas, estructuras iterativas, ciclos o bucles y
el más común y más utilizado de ellos es el bucle o ciclo for.
A la forma de programación en la que solo se ejecuta una línea de
código tras otra, se le conoce como programación secuencial, pero es mucho
más eficiente la llamada programación estructurada, en la cual es posible
ejecutar bloques o estructuras de código, las cuales internamente se siguen
ejecutando secuencialmente, pero que pueden repetirse o ser invocadas en el
momento en que se les necesite. El lenguaje C y también el C++, son
lenguajes que soportan el paradigma de Programación Estructurada y por ello
incorporan estructuras repetitivas, las cuales permiten romper un poco la
secuencialidad de las sentencias.
6. 6
La Programación Estructurada nos ofrece lo que conocemos como las
estructuras repetitivas, que como su nombre lo indica, nos permiten repetir un
número determinado de veces un bloque o grupo de sentencias específicas
del programa, a este tipo de instrucciones, como dije anteriormente, se les
suele llamar Bucles o Ciclos y el lenguaje C, así como también el C++, poseen
tres tipos estructuras repetitivas que son el bucle For, el bucle While y el bucle
Do-While.
1. Bucle o Ciclo For
La palabra for en ingles significa “por” o “para”, es por ello que
podríamos leer o traducir lo que expresa un ciclo for como “para las
condiciones dadas entre los paréntesis (()), hacer lo que se encuentra dentro
de las llaves ({})”. Ya que esta estructura se compone de una cabecera que se
inicia con la palabra reservada for, seguida por una serie de parámetros dados
entre paréntesis y luego un cuerpo delimitado por llaves ({}), en el cual se
encuentran las instrucciones que se pretenden repetir.
Entre los paréntesis (()), se encuentran tres partes separadas por el
símbolo punto y coma (;), la primera de ellas corresponde a la inicialización de
una variable contador, que se encargara obviamente de contar los giros del
ciclo, luego en la segunda parte, debe colocarse una expresión condicional
como las utilizadas entre los paréntesis de las sentencias if, la cual se
encargara de determinar cuándo se producirá o no, una nueva iteración del
bucle y finalmente en la tercera parte se coloca otra expresión en la que se
indica, cómo se efectuara el incremento o decremento de la variable contador
cada vez que ocurra una nueva repetición.
Por ejemplo en el siguiente programa, tenemos un bucle o ciclo
repetitivo for, el cual tiene como contador a una variable que tiene por
identificador la letra i, la cual esta inicializada en cero (0), luego se encuentra
una expresión condicional en la que se nos indica, que el ciclo deberá girar o
7. 7
repetir las instrucciones internas, mientras la variable i posea un valor inferior
o igual a 10, y finalmente se nos indica que dicho contador (i), con cada nueva
vuelta del ciclo, ira sumando un uno (1) a su valor actual, es decir que en la
primera iteración almacenara el valor cero (0), luego cero más uno (0+1), luego
uno más uno (1+1), luego dos más uno (2+1) y así sucesivamente hasta que
alcance el límite de diez (10) establecido por la condición de parada (i <= 0).
En el ejemplo anterior de la sintaxis de for realizado en lenguaje C, el
programa tiene como propósito mostrar en pantalla un mensaje, cada vez que
el bucle hace una nueva iteración, comenzando por el número cero (0) en la
primera vuelta del ciclo e indicando en el mensaje, el número correspondiente
a esa repetición. Podemos notar que la variable contadora, la cual almacena
un número entero que se irá incrementando con cada vuelta del bucle, está
declarada fuera de la estructura for, ya que el lenguaje C impide que se
realicen declaraciones fuera de la zona correspondiente para tal fin (las
primeras líneas de la función main antes de cualquier otro tipo de
instrucciones), en cambio en C++ podría haberse realizado la declaración junto
8. 8
a la inicialización dentro de los paréntesis del for, como se muestra en el
siguiente programa ejemplo de for.
Otro detalle que puede modificarse tanto en C como en C++ es la forma de
realizar el incremento o decremento del contador tanto en los ciclos for como en otras
sentencias, por ejemplo en los programas anteriores se utilizó la recursividad para
indicar que la variable i toma su mismo valor más el número uno (1), mediante la
expresión i=i+1, pero esta pudo haber sido reemplazada por la expresión i++, ya que
estos lenguajes poseen el llamado operador de incremento que está compuesto de
dos signos de más consecutivos (++) y también el operador de decremento formado
por dos signos de menos consecutivos (--). Utilizando este operador el programa
quedaría así:
9. 9
Es importante aclarar que el operador de incremento (++) así como el de
decremento (--), solo es válido emplearlos cuando el aumento o disminución que se
requiere realizar al contador, es de uno en uno, es decir en una sola unidad, en cambio
sí se requiere que el contador se incremente de dos en dos o de tres en tres o incluso
en cualquier otra cantidad, entonces será necesario hacerlo con una operación
expresa, como por ejemplo i=i+2, i=i+3 o i=i+5. Para observar esto aún mejor,
tenemos el próximo programa (ciclo for ejemplos), el cual imprime los números
impares entre cero y mil.
También existe una norma que establece, que si el contenido que se
pretende repetir con una estructura de control repetitiva, consta de más de una línea
de código, obligatoriamente debe estar delimitado por las llaves ({}) que agrupan el
cuerpo del bucle, pero que si este solo contiene una sentencia de código, entonces
las llaves ({}) pueden ser obviadas en el cuerpo del ciclo for (esto también es válido
para otras estructuras repetitivas). Si aplicamos esta norma al ejercicio anterior,
quedaría el ejemplo de for de la
siguiente forma:
10. 10
El bucle For es el que más comúnmente se emplea ya que es el más
completo, posee una variable contador y una expresión de incremento o
decremento que las otras estructuras repetitivas del lenguaje C y C++ (While
y Do-While) no incorporan. Es particularmente útil cuando se tiene precisión
de cuantas iteraciones se requieren para alcanzar la solución a un problema,
ya que permite contar estas iteraciones, sin embargo con cualquiera de los
tres tipos de ciclos si utilizamos la lógica correcta, podemos alcanzar los
mismos resultados.
2. Bucle While o Ciclo Mientras
La palabra inglesa While significa “mientras” en español, por lo tanto el
bucle while o estructura repetitiva while, lógicamente indica la ejecución de las
sentencias que se encuentran agrupadas en el cuerpo de esta estructura de
control, el cual está delimitado por llaves ({}), solo si la condición ubicada entre
los paréntesis (()), es evaluada como verdadera. El funcionamiento de esta
estructura es muy similar al For, con la diferencia de no poseer una variable
contador, en el resto de su funcionamiento es igual, presenta una cabecera
que comienza por la palabra reservada while, seguida de entre paréntesis una
expresión condicional que debe cumplirse para que se pueda generar una
nueva iteración del ciclo.
Este tipo de estructuras repetitivas, es especialmente útil cuando no se
puede definir con precisión cuantas iteraciones o repeticiones deben
efectuarse a un bloque de sentencias para poder dar resolución al problema
que se esté afrontando. Por ejemplo si escribimos un programa que lea un
número por teclado y posteriormente divida ese número a la mitad tantas
veces como sea necesario, para que el valor resultante sea menor o igual que
uno (1), en ese caso no podríamos saber que numero tecleara el usuario y por
lo tanto tampoco podremos definir con certeza cuántas divisiones serán
necesarias para alcanzar el resultado que se desea.
11. 11
Podría ser una sola iteración la que realice el bucle, si el usuario ingresa
por ejemplo el numero dos (2), ya que al dividirlo a la mitad obtendríamos el
número uno (1), por el contrario si el usuario ingresa el numero mil (1000),
sería necesario dividir el numero en múltiples ocasiones para qué el resultado
de la división sea menor o igual a uno (1). A continuación tenemos el programa
del cual estoy haciendo referencia, realizado implementando el bucle While.
Es importante dejar claro que este programa tienen como única finalidad
explicar la utilidad del ciclo While, por eso no arroja un resultado que
proporcione ninguna otra utilidad.
Utilizar un bucle For en este caso sería innecesario, ya que se estaría
desperdiciando la variable contador que este incorpora, en cambio While solo
requiere una condición a la cual se evalúa y si el resultado de esta evaluación
es verdadero el bucle continúa girando, en caso de ser negativa el ciclo se
detendrá. Imaginemos que el usuario introduce el número uno (1) o el cero (0)
cuando el programa le solicita el numero entero que será dividido, de ser así
el ciclo no realizaría ninguna iteración, ya que al evaluar la expresión
condicional el resultado sería falso y el bucle terminaría inmediatamente su
ejecución.
12. 12
3. Bucle Do While o Ciclo Hacer Mientras
es posible que utilizando el bucle While, el bloque de sentencias
internas al ciclo, las que están dentro de las llaves ({}), nunca se ejecuten, pues
si la condición de parada de la estructura repetitiva se evalúa como falsa en la
cabecera del bucle (la parte superior), el ciclo culmina sin realizar ninguna
iteración, en cambio con el bucle Do-While siempre se realiza al menos una
iteración, es decir las sentencias internas, las que están agrupadas entre las
llaves ({}), se ejecutan obligatoriamente una vez como mínimo, ya que la
condición no se encuentra en la cabecera sino al pie (la parte inferior) de la
estructura.
La palabra Do en español significa “hacer” por lo tanto este bucle se
puede entender como: “hacer una serie de pasos mientras se cumpla la
condición final”. En la parte superior de la estructura se coloca la palabra “do”
seguida del bloque delimitado por llaves ({}) con las sentencias que se
pretenden repetir y luego en la parte inferir se coloca la palabra “while” seguida
de una expresión condicional ubicada entre paréntesis (()). A diferencia tanto
13. 13
del bucle For como del While, el Do-While termina con un punto y coma (;) al
final de la estructura, luego del ultimo paréntesis ()) de la condición de parada
del ciclo.
Un caso en el cual sería particularmente útil la estructura de control
repetitiva Do-While, es por ejemplo en un programa que deba leer valores
numéricos, hasta que la suma de todos los valores leídos sea igual o superior
a mil (1000). Nótese que en este caso la lectura de los números también se
repite, en el ejemplo anterior no era necesario repetir la lectura del número que
se debía dividir a la mitad varias veces, en cambio en este nuevo ejemplo, si
debemos leer varias veces números enteros que se irán sumando entre si y
por lo tanto la lectura del número entero deberá estar dentro del bucle y
ejecutarse al menos una vez.
A continuación tenemos el programa que acabo de mencionar,
implementando la estructura repetitiva Do-While. En próximos artículos estaré
realizando ejercicios un poco más útiles en cuanto a su objetivo, ya que los
aquí expuestos no tienen más utilidad que la de ejemplificar el funcionamiento
de estos bucles o estructuras repetitivas.
14. 14
EJERCICIOS PROPUESTOS TIPO EJEMPLO PARA DESARROLLARLOS
EN EL LENGUAJE DE C++ (FOR, WHILE Y DO-WHILE)
1. Programa que halla la suma de los 10 primeros números pares
mostrando el resultado en pantalla.
2. El siguiente programa muestra en pantalla las coordenadas de una
tabla cuyas dimensiones son 5x5 (filas x columnas).
3. Programa que muestra en pantalla todos aquellos caracteres
introducidos a través del dispositivo estándar de entrada hasta que
sea pulsado el carácter astensco.
4. El siguiente programa muestra en pantalla todos aquellos caracteres
introducidos por teclado hasta que la tecla de espacio en blanco sea
pulsada.
5. Hacer un programa que lea una serie de números enteros positivos
de la entrada estándar y calcule el valor máximo de los mismos y
cuántas veces aparece dicho valor repetido.
6. Programa que sume y muestre por pantalla todos los números
naturales del 1 hasta el 5, ambos incluidos. Lo mismo pero de 1 a
50; lo mismo pero de 1 a 500.
7. Programa que sume el número 5 y sus múltiplos hasta el 100
inclusive y muestre el resultado por pantalla.
8. Realizar un programa que calcule y muestre la suma de los múltiplos
de 5 comprendidos entre dos valores A y B. El programa no permitirá
introducir valores negativos para A y B y verificará que A es menor
que B. Si A es mayor que B, intercambiará sus valores.
9. Programa que calcule y muestre ex utilizando los cuatro primeros
términos de la serie: ex = 1 + x /1! + x2 /2! + x3 /3!. El valor “exacto”
15. 15
se puede obtener con la función intrínseca EXP(argumento)
Programa que calcule y muestre ex utilizando los cuatro primeros
términos de la serie: ex = 1 + x /1! + x2 /2! + x3 /3!. El valor “exacto”
se puede obtener con la función intrínseca EXP(argumento).
10.Programa que pida la estatura (en metros) y sexo (V/M) de un
número indeterminado de personas (mientras el operador quiera).
Posteriormente escribirá la estatura media de los varones y la
estatura media de las mujeres.
11.n. Un centro numérico es un número que separa una lista de
números enteros (comenzando en 1) en dos grupos de números,
cuyas sumas son iguales. El primer centro numérico es el 6, el cual
separa la lista (1 a 8) en los grupos: (1, 2, 3, 4, 5) y (7, 8) cuyas
sumas son ambas iguales a 15. El segundo centro numérico es el
35, el cual separa la lista (1 a 49) en los grupos: (1 a 34) y (36 a 49)
cuyas sumas son ambas iguales a 595.
12.Programa que calcule el producto n! (n-1)!...3!*2!*1!
13.Programa que pida un número por teclado y diga si es primo o no,
mostrando todos sus divisores.
14.Calcular el factorial de un número natural (que se pedirá por teclado)
usando un bucle. Escribir los resultados parciales.
15.Leer números por teclado hasta introducir uno negativo.
16.Calcular la media de un conjunto de números. El programa recoge
tantos datos como el usuario quiera calculando tantas medias como
él quiera.
17.Calcular el valor de π aplicando la fórmula: π = 4* ( 1 – 1 / 3 +1 / 5 –
1/7) incluyendo hasta el término1 / 99.
18.Mostrar un mensaje por pantalla, por ejemplo, HOLA A TODOS, cien
veces.