[討論] 日期計算防呆

看板MATLAB作者 (阿淦)時間13年前 (2012/11/07 03:47), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/1
小弟我這學期修了系上開的MATLAB 是第一次接觸這軟體 最近上到了關於for跟while的迴圈 課本上有個例題 是關於日期的計算 簡單講就是使用者輸入一組年月日 然後程式會告訴你你輸入的日期是當年度的第幾天 例如:輸入1/10/2012 程式就會告訴你是2012的第10天 然後我反正閒閒 回家都會照著課本 把課本的程式碼打進去matlab當作練習 就在run的時候我發現 如果輸入15/33/99999 程式還是會告訴我 那天是當年度的第398天 囧 但是沒有15月也沒有33號啊 翻了翻後面 也沒有說要怎麼防呆 這章節是在說迴圈 所以我在想是不是要在哪個地方加個for或while loop進去就可解決這問題了 有高手可以提點我嗎 我貼一下程式碼 clear all;close all;clc; % get day, month, and year to convert disp('This program calculates the day of year given the special date.'); month = input('Enter specified month (1-12): '); day = input('Enter specified day (1-31): '); year = input('Enter specified year (yyyy): '); % check for leap year, and add extra day if necessary if mod(year,400) == 0 leap_day = 1; % years divisible by 400 are leap years elseif mod(year,100) == 0 leap_day = 0; % other centuries are not leap years elseif mod(year,4) == 0 leap_day = 1; % otherwise every 4th year is a leap day else leap_day = 0; % other years are not leap years end % calculate day of year by adding current day to the % days in previous months. day_of_year = day; for ii = 1:month-1 % add days in months from January to last month switch (ii) case{1,3,5,7,8,10,12}, day_of_year = day_of_year + 31; case{4,6,9,11}, day_of_year = day_of_year + 30; case 2, day_of_year = day_of_year + 28 +leap_day; end end % tell user fprintf('The date %2d/%2d/%4d is day of year %d.\n', ... month,day,year,day_of_year); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.190.58

11/07 08:37, , 1F
在input之後用if檢查輸入是否合理 不合理用error指令警告
11/07 08:37, 1F

11/07 10:40, , 2F
我又遇到問題了 我用IF ERROR 寫了幾道指令 但是我發
11/07 10:40, 2F

11/07 10:40, , 3F
現 這幾道指令沒辦法分辨大小月 還有閏年 比如說
11/07 10:40, 3F

11/07 10:41, , 4F
我輸入11/31 這樣還是跑得出來 12/32已經成功警告
11/07 10:41, 4F

11/07 10:51, , 5F
大小月的判斷也是要自己加在if裡 可以參考後面用switch
11/07 10:51, 5F
文章代碼(AID): #1GcMarQr (MATLAB)
文章代碼(AID): #1GcMarQr (MATLAB)