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

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

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

Привет. Делая очередную лабу столкнулся с такой проблемой, преподаватель объяснить не хочет, говорит мол делай сам. Задача такова, найти все целые неотрицательные корни уравнения x^3 + y^3 = 729. Ниже мой код, компилятор Visual Studio 2010.
#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;
}
Итак, меня интересует вопрос, почему программа выдаёт мне только решение x = 0 y = 9, но не выдаёт так-же x = 9 y = 0. Пробовал, к примеру, поменять формулу на x^3 + y^3 = 8, всё прекрасно работает, выдаёт корни 0 2 и 2 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.

  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
Похожие ответы