SlideShare una empresa de Scribd logo
1 de 15
Bucle: En programación, es una sentencia que se realiza repetidas veces a un
trozo aislado de código, hasta que la condición asignada a dicho bucle deje de
cumplirse.
Generalmente, un bucle es utilizado para hacer una acción repetida sin
tener que escribir varias veces el mismo código, lo que ahorra tiempo, deja el
código más claro y facilita su modificación en el futuro.
El bucle y los condicionales representan la base de la programación
estructurada. Es una evolución del código ensamblador, donde la única posibilidad
de iterar un código era establecer una sentencia jump (que en los lenguajes de
programación fue sustituida por el "ir a" o GOTO).
Además existen 3 tipos de sentencias iteración o bucles que son el núcleo
de cualquier lenguaje de programación, y están presentes en la mayor parte de
ellos. Nos permiten realizar tareas repetitivas, y se usan en la resolución de la
mayor parte de los problemas.
Sentencias de iteración:
Sinopsis: Son todas aquellas de las sentencias de iteración permiten repetir una
sentencia o conjunto de ellas. Es lo que se denomina ejecutar un bucle. En C++
existen tres formas de iteraciones: los bucles while; do…while y for.
Observe que en todos los casos el bucle puede estar constituido por una
sola sentencia o por varias. En cuyo caso se trata de un bloque de código
delimitado por un par de corchetes { }. Si se trata de una sola sentencia, los
corchetes no son necesarios.
De igual modo el descubrimiento de los bucles se lo debemos a Ada Byron,
así como el de las subrutinas (que no es otra cosa que una función o
procedimiento). Está considerada como la primera programadora, y ella misma se
autodenominaba analista, lo que no deja de ser sorprendente, ya que el primer
ordenador no se construyó hasta un siglo después.
Generalmente estas sentencias tienen correspondencia con estructuras de
control equivalentes en pseudocódigo. El pseudocódigo es un lenguaje creado
para expresar algoritmos formalmente y de manera clara. No es en sí mismo un
lenguaje de programación, sino más bien, un lenguaje formal (con reglas muy
estrictas), pero humano, que intenta evitar ambigüedades.
Ejemplo: Un algoritmo para saber si un número N, es primo, puede ser: Cualquier
un número es primo si sólo es divisible entre sí mismo y la unidad.
Por lo tanto, para saber si un número N es primo o no, bastará con dividirlo
por todos los números entre 2 y N-1, y si ninguna división es exacta, entonces el
número n es primo.
Pero hay algunas mejoras que podemos aplicar tales como:
1) La primera es que no es necesario probar con todos los números
entre 2 y N-1, ya que podemos dar por supuesto que si N no es divisible
entre 2, tampoco lo será para ningún otro número par: 4, 6, 8..., por lo tanto,
después de probar con 2 pasaremos al 3, y después podemos probar sólo
con los impares.
2) La segunda es que tampoco es necesario llegar hasta N-1, en
realidad, sólo necesitamos llegar hasta el valor entero más cercano a la raíz
cuadrada de N. Esto es así porque estamos probando con todos los
números menores que N uno a uno. Supongamos que vamos a probar con
un número M mayor que la raíz cuadrada de N. Para que M pudiera ser un
divisor de N debería existir un número X que multiplicado por M fuese igual
a N.
N = M x X.
El caso extremo, es aquel en el que M fuese exactamente la raíz
cuadrada de N. En ese caso, el valor de X sería exactamente M, ya que ese
es el valor de la raíz cuadrada de N:
N = M² = M x M.
M
Pero en el caso de que M fuese mayor que la raíz cuadrada de N,
entonces el valor de X debería ser menor que la raíz cuadrada de N. Y el
caso es que ya hemos probado con todos los números menores que la raíz
cuadrada de N, y ninguno es un divisor de N.
Por lo tanto, ningún número M mayor que la raíz cuadrada de N puede
ser divisor de N si no existen números menores que la raíz cuadrada de N
que lo sean.
El pseudocódigo para este algoritmo sería algo parecido a esto:
¿Es N=1? -> N es primo, salir
¿Es N=2? -> N es primo, salir
Asignar a M el valor 2
mientras M <= raíz cuadrada(N) hacer:
¿Es N divisible entre M? -> N no es primo, salir
Si M=2 entondes Asignar a M el valor 3
Si M distinto de 2 entonces Asignar a M el valor M+2
Fin del mientras
N es primo ->salir
Para finalizar tenemos que anexar que los tres bucles más utilizados en
programación son el bucle for (Repetir hasta), el While (Mientras), Do While
(Haga mientras).
Tipos de Bucles:
En el Lenguaje de Programación C++ hay tres clases de bucles que son:
1) For (Repita hasta).
2) While (Mientras).
3) Do While (Haga Mientras).
A Continuación le explicaremos detalladamente tanto de forma teórica como
practica cada unos de ellos:
1) Bucle While: Es la sentencia de bucle más sencilla, y sin embargo
es tremendamente potente. En C++ se usa la palabra reservada while (que
significa "mientras"), y sirve para ejecutar el cuerpo del bucle repetidamente
mientras la expresión sea distinta de cero (sea verdadera). El test se hace
antes de ejecutar el cuerpo del bucle, lo que significa que se éste se ejecuta
cero o más veces. De igual modo permite ejecutar repetidamente un bloque
de código mientras se cumpla una determinada condición que es
chequeada antes de cada iteración.
De igual modo se debe utilizar un bucle while cuando es posible que el
cuerpo del bucle no sea ejecutado. Por ejemplo, para leer y procesar el
contenido de un fichero de tamaño desconocido.
Ejemplo Básico:
while( expresión )
{
statement; // cuerpo del bucle
...
}
Sintaxis:
while ( <condicion> ) <sentencia> ;
Descripción:
La sentencia while ejecuta iterativamente el bucle definido por el bloque de
código <sentencia> siempre que el valor devuelto por la expresión <condición>
(que debe estar entre paréntesis) sea cierto.
Nota: recordemos que cierto (true) equivale numéricamente a 1 , mientras que
falso (false) equivale al valor 0.
Puesto que la condición se evalúa antes que cada ejecución del bucle, si al
comienzo <condicion> devuelve falso, <sentencia> no se ejecuta ninguna vez, y el
control pasa a la siguiente sentencia. Si <condición> devuelve cierto se ejecuta el
bucle <sentencia>, y a continuación se vuelve a evaluar <condicion> con lo que se
repite el ciclo.
Ejemplos:
while (*p == ' ') p++;
while ( i<= j) i++;
La sentencia puede estar vacía, realizándose entonces toda la computación
requerida en la cláusula <condición>.
Ejemplo:
while ( getchar() != 'Z' );
Aunque lo normal es que la <sentencia> sea un bloque de código entre
corchetes:
while (i< n)
{
cout<<i<<endl;
++i;
}
Explicación de las salidas del programa adjunto antes de leer el comentario
final (esta disposición es muy utilizada en bucles que deben repetirse un número n
de veces).
#include <iostream>
using namespace std;
int main()
{
// ==========
int x = 5, y = 5;
while ( x-- )
{
cout<< "x = " << x <<endl;
}
while ( --y )
{
cout<< " y = " << y <<endl;
}
cout<< "Terminado!!" <<endl;
}
Salida:
x = 4
x = 3
x = 2
x = 1
x = 0
y = 4
y = 3
y = 2
y = 1
Terminado!!
Comentario:
En ambas iteraciones, la condición indicada en el paréntesis es chequeada antes
de ejecutar la iteración (la salida en pantalla). La diferencia entre ambos es que el
postdecremento (x--) se realiza después de la evaluación del paréntesis
(comprobación de que su contenido es cierto). En consecuencia, el ciclo del primer
bucle es como sigue:
1) comprobación de que x es cierto (distinto de cero). El resultado, que
denominaremos R, es un bool.
2) decremento unitario de x
3) dos posibilidades:
a) R == true → ejecutar el bucle (salida en pantalla) → volver al
punto 1.
b) R == false → abandonar el bucle.
En cambio, en el segundo bucle, el predecremento (--x) se realiza antes de la
evaluación del paréntesis (comprobación de la condición del bucle). En
consecuencia, el ciclo del segundo bucle puede resumirse así:
1) decremento unitario de x
2) comprobación de que x es cierto (distinto de cero). El resultado, que
denominaremos R, es un bool.
3) dos posibilidades:
a) R == true → ejecutar el bucle (salida en pantalla) → volver al
punto 1.
b) R == false → abandonar el bucle.
2) Bucle do...while: La sentencia do while va un paso más allá que el whiley
es aquella que permite ejecutar repetidamente un bloque de código
mientras se cumpla una determinada condición que es chequeado después
de cada iteración.
El cuerpo del bucle se ejecuta repetidamente mientras la expresión es
distinta de cero (verdadera). El test se hace después de ejecutar el cuerpo del
bucle, por lo que éste se ejecuta al menos una vez.
En otros lenguajes, como PASCAL, se usa para el mismo tipo de bucle la
estructura "repetir...hasta", es decir la sentencia se repite hasta que se cumpla una
determinada condición. La diferencia está en que la lógica es la inversa: la
sentencia se repite mientras la condición sea falsa. El resultado es el mismo, en
cualquier caso.
A diferencia del bucle while, la evaluación de la condición se realiza
después de ejecutar la sentencia, de modo que ésta se ejecutará al menos una
vez.
Por ejemplo:
Do
{
x = x + 1;
}while (x < 100);
En este bucle se incrementará el valor de x hasta que valga 100.
Pero aunque la condición sea falsa, por ejemplo, si x vale inicialmente 200,
la sentencia x = x + 1;, se ejecuta primero, y después se verifica la condición.
Se pueden construir bucles do...while usando bucles while, pero a costa de
repetir la sentencia dos veces:
<sentencia>
while(<condición>) <sentencia>
Esto puede hacernos pensar que estos bucles no son necesarios, y
efectivamente, así es. Pero nos facilitan las cosas a la hora de codificar algoritmos
basados en bucles do...while, ya que, por una parte, nos ahorran el trabajo de
escribir dos veces el mismo código, y por otra, disminuyen las posibilidades de
errores en una de las repeticiones, sobre todo al corregir un error en el código,
cuando es más fácil olvidar que estamos corrigiendo un bucle do...while, por lo
que tendríamos que corregirlo dos veces.
De igual forma, no olvidemos que existen sentencias de bloque, que
pueden constar de cientos de sentencias simples, cada una de las cuales puede
ser una sentencia cualquiera de las que estamos estudiando.
Además se debe utilizarse este tipo de bucles cuando el cuerpo debe ser
ejecutado al menos una vez. En particular, en aquellos casos en que el bucle
calcula un valor que es necesario para la condición de terminación. Por ejemplo,
los cálculos iterativos que terminan cuando se da una condición de convergencia,
cuando una expresión calculada dentro del bucle es menor que un determinado
valor.
Sintaxis:
do<sentencia> while ( <condición> );
Descripción:La sentencia do ejecuta repetidamente el bucle definido por el
bloque de código <sentencia> hasta que la sentencia de control <condición>
devuelve el valor falso.
Puesto que el control se evalúa después de cada ejecución del bucle,
resulta que este se ejecuta al menos una vez, aunque <condición> devuelva el
valor falso desde el principio (si requiere que el bucle no se ejecute ninguna vez,
es mejor utilizar while).
La forma más genérica de la expresión suele ser:
do
{
<sentencia> ;
} while ( <condición> );
Ejemplo:
Este programa solicita una clave de acceso indefinidamente hasta que el usuario
proporciona una que coincide con el valor almacenado en la matriz checkword.
#include <stdio.h>
#include <string.h>
int main ()
{ // ===================
char checkword[80] = "password";
char password[80] = "";
do
{
cout<< "Introducir clave: "<<endl;
cin>>("%s", password);
} while (strcmp(password, checkword));
return 0;
}
Nota: C++ no dispone en ninguna de sus sentencias de bucle de la opción loop (o
similar), como la ofrecida por otros lenguajes para saltar al principio desde
cualquier punto de la iteración. No obstante, ofrece alternativas que pueden servir
para el caso.
3) Bucle For:Este tipo de bucle es el más elaborado y consiste en que la
sentencia es ejecutada repetidamente mientras la condición resulte
verdadera, o expresado de otro modo, hasta que la evaluación de la
condición resulte falsa.
La sintaxis es:
for ( [<inicialización>]; [<condición>] ; [<incremento>] )
<sentencia>;
Antes de la primera iteración se ejecutará la iniciación del bucle, que puede
ser una expresión o una declaración. En este apartado se suelen iniciar las
variables usadas en el bucle. Estas variables también pueden ser declaradas en
este punto, pero en ese caso tendrán validez (ámbito) sólo dentro del bucle for.
Después de cada iteración se ejecutará el incremento de las variables del
bucle. Este incremento también es una sentencia de asignación, y no tiene por
qué ser necesariamente un incremento.
En general, podemos considerar que la parte de inicialización establece las
condiciones iniciales del bucle, la parte de la condición establece la condición de
salida, y la parte del incremento, modifica las condiciones iniciales para establecer
las de la siguiente iteración del bucle, o para alcanzar la condición de salida.
Todas las expresiones son opcionales, y si no se especifica la condición se
asume que es verdadera.
Ejemplos:
for(inti = 0; i< 100; i = i + 1);
for(inti = 100; i< 0; i = i - 1);
Como las expresiones son opcionales, podemos simular bucles while:
for(;i< 100;) i = i + 1;
for(;i++ < 100;);
O bucles infinitos:
for(;;);
En realidad, podemos considerar un bucle for como una extensión de un
bucle while.
La equivalencia entre un bucle for y un bucle while es la siguiente:
[<inicialización>];
while([<condición>]) {
<sentencia>
[<incremento>]
}
Evidentemente, los bucles for no son estrictamente necesarios, (como
tampoco lo son los bucles do...while), pero en muchas ocasiones simplifican el
código de los bucles, haciendo más fácil la comprensión de un programa, ya sea
para su análisis, su modificación o para su depuración.
En un estilo de programación claro, los bucles for se suelen utilizar para
recorrer listas de elementos (como veremos el tema de los arrays). Usados con
esta función, la inicialización se limita a asignar el valor inicial de un índice que
sirve para recorrer la lista, la condición comprueba si hemos llegado al final de la
lista, y el incremento modifica el índice para que apunte al siguiente elemento de
la lista.
Otra cosa, por muy tentador que resulte a veces, debemos intentar
resistirnos a la tentación de usar los bucles for para emular otro tipo de bucles, ya
que generalmente, esto puede inducir a malas interpretaciones sobre la finalidad
del código, dificultando la depuración o el análisis.
Veamos un ejemplo sencillo:
inti=0;
for(boolsalir = false; !salir; salir = (i> -5)) i++;
Aunque este bucle funcione, y haga lo que el programador tiene intención
que haga, averiguar cómo lo hace requerirá cierto esfuerzo por nuestra parte.
Supongo que estarás de acuerdo conmigo en que esto se puede expresar más
claramente de otro modo:
i = 0;
do
{
i++;
} while(i <= -5);
Break y continue: Las palabras reservadas break y continue juegan un papel en
las aplicaciones de los bucles con el for infinito y consisten en que cuando se
termina la ejecución del bucle en que se encuentra. Continue hace que el bucle
pase directamente a la siguiente iteración. Además para finalizar podemos decir
que ambos comando deben utilizarse lo menos posible.
Break: Los enunciados break es utilizados para modificar el flujo de control
dentro de un programa.
El break utilizado dentro de las estructuras de control causa la inmediata
salida de dicha estructura (por lo tanto no sigue repitiéndose el bloque y continúa
la ejecución de las instrucciones que le siguen a la estructura de control).
La sentencia break se utiliza frecuentemente para poner fin a la tramitación
de un caso particular dentro de una sentencia switch o un ciclo de iteración. La
falta de un proceso iterativo que encierra o sentencia switch genera un error.
Estructura
Saltar declaración:
break;
/*Programa que cuente del 1 al 10 y termine al llegar al 7*/
#include<iostream.h>
void main()
{
intnum=1;
while (num<= 10)
{
if (num == 7)
{
cout<<"n Numero: "<<num;
break;
};
cout<<"n Número: "<<num;
num++;
}
cin.get();
cin.get();
}

