Curso de C++ Básico. Programación Orientada a Objetos [Parte 3]


Valeo08

Capullo perro no mucho
Noderador
Nodero
Noder
------------------------------------------------------------------------------
3. Estructuras de Control
------------------------------------------------------------------------------

3.1. Sentencias

Una Sentencia en C/C++ es una instrucción o expresión que puede
escribirse en una o varias líneas de código y que siempre terminan
con un punto y coma ( ; ) para indicar a la máquina el final de la
sentencia actual y el inicio de la siguiente.

Una Intrucción puede ser una declarición de variables o constantes,
palabras reservadas como "return", "cout", "cin" y más términos que
ya explicaré más adelante.

Una Expresión es una o varias líneas de código formada por operandos,
operadores y/o funciones como:

Código:
longitudCircunferencia = 2 * pi * radio;

(La expresión es la parte de la derecha del " = " en la declaración)

Un Bloque de Sentencias es un conjunto de sentencias que se agrupan
entre llaves " { } ". Ya explicaré que los bloques de sentencias se
usan para declarar sentencias agrupadas con un nombre concreto,
sentencias que se ejecutan un número de veces o aquellas que se ejecutan
con una o más condiciones.

3.2. Sentencias secuenciales
Todos los programas tienen un inicio y un final establecido; se ejecutan
desde el inicio hasta el final sentencia a sentencia (de forma secuencial),
por tanto una sentencia no se ejecutará hasta que la anterior no haya
sido ejecutada. Este orden no puede ser alterado, aunque dentro del
programa pueden existir condiciones o repeticiones de sentencias que nos
permitan tener un camino u otro, pero siempre de forma secuencial.

3.3. Sentencias Condicionales
Las sentencias condicionales se utilizan para ejecutar determinadas sentencias
o bloques de sentencias dependiendo de una o varias condiciones. En C/C++
existen varios tipos: "if", "if-else", el operador "?" y "switch".

3.3.1. Sentencia If
Este tipo de sentencia sólo ejecuta el código asociado a ella si se cumple
la condición o condiciones entre paréntesis, en caso contrario pasará a ejecutar
la siguiente instrucción. El código que se ejecuta cuando se cumple la condición
puede ser UNA sentencia o un bloque de sentencias (entre llaves).

C++:
int a = 0, b = 5;

if (a < b)
    a++; // si coloco una instrucción debajo se ejecutaría aunque no se
         // cumpliera la condición, porque no hay llaves (no es un bloque)

if (a < b && a != 0) {
    a++;
    b--;
}

3.3.2. Sentencia IF-ELSE
En estas sentencias, si se cumple la condición o condiciones se ejecuta el
código entre el "if" y el "else". De lo contrario, se ejecutará el código que está
después del "else". Como ocurría con las sentencias IF, el código asociado al
if y el else pueden ser una solo sentencia o un bloque de sentencias.

C++:
int a = 0, b = 5;

if (a < b) {
    cout << "El primero es menor";
    a++;
} else {
    cout << "El primero es mayor";
    a = 0;
}


3.3.3. Operador "?"
En algunas ocasiones, una sentencia IF-ELSE, puede ser abreviada mediante el
operador "?" (interrogación). Esta sentencia tiene su propia sintaxis:

Código:
Variable = Condición ? Expresión_A : Expresión_B;

Esta sentencia equivaldría a:

Código:
if (Condición)
        Variable = Expresión_A;
else
        Variable = Expresión_B;


Un ejemplo de esto:

C++:
int a = 0, b = 5;

a = (a < b) ? a+1 : 0;
 
Última edición:

Valeo08

Capullo perro no mucho
Noderador
Nodero
Noder
3.3.4. Sentencia SWITCH
Este tipo de sentencia se utiliza cuando el resultado de una expresión
tiene que compararse con diferentes valores. Acepta varios formatos lo que la
hace ser muy flexible. Además, su sintaxis en más fácil y se parece a la de un
cunjunto de sentencia IF-ELSE anidadas (que ahora explico lo que es); sin embargo,
se diferencia respecto a el IF-ELSE en que un switch solo compara valores enteros.
La sintaxis básica sería esta:

