miércoles, 19 de diciembre de 2012

Lección 3 - Estructuras de repetición (while , for , do/while , contador, acumulador)

Estructura de repetición while

Las estructuras de repetición son utilizadas para repetir un proceso (llamado ciclo) las veces que sea necesario en un determinado programa. while es una de las más utilizadas en este proceso , ya que su estructura es simple y fácil de implementar.

while (condición) {

instrucciones;

}

Si la condición no se cumple , el ciclo de repetición sigue hasta que se cumpla la proposición. No obstante, debemos asegurarnos del cumplimiento de la condición de lo contrario el ciclo será infinito y erróneo.

Contador

El contador es una variable que tiene como fin , contar el número de repeticiones que ocurre en un ciclo. Comúnmente es utilizada para cumplir en algún momento la proposición de la estructura de repetición , de esta forma su meta es terminar el ciclo , no obstante puede tener diversos usos durante el proceso de programación!! , el contador siempre debe inicializarse (En seguida verán un ejemplo).


Acumulador

El acumulador es una variable que tiene como fin, acumular cierta cantidad números , ya sea por medio de una suma , resta , multiplicación , división , etc , almacenando el resultado en dicha variable , el acumulador siempre debe inicializarse.


Ejemplo: Programa que le permite al usuario introducir 10 números y suma los números introducidos!




El programa quedaría así:
---------------------------------------------------------------
Digite su numero
12
Digite su numero
15
Digite su numero
100
Digite su numero
25
Digite su numero
89
Digite su numero
1
Digite su numero
734
Digite su numero
56
Digite su numero
2
Digite su numero
30
La suma total de los numeros es: 1064
------------------------------------------------------------
Como una variable solo soporta un valor , cada número insertado por el usuario sustituirá el anterior , en otras palabras solo el último valor insertado será el que quedará almacenado en la variable numero (más adelante veremos como introducir un valor sin sustituir el valor anterior)

Antes de utilizar cualquier estructura de repetición debemos inicializar la variable que cumplirá la proposición del ciclo!. Si la variable se hubiera inicializado en 0 entonces la proposición de while hubiera cambiado de la siguiente forma:

while(contador < 10)

Contador es menor que 10 , ya que si contamos desde el 0 , en el 9 ya estarían los diez números!

No obstante , en el caso de while debemos inicializar la variable que cumplirá la condición  fuera del cuerpo y antes de la estructura de repetición , ya que si lo hacemos adentro podría provocar errores!.

La variable que cumplirá la condición deberá ser aumentada , ya que la misma determinara cuando acabará el ciclo (contador = contador+1) , o sea si contador = 1; entonces si le sumamos a contador + 1 serian 2 y este valor sería igual a contador , o sea queda almacenado en la variable contador , de esta forma sumaría de 1 en 1 hasta llegar a 10 donde acabaría el ciclo.

La variable acumulador , lo que realiza es la suma del numero digitado por el usuario durante cada repetición del ciclo , tenemos que: acumulador = acumulador + numero; en la primer repetición lo que hará es sumar 0 + 12 esto sería igual a la variable acumulador , lo que quiere decir que en la próxima repetición dicha variable será igual a 12 + 15 , de esta forma sumará los números durante cada repetición,  lo anterior deja en evidencia  porque se inicializo el acumulador en 0, ya que si lo hubiéramos inicializado en 1 el resultado final sería erróneo ya que le estaríamos sumando 1 de más en cada repetición al acumulador.

Se estarán preguntando: Como funciona el recorrido realizado por while?

El ciclo se evalúa de arriba a abajo , esto quiere decir que comienza en la condición , sigue con las instrucciones , una vez que encuentra el final del bloque vuelve a la condición (o sea al principio de while) si la condición no se cumple , continua para abajo con las instrucciones repitiendo el proceso de nuevo!! lo anterior se realiza hasta que la condición sea verdadera!.

Si la condición de while es verdadera , automáticamente el ciclo se detendrá y se saltará a la siguiente instrucción después de la última llave de while por eso es necesario el contador , de lo contrario se quedaría en el cuerpo de while(bloques) y nunca terminaría de repetir el ciclo.

Antes de continuar , les mostraré algunos operadores de asignación que son de gran utilidad en los contadores al momento de aumentar para cumplir la proposición:

operador      ejemplo (pueden aumentar con el numero que deseen)

+=                contador += 1; funciona igual que: contador = contador+1;

-=                 contador -=1;  funciona igual que:  contador = contador-1;               