Más contenido relacionado

La actualidad más candente

5.3 instruccion while
5.3 instruccion while5.3 instruccion while
5.3 instruccion whileSNPP
 
Matlab 2
Matlab 2Matlab 2
Matlab 2jmh700
 
Sentencia de control
Sentencia de controlSentencia de control
Sentencia de controlStalyn Cruz
 
Sentencias de repetición en Java
Sentencias de repetición en JavaSentencias de repetición en Java
Sentencias de repetición en JavaJdcaste
 
Estructuras repetitivas
Estructuras repetitivasEstructuras repetitivas
Estructuras repetitivassena
 
Estructuras de repeticion
Estructuras de repeticion Estructuras de repeticion
Estructuras de repeticion abmendo28
 
Tema 3 sentencias de control de java por gio
Tema 3   sentencias de control de java por gioTema 3   sentencias de control de java por gio
Tema 3 sentencias de control de java por gioRobert Wolf
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesmatlab_usc
 
Curso Java Inicial 3 Sentencias De Control De Flujo
Curso Java Inicial   3 Sentencias De Control De FlujoCurso Java Inicial   3 Sentencias De Control De Flujo
Curso Java Inicial 3 Sentencias De Control De FlujoEmilio Aviles Avila
 
Estructura Repetitivas
Estructura RepetitivasEstructura Repetitivas
Estructura Repetitivaslaryenso
 
Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)Rommel Lòpez
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javaHenry Upla
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Javaquesada_diego
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlparada137
 

La actualidad más candente (20)

5.3 instruccion while
5.3 instruccion while5.3 instruccion while
5.3 instruccion while
 
Estructura repetitiva
Estructura repetitivaEstructura repetitiva
Estructura repetitiva
 
Matlab 2
Matlab 2Matlab 2
Matlab 2
 
Sentencia de control
Sentencia de controlSentencia de control
Sentencia de control
 
Sentencias de repetición en Java
Sentencias de repetición en JavaSentencias de repetición en Java
Sentencias de repetición en Java
 
Estructuras repetitivas
Estructuras repetitivasEstructuras repetitivas
Estructuras repetitivas
 
Estructuras de repeticion
Estructuras de repeticion Estructuras de repeticion
Estructuras de repeticion
 
Estructuras repetitivas
Estructuras repetitivasEstructuras repetitivas
Estructuras repetitivas
 
Tema 3 sentencias de control de java por gio
Tema 3   sentencias de control de java por gioTema 3   sentencias de control de java por gio
Tema 3 sentencias de control de java por gio
 
Enfoques
EnfoquesEnfoques
Enfoques
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y bucles
 
Curso Java Inicial 3 Sentencias De Control De Flujo
Curso Java Inicial   3 Sentencias De Control De FlujoCurso Java Inicial   3 Sentencias De Control De Flujo
Curso Java Inicial 3 Sentencias De Control De Flujo
 
