題目
使用者輸入日期(年 月 日),印出當天是星期幾。
程式要求:
由使用者於螢幕上輸入三個數字(數字間由空白隔開) ,經由計算後得出該日是
星期幾後必須使用 switch 來判斷並輸出在第一行(後方須使用 endl 換行),本作業僅能使用 C++撰寫
業僅能使用 C++撰寫
必須包含以下 function:
int which_date(int year, int month, int day);
此 function 需 return 一個 int,用來表示星期幾
輸出範例:
cout << "Wednesday" << endl;
2022 11 13
Sunday
完整程式碼
#include<iostream>
using namespace std;
//3.function
int which_date(int year,int month,int day)
{
//4.設定好變數
int c ;
int y ;
int m = month;
if(m==1 || m==2){
m=m+12;
c=(year-1)/100;
y=(year-1)%100;
}
else{
c=year/100;
y=year%100;
}
int d = day;
//5.計算星期幾
int w = ( y+ int(y/4) + int(c/4) -2*c + int(26*(m+1)/10)+d-1 ) % 7;
//6.function返回值
return w;
}
int main()
{
//1.建立變數
int year;
int month;
int day;
//2.將輸入值存進變數
cin >> year >> month >> day;
//3.使用function並且有返回值
int date = which_date(year,month,day);
//7.switch對應後輸出
switch(date) {
case 0 :
cout << "Sunday" << endl;
break;
case 1 :
cout << "Monday" << endl;
break;
case 2 :
cout << "Tuesday" << endl;
break;
case 3 :
cout << "Wednesday" << endl;
break;
case 4 :
cout << "Thursday" << endl;
break;
case 5 :
cout << "Friday" << endl;
break;
case 6:
cout << "Saturday" << endl;
break;
default:
break;
}
return 0;
}
解題過程
基本語法參考自:
https://www.csie.ntu.edu.tw/~b98902112/cpp_and_algo/cpp02/string.html
星期幾的計算:
https://zh.wikipedia.org/zh-tw/%E6%98%9F%E6%9C%9F%E7%9A%84%E8%A8%88%E7%AE%97#%E8%94%A1%E5%8B%92%E5%85%AC%E5%BC%8F
switch語法:
https://openhome.cc/Gossip/CppGossip/switchStatement.html
1.建立變數存入輸入值
```
//1.建立變數
int year;
int month;
int day;
//2.將輸入值存進變數
cin >> year >> month >> day;
```
觀念: cin
2.建立function依照年月日輸出星期幾
觀念: function
當我們希望有一個黑盒子,可以傳進一些輸出,計算完傳出想要的輸出
這個黑盒子就是function
我設計function會經過下面的思路:
1.我需要一個功能要輸入一些東東,回傳一些東東
2.寫好function大至架構()
3.開始實作function中的內容
function的大至架構:
回傳值型態 函式名稱(參數1型態 參數名稱1, 參數2型態 參數名稱2, ... )
{
Do anything you want...
return 回傳值;
}
e.g. 我想要一個可以用年月日就可以計算星期幾的功能
--> input : 年月日 , output : 星期幾 , 設計好function大至架構
int which_date(int year,int month,int day)
{
}
接下來就是實作function細節
3. function內容如何實作
現在我們要在建立好的function裡面開始處理傳入數據
int which_date(int year,int month,int day)
{
要開始做事囉~
}
這裡用到蔡勒公式:
此時我們的function已經傳入year,month,day可供function運用
這裡有幾個點需要注意:
1.如果是1、2月則要看成13、14月 並且年分-1
觀念:if/else,四則運算
int c ;
int y ;
int m = month;
if(m==1 || m==2){
m=m+12;
c=(year-1)/100;
y=(year-1)%100;
}
else{
c=year/100;
y=year%100;
}
int d = day;
至此我們已經有對應到各月份正確的c,y,m,d可以用來計算
2.有高斯符號[]需要去掉小數 --> 用int處理
3.mod為取餘數 --> 用%處理
int w = ( y+ int(y/4) + int(c/4) -2*c + int(26*(m+1)/10)+d-1 ) % 7;
4.返回int值 w
return w;
至此function完成!!
int which_date(int year,int month,int day)
{
//4.設定好變數
int c ;
int y ;
int m = month;
if(m==1 || m==2){
m=m+12;
c=(year-1)/100;
y=(year-1)%100;
}
else{
c=year/100;
y=year%100;
}
int d = day;
//5.計算星期幾
int w = ( y+ int(y/4) + int(c/4) -2*c + int(26*(m+1)/10)+d-1 ) % 7;
//6.function返回值
return w;
}
4.switch處理function返回的值
在剛剛處理好function之後,我們可以得到回傳值date
int date = which_date(year,month,day);
date為0~6分別為星期天、一...、六
因此我們要把date的呈現結果,從int --> string
觀念: switch, cout
switch基本概念:
switch(變數名稱或運算式) {
case 符合數字或字元:
陳述句一;
break;
case 符合數字或字元:
陳述句二;
break;
default:
陳述三;
break;
}
現在我們是需要判斷date的0~6 ,再輸出不同的string結果
因此變數名稱 --> date , 符合數字或字元 --> 0~6
switch(date) {
case 0 :
cout << "Sunday" << endl;
break;
case 1 :
cout << "Monday" << endl;
break;
case 2 :
cout << "Tuesday" << endl;
break;
case 3 :
cout << "Wednesday" << endl;
break;
case 4 :
cout << "Thursday" << endl;
break;
case 5 :
cout << "Friday" << endl;
break;
case 6:
cout << "Saturday" << endl;
break;
default:
break;
}
我們就可以成功的依照各種情況把int-->string呈現答案!!