Cout печатает так много раз в цикле - PullRequest
0 голосов
/ 06 февраля 2020

Я пытался написать программу, которая получает корни числа, например, если вы ввели 3 в меню, он попытается найти третью root вашего числа, поэтому, если вы ввели 8, это даст вам 2 , но существует проблема. Я использую a для l oop, и если я попытаюсь определить else для моего условия в l oop, будет напечатано cout столько раз, сколько определено l oop. Что я должен сделать, чтобы это исправить? Может кто-нибудь, пожалуйста, помогите мне? Должен ли я использовать время вместо этого? И, пожалуйста, держите ваши ответы простыми и очевидными. Вот мой код:

system("cls");
    system("color 78");
    int roots;
    cout << "Which root are you trying to find out?" << endl;
    cin >> roots;
    switch (roots)
    {
    case 1:
    {
        system("cls");
        double po;
        cout << "Please enter the number you wnat to see its first root: " << endl;
        cin >> po;
        cout << "Your number's first root is: " << po << endl;
    Backhome();

    }
    break;
    case 2:
    {
    system("cls");
    double p;
    cout <<"Please enter the number you want to find its second root:"<< endl;
    cin >> p;
    cout <<"Your number's second root is: "<< sqrt(p) << endl;
    cout << "Your number's second root is: " << "-" << sqrt(p) << endl;
    Backhome();
    }
    break;
case 3:
{
    system("cls");
    double th;
    cout << "Please enter the number you want to find its third root: "<< endl;
    cin >> th;
    for (int i= -10000 ; i <= 10000; i++)
    {
        if ((i*i*i) == th)
        {
            cout << "Your number's third root is: " << i << endl;
        }
        else
        {
         cout << "Your number doesn't have a third root." << endl;
         }
    }
    Backhome();
}
break;
case 4:
{
    system("cls");
    double foot;
    cout << "Enter the number you want to see its fourth root: " << endl;
    cin >> foot;
    for (int i = -10000; i <= 10000; i++)
    {
        if ((i*i*i*i) == foot)
        {
            cout << "Your number's fourth root is: " << i << endl;
        }
        else
        {
         cout << "Your number doesn't have a fourth root." << endl;
         }
    }
    Backhome();
}
break;
case 5:
{
    system("cls");
    double pive;
    cout << "Enter the number you want to see its fifth root: " << endl;
    cin >> pive;
    for (int i = -10000; i <= 10000; i++)
    {
        if ((i*i*i*i*i) == pive)
        {
            cout << "Your number's fifth root is: " << i << endl;
        }

        else
        {
         cout << "Your number doesn't have a fifth root." << endl;
         }
}
    Backhome();
}

(Короче говоря, проблема в том, что elses в циклах печатается столько раз, сколько определено в l oop, и я не хочу, чтобы это произошло. I Буду признателен за вашу помощь.)

1 Ответ

2 голосов
/ 07 февраля 2020

Ваша программа может быть значительно короче, вам просто нужно указать число на 1 / корни:

system("cls");
system("color 78");
int roots;
cout << "Which root are you trying to find out?" << endl;
cin >> roots;    
system("cls");
double po;
cout << "Please enter the number you wnat to see its " << roots << "th root: " << endl;
cin >> po;
cout << "Your number's " << roots << "th root is: " << pow(po, 1.0/roots) << endl;
Backhome(); 

Вероятно, у вас здесь будут числовые ошибки, например, получение 1,9999 за третий root из 8, вам просто нужно округлить число до ближайшего целого числа. Я бы сделал:

double result = pow(po, 1.0/roots);
int resultUp = ceil(result);
int resultDown = floor(result);
int nearestInt = resultUp;
if ((result - resultDown) < (resultUp - result))
     nearestInt = resultDown;

if (abs(pow(nearestInt, roots) - po) < 1e-6)
     result = nearestInt;

cout << "Your number's " << roots << "th root is: " << result << endl;
Backhome(); 
...