SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: amgc en Lunes 14 de Febrero de 2011, 21:27

Título: No dejar espacio tras último dato
Publicado por: amgc en Lunes 14 de Febrero de 2011, 21:27
Código: C++
  1. bool perfecto(int n)
  2. {
  3.     int suma, i;
  4.     suma = 0;
  5.     for (i = 1; i < n; i++)
  6.     {
  7.         if (n % i == 0) {
  8.             suma += i;
  9.             cout << i << " ";} // impresión de divisores
  10.     }
  11.     if (suma == n)
  12.         return true;
  13.     else
  14.         return false; }
  15.  
Ese bloque de código hace referencia a una función empleada para calcular si un número es perfecto y como pueden observar, hay una línea que imprime cada uno de sus divisores propios dejando un espacio entre éste y el siguiente, pero quisiera que no se dejase un espacio en blanco tras el último divisor. ¿Qué puedo hacer para resolver esto?

Reciban un cordial saludo.
Atentamente, Ángel Manuel. :comp:
Título: Re: No dejar espacio tras último dato
Publicado por: Amilius en Martes 15 de Febrero de 2011, 02:32
Simple: imprimirlo antes.
Como de antemano es posible saber si ya imprimiste un número (actualizando una variable "bool"), no imprimas un espacio antes del número si aún no imprimiste un número.
Título: Re: No dejar espacio tras último dato
Publicado por: amgc en Martes 15 de Febrero de 2011, 15:28
Cita de: "Amilius"
Simple: imprimirlo antes.
Como de antemano es posible saber si ya imprimiste un número (actualizando una variable "bool"), no imprimas un espacio antes del número si aún no imprimiste un número.

Hola, cómo que imprimirlo antes, es que no le he entendido; lo que quiero es que tras el último divisor impreso no se deje ningún espacio. He probado con líneas para que no se dejase espacio si no se hacían repeticiones (i++) pero o bien falla o aparecen absurdeces. Si no le importa, escriba en la respuesta alguna línea de código para entendernos mejor.

Muchas gracias
Un saludo
Título: Re: No dejar espacio tras último dato
Publicado por: herzdark en Miércoles 16 de Febrero de 2011, 04:21
mmm muy buena pregunta pero yo lo intentaria con el operador ? ej: condición?resp verdadera:resp falsa y ademas la condición del for no es <= porque como lo estas tomando no contas el valor i=n porque n es divisor de si mismo xej 6 tiene div a 1,2,3 y 6
Código: C++
  1. bool perfecto(int n)
  2. {int suma, i;
  3.  suma = 0;
  4.  for (i = 1; i <= n; i++)
  5.   {if (n % i == 0)
  6.     {suma += i;
  7.      cout << i <<(i!=n)? " ":endl;// impresión de divisores
  8.      }
  9.   }
  10.  if (suma == n)
  11.     return true;
  12.   else
  13.     return false;
  14. }
  15.  
  16.  

espero q te alla servido
Título: Re: No dejar espacio tras último dato
Publicado por: amgc en Miércoles 16 de Febrero de 2011, 22:01
Cita de: "herzdark"
mmm muy buena pregunta pero yo lo intentaria con el operador ? ej: condición?resp verdadera:resp falsa y ademas la condición del for no es <= porque como lo estas tomando no contas el valor i=n porque n es divisor de si mismo xej 6 tiene div a 1,2,3 y 6
Código: C++
  1. bool perfecto(int n)
  2. {int suma, i;
  3.  suma = 0;
  4.  for (i = 1; i <= n; i++)
  5.   {if (n % i == 0)
  6.     {suma += i;
  7.      cout << i <<(i!=n)? " ":endl;// impresión de divisores
  8.      }
  9.   }
  10.  if (suma == n)
  11.     return true;
  12.   else
  13.     return false;
  14. }
  15.  
  16.  

espero q te alla servido

Estimado usuario:

Su respuesta me ha sido de gran utilidad. Muchísimas gracias.
Reciba un cordial saludo.