2015-12-02 3 views
0

У меня есть if if elseif ... elseif ... block, и я думал, что мне нужен только один «конец» в самом конце. Тем не менее, я получаю сообщение об ошибке, если я не положил конец каждому отдельному заявлению elseif. Код указан в следующем виде:MATLAB: Как очистить этот блок «if»?

if final_grade >= 90; 
    letter_grade='A+'; 
else if final_grade < 90 & final_grade > 80; 
     letter_grade='A'; 
else if final_grade < 80 & final_grade >= 76; 
     letter_grade='B+'; 
else if final_grade < 76 & final_grade >= 73; 
     letter_grade='B'; 
else if final_grade < 73 & final_grade >= 70; 
     letter_grade='B-'; 
else if final_grade < 70 & final_grade >= 60; 
     letter_grade='C+'; 
else if final_grade < 60 & final_grade >= 50; 
     letter_grade='C'; 
else if final_grade < 50 & final_grade >= 40; 
     letter_grade='D'; 
else if final_grade < 50 || exam_grade < 50; 
     letter_grade='F'; 
else if exam_grade < 50 
     letter_grade = 'F'; 
    end 
    end 
    end 
    end 
    end 
    end 
    end 
    end 
    end 
end 

По какой-то причине, это единственный способ, которым мой код будет работать. Если я пишу только один «конец», MATLAB говорит мне, что один или несколько целей отсутствуют. Кто-нибудь знает, как сжать это до одного окончательного «конца»?

+1

[Чтение документации] (http://www.mathworks.com/help/matlab/ref/if.html), вероятно, будет полезно. – excaza

+0

Плюс последняя строка бесполезна, поскольку она уже проверена выше ('exam_grade <50') – BillBokeey

+0

Для условий' elseif' вам не нужно проверять верхние границы, поскольку предыдущие условия соответствовали бы. Это предполагает, что ваши условия находятся в правильном порядке. – zeeMonkeez

ответ

3

Используйте ключевое слово elseif вместо двух ключевых слов else if. Это держит вещи на первоначальном уровне вложенности.

+0

Спасибо за отзыв! – user8357

6

Я считаю, что это то, что вы хотите:

CENT_GRADES = [ 40, 50, 60, 70, 73, 76, 80, 90]; 
    LETT_GRADES = { 'D', 'C', 'C+', 'B-', 'B', 'B+', 'A', 'A+'}; 

    ix_grade = find(final_grade >= CENT_GRADE, 1, 'last'); 

    if exam_grade < 50 || isempty(ix_grade) 
      letter_grade = 'F'; 
    else 
      letter_grade = LETT_GRADES{ix_grade}; 
    end 

Пожалуйста, обратите внимание, что исполнение отличается от вашего: кто-то не может сдать экзамен с exam_grade меньше 50.