Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Riverxz en 27 Agosto 2016, 04:58 am



Título: Problema de programación
Publicado por: Riverxz en 27 Agosto 2016, 04:58 am
Buenas colegas  :D tengo el siguiente problema. Piden ingresar un número e indicar si este se puede expresar como la suma de dos enteros al cuadrado. Bueno aqui está lo que he avanzado pero me bota errores ¿alguna ayuda?

Código
  1. #include<iostream.h>
  2. #include<conio.h>
  3. #include<math.h>
  4.  
  5. void main()
  6. {int n=-1,a=1,b=1,cont=0;
  7. while(n<0)
  8.  {
  9.   cout<<"Ingrese un numero: ";cin>>n;
  10.   getche();
  11.  }
  12. while(a<n)
  13.  {
  14.   while(b<n)
  15.    {
  16.     if(pow(a,2)+pow(b,2) == pow(n,2))
  17.      {
  18.       cont++;
  19.       cout<<a<<"^2"<<" + "<<b<<"^2"<<" = "<<n;
  20.      }
  21.     b++;
  22.    }
  23.   a++;
  24.  }
  25. if (cont==0)
  26.  {
  27.   cout<<"No hay dos cuadrados enteros que sumen "<<n;
  28.  }
  29. else
  30.  {
  31.   cout<<"En total hay "<<cont<<" cuadrados enteros que sumen "<<n;
  32.  }
  33. getche();
  34. }


Título: Re: Problema de programación
Publicado por: class_OpenGL en 27 Agosto 2016, 14:13 pm
En primer lugar, no hace falta (y tampoco tendrías que usar) conio.h. En segundo lugar, la función para obtener un carácter no es getche, sino getchar. En tercer lugar, hay un error de lógica en el programa en la siguiente línea:

Código
  1. if(pow(a,2)+pow(b,2) == pow(n,2))

Según el enunciado, la siguiente ecuación se tendría que verificar:
a^2 + b^2 = n
Pero tu estás escribiendo la ecuación
a^2 + b^2 = n^2

En tercer lugar, no reinicias el valor de 'b' en cada iteración:

Código
  1.    while(a<n)
  2.    {
  3.        while(b<n)
  4.        {
  5.            b = a; // Reinicia 'b'
  6.            if(pow(a,2)+pow(b,2) == pow(n,2))
  7.            {
  8.                cont++;
  9.                cout<<a<<"^2"<<" + "<<b<<"^2"<<" = "<<n;
  10.            }
  11.            b++;
  12.        }
  13.        a++;
  14.    }