Найти все целые неотрицательные корни уравнения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет. Делая очередную лабу столкнулся с такой проблемой, преподаватель объяснить не хочет, говорит мол делай сам. Задача такова, найти все целые неотрицательные корни уравнения x^3 + y^3 = 729. Ниже мой код, компилятор Visual Studio 2010.
Листинг программы
  1. #include "stdafx.h"
  2. #include "math.h"
  3. #include "locale.h"
  4. double k,x;
  5. int y;
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8. setlocale(LC_ALL,"russian");
  9. k = pow (729,1.0/3);
  10. int z = (double)k+1;
  11. puts("Целыми неотрицательными корнями уравнения x^3+y^3=729 являются числа:");
  12. for (y=0; y<=z; y++)
  13. {
  14. x = pow((729-y*y*y),1.0/3);
  15. if (int(x) == x)
  16. {
  17. printf(" x=%d y=%d \n",int(x),y);
  18. }
  19. }
  20. return 0;
  21. }
Итак, меня интересует вопрос, почему программа выдаёт мне только решение x = 0 y = 9, но не выдаёт так-же x = 9 y = 0. Пробовал, к примеру, поменять формулу на x^3 + y^3 = 8, всё прекрасно работает, выдаёт корни 0 2 и 2 0. Объясните пожалуйста почему такая вот штука происходит.

Решение задачи: «Найти все целые неотрицательные корни уравнения»

textual
Листинг программы
  1. //---------------------------------------------------------------------------
  2. #include <iostream>
  3. #include <cmath>
  4. using namespace std;
  5. const double e= 10e-12;
  6. double k,x;
  7. int y=0;
  8. //---------------------------------------------------------------------------
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11.     double d=729;
  12.     k = pow (d,1.0/3);
  13.     int z = (double)k+1;
  14.     cout<<"Целыми неотрицательными корнями уравнения x^3+y^3= "<<d<<" являются числа:"<<endl;
  15.     for (y=0; y<=z; y++)
  16.     {
  17.      x = pow((d-y*y*y),1.0/3.0);
  18.          if( fabs(ceil(x)-x) < e )
  19.                  cout<<"x= "<<ceil(x)<<"   "<<"y= "<<y<<endl;
  20.     }
  21. system("pause");
  22. return 0;
  23. }
  24. //---------------------------------------------------------------------------

Объяснение кода листинга программы

В этом коде на языке C выполняется поиск всех целых неотрицательных корней уравнения x^3 + y^3 = d, где d — это число 729.

  1. В первой строке объявляются переменные: — k — для хранения корня, равного 729^(1/3), то есть 9 — x — для промежуточных вычислений — y — для контроля цикла — d — для хранения значения 729
  2. Далее, в цикле, перебираются все значения y от 0 до (double)k+1 (то есть от 0 до 10).
  3. Внутри цикла вычисляется значение x, как корень кубический из (d — yyy) с точностью до 12-го знака после запятой.
  4. Затем проверяется, является ли округленное значение x целым числом (если abs(ceil(x)-x) < e).
  5. Если округленное значение x является целым числом, то выводятся значения x и y.
  6. В конце программы вызывается функция system(pause), чтобы программа не закрылась сразу после вывода результатов, и возвращается 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы