2015-01-13 2 views
0

Код:Функция в функции

function father(earnings) 
leftover = earnings - son() - daughter(); 
disp(leftover) 

    function fees = son() 
    fees = .50*earnings; 
    earnings = earnings - fees; 
    end 

    function pocketmoney = daughter() 
    pocketmoney = .75*earnings; 
    end 

end 

Вопрос:

Когда я даю входной аргумент функции отца 200, MATLAB отображает -75 в качестве ответа. Этот ответ возможен, когда заработок = 100. . Значение вознаграждения изменяется внутри функции son(), которая является дочерней функцией функции father(). Все переменные родительской функции доступны для дочерней функции, но не наоборот. Итак, как получается, что прибыль обновляется с 200 до 100.

+0

Просто используйте отладчик! Просто нажмите на маленькую строку рядом с номером строки, чтобы появилась красная точка, после чего вызовите функцию 'father (200)'. Затем вы можете пройти все вычисления MATLAB! – knedlsepp

+2

Просто говорю @Manahil: вы задали пару вопросов здесь, и все же есть многие из них, которые вы не приняли/не дали. Есть ли для этого конкретная причина? Не могли бы вы проверить ответы на свой вопрос и принять те, которые вам помогли? Спасибо –

ответ

0

Вы дважды вычитаете плату за прибыль, переменная дохода делится между родительской функцией и дочерним элементом. Функция son вычитает 50% в функции, а затем вычитается функция родительской функции.

Функция для сына должен возвращать только умноженное значение

function fees = son() 
    fees = .50*earnings 
end 
+0

Но что, если мне нужно сохранить этот код, написанный так, как есть. Изменения не допускаются. Как бы я оправдал ответ -75 в этом случае? – Manahil

+2

Почему вы не можете редактировать функцию? Я не совсем понимаю, о чем вы спрашиваете. Если вы более подробно объясните проблему, о которой вы говорите, возможно, вопрос может быть переписан, чтобы быть более полезным для других поисковиков. –