2016-02-26 2 views
-1

Вопрос - проблема 23, нахождение идеальных квадратов. Мой код показан ниже:Утверждение не выполнено на CODY mathworks

function b = isItSquare1(a) 
if any(ismember(a,a.^2))==0 
    b='false'; 
else 
    b='true'; 
end 
end 

Я получаю Assertion failed тогда как использование этой функции является правильным:

function b = isItSquare(a) 
c=0;i=1; 
b='false'; 

while c==0&i<=length(a) 
if length(find(a==a(i)^2))~=0 

b='yes'; 

c=1; 
end 
i=i+1; 

end 

b 
end 

Cody принимает ответ, я не могу понять, почему? Заранее спасибо.

+1

Утверждения опубликованы, верно? Поэтому вы можете запустить их самостоятельно и проверить, какое утверждение не удается, и почему. – hbaderts

ответ

1

MATLAB имеет логические типы (тип называется "логическим" в MATLAB), true и false (часто обозначается 1 и 0). Это не то же, что и строки 'true'/'false'. Сравните следующие:

>> x = 'true' 
>> y = true 

workspace

Это две принципиально разные вещи. Если сравнить эти значения с помощью ==:

>> 'true' == true  
ans = 
    0  0  0  0 

затем MATLAB обрабатывает 'true' как вектор символов и сравнивает каждое значение true, возвращающие false=0. Однако

>> true == 1 
ans = 
    1 

Теперь к вашим проблемам: первый набор тестов на Коди

a = [2 3 4]; 
assert(isequal(isItSquared(a),true)) 

т.е. выход должен быть true и не 'true'. Таким образом, замените 'true' на true и 'false' на false в вашем коде, и эти утверждения должны пройти.

Небольшой совет: любой оператор сравнения, например. ==, ~=, < ... автоматически создает логический (true или false) в качестве выходного сигнала, например:

>> x = (1 == 2) 
x = 
    0 
Смежные вопросы