Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 7 months ago.
UART/SERIAL CALCULATOR HELP
I think I have the code for a single digit 4 function calculator, the interface is the terminal
I need help changing this code to a 2 digit 4 function calculator, any help is appreciated.
the code is attached /media/uploads/larcoc/final_project_micro2.docx
1 Answer
9 years, 7 months ago.
A very very simple way of doing it. I write simple because there is no check about the char to verify if it is an digit or other.
#include "mbed.h" Serial pc(USBTX, USBRX); int main() { while(1) { int num1; int num2; int func; int sol; char a; pc.printf("enter first number\n"); a = pc.getc(); num1 =( a - 48)*10; // first digit * 10; a = pc.getc(); num1 += a=48; pc.printf("%d\n ", num1); pc.printf("enter second number\n"); a = pc.getc(); num2 =( a - 48)*10; // first digit * 10; a = pc.getc(); num2 += a=48; // add to num1 the digit. pc.printf("%d\n ", num2); pc.printf("enter function (1 for add, 2 for subtract, 3 for multiply, 4 for divide)\n"); char c = pc.getc(); func = c - 48; pc.printf("%d\n ", func); if (func == 1) { pc.printf("solution\n"); sol = (num1 + num2); pc.printf("%d\n ", sol); } if (func == 2) { pc.printf("solution\n"); sol = (num1 - num2); pc.printf("%d\n ", sol); } if (func == 3) { pc.printf("solution\n"); sol = (num1 * num2); pc.printf("%d\n ", sol); } if (func == 4) { pc.printf("solution\n"); sol = (num1 / num2); pc.printf("%d\n ", sol); } } }
to check if the char is a digit you could use something like :
do { a = pc.getc()-'0'; } while (a<0 || a>9);
Personally I'd replace the series of if (func== n ) with a single switch statement. It makes the code more readable:
switch(func) { case 1: pc.printf("solution\n%d\n",num1+num2); break; case 2: pc.printf("solution\n%d\n",num1-num2); break; case 3: pc.printf("solution\n%d\n",num1*num2); break; case 4: if (num2 !=0) pc.printf("solution\n%.2f\n",(float)num1/num2); // slightly different so that it doesn't round down to the nearest whole number. else pc.printf("division by 0 error\n"); break; default: pc.printf("invalid function\n"); break; }
thanks for the quick response!
posted by Carlos Larco 02 Apr 2015