Práctica Nº 5: Estructuras de control repetitivas. Estructuras de salto.
Práctica Nº 5: Estructuras de control repetitivas. Estructuras de salto.
Práctica Nº 5: Estructuras de control repetitivas. Estructuras de salto.
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
[ ]<br />
Departament d’Informàtica<br />
Departamento <strong>de</strong> Informática<br />
Informática<br />
PRÀCTICA 5<br />
Curs 2002-2003<br />
FACULTAT DE MATEMATIQUES<br />
UNIVERSITAT DE VALENCIA<br />
<strong>Práctica</strong> <strong>Nº</strong> 5: <strong>Estructuras</strong> <strong>de</strong> <strong>control</strong> <strong>repetitivas</strong>. <strong>Estructuras</strong> <strong>de</strong> <strong>salto</strong>.<br />
Objetivos <strong>de</strong> la práctica:<br />
- Apren<strong>de</strong>r el uso <strong>de</strong> los distintos tipos <strong>de</strong> bucles: while, do ... while y for y conocer las diferencias y<br />
ventajas entre ellos.<br />
- Uso <strong>de</strong> bucles anidados y <strong>de</strong> técnicas <strong>de</strong> <strong>control</strong> <strong>de</strong> los bucles: <strong>control</strong>ados por indicadores (ban<strong>de</strong>ras), y<br />
los <strong>control</strong>ados por centinela.<br />
Sentencias <strong>de</strong> Control <strong>repetitivas</strong> (o bucles)<br />
Al igual que las estructuras selectivas, el bucle rompe la secuencialidad en la ejecución <strong>de</strong> las<br />
instrucciones, pero a diferencia <strong>de</strong> aquéllas, rompe a<strong>de</strong>más el avance hacia a<strong>de</strong>lante, volviendo a ejecutar<br />
un conjunto <strong>de</strong> sentencias una y otra vez.<br />
Con este tipo <strong>de</strong> estructuras po<strong>de</strong>mos ejecutar una tarea repetidas veces, e incluso hacer que cada nueva<br />
vuelta no sea exactamente igual a la anterior, cambiando algunos valores.<br />
Cuando finaliza el bucle, continúa la ejecución <strong>de</strong>l resto <strong>de</strong>l programa.<br />
• SENTENCIA while<br />
Esta estructura repite el cuerpo <strong>de</strong>l bucle mientras sea verda<strong>de</strong>ra una expresión condicional, por tanto,<br />
ejecuta un conjunto <strong>de</strong> sentencias cero o más veces <strong>de</strong>pendiendo <strong>de</strong>l valor <strong>de</strong> la expresión.<br />
� Sintaxis: while ( expresión condicional )<br />
{<br />
}<br />
Bloque <strong>de</strong> sentencias;<br />
1. Se evalúa la expresión. Si el resultado es falso, acaba el bucle. Si es verda<strong>de</strong>ro continua en el<br />
punto 2.<br />
2. Se ejecutan el bloque <strong>de</strong> sentencias<br />
3. Vuelve al punto 1.<br />
• SENTENCIA do .. while<br />
Se repite el cuerpo <strong>de</strong>l bucle mientras sea verda<strong>de</strong>ra una expresión condicional, por tanto, el bucle do..<br />
while ejecuta un conjunto <strong>de</strong> sentencias una o más veces, <strong>de</strong>pendiendo <strong>de</strong>l valor <strong>de</strong> una expresión<br />
condicional.<br />
� Sintaxis: do<br />
{<br />
}<br />
Bloque <strong>de</strong> sentencias;<br />
while ( expresión condicional );<br />
1. Se ejecuta el bloque <strong>de</strong> sentencias.<br />
2. Se evalúa la expresión condicional. Si el resultado es falso, se sale <strong>de</strong>l bucle. Si es verda<strong>de</strong>ro, se<br />
vuelve al punto 1.<br />
<strong>Práctica</strong> <strong>Nº</strong> 5: <strong>Estructuras</strong> <strong>de</strong> <strong>control</strong> <strong>repetitivas</strong>. <strong>Estructuras</strong> <strong>de</strong> <strong>salto</strong>. 1/4
[ ]<br />
Departament d’Informàtica<br />
Departamento <strong>de</strong> Informática<br />
• SENTENCIA for<br />
Informática<br />
PRÀCTICA 5<br />
Curs 2002-2003<br />
FACULTAT DE MATEMATIQUES<br />
UNIVERSITAT DE VALENCIA<br />
Se utiliza cuando se necesita ejecutar repetidamente una sentencia o bloque <strong>de</strong> sentencias, un número <strong>de</strong><br />
veces conocido.<br />
Permite ejecutar un bloque <strong>de</strong> sentencias un número <strong>de</strong> veces conocido, utilizando un contador que toma<br />
valores <strong>de</strong>s<strong>de</strong> un valor inicial y que incrementa (o <strong>de</strong>crementa) su valor mientras (aquí comienzan las<br />
diferencias) sea verda<strong>de</strong>ra una condición.<br />
� Sintaxis: for ( iniciación_contador; condición; progresión_contador )<br />
{<br />
Bloque <strong>de</strong> sentencias <strong>de</strong>l bucle;<br />
}<br />
1. Se inicia el contador.<br />
2. Se evalúa la expresión condicional. Si es falsa acaba el bucle. Si es verda<strong>de</strong>ra, continúa con el<br />
paso 3.<br />
3. Se ejecutan el bloque <strong>de</strong> sentencias.<br />
4. Se actualiza el contador.<br />
5. Vuelve al paso 2.<br />
El bucle for es mucho más versátil<br />
El bucle for es muy flexible en cuanto al contenido <strong>de</strong> cada uno <strong>de</strong> los campos que encierra los<br />
paréntesis. Así, pue<strong>de</strong> tener varias expresiones <strong>de</strong> inicialización y varias expresiones <strong>de</strong> progresión. En<br />
este caso, estas expresiones se separan por comas.<br />
� Sintaxis:<br />
for ([v1=e1, v2=e2, ...]; [condición]; [progresión <strong>de</strong> las variables]<br />
{<br />
}<br />
Bloque <strong>de</strong> sentencias;<br />
don<strong>de</strong>: vi = ei: Representan los valores iniciales que adquieren las variables <strong>de</strong> <strong>control</strong>.<br />
condición: Si es cierta, se ejecuta el bloque <strong>de</strong> sentencias.<br />
progresión-condición: Como evolucionan las variables <strong>de</strong> <strong>control</strong>.<br />
Por otra parte, el bucle for admite que alguno <strong>de</strong> los campos esté vacío, es <strong>de</strong>cir, que no exista ninguna<br />
expresión <strong>de</strong> inicialización y/o ninguna expresión <strong>de</strong> condición y/o ninguna expresión <strong>de</strong> progresión.<br />
Incluso, es posible un bucle for con todos sus campos vacíos:<br />
Siempre que falta la expresión condicional, estamos ante el caso <strong>de</strong> un bucle infinito que se ejecuta<br />
in<strong>de</strong>finidamente, a no ser que <strong>de</strong>ntro <strong>de</strong>l bloque <strong>de</strong> sentencias exista una sentencia <strong>de</strong> <strong>salto</strong> (break).<br />
¿Cuándo utilizar un bucle u otro?<br />
• La sentencia while suele utilizarse cuando no se conoce el número <strong>de</strong> iteraciones <strong>de</strong>l bucle,<br />
pudiendo ser éste mayor o igual que 0.<br />
• La sentencia do…while suele utilizarse cuando no se conoce el número <strong>de</strong> iteraciones <strong>de</strong>l bucle,<br />
pudiendo ser éste mayor o igual que 1.<br />
• La sentencia for suele utilizarse cuando se conoce exactamente el número <strong>de</strong> iteraciones <strong>de</strong>l bucle.<br />
<strong>Práctica</strong> <strong>Nº</strong> 5: <strong>Estructuras</strong> <strong>de</strong> <strong>control</strong> <strong>repetitivas</strong>. <strong>Estructuras</strong> <strong>de</strong> <strong>salto</strong>. 2/4
[ ]<br />
Departament d’Informàtica<br />
Departamento <strong>de</strong> Informática<br />
Informática<br />
PRÀCTICA 5<br />
Curs 2002-2003<br />
FACULTAT DE MATEMATIQUES<br />
UNIVERSITAT DE VALENCIA<br />
Técnicas <strong>de</strong> <strong>control</strong> <strong>de</strong> los bucles:<br />
• Bucles <strong>control</strong>ados por indicadores (ban<strong>de</strong>ras): Se utiliza una variable “ban<strong>de</strong>ra” <strong>de</strong> tipo bool, <strong>de</strong><br />
cuyo valor <strong>de</strong>pen<strong>de</strong> la terminación <strong>de</strong>l bucle.<br />
bool continuar;<br />
continuar = true;<br />
while (continuar)<br />
{ …<br />
}<br />
if (condición para acabar) continuar= false;<br />
• Bucles <strong>control</strong>ados por centinela: En un proceso <strong>de</strong> introducción <strong>de</strong> datos, el centinela es el valor<br />
cuya lectura como dato, indica la finalización <strong>de</strong>l proceso.<br />
suma=0;<br />
do<br />
{<br />
cout > num;<br />
if (num!=0) suma= suma + num;<br />
} while (num!=0);<br />
cout
[ ]<br />
Departament d’Informàtica<br />
Departamento <strong>de</strong> Informática<br />
Informática<br />
PRÀCTICA 5<br />
Curs 2002-2003<br />
Sentencias <strong>de</strong> <strong>salto</strong><br />
En este curso estudiaremos sólo las siguientes: break, continue y return.<br />
FACULTAT DE MATEMATIQUES<br />
UNIVERSITAT DE VALENCIA<br />
Las sentencias <strong>de</strong> <strong>salto</strong> no son sentencias <strong>de</strong> <strong>control</strong> básicas como las tres que hemos estudiado hasta<br />
ahora (secuenciales, selectivas y <strong>repetitivas</strong>). Son sentencias que potencian la programación en C, pero<br />
que en realidad no son imprescindibles para resolver cualquier problema (a excepción <strong>de</strong>l return<br />
<strong>de</strong>ntro <strong>de</strong> las funciones y <strong>de</strong>l break <strong>de</strong>ntro <strong>de</strong>l switch). Es más bién lo contrario, se recomienda<br />
restringir su uso al máximo ya que provoca códigos <strong>de</strong> programa poco estructurados.<br />
Estas sentencias <strong>de</strong> <strong>salto</strong> interrumpen el flujo normal <strong>de</strong>l programa, <strong>de</strong>sviándolo hacia un punto diferente.<br />
• SENTENCIA continue<br />
Sólo se pue<strong>de</strong> utilizar <strong>de</strong>ntro <strong>de</strong> bucles (for, while y do...while).<br />
Interrumpe la ejecución normal <strong>de</strong>l bucle, forzando una nueva vuelta <strong>de</strong>l bucle, saltándose el conjunto<br />
<strong>de</strong> sentencias que existe entre él y la llave que cierra el cuerpo <strong>de</strong>l bucle.<br />
• SENTENCIA break<br />
Provoca una salida brusca <strong>de</strong> una sentencia switch o <strong>de</strong> un bucle., tras la cual continua la ejecución<br />
<strong>de</strong>l resto <strong>de</strong>l programa.<br />
Cuando forma parte <strong>de</strong>l conjunto <strong>de</strong> sentencias <strong>de</strong> un bucle anidado, finaliza sólo la ejecución <strong>de</strong>l bucle<br />
que la incluye.<br />
• SENTENCIA return<br />
Sólo se pue<strong>de</strong>n utilizar <strong>de</strong>ntro <strong>de</strong> funciones y provocan la salida inmediata <strong>de</strong> ésta. Es <strong>de</strong> especial<br />
importancia porque se utilizan a<strong>de</strong>más para <strong>de</strong>volver el valor <strong>de</strong> la función.<br />
Esta sentencia la estudiaremos en mayor profundidad en la sesión correspondiente a funciones.<br />
<strong>Práctica</strong> <strong>Nº</strong> 5: <strong>Estructuras</strong> <strong>de</strong> <strong>control</strong> <strong>repetitivas</strong>. <strong>Estructuras</strong> <strong>de</strong> <strong>salto</strong>. 4/4