0

3 つのチームに対して 3 つのランダム スコアを生成し、どれが最大かを判断しようとしています。私のアプローチはPredfined、プログラマ定義関数である関数を使用し、関数を宣言して定義することです。私はこれに非常に慣れていないので、購入したこの本はあまり役に立ちません。

コード側の目的の概要は次のとおりです。

  • 事前定義された関数を呼び出して一連の乱数を生成する

  • 値を返す関数を宣言して定義する

  • プログラマ定義関数を呼び出します。

最終的な目標 (本から引用):

  • maxタイプの 3 つのパラメーターを取りint、パラメーターの最大値を返すという名前の関数を作成し ます。プログラムには、この関数の宣言と定義の両方が必要です。関数宣言は、関数の上に配置する必要がありmainます。

  • 次のことを行う関数を書きmain()ます。

    を。Hoosier、Boilermakers、Fighting Irish の 3 つのチームのそれぞれのスコアとして 10 から 40 までのランダムな整数を生成し、これらのスコアを出力します。プログラムは、異なる時間に実行されると、異なる一連のスコアを生成できなければなりません。

    b. タスク 1 で定義した関数を呼び出して、maxすべてのチームの最大スコアを見つけ、見つかった最大スコアを出力します。

    c. 最大のスコアを Hoosier のスコアと比較し、「Go Hoosier!!!」と出力します。Hoosier チームのスコアがすべてのチームの最大スコアに等しい場合。

ここにコードがあります

/*

    Author: Dan Wingeart
    Assignment: Lab 9

*/

#include <iostream>

#include <cmath>

#include <cstdlib>

using namespace std;

int max(int Hscore, int Pscore, int Fscore);

int main()
{

    int Fscore, Pscore, Hscore, highestScore;

    Fscore = 10 + rand() % 40;
    Pscore = 10 + rand() % 40;
    Hscore = 10 + rand() % 40;

    cout << "Prediction performance of sport teams:" << endl;
    cout << "Team Hoosier's score is " << Hscore << endl;
    cout << "Team Boilermakers' score is " << Pscore << endl;
    cout << "Team Fighting Irish's score is " << Fscore << endl;

    highestScore = max(Hscore, Pscore, Fscore)

    if (max>Pscore&&max>Fscore){
        cout << "The largest score is " << max << endl;
        cout << "GO HOOSIER!!!" << endl;}
    else
        cout << "The largest score is " << max << endl;


return 0;
}

int max(int Hscore, int Pscore, int Fscore)
{

    if (Hscore>Pscore&&Hscore>Fscore){
        cout << Hscore;}

    else if (Pscore>Hscore&&Pscore>Fscore){
        cout << Pscore;}

    else{
        cout << Fscore;}

return 0;

}

結果のエラー:

ClCompile:
1>  Lab9.cpp
1>c:\users\mackiller\documents\visual studio 2010\projects\lab9\lab9\lab9.cpp(34): error C2143: syntax error : missing ';' before 'if'
1>c:\users\mackiller\documents\visual studio 2010\projects\lab9\lab9\lab9.cpp(34): error C2563: mismatch in formal parameter list
1>c:\users\mackiller\documents\visual studio 2010\projects\lab9\lab9\lab9.cpp(34): error C2563: mismatch in formal parameter list
1>c:\users\mackiller\documents\visual studio 2010\projects\lab9\lab9\lab9.cpp(35): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1>          with
1>c:\users\mackiller\documents\visual studio 2010\projects\lab9\lab9\lab9.cpp(38): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1>          with
1
4

4 に答える 4

1

関数の実装に問題がありますmax。まずあなたはいつもreturn 0何があってmaxも。しかし、別の問題もあります。

Hscore = 40Pscore = 40、を想像Fscore = 20して、関数を見てみましょう。

int max(int Hscore, int Pscore, int Fscore)
{

    if (Hscore>Pscore&&Hscore>Fscore){ // False, Hscore > Pscore is false since Hscore is even but not greater than Pscore
        cout << Hscore;}

    else if (Pscore>Hscore&&Pscore>Fscore){  // False, Pscore > Hscore is false since Pscore is even but not greater than Hscore
        cout << Pscore;}

    else{  // else statement gets executed even tho Fscore was the lowest.
        cout << Fscore;}

    return 0;
}

>=の代わりに max 関数で使用する必要があり>ます。次のようになります。

int max(int Hscore, int Pscore, int Fscore)
{

    if (Hscore>=Pscore&&Hscore>=Fscore){
        cout << Hscore;
        return Hscore;
    }

    else if (Pscore>=Hscore&&Pscore>=Fscore){
        cout << Pscore;
        return Pscore;
    }

    else{
        cout << Fscore;
        return Fscore;
    }
}
于 2013-10-30T19:31:09.303 に答える
1

コード サンプルに基づいて、あなたが持っている本は少し古い印象があります (1999 年以前の C では必要だった、関数の先頭ですべての変数を宣言しています)。新しい本を入手することを強くお勧めします。個人的には、Accelerated C++またはProgramming: Principles and Practice using C++ (C++ の作成者による) をお勧めします。

コードの最大の問題は、次の行という単純な事実です。

if (max>Pscore&&max>Fscore){

max(関数) とhighestScore(変数)を混同します。あなたはそれをしたい:

if (highestScore>Pscore&&highestScore>Fscore){

個人的には以下のように書きますが、

if (highestScore == Hscore) {

それとは別に、標準ライブラリのヘッダーに関数max(2 つの項目のうち大きい方を返す) とmax_element(シーケンス内の最大の項目を返す) があることに興味があるかもしれません。yourを への呼び出しに<algorithm>置き換えることができます:maxmax

int highestScore = std::max(std::max(Hscore, Pscore), Fscore);

またはへの呼び出しmax_element:

int scores[] = { Pscore, Fscore, Hscore };
int highestScore = *max_element(scores, scores + 3);
于 2013-10-30T20:19:17.117 に答える