2016-09-19 12 views
0

これは、私はこれが私のコードであるシンプルなC++週の計算、ちょっとした問題?

enter image description here

を達成しようとしていますものです。私は今完全に立ち往生しています、私はここで逃しているのは私の顔の前にあるのですか?私はすべての機能が整っていると感じますが、正しく計算するとは思いません。私はここにいくつかのエラーがあるので、実行しようとしても修正できません。 は、任意の助けてくれてありがとう; -

#include <iostream> 
#include <cmath> 
#include <string> 

using namespace std; 

class dayType 
{ 
public: 
    void setDay(int dayNum); 
    // set the day with the dayNum as parameter 
    void printd(dayNum); 
    // print the dayNum 
    int returnDay(); 
    // return the day of the week 
    void dayAfter(); 
    // return next day 
    void dayBefore(); 
    // return previous day 
    void randomDay(int dayNum); 
    // function to return a day after a certain number of days 


    dayType(int dayNum); 
    // Constructor with parameters setting dayNum according to parameters 
    dayType(); 
    //Default constructor 

    private: 
     int today; 
     int yest; 
     int tom; 
     int dayN; 

    }; 




    void dayType::printd(int dayNum) 
    { 
     if (dayNum == 1) 
      cout << "Monday" << endl; 

     if (dayNum == 2) 
      cout << "Tuesday" << endl; 

     if (dayNum == 3) 
      cout << "Wednesday" << endl; 

     if (dayNum == 4) 
      cout << "Thursday" << endl; 

     if (dayNum == 5) 
      cout << "Friday" << endl; 

     if (dayNum == 6) 
      cout << "Saturday" << endl; 

     if (dayNum == 7) 
      cout << "Sunday" << endl; 

    } 


    void dayType::setDay(int dayNum) 
    { 
    today = dayNum; 

    }; 

    int dayType::returnDay() 
    { 
     return today; 

    }; 

    void dayType::printd(<#int dayNum#>); 
    { 
    cout << "The current day is: " << today << endl; 
    } 


    void dayType::dayBefore() 
    { 
     if(today == 0) 
      yest = 6; 
     else today--; 
    }; 


    void dayType::dayAfter() 
    { 
     if(today == 6) 
     tom = 0; 

    }; 

    void dayType::randomDay(int dayNum) 
    { 
     dayN=(today+dayNum); 
     today =(dayN%7); 

    }; 

    dayType::dayType() 
    { 
     today = 0; 
    } 


    dayType::dayType(int daynum) 
    { 
    today = daynum; 
    } 
    // do I need these constructors here doing this? 



      int main() 

      { 
       int dayWeek; 

       cout << "Please enter a number for the day of the week: " << endl; 
       cout << "1 - Monday" << endl; 
       cout << "2 - Tuesday" << endl; 
       cout << "3 - Wednesday" << endl; 
       cout << "4 - Thursday" << endl; 
       cout << "5 - Friday" << endl; 
       cout << "6 - Saturday" << endl; 
       cout << "7 - Sunday" << endl; 

       while (dayWeek<= 7) 

        cin >> dayWeek; 

       dayType thisDay; 

       cout << "Today is: "; 
       thisDay.returnDay(); 
       thisDay.printd(int dayNum); 


       cout << "Yesterday was: "; 
       thisDay.dayBefore(); 
       thisDay.printd(int dayNum); 


       cout << "Tomorrow is: "; 
       thisDay.dayAfter(); 
       thisDay.printd(int dayNum); 

       cout << "Type a number of days from today and it will be: "; 
       thisDay.randomDay(dayNum); 

       return 0; 
      }; 
     } 
+0

こんにちは、Croset!私はあなたのコードでいくつかのエラーを見た。しかし、まず、あなたの問題は何ですか?エラーがありますか?行動はあなたが期待しているものではありませんか? – Dylan

+0

