Skip to content
Snippets Groups Projects
Select Git revision
  • 1cafbf2b8b1adb1a35ad1cc220bb9e0b1ec7ed79
  • master default protected
2 results

module5_BMI_calculator.m

Blame
  • vand's avatar
    vand authored
    1cafbf2b
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    module5_BMI_calculator.m 1.83 KiB
    % main program
    disp('*************************')
    disp('Welcome to BMI calculator')
    choice = 0;
    while choice<3
        choice = input_main_menu();
        if choice==1
            h = input_measure('height', 'meters', 1, 2.5);
            w = input_measure('weight', 'kilograms', 40, 300);
            make_plot(h, w)
        elseif choice==2
            h = input_measure('height', 'meters', 1, 2.5);
            make_plot(h)
        end
    end
    disp('Bye!')
    
    
    function i = input_main_menu()
    disp('')
    disp('What would you like to do?')
    disp('Type 1, 2, or 3 followed by enter:')
    disp('1. Compute and display BMI from weight and height.')
    disp('2. Compute and display a normal BMI range from height.')
    disp('3. Quit')
    s = input('Choice: ', 's');
    i = str2num(s);
    while isempty(i) || ~any(i == [1,2,3])
        disp(['You typed ', s])
        disp('You should type 1, 2 or 3 followed by enter.')
        s = input('Choice: ', 's');
        i = str2num(s);
    end
    end
    
    
    function m = input_measure(measure_type, units, m_min, m_max)
    disp('')
    s = input(['Type ', measure_type, ' followed by enter: '], 's');
    m = str2double(s);
    while isnan(m) || m<m_min || m>m_max
        disp(['You typed ', s])
        disp(['Type a valid ', measure_type, ' in ', units, '.'])
        s = input(['Type ', measure_type, ' followed by enter: '], 's');
        m = str2double(s);    
    end
    end
    
    
    function make_plot(height, weight)
    close all
    figure
    hold on
    h = linspace(1.3, 2.2);
    plot(h, 30*h.^2, 'r')
    plot(h, 25*h.^2, 'm')
    plot(h, 18.5*h.^2, 'g')
    if nargin==1
        wmin = 18.5*height^2;
        wmax = 25*height^2;
        plot([height, height], [wmin, wmax], 'k')
        d = ['Normal range [',num2str(wmin,'%.2f'),' ',num2str(wmax,'%.2f'),']'];
    else
        plot(height, weight, 'ko')
        d = ['BMI ',num2str(weight/(height^2),'%.2f')];
    end
    legend('Obese to overweight', 'Overweight to normal',...
        'Normal to underweight', d)
    xlabel('Height')
    ylabel('Weight')
    title('BMI plot')
    end