Código:
switch (Expresión) {
case valorA:
        operacionesA;
        break;
case valorB:
        opreacionesB;
        break;
case valorC:
        opreacionesC;
        break;
default:
        otrasOperaciones;
}

Tanto el "break" como el "default" son opciones, lo que hace que se puedan conseguir
distintos comportamientos con esta sentencia.

Si se omite un "break", provoca que una vez que se ejecuta el código correspondiente
a un valor, continuará ejecutando el código que corresponde al resto de valores que
aparecen debajo hasta encontrar un break. Por ejemplo:

C++:
int a = 0;
cin >> a;

switch (a) {
    case 0:
        a++;
    case 1:
        a = a * 5;
        break;
    case 2:
        a = 56;
        break;
    default:
        a = 0;
}

En este ejemplo, como en el caso del 0 no hay break, si "a" se establece por
teclado a 0, se ejecutará tanto el código de esa situación como el código asociado
al 1, es decir, en el 0, "a" valdrá 1 y luego se multiplicará por 5.

Si se omite "default" al final, en caso de que la expresión no coincida con ninguno
de los distintos valores incluidos en la sentencia, no se ejecutará el código dentro
del switch y pasará a la siguiente sentencia que esté debajo de ella. Un ejemplo:

C++:
int a = 0;
cin >> a;

switch (a) {
    case 1:
        a++;
        break;
    case 2:
        a = a * 2;
        a += 4;
        break;
}

En el ejemplo no se ejecutará nada si "a" se establece por teclado a valores
diferentes a 1 o 2.

3.3.5. Sentencias anidadas (IF-ELSE)
Son sentencias IF-ELSE en el que el código asociado a la parte de el if y/o el else
está compuesto por más sentencias IF-ELSE. Un ejemplo de esto:

C++:
int a = 0;
cin >> a;

if (a >= 100) {
    if (a > 150) {
        cout << a << " es mayor a 150";
    } else {
        cout << a << " está entre 100 y 150";
    }
} else {
    if (a > 50) {
        cout << a << " está entre 51 y 99";
    } else {
        cout << a << " es menor de 50";
    }
}

3.4. Sentencias Iterativas
A las setencias iterativas también se les llama bucles y se usan cuando es
necesario ejecutar más de una vez una sentencia o un bloque de setencias. Existen
tres tipos de bucles: for, while y do-while.

3.4.1. Sentencia FOR
Es un bucle utilizado cuando se conoce el número de veces que se tiene que ejecutar
una sentencia o un bloque de sentencias. La sintaxis que sigue es esta:


Código:
for (Inicio; Condición; Incremento±)
        Sentencia o Bloque de sentencias;

Para declarar un blucle for hay que seguir la sintaxis de arriba. En el inicio, se
declara la variable que controla el bucle o se establece a un valor determinado. La
condición es la parte que controla al bucle, ya que si es verdadera se seguirá
ejecutando y parará en caso contrario. El incremento se utiliza para modificar la
variable del bucle.

Unos ejemplos:

C++:
int total = 0;
for (int i = 0; i < 11; i++)
    total = total + i;

// una variación del ejemplo anterior que hace lo mismo
int total = 0, i = 0;
for (; i < 11; ) {
    total = total + i;
    i++;
}

Los bucles, al igual que las sentencias IF-ELSE, se pueden anidar, es decir, se
puede usar como bloque de setencias a repetir otro bucle. Sirve para los bucles for
y while, de hecho son la base de los esquemas de recorrido y búsqueda que explicaré
más adelante.
 
Última edición:

Valeo08

Capullo perro no mucho
Noderador
Nodero
Noder
3.4.2. Sentencia WHILE
Los bucles while se usan cuando no se sabe el número de veces que se tiene que ejecutar
una sentencia o bloque de sentencias. Un bucle while se ejecuta mientras se cumpla
la condición que tiene entre paréntesis, en caso contrario para (o no se ejecuta, si
desde un principio no se cumple). La sintaxis de un bucle de este tipo es:

Código:
while (Condición)
        Sentencia o Bloque de sentencias;

Un ejemplo de un bucle:

C++:
int total = 0, i = 0, iteraciones;
cout << "Introduce el numero de iteraciones del bucle: ";
cin >> iteraciones;

while (i < iteraciones) {
    total = total + i;
    i++;
}

Esto es importante: dentro de un bucle while (o do-while) debe existir una línea de
código que modifique la variable que se utiliza en la condición del bucle (i en el
ejemplo) de forma que un determinado momento, pare. Si no se incluye dicha línea
producirá un bucle infinito que bloqueará el programa (y en un principio no queremos
eso). Un ejemplo de bucle infinito:

C++:
int total = 0, i = 0;

while (i < 10) {
    total = total + i;
}

Como no se modifica el valor de "i" dentro del bucle, se ejecutará siempre y por
tanto hemos conseguido un bucle infinito.

3.4.3. Sentencia DO-WHILE
Son iguales a los bucles while, sin embargo los bucles do-while se ejecutan al menos
una vez, sin importar si se cumple o no la condición del bucle. Ahora bien, se seguirá
ejecutando solo si se cumple dicha condición. La sintaxis sería tal que así:

Código:
do {
        Sentencia o Bloque de sentencias;
} while (Condición);

Este tipo de bucles los utilizamos en la UNI (cuando empezamos) para hacer menús que
pidan por teclado una respuesta al usuario. Aquí os dejo un ejemplo:

C++:
int main() {
    int eleccion;
    do {
        cout << "\t\tMenú";
        cout << " 1. Mostrar datos\n";
        cout << " 2. Editar datos\n";
        cout << " 3. Salir\n";
        cout << "Elige una opción: ";
        cin >> eleccion;

        switch {
            // aqui irian las funciones en las distintos casos
        }
    } while (eleccion != 3);

    return 0;
}
 

Valeo08

Capullo perro no mucho
Noderador
Nodero
Noder
3.5. Macros de Sentencias
Supongo que la mayoría sabréis lo que es una macro, ya que existen para el
teclado o el mouse. En programación son una utilidad del compilador, en
este caso el de C/C++, que se utilizan para alterar la forma de compilar, ya que
no son intrucciones para la CPU sino para el propio compilador. En el de C/C++,
los macros van precedidos con el símbolo de almohadilla (#). Existen un conjunto de
macros común a todos los compiladores (los estándar) aunque algunas empresas de
software incorporan otras en sus compiladores. Algunos de los macros más usados son:

  • #include

    Esta macro, elimina la línea donde aparece e incluye el contenido del
    archivo cuyo nombre aparece entre < >. Se usa para importar librerías
    en resumen. Su sintaxis es:
    #include <Nombre de la librería>
  • #define

    La macro sustituye un texto por otro cada vez que lo encuentra en nuestro
    código. Donde aparezca "Cortar" el compilador lo sustituye por "Pegar". La
    sintaxis que sigue es esta:
    #define Cortar Pegar

Las macros más comunes son:
  • #define
  • #if
  • #endif
  • #undef
  • #error
  • #else
  • #infdef
  • #line
  • #include
  • #elif
  • #ifndef
  • #pragma
 

qav

No soy el mejor mod, pero soy un excepcional pato
Noderador
Nodero
Noder
Lo voy a volver a decir, Mis respetos buen hombre
 

Thegjv

Moder fav <3
Noderador
Nodero
Noder
Igual que siempre, no decepcionas! Al final va a ser fácil aprender un nuevo lenguaje y todo ;P
 

Anon

🏴‍☠️
Owner
Staff
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder