TallerC-Cpp: Capítulo 3.- Bucles (a marearse dando vueltas)

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
m (añadidos dos ejercicios)
m (categorizo)
 
(No se muestra una edición intermedia realizada por un usuario)
Línea 250: Línea 250:
 
<hr>
 
<hr>
  
5.- Crear un programa que pida diez veces un número menor que diez '''usando for'''. Es decir, que no pare hasta haber recibido 10 veces un número menor que 10.
+
6.- Crear un programa que pida diez veces un número menor que diez '''usando for'''. Es decir, que no pare hasta haber recibido 10 veces un número menor que 10.
  
 
== Enlaces ==
 
== Enlaces ==
Línea 265: Línea 265:
 
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[TallerC-Cpp: Capítulo 4.- Funciones (las incomprensibles cajas negras)]]
 
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[TallerC-Cpp: Capítulo 4.- Funciones (las incomprensibles cajas negras)]]
 
|}
 
|}
 +
 +
[[Categoría:Programación]]

Última revisión de 14:48 26 dic 2011

En este capítulo empezaremos a usar dos herramientas básicas en lenguaje C, los condicionales y los bucles.

Clip.png Es habitual encontrar tutoriales donde se aprenden antes las funciones, no obstante, eso invita a perder la perspectiva.

Contenido

[editar] Variables Booleanas

Desde que se creo el álgebra booleana, ha sido el paradigma del ámbito digital, pues ambos pueden explicarse el uno del otro.

La variables booleanas no son más que variables que pueden tomar únicamente dos valores, verdadero o falso.

En lenguaje C++, las variables booleanas se declaran con bool, y los valores que pueden tomar son false (Que será lo mismo que 0), o true (Que será lo mismo que un valor distinto de cero, típicamente el 1).

Advert.3.png El tipo de variable bool es de C++, no de C

Las variables booleanas como tal son hasta cierto punto difíciles de ver, no obstante son un subproducto de las dos herramientas que venimos buscando, los condicionales, y los bucles.

Por poner un ejemplo, un código de creación de una variable booleana sería:

    bool Flag=false;
Clip.png Como se ve en el código anterior, las variables pueden tomar un valor (por defecto se suele llamar) en el momento de su declaración.

[editar] Condicionales

Los condicionales son órdenes que establecen si sus dependientes (órdenes contenidas entre las llaves) se ejecutan o no.

Es decir, si el argumento que recibe el condicional es cierto, se ejecutará todo el código incluido en las llaves, en otro caso no.

En C, el condicional base es if, y su contrapartida (se ejecutará si no es cierto) else.

Pongamos un ejemplo...

[editar] Pasos previos

  1. Crear la carpeta /home/USUARIO/proyectos_codeblocks/TallerProgramacion/003/
  2. Crear un proyecto, de lenguaje C, en la anterior carpeta, llamado Condicionales-001
  3. Borramos el contenido de main.c.
  4. Guardamos el proyecto con File/SaveProject.

[editar] Ejemplo

El código es el siguiente:

#include <stdio.h>
int main()
{
    // Declaracion de variables
    int KK=0;
    // Pedimos los datos
    printf("dame un entero:\n");
    scanf("%d",&KK);

    // Probamos algunos condicionales
    if(KK < 10)
    {
        printf("El numero es menor que 10\n");
    }
    else if(KK == 10)
    {
        printf("El numero es exactamente 10\n");
    }
    else
    {
        printf("El numero es mayor que 10\n");
    }

    // Salimos del programa sin errores
    return 0;
}

Analicemos los condicionales.

    if(KK < 10)

Nos fijamos primero en los que está dentro de los paréntesis (argumento de la función if), KK < 10. En C, +-*/<>= y bastantes más son lo que se conoce como operadores. Los operadores condicionales son:


  • <, quiere decir que si el operador de la izquierda es menor que el operador de la derecha, el resultado de la operación es true, en cualquier otro caso, es false.
  • >, quiere decir que si el operador de la izquierda es mayor que el operador de la derecha, el resultado de la operación es true, en cualquier otro caso, es false.
  • <=, quiere decir que si el operador de la izquierda es menor o igual que el operador de la derecha, el resultado de la operación es true, en cualquier otro caso, es false.
  • >=, quiere decir que si el operador de la izquierda es mayor o igual que el operador de la derecha, el resultado de la operación es true, en cualquier otro caso, es false.
  • ==, quiere decir que si el operador de la izquierda es igual que el operador de la derecha, el resultado de la operación es true, en cualquier otro caso, es false.
  • !=, quiere decir que si el operador de la izquierda es distinto que el operador de la derecha, el resultado de la operación es true, en cualquier otro caso, es false.
  • !, quiere decir que si el operador de la derecha es true el resultado de la operación es false, en cualquier otro caso, es true.

Conviene darse cuenta que es lo mismo escribir a != b que !(a == b).

  • &&, quiere decir que si el operador de la izquierda es true y el de la derecha también, el resultado de la operación es true, en cualquier otro caso, es false.
  • ||, quiere decir que si el operador de la izquierda es true o el de la derecha, el resultado de la operación es true, en cualquier otro caso, es false.

Advert.3.png Los operadores mayor y menor funcionan muy bien, y por inducción, mayor-igual y menor-igual. Pero los operadores igual o distinto pueden dar problemas de precisión con variables tipo float o double, y por tanto conviene que se traten con cuidado.

Así pues, si el valor que hemos introducido es menor que 10, la orden if(KK < 10) sería igual que haber escrito if(true), y por tanto, el condicional será cierto, y se ejecutará el código (imprimirá que el número es menor que diez).

