question on months&days in 2012

1 回表示 (過去 30 日間)
Danny Browne
Danny Browne 2018 年 10 月 25 日
編集済み: jonas 2018 年 10 月 25 日
I'm unable to complete this assigment; solutions welcome! I've only started using MATLAB last week (so yes, I'm aware this is basic). https://gyazo.com/c707328e01a308366fae5147aef147bc
  5 件のコメント
Danny Browne
Danny Browne 2018 年 10 月 25 日
https://gyazo.com/5091c0e2307f768e0001307c17cb60d3 Think I got it; thanks for the tips!
jonas
jonas 2018 年 10 月 25 日
編集済み: jonas 2018 年 10 月 25 日
One of your conditions basically reads like this:
if A==1 | 2 | 3
That is not how to write a condition.
A loop is executed when the condition returns true. The condition above will always return true, for any month or day. Basically you can test the condition like this:
A=1;
logical(A==0 | 2)
ans =
logical
1
What?! A is not equal 0 nor 2, why does it return true (1)? As the condition is written, true will be returned if any one of the two separate conditions are satisfied, and the logical of anything other than zero (such as 2) returns true.
logical(-1)
ans =
logical
1
The correct way would be
if A==1 | A==2 | A==3
or
if ismember(A,[1 2 3])

サインインしてコメントする。

採用された回答

jonas
jonas 2018 年 10 月 25 日
編集済み: jonas 2018 年 10 月 25 日
Now that you've basically solved it, here is my (hopefully correct) solution. Note that for scalars you can write && instead of &. It is a bit faster, because not all conditions are necessarily checked.
d = 31;
m = 4;
% Check day
if d>=0 && d<=31
disp('OK')
else
disp('not OK')
end
% Check month
if m>=1 && m<=12
disp('OK')
else
disp('not OK')
end
% Check day & month
if d==31 && ~ismember(m,[1 3 5 7 8 10 12])
disp('not OK')
elseif (d==30 || d==29) && m==2
disp('not OK')
else
disp('OK')
end

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by