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

Please fill in the space inside the skeleton code. it is a question to do calcul

ID: 3713341 • Letter: P

Question

Please fill in the space inside the skeleton code. it is a question to do calculation by C.

Here are some samples:

> n0? 0
> n8? 0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define INT_SIZE   100   /* max number of digits per integer value */
#define LINE_LEN   103   /* maximum length of any input line */
#define NUM_VARS   10   /* number of different huge int "variables" */

#define ASN_OP       '='   /* assignment operator */
#define ECH_OP       '?'   /* echo operator */
#define ADD_OP       '+'   /* addition operator */
#define MUL_OP       '*'   /* multiplication operator */
#define POW_OP       '^'   /* power of operator */

#define OPR1_POS   1   /* position of the first operand */
#define OPR2_POS   3   /* position of the second operand */
#define OP_POS       2   /* position of the operator */

#define CH_ZERO       '0'   /* character 0 */

#define EXIT_CMD    "exit"   /* command to exit */
#define PROMPT       "> "   /* command prompt */
#define CMT_FLAG   '%'       /* indicator for comment line */

typedef int digit_t;               /* a decimal digit */
typedef digit_t huge_t[INT_SIZE];   /* one huge int "variable" */

/* add your constant and type definitions here */

/****************************************************************/

/* function prototypes */
void read_line(char *line, int max_len);
void init(huge_t vars[], int lens[]);
void echo(huge_t vars[], int lens[], int opr1_index);
void assign(huge_t vars[], int lens[], int opr1_index, char *opr2_str);
void add(huge_t vars[], int lens[], int opr1_index, char *opr2_str);
void multiply(huge_t vars[], int lens[], int opr1_index, char *opr2_str);
void power(huge_t vars[], int lens[], int opr1_index, char *opr2_str);

/* add your function prototypes here */

/****************************************************************/

/* main function controls all the action, do NOT modify this function */
int
main(int argc, char *argv[]) {
   char line[LINE_LEN+1];       /* to hold the input line */
   huge_t vars[NUM_VARS];       /* to hold 10 huge integers */
   int lens[NUM_VARS];           /* to hold the length of the 10 vars */
  
   int opr1_index;               /* index of the first operand in command */
   char op;                   /* operator in command */
  
   init(vars, lens);
  
   while (1) {
       printf(PROMPT);                       /* print prompt */
       read_line(line, LINE_LEN);           /* read one line of command */

       if (line[0] == CMT_FLAG) {           /* print comment in the test data */
           printf("%s ", line);           /* used to simplify marking */
           continue;
       }
      
       if (strcmp(line, EXIT_CMD) == 0) {   /* see if command is "exit" */
           return 0;
       }
      
       opr1_index = line[OPR1_POS] - CH_ZERO;/* first var number at line[1] */
       op = line[OP_POS];                   /* operator at line[2] */

       if (op == ECH_OP) {                   /* print out the variable */
           echo(vars, lens, opr1_index);
           continue;
       }
      
       /* do the calculation, second operand starts at line[3] */
       if (op == ASN_OP) {  
           assign(vars, lens, opr1_index, line+OPR2_POS);
       } else if (op == ADD_OP) {
           add(vars, lens, opr1_index, line+OPR2_POS);
       } else if (op == MUL_OP) {
           multiply(vars, lens, opr1_index, line+OPR2_POS);
       } else if (op == POW_OP) {
           power(vars, lens, opr1_index, line+OPR2_POS);
       }
   }
  
   /* all done; take some rest */
   return 0;
}

/* read a line of input into the array passed as argument */
void
read_line(char *line, int max_len) {
   int i = 0, c;
   while (((c = getchar()) != EOF) && (c != ' ') && (c != ' ')) {
       if (i < max_len) {
           line[i++] = c;
       } else {
           printf("Invalid input line, toooooooo long. ");
           exit(0);
       }
   }
   line[i] = '';
}

/* print out a huge integer */
void echo(huge_t vars[], int lens[], int opr1_index) {
   int i;
  
   /* print the digits in a reverse order */
   for (i = lens[opr1_index]-1; i >= 0; i--) {
       printf("%d", vars[opr1_index][i]);
   }
  
   printf(" ");
}


/****************************************************************/

/* add code below to complete the function bodies,
* add more functions where appropriate.
*/

/* set the vars array to zeros */
void
init(huge_t vars[], int lens[]) {
   int i;
   for (i = 0; i < 10; i++) {
       lens[i] = 1;
       vars[i][0] = 0;
   }
}