Sigamos por los condicionales... Si se cumple el primer condicional, el códgio ya desecha todos los demás, pues tienen un else que les precede. En ese sentido, si cambiáramos else if(KK == 10) por else if(KK <= 10), el código no cambiaría lo más mínimo, pues si KK es menor que diez, entrará en el primer condicional, y a pesar de ser cierto el segundo, rechazaría toda acción por precederle un else.

Si no se cumple el primer condicional, el código analiza el segundo, para ver si es que el número es igual a diez, y sólo en el caso de que el segundo condicional tampoco se cumpla, ejecutará la tercera orden sea cual sea el número.

Clip.png Aún existe otro tipo de condicional, el switch, pero de momento no lo estudiaremos.

[editar] Bucles

Los bucles son la extensión natural de los condicionales. Los bucles son funciones que ejecutan todas las órdenes dependientes (las incluidas entre las llaves), mientras se cumpla una determinada condición.

Advert.3.png Por el carácter cíclico de los bucles, es una base de la programación asegurarse que los códigos siempre escapan de los bucles, es decir, que se garantiza que siempre existirá una situación en la que la condición dejará de cumplirse.

En C existen dos tipos de bucles, los while y los for.

[editar] while

El bucle básico es el while, que repetirá las órdenes dependientes mientras su argumento sea cierto. Pongamos un ejemplo:

Creamos un nuevo proyecto en el capítulo 003, con el nombre Bucles-001

#include <stdio.h>
int main()
{
    // Declaracion de variables
    int count=0;

    // Hacemos un bucle
    while(count < 10)
    {
        // Incrementamos el paso una unidad
        count++;
        // Lo imprimimos por pantalla
        printf("Paso numero %d\n", count);
    }
    // Imprimimos un mensaje de que se ha acabado el bucle
    printf("---Se acabo el bucle---");
    // Salimos del programa sin errores
    return 0;
}

Es bastante simple, por tanto huelga un análisis detallado, pero si que es interesante jugar con él.

Podemos empezar modificándolo para que no tenga salida (mala programación). Veremos que el código no termina nunca, y por tanto deberemos pararlo pulsando Ctrl+c. Un posible ejemplo (en un proyecto llamado Bucles-002), en el que cambiamos el argumento del condicional:

#include <stdio.h>
int main()
{
    // Declaracion de variables
    int count=0;

    // Hacemos un bucle
    while(count >= 0)
    {
        // Incrementamos el paso una unidad
        count++;
        // Lo imprimimos por pantalla
        printf("Paso numero %d\n", count);
    }
    // Imprimimos un mensaje de que se ha acabado el bucle
    printf("---Se acabo el bucle---");
    // Salimos del programa sin errores
    return 0;
}

[editar] for

El otro tipo de bucle es el for, al que en vez de pasarle un argumento, se le pasan tres órdenes, de la forma:

for(Inicializacion;Condicion;Incremento)

Así, por ejemplo, el código equivalente de Bucle-001 sería (crearlo en un Bucle-003):

#include <stdio.h>
#include <stdlib.h>
int main()
{
    // Declaracion de variables
    int i;

    // Hacemos un bucle
    for(i=1;i<=10;i++)
    {
        // Lo imprimimos por pantalla
        printf("Paso numero %d\n", i);
    }
    // Imprimimos un mensaje de que se ha acabado el bucle
    printf("---Se acabo el bucle---");
    // Salimos del programa sin errores
    return 0;
}

Es decir, iniciará i con el valor 1, y a cada vuelta incrementará su valor en una unidad (i++), y comprobará si es menor o igual que diez (i<=10).

Clip.png Nótese que podemos variar el valor de i, lo que variará el orden normal del bucle. Normalmente esto se debe evitar, pero si se sabe lo que se está haciendo, puede ser de mucha utilidad

[editar] Anexos

[editar] Operador Módulo

El operador módulo es una operación muy común, y se denota como %. El operador módulo devuelve el resto de una división, así por ejemplo:

5/2 = 2.5 (no es exacta)
5 = 2*2 + 1 (resto 1)
5%2 = 1

Es decir, es muy útil para ver si una división es exacta, ya que si es así, el módulo valdrá cero. O lo que es lo mismo, es muy útil para ver si un número es múltiplo de otro.

[editar] Ejercicios

[editar] Condicionales

1.- Crear un programa que pida tres números y los ordene de menor a mayor.


2.- Crear un programa que cuente el número de ceros de un número de 4 cifras (del 1000 al 9999)


[editar] Bucles

1.- Crear un programa que devuelva la suma de los diez primeros números enteros (1+2+3+4+5+6+7+8+9+10).


2.- Crear un programa que cuente el número de ceros en un número de teóricamente cuantas cifras se quiera.


3.- Crear un programa que devuelva los números primos del uno al cien.


4.- Crear un programa que calcule la raíz cuadrada de un número.


5.- Crear un programa que pida diez veces un número menor que diez usando while. Es decir, que no pare hasta haber recibido 10 veces un número menor que 10.


6.- Crear un programa que pida diez veces un número menor que diez usando for. Es decir, que no pare hasta haber recibido 10 veces un número menor que 10.

[editar] Enlaces

[[Página oficial del compilador gcc]]
[[Página oficial de la IDE Code::Blocks]]


TallerC-Cpp: Capítulo 2.- Aventurándonos en los dominios de C Taller de Programción C-Cpp TallerC-Cpp: Capítulo 4.- Funciones (las incomprensibles cajas negras)
Herramientas personales