¿Qué es un ciclo while y cómo se diferencia de un ciclo for?
El concepto de ciclos en programación es esencial para automatizar tareas repetitivas. En este contexto, el ciclo while juega un papel único. Mientras que el ciclo for se utiliza generalmente cuando se conoce el número de iteraciones antes de empezar, el ciclo while se ejecuta basándose en una condición que debe continuar siendo verdadera para que las repeticiones continúen. Este concepto se ilustra a la perfección con el ejemplo de un robot patrullero, que utiliza el ciclo while para operar hasta que detecte un peligro. Aquí el ciclo actúa "mientras" no haya peligro, lo que lo hace muy útil para situaciones donde las condiciones de parada no están predefinidas.
¿Cómo se escribe un ciclo while en C#?
Escribir un ciclo while es bastante sencillo. Este ciclo ejecuta un conjunto de sentencias siempre y cuando una condición dada sea verdadera. Puede emplearse para mantener un sistema en operación constante hasta que alguna variable cambie su estado o condición.
Ejemplo básico de un ciclo while:
bool continuar =true;while(continuar){ Console.WriteLine("Hello world forever!");}
En este ejemplo, el mensaje "Hello world forever!" se imprimirá indefinidamente, ya que la condición continuar es siempre verdadera.
¿Cómo manipular un ciclo while con condicionales?
Para que un ciclo while sea verdaderamente funcional en aplicaciones prácticas, como por ejemplo en sistemas que requieren intervención del usuario, es esencial manipular control y especialmente la condición de parada. Esto se logra generalmente utilizando condicionales.
Ejemplo con intervención del usuario:
bool continuar =true;while(continuar){ Console.WriteLine("Do you wish to keep the software running? Write 1 if yes, 0 if no.");int keepGoing = Convert.ToInt16(Console.ReadLine());if(keepGoing ==1){ Console.WriteLine("The software will keep running.");}elseif(keepGoing ==0){ Console.WriteLine("This is the last time the software is running."); continuar =false;}else{ Console.WriteLine("Invalid input, try again.");}}
En este código se observa cómo se pide al usuario si quiere continuar con la ejecución. Dependiendo de la respuesta, el ciclo seguirá o terminará.
¿Qué es un ciclo do-while y cuándo utilizarlo?
El ciclo do-while asegura que el bloque de código se ejecute al menos una vez. Esto es particularmente útil cuando la condición de entrada no puede ser determinada antes de la primera ejecución del ciclo.
Ejemplo de un ciclo do-while:
bool continuar =false;do{ Console.WriteLine("Do you wish to keep the software running? Yes(1), No(0)");int keepGoing = Convert.ToInt16(Console.ReadLine());if(keepGoing ==1){ Console.WriteLine("The software will keep running."); continuar =true;}elseif(keepGoing ==0){ Console.WriteLine("This is the last time the software is running."); continuar =false;}}while(continuar);
Este fragmento de código garantiza que el usuario vea el mensaje al menos una vez, esencialmente preguntando por su preferencia antes de evaluar la condición del ciclo.
Práctica y exploración personal
Para profundizar en el uso práctico de estos ciclos, intenta imaginar y crear ejemplos desde cero. Simula una aplicación de sensores que generan valores de 0 y 1 para decidir la continuación de un proceso. Trabajar en estos ejercicios fortalecerá tu comprensión y habilidad para aplicar estos conceptos de manera efectiva en tus proyectos.
Recuerda que el uso correcto del ciclo adecuado es clave en la eficiencia de tu programa, ya sea para gestionar procesos repetitivos con condiciones conocidas como con un for, o situaciones más inciertas y condicionales que aprovechan el while. ¡Sigue practicando y descubre la potencia de estos ciclos en C#!
Grosso modo
for
Se utilizará cuando se conozca la cantidad de veces
que se va a repetir nuestro bloque de código.
while
Es conveniente utilizarlo cuando
la cantidad de veces a repetir el ciclo
dependa de un factor difícil de controlar
o que llegará en un momento inesperado.
do-while
Lo emplearemos para asegurar que
nuestro ciclo se ejecute al menos una vez
y que además las condiciones del problema
sean similares a las de los problemas en las que
se emplea while
Hasta el michu aprende con Platzi💚💚
Ese michu ya es un experto en C#. Ricardo le da clases privadas, que envidia!!🥴
michu++;
Un clásico!
FOR
Un ciclo FOR y un ciclo DO_WHILE pueden funcionar de manera similar, dependiendo que es lo que debe realizar y la manera de usar los ciclos.
Utilizando el programa del ejercicio pasado de la calculadora, que funciona por medio de if y else if, coloque la consulta al usuario del número de veces que desea realizar una operación matemática y en base a su respuesta, coloque un for que nos ayuda a realizar y repetir las operaciones deseadas por el usuario.
staticvoidMain(string[] args){Console.WriteLine("Bienvenido a la calculadora en consola");//Indicar el número de veces que desea realizar una operación matemáticaConsole.WriteLine("¿Cuantas operaciones matemáticas desea realizar?"); int numOp = int.Parse(Console.ReadLine());//Mientras la variable del "contador" sea menor o igual al número de veces que el usuario desea realizar operaciones "numOp", el ciclo for permitira realizar las operaciones.for(int contador =1; contador <= numOp; contador++){Console.WriteLine("------------------------");Console.WriteLine("OPERACIÓN #{0}", contador);Console.WriteLine("\nPrimero elige, ¿Qué tipo de operación quiere realizar?");Console.WriteLine("Estas son las opciones:");Console.WriteLine(" + (Suma) \n - (Resta) \n * (Multiplicación) \n / (División) \n % (Residuo) \n");Console.Write("Teclea el simbolo de la operación que quieres realizar: "); char opcion = char.Parse(Console.ReadLine());if(opcion =='+'|| opcion =='-'|| opcion =='*'|| opcion =='/'|| opcion =='%'){Console.WriteLine($"({opcion}) Opción valida");//return;}else{Console.Write("Opción no valida");return;}Console.Write("\nTeclee el primer valor (entero o decimal): "); double valor1 = double.Parse(Console.ReadLine());Console.Write("Teclee el segundo valor (entero o decimal): "); double valor2 = double.Parse(Console.ReadLine()); double resultado =0;if(opcion =='+'){ resultado = valor1 + valor2;}elseif(opcion =='-'){ resultado = valor1 - valor2;}elseif(opcion =='*'){ resultado = valor1 * valor2;}elseif(opcion =='/'){ resultado = valor1 / valor2;}elseif(opcion =='%'){ resultado = valor1 % valor2;}Console.WriteLine($"\nLa operación y resultado serian: \n {valor1} {opcion} {valor2} = {resultado} \n");}//Se indicara el número de operaciones realizadas y se terminara el programa.Console.WriteLine("Se realizaron las {0} operaciones.", numOp);Console.WriteLine("Fin del programa.");}
algo a tener en cuenta cuando programemos es siempre tener buenas practicas de programación, desde la codificación, reutilización de código, documentación, manejo de patrones de diseño, manejo de errores, etc.
Les comparto un post de patrones de diseño que esta en diferentes lenguajes de programación entre esos C# https://refactoring.guru/es/design-patterns
//POR DEFECTObool modoPatrulla =false;bool modoAtaque =false;bool modoPersecución =false;//CICLO DO WHILEdo{Console.WriteLine("No hay intrusos a la vista, 1 si ves alguno, 0 si no"); int respuesta = int.Parse(Console.ReadLine());if(respuesta==1){Console.WriteLine("¡INTRUSOS A LA VISTA! ¡PROCEDIENDO A ATACAR!");//CICLO FOR LIMITADO DE ATAQUEfor(int ataque =0; ataque <=10; ataque++){ modoPatrulla =false; modoAtaque =true; modoPersecución =true;Console.WriteLine("¡DISPARO "+ataque+"!");System.Threading.Thread.Sleep(100);}while(modoPersecución =true){//CICLO FOR INFINITO DE PERSECUCIÓNfor(int ataque =0; ataque <= ataque; ataque++){Console.WriteLine("¡PERSIGUIENDO AL INTRUSO # "+ataque+"!");System.Threading.Thread.Sleep(100);}}}elseif(respuesta==0){Console.WriteLine("Muy bien, no hay intrusos"); modoPatrulla =true; modoAtaque =false;}else{Console.WriteLine("¿Qué? comando inválido, intenta de nuevo"); modoPatrulla =true; modoAtaque =false;}}while(modoPatrulla);
DO_WHILE
Utilizando el programa del ejercicio pasado de la calculadora, que funciona por medio de if y else if, coloque un do_while para que el programa pueda ejecutarse una vez, al final, el programa le pregunta al usuario si desea realizar otra operación, si es así, volverá al inicio del programa para repetir el programa hasta que el usuario indique que ya no quiere realizar más operaciones.
staticvoidMain(string[] args){Console.WriteLine("Bienvenido a la calculadora en consola");//La variable "repetir", ayudara a la condición do_while para que pueda funcionar. char repetir;//La variable "contador", llevara la cuenta de cuantas operaciones realizo el usuario. int contador =0;//se inicia el do, permitiendo que el programa se ejecute.do{Console.WriteLine("\nPrimero elige, ¿Qué tipo de operación quiere realizar?");Console.WriteLine("Estas son las opciones:");Console.WriteLine(" + (Suma) \n - (Resta) \n * (Multiplicación) \n / (División) \n % (Residuo) \n");Console.Write("Teclea el simbolo de la operación que quieres realizar: "); char opcion = char.Parse(Console.ReadLine());if(opcion =='+'|| opcion =='-'|| opcion =='*'|| opcion =='/'|| opcion =='%'){Console.WriteLine($"({opcion}) Opción valida");//return;}else{Console.Write("Opción no valida");return;}Console.Write("\nTeclee el primer valor (entero o decimal): "); double valor1 = double.Parse(Console.ReadLine());Console.Write("Teclee el segundo valor (entero o decimal): "); double valor2 = double.Parse(Console.ReadLine()); double resultado =0;if(opcion =='+'){ resultado = valor1 + valor2;}elseif(opcion =='-'){ resultado = valor1 - valor2;}elseif(opcion =='*'){ resultado = valor1 * valor2;}elseif(opcion =='/'){ resultado = valor1 / valor2;}elseif(opcion =='%'){ resultado = valor1 % valor2;}//Cada vez que se haya realizado una operación, la variable "contador" aumentara un uno. contador++;Console.WriteLine($"\nLa operación y resultado serian: \n {valor1} {opcion} {valor2} = {resultado}");//Se le pregunta al usuario si desea realizar otra operación.Console.Write("\n¿Desea realizar otra operación matemática? (s/n): ");//su respuesta se guardara en la variable repetir repetir = char.Parse(Console.ReadLine());//si la respuesta del usuario es igual a 's', el programa se repetira.}while(repetir =='s');//cuando el usuario ya no desee realizar más operaciones, el programa indica el número de operaciones que se realizaron y se termina el programa.Console.WriteLine("\nSe realizaron {0} operaciones.", contador);Console.WriteLine("Fin del programa.");}
genial calculadora me ayudo para entender ciertas cosas , sin embargo al principio cuando me pide un operador , y si escribo digamos un 8 (opcion no valida) muestra el mensaje de opcion no valida pero no retorna , solo termina el programa
WHILE
Utilizando el programa del ejercicio pasado de la calculadora, que funciona por medio de if y else if, coloque la consulta al usuario del número de veces que desea realizar una operación matemática y en base a su respuesta, coloque un while que nos ayuda a realizar y repetir las operaciones deseadas por el usuario.
staticvoidMain(string[] args){Console.WriteLine("Bienvenido a la calculadora en consola");//Indicar el número de veces que desea realizar una operación matemáticaConsole.WriteLine("¿Cuantas operaciones matemáticas desea realizar?"); int numOp = int.Parse(Console.ReadLine());//Contador que nos ayudara a comparar el número de operaciones que desea realizar el usuario int contador =1;//Mientras la variable del "contador" sea menor o igual al número de veces que el usuario desea realizar operaciones "numOp", el while permitira realizar las operaciones.while(contador <= numOp){Console.WriteLine("------------------------");Console.WriteLine("OPERACIÓN #{0}", contador);Console.WriteLine("\nPrimero elige, ¿Qué tipo de operación quiere realizar?");Console.WriteLine("Estas son las opciones:");Console.WriteLine(" + (Suma) \n - (Resta) \n * (Multiplicación) \n / (División) \n % (Residuo) \n");Console.Write("Teclea el simbolo de la operación que quieres realizar: "); char opcion = char.Parse(Console.ReadLine());if(opcion =='+'|| opcion =='-'|| opcion =='*'|| opcion =='/'|| opcion =='%'){Console.WriteLine($"({opcion}) Opción valida");//return;}else{Console.Write("Opción no valida");return;}Console.Write("\nTeclee el primer valor (entero o decimal): "); double valor1 = double.Parse(Console.ReadLine());Console.Write("Teclee el segundo valor (entero o decimal): "); double valor2 = double.Parse(Console.ReadLine()); double resultado =0;if(opcion =='+'){ resultado = valor1 + valor2;}elseif(opcion =='-'){ resultado = valor1 - valor2;}elseif(opcion =='*'){ resultado = valor1 * valor2;}elseif(opcion =='/'){ resultado = valor1 / valor2;}elseif(opcion =='%'){ resultado = valor1 % valor2;}//Cada vez que se haya realizado una operación, la variable "contador" aumentara un uno. contador++;Console.WriteLine($"\nLa operación y resultado serian: \n {valor1} {opcion} {valor2} = {resultado} \n");}//Se indicara el número de operaciones realizadas y se terminara el programa.Console.WriteLine("Se realizaron las {0} operaciones.", numOp);Console.WriteLine("Fin del programa.");
esta genial para calcular potencias
Con esta clase, pude resolver los ejercicios de la U.
Gracias.
Mañana tengo clase en la que explicaran del while en la uni y estoy aqui para estar preparado xD
FOR: El bucle for ejecuta una instrucción o un bloque de instrucciones repetidamente un número finito o conocido de veces, cumplido el numero de iteraciones la expresión se evalúa como false.
WHILE: La instrucción while ejecuta una instrucción o un bloque de instrucciones repetidamente hasta que una expresión especificada se evalúa como false. En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca como verdadera en el momento en que la condición se convierte en falsa el ciclo termina.
DO WHILE: Su diferencia básica con el ciclo while es que la condición es realizada al finalizar el ciclo, es decir las instrucciones se ejecutan por lo menos una vez porque primero ejecuta las instrucciones y al final evalúa la condición; También se le conoce como ciclo de condición de salida.
Logré programar un ciclo de combate exitosamente usando el ciclo while.
(El único problema es que el enemigo siempre ataca al mismo personaje y además la vida no se actualiza en tiempo real por lo que el jugador no puede morir, pero por lo menos el combate acaba cuando muere el enemigo).
//Stats Base//Joelint hpJoel =20;int atkJoel =5;int wpnJoel =7;int spdJoel =7;//Londerint hpLonder =15;int atkLonder =5;int spdLonder =6;//Kumaint hpKuma =10;int atkKuma =7;int spdKuma =10;//Kodaint hpKoda =15;int atkKoda =3;int spdKoda =7;Random rnd =newRandom();int hpEnemy = rnd.Next(7,50);int spdEnemy = rnd.Next(1,10);int atkEnemy = rnd.Next(1,5);Console.WriteLine("COMIENZA EL COMBATE");System.Threading.Thread.Sleep(2000);Console.WriteLine($"El enemigo tiene {hpEnemy} de vida y {spdEnemy} de velocidad");int currentEnemyHp = hpEnemy;if(spdJoel >= spdEnemy){do{//Este es el Turno de JoelSystem.Threading.Thread.Sleep(1500);Console.WriteLine("Es el Turno de Joel, elige tu movimiento");System.Threading.Thread.Sleep(1500);Console.WriteLine("1. Ataque \n2. Arma \n3. Huir"); int atkActionJoel = int.Parse(Console.ReadLine());switch(atkActionJoel){case1:Console.WriteLine("Joel realiza un ataque");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Infliges {atkJoel} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkJoel;break;case2:Console.WriteLine("Joel realiza un ataque con su Arma");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Infliges {wpnJoel} de daño"); currentEnemyHp = hpEnemy = hpEnemy - wpnJoel;break;case3: int fleeNumber = rnd.Next(1,10);Console.WriteLine("Intentas Huir");System.Threading.Thread.Sleep(1500);if(fleeNumber <=5){Console.WriteLine("Has Logrado Huir Exitosamente");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}elseConsole.WriteLine("El combate continúa");break;default:Console.WriteLine("Inserte un número válido");break;}if(currentEnemyHp <=0){System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}//Este es el primer turno del Enemigo en el ciclo de combateSystem.Threading.Thread.Sleep(2000);Console.WriteLine("Es el turno del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo va a atacar, elige tu acción");System.Threading.Thread.Sleep(1500);Console.WriteLine("1. Bloquear (Recibirás la mitad del daño)\n2. Desviar (Puede que desviés el ataque, niegues el daño y devuelvas un ataque potenciado)"); int defAction = int.Parse(Console.ReadLine());switch(defAction){case1:Console.WriteLine("Bloqueas el ataque del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");break;case2:Console.WriteLine("Intentas Desviar el ataque enemigo"); int parryChance = rnd.Next(1,2);if(parryChance ==1){System.Threading.Thread.Sleep(1500);Console.WriteLine("Desviaste el Ataque del enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes 0 de daño e inflinjes {atkJoel * 2} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkJoel *2;}else{System.Threading.Thread.Sleep(1500);Console.WriteLine("El Desvío no tuvo éxito");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");}break;}if(currentEnemyHp <=0){System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}//Este es el Turno de LonderSystem.Threading.Thread.Sleep(1500);Console.WriteLine("Es el Turno de Londer, elige tu movimiento");Console.WriteLine("1. Ataque \n2. Huir"); int atkActionLonder = int.Parse(Console.ReadLine());switch(atkActionLonder){case1:Console.WriteLine("Londer realiza un ataque");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Infliges {atkLonder} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkLonder;break;case2: int fleeNumber = rnd.Next(1,10);Console.WriteLine("Intentas Huir");System.Threading.Thread.Sleep(1500);if(fleeNumber <=5){Console.WriteLine("Has Logrado Huir Exitosamente");Environment.Exit(0);}elseConsole.WriteLine("El combate continúa");break;default:Console.WriteLine("Inserte un número válido");break;}if(currentEnemyHp <=0){System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}// Este es el segundo turno del enemigo en el ciclo de combateSystem.Threading.Thread.Sleep(2000);Console.WriteLine("Es el turno del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo va a atacar, elige tu acción");System.Threading.Thread.Sleep(1500);Console.WriteLine("1. Bloquear (Recibirás la mitad del daño)\n2. Desviar (Puede que desviés el ataque, niegues el daño y devuelvas un ataque potenciado)"); int defAction2 = int.Parse(Console.ReadLine());switch(defAction2){case1:Console.WriteLine("Bloqueas el ataque del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");break;case2:Console.WriteLine("Intentas Desviar el ataque enemigo"); int parryChance = rnd.Next(1,2);if(parryChance ==1){System.Threading.Thread.Sleep(1500);Console.WriteLine("Desviaste el Ataque del enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes 0 de daño e inflinjes {atkJoel * 2} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkJoel *2;if(currentEnemyHp <=0){Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}}else{System.Threading.Thread.Sleep(1500);Console.WriteLine("El Desvío no tuvo éxito");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");}break;}}while(currentEnemyHp >0);}else{do{//Este es el primer turno del enemigo en el ciclo de combateSystem.Threading.Thread.Sleep(1500);Console.WriteLine("Es el turno del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo va a atacar, elige tu acción");System.Threading.Thread.Sleep(1500);Console.WriteLine("1. Bloquear (Recibirás la mitad del daño)\n2. Desviar (Puede que desviés el ataque, niegues el daño y devuelvas un ataque potenciado)"); int defAction = int.Parse(Console.ReadLine());switch(defAction){case1:Console.WriteLine("Bloqueas el ataque del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");break;case2:Console.WriteLine("Intentas Desviar el ataque enemigo"); int parryChance = rnd.Next(1,2);if(parryChance ==1){System.Threading.Thread.Sleep(1500);Console.WriteLine("Desviaste el Ataque del enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes 0 de daño e inflinjes {atkJoel * 2} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkJoel *2;}else{System.Threading.Thread.Sleep(1500);Console.WriteLine("El Desvío no tuvo éxito");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");}break;}if(currentEnemyHp <=0){System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}//Este es el turno de JoelSystem.Threading.Thread.Sleep(1500);Console.WriteLine("Es el Turno de Joel, elige tu movimiento");System.Threading.Thread.Sleep(1500);Console.WriteLine("1. Ataque \n2. Arma \n3. Huir"); int atkActionJoel = int.Parse(Console.ReadLine());switch(atkActionJoel){case1:Console.WriteLine("Joel realiza un ataque");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Infliges {atkJoel} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkJoel;break;case2:Console.WriteLine("Joel realiza un ataque con su Arma");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Infliges {wpnJoel} de daño"); currentEnemyHp = hpEnemy = hpEnemy - wpnJoel;break;case3: int fleeNumber = rnd.Next(1,10);Console.WriteLine("Intentas Huir");System.Threading.Thread.Sleep(1500);if(fleeNumber <=5){Console.WriteLine("Has Logrado Huir Exitosamente");Environment.Exit(0);}elseConsole.WriteLine("El combate continúa");break;default:Console.WriteLine("Inserte un número válido");break;}if(currentEnemyHp <=0){System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}//Este es el segundo turno del enemigo en el ciclo de combateSystem.Threading.Thread.Sleep(2000);Console.WriteLine("Es el turno del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo va a atacar, elige tu acción");System.Threading.Thread.Sleep(1500);Console.WriteLine("1. Bloquear (Recibirás la mitad del daño)\n2. Desviar (Puede que desviés el ataque, niegues el daño y devuelvas un ataque potenciado)"); int defAction2 = int.Parse(Console.ReadLine());switch(defAction2){case1:Console.WriteLine("Bloqueas el ataque del Enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");break;case2:Console.WriteLine("Intentas Desviar el ataque enemigo"); int parryChance = rnd.Next(1,2);if(parryChance ==1){System.Threading.Thread.Sleep(1500);Console.WriteLine("Desviaste el Ataque del enemigo");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes 0 de daño e inflinjes {atkJoel * 2} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkJoel *2;}else{System.Threading.Thread.Sleep(1500);Console.WriteLine("El Desvío no tuvo éxito");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Recibes {atkEnemy} de daño");}break;}if(currentEnemyHp <=0){System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}//Este es el turno de LonderSystem.Threading.Thread.Sleep(1500);Console.WriteLine("Es el Turno de Londer, elige tu movimiento");System.Threading.Thread.Sleep(1500);Console.WriteLine("1. Ataque \n2. Huir"); int atkActionLonder = int.Parse(Console.ReadLine());switch(atkActionLonder){case1:Console.WriteLine("Londer realiza un ataque");System.Threading.Thread.Sleep(1500);Console.WriteLine($"Infliges {atkLonder} de daño"); currentEnemyHp = hpEnemy = hpEnemy - atkLonder;break;case2: int fleeNumber = rnd.Next(1,10);Console.WriteLine("Intentas Huir");System.Threading.Thread.Sleep(1500);if(fleeNumber <=5){Console.WriteLine("Has Logrado Huir Exitosamente");Environment.Exit(0);}elseConsole.WriteLine("El combate continúa");break;default:Console.WriteLine("Inserte un número válido");break;}if(currentEnemyHp <=0){System.Threading.Thread.Sleep(1500);Console.WriteLine("El enemigo ha muerto");System.Threading.Thread.Sleep(1500);Console.WriteLine("El combate ha terminado");System.Threading.Thread.Sleep(1500);Environment.Exit(0);}else{System.Threading.Thread.Sleep(1500);Console.WriteLine($"El enemigo tiene {currentEnemyHp} de vida");}}while(currentEnemyHp >0);Console.WriteLine("El combate ha terminado");}
for:
este ciclo se utiliza cuando se conoce el número de veces que un proceso debe realizarse.
Si se conoce el número de alumnos que una escuela tiene, será posible entonces utilizar el for para promediar el puntaje obtenido para cada materia para cada alumno.
while:
este ciclo se utiliza para mantener un proceso mientras una condición se cumple.
Si los sensores de una casa inteligente identifican la presencia de un habitante, encenderá las luces de la habitación en la que se encuentre mientras permanezca en ese lugar.
doWhile
Este ciclo se utiliza para comprobar una condición y, una vez comprobada, realizar un proceso mientras dicha condición es cumplida.
Una aspiradora inteligente debe limpiar por lo menos una vez al día esté limpio o no. Por lo que primero tiene que evaluar si el lugar está sucio para disponerse a limpiar, y siempre lo hará por lo menos una vez y lo dejará de hacer hasta que esté limpio por completo.
El gato le dio un plus a la clase jaja
for
se utiliza cuando se sabe cuantas veces queremos que se ejecute el programa
while
se utiliza cuando no sabemos cuantas veces se debe ejecutar el programa o su ejecución depende de un factor externo
do while
se utiliza cuando queremos que el programa se ejecute al menos una vez independientemente de si la condición se cumpla o no
Hasta ahora me ha gustado este curso de introducción a C#
For: para cuando se cuantas veces quiero ejecutar el ciclo.
While: para cuando no se cuantas veces quiero ejecutar el ciclo.
Do while: para cuando no se cuantas veces quiero ejecutar el ciclo pero quisiera ejecutarlo al menos una vez antes de llegar a la condicion.
en qué momento se determina que si continueSoftwareExecution es false se tiene que acabar el código?
While siempre verifica la condición antes de hacer una nueva iteración, al momento de que ponga "0" como valor, cambia el booleano a "False" y en la siguiente iteración se vería como
while("False"==true)
nótese que comente el valor de la variable en en el while en lugar del nombre de la variable.
Ejercicio de while.
Programa que solicita contraseña mientras no sea la correcta y si lo acierta termina.
int numero =1;while(numero<10){Console.WriteLine($"{numero}"); numero++;}
Ejercicio de do while.
Programa que solicita contraseña mientras no sea la correcta y si lo acierta termina la ejecución.
do{Console.WriteLine("Ingrese la contrasenia válida: "); contraseniaUsuario =Console.ReadLine();}while(contrasenia!=contraseniaUsuario);Console.WriteLine("Contrasenia correcta.");
for: lo usaré cuando quiero realizar un ciclo por un determinado numero de veces, es decir que entre al ciclo un determinado numero de veces que yo indique.
while: lo usaré cuando quiero que entre al ciclo siempre que una condicion sea dada, aqui no hay un numero de veces que itere, si no que dependerá de una condición.
Do while: lo usaré como en el ciclo whiel, solo que aqui entrará al ciclo al menos una vez, y después comprobará si la condición se cumple para olver a entrar al cilco.