Hola y bienvenido de nuevo.
Todavía voy a hablar un poco sobre el flujo de control.
Así que vamos a sumergirnos en los bucles que repiten el código.
Primero, vamos a hablar de esto para el bucle.
El bucle for tendrá que ver
con la repetición de código. Entonces, solo como recordatorio, la repetición
de código es una forma de permitir la no
duplicación y, en realidad, tal vez esté ejecutando más de un código similar a
la vez.
Entonces, el lenguaje de programación c tiene ciertas construcciones diseñadas para
el lenguaje que puede usar cuando desee repetir código.
Y esto le permite repetir un bloque de declaraciones hasta que se cumpla alguna condición.
Entonces es similar al ciclo for y vas a evaluar una
expresión booleana, una condición. No puedes correr para siempre.
Cuando se ejecuta en un bucle para siempre, eso significa que es un bucle infinito.
Y solo hay ciertas ocasiones en las que es
posible que desee volver a hacerlo, por ejemplo, para monitorear o escuchar algo.
Por lo tanto, el número de veces que se repite un bucle se puede controlar simplemente por cuenta.
Hay 2 tipos de bucles que
puede hacer, un bucle de control de contador o un bucle de control centinela como lo llaman.
Un ciclo de control de contador significa que el
ciclo se ejecuta 10, 20, 30 veces, una cantidad de tiempo específica.
Repite el mismo bloque de instrucciones dentro del ciclo
varias veces.
Puede tener otro tipo de bucle en el que no esté controlado por contador.
Puede ejecutarse 5 veces, puede ejecutar 100, puede querer 20,
todo depende de una condición, una variable o algo. Entonces, por ejemplo, puede ejecutar un ciclo que diga
que voy a ejecutar mi ciclo una y otra vez hasta que el
usuario ingrese a salir.
Entonces, hasta que la variable cambie para salir. No está controlado por contador. No es dependiente.
Nuevamente, puede ejecutarse 10 veces, puede ejecutarse 100 veces.
Estos son los 2 tipos diferentes de bucles. Entonces, proporcionaré ejemplos de ambos,
pero piense en esto en un nivel alto, ¿cuándo querría repetir el código?
Bueno, es posible que desee repetir el código 5 veces, una cierta cantidad de tiempo,
una cantidad de tiempo definitiva o puede que desee poner
el código en función de una determinada condición introducida por un usuario, y eso se llama centinela.
Nuestro bucle for tiene la palabra clave for. Se usa para ejecutar una
determinada cantidad de veces. Por lo general, se usa para controlar el contador, pero no es necesario.
Puede usarlo para el bucle de control de contador o un centinela para controlar el bucle.
Tu decides. Pero muchos de los ejemplos en gran parte de
la práctica se controlan de forma contraria, una cierta cantidad de veces.
Si desea mostrar los números del 1 al 10, por ejemplo, usaría el bucle for.
No querrá escribir 10 líneas de código
con la misma declaración printf mostrando un número diferente.
Eso es muy ineficiente. Consume mucho tiempo.
Usaría un bucle for para repetir el código.
Lo que harías es hacer algo como esto.
Aquí hay una introducción a cómo se ve el
bucle for, la sintaxis.
Tienes la palabra clave for, y luego tienes estos paréntesis.
Nuevamente, los paréntesis identifican diferentes cosas que están sucediendo para
el ciclo for.
Luego tiene un corchete y tiene declaraciones dentro de los corchetes.
De nuevo, los corchetes representan el cuerpo del bucle, al
igual que los corchetes que representan el cuerpo de una instrucción if.
Si tiene una sola declaración allí, no necesita los corchetes, pero es
una buena práctica usarlos siempre.
Entonces, en este ejemplo, verá la palabra clave for, que debería ser lo primero que identifique.
Se controla la operación, cuánto tiempo se va a ejecutar y lo que aparece entre paréntesis después
de la palabra clave for, que vamos a entrar en detalles específicos.
Básicamente, hay 3 expresiones diferentes allí.
Y puede reconocerlos porque están separados por punto y coma.
Entonces, el punto y coma dice que esta es una declaración de expresión.
Entonces, ¿qué están haciendo esas 3 cosas? Vamos a describirlo.
La acción que quieres repetir
está dentro del cuerpo del bucle, eso es lo que sucede tantas veces.
En este ejemplo, el cuerpo del bucle es printf.
Entonces, si una condición se evalúa como verdadera, seguirá imprimiendo ese número.
Y nuevamente, para declaraciones individuales, puede omitir las llaves.
Así que repasemos esto en detalle.
el patrón general para el bucle for es que tiene este tipo de declaración.
Tienes un for y luego tienes una condición inicial, esto es pseudocódigo.
Estoy tratando de describir el bucle for aquí.
Entonces, la condición inicial es lo primero, todo antes del primer punto y coma.
La segunda cosa es la condición de continuación con
un punto y coma al final y luego la última cosa entre paréntesis es la acción por iteración.
Y quiero describir cada uno de estos. Y luego, dentro del cuerpo, está la declaración de bucle.
La declaración de bucle es bastante fácil. Eso es solo dentro del cuerpo.
Ese es el código que se ejecutará y que se repetirá cada vez.
Eso es bastante básico.
Y nuevamente, puede romper las llaves si tiene varias declaraciones u omitir las
llaves si tiene una sola declaración.
La condición inicial, lo primero que se encuentra entre
paréntesis antes del primer punto y coma suele ser, aunque
no siempre, suele inicializar una variable, denominada variable de control de bucle.
Esa es la variable que comenzará a ver en cada iteración.
Entonces, la variable de control de bucle suele ser un contador de
alguna vez, no siempre de nuevo, quiero enfatizar que no
tiene por qué serlo. Pero muchas veces en un bucle for
es un contador y rastrea la frecuencia con la que se ha repetido el bucle.
Eso es lo que está haciendo esta condición inicial y la variable de control de bucle.
También puede declarar e inicializar varias variables del mismo tipo aquí con
la declaración separada por comas. Entonces puede tener múltiples inicializaciones aquí
variables.
Ahora, dependiendo del compilador de c que use,
es posible que no pueda declarar esas variables dentro de la instrucción for.
Si usa algo debajo del compilador C99, debe declarar las
variables fuera de la instrucción for y luego simplemente las inicializaría en este lugar
donde dice la condición
inicial, pero repasaremos algunos de esos ejemplos.
Pero la condición inicial es donde inicializa las variables.
Es la variable de control de bucle y recibe ese nombre porque controla la
frecuencia con la que se ejecutará el bucle cuando lo inicialices.
Lo siguiente de lo que quiero hablar es de la condición de continuación, la condición de continuación, la parte que
está antes y después de este primer punto y coma en el bucle for.
Ésta es una expresión lógica.
Esta es la condición que se evaluará como verdadera o falsa.
Aquí es cuando vas a saltar al bucle o salir del bucle.
Esto determina si el bucle debe continuar ejecutándose.
Siempre que esta condición tenga un valor verdadero, el bucle continúa
ejecutándose, todas las declaraciones del cuerpo se ejecutarán.
Normalmente, esto comprobará el valor de la variable de control de bucle.
Entonces, inicializa la variable de control de bucle en la condición de
inicio y luego mira en la condición de continuación.
Puede poner aquí cualquier expresión lógica o aritmética siempre que sepa lo que está haciendo.
La condición de continuación se prueba al principio del ciclo en lugar de al final.
Esto se conoce como bucle de prueba previa.
Notará la diferencia cuando hablemos del ciclo do-while, que es un ciclo posterior a la prueba.
Pero lo que esto significa es que la declaración de bucle puede ejecutarse una
vez, puede ejecutarse 0 veces.
Todo depende de si esa condición de continuación se evalúa como verdadera o falsa.
Si se evalúa como falso, nunca ejecutará el cuerpo.
Si se evalúa como verdadero, ejecutará ese cuerpo al menos una vez.
La acción por iteración que se encuentra al final del ciclo for después del segundo punto y coma,
que normalmente hace algún tipo de modificación de la variable de control del ciclo.
Lo aumentará o disminuirá si es un contador
de bucle o si es un bucle centinela, puede pedirle al usuario que ingrese más entradas.
También puede hacer más de una modificación de una variable.
Puede modificar la variable de control de bucle y puede modificar otras variables.
Solo tienes que separarlos por comas.
Pero para resumir todo
lo que dije, tenemos esta pequeña tabla que lo describe.
Pero antes de hablar de eso, veamos un pequeño ejemplo.
Así que aquí tienes un ejemplo. Tenemos la palabra clave for.
Y luego notarás que tenemos int I igual a 1 j igual a
2, ahí es donde estamos inicializando las variables.
Y en realidad estamos inicializando 2 variables aquí separadas por comas, típicamente en
un ciclo for, por lo general solo inicializamos una, la variable de control de ciclo.
Pero en este caso, estamos inicializando I y j.
Y luego de ese punto y coma, tenemos la condición.
Cuándo vamos a entrar y cuándo vamos a salir de este bucle.
Vamos a ingresar siempre que I sea menor que 5.
Esa es nuestra expresión booleana que se evalúa como verdadera o falsa.
Y luego, después de ese segundo punto y
coma, vamos a modificar esa variable de control de ciclo o cualquier otra variable que le concierna.
Aquí estamos haciendo un plus, plus I, este es un
operador de incremento, prefijo I. Y luego asignamos j igual a j más 2.
Esa suele ser su condición x, modificando esa variable
de control de ciclo.
Y luego el cuerpo del bucle solo tiene una sola declaración, por lo que no necesitamos los corchetes.
Simplemente estamos imprimiendo los valores de I multiplicado por j.
Entonces, la salida producida por este código
serán los valores 2, 8, 18, 32 y 50 en una sola línea.
La primera iteración del ciclo, I será igual a 1, j será igual a 2.
Y entonces dirá I por j, que es 1 por 2 y lo mostrará.
Se va a verificar para asegurarse de que no sea mayor que 5, no es 1.
Así que volverá a subir y se ejecutará por segunda vez.
Y también estamos modificando esa variable I en nuestra última declaración.
Entonces, en la segunda iteración del ciclo, seré igual a 2.
Y j será igual a 2 más 2, que es 4.
Así que ahora vamos a multiplicar 2 por 4, que es
8 y lo vamos a mostrar y luego vamos a comprobar
si soy mayor que 5. No, todavía tengo 2 años.
Entonces modificamos I para que ahora sea igual a 3 para
la siguiente iteración, y modificamos j para que sea igual a 4 más
2, que es 6.
Y luego, para la tercera
iteración del ciclo, multiplicamos I por J. Entonces decimos 3 por 6 y mostramos 18.
Antes de ejecutar la cuarta iteración, verificamos si I es mayor que 5.
No, son 4. Luego lo incrementamos, decimos que es 5. Es igual a 5, por lo que aún se ejecutará.
Luego haremos 32 y luego 50.
Así que esta es una declaración for. Desea ejecutar esto y ejecutarlo en el
navegador de código y jugar y cambiar las cosas.
Pero lo que estamos haciendo aquí es que estamos haciendo 3 cosas separadas en una sola línea de código.
Estamos inicializando la variable de control de bucle o cualquier otra variable.
Tenemos nuestra expresión booleana después de nuestro primer punto y coma, nuestra condición de salida.
Y luego estamos modificando la variable de control de bucle y cualquier otra variable que
queramos como última parte de la declaración for.
Entonces, para resumir lo que estamos haciendo, encontré este pequeño y
útil gráfico de un libro y quería mostrárselo. Esto resume todo.
Ese primer punto y coma inicializa la variable de control de bucle.
Después del primer punto y coma, estamos cumpliendo nuestra condición, nuestra expresión booleana.
Y luego, después del segundo punto
y coma, modificaremos esa variable de control de bucle. Y este es el ejemplo típico que ves.
Este es un ciclo de control de contador que comienza en 1 y llega hasta 10.
Entonces esto realmente se ejecutará 10 veces.
La clave está ahí menos que igual a 10. Entonces, verá los operadores relacionales como nuestras condiciones, al igual
que vimos a los operadores relacionales como nuestras condiciones en nuestra declaración if.
La clave aquí es que desea modificar esa variable de control de bucle o nunca saldrá.
Entonces, el conteo de más más es muy importante.
Y en lo que respecta al incremento previo o posterior, ya sea que ese más más esté antes de
la variable o
después de la variable, no tiene que preocuparse por
eso porque solo se incrementará o disminuirá después de la iteración del ciclo, por lo que no es así
' No importa si lo hace más más cuenta o cuenta más más.
Y también, de nuevo, dependiendo de la versión de c que esté ejecutando
para su compilador, es posible
que pueda declarar el recuento de variables dentro del bucle for o puede que tenga que
decir int count es igual a 1 o en count fuera del bucle for y luego inicialícelo en el primer punto y coma.
C99 agregó la inicialización y la declaración en la misma
parte del bucle for.
Pero así es básicamente como funciona el bucle for.
Ahora vayamos a un pequeño ejemplo, quiero mostrarte la flexibilidad del ciclo for.
Aquí hay un ejemplo en el que básicamente vamos a sumar algunos números enteros.
Y en este ejemplo, vamos a pedirle al usuario que ingrese una cantidad de enteros que desea sumar.
Vamos a almacenar eso en una variable llamada count.
Ahora vamos a tener un ciclo for que pasa
por todos esos dependiendo del número que ingresaron en iteraciones tantas veces.
Entonces aquí decimos 4, tenemos unsigned int, no tiene que estar unsigned para int
I es igual a 1. Estamos inicializando la variable de control de bucle.
Y luego decimos que si yo es menos que contar, ahí es cuando vamos a salir y luego
vamos a modificar el material del bucle más más yo.
Entonces esto va a funcionar. Nuevamente, el
1 al número que ingresó el usuario, 10 o 20.
Y todo lo que vamos a hacer es decir que suma es igual a suma más 1.
Ahora el ciclo for es tan poderoso porque el ciclo for
le permite modificar muchas variables.
Ni siquiera necesitamos poner esa suma más I igual en el cuerpo del bucle for.
Podemos ponerlo al final de la última declaración.
Entonces, además de incrementar I en 1, podemos decir que suma más es igual a I más más.
Así que hicimos todo en una sola línea de
código, y eso te muestra la flexibilidad. todo se debe a que podemos
modificar la variable en la propia instrucción for. No tenemos que tener esa línea de cuerpo.
Entonces, echemos un vistazo a este ejemplo en bloques de
código para mostrarle cómo puede manipularlo y ver cuál es el resultado.
Aquí está nuestro ejemplo que tuvimos en la conferencia. Quiero seguir adelante e intentar compilar esto.
Y cuando compile esto, notarás que tengo un error.
Dice que no puedo declarar mi variable dentro de mi declaración for. Esto se debe a que estoy ejecutando una versión
anterior del compilador c. Estoy ejecutando el C89.
Probablemente no tengas esto.
Pero para resolverlo, si alguna vez ve este tipo de error, todo lo
que tiene que eliminar fuera del ciclo for. Así que solo dice yo sin firmar.
Y luego, dentro del bucle for, lo
inicializas, algo como esto. Ahora intentemos compilar y solo
tengo que deshacerme de algunos de estos especificadores de formato.
Entonces, cuando compile con éxito y
ejecute este programa, verá cómo funciona el ciclo.
Me pedirá que ingrese los números enteros que quiero sumar. Si ingreso 5, sumará 1
2 3 4 y 5, que es 15.
Y lo que podríamos hacer para depurar esto es que podríamos agregar un corchete al
bucle for, y podríamos querer ver cuántas veces se ejecuta, podemos agregar una declaración
de impresión no necesariamente para depurarlo, sino solo ver qué está pasando , podríamos decir dentro del bucle.
Y esto nos dirá que el ciclo se ejecuta
5 veces porque se ejecutará I para contar.
Entonces, lo que quiero demostrar es cuántas veces se está ejecutando. Así que ahora, cuando
lo construya y lo ejecute, veré qué sucede en cada iteración.
Así que voy a decir 8.
Bucle interior, bucle interior, bucle interior, no agregué un salto de línea. Por lo que es difícil de leer,
pero el bucle interior se muestra 8 veces.
Y luego resumo cada uno de esos números dentro de los ciclos, por lo que la
respuesta es 36, 1 más 2 más 3 más 4 más 5 más 6 más 7 más 8.
Entonces puedes jugar con esto. Pero nuevamente, inicializamos nuestra
variable de control de bucle. Comprobamos la condición para salir. Saldremos una vez que presionemos lo
que ingresó el usuario. Si el usuario ingresó 8, vamos
a ejecutar 8 veces y luego tenemos que modificar I. Si no modificamos I aquí, tendrías un bucle para siempre.
Y lo que sucedería cuando ejecutara el programa,
se ejecutaría para siempre.
Entonces verá que después de ingresar el número, su programa nunca se cerrará.
Así que digamos que ingresamos 6, presiono enter, mire lo que está pasando,
solo imprimimos un bucle en el interior. Nunca es emocionante.
Es un bucle infinito. Entonces eso último es muy, muy importante. Siempre desea modificar su variable de control de bucle.
Y nuevamente, la variable de control de bucle determina la salida, en este caso I.
Entonces, el bucle for se usa bastante.
Es muy fácil de usar y te permite hacer 3 cosas diferentes dentro del bucle.
Inicialice la variable de control de bucle, verifique el control de
bucle de la variable para la condición de salida y luego modifique
esa variable de control de bucle.
Esas son 3 cosas que debe hacer en un bucle y puede hacer en una sola declaración.
Ahora permítanme hablar sobre el bucle infinito muy rápido.
Así que acabo de demostrar un bucle infinito. Aquí es donde nunca sales.
Y no tiene la obligación de poner ningún parámetro en la instrucción de bucle for.
De hecho, puedes escribir un bucle infinito a propósito.
La forma en que lo haría es simplemente poner el punto y coma allí.
Entonces tendrías un bucle for con 2 puntos y comas.
Si alguna vez ve eso, significa que está escribiendo un bucle infinito.
Ahora, por lo general, no desea tener
bucles infinitos, pero hay ocasiones porque la condición para continuar el bucle está ausente.
El ciclo continuará indefinidamente. A veces, esto es útil si está monitoreando datos.
Entonces, si está monitoreando datos, es posible que tenga algo allí.
Por lo general, cuando tiene un bucle para siempre, también suele tener
un sueño, que pausará la ejecución del programa, tal vez por un segundo, para que esté monitoreando algo.
El otro caso de uso en el que puede tener un bucle infinito es si está escuchando una conexión.
Entonces, si está esperando y está escuchando la conexión o si está tirando de algo
para ver algo, puede hacer eso.
Ahora, algunas personas argumentan que nunca debes tirar y nunca debes
escuchar, pero ese es otro argumento.
Ese es realmente el único caso para algunos bucles for que son infinitos.
Evite los bucles infinitos tanto como sea posible modificando esa variable de control de bucle.
Espero que esto haya sido de ayuda. Este es el bucle for.
Utilizaremos un ciclo for en uno de nuestros desafíos, para que nos familiaricemos más.
Gracias.