viernes, 21 de marzo de 2014

Calculadora básica en MATLAB


Utilizando las siguientes líneas de código se puede crear una calculadora básica en MATLAB, lo cual suele ser una de las tareas iniciales en el desarrollo de GUIs. Se ha prescindido del entorno de desarrollo (GUIDE) en este caso.





function calculadora

% Calculadora básica
% $ Por: Jorge De Los Santos $
% $ http://matlab-typ.blogspot.com $
% $ Rev. 1.0.0 $ $ Fecha: 02/01/14 $

figure('MenuBar','none','NumberTitle','off','Name','Calculadora',...
    'position',[200 200 200 280],'resize','off');
centerfig(gcf);

p=uipanel(gcf,'units','pixels','position',[10 10 180 200]);

pantalla=uicontrol('style','text','string','',...
    'position',[10 230 180 40],'HorizontalAlignment','right',...
    'FontSize',20,'FontWeight','b','FontName','Courier');

% Botón AC (Limpiar)
uicontrol('style','push','string','AC','position',[60 195 40 15],...
    'backgroundcolor','r','callback',@acFcn,'foregroundcolor','w',...
    'fontweight','b');

% Botón OFF (Apagar)
uicontrol('style','push','string','OFF','position',[100 195 40 15],...
    'backgroundcolor','b','callback',@offFcn,'foregroundcolor','w',...
    'fontweight','b');

% Controles numéricos y operadores
uicontrol(p,'style','push','string','0','position',[8 8 35 35]);
uicontrol(p,'style','push','string','.','position',[51 8 35 35]);
uicontrol(p,'style','push','string','=','position',[94 8 35 35]);
uicontrol(p,'style','push','string','+','position',[137 8 35 35]);
uicontrol(p,'style','push','string','1','position',[8 51 35 35]);
uicontrol(p,'style','push','string','2','position',[51 51 35 35]);
uicontrol(p,'style','push','string','3','position',[94 51 35 35]);
uicontrol(p,'style','push','string','-','position',[137 51 35 35]);
uicontrol(p,'style','push','string','4','position',[8 94 35 35]);
uicontrol(p,'style','push','string','5','position',[51 94 35 35]);
uicontrol(p,'style','push','string','6','position',[94 94 35 35]);
uicontrol(p,'style','push','string','*','position',[137 94 35 35]);
uicontrol(p,'style','push','string','7','position',[8 137 35 35]);
uicontrol(p,'style','push','string','8','position',[51 137 35 35]);
uicontrol(p,'style','push','string','9','position',[94 137 35 35]);
uicontrol(p,'style','push','string','/','position',[137 137 35 35]);
set(findobj('parent',p),'callback',@calcFcn,'FontSize',14);

% Guarda y evalua los cálculos
    function calcFcn(src,~)
        global cnum ceval
        % cnum - Guarda cadena numérica
        % ceval - Guarda cadena a evaluar
        pres=get(src,'str');
        if ~any(strcmp(pres,{'*','/','+','-','='}))
            cnum=[cnum,pres];
            set(pantalla,'str',cnum);
        elseifany(strcmp(pres,{'+','-','*','/'}))
            ceval=[ceval,cnum,pres];
            cnum='';
        elseif strcmp(pres,'=')
            ceval=[ceval,cnum];
            set(pantalla,'str',str2num(ceval));
            ceval=get(pantalla,'str');
            cnum='';
        end
    end

% Borra pantalla y restaura variables
    function acFcn(~,~)
        global cnum ceval
        cnum='';
        ceval='';
        set(pantalla,'str','0');
    end

% "Apaga" la calculadora
    function offFcn(~,~)
        clearvars('-global','cnum','ceval');
        set(pantalla,'str','');
    end
end


4 comentarios: