[Tutorial C++] II.3 - Condiciones y bucles

Ver el tema anterior Ver el tema siguiente Ir abajo

[Tutorial C++] II.3 - Condiciones y bucles

Mensaje  HarZe el Sáb Jul 03, 2010 10:50 pm

Condiciones

En el tema de condiciones, prácticamente está todo explicado en el tutorial de condiciones de C, pero aquí haré una revisión rápida de lo más importante:
Código:
if (valor_logico) {
    sentencias_a_ejecutar_si_es_TRUE
}
else {
    sentencias_a_ejecutar_si_es_FALSE
}
Sólo debes tener en cuenta los operadores lógicos del tutorial anterior para condicionar el valor lógico del if; y que puedes "anidar", es decir, poner condiciones dentro de condiciones. No hay límites para anidar, así que los límites los pones tú.

En caso de que tengas una condición sencilla, puedes recurrir al operador condicional ternario:
Código:
valor_logico ? {
    sentencias_a_ejecutar_si_es_TRUE
}    :    {
    sentencias_a_ejecutar_si_es_FALSE
}

Menús (condiciones múltiples)

Simplemente evalúa más de dos posibilidades para una condición, perfecto para un menú con muchas opciones. Todo esto se efectúa a través de las sentencias switch, case y break.
Como un esquema podemos decir que:
Código:
int c;
switch (c) {
    case 0:
    case 1:
    case 2:
        std::cout << "El valor es menor que 3";
    break;
    case 3:
        std::cout << "El valor es 3";
    break;
    default:
        std::cout << "El valor es negativo o mayor que 3";
}
En resumen, ponemos una variable como condición (c) y analizamos cada caso. Una vez iniciado el bloque switch, se ejecutará el código a partir del case cuyo valor coincida con el de c y hasta el primer break que se encuentre o hasta el final si no los hay. En caso de que ningún case coincida con c, se leerá desde default, si es que hay alguno, pues es opcional.

Bucles

Primero recomiendo leer el tutorial de bucles en C y al igual que con las condiciones, haré una revisión objetiva del tema:

El bucle más simple es while, traducido literalmente quiere decir "mientras", y tiene sentido, ya que su funcionamiento es que "mientras" el valor lógico que tiene asignado sea TRUE, se repetirá de nuevo. Es decir:
Código:
while (valor_logico) {
    sentencias_a_ejecutas_si_es_TRUE
}
Pero si quiere que el código se ejecute al menos una vez, sin tener en cuenta el valor lógico, y a partir de esa vez, ya tenerlo en cuenta, hay que usar do ... while. Esto es equivalente:
Código:
mis_sentencias
while (valor) {
    mis_sentencias
}
// Es lo mismo que decir
do {
    mis_sentencias
} while (valor);
Y si quieres crear un bucle infinito, es decir, que no pare de repetirse, solo debes poner un valor lógico TRUE constante, es decir:
Código:
while (1) {
    sentencias
}

Hay otro tipo de bucles, llamados condicionales, que permiten modificar el valor centinela (se llama así al valor que decide si se repetirá el bucle), y que este valor centinela no sea necesariamente lógico. El bucle for cumple estas características. Su esquema de funcionamiento es:
Código:
for (tipo variable = valor_inicial ; condicion_logica ; operacion_repetitiva ) {
    sentencias_a_repetir;
}
Cualquiera de las 3 sentencias del bucle for se puede dejar en blanco, siempre que no impida que funcione, si dejas en blanco la condición lógica, el bucle será infinito. En resumen, tienes tres sentencias, en la primera se te permite dar valor a una variable existente o nueva; en la segunda se pone una condición, que si es TRUE hará repetirse al bucle, y sino lo finaliza, lo normal es que la condición se aplique a la variable de la primera sentencia, pero no tiene por qué; y por último la tercera sentencia se repite cada vez que el bucle se repita, y también suele estar relacionada con la variable de la primera sentencia, pero tampoco tiene por qué... Veamos un ejemplo:
Código:
std::cout << "\nVamos a contar hasta 100\n";
for (int i = 0; i < 100; i++) {
  std::cout << "Tras el " << i << " va el " << (i + 1) << "\n";
}
Si lo visualizas, pues podrás comprobar que sin bucles, sería eterno ponerte a escribir eso. Y no digamos ya si cambias el 100 por cualquier número enorme. El bucle for está muy unido a los arrays.

Por último solo queda decir que los bucles, de todos los tipos, se pueden anidar entre sí. Solo debes tener cuidado de no entrar en bucles infinitos no deseados. Y decir que hay dos herramientas para interrumpir cualquier bucle, incluso los infinitos. Se trata de break y continue. Los dos tienen la misma función, interrumpir el bucle, pero el primero tras acabar el bucle continua la ejecución tras el bucle; mientras que el segundo al acabar el bucle, continua desde el principio del bucle, incluyendo la condición del bucle. Es decir:
Código:
while (valor) {
    sentencia1;
    sentencia2;
    break;
    sentencia3;
}
sentencia4;
Hará que se ejecuten las sentencias 1,2 y 4. Ya que la 3 se la salta al acabar el bucle ahí. Pero en este caso:
Código:
while (valor) {
    sentencia1;
    sentencia2;
    continue;
    sentencia3;
}
sentencia4;
Hará que se ejecuten las sentencias 1 y 2 eternamente, a menos que valor cambie. Es decir, continue rompe el bucle y te sitúa al inicio de él, y repetirá el bucle a menos que su valor lógico condicionante sea FALSE.

HarZe
WebMaster & Desarrollador

Cantidad de envíos : 58
Fecha de inscripción : 21/06/2009
Edad : 24

Ver perfil de usuario http://opengl-esp.superforo.net

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.