<div><font size="2"> <h2><span><font color="#400040" size="6"><em>試題02: 試設計程式, 提供下列各副程式的功能.</em></font></span></h2> <h2><span>*請參考:<a href="http://tw.myblog.yahoo.com/tools-241/article?mid=218&next=204&l=f&fid=21"><font color="#6f5f06">【原創:"王氏口訣"】心算 "某日是星期幾" ! </font></a></span></h2> <h2><span>*假設日期 ws_date 的格式為 yyyymmdd 的(long)長整數, 例如: 16000301 表示1600/03/01</span></h2> <h2><span>*假設現行的公曆曆法格里曆(Gregorian calendar)自1582年10月15日起算, 考慮實用性,</span></h2> <h2><span> 及方便性, 以 1600/03/01做為第0天(base on 1600/03/01). </span></h2> <h2><span>1.計算 "日期(ws_date)"距離 "1600/03/01" 有幾天(*ret_days)?</span><span> 該日期為星期幾(*ret_week)?</span></h2> <h2><span>/* 輸入 "日期", 求得 "天數" 及 "星期幾" */ </span></h2> <h2><span>void date2days(unsigned long ws_date,unsigned long *ret_days, int *ret_week);<br></span><span></span></h2> <h2><span><font color="#bf005f">2. 輸入 "距離1600/03/01" 的天數ws_days, 求出 "該日期########" .</font></span></h2> <h2><span><font color="#bf005f">unsigned long days2date(unsigned long ws_days);</font></span></h2> <h2><span>3.輸入 "兩個日期", 求相差的 "天數".</span></h2> <h2><span><span>unsigned long count_days(unsigned long ws_date_from, unsigned long ws_date_to);</span></span></h2> <h2><span><span>4. 檢查 "該日期是否合理有效" (有效return 0;無效return -1).</span></span></h2> <h2><span><span><span>int date_valid(unsigned long ws_date);</span></span></span></h2> <h2><span><span><span> 提示:先將 "日期" 轉 "天數", 再轉成另一個 "日期", 比對 "兩個日期" 是否相等.</span></span></span></h2> <h2><span><span></span></span> </h2> <h2><span><span></span></span> </h2> <h2><span><span>..........................................................................................................</span></span></h2> <h2><span><span><span>在<span>試題02中的功能已足夠應付 "商業上的用途", 而</span></span></span></span></h2> <h2><span><span><span><span><span><span><span>試題03比較像是 "冷僻" 的數學題.</span></span></span></span></span></span></span></h2> <h2><span><span><span><font color="#400040"><em> <h2><span><span><span><font color="#400040"><em> <h2><span><span><span><font color="#400040" size="4">試題03: 試設計程式, 能提供上列第1及第2項功能,</font></span></span></span></h2> <h2><span><span><span><font color="#400040" size="4"> 但是為 "設計電路" 上的要求,</font></span></span></span></h2> <h2><span><span><span><font color="#400040" size="4"> 程式中不能使用表格或陣列來存12個月的對照值,</font></span></span></span></h2> <h2><span><span><span><font color="#400040" size="4"> 也不能使用 "if" 或 "比大小" 或 "goto" 或 "迴圈" 的statement;</font></span></span></span></h2> <h2><span><span><span><font color="#400040" size="4"> 只能利用 "+-*/" 或 "%" 等五種運算 "一行一行執行下來".</font></span></span></span></h2></em></font></span></span></span></h2></em></font></span></span><span><span><span> 例如下列四行是符合本條件的:</span></span></span></span></h2> <h2><span><span><span> ws_mm = ws_mmdd / 100;<br> ws_dd = ws_mmdd % 100;</span></span></span></h2> <h2><span><span><span> jj = yyyy / 4 + yyyy / 400 - yyyy / 100;<br> ii = jj + (306 * mm - 302) / 10 + ws_dd - 1; /* ii,jj,mm,ws_dd 皆宣告為整數 */</span></span></span></h2> <h2><span><span><span> <h2><span><span>..........................................................................................................</span></span></h2></span></span></span></h2> <h2><span><span><span> <div><font size="2">註:日本某著名遊樂器近年曾因日期計算錯誤導致當機或使用者的記錄遺失.</font></div> <div><font size="2"> </font><font size="2"> 民國年份已由 "2位數" 升至 "3位數" , 有些資料檔案須將年份擴增一位.</font></div> <div><font size="2"> 近期有人收到台電 "電費破億" 的帳單, </font><font size="2"> 乃因資料欄位在擴增一位之後, </font></div> <div><font size="2"> 轉檔發生錯誤, 與日期計算無關.</font></div></span></span></span></h2> <h2><span><span><span> </span></span></span></h2> <h2><span><span><span></span></span></span> </h2> <h2><span><span></span></span> </h2> <h2> </h2> <div> </div> <div class="blgfolderbar"> <div class="folder"><br> </div></div></font></div>