| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
sasha12
Registrado: 27 Sep 2007 Mensajes: 9
| Publicado: 09/10/2007 1:24 pm | | | Título: Esta funcion.... |
| Sabiendo que...
| Código: | long long int mix; int acumDeCifras;
|
Entonces...
| Código: | int calcularCifras (int b) { acumDeCifras = 10; mix = 1000000000; while ((b / mix) < 1) { acumDeCifras --; mix /= 10; } cout << "acumDeCifras = " << acumDeCifras << endl; }
|
Que tiene de malo este codigo? Cuando lo ejecuto me da un runtime error, y no se porque. Podria ser porque aunque (b / mix) sea mayor o igual que 1, sigue el loop, y se convierte en infinito, pero no estoy seguro. Cual es el error? Muchas gracias! |
|
| Volver arriba | |
 |
digies

Registrado: 18 Nov 2005 Mensajes: 176 Ubicación: Cono Sur
| Publicado: 09/10/2007 4:37 pm | | | Título: |
| Hola
Perdón por mi ignorancia: Cómo la declaras a la función, cómo haces la llamada, y cómo es que retorna el valor?
Un saludo |
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 1331 Ubicación: En ecx esperando un call
| Publicado: 10/10/2007 6:14 am | | | Título: |
| Un error posible es cuando el parámetro es 0 (bucle infinito), por lo demás la función a vista de pájaro parece correcta aunque se puede simplicar en algo como:
| Código: | int calcularCifras2 (int b) { int i; for(i=0;b;i++) b/=10; return i; } |
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
|
| Volver arriba | |
 |
|
rir3760

Registrado: 01 Oct 2004 Mensajes: 3588 Ubicación: Mexico
| Publicado: 10/10/2007 7:10 am | | | Título: |
| Un problema con la funcion de Cheroky es que esta no reportaria el numero correcto de digitos si el numero a procesar es 0, 10, etc.
Una forma de realizar la operacion es:
| Código: | int num_digitos(int numero) { int i; for (i = 1; (numero /= 10) != 0; i++) ; return i; } |
En cuanto a la funcion de sasha12 parece (y lo digo en buen plan) codigo ofuscado ya que es el programador el que debe preparar el conteo del numero de digitos cuando esas operaciones es mejor dejarlas al compilador. Esa funcion podria reportar un numero incorrecto de digitos al procesar numeros mayores que 10,000,000,000 y se generaria un error de division por cero en el caso del valor 0 y con cualquier numero negativo.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 1331 Ubicación: En ecx esperando un call
| Publicado: 10/10/2007 7:43 am | | | Título: |
| | rir3760 escribió: | | Un problema con la funcion de Cheroky es que esta no reportaria el numero correcto de digitos si el numero a procesar es 0, 10, etc. |
| Código: | std::cout<<"ncifras: " <<calcularCifras2(0) << std::endl; Salida: $ncifras 0 |
| Código: | std::cout<<"ncifras: " <<calcularCifras2(10) << std::endl; Salida: $ncifras 2 |
| Código: | std::cout<<"ncifras: " <<calcularCifras2(10000000) << std::endl; Salida: $ncifras 8 |
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3588 Ubicación: Mexico
| Publicado: 10/10/2007 8:02 am | | | Título: |
| Tienes toda la razon y me retracto: el problema solo ocurre con el numero cero.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
cheroky
Registrado: 22 Sep 2005 Mensajes: 1331 Ubicación: En ecx esperando un call
| Publicado: 10/10/2007 8:14 am | | | Título: |
| No es un descuido, en algunos contextos puede ser interesante que '0' devuelva 0 por ser la única cifra/digito ausente de valor.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
|
| Volver arriba | |
 |
|
|