Hola.. bueno mi duda es esa, si los bucles estan hechos para no tener que repetir la escritura de un codigo N veces, sino que tu le pasas a la definicion del bucle en el lenguaje de programacion que utilizas ese numero N para que de alguna forma repita e codigo ese numero de veces, entonces como hago lo siguiente:
voy a poner un ejemplo en C pero la duda (obviamente, pues la puse en programacion general) se refiere al hecho de hacer esto en cualquier lenguaje.
por ejemplo, si yo quiero hacer un programa que imprima en pantalla los numeros del 0 al 30, se haria normalmente asi:
pero si lo quisiera hacer controlando mediante un bucle for cada cifra, seria asi:
bueno ojala se entienda, si quieren pueden ejecutarlo ustedes para que vean, pero al punto:
Si quisiera mostrar los numeros del 0 al 100000000 tendria que escribir 8 bucles for anidados, por lo cual, pienso que se podria mediante un bucle for pivotar cada cifra mientras que, mediante otro bucle for, las aumenta en uno si la cifra anterior es mayor al maximo. Pero ahi esta el problema, esto no funciona por que el segundo bucle "pierde de vista" a las cifras anteriores a la que llego a ser mayor al maximo (o sea 10)...
Bueno de ninguna forma logre hacerlo asi "directamente", por lo cual lo que hice fue definir a cada cifra como un objeto (esto ya lo hice en C++ y no en C), y simplemente tenia que escribir un bucle for de la siguiente manera:
pero como seguramente se habran dado cuenta se generan demasiadas llamadas a funciones para cada incremento de cada cifra, lo cual no es lo mejor...
Bueno ojala me hayan entendido lo que busco es saber si se puede comprimir el algoritmo para en vez de utilizar tantos bucles for para tantas cifras, solo algunos que puedan hacer lo mismo, igual que en vez de escribir un codigo del tipo
se haga uno que escriba el caracter ascii de la "a" a la "z"
Saludos y gracias de antemano...
voy a poner un ejemplo en C pero la duda (obviamente, pues la puse en programacion general) se refiere al hecho de hacer esto en cualquier lenguaje.
por ejemplo, si yo quiero hacer un programa que imprima en pantalla los numeros del 0 al 30, se haria normalmente asi:
Código (c) [Seleccionar]
#include <stdio.h>
int main ()
{
int i;
for (i = 0; i < 31; i++)
{
printf ("%d ", i);
}
}
pero si lo quisiera hacer controlando mediante un bucle for cada cifra, seria asi:
Código (c) [Seleccionar]
#include <stdio.h>
int main ()
{
int i[1]; /* i[0] va a contener la cifra de las decenas de cada numero contando del 0 al 30, i[1] va a contener las unidades */
for (i[0] = 0; i[0] < 3; i[0]++) /* aqui se itera sobre las decenas del intervalo cerrado [0, 30] */
/* en este for pongo el maximo a 3 para que iteren aqui las decenas del 0 al 29 (si lo pusiera a 4, se pasaria hasta el 39, logicamente): i[0]=0 i[1]=0,1,...,9, i[0]=1 i[1]=0,1,...,9,... */
{
for (i[1] = 0; i[1] < 10; i[1]++) /* aqui se itera sobre las unidades del mismo intervalo */
{
printf ("%d%d ", i[0], i[1]);
}
}
}
bueno ojala se entienda, si quieren pueden ejecutarlo ustedes para que vean, pero al punto:
Si quisiera mostrar los numeros del 0 al 100000000 tendria que escribir 8 bucles for anidados, por lo cual, pienso que se podria mediante un bucle for pivotar cada cifra mientras que, mediante otro bucle for, las aumenta en uno si la cifra anterior es mayor al maximo. Pero ahi esta el problema, esto no funciona por que el segundo bucle "pierde de vista" a las cifras anteriores a la que llego a ser mayor al maximo (o sea 10)...
Bueno de ninguna forma logre hacerlo asi "directamente", por lo cual lo que hice fue definir a cada cifra como un objeto (esto ya lo hice en C++ y no en C), y simplemente tenia que escribir un bucle for de la siguiente manera:
Código (cpp) [Seleccionar]
//NUMERO_DE_CIFRAS vale 8
Cifra *cifra = new Cifra [NUMERO_DE_CIFRAS];
Inicializar (cifra, NUMERO_DE_CIFRAS); // lo que hace esta funcion es enlazar cada elemento de cifra desde el primero (elemento 0) hasta el ultimo (elemento NUMERO_DE_CIFRAS)
//la clase Cifra tiene una metodo llamado "Incrementar" que toma como parametro un numero entero que se le suma a la cifra siguente (Cifra esta en una ligadura dinamica) si y solo si la cifra actual (la del objeto de la llamada a la funcion) es mayor a 10
for (i = 0; i < NUMERO_DE_CIFRAS; i++)
{
//el objeto cifra tambien tiene como metodo una funcion llamada "Valor" que retorna el valor numerico de la cifra del objeto actual
printf ("%d ", cifra[i].Valor ());
cifra [i].Incrementar ();
}
pero como seguramente se habran dado cuenta se generan demasiadas llamadas a funciones para cada incremento de cada cifra, lo cual no es lo mejor...
Bueno ojala me hayan entendido lo que busco es saber si se puede comprimir el algoritmo para en vez de utilizar tantos bucles for para tantas cifras, solo algunos que puedan hacer lo mismo, igual que en vez de escribir un codigo del tipo
Código (c) [Seleccionar]
printf ("a");
printf ("b");
printf ("c");
printf ("d");
printf ("e");
printf ("f");
printf ("g");
printf ("h");
printf ("i");
...
se haga uno que escriba el caracter ascii de la "a" a la "z"
Saludos y gracias de antemano...