25.10.2012 Views

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.

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!