Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

High School Mathematics Extensions/Mathematical Programming/Exercise 1: Processing Commands

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Explanation Includes stdio.h conio.h Type Definitions Values for TRUE and FALSE to get away from the standard C syntax of just testing for zero / not zero. Function Prototypes Prototype so we don't need to worry about forward references. Global Variables done = loop control in main. r = denominator(on the right hand side of the operators). l = numerator (on the left hand side of the operators). Function Definitions init - set global variables. input_message = prompt for a command. input = read command. get_integer = read an integer. retrieve_keypress = look for a keypress. validate = make sure the command is one the program can handle. execute_command = map the command on to the routines to implement it. output_divide = implement divide '/'. output_modulus = implement modulus '%'. output_values = print out l and r. Code to change Add and replace the following code: //includes #include <stdio.h> #include <conio.h> //type definitions #define TRUE 1 #define FALSE 0 //function prototypes void init(); void input_message(); char input(); char retrieve_keypress(); char validate(char check_me); void execute_command(char command); void output_divide(); void output_modulus(); void output_values(); int get_integer(); //global variables unsigned char done; int r; int l; //function definitions void init() { done=FALSE; r=5; l=2; } void input_message() { cprintf("Key Action.\n"); cprintf("/ Display r/l = result.\n"); cprintf("%% Display r%%l = result.\n"); cprintf("= Display r=value, l=value.\n"); cprintf("r or R Set the value for r.\n"); cprintf("l or L Set the value for l.\n"); cprintf("x or X End program.\n"); } char input() { char read; read=retrieve_keypress(); while (!validate(read)) { cprintf("\nInvalid Command.\n"); input_message(); read=retrieve_keypress(); } return read; } int get_integer() { int ret_val; char lastpress; cprintf("Enter integer: "); cscanf("%i",&ret_val); lastpress=getch(); cprintf("\n"); return ret_val; } char retrieve_keypress() { char ret_val; ret_val=getche(); cprintf("\n"); return ret_val; } char validate(char check_me) { char ret_val=0; switch (check_me) { case '/': case '%': case '=': case 'r': case 'R': case 'l': case 'L': case 'x': case 'X': ret_val++; break; } return ret_val; } void execute_command(char command) { switch (command) { case '/': output_divide(); break; case '%': output_modulus(); break; case '=': output_values(); break; case 'r': case 'R': r=get_integer(); output_values(); break; case 'l': case 'L': l=get_integer(); output_values(); break; case 'x': case 'X': done++; break; } } void output_divide() { if (l > 0) { cprintf("%d / %d = %d.\n",r,l,r/l); } else { cprintf("r = %d, l = %d. Please set l to a value other than 0.\n",r,l); } } void output_modulus() { if (l > 0) { cprintf("%d %% %d = %d.\n",r,l,r%l); } else { cprintf("r = %d, l = %d. Please set l to a value other than 0.\n",r,l); } } void output_values() { cprintf("r = %d, l = %d.\n",r,l); } void main() { char command; init(); input_message(); while(!done) { command=input(); execute_command(command); } } Next Step ../Exercise 1: Implementing Commands/ ../Exercise 1: The Complete Program/