• Miércoles 20 de Noviembre de 2024, 08:20

Autor Tema:  No dejar espacio tras último dato  (Leído 1353 veces)

amgc

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
No dejar espacio tras último dato
« en: Lunes 14 de Febrero de 2011, 21:27 »
0
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:

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: No dejar espacio tras último dato
« Respuesta #1 en: Martes 15 de Febrero de 2011, 02:32 »
0
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.

amgc

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: No dejar espacio tras último dato
« Respuesta #2 en: Martes 15 de Febrero de 2011, 15:28 »
0
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

herzdark

  • Miembro activo
  • **
  • Mensajes: 38
  • Nacionalidad: ar
    • Ver Perfil
Re: No dejar espacio tras último dato
« Respuesta #3 en: Miércoles 16 de Febrero de 2011, 04:21 »
0
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

amgc

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: No dejar espacio tras último dato
« Respuesta #4 en: Miércoles 16 de Febrero de 2011, 22:01 »
0
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.