46 - Sentencias condicionales y bucles (1/2)

Volver al curso



Sacado del tema 5 “SENTENCIAS CONDICIONALES Y BUCLES” (pgs 19-21) de José María Bea.


Un poco de inglés:

En los flujogramas, las condiciones se expresan con rombos:

Sentencia if(){}

La primera sentencia, y la más utilizada es if, que significa si (condicional, sin acento) en inglés. Así se haría el programa anterior:

#include <stdio.h>
float nota= 0;

int main(void) {
	printf("Dame tu nota: ");
	scanf("%f", &nota); // Acuérdate del & en la variable
        if(nota<5) printf("Estas SUSPENSO"); 
        else printf("Estas APROBADO"); 
}

La sentencia if ejecuta lo que hay a continuación sólo si la condición que está entre paréntesis se cumple.

Cuando no se cumple la condición del “if”, se realiza lo que indique el else (en inglés significa “si no”).

#include <stdio.h>
float nota= 0;

int main(void) {
	printf("Dame tu nota: ");
	scanf("%f", &nota); // Acuérdate del & en la variable
        if(nota<5) 
            {
            printf("Estas SUSPENSO"); 
            printf("\nÁnimo."); 
            }
        else 
            {
            printf("Estas APROBADO"); 
            printf("\n¡No te descuides, sigue!");
            }
}

Fíjate que cada sentencia tiene dos zonas:

No entiendes el “else”

Pues de momento no lo uses. Usa sólo “if”:

#include <stdio.h>
float nota= 0;

int main(void) {
	printf("Dame tu nota: ");
	scanf("%f", &nota); // Acuérdate del & en la variable
        if(nota<5) printf("Estas SUSPENSO"); 
        if(nota>=5) printf("Estas APROBADO"); 
}

Que en organigrama sería mucho más chapucero:

Tú primero haz que funcione el programa, luego ya lo pondrás bonito.

if … else … if anidados

Anidar un bucle o una sentencia significa meter unos dentro de otros. Mira el siguiente ejemplo sacado de los apuntes de José María Bea:

#include <stdio.h>

int main()
    {
    int a;
    printf("Introduce un número entero positivo: ");
    scanf("%i", &a);

    if (a < 10)
        {
        printf("El número introducido era menor de 10.\n");
        }
        else if(a > 10 && a < 100)
            {
            printf ("El número está entre 10 y 100\n");
            }
            else if(a > 100)
                {
                printf("El número es mayor que 100\n");
                }
                else printf("El valor 10 o 100");

    printf("Fin del programa\n");
    }

Hacer organigrama en clase.

Ejemplo 9 - Interpretador de notas

Este ejercicio lo hicimos en clase con organigrama y todo. Os lo paso resuelto:

#include <stdio.h>

float nota = 0;

int main()
    {
    printf("Introduce nota: ");
    scanf("%f", &nota);
    
    if (nota < 5 && nota >= 0) // CONSULTA
        {
        printf("\nSUSPENSO");// SI SÍ
        }
    else // SI NO
        {
        if (nota >=5 && nota < 6)    
            {
            printf("\nAPROBADO");
            }
        else
            {
            if (nota >= 6 && nota <7)
                {
                printf("\nBIEN");
                }
            else
                {
                if (nota >= 7 && nota <9)
                    {
                    printf("\nNOTABLE");
                    }
                else
                    {
                    if (nota >= 9 && nota <= 10)
                        {
                        printf("\nSOBRESALIENTE");
                        }
                    else
                        {
                        printf("\nERROR. Nota no válida.");
                        }
                    }
                }
            }
        }
    }

Date cuenta de que el programa se entiende gracias a que está bien sangrado. De todas formas, a veces es mejor usar la sentencia switch() … case(){}

Sentencia switch() … case(){}

Hace que la programación sea muy limpia y ordenada. Problema: no soporta operadores >, <. Aquí no hay condición entre paréntesis, la condición es siempre “==“ a la variable que vaya en el switch.

#include <stdio.h>

int main()
    {
    int nota;
    printf("Introduce una nota sin decimales: ");
    scanf("%i", &nota);
    
    switch(nota)
        {
        case 0: //lo de después del case: con comillas simples si es CHAR, sin nada si es INT
            printf("Suspenso. \n"); 
            break;
        case 1: 
            printf("Suspenso. \n");  
            break;
        case 2: 
            printf("Suspenso. \n");  
            break;
        case 5:
            printf("Aprobado. \n"); 
            break;
        case 6:
            printf("Bien. \n"); 
            break;    
        case 7:
            printf("Notable bajo. \n"); 
            break;
        case 8:
            printf("Notable alto. \n"); 
            break;
        case 9:
            printf("Sobresaliente. \n"); 
            break;  
        case 10:
            printf("Matrícula de honor. \n"); 
            break;    
        default: printf("NÚMERO NO VÁLIDO.\n"); //El caso default es opcional.
            break;
        }

    printf("Fin del programa\n");
    }

No sirve siempre, pero a veces acorta mucho programas que se hacen con if anidados

También ahorra trabajo al procesador. Se usa mucho en menús:

int main()
    {
    int opcion = 0;

    printf("MENÚ DE OPCIONES\n");
    printf("1.-Bienvenida al programa\n");
    printf("2.-Saludo\n");
    printf("3.-Despedir\n");
    printf("4.-Salir\n");

    scanf("%i", &opcion);
    
    switch(opcion)
        {
        case 1:
            printf("Bienvenido");//qué hacer si opcion == 1
            break;

        case 2:
            printf("HOLA");
            break;

        case 3:
            printf("ADIOS");
            break;

        case 4:
            printf("Has salido del programa");
            break;

        default: 
            printf("No existe esa opción");
            break;
        }
    
    }

El programa anterior es de José María Bea.

Ejercicios

Haz los ejercicios del 1 al 8 de la página 25 de los apuntes de José María Bea. El 2 no lo hagas.

Imagen sacada de aquí.