Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * lab1.c: someone's homework
- *
- * Someone
- * March 21, 2017
- */
- #include <stdio.h>
- #include <math.h>
- /* Defines the valid operations available to the user. */
- typedef enum {
- OP_ADD = 'A',
- OP_LOG = 'T',
- OP_TERMINATE = '#'
- } Token;
- /* Converts a character (either 0 or 1) to an integer value. */
- int char_to_bit(char c)
- {
- if (c == '0') {
- return 0;
- } else if (c == '1') {
- return 1;
- } else {
- /* FIXME: We receive a newline somewhere in build_number.
- * This code is always executed when accepting a new number.
- * Find a way to get rid of it!
- */
- return 0;
- }
- }
- /* Appends either a zero or one to a number. */
- void append_bit(double *num, char c)
- {
- int bit = char_to_bit(c);
- *num *= 2;
- *num += bit;
- }
- /* Accepts input until OP_TERMINATE is reached and builds an integer
- * from its binary representation.
- */
- void build_number(double *num)
- {
- char c;
- while ((c = getchar()) != OP_TERMINATE)
- {
- append_bit(num, c);
- }
- }
- int main(int argc, char *argv[])
- {
- double input_1, input_2, result;
- Token tok;
- char c;
- scanf(" %c", &tok);
- switch (tok)
- {
- case OP_ADD:
- build_number(&input_1);
- build_number(&input_2);
- result = input_1 + input_2;
- break;
- case OP_LOG:
- build_number(&input_1);
- result = log10(input_1);
- break;
- default:
- /* TODO: Exit gracefully when no valid operation is given. */
- break;
- }
- printf("%.2f\n", result);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement