Напишите функцию для отображения наибольшего из трех чисел. Кто-нибудь знает, где не так с моей программой? - PullRequest
1 голос
/ 27 марта 2020

(наибольшее из трех чисел)
Напишите функцию со следующим заголовком, чтобы отобразить наибольшее из трех чисел:

void displayLargest(double num1, double num2, double num3)

Напишите тестовую программу, которая предлагает пользователю ввести три числа и вызывает функция для отображения наибольших из них.

Следующая моя программа:

#include<iostream>
#include<iomanip>
using namespace std;

void displayLargest (double num1, double num2, double num3)
{  
    if (num1 > num2 && num1 > num3){
        cout << num1;
    }
    else if (num2 > num1 && num2 > num3){
        cout << num2;
    }
    if (num3 > num1 && num3 > num2){
        cout << num3;
    }
}

int main()
{
    double num1, num2, num3;
    cout << "Please enter 3 numbers:";
    cin >> num1, num2, num3;

    displayLargest (double num1, double num2, double num3);
    system("pause");
    return 0;
}

Но система показывает следующую ошибку:

main.cpp: In function ‘int main()’:
main.cpp:28:21: error: expected primary-expression before ‘double’
     displayLargest (double num1, double num2, double num3);
                     ^~~~~~
main.cpp:28:34: error: expected primary-expression before ‘double’
     displayLargest (double num1, double num2, double num3);
                                  ^~~~~~
main.cpp:28:47: error: expected primary-expression before ‘double’
     displayLargest (double num1, double num2, double num3);
                                               ^~~~~~

Ответы [ 3 ]

1 голос
/ 27 марта 2020

Это

displayLargest (double num1, double num2, double num3);

- синтаксически неверная конструкция.

Вызов функции будет выглядеть как

displayLargest(num1, num2, num3);

Если вы используете стандартную функцию C system тогда вам нужно включить заголовок <cstdlib>.

Также сама функция неверна. При этом не учитывается, что пользователь может ввести три или два равных числа.

Функция может быть определена различными способами.

Вот два примера определения функции.

Либо

void displayLargest( double num1, double num2, double num3 )
{
    if ( !( num1 < num2 ) && !( num1 < num3 ) )
    {
        std::cout << num1 << '\n';
    }
    else if ( !( num2 < num3 ) )
    {
        std::cout << num2 << '\n';
    }
    else
    {
        std::cout << num3 << '\n';
    }
}

или

void displayLargest( double num1, double num2, double num3 )
{
    double largest = num1;

    if ( largest < num2 )
    {
        largest = num2;
    }

    if ( largest < num3 )
    {
        largest = num3;
    }

    std::cout << largest << '\n';
}

Если вам разрешено использовать стандартные алгоритмы, то функция может быть реализована с использованием алгоритма std::max.

Вот демонстрационная программа.

#include <iostream>
#include <algorithm>

void displayLargest( double num1, double num2, double num3 )
{
    std::cout << std::max( { num1, num2, num3 } ) << '\n';
}

int main() 
{
    displayLargest( 1.2, 1.3, 1.1 );

    return 0;
}
0 голосов
/ 27 марта 2020

Во-первых, чтобы прочитать три числа в одной строке, просто расширите канал cin на все три переменные.

Проблема, которую вы описываете, - ошибка компиляции, поскольку вы не можете повторно объявить num1 num2 и num3 переменные. Смотрите следующий код, который исправляет эти проблемы.

#include<iostream>

#include<iomanip>

using namespace std;

void displayLargest(double num1, double num2, double num3)

{
  if (num1 > num2 && num1 > num3) {
    cout << num1;
  } else if (num2 > num1 && num2 > num3) {
    cout << num2;
  }
  if (num3 > num1 && num3 > num2) {
    cout << num3;
  }

}

int main() {
  double num1, num2, num3;
  cout << "Please enter 3 numbers:";
  cin >> num1 >> num2 >> num3;

  displayLargest(num1, num2, num3);
  return 0;
}

Это пример ввода / вывода

./main
Please enter 3 numbers:1 2 3
3
0 голосов
/ 27 марта 2020

Измените эту строку:

displayLargest(double num1, double num2, double num3);

на:

displayLargest(num1, num2, num3);
...