elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 23:25  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Ayuda con algoritmo C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con algoritmo C++  (Leído 876 veces)
DagothXX1

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda con algoritmo C++
« en: 13 Noviembre 2011, 19:48 »

Hola. Estoy iniciándome en la programación (Dev C++) y tengo problemas con un algoritmo que estoy haciendo, el cual no puedo dar con el error. Lo que tengo que hacer es implementar una función dígito(N,num) que me devuelva el digito N-ésimo de un número num, teniendo en cuenta que el dígito 0 es el dígito más a la derecha (el menos significativo). La función tiene que devolver -1 si el numero no tiene suficientes dígitos y también tener en cuenta si el N pueda ser un número negativo.

Acá les paso un ejemplo:
digito (0,3456), devuelve 6
digito(1, -3456) devuelve 5
digito(4, 3456) devuelve -1

Acá les muestro el código que hice:

int Digit (int N, int num)
{
  int r;
 
  for (int i=0; i<N; i++)
  {
    r = num%10;
    num = num/10;

    if (N>r)
     return -1;
  }
}

int main()
{
  int N, num;

  cout<<"Ingrese la posicion: ";
  cin>>N;

  cout<<"ingrese el numero a evaluar: ";
  cin>>num;

  cout<<"La cifra es: "<<Digit(N,num)<<endl;
  system ("PAUSE");
}


Quedo a la espera de una respuesta para saber en qué me equivoqué, y desde ya, muchas gracias.


En línea
тαптяαпсє


Desconectado Desconectado

Mensajes: 739


Usuario EHN


Ver Perfil
Re: Ayuda con algoritmo C++
« Respuesta #1 en: 13 Noviembre 2011, 20:52 »

Simple, tienes bien hecho el algoritmo, te falta retornar algo..después del bucle for.

Código:
return r;

Saludos


En línea

rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Ayuda con algoritmo C++
« Respuesta #2 en: 14 Noviembre 2011, 03:53 »

Aparte del error que ya te indicaron hay otros, por ejemplo la condición de escape del bucle es:
Código
r = num % 10;
num = num / 10;
 
if (N > r)
  return -1;
Esta mal (revisa a lápiz y papel que pasa si quieres obtener el dígito de indice 3 del numero 3210).

Tampoco consideras, como indica el enunciado, si el numero es negativo. Aquí lo mejor seria revisar que dice el estándar sobre "quien se queda con el signo" (hasta donde recuerdo es "implementation defined").

También faltan las directivas de inclusión (supongo solo fue un olvido).

Una forma de implementar la función con un bucle "feo" (para así evitar el caso especial del numero cero) es:
Código
int Digit(int N, int num)
{
  int i;
  int r;
 
  if (num < 0)
     num = -num;
 
  i = 0;
  while (true){
     r = num % 10;
     num /= 10;
 
     if (i == N || num == 0)
        break;
 
     i++;
  }
 
  return (i == N) ? r : -1;
}

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
DagothXX1

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con algoritmo C++
« Respuesta #3 en: 14 Noviembre 2011, 12:24 »

Hola nuevamente. Muchísimas gracias a todos aquellos que se han tomado un poquito de su tiempo para contestar mi duda. Disculpen si mi pregunta ahora suena un poco "mal", pero quería saber si no hay una forma más simple de resolver los errores que me marcaste rir3760, es decir usando sentencias un tanto más "básicas" digamos, dado que, como recién me estoy iniciando, hay varias de ellas de las cuales no comprendo bien su funcionamiento. Con respecto a lo de las directivas de inclusión, eso lo hice a drede para no hacer tan largo el código y centrarme directamente en la función y el programa principal. Quedo a la espera de la respuesta, y nuevamente muchas gracias por ayudarme!
En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Ayuda con algoritmo C++
« Respuesta #4 en: 15 Noviembre 2011, 00:36 »

El problema es, no se puede reducir mucho y utilizando formas mas simples lo único que se consigue es incrementar el tamaño de la función.

Para empezar se puede manejar al numero cero como un caso especial. Eso deja el bucle principal de una forma mas "natural" y por ultimo se puede eliminar el uso del operador condicional "? :" quedando en:
Código
int Digit(int N, int num)
{
  int rv;
 
  if (num < 0)
     num = -num;
 
  if (num != 0){
     int i;
     int r = 0;
 
     for (N++, i = 0; i != N && num != 0; i++){
        r = num % 10;
        num /= 10;
     }
 
     if (i == N)
        rv = r;
     else
        rv = -1;
  }else if (N == 0)
     rv = 0;
  else
     rv = -1;
 
  return rv;
}

El codigo es mas facil de seguir pero, honestamente, no me gusta nada (prefiero la primera forma).

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con un algoritmo
Programación General
adolfo187 2 432 Último mensaje 21 Marzo 2005, 15:30
por adolfo187
ayuda con algoritmo
Programación General
moyo18 2 420 Último mensaje 15 Septiembre 2006, 22:51
por SirLanceCC
Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
Desafíos - Wargames
Debci 12 3,686 Último mensaje 12 Enero 2010, 01:00
por Novlucker
dime el algoritmo que más te gusta... ejm:algoritmo del avestruz
Programación General
jhonatanAsm 0 1,290 Último mensaje 13 Mayo 2011, 01:30
por jhonatanAsm
Ayuda Algoritmo
Programación General
Negr0 8 910 Último mensaje 25 Junio 2011, 11:27
por Negr0
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines