[Courses] lesson 8 calculator - improved
Eugene Teo
eugene.teo at eugeneteo.net
Tue Nov 12 09:20:41 EST 2002
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
> http://mailman.linuxchix.org/mailman/listinfo/courses
--
eMail: eugeneteo at eugeneteo.net, eugeneteo at null.cc.uic.edu
gpg pub_key: http://null.cc.uic.edu/~eugeneteo/eugeneteo.asc
main(i){putchar(182623909>>(i-1)*5&31|!!(i<7)<<6)&&main(++i);}
More information about the Courses
mailing list