elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 4,388 veces)
DagothXX1

Desconectado Desconectado

Mensajes: 4


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

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: 1.151


Sic utere tuo ut alienum non laeda


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

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: 1.639


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

Aparte del error que ya te indicaron hay otros, por ejemplo la condición de escape del bucle es:
Código
  1. r = num % 10;
  2. num = num / 10;
  3.  
  4. if (N > r)
  5.   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
  1. int Digit(int N, int num)
  2. {
  3.   int i;
  4.   int r;
  5.  
  6.   if (num < 0)
  7.      num = -num;
  8.  
  9.   i = 0;
  10.   while (true){
  11.      r = num % 10;
  12.      num /= 10;
  13.  
  14.      if (i == N || num == 0)
  15.         break;
  16.  
  17.      i++;
  18.   }
  19.  
  20.   return (i == N) ? r : -1;
  21. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DagothXX1

Desconectado Desconectado

Mensajes: 4


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

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: 1.639


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

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
  1. int Digit(int N, int num)
  2. {
  3.   int rv;
  4.  
  5.   if (num < 0)
  6.      num = -num;
  7.  
  8.   if (num != 0){
  9.      int i;
  10.      int r = 0;
  11.  
  12.      for (N++, i = 0; i != N && num != 0; i++){
  13.         r = num % 10;
  14.         num /= 10;
  15.      }
  16.  
  17.      if (i == N)
  18.         rv = r;
  19.      else
  20.         rv = -1;
  21.   }else if (N == 0)
  22.      rv = 0;
  23.   else
  24.      rv = -1;
  25.  
  26.   return rv;
  27. }

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

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda Algoritmo
Programación General
Negr0 8 5,141 Último mensaje 25 Junio 2011, 11:27 am
por Negr0
Ayuda con un algoritmo
Programación Visual Basic
$Edu$ 7 3,359 Último mensaje 25 Octubre 2011, 01:51 am
por $Edu$
¡AYUDA URGENTE! ALGORITMO
Dudas Generales
mariele31 3 2,398 Último mensaje 29 Marzo 2022, 18:32 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines