mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-09 21:51:15 +00:00
Added VERY old code. Very cringy to look at, but hey, we all had to start somewhere...
This commit is contained in:
146
OSU Coursework/CS 261 - Data Structures/Assignment 2/calc.c
Normal file
146
OSU Coursework/CS 261 - Data Structures/Assignment 2/calc.c
Normal file
@@ -0,0 +1,146 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "dynamicArray.h"
|
||||
|
||||
|
||||
/* param: s the string
|
||||
param: num a pointer to double
|
||||
returns: true (1) if s is a number else 0 or false.
|
||||
postcondition: if it is a number, num will hold
|
||||
the value of the number
|
||||
*/
|
||||
int isNumber(char *s, double *num)
|
||||
{
|
||||
char *end;
|
||||
double returnNum;
|
||||
|
||||
if(strcmp(s, "0") == 0)
|
||||
{
|
||||
*num = 0;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
returnNum = strtod(s, &end);
|
||||
/* If there's anythin in end, it's bad */
|
||||
if((returnNum != 0.0) && (strcmp(end, "") == 0))
|
||||
{
|
||||
*num = returnNum;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0; //if got here, it was not a number
|
||||
}
|
||||
|
||||
/* param: stack the stack being manipulated
|
||||
pre: the stack contains at least two elements
|
||||
post: the top two elements are popped and
|
||||
their sum is pushed back onto the stack.
|
||||
*/
|
||||
void add (struct DynArr *stack)
|
||||
{
|
||||
/* FIXME: You will write this function */
|
||||
}
|
||||
|
||||
/* param: stack the stack being manipulated
|
||||
pre: the stack contains at least two elements
|
||||
post: the top two elements are popped and
|
||||
their difference is pushed back onto the stack.
|
||||
*/
|
||||
void subtract(struct DynArr *stack)
|
||||
{
|
||||
/* FIXME: You will write this function */
|
||||
}
|
||||
|
||||
/* param: stack the stack being manipulated
|
||||
pre: the stack contains at least two elements
|
||||
post: the top two elements are popped and
|
||||
their quotient is pushed back onto the stack.
|
||||
*/
|
||||
void divide(struct DynArr *stack)
|
||||
{
|
||||
/* FIXME: You will write this function */
|
||||
}
|
||||
|
||||
double calculate(int numInputTokens, char **inputString)
|
||||
{
|
||||
int i;
|
||||
double result = 0.0;
|
||||
char *s;
|
||||
struct DynArr *stack;
|
||||
|
||||
//set up the stack
|
||||
stack = createDynArr(20);
|
||||
|
||||
// start at 1 to skip the name of the calculator calc
|
||||
for(i=1;i < numInputTokens;i++)
|
||||
{
|
||||
s = inputString[i];
|
||||
|
||||
// Hint: General algorithm:
|
||||
// (1) Check if the string s is in the list of operators.
|
||||
// (1a) If it is, perform corresponding operations.
|
||||
// (1b) Otherwise, check if s is a number.
|
||||
// (1b - I) If s is not a number, produce an error.
|
||||
// (1b - II) If s is a number, push it onto the stack
|
||||
|
||||
if(strcmp(s, "+") == 0)
|
||||
add(stack);
|
||||
else if(strcmp(s,"-") == 0)
|
||||
subtract(stack);
|
||||
else if(strcmp(s, "/") == 0)
|
||||
divide(stack);
|
||||
else if(strcmp(s, "x") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Multiplying\n");
|
||||
else if(strcmp(s, "^") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Power\n");
|
||||
else if(strcmp(s, "^2") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Squaring\n");
|
||||
else if(strcmp(s, "^3") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Cubing\n");
|
||||
else if(strcmp(s, "abs") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Absolute value\n");
|
||||
else if(strcmp(s, "sqrt") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Square root\n");
|
||||
else if(strcmp(s, "exp") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Exponential\n");
|
||||
else if(strcmp(s, "ln") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Natural Log\n");
|
||||
else if(strcmp(s, "log") == 0)
|
||||
/* FIXME: replace printf with your own function */
|
||||
printf("Log\n");
|
||||
else
|
||||
{
|
||||
// FIXME: You need to develop the code here (when s is not an operator)
|
||||
// Remember to deal with special values ("pi" and "e")
|
||||
|
||||
}
|
||||
} //end for
|
||||
|
||||
/* FIXME: You will write this part of the function (2 steps below)
|
||||
* (1) Check if everything looks OK and produce an error if needed.
|
||||
* (2) Store the final value in result and print it out.
|
||||
*/
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int main(int argc , char** argv)
|
||||
{
|
||||
// assume each argument is contained in the argv array
|
||||
// argc-1 determines the number of operands + operators
|
||||
if (argc == 1)
|
||||
return 0;
|
||||
|
||||
calculate(argc,argv);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user