*=                contador *=2; funciona igual que: contador = contador*2;

/=                 contador /=6; funciona igual que: contador = contador / 6;

%=               contador %=10; funciona igual que: contador = contador % 10;

(los siguientes operadores siempre aumentan en 1 por defecto al contador)

(preincremento)     ++ contador; funciona igual que: contador = contador + 1;

(posincremento)     contador++; funciona igual que: contador = 1 + contador;

(predecremento)     --contador; funciona igual que: contador = - 1 + contador;

(posdecremento)      contador--; funciona igual que: contador = contador - 1;


Estructura de repetición for

Al igual que while , su función principal es repetir un ciclo,  determinado número de veces.

Su estructura principal es la siguiente:

for (inicialización del contador; proposición; aumentar el contador  ) {

instrucciones;

}

A continuación un ejemplo: Programa que divide entre 2 y multiplica por 4  cada numero digitado por el usuario (5) y además suma los resultados durante cada repetición  en un acumulador.



La estructura de repetición for , hace el mismo recorrido que while , comienza en for , en la primera repetición el contador es inicializado, no obstante en las siguientes repeticiones la inicialización  se ignora automáticamente así que no se preocupen!. De igual forma continua con las instrucciones encontradas en los bloques y regresa al principio de for aumentado el contador para que en algún momento la proposición sea verdadera y el ciclo termine.

Es importante inicializar el contador dentro de la estructura for de lo contrario puede ocurrir un error, en otras palabras hay que respetar la forma de la estructura for!!.

Las variables calculo y suma son de tipo double porque en una división , es muy posible que el resultado no sea entero y como el tipo double soporta enteros y decimales, es perfecto para realizar la tarea establecida!.

El programa quedaría asi:
------------------------------------------
Digite un numero: 2
Digite un numero: 5
Digite un numero: 10
Digite un numero: 20
Digite un numero: 100
La suma de los calculos es: 274
-------------------------------------------

Estructura de repetición do/while

Al igual que while y for la estructura do/while tiene como función repetir un determinado número de veces un ciclo. La principal diferencia que distingue a do/while de los demás es que la proposición del ciclo y el aumento del contador son evaluados despues del bloque final de su estructura!!.

Su estructura básica es la siguiente:

do {

instrucciones;

} while (condición);

A continuación un programa sencillo que muestra 10 números:



El programa se mostraría así:

1 2 3 4 5 6 7 8 9 10

Como pueden notar la condición (proposición) y el aumento del contador son evaluados una vez que termina do , si la condición no es verdadera se regresa otra vez a do y sigue ejecutando las instrucciones.

Bueno eso es todo por hoy , cualquier duda pueden postearla en un comentario!

6 comentarios:

  1. hola te comente que encontre un error en la segunda imagen con esa configuracion el resultado te da 272 asique tienes que agregar una suma de 0.40 para que te de el resultado que espones en el tema te dejo como lo e modificaro para que lo miren y me digan si seria correcto hacerlo

    #include
    using namespace std;
    int main()
    {

    int numeros;
    double calculo;
    double suma;
    int contador;

    for (contador = 0; contador < 5; contador++) {


    cout<<"digite su numero: ";
    cin>>numeros;

    calculo = (numeros / 2) * 4;
    suma = suma + calculo + 0.40;

    }


    cout <<"la suma de los calculos es: "<<suma<<endl;


    return 0;
    }

    ResponderEliminar
  2. Si, estas en lo correcto agustin solo fue un error al sumary dividir los números por parte mia, pero no es necesario el 0.40 ya q lo q hace el acumulador es hacer el calculo respectivo en cada pasada del ciclo y acumularlos en la variable mediante la suma..pero tu codigo esta bien y se puede implementar solo q sumaria 0.40 mas en cada pasada ..saludos cualquier duda con mucho gusto ..habia dejado de actualizar la pagina pero veo q hay personas q todavian quieren aprender c++ asi q volvere con mas tensas y actualizaciones

    ResponderEliminar
  3. esta muy bien explicado para que sirve cada ciclo

    ResponderEliminar
  4. gracias, si muy bien explicado :) hay algún vídeo?

    ResponderEliminar
  5. Wow lo que buscaba, muchas gracias en principio lo vi fácil pero no entendía algunos aspectos de las estructuras de los contadores y acumuladores ... Gracias a su artículo se me despejó la mayoría de dudas

    ResponderEliminar
  6. que bueno mi amigo este articulo tiene muchos años.. me alegro que aun le ayude a las personas

    ResponderEliminar