Найти все целые неотрицательные корни уравнения - C (СИ)
Формулировка задачи:
Привет. Делая очередную лабу столкнулся с такой проблемой, преподаватель объяснить не хочет, говорит мол делай сам.
Задача такова, найти все целые неотрицательные корни уравнения x^3 + y^3 = 729. Ниже мой код, компилятор Visual Studio 2010.
Итак, меня интересует вопрос, почему программа выдаёт мне только решение x = 0 y = 9, но не выдаёт так-же x = 9 y = 0. Пробовал, к примеру, поменять формулу на x^3 + y^3 = 8, всё прекрасно работает, выдаёт корни 0 2 и 2 0. Объясните пожалуйста почему такая вот штука происходит.
Листинг программы
- #include "stdafx.h"
- #include "math.h"
- #include "locale.h"
- double k,x;
- int y;
- int _tmain(int argc, _TCHAR* argv[])
- {
- setlocale(LC_ALL,"russian");
- k = pow (729,1.0/3);
- int z = (double)k+1;
- puts("Целыми неотрицательными корнями уравнения x^3+y^3=729 являются числа:");
- for (y=0; y<=z; y++)
- {
- x = pow((729-y*y*y),1.0/3);
- if (int(x) == x)
- {
- printf(" x=%d y=%d \n",int(x),y);
- }
- }
- return 0;
- }
Решение задачи: «Найти все целые неотрицательные корни уравнения»
textual
Листинг программы
- //---------------------------------------------------------------------------
- #include <iostream>
- #include <cmath>
- using namespace std;
- const double e= 10e-12;
- double k,x;
- int y=0;
- //---------------------------------------------------------------------------
- int _tmain(int argc, _TCHAR* argv[])
- {
- double d=729;
- k = pow (d,1.0/3);
- int z = (double)k+1;
- cout<<"Целыми неотрицательными корнями уравнения x^3+y^3= "<<d<<" являются числа:"<<endl;
- for (y=0; y<=z; y++)
- {
- x = pow((d-y*y*y),1.0/3.0);
- if( fabs(ceil(x)-x) < e )
- cout<<"x= "<<ceil(x)<<" "<<"y= "<<y<<endl;
- }
- system("pause");
- return 0;
- }
- //---------------------------------------------------------------------------
Объяснение кода листинга программы
В этом коде на языке C выполняется поиск всех целых неотрицательных корней уравнения x^3 + y^3 = d, где d — это число 729.
- В первой строке объявляются переменные: — k — для хранения корня, равного 729^(1/3), то есть 9 — x — для промежуточных вычислений — y — для контроля цикла — d — для хранения значения 729
- Далее, в цикле, перебираются все значения y от 0 до (double)k+1 (то есть от 0 до 10).
- Внутри цикла вычисляется значение x, как корень кубический из (d — yyy) с точностью до 12-го знака после запятой.
- Затем проверяется, является ли округленное значение x целым числом (если abs(ceil(x)-x) < e).
- Если округленное значение x является целым числом, то выводятся значения x и y.
- В конце программы вызывается функция system(
pause
), чтобы программа не закрылась сразу после вывода результатов, и возвращается 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д