Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

3.5. Calculator with undo In this question, you wi also write a function that ca

ID: 3794058 • Letter: 3

Question

3.5. Calculator with undo In this question, you wi also write a function that calculates the result of an arithmetic expression between scalars, where the arithmetic expression is given as a character string (e.g., 2*30+5 4'). The operators allowed in the arithmetic expression are +, -, *, /, and , which represent addition, subtraction, multiplication, division, and exponentiation, re- spectively. Additionally, we introduce the undo operator !. The operator ! signifies "cancel the previous operation". Two successive undo operators (!!) signify "cancel the previous two operations", and so on. The operation that the undo operator removes consists of the of the number and the operator that precede the undo operator. For exam

Explanation / Answer

function my_calculator

figure('Position',[200 200 220 200],'Name','Calculator','NumberTitle','off','MenuBar','None','Resize','off');

txt=uicontrol('Style','Text','Position',[10 165 200 30],'String','0');

global stack value top op tops opstack num1 num2 flag;

flag=0;

x=10;

y=130;

top=1;

tops=1;

name=['7','8','9','/','4','5','6','*','1','2','3','-','0','+','!','='];%k

for k=1:size(name,2)

   uicontrol('Style','Pushbutton','Position',[x y 50 30],'String' ,name(k),'Callback',@analyse) ;

   x=x+50;

   if(mod(k,4)==0)

       x=10;y=y-35;

   end

end

function analyse(object,~)

        num=str2double(get(object,'String'));

        if((num>=0)&&(num<=9))

            value=num;

            accept();

        else

            op=get(object,'String');

            if(op=='C')

                top=1;

                tops=1;

                set(txt,'String','0');

            else

            solve();

            end

        end

    end

    function accept()

          stack(top)=value;

          if((stack(1)==0)&&(top==2))

                stack(1)=stack(top);

                top=top-1;

         end

       str=num2str(stack(1));

       for i=2:top

                str=strcat(str,num2str(stack(i)));

       end

            top=top+1;

            set(txt,'String',' ');

            set(txt,'String',str);

            flag=0;

        end

function solve()       

     if((top~=1)||(flag==1))

        opstack(tops)=op;

        tops=tops+1;

        if((tops==2)&&(flag~=1))

            str=num2str(stack(1));

            for i=2:top-1

                str=strcat(str,num2str(stack(i)));

            end

            num1=str2double(str);

            flag=1;

            top=1;

        elseif(tops>=3)

            if(flag==0)

            str=num2str(stack(1));

            for i=2:top-1

                str=strcat(str,num2str(stack(i)));

            end

            num2=str2double(str);

            top=1;

            if(opstack(tops-1)=='=')

             calculate();

             set(txt,'String','           ');

            set(txt,'String',num2str(num1));

             flag=1;

            tops=1;

            else

            calculate();

            set(txt,'String','           ');

            set(txt,'String',num2str(num1));

            flag=1;

            tmp=opstack(tops-1);

            opstack(1)=tmp;

            tops=tops-1;

            end

            else

                tmp=opstack(tops-1);

                opstack(1)=tmp;

                tops=tops-1;

            end

        end

      end

    end

    function calculate()

        switch (opstack(1))

                case '+'                

                       num1=num1+num2;

                case '-'

                       num1=num1-num2;

                case '/'

                       num1=num1/num2;

                case '*'

                        num1=num1*num2;

        end

    end

       

    end

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote