To check Scalar or Not
43 ビュー (過去 30 日間)
古いコメントを表示
I have debugged the code and now the Scalar test for this code is failing although I have given a provition in the 3rd line of the code to check wheather the given inputs are scalar or not.
please help!
function valid = valid_date(year,month,day)
if nargin==3
if fix(month) && isscalar(month) && fix(day) && isscalar(day) && fix(year) && isscalar(year) && isscalar(valid_date) && year>0 && month>0 && day>0
if mod(year,4)==0&&mod(year,100)~=0 || mod(year,400)==0&&mod(year,100)==0
if ismember(month,[1,3,5,7,8,10,12]) && ismember(day,[1:31])
valid=true;
elseif month==2 && ismember(day,[1:29])
valid=true;
elseif ismember(month,[4,6,9,11]) && ismember(day,[1:30])
valid=true;
else
valid=false;
end
else
if ismember(month,[1,3,5,7,8,10,12]) && ismember(day,[1:31])
valid=true;
elseif ismember(month,[4,6,9,11]) && ismember(day,[1:30])
valid=true;
elseif month==2 && ismember(day,[1:28])
valid=true;
else
valid=false;
end
end
else
valid=false;
end
else
valid=false;
end
Assessment result: correctVarious inputs
Assessment result: incorrectNon-scalar
Return false if an input is not scalar...
Assessment result: correctThe last day of every month
Assessment result: correctRandom leap years
Assessment result: correctRandom non-leap years
Assessment result: correctRandom dates
6 件のコメント
Sunney Kumar
2020 年 6 月 12 日
編集済み: Sunney Kumar
2020 年 6 月 12 日
funtion valid = valid_date(year, month, day)
[i, j] = size(year);
[k, l] = size(month);
[o, p] = size(day);
if (i == 1 && j ~= 1) || (k == 1 && l ~= 1) || (o == 1 && p ~= 1)
valid = false
else
%rest of the code
end
Try this piece of code to find out about whether input is scalar or not.
Hakan Karapinar
2020 年 6 月 17 日
if (~isscalar(year) || year < 1 || year ~= fix(year) ) || (~isscalar(month) || month < 1 || month ~= fix(month) ) || (~isscalar(day) || day < 1 || day ~= fix(day) )
valid = false
return ;
check my code out bro.we take same course.:D its worked i passed week 6
採用された回答
Stephen23
2019 年 6 月 29 日
編集済み: Stephen23
2019 年 6 月 29 日
The reason is likely because of the order you check the inputs with, e.g.:
fix(month) && isscalar(month)
%^^^^^^^^^ what is this supposed to test for?
% ^^^^^^^^^^^^^^ this must be tested first!
If month is non-scalar, then fix(month) will return a non-scalar value, and then this will throw an error because && does not accept non-scalar input values. If you test isscalar first, then for a non-scalar month it will return false (i.e. a scalar!) and then MATLAB does not evaluate anything that follows the &&. Read the documentation to know more:
Note that it is unclear what your fix(...) code is supposed to achieve, but I doubt that it does anything very useful. In any case, the order should be like this:
isscalar(month) && ??? you need to decide what to put here
0 件のコメント
その他の回答 (1 件)
iitm_pnkj
2021 年 7 月 18 日
function valid = valid_date(year, month, day)
m31 = [1 3 5 7 8 10 12];
m30 = [4 6 9 11];
if isscalar(year) == 1 && isscalar(month) == 1 && isscalar(day) == 1 && year > 0 && month > 0 && day > 0
if (mod(year,100) == 0 || mod(year,4) ~= 0) && month == 2 && day <=28
valid = true;
elseif ((mod(year,100) ~= 0 && mod(year,4) == 0) || (mod(year,400) == 0)) && month == 2 && day <= 29
valid = true;
elseif day <= 31 && any(m31(:)== month) == 1
valid = true;
elseif day <= 30 && any(m30(:)== month) == 1
valid = true;
else
valid = false;
end
else
valid = false;
end
end
1 件のコメント
Walter Roberson
2021 年 7 月 18 日
All those == 1 are unneeded. isscalar() already returns false or true.
The comparisons to 0 are valid, though.
参考
カテゴリ
Help Center および File Exchange で Dates and Time についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!