(Este artículo forma parte del Curso de Programación en C)
Asociadas a los bucles se encuentran a menudo algunas variables auxiliares. Como siempre se utilizan de la misma manera, las llamamos con un nombre propio (contador, acumulador, etc.), pero hay que dejar claro que no son más que variables comunes, aunque se usan de un modo especial.
Contadores
Un contador es una variable (casi siempre de tipo entero) cuyo valor se incrementa o decrementa en cada repetición de un bucle. Es habitual llamar a esta variable “cont” (de contador) o “i” (de índice).
El contador suele usarse de este modo:
Primero se inicializa antes de que comience el bucle. Es decir, se le da un valor inicial. Por ejemplo:
cont = 5
Segundo, se modifica dentro del cuerpo del bucle. Lo más habitual es que se incremente su valor en una unidad. Por ejemplo:
cont = cont + 1
Esto quiere decir que el valor de la variable “cont” se incrementa en una unidad y es asignado de nuevo a la variable contador. Es decir, si cont valía 5 antes de esta instrucción, cont valdrá 6 después.
Otra forma típica del contador es:
cont = cont – 1
En este caso, la variable se decrementa en una unidad; si cont valía 5 antes de la instrucción, tendremos que cont valdrá 4 después de su ejecución.
El incremento o decremento no tiene por qué ser de una unidad. La cantidad que haya que incrementar o decrementar vendrá dada por la naturaleza del problema.
Tercero, se utiliza en la condición de salida del bucle. Normalmente, se compara con el valor máximo (o mínimo) que debe alcanzar el contador para dejar de repetir las instrucciones del bucle.
Ejemplo: Escribir un algoritmo que escriba la tabla de multiplicar hasta el 100 de un número N introducido por el usuario
algoritmo tabla_multiplicar
variables
cont es entero
N es entero
inicio
leer (N)
cont = 1
mientras (cont <= 100) hacer
inicio
escribir (N * cont)
cont = cont + 1
fin
fin
El uso de contadores es casi obligado en bucles “mientras” y “repetir” que deben ejecutarse un determinado número de veces. Recuerde que siempre hay que asignar al contador un valor inicial para la primera ejecución del bucle (cont = 1 en nuestro ejemplo) e ir incrementándolo (o decrementándolo, según el algoritmo) en cada repetición con una instrucción del tipo cont = cont + 1 en el cuerpo del bucle. De lo contrario habremos escrito un bucle infinito.
Por último, hay que prestar atención a la condición de salida, que debe estar asociada al valor del contador en la última repetición del bucle (en nuestro caso, 100). Mucho cuidado con el operador relacional (<, >, <=, >=, etc) que usemos, porque el bucle se puede ejecutar más o menos veces de lo previsto
Acumuladores
Las variables acumuladoras tienen la misión de almacenar resultados sucesivos, es decir, de acumular resultados, de ahí su nombre.
Las variables acumuladores también debe ser inicializadas. Si llamamos “acum” a un acumulador, escribiremos antes de iniciar el bucle algo como esto:
acum = 0
Por supuesto, el valor inicial puede cambiar, dependiendo de la naturaleza del problema. Más tarde, en el cuerpo del bucle, la forma en la que nos la solemos encontrar es:
acum = acum + N
…siendo N otra variable. Si esta instrucción va seguida de otras:
acum = acum + M acum = acum + P
… estaremos acumulando en la variable “acum” los valores de las variables M, N, P, etc, lo cual resulta a veces muy útil para resolver ciertos problemas repetitivos.
Ejemplo: Escribir un algoritmo que pida 10 números por el teclado y los sume, escribiendo el resultado
algoritmo sumar10
variables
cont es entero
suma es entero
N es entero
inicio
suma = 0
para cont desde 1 hasta 10 hacer
inicio
leer (N)
suma = suma + N
fin
escribir (suma)
fin
En este algoritmo, cont es una variable contador típica de bucle. Se ha usado un bucle “para”, que es lo más sencillo cuando conocemos previamente el número de repeticiones (10 en este caso). La variable Nsuma es el acumulador, donde se van sumando los diferentes valores que toma N en cada repetición. se usa para cada uno de los números introducidos por el teclado, y la variable
Observe como, al principio del algoritmo, se le asigna al acumulador el valor 0. Esta es una precaución importante que se debe tomar siempre porque el valor que tenga una variable que no haya sido usada antes es desconocido (no tiene por qué ser 0)
Conmutadores
Un conmutador (o interruptor) es una variable que sólo puede tomar dos valores. Pueden ser, por tanto, de tipo booleano, aunque también pueden usarse variables enteras o de tipo carácter.
La variable conmutador recibirá uno de los dos valores posibles antes de entrar en el bucle. Dentro del cuerpo del bucle, debe cambiarse ese valor bajo ciertas condiciones. Utilizando el conmuntador en la condición de salida del bucle, puede controlarse el número de repeticiones.
Ejemplo: Escribir un algoritmo que sume todos los números positivos introducidos por el usuario a través del teclado. Para terminar de introducir números, el usuario tecleará un número negativo.
algoritmo sumar
variables
suma es entero
N es entero
terminar es lógico
inicio
suma = 0
terminar = falso
mientras (terminar == falso)
inicio
escribir ('Introduce un número (negativo para terminar)')
leer (N)
si (N >= 0) entonces
suma = suma + N
si_no
terminar = verdadero
fin
fin
escribir (suma)
fin
Con este programa, el usuario puede ir introduciendo números indefinidamente, hasta que se canse. Para indicar al ordenador que ha terminado de introducir números, debe teclear un número negativo.
El bucle se controla por medio de la variable “terminar”: es el conmutador. Sólo puede tomar dos valores: “verdadero”, cuando el bucle debe terminar, y “falso”, cuando el bucle debe repetirse una vez más. Por lo tanto, “terminar” valdrá “falso” al principio, y sólo cambiará a “verdadero” cuando el usuario introduzca un número negativo.
A veces, el conmutador puede tomar más de dos valores. Entonces ya no se le debe llamar, estrictamente hablando, conmutador. Cuando la variable toma un determinado valor especial, el bucle termina. A ese “valor especial” se le suele denominar valor centinela.
Otro ejemplo: Escribir un algoritmo que sume todos los números positivos introducidos por el usuario a través del teclado. Para terminar de introducir números, el usuario tecleará un número negativo.
algoritmo sumar
variables
suma es entero
N es entero
inicio
suma = 0
repetir
inicio
escribir ('Introduce un número (negativo para terminar)')
leer (N)
si (N >= 0) entonces
suma = suma + N
fin
mientras que (N >= 0)
escribir (suma)
fin
Tenemos aquí un ejemplo de cómo no siempre es necesario usar contadores para terminar un bucle “mientras” (o “repetir”). Las repeticiones se controlan con la variable N, de modo que el bucle termina cuando N < 0. Ese es el valor centinela.