Estructura Repetitivas
Estructura RepetitivasEstructura Repetitivas
Estructura Repetitivas
 
Sentencias
SentenciasSentencias
Sentencias
 
Sentencia ford
Sentencia fordSentencia ford
Sentencia ford
 
Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control java
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Java
 
Calculo cap07
Calculo cap07Calculo cap07
Calculo cap07
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 

Destacado

Fo I Michelle Nuttall
Fo I Michelle NuttallFo I Michelle Nuttall
Fo I Michelle NuttallCare City
 
Td expo1-+04,05,12,13-+whyle&for
Td expo1-+04,05,12,13-+whyle&forTd expo1-+04,05,12,13-+whyle&for
Td expo1-+04,05,12,13-+whyle&forDuel Erold
 
Sentencia if else
Sentencia if elseSentencia if else
Sentencia if elseUVM
 
Sentencias de Programacion
Sentencias de ProgramacionSentencias de Programacion
Sentencias de Programacionaeroscar90
 

Destacado (7)

Condisionales
CondisionalesCondisionales
Condisionales
 
Fo I Michelle Nuttall
Fo I Michelle NuttallFo I Michelle Nuttall
Fo I Michelle Nuttall
 
Td expo1-+04,05,12,13-+whyle&for
Td expo1-+04,05,12,13-+whyle&forTd expo1-+04,05,12,13-+whyle&for
Td expo1-+04,05,12,13-+whyle&for
 
Sentencia if else
Sentencia if elseSentencia if else
Sentencia if else
 
Sentencias de Programacion
Sentencias de ProgramacionSentencias de Programacion
Sentencias de Programacion
 
Términos
TérminosTérminos
Términos
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 

Similar a Trabajo bucles bn

Unidad 1
Unidad 1Unidad 1
Unidad 1Isabel
 
Desarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoDesarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientomariavidal94
 
Desarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoDesarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoSantiagoFernandezCep
 
Desarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoDesarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoSantiagoAldanaDelgad
 
Estructuras condicionales
Estructuras condicionalesEstructuras condicionales
Estructuras condicionalesSTEVENZAFIRO
 
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA II
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA IITEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA II
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA IIAnyeni Garay
 
Estructura de control repetitiva
Estructura de control repetitivaEstructura de control repetitiva
Estructura de control repetitivavillandri pachco
 
Programacion MatLab
Programacion MatLabProgramacion MatLab
Programacion MatLabEdgar Galvez
 
Estructuras iterativas en java y pseudocódigo
Estructuras iterativas en java y pseudocódigoEstructuras iterativas en java y pseudocódigo
Estructuras iterativas en java y pseudocódigoAlex Cordova
 
Teoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y gruposTeoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y gruposLuis Talledo Yahuana
 
Estructuras secuenciales, selectivas e iterativas3
Estructuras secuenciales, selectivas e iterativas3Estructuras secuenciales, selectivas e iterativas3
Estructuras secuenciales, selectivas e iterativas3maria_z2
 
Los 20 algoritmos matemáticos
Los 20 algoritmos matemáticosLos 20 algoritmos matemáticos
Los 20 algoritmos matemáticosIvan
 

Similar a Trabajo bucles bn (20)

Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Pract5
Pract5Pract5
Pract5
 
Desarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoDesarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamiento
 
Desarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoDesarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamiento
 
Desarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamientoDesarrollo de hablididades de pensamiento
Desarrollo de hablididades de pensamiento
 
Estructuras condicionales
Estructuras condicionalesEstructuras condicionales
Estructuras condicionales
 
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA II
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA IITEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA II
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA II
 
Guia4
Guia4Guia4
Guia4
 
Manual
ManualManual
Manual
 
Estructura de control repetitivo diapositivas
Estructura de control repetitivo diapositivasEstructura de control repetitivo diapositivas
Estructura de control repetitivo diapositivas
 
Estructura de control repetitiva
Estructura de control repetitivaEstructura de control repetitiva
Estructura de control repetitiva
 
Grupo7
Grupo7Grupo7
Grupo7
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Programacion MatLab
Programacion MatLabProgramacion MatLab
Programacion MatLab
 
Estructuras iterativas en java y pseudocódigo
Estructuras iterativas en java y pseudocódigoEstructuras iterativas en java y pseudocódigo
Estructuras iterativas en java y pseudocódigo
 
Teoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y gruposTeoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y grupos
 
Estructuras secuenciales, selectivas e iterativas3
Estructuras secuenciales, selectivas e iterativas3Estructuras secuenciales, selectivas e iterativas3
Estructuras secuenciales, selectivas e iterativas3
 
Presentacion
PresentacionPresentacion
Presentacion
 
Los 20 algoritmos matemáticos
Los 20 algoritmos matemáticosLos 20 algoritmos matemáticos
Los 20 algoritmos matemáticos
 
Declaraciones
DeclaracionesDeclaraciones
Declaraciones
 

