[Courses] lesson 8 calculator - improved

anca14 at anca14.ro anca14 at anca14.ro
Tue Nov 12 13:29:33 EST 2002


   postfix calculator ?



On Tue, 12 Nov 2002, Eugene Teo wrote:

> 
> hi guys,
> 
> you might further improve it by writing a postfix
> calculator :)
> 
> 1 2 + 
> => 3
> 1 2 3 + -
> => 0
> 1 2 3 4 5 + - * +
> => 5
> 
> I wrote for one of my old lab for a module last time.
> It is more
> fun than writing the calculator program below :)
> 
> Have fun.
> 
> Eugene
> 
> <quote who="anca14 at anca14.ro">
> >    buu :)
> > i've modified the calculator program from lesson 8.

> > now, when the user types something else instead of
> > a number, the program outputs an error message and 
> > then exits:
> > 
> > ## first, calc-v1.1 asks a number between 0 and 6.
> >  - if the input is not a number, it does smth like
> >    this:
> > - - - - - - - - - - - - - - - - - - - - - - - - - 
> > forevah# ./calc-v1.1 
> > 
> > choose operation [ chacter != number to exit :)] 
> > 
> > 0 - add      1 - substract   2 - multiply   3 -
divide
> > 4 - square   5 - cube        6 - square root 
> > 
> > operation: a
> > incorrect key
> > - - - - - - - - - - - - - - - - - - - - - - - - - -
> > 
> >  - if the input is a number between 7 and 9:
> > - - - - - - - - - - - - - - - - - - - - - - - - - -
> > forevah# ./calc-v1.1
> > 
> > choose operation [ chacter != number to exit :)]
> > 
> > 0 - add      1 - substract   2 - multiply   3 -
divide
> > 4 - square   5 - cube        6 - square root 
> > 
> > operation: 8
> > 0 - add      1 - substract   2 - multiply   3 -
divide
> > 4 - square   5 - cube        6 - square root 
> > 
> > operation: 
> > - - - - - - - - - - - - - - - - - - - - - - - - - -
-
> -
> >   the loop ends when is typed a number between 0
and 6
> >   or a chacter that is not a number
> > 
> > ## after the first step, the program asks two
numbers.
> >   if one of them is not a number, it displays
> "incorrect
> >   key" and exits.
> > - - - - - - - - - - - - - - - - - - - - - - - - - -
-
> - 
> > forevah# ./calc-v1.1
> > 
> > choose operation [ chacter != number to exit :)]
> > 
> > 0 - add      1 - substract   2 - multiply   3 -
divide
> > 4 - square   5 - cube        6 - square root 
> > 
> > operation: 0
> > enter the first number: 23
> > enter the second number: fd
> > incorrect key
> > - - - - - - - - - - - - - - - - - - - - - - - - - -
-
> -
> > - 
> > 
> > i guess calc-v1.1 ain't *buggy* anymore :)
> > 
> > here is the source code:
> > 
> >
>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 
> > // calc-v1.1
> > 
> > // anca14
> > 
> > #include <stdio.h>
> > #include <math.h>
> > #include <stdlib.h> //needed for atof() and atoi()
> > 
> > // function prototype
> > int check_number();
> > 
> > // global variable
> > int operator;
> > 
> > // asks a character, puts it in a string, and calls
> > check_number
> > // to verify if it's a number; uses atoi() to
convert
> > it to integer
> > int operation(void)
> > {
> >    char operator_check[2];
> >     
> >    puts("\nchoose operation [ chacter != number to
> exit
> > :)]\n");
> >    do  
> >    {
> >       puts("0 - add      1 - substract   2 -
multiply
>  
> > 3 - divide");
> >       puts("4 - square   5 - cube        6 - square
> > root \n");
> >          printf("operation: ");
> >          scanf("%s",operator_check);
> > 
> >          check_number(operator_check);
> >          operator=atoi(operator_check);
> > 
> >    } while (operator <0 || operator >6);
> > 
> > return operator;
> > }
> > 
> > 
> > // checks if the input character is a number;
> > // if it isn't, displays an error message and
> > // exits the program.
> > int check_number(char string[])
> > {
> >    int i;
> >    char tester;
> > 
> >    for(i=0;i<strlen(string);i++)
> >       {
> >       tester=string[i];
> >       if (tester=='0' || tester=='1' || tester=='2'
||
> >           tester=='3' || tester=='4' || tester=='5'
||
> >           tester=='6' || tester=='7' || tester=='8'
||
> >           tester=='9')
> >          continue;
> >       else
> >          {
> >          printf("incorrect key\n");
> >          exit(1);
> >          }
> >       }
> >    return 0;
> > }
> > 
> > 
> > 
> > // addition, substraction, etc.
> > float add (float x, float  y)
> >    {
> >    return ( x + y );
> >    }
> > float  sub (float x, float y)
> >    {
> >    return (x-y);
> >    }
> > float  mul (float x, float y)
> >    {
> >    return (x*y);
> >    }
> > float divi (float x, float y)
> >    {
> >    return (x / y);
> >    }     
> > float square(float x)
> >    {
> >    return ( (float) pow(x, 2));
> >    }
> > float square_root(float x)
> >    {   
> >    return ( (float) sqrt(x));
> >    }
> > float cube (float x)
> >    {
> >    return  ( (float) pow(x, 3));
> >    }
> > 
> > 
> > 
> > int main(void)
> > {
> > 
> >    char xf[1000],yf[1000];
> >    float x,y;
> >    
> >    operation();
> > 
> >    printf("enter the first number: ");
> >    scanf("%s",xf);
> >    x=atof(xf);
> >    check_number(xf);
> > 
> >    printf("enter the second number: ");
> >    scanf("%s",yf);
> >    y=atof(yf);
> >    check_number(yf);
> > 
> >    switch (operator)
> >       {
> >       case 0:
> >          printf("\n%.2f + %.2f =
> > %.2f\n\n",x,y,add(x,y));
> >          break;
> >       case 1:
> >          printf("\n%.2f - %.2f =
> > %.2f\n\n",x,y,sub(x,y));
> >          break;
> >       case 2:
> >          printf("\n%.2f * %.2f =
> > %.2f\n\n",x,y,mul(x,y));
> >          break;
> >       case 3:
> >          printf("\n%.2f / %.2f =
> > %.2f\n\n",x,y,divi(x,y));
> >          break;
> >       case 4:
> >          printf("\nsquare (%.2f) = %.2f
> > \n",x,square(x));
> >          printf("square (%.2f) =
> %.2f\n\n",y,square(y));
> >            square(x);
> >          break;
> >       case 5:
> >          printf("\ncube(%.2f) = %.2f
\n",x,cube(x));
> >          printf("cube(%.2f) = %.2f
\n\n",y,cube(y));
> >          break;
> >       case 6:
> >          printf("\nsquare root (%.2f) = %.2f
> > \n",x,square_root(x));
> >          printf("square root (%.2f) = %.2f
> > \n\n",y,square_root(y));
> >          break;
> >       // default is not needed beacause of the
> > conditions
> >       // i've put for the operation option.
> >       // see-> while (operator <0 || operator >6);
> >       }
> >     return 0;
> >    }
> > 
> >
>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 
> >    that's all, falks.
> >    peace ;)
> >   
> >       anca m. holban
> > _______________________________________________
> > Courses mailing list
> > Courses at linuxchix.org
> > <a
href="http://mail.anca14.ro/jump/http://mailman.linuxchix.org/mailman/listinfo/courses">http://mailman.linuxchix.org/mailman/listinfo/courses</a>
> 
> -- 
> eMail: eugeneteo at eugeneteo.net,
> eugeneteo at null.cc.uic.edu
> gpg pub_key:
> <a
href="http://mail.anca14.ro/jump/http://null.cc.uic.edu/~eugeneteo/eugeneteo.asc">http://null.cc.uic.edu/~eugeneteo/eugeneteo.asc</a>
>
main(i){putchar(182623909>>(i-1)*5&31|!!(i<7)<<6)&&main(++i);}



More information about the Courses mailing list