/* process the '=' operator */
void
assign(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {
   int i = 0;
   while ((*opr2_str = getchar()) != EOF) {
       vars[opr1_index][i] = *opr2_str-48+i;
       i += 1;
   }
   lens[opr1_index] = i;
}

/* process the '+' operator */
void
add(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {
}

/* process the '*' operator */
void
multiply(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {

}

/* process the '^' operator */
void
power(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {

}

Explanation / Answer

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define INT_SIZE   100   /* max number of digits per integer value */
#define LINE_LEN   103   /* maximum length of any input line */
#define NUM_VARS   10   /* number of different huge int "variables" */

#define ASN_OP       '='   /* assignment operator */
#define ECH_OP       '?'   /* echo operator */
#define ADD_OP       '+'   /* addition operator */
#define MUL_OP       '*'   /* multiplication operator */
#define POW_OP       '^'   /* power of operator */

#define OPR1_POS   1   /* position of the first operand */
#define OPR2_POS   3   /* position of the second operand */
#define OP_POS       2   /* position of the operator */

#define CH_ZERO       '0'   /* character 0 */

#define EXIT_CMD    "exit"   /* command to exit */
#define PROMPT       "> "   /* command prompt */
#define CMT_FLAG   '%'       /* indicator for comment line */

typedef int digit_t;               /* a decimal digit */
typedef digit_t huge_t[INT_SIZE];   /* one huge int "variable" */

/* add your constant and type definitions here */

/****************************************************************/

/* function prototypes */
void read_line(char *line, int max_len);
void init(huge_t vars[], int lens[]);
void echo(huge_t vars[], int lens[], int opr1_index);
void assign(huge_t vars[], int lens[], int opr1_index, char *opr2_str);
void add(huge_t vars[], int lens[], int opr1_index, char *opr2_str);
void multiply(huge_t vars[], int lens[], int opr1_index, char *opr2_str);
void power(huge_t vars[], int lens[], int opr1_index, char *opr2_str);

/* add your function prototypes here */

/****************************************************************/

/* main function controls all the action, do NOT modify this function */
int
main(int argc, char *argv[]) {
   char line[LINE_LEN+1];       /* to hold the input line */
   huge_t vars[NUM_VARS];       /* to hold 10 huge integers */
   int lens[NUM_VARS];           /* to hold the length of the 10 vars */
  
   int opr1_index;               /* index of the first operand in command */
   char op;                   /* operator in command */
  
   init(vars, lens);
  
   while (1) {
       printf(PROMPT);                       /* print prompt */
       read_line(line, LINE_LEN);           /* read one line of command */

       if (line[0] == CMT_FLAG) {           /* print comment in the test data */
           printf("%s ", line);           /* used to simplify marking */
           continue;
       }
      
       if (strcmp(line, EXIT_CMD) == 0) {   /* see if command is "exit" */
           return 0;
       }
      
       opr1_index = line[OPR1_POS] - CH_ZERO;/* first var number at line[1] */
       op = line[OP_POS];                   /* operator at line[2] */

       if (op == ECH_OP) {                   /* print out the variable */
           echo(vars, lens, opr1_index);
           continue;
       }
      
       /* do the calculation, second operand starts at line[3] */
       if (op == ASN_OP) {  
           assign(vars, lens, opr1_index, line+OPR2_POS);
       } else if (op == ADD_OP) {
           add(vars, lens, opr1_index, line+OPR2_POS);
       } else if (op == MUL_OP) {
           multiply(vars, lens, opr1_index, line+OPR2_POS);
       } else if (op == POW_OP) {
           power(vars, lens, opr1_index, line+OPR2_POS);
       }
   }
  
   /* all done; take some rest */
   return 0;
}

/* read a line of input into the array passed as argument */
void
read_line(char *line, int max_len) {
   int i = 0, c;
   while (((c = getchar()) != EOF) && (c != ' ') && (c != ' ')) {
       if (i < max_len) {
           line[i++] = c;
       } else {
           printf("Invalid input line, toooooooo long. ");
           exit(0);
       }
   }
   line[i] = '';
}

/* print out a huge integer */
void echo(huge_t vars[], int lens[], int opr1_index) {
   int i;
  
   /* print the digits in a reverse order */
   for (i = lens[opr1_index]-1; i >= 0; i--) {
       printf("%d", vars[opr1_index][i]);
   }
  
   printf(" ");
}


/****************************************************************/

/* add code below to complete the function bodies,
* add more functions where appropriate.
*/

/* set the vars array to zeros */
void
init(huge_t vars[], int lens[]) {
   int i;
   for (i = 0; i < 10; i++) {
       lens[i] = 1;
       vars[i][0] = 0;
   }
}

/* process the '=' operator */
void
assign(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {
   int i = 0;
   while ((*opr2_str = getchar()) != EOF) {
       vars[opr1_index][i] = *opr2_str-48+i;
       i += 1;
   }
   lens[opr1_index] = i;
}

/* process the '+' operator */
void
add(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {
}

/* process the '*' operator */
void
multiply(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {

}

/* process the '^' operator */
void
power(huge_t vars[], int lens[], int opr1_index, char *opr2_str) {

}