/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Esta funcion....

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
sasha12



Registrado: 27 Sep 2007
Mensajes: 13

MensajePublicado: 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: 379
Ubicación: Cono Sur

MensajePublicado: 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: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 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: 3841
Ubicación: Mexico

MensajePublicado: 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: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 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: 3841
Ubicación: Mexico

MensajePublicado: 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: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com