こんにちはディラン、正直言って私はそこに機能があると思っていますが、私は計画どおりに動作するとは思わない。私は正しい印刷をしているかわからない。まず最初に受け取っている基本的な構文エラーがいくつかあります。チェックするためにプログラムを実行することはできません。私が間違っている箇所については本当に助けになりました。ありがとう:) – Croset

+0

関数から値を返す*関数を呼び出す方法については、いくつかの本を読んでください。 (あなたはXcodeで 'printd'のパラメータの定義も完了していません。) – molbdnilo

答えて

1

あなたのコードはより次のようにする必要があります:

#include <iostream> 
#include <cmath> 
#include <string> 

using namespace std; 

class dayType 
{ 
public: 
    void setDay(int dayNum); 
    void printd(); 
    // set the day with the dayNum as parameter 
    void printd(int dayNum); 
    // print the dayNum 
    int returnDay(); 
    // return the day of the week 
    int dayAfter(); 
    // return next day 
    int dayBefore(); 
    // return previous day 
    int randomDay(int dayNum); 
    // function to return a day after a certain number of days 


    dayType(int dayNum); 
    // Constructor with parameters setting dayNum according to parameters 
    dayType(); 
    //Default constructor 

    private: 
     int today; 

}; 




void dayType::printd(int dayNum) 
{ 
    if (dayNum == 1) 
     cout << "Monday" << endl; 

    if (dayNum == 2) 
     cout << "Tuesday" << endl; 

    if (dayNum == 3) 
     cout << "Wednesday" << endl; 

    if (dayNum == 4) 
     cout << "Thursday" << endl; 

    if (dayNum == 5) 
     cout << "Friday" << endl; 

    if (dayNum == 6) 
     cout << "Saturday" << endl; 

    if (dayNum == 7) 
     cout << "Sunday" << endl; 

} 


void dayType::setDay(int dayNum) 
{ 
    today = dayNum; 

} 

int dayType::returnDay() 
{ 
    return today; 

} 

void dayType::printd() 
{ 
cout << "The current day is: " << today << endl; 
} 


int dayType::dayBefore() 
{ 
    int yest; 
    if(today == 0) 
     yest = 6; 
    else 
     yest = today - 1; 
    return yest; 
}; 


int dayType::dayAfter() 
{ 
    int tom; 

    if(today == 6) 
     tom = 0; 
    else 
     tom = today + 1; 
    return tom; 

}; 

int dayType::randomDay(int dayNum) 
{ 
    int dayN = (today+dayNum); 
    return (dayN % 7) 

}; 

dayType::dayType() 
{ 
    today = 0; 
} 


dayType::dayType(int daynum) 
{ 
    today = daynum; 
} 
// do I need these constructors here doing this? 



int main() 

{ 
    int dayWeek = -1; 
    int random = -1; 

    cout << "Please enter a number for the day of the week: " << endl; 
    cout << "1 - Monday" << endl; 
    cout << "2 - Tuesday" << endl; 
    cout << "3 - Wednesday" << endl; 
    cout << "4 - Thursday" << endl; 
    cout << "5 - Friday" << endl; 
    cout << "6 - Saturday" << endl; 
    cout << "7 - Sunday" << endl; 

    while (dayWeek >= 7 || dayWeek < 0) 

     cin >> dayWeek; 

    dayType thisDay; 
    thisDay.today = dayWeek; 

    thisDay.printd(); 


    cout << "Yesterday was: "; 
    thisDay.printd(thisDay.dayBefore()); 


    cout << "Tomorrow is: "; 
    thisDay.printd(thisDay.dayAfter()); 

    cout << "Type a number of days : "; 

    while (random < 0) 

     cin >> random; 

    cout << "Now we are "; 
    thisDay.printd(thisDay.randomDay(random)); 

    return 0; 
} 

あなたはこのように関数を呼び出すとき:fonction(1, 2);void fonction(int a, int b)、あなたはこのようにそれを呼び出すことができます。引数の型を記述する必要はありません。あなたのクラスでは、あなたの関数に必要な値だけを宣言してください。以前のコードでは、tom,yesdayNと宣言しましたが、値を保持する必要はありません。

