Anuncios Google

Ayuda para realizar un programa

Hola, llevo mas de 3 dias quebrandome la cabeza para realizar esto:

Escriba un programa que solicite un valor entero y haga lo siguiente: si el número es positivo encuentre todas las sumas de números enteros positivos consecutivos hacia la derecha (orden ascendente) que den el número introducido, por ejemplo: 50 = 8 + 9 + 10 + 11 + 12 y 50 = 11 + 12 + 13 + 14; si el número es negativo éste encuentre todas las sumas de número enteros negativos consecutivos hacia la izquierda (orden descendente) que den el número introducido, por ejemplo: -50 = -8 - 9 - 10 - 11 - 12 y -50 = -11 - 12 - 13 – 14; pero si no existe ninguna suma imprima que no es posible obtenerla.

 

Y esto es lo que llevo:

 

#include<stdio.h>
void main()
{
    int nu,az=0,x=1,y=-1;
    printf("Ingrese un numero: ");
    scanf("%i",&nu);
    if(nu>0)
    {
        do
        {
            az=az+x;
            printf("+ %i ",x);
            x++;
        }
        while(az<nu);
    }
    if(nu<0)
    {
        do
        {
            az=az+y;
            printf(" %i ",y);
            y--;
        }
        while(az>nu);
    }
}


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

No ibas mal encaminado.

Pero te faltaba un bucle. Tu haces la suma (con el do-while) desde x=1 mientras az<nu. Sin embargo, esa suma la tienes que hacer empezando en 1, en 2, en 3, etc. comprobando todas las posibilidades. Tienes que añadir un for, por ejemplo, for (i=1; i<nu; i++)x=i;

Sería algo así:

#include<stdio.h>
int main(int argc, char*argv [])
{
  int nu,az=0,x=1,y=-1, i, encontrado=0;
  printf("Ingrese un numero: ");
  scanf("%i",&nu);
  if(nu>0)
    {
      // El primer número puede ser, desde el 1 hasta nu-1
      for (i=1; i<nu; i++)
	{
  	  // sumamos los números consecutivos a partir de i (i+1 + i+2 + i+3...)
	  // Para ello, hacemos un do-while con la x variando desde x=i mientras az<nu.
	  x = i;
	  az=0;
	  do
	    {
	      az=az+x;
	      x++;
	    }
	  while(az<nu);
	  // Si la suma total es igual al número, imprimimos la lista de números
	  if (az == nu)
	    {
	      x = i;
	      az=0;
	      printf ("%i = ", nu);
	      do
		{
		  az=az+x;
		  if (az<nu) // Esta condición es para que imprima x+y+z en lugar de x+y+z+ (que no ponga el último +)
		    printf("%i + ",x);
		  else // Así, el último número no lleva +, y además hace un salto de línea (\n)
		    printf("%i\n", x);
		  x++;
		}
	      while(az<nu);
	      encontrado=1;
	    }
	}
      // Si no se ha encontrado ninguna lista de números, lo decimos:
      if (!encontrado)
	{
	  printf ("No se ha encontrado ninun conjunto de números consecutivos cuya suma de %i\n", nu);
	}
    }
  if(nu<0)
    {
      do
        {
	  az=az+y;
	  printf(" %i ",y);
	  y--;
        }
      while(az>nu);
    }
}

Aunque no me costaba nada hacerlo todo, he querido hacer solo la parte de los positivos, simplemente para dejarte hacer la parte de los negativos. Así te obligas a entender el código :). La parte de los positivos la he probado y funciona.

Si tienes muchos problemas con los negativos, dimelo, aunque lo dudo, porque es prácticamente igual pero hacia atrás.

Saludos!


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Fednick

Sencillamente impresionante,

Sencillamente impresionante, no me había planteado la idea de poner un for para que no sea siempre 1+2+3...

Ya lo he entendido, aunque pare serte sincero, me llevo 30 min. xD

Gracias ^^

Imagen de joserc87

De nada.

De nada. Me alegro que se entienda :D.

Imagen de adriel0000

Joserc87

Joserc87 ayudando como siempre a los nuevos en esto!!! Gracias por todo :)

Imagen de joserc87

De nada.

Al fin y al cabo, yo también fuí nuevo en esto una vez, (como todos) y también me ayudaron. Llegará el día en que seais vosotros los que ayudeis a "los nuevos" :P.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Loopin

¿Se puede obtener SIEMPRE un

¿Se puede obtener SIEMPRE un número a partir de la suma de una serie de números consecutivos?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.