Trabajo bucles bn

  • 1. Bucle: En programación, es una sentencia que se realiza repetidas veces a un trozo aislado de código, hasta que la condición asignada a dicho bucle deje de cumplirse. Generalmente, un bucle es utilizado para hacer una acción repetida sin tener que escribir varias veces el mismo código, lo que ahorra tiempo, deja el código más claro y facilita su modificación en el futuro. El bucle y los condicionales representan la base de la programación estructurada. Es una evolución del código ensamblador, donde la única posibilidad de iterar un código era establecer una sentencia jump (que en los lenguajes de programación fue sustituida por el "ir a" o GOTO). Además existen 3 tipos de sentencias iteración o bucles que son el núcleo de cualquier lenguaje de programación, y están presentes en la mayor parte de ellos. Nos permiten realizar tareas repetitivas, y se usan en la resolución de la mayor parte de los problemas. Sentencias de iteración: Sinopsis: Son todas aquellas de las sentencias de iteración permiten repetir una sentencia o conjunto de ellas. Es lo que se denomina ejecutar un bucle. En C++ existen tres formas de iteraciones: los bucles while; do…while y for. Observe que en todos los casos el bucle puede estar constituido por una sola sentencia o por varias. En cuyo caso se trata de un bloque de código delimitado por un par de corchetes { }. Si se trata de una sola sentencia, los corchetes no son necesarios. De igual modo el descubrimiento de los bucles se lo debemos a Ada Byron, así como el de las subrutinas (que no es otra cosa que una función o procedimiento). Está considerada como la primera programadora, y ella misma se autodenominaba analista, lo que no deja de ser sorprendente, ya que el primer ordenador no se construyó hasta un siglo después.
  • 2. Generalmente estas sentencias tienen correspondencia con estructuras de control equivalentes en pseudocódigo. El pseudocódigo es un lenguaje creado para expresar algoritmos formalmente y de manera clara. No es en sí mismo un lenguaje de programación, sino más bien, un lenguaje formal (con reglas muy estrictas), pero humano, que intenta evitar ambigüedades. Ejemplo: Un algoritmo para saber si un número N, es primo, puede ser: Cualquier un número es primo si sólo es divisible entre sí mismo y la unidad. Por lo tanto, para saber si un número N es primo o no, bastará con dividirlo por todos los números entre 2 y N-1, y si ninguna división es exacta, entonces el número n es primo. Pero hay algunas mejoras que podemos aplicar tales como: 1) La primera es que no es necesario probar con todos los números entre 2 y N-1, ya que podemos dar por supuesto que si N no es divisible entre 2, tampoco lo será para ningún otro número par: 4, 6, 8..., por lo tanto, después de probar con 2 pasaremos al 3, y después podemos probar sólo con los impares. 2) La segunda es que tampoco es necesario llegar hasta N-1, en realidad, sólo necesitamos llegar hasta el valor entero más cercano a la raíz cuadrada de N. Esto es así porque estamos probando con todos los números menores que N uno a uno. Supongamos que vamos a probar con un número M mayor que la raíz cuadrada de N. Para que M pudiera ser un divisor de N debería existir un número X que multiplicado por M fuese igual a N. N = M x X. El caso extremo, es aquel en el que M fuese exactamente la raíz
  • 3. cuadrada de N. En ese caso, el valor de X sería exactamente M, ya que ese es el valor de la raíz cuadrada de N: N = M² = M x M. M Pero en el caso de que M fuese mayor que la raíz cuadrada de N, entonces el valor de X debería ser menor que la raíz cuadrada de N. Y el caso es que ya hemos probado con todos los números menores que la raíz cuadrada de N, y ninguno es un divisor de N. Por lo tanto, ningún número M mayor que la raíz cuadrada de N puede ser divisor de N si no existen números menores que la raíz cuadrada de N que lo sean. El pseudocódigo para este algoritmo sería algo parecido a esto: ¿Es N=1? -> N es primo, salir ¿Es N=2? -> N es primo, salir Asignar a M el valor 2 mientras M <= raíz cuadrada(N) hacer: ¿Es N divisible entre M? -> N no es primo, salir Si M=2 entondes Asignar a M el valor 3 Si M distinto de 2 entonces Asignar a M el valor M+2 Fin del mientras N es primo ->salir Para finalizar tenemos que anexar que los tres bucles más utilizados en programación son el bucle for (Repetir hasta), el While (Mientras), Do While (Haga mientras).
  • 4. Tipos de Bucles: En el Lenguaje de Programación C++ hay tres clases de bucles que son: 1) For (Repita hasta). 2) While (Mientras). 3) Do While (Haga Mientras). A Continuación le explicaremos detalladamente tanto de forma teórica como practica cada unos de ellos: 1) Bucle While: Es la sentencia de bucle más sencilla, y sin embargo es tremendamente potente. En C++ se usa la palabra reservada while (que significa "mientras"), y sirve para ejecutar el cuerpo del bucle repetidamente mientras la expresión sea distinta de cero (sea verdadera). El test se hace antes de ejecutar el cuerpo del bucle, lo que significa que se éste se ejecuta cero o más veces. De igual modo permite ejecutar repetidamente un bloque de código mientras se cumpla una determinada condición que es chequeada antes de cada iteración. De igual modo se debe utilizar un bucle while cuando es posible que el cuerpo del bucle no sea ejecutado. Por ejemplo, para leer y procesar el contenido de un fichero de tamaño desconocido. Ejemplo Básico: while( expresión ) { statement; // cuerpo del bucle ... }
  • 5. Sintaxis: while ( <condicion> ) <sentencia> ; Descripción: La sentencia while ejecuta iterativamente el bucle definido por el bloque de código <sentencia> siempre que el valor devuelto por la expresión <condición> (que debe estar entre paréntesis) sea cierto. Nota: recordemos que cierto (true) equivale numéricamente a 1 , mientras que falso (false) equivale al valor 0. Puesto que la condición se evalúa antes que cada ejecución del bucle, si al comienzo <condicion> devuelve falso, <sentencia> no se ejecuta ninguna vez, y el control pasa a la siguiente sentencia. Si <condición> devuelve cierto se ejecuta el bucle <sentencia>, y a continuación se vuelve a evaluar <condicion> con lo que se repite el ciclo. Ejemplos: while (*p == ' ') p++; while ( i<= j) i++; La sentencia puede estar vacía, realizándose entonces toda la computación requerida en la cláusula <condición>. Ejemplo: while ( getchar() != 'Z' ); Aunque lo normal es que la <sentencia> sea un bloque de código entre corchetes: while (i< n) {
  • 6. cout<<i<<endl; ++i; } Explicación de las salidas del programa adjunto antes de leer el comentario final (esta disposición es muy utilizada en bucles que deben repetirse un número n de veces). #include <iostream> using namespace std; int main() { // ========== int x = 5, y = 5; while ( x-- ) { cout<< "x = " << x <<endl; } while ( --y ) { cout<< " y = " << y <<endl; } cout<< "Terminado!!" <<endl; } Salida: x = 4 x = 3 x = 2 x = 1 x = 0 y = 4 y = 3 y = 2
  • 7. y = 1 Terminado!! Comentario: En ambas iteraciones, la condición indicada en el paréntesis es chequeada antes de ejecutar la iteración (la salida en pantalla). La diferencia entre ambos es que el postdecremento (x--) se realiza después de la evaluación del paréntesis (comprobación de que su contenido es cierto). En consecuencia, el ciclo del primer bucle es como sigue: 1) comprobación de que x es cierto (distinto de cero). El resultado, que denominaremos R, es un bool. 2) decremento unitario de x 3) dos posibilidades: a) R == true → ejecutar el bucle (salida en pantalla) → volver al punto 1. b) R == false → abandonar el bucle. En cambio, en el segundo bucle, el predecremento (--x) se realiza antes de la evaluación del paréntesis (comprobación de la condición del bucle). En consecuencia, el ciclo del segundo bucle puede resumirse así: 1) decremento unitario de x 2) comprobación de que x es cierto (distinto de cero). El resultado, que denominaremos R, es un bool. 3) dos posibilidades: a) R == true → ejecutar el bucle (salida en pantalla) → volver al punto 1. b) R == false → abandonar el bucle.
  • 8. 2) Bucle do...while: La sentencia do while va un paso más allá que el whiley es aquella que permite ejecutar repetidamente un bloque de código mientras se cumpla una determinada condición que es chequeado después de cada iteración. El cuerpo del bucle se ejecuta repetidamente mientras la expresión es distinta de cero (verdadera). El test se hace después de ejecutar el cuerpo del bucle, por lo que éste se ejecuta al menos una vez. En otros lenguajes, como PASCAL, se usa para el mismo tipo de bucle la estructura "repetir...hasta", es decir la sentencia se repite hasta que se cumpla una determinada condición. La diferencia está en que la lógica es la inversa: la sentencia se repite mientras la condición sea falsa. El resultado es el mismo, en cualquier caso. A diferencia del bucle while, la evaluación de la condición se realiza después de ejecutar la sentencia, de modo que ésta se ejecutará al menos una vez. Por ejemplo: Do { x = x + 1; }while (x < 100); En este bucle se incrementará el valor de x hasta que valga 100. Pero aunque la condición sea falsa, por ejemplo, si x vale inicialmente 200, la sentencia x = x + 1;, se ejecuta primero, y después se verifica la condición. Se pueden construir bucles do...while usando bucles while, pero a costa de repetir la sentencia dos veces:
  • 9. <sentencia> while(<condición>) <sentencia> Esto puede hacernos pensar que estos bucles no son necesarios, y efectivamente, así es. Pero nos facilitan las cosas a la hora de codificar algoritmos basados en bucles do...while, ya que, por una parte, nos ahorran el trabajo de escribir dos veces el mismo código, y por otra, disminuyen las posibilidades de errores en una de las repeticiones, sobre todo al corregir un error en el código, cuando es más fácil olvidar que estamos corrigiendo un bucle do...while, por lo que tendríamos que corregirlo dos veces. De igual forma, no olvidemos que existen sentencias de bloque, que pueden constar de cientos de sentencias simples, cada una de las cuales puede ser una sentencia cualquiera de las que estamos estudiando. Además se debe utilizarse este tipo de bucles cuando el cuerpo debe ser ejecutado al menos una vez. En particular, en aquellos casos en que el bucle calcula un valor que es necesario para la condición de terminación. Por ejemplo, los cálculos iterativos que terminan cuando se da una condición de convergencia, cuando una expresión calculada dentro del bucle es menor que un determinado valor. Sintaxis: do<sentencia> while ( <condición> ); Descripción:La sentencia do ejecuta repetidamente el bucle definido por el bloque de código <sentencia> hasta que la sentencia de control <condición> devuelve el valor falso. Puesto que el control se evalúa después de cada ejecución del bucle, resulta que este se ejecuta al menos una vez, aunque <condición> devuelva el valor falso desde el principio (si requiere que el bucle no se ejecute ninguna vez, es mejor utilizar while).
  • 10. La forma más genérica de la expresión suele ser: do { <sentencia> ; } while ( <condición> ); Ejemplo: Este programa solicita una clave de acceso indefinidamente hasta que el usuario proporciona una que coincide con el valor almacenado en la matriz checkword. #include <stdio.h> #include <string.h> int main () { // =================== char checkword[80] = "password"; char password[80] = ""; do { cout<< "Introducir clave: "<<endl; cin>>("%s", password); } while (strcmp(password, checkword)); return 0; } Nota: C++ no dispone en ninguna de sus sentencias de bucle de la opción loop (o similar), como la ofrecida por otros lenguajes para saltar al principio desde cualquier punto de la iteración. No obstante, ofrece alternativas que pueden servir para el caso.
  • 11. 3) Bucle For:Este tipo de bucle es el más elaborado y consiste en que la sentencia es ejecutada repetidamente mientras la condición resulte verdadera, o expresado de otro modo, hasta que la evaluación de la condición resulte falsa. La sintaxis es: for ( [<inicialización>]; [<condición>] ; [<incremento>] ) <sentencia>; Antes de la primera iteración se ejecutará la iniciación del bucle, que puede ser una expresión o una declaración. En este apartado se suelen iniciar las variables usadas en el bucle. Estas variables también pueden ser declaradas en este punto, pero en ese caso tendrán validez (ámbito) sólo dentro del bucle for. Después de cada iteración se ejecutará el incremento de las variables del bucle. Este incremento también es una sentencia de asignación, y no tiene por qué ser necesariamente un incremento. En general, podemos considerar que la parte de inicialización establece las condiciones iniciales del bucle, la parte de la condición establece la condición de salida, y la parte del incremento, modifica las condiciones iniciales para establecer las de la siguiente iteración del bucle, o para alcanzar la condición de salida. Todas las expresiones son opcionales, y si no se especifica la condición se asume que es verdadera. Ejemplos: for(inti = 0; i< 100; i = i + 1); for(inti = 100; i< 0; i = i - 1);
  • 12. Como las expresiones son opcionales, podemos simular bucles while: for(;i< 100;) i = i + 1; for(;i++ < 100;); O bucles infinitos: for(;;); En realidad, podemos considerar un bucle for como una extensión de un bucle while. La equivalencia entre un bucle for y un bucle while es la siguiente: [<inicialización>]; while([<condición>]) { <sentencia> [<incremento>] } Evidentemente, los bucles for no son estrictamente necesarios, (como tampoco lo son los bucles do...while), pero en muchas ocasiones simplifican el código de los bucles, haciendo más fácil la comprensión de un programa, ya sea para su análisis, su modificación o para su depuración. En un estilo de programación claro, los bucles for se suelen utilizar para recorrer listas de elementos (como veremos el tema de los arrays). Usados con esta función, la inicialización se limita a asignar el valor inicial de un índice que sirve para recorrer la lista, la condición comprueba si hemos llegado al final de la lista, y el incremento modifica el índice para que apunte al siguiente elemento de la lista. Otra cosa, por muy tentador que resulte a veces, debemos intentar resistirnos a la tentación de usar los bucles for para emular otro tipo de bucles, ya
  • 13. que generalmente, esto puede inducir a malas interpretaciones sobre la finalidad del código, dificultando la depuración o el análisis. Veamos un ejemplo sencillo: inti=0; for(boolsalir = false; !salir; salir = (i> -5)) i++; Aunque este bucle funcione, y haga lo que el programador tiene intención que haga, averiguar cómo lo hace requerirá cierto esfuerzo por nuestra parte. Supongo que estarás de acuerdo conmigo en que esto se puede expresar más claramente de otro modo: i = 0; do { i++; } while(i <= -5); Break y continue: Las palabras reservadas break y continue juegan un papel en las aplicaciones de los bucles con el for infinito y consisten en que cuando se termina la ejecución del bucle en que se encuentra. Continue hace que el bucle pase directamente a la siguiente iteración. Además para finalizar podemos decir que ambos comando deben utilizarse lo menos posible. Break: Los enunciados break es utilizados para modificar el flujo de control dentro de un programa. El break utilizado dentro de las estructuras de control causa la inmediata salida de dicha estructura (por lo tanto no sigue repitiéndose el bloque y continúa la ejecución de las instrucciones que le siguen a la estructura de control).
  • 14. La sentencia break se utiliza frecuentemente para poner fin a la tramitación de un caso particular dentro de una sentencia switch o un ciclo de iteración. La falta de un proceso iterativo que encierra o sentencia switch genera un error. Estructura Saltar declaración: break; /*Programa que cuente del 1 al 10 y termine al llegar al 7*/ #include<iostream.h> void main() { intnum=1; while (num<= 10) { if (num == 7) { cout<<"n Numero: "<<num; break; }; cout<<"n Número: "<<num; num++;