私はコードをテストしなかったので、エラーがあれば書き、この投稿を編集します。

+0

ありがとうございます!私はいくつかのエラーを抱えています - 行の宣言はここにありません 'void dayType :: printd(); {' ここに ' thisDay.printd(); 'はprintDが嫌いですか?コールする関数があまりにも少なく、dayNumが指定されていないとしますか? – Croset

+0

あなたは空文字 'dayType :: printd()'を宣言するだけです。実装後 – Dylan

+0

AHHHHHHGOTCHA。これは今や理にかなっています。親切にありがとう:) – Croset

1

私は個人的には、intの代わりにenumを使用して、その日を追跡し、必要な演算子を使用して日を巡回することをお勧めします。これにより、より簡単に定義し、dayTypeと対話し、遭遇したエラーを簡単に修正することができます。現時点で

#include <iostream> 
#include <cmath> 
#include <string> 
#include <limits> 

using namespace std; 

class dayType 
{ 
public: 
    // Days enum: 
    enum Days { 
     D_MONDAY = 1, 
     D_TUESDAY, 
     D_WEDNESDAY, 
     D_THURSDAY, 
     D_FRIDAY, 
     D_SATURDAY, 
     D_SUNDAY 
    }; 

    void setDay(int dayNum); 
    // set the day with the dayNum as parameter 

    void printd(int dayNum); 
    // print the dayNum 
    void printd(); 
    // Prints the current day. 

    Days returnDay(); 
    // return the day of the week 
    Days dayAfter(); 
    // return next day 
    Days dayBefore(); 
    // return previous day 
    Days randomDay(int dayNum); 
    // function to return a day after a certain number of days 


    dayType(int dayNum); 
    // Constructor with parameters setting dayNum according to parameters 
    dayType(); 
    //Default constructor 

private: 
    Days today; 
}; 

// Compound assignment addition: 
dayType::Days& operator+=(dayType::Days& left, int right) 
{ 
    typedef dayType::Days Days; 

    int temp = static_cast<int>(left) + right; 

    // In case of adding negative numbers. 
    while (temp < dayType::D_MONDAY) 
     temp += dayType::D_SUNDAY; 

    while (temp > dayType::D_SUNDAY) 
     temp -= dayType::D_SUNDAY; 

    left = static_cast<Days>(temp); 

    return left; 
} 

// Compound assignment subtraction: 
dayType::Days& operator-=(dayType::Days& left, int right) 
{ 
    typedef dayType::Days Days; 

    int temp = static_cast<int>(left) - right; 

    while (temp < dayType::D_MONDAY) 
     temp += dayType::D_SUNDAY; 

    // In case of subtracting negative numbers. 
    while (temp > dayType::D_SUNDAY) 
     temp -= dayType::D_SUNDAY; 

    left = static_cast<Days>(temp); 

    return left; 
} 


// Addition. Uses compound assignment addition internally. 
dayType::Days operator+(dayType::Days left, int right) 
{ 
    return left += right; 
} 

// Subtraction. Uses compound assignment subtraction internally. 
dayType::Days operator-(dayType::Days left, int right) 
{ 
    return left -= right; 
} 


// Prefix increment (++day): 
dayType::Days operator++(dayType::Days& day) 
{ 
    return day += 1; 
} 

// Postfix increment (day++): 
dayType::Days operator++(dayType::Days& day, int) 
{ 
    typedef dayType::Days Days; 

    Days temp = day; 
    ++day; 
    return temp; 
} 


// Prefix decrement (--day): 
dayType::Days operator--(dayType::Days& day) 
{ 
    return day -= 1; 
} 

// Postfix decrement (day--): 
dayType::Days operator--(dayType::Days& day, int) 
{ 
    typedef dayType::Days Days; 

    Days temp = day; 
    --day; 
    return temp; 
} 


void dayType::printd(int dayNum) 
{ 
    if (dayNum == D_MONDAY) 
     cout << "Monday" << endl; 

    if (dayNum == D_TUESDAY) 
     cout << "Tuesday" << endl; 

    if (dayNum == D_WEDNESDAY) 
     cout << "Wednesday" << endl; 

    if (dayNum == D_THURSDAY) 
     cout << "Thursday" << endl; 

    if (dayNum == D_FRIDAY) 
     cout << "Friday" << endl; 

    if (dayNum == D_SATURDAY) 
     cout << "Saturday" << endl; 

    if (dayNum == D_SUNDAY) 
     cout << "Sunday" << endl; 
} 

void dayType::printd() 
{ 
    cout << "The current day is: "; 
    printd(today); 
} 


void dayType::setDay(int dayNum) 
{ 
    today = static_cast<Days>(dayNum); 
}; 

dayType::Days dayType::returnDay() 
{ 
    return today; 
}; 

dayType::Days dayType::dayBefore() 
{ 
    return today - 1; 
}; 


dayType::Days dayType::dayAfter() 
{ 
    return today + 1; 
}; 

dayType::Days dayType::randomDay(int dayNum) 
{ 
    return today + dayNum; 
}; 

dayType::dayType() 
{ 
    today = D_SUNDAY; 
} 


dayType::dayType(int daynum) 
{ 
    today = static_cast<Days>(daynum); 
} 



int main() 
{ 
    int dayWeek = 0; 

    cout << "Please enter a number for the day of the week: " << endl; 
    cout << "1 - Monday" << endl; 
    cout << "2 - Tuesday" << endl; 
    cout << "3 - Wednesday" << endl; 
    cout << "4 - Thursday" << endl; 
    cout << "5 - Friday" << endl; 
    cout << "6 - Saturday" << endl; 
    cout << "7 - Sunday" << endl; 

    while (!((dayWeek > 0) && (dayWeek < 8))) 
     cin >> dayWeek; 

    dayType thisDay(dayWeek); 

    // ----- 

    cout << "Today is: "; 
    thisDay.printd(thisDay.returnDay()); 

    // ----- 

    cout << "Yesterday was: "; 
    thisDay.printd(thisDay.dayBefore()); 

    // ----- 

    cout << "Tomorrow is: "; 
    thisDay.printd(thisDay.dayAfter()); 

    // ----- 

    cout << "Type a number of days: "; 

    int random; 
    cin >> random; 
    cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); 

    cout << "In " << random << " days, it will be: "; 
    thisDay.printd(thisDay.randomDay(random)); 
}; 

、これはあなたが(dayType::dayType(int daynum)todayを初期化するなど)Daysとしてintを使用したい場合は、明示的にそれをキャストする必要があることを警告し、あなたが望むもののために働く必要があります1。 (逆に、Daysは、暗黙的にdayType::printd()dayType::returnDay()の戻り値を渡すことによって証明されるように、intとして使用するか、または場合coutからDaysを渡すことができます。)

あなたはdayTypeDays外を使用する場合は、 dayType::Days(演算子の戻り値の型など)として使用できます。 typedef dayType::Days Days;を使用して現在のスコープに入れることもできます。DaysdayType::Days operator++(dayType::Days& day, int)dayType::Days operator--(dayType::Days& day, int)など)として使用できます。同様に、列挙値自体を使用するには、その名前の前にdayType::という接頭辞を付けます。

あなたがこの練習問題とここでの質問を学習の機会として使用しているので、私はいくつか改善の余地が残っています。現在は正常に動作していますが、改善の余地があります。

+0

@Crosetよろしくお願いします。私は 'dayType :: printd()'(パラメータを持たないもの)をちょっと修正して、基になる 'int'値の代わりにその日の名前を表示し、コードの下の最初の段落でエラーを修正しました(私はあなたが明示的に '' ''を '' std :: cout'に渡すために明示的に 'int'にキャストする必要があると誤って宣言していました。 –

関連する問題