найти минимум (двойной) в C ++ - PullRequest
0 голосов
/ 05 февраля 2019

Я только начал изучать c ++ и написал код для поиска минимума с помощью значений int, а теперь я должен сделать это с помощью double, и я ошибся!пожалуйста, дайте мне знать, как это исправить!

#include <iostream>

using namespace std;


void findminval (double num1, double num2) {
double minval;
if (num1<num2){
    minval=num1;
} else {
    minval=num2;
}

}
void findminval (int num1, int num2) {
int minval;
if (num1<num2){
    minval=num1;
} else {
    minval=num2;
}

}

int main(int argc, char** argv) {
int num1,num2;
    cout<<"Enter Two Numbers"<<endl;
    cin>>num1>>num2;
    int minimumvalue = findminval(int num1,int num2);
    cout<<minimumvalue<<endl;

double num1,num2;
    cout<<"Enter Two Numbers"<<endl;
    cin>>num1>>num2;
    double minimumvalue = findminval(num1,num2);
    cout<<minimumvalue<<endl;
return 0;
}

1 Ответ

0 голосов
/ 05 февраля 2019

В ваших функциях отсутствует явное значение return (вы также не можете изменить тип переменной в той же области видимости, поэтому ваш компилятор будет жаловаться, когда она достигнет double num1,num2;).

КакКак минимум, вам нужно написать

double findminval(double num1, double num2){
    double minval;
    if (num1 < num2){
        minval = num1;
    } else {
        minval = num2;
    }
    return minval;
}

, хотя вы могли бы упростить, возможно, за счет того, что его сложнее отлаживать, до

double findminval(double num1, double num2){
    if (num1 < num2){
        return num1;
    } else {
        return num2;
    }
}

или даже

double findminval (double num1, double num2){
    return num1 < num2 ? num1 : num2;
}

Обратите внимание, что вы могли бы templatise это так, что вам не нужны две функции:

template<typename Y> Y findminval(const Y& num1, const Y& num2){
    return num1 < num2 ? num1 : num2;
}

Обратите внимание, что теперь я передаю ссылку const, чтобы устранить возможные копии значений,Теперь вы видите, что мы натыкаемся на std::min.Есть один последний момент, который следует учитывать: «этикет» должен возвращать первый аргумент, если параметры равны.Это позволяет сохранить знаковый ноль с плавающей запятой или даже целочисленный тип в системе дополнения 1.Так что это, вероятно, лучшее, что нужно сделать, кроме использования std::min:

template<typename Y> Y findminval(const Y& num1, const Y& num2){
    return num1 <= num2 ? num1 : num2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...