Найти все целые неотрицательные корни уравнения - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д