While vs do-while: cuándo usar cada uno
Clase 7 de 13 • Curso de Control de Flujo en C
Contenido del curso
Clase 7 de 13 • Curso de Control de Flujo en C
Contenido del curso
Víctor Guillermo Alarcón Aguirre
Brandon Argel Verdeja Domínguez
Reinaldo Mendoza
Edith Elizabeth Narváez Higuera
Daniel Enrique Astudillo Guzmán
Edith Elizabeth Narváez Higuera
Edith Elizabeth Narváez Higuera
Ricardo Celis
Fernando Jesús Núñez Valdez
Alejandro Urrea Giraldo
Edith Elizabeth Narváez Higuera
Ricardo Celis
Marcel Nahir Samur
Jesús Ignacio García Fernández
Juan Fernando Moyano Ramírez
Juan Fernando Moyano Ramírez
Edith Elizabeth Narváez Higuera
Jorge Varas
Oscar Jaramillo
Jesús Ignacio García Fernández
Natalia Hernández
Andrés Felipe Mosquera Hernández
Daniel Leonardo Lopez Valderrama
Gabriel Obregón
Erick Ricardo Camberos Cerecer
Leonardo de los angeles Espinoza Hernandez
Luis Lira
Carlos Lefin Henriquez
Cristian Blandon
José Alberto Marcos Laguna
Sandra Díaz
Edith Elizabeth Narváez Higuera
Jorge Varas
Cindy Johanna Herrera Parra
Marisol Ospina
Luz Mary Jimenez
Este meme siempre me recuerda la diferencia entre While y Do-While:
Jajajaja muy bueno xD
jajajajaja
Hola! Voy a dar mis ejemplos de la vida práctica para WHILE y DO WHILE tal como lo pide el prof. Soy novata en todo esto de la programación. Soy Arquitecta y en algunos proyectos que he estado hemos hecho automatización. Haré mi mejor esfuerzo. . . . . WHILE Un código que esté mandando a cada cierto tiempo la altura del nivel del agua de una cisterna. La condición sería que los datos sean capturados mientras estén dentro de un rango definido, y sólo cuando este rango no se cumpla, dejar de hacer dicho registro. . . DO WHILE Un código que encienda la iluminación completa de un auditorio, mientras que en dicho espacio se compruebe que haya al menos unas 20 personas. Sino sólo se encienden las luces de emergencia.
Excelenteeee muchas gracias :D
A tI!
excelente diagrama Edit!
Genial!
Como sugerencia, la explicación inicial de la diferencia entre while y for , podría estar unas clases más adelante. Las personas sin experiencia en programación no podrán establecer diferencias o similitudes con algo que no conocen (ciclo for). Esto podría generar confusiones.
Y si es posible con ejemplos prácticos y/o ejercicios. En la clase#28 del Curso Pensamiento Lógico se da una explicación breve: https://platzi.com/clases/1444-pensamiento-logico/15912-estructuras-de-control-y-palabras-reservadas/
Muchas gracias Ale y Edith por el feedback, lo tomaremos en cuenta!
A modo de resumen y pensando un poco en un caso de uso para diferenciar bien los bucles "while" y "do while", se me ocurre pensarlos en el caso de un mantenimiento preventivo y uno correctivo.
Supongamos que tengo un sensor que toma la temperatura de un procesador y llegado a cierto limite de temperatura muestra un msj de advertencia en pantalla, donde se puede leer la temperatura, y suena una alarma. y supongamos que este sensor comienza a realizar lecturas cada vez enciendo mi computadora y deja de funcionar cuando la apago.
Aquí tenemos 2 opciones, implementar un ciclo "while" para que solo se ejecuten estas advertencias y alarmas una vez alcanzado el limite establecido de temperatura, para así poder corregir el problema (Mantenimiento correctivo) O por otro lado, implementar un ciclo "do while" para que cada vez que inicio mi computadora se ejecuten dicha instrucciones. Uno podría pensar que tal vez es algo innecesario, sin embargo en casos en que la temperatura estuviera a niveles por debajo pero muy próximos al limite establecido, se podrían realizar acciones previas a que ocurra el problema, es decir, realizar acciones preventivas para evitar dicho problema (Mantenimiento preventivo) Espero que el ejemplo sea ilustrativo, y si estoy errado en mi lógica les pido siéntanse libres de corregirme.
Saludos!
Adivina un número que la máquina piensa
#include <stdio.h> #include <stdlib.h> #include <time.h> int main (void) { int numero; int numeroPensado; int intentos; long i = time(NULL); numeroPensado = i % 11 + 1; intentos = 0; printf ("He pensado un número del 1 al 10\n"); do { intentos++; printf ("¿cual dirás que es?\n"); scanf("%d", &numero); if (numero < numeroPensado) printf ("Mi número pensado es mayor que %d\n", numero); else if (numero > numeroPensado) printf ("Mi número pensado es menor que %d\n", numero); } while (numero != numeroPensado ); printf ("¡Enhorabuena! mi numero %d adivinado en %d intentos\n", numeroPensado, intentos); }
Salida
He pensado un número del 1 al 10 ¿cual dirás que es? 5 Mi número pensado es mayor que 5 ¿cual dirás que es? 7 Mi número pensado es menor que 7 ¿cual dirás que es? 6 ¡Enhorabuena! mi numero 6 adivinado en 3 intentos
Este es un proyecto muy interesante, lo intentare hacer por mi cuenta y te compartire el resultado.
Hola, ya he terminado mi version, este es el codigo:
#include <stdio.h> int main() { int numero_secreto = 17; int numero_intentos = 1; int numero_adivinado; printf("Hola, he pensado en un numero secreto \n"); printf("que numero crees que es?? "); scanf("%d",&numero_adivinado); do { if (numero_adivinado > numero_secreto) { printf("Lo siento, pero has apuntado muy alto el numero secreto no es %d, prueba otra vez \n", numero_adivinado); scanf("%d",&numero_adivinado); numero_intentos += 1; } else if (numero_adivinado < numero_secreto) { printf("El numero secreto no es tan pequeño, apunta mas alto: \n"); scanf("%d",&numero_adivinado); numero_intentos += 1; } } while (numero_adivinado != numero_secreto); printf("Felicitaciones, has acertado el numero secreto!!! \n"); printf("el numero total de intentos es: %d", numero_intentos); return 0; }
La diferencia entre WHILE y DO WHILE, es que W inicia ejecutando una comprobación (decisión), mientras que DW se inicia ejecutando código primero y luego comprobando (decisión). Como has dicho antes @ricardocelis, el código de WHILE podría no llegar a ejecutarse si la condición no se cumple, pero con el código DO WHILE al menos el código se ejecuta una vez.
Gracias
😂
La diferencia entre ambos bucles, es que el primero puede que nunca se ejecute, el segundo es que al menos se ejecutará una vez.
#include <stdio.h> int n = 20; int main() { do { printf(" n es igual a %d\n", n); n = n-1; } while (n > 10); printf("hemos salido del bucle porque n es igual o menor que 10"); return 0; }
#include <stdio.h> int n = 10; int main() { do { printf("n es igual a %d\n", n); n = n-1; } while (n>10); printf("hemos salido del bucle porque n es igual o menor que 10"); return 0; }
Desafío completado, ¡DoWhile is compiled successfully!
#include <stdio.h> int n = 1000; int main(){ do{ printf("n es igual a %d\n", n); n--; } while (n > 10); return 0; }```
📘Bucles en Programación
🔄 ¿Qué son los bucles?
🌀 WHILE
⏩ Se repite mientras la condición sea verdadera.
📍 Ejemplo: 🤖 Robot busca objetivo → sigue hasta encontrarlo.
🔹 Usos:
🔁 do-WHILE
⏩ Siempre ejecuta al menos una vez.
📍 Ejemplo: 🤖 Robot prueba sensores → si alguno falla, repite la prueba.
🔹 Uso clave:
➡️ FOR
⏩ Ideal cuando sabes cuántas veces repetir.
📍 Ejemplo: 📝 Calcular calificaciones de todos los estudiantes en una lista.
🔹 Uso clave:
que es iterar?
Hola @ERCC
Iterar se refiere a realizar una cierta acción varias veces.
Saludos!
En los loops en general el programación se le dice a iterar a hacer una acción un cierto número de veces, por ejemplo, en los bucles vas a encontrar que todos tienen la similitud de ejecutar la misma línea de código n veces, donde n es la cantidad que tú indiques.
El ciclo while me parece muy similar al addEventListener de JavaScript. ya que este ejecutara algo, siempre y cuando se detecte algun cambio. Que piensan ustedes?.
¡Hola!
No estoy de acuerdo... El ciclo while no "detecta" cambios ni es como un listener que está todo el tiempo pendiente de si un evento sucede para disparar una función (una única vez por evento).
El ciclo while evalúa una condición (como el ciclo while de JavaScript y de la mayoría de lenguajes) que, mientras sea verdadera, ejecutará el bloque de código (generalmente una cantidad de veces no conocida, hasta que la condición sea falsa).
Ahí dejo mi opinión :)
Si lo quieres comparar con un Listener, no sería parecido, sino que sería lo contrario. El Listener detecta un evento y cuando ocurre hace algo. Por el contrario, el ciclo While siempre está ejecutando el bloque de código dentro de la estructura y cuando detecta el cambio (la condición deja de ser verdadera) deja de ejecutar el código dentro de la estructura. Además, claro, de que el Listener no interrumpe el flujo de un programa, cosa que un ciclo sí hace (a menos de que se utilicen hilos, pero eso es otra historia).
Este ejemplo lo saque del Curso Herramientas del Pensamiento Lógico. Está en el apartado de Estructuras de Control. . E j e m p l o # 3 SACAR PROMEDIO DE CADA 5 CALIFICACIONES DADAS Explicación: La sentencia DO WHILE comienza con una acción, que es capturar una calificación, sumarla a la anterior y contabilizarla. Esta acción se hace repeitr mientras el numero de calificaciones capturadas sea igual o menor a 5 datos. Cuando sean 6 datos, es decir, hasta que es falsa la condición, realiza el promedio y se termina el código. En este ejemplo se acumulan datos capturados, se realiza la acción de sumarlos y contabilizarlos; y cuando ya no cumplan el criterio, finaliza. . . . S i n t á x i x : do { expressions; } while(expression) . . C ó d i g o : //promedioconta.c #include <stdio.h>
main() { int calif, conta=0, suma=0; float promedio;
do { printf("%s\n", ); scanf("%s\n", ); suma += calif; conta ++ } while(conta <=5); promedio = (float) suma/conta; printf("%s\n", ); return 0;
}
super
En doWhile se hace al menos una iteración.
Codigo reacomodado
#include <stdio.h>
int main() { int n = 10; do { printf("n es igual a %d\n", n); n = n-1; } while (n > 10); printf("hemos salido del bucle porque n es igual o menor que 10"); return 0; }
#include <stdio.h>
int n=17;
int main() {
do { printf("n es igual a %d \n", n); n=n-1; }while (n >10); printf("El ciclo ha terminado"); return 0;
}