FIMEE-ELECTRÓNICA, UNICA
Estructuras repetitivas infinita hacer mientras
(do - while)
La estructura do while es otra estructura repetitiva del lenguaje C, la cual ejecuta al menos una vez su bloque repetitivo, a diferencia del while o del for que podían no ejecutar el bloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while o del for que está en la parte superior.
Representación gráfica:

El bloque de operaciones se repite MIENTRAS la condición sea Verdadera.
Si la condición retorna Falso el ciclo se detiene. En C, todos los ciclos repiten por verdadero y cortan por falso.
Es importante analizar y ver que las operaciones se ejecutan como mínimo una vez.
​
Problema 1:
Escribir un programa que solicite la carga de un número entre 0 y 999, y nos muestre un mensaje de cuántos dígitos tiene el mismo. Finalizar el programa cuando se cargue el valor 0.
Diagrama de flujo:
​

#include <stdio.h>
int main() {
int valor;
do {
printf("Ingrese un valor entre 0 y 999 (0 finaliza): ");
scanf("%i", &valor);
if (valor >= 100) {
printf("Tiene 3 digitos.");
} else if (valor >= 10) {
printf("Tiene 2 digitos.");
} else {
printf("Tiene 1 digito.");
}
printf("\n");
} while (valor != 0);
return 0;
}
Es una variante especial del bucle while. Al contrario que el bucle while, que comprueba la condición antes de entrar en el bucle, el bucle do - while la evalúa al final del bucle. Esto implica que el bucle se ejecutará al menos una vez.
​
El uso de do - while es muy habitual en los menús de introducción de datos por parte de un usuario.
-
Al menos una vez el usuario tendrá que introducir los datos
-
Si se detecta un error, se vuelven a solicitar
EJEMPLOS
#include <iostream>
using namespace std;
int main()
{
int mes;
do
{
cout << "Dame el mes: (1, 2, ..., 12): ";
cin >> mes;
if (mes < 1 || mes > 12)
cout << "El valor introducido no es válido.\n";
}
while (mes < 1 || mes > 12);
if (mes == 1 || mes == 3 || mes == 5 || mes == 7 ||
mes == 8 || mes == 10 || mes == 12)
cout << "El mes tiene 31 dias.\n";
else if (mes == 2)
cout << "El mes tiene 28 o 29 dias.\n";
else if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
cout << "El mes tiene 30 dias.\n";
else
cout << "¡Imposible!\n";
}
#include <iostream>
using namespace std;
int Opcion, n, c, suma;
int main() {
do {
cout << "MENU\n";
cout << "1.- Suma de los n primeros términos\n";
cout << "2.- Suma de los n primeros términos impares\n";
cout << "3.- Suma de los n primeros términos pares\n";
cout << "4.- Suma de los n primeros términos de la serie\n";
cout << "Ingrese una opcion <> 0: ";
cin >> Opcion;
switch (Opcion) {
case 1:
cout << "1.- Suma de los n primeros términos \n";
cout << "--------------------------------------------\n";
// Tu lógica para la suma de los n primeros términos iría aquí
cout << "Implementa la lógica para la suma de los n primeros términos\n";
cout << endl;
break;
case 2:
cout << "2.- Suma de los n primeros términos impares \n";
cout << "--------------------------------------------\n";
cout << "Ingrese el valor del n-ésimo término: ";
cin >> n;
c = 0;
suma = 0;
while (c < n) {
c = c + 1; // c++;
suma = suma + (2 * c - 1);
cout << "La suma de los " << c << " es: " << suma << endl;
}
cout << endl;
break;
case 3:
cout << "3.- Suma de los n primeros términos pares \n";
cout << "--------------------------------------------\n";
// Tu lógica para la suma de los n primeros términos pares iría aquí
cout << "Implementa la lógica para la suma de los n primeros términos pares\n";
cout << endl;
break;
case 4:
cout << "4.- Suma de los n primeros términos de la serie \n";
cout << "--------------------------------------------\n";
cout << "Ingrese el valor del n-ésimo término: ";
cin >> n;
c = 0;
suma = 0;
while (c < n) {
c = c + 1; // c++;
suma = suma + c; // Puedes ajustar la fórmula según tu serie
cout << "La suma de los " << c << " es: " << suma << endl;
}
cout << endl;
break;
default:
cout << "Opcion no valida." << endl;
} // FIN DEL SWITCH
} while (Opcion != 0); // FIN DEL DO WHILE
return 0;
}
Case4: factorial
#include <iostream>
using namespace std;
int Opcion, n, c, factorial;
int main() {
do {
cout << "MENU\n";
cout << "1.- Suma de los n primeros términos\n";
cout << "2.- Suma de los n primeros términos impares\n";
cout << "3.- Suma de los n primeros términos pares\n";
cout << "4.- Factorial del número ingresado\n";
cout << "Ingrese una opcion <> 0: ";
cin >> Opcion;
switch (Opcion) {
case 1:
cout << "1.- Suma de los n primeros términos \n";
cout << "--------------------------------------------\n";
// Tu lógica para la suma de los n primeros términos iría aquí
cout << "Implementa la lógica para la suma de los n primeros términos\n";
cout << endl;
break;
case 2:
cout << "2.- Suma de los n primeros términos impares \n";
cout << "--------------------------------------------\n";
cout << "Ingrese el valor del n-ésimo término: ";
cin >> n;
c = 0;
factorial = 1;
while (c < n) {
c = c + 1; // c++;
factorial = factorial * (2 * c - 1);
cout << "El factorial de los " << c << " es: " << factorial << endl;
}
cout << endl;
break;
case 3:
cout << "3.- Suma de los n primeros términos pares \n";
cout << "--------------------------------------------\n";
// Tu lógica para la suma de los n primeros términos pares iría aquí
cout << "Implementa la lógica para la suma de los n primeros términos pares\n";
cout << endl;
break;
case 4:
cout << "4.- Factorial del número ingresado \n";
cout << "--------------------------------------------\n";
cout << "Ingrese el valor del número para calcular el factorial: ";
cin >> n;
c = 1;
factorial = 1;
while (c <= n) {
factorial = factorial * c;
c = c + 1; // c++;
}
cout << "El factorial de " << n << " es: " << factorial << endl;
cout << endl;
break;
default:
cout << "Opcion no valida." << endl;
} // FIN DEL SWITCH
} while (Opcion != 0); // FIN DEL DO WHILE
return 0;
}