11 comments
Comments feed for this article
Trackback link
http://profeblog.es/blog/alfredo/2008/03/12/contadores-acumuladores-conmutadores/trackback/
17 Mayo 2008 at 11:26
olismar
excelente tu explicacion…me aclararon mis dudas…saludos
13 Septiembre 2008 at 23:55
GUILLERMO
ME SIRVIO DE ALGO PERO ME FAlTA IMFORMACION MAS DEL TEMA
18 Septiembre 2008 at 12:22
Alfredo Moreno
¿Qué información exactamente? Aquí tiene un curso de programación en C bastante completo:
http://profeblog.es/blog/alfredo/curso-de-programacion-en-c/
6 Octubre 2008 at 4:58
CLAUDIO PEREZ
Hola Alfredo:
Disculpá la molestia, pero realmente necesito tu ayuda! y por eso es que recurro a ti.
Esta tarde tengo que entregar este soft (hecho con dev-c++) y la verdad no entiendo nada. O en verdad si entiendo o puedo entenderlo si lo leo, pero me resulta muy difícil hacer el programa habiendo faltado a varias clases (es que trabajo muchas horas).
Bueno, la consigna es la siguiente:
Una compañía aérea vende boletos en 3 aeropuertos mediante 6 empleados, cada vez que realiza una venta tiene los siguientes datos:
1.Número de aeropuerto;
2.Número de empleado;
3.Valor del pasaje;
4.Cantidad de pasajes.
Los datos finalizan con nº de empleado=99.
Se desea saber:
1.Cantidad de pasajes vendidos por aeropuerto;
2.Cantidad de pasajes vendidos por cada empleado;
3.Monto total vendido por empleado;
4.Boleto de mayor valor;
5.Porcentual que representa lo vendido por cada aeropuerto en dinero sobre el total;
6.Cantidad de ventas que excedieron los $1000;
7.Si cada boleto ya tiene incorporado el 10.5% de “impuesto comercial” sobre el valor del boleto, cuánto hay que pagarle al fisco;
8.Si sobre el total hay que pagarle al estado el 3% de ingresos brutos, calcular cuál es ese monto.
A mi me parece algo difícil. Creo que utiliza estructuras como while, if, contador y acumulador, o cosas básicas. El tema es que no entiendo bien como utilizarlas. Por eso, te juro que realmente agradeceré tu ayuda y de alguna forma te haré llegar una muestra de mi agradecimiento. Nota: el trabajo tengo que entregarlo de forma impresa y digital!
Muchas gracias si al menos te tomas el trabajo de leer mi mensaje. Bye!
Claudio.
3 Noviembre 2008 at 20:32
jesus
bueno primero que todo yo lo haria de la siguiente manera:
1-le doy un valor entero a el contador
2-se le suma para aumenta al contador el numero 1. o se le resta el 1 para disminuir el programa
3-luego selen del programa con el valor minimo y maximo…
9 Noviembre 2008 at 20:42
Mariano
Muy buena esta explicación. Clara y concisa. Gracias.
25 Noviembre 2008 at 14:44
Alfredo Moreno Vozmediano
CLAUDIO, como ve, no tengo mucho tiempo últimamente para actualizar el blog, ni siquiera para contestar a los mensajes en un tiempo razonable. Cuando disponga de más tiempo, quiero subir un montón de ejemplos y ejercicios resueltos que tengo por ahí, algunos de ellos muy parecidos al que le han solicitado, pero por ahora, simplemente, no puedo hacerlo.
Gracias, Jesús, por la ayuda.
1 Diciembre 2008 at 4:02
diego fasanando
buena explikacion bro.. espero sigas publicando mas de estos ayudas mucho aaaa!!!!!!
salu2
4 Abril 2009 at 6:33
freeman
que tal!!! saludos..!!!
Espero y me puedan ayudar en un programa que yo estoy desarrollando he deja de estudiar c++ algun tiempo y no recuerdo todo muy bien…
si me podria decir como hacer esto:
primero el programa
1.- lee 4 valores seria: raiz, mult, increm y mod.
2.-raliza dicha operacion
cal1=(mult*raiz+incre)-(((mult*raiz+incre)/mod)*mod);
3.-imprimirlo el resultado (cal1).
pero, una vez dado el resultado(cal1) que repita la operacion(2) y que la varible raiz tomo el valor de el resultado que se obtuvo(cal1) y que se obtenga otro resultado… obteniendo ya dos resultado.. repetir esta secuencias las veces que se desee.. espero y me explique bien..
les agradeceria que me ayudaran. por favor…..
les dejo mi correo por si se qieren comunica rpo favr… vale….
help me..!!!!
skifree@live.com.mx
9 Mayo 2009 at 2:18
sandra
hola yo tengo un programa que tal vez te pueda servir solo modificalo al modo que tu lo necesites realmente ya esta con todas las operaciones espero que te sirva te lo envio?
18 Mayo 2009 at 19:27
ESMERALDA
hola que tal, me sirvio mucho la informacion, que esten bien salu2