From 0fa6fb20210d845daeebb329373f18b55090e9c3 Mon Sep 17 00:00:00 2001 From: Alex Huddleston Date: Mon, 30 Oct 2017 20:11:35 -0500 Subject: [PATCH] Renaming... --- hw2/hw2pr1/hw2pr1.cpp | 223 +++++++++++++++++++++++++++++++++++++ hw2/hw2pr1/hw2pr1_data.txt | 1 + hw2/hw2pr1/makefile | 8 +- hw2/hw2pr3/makefile | 10 ++ 4 files changed, 238 insertions(+), 4 deletions(-) create mode 100644 hw2/hw2pr1/hw2pr1.cpp create mode 100644 hw2/hw2pr1/hw2pr1_data.txt create mode 100644 hw2/hw2pr3/makefile diff --git a/hw2/hw2pr1/hw2pr1.cpp b/hw2/hw2pr1/hw2pr1.cpp new file mode 100644 index 0000000..efc2abf --- /dev/null +++ b/hw2/hw2pr1/hw2pr1.cpp @@ -0,0 +1,223 @@ +// Name: Alexander Huddleston UIN: 223000555 +// CSCE 420 +// Due: 11:59 P.M. Monday, October 30, 2017 +// hw2pr1.cpp + +#include +#include +#include +#include +#include +#include +#include "node.h" + +using namespace std; + +// Perform min/max on this tree. +void minmax(node *n) +{ + + if(n->getLevel() % 2 == 0) + { + int max = n->getValue(); + + if(n->getChildren().size() > 0) + { + for(int c = 0; c < n->getChildren().size(); c++) + { + minmax(n->getChildAt(c)); + + if(n->getChildAt(c)->getValue() > max) + { + max = n->getChildAt(c)->getValue(); + } + } + } + + n->setValue(max); + //cout << n->getValue() << endl; + } + + else + { + int min = n->getValue(); + + if(n->getChildren().size() > 0) + { + for(int c = 0; c < n->getChildren().size(); c++) + { + minmax(n->getChildAt(c)); + + if(n->getChildAt(c)->getValue() < min) + { + min = n->getChildAt(c)->getValue(); + } + } + } + + n->setValue(min); + //cout << n->getValue() << endl; + } +} + +// This is mostly just a simple debug function so I can see +// if my tree is being formed properly. +void printTree(node n) +{ + cout << n.getValue() << " " << n.getLevel() << " "; + if(n.getChildren().size() != 0) + { + cout << "\n|\n"; + for(node c : n.getChildren()) + { + printTree(c); + } + cout << endl; + } +} + +tuple makeTree(string input, node n, int level) +{ + bool negate = false; + char tempc; + string tempn = ""; + + while(input.length() != 0) + { + tempc = input[0]; + if(input.length() > 0) + { + input = input.substr(1); + } + else + { + input = ""; + } + + // If the char is a number. + if(isdigit(tempc)) + { + tempn += tempc; + } + + else if(tempc == '-') + { + negate = true; + } + + // If the char is a comma. + else if(tempc == ',') + { + if(tempn.length() > 0) + { + node tempnode; + tempnode.setLevel(level); + int negatemp = stoi(tempn); + if(negate) + { + negatemp = -negatemp; + } + tempnode.setValue(negatemp); + tempnode.setParent(&n); + n.addChild(tempnode); + tempn = ""; + negate = false; + } + } + + // If the char is a close paranthesis. + else if(tempc == ')') + { + if(tempn.length() > 0) + { + node tempnode; + tempnode.setLevel(level); + int negatemp = stoi(tempn); + if(negate) + { + negatemp = -negatemp; + } + tempnode.setValue(negatemp); + tempnode.setParent(&n); + n.addChild(tempnode); + tempn = ""; + negate = false; + } + tuple tempt(n, input); + return tempt; + } + + // If the char is an open paranthesis. + else if(tempc == '(') + { + node tempnode; + tempnode.setLevel(level); + if(level % 2 == 0) + { + tempnode.setValue(INT_MIN); + } + else + { + tempnode.setValue(INT_MAX); + } + tempnode.setParent(&n); + tuple tempt = makeTree(input, tempnode, level + 1); + tempnode = get<0>(tempt); + input = get<1>(tempt); + n.addChild(tempnode); + } + } + + tuple output(n, input); + return output; +} + +int main(int argc, char **argv) +{ + // Initialization of input string. + string input = ""; + + // For testing, I want to read from a file. + // Typing in an tree from the keyboard each execution is a waste of time. + if(argc > 1) + { + if(!((string)argv[1]).substr(0, 2).compare("-f")) + { + ifstream file; + string line; + try + { + file.open("hw2pr1_data.txt"); + } + catch(exception e) + { + cerr << "File not found, or could not be opened." << endl; + } + while(!file.eof()) + { + getline(file, line); + input += line; + } + } + } + + else + { + cout << "Please input a tree: "; + cin >> input; + } + + node root; + root.setLevel(0); + root.setValue(INT_MIN); + tuple tree; + tree = makeTree(input.substr(1), root, 1); + root = get<0>(tree); + + printTree(root); + minmax(&root); + + printTree(root); + + return 0; +} diff --git a/hw2/hw2pr1/hw2pr1_data.txt b/hw2/hw2pr1/hw2pr1_data.txt new file mode 100644 index 0000000..647ea82 --- /dev/null +++ b/hw2/hw2pr1/hw2pr1_data.txt @@ -0,0 +1 @@ +(((-2,-11,10),(2,15,13),(-1,-16,-16)),((-20,13,20),(-13,7,-19),(7,3,4)),((-20,-9,-14),(-4,-6,-12),(11,18,-3))) diff --git a/hw2/hw2pr1/makefile b/hw2/hw2pr1/makefile index 79fdb18..1abb8b0 100644 --- a/hw2/hw2pr1/makefile +++ b/hw2/hw2pr1/makefile @@ -1,10 +1,10 @@ all: main -main: hw2pr2.o node.o - g++ -std=c++17 hw2pr2.o node.o -o main +main: hw2pr1.o node.o + g++ -std=c++17 hw2pr1.o node.o -o main -hw2pr1.o: hw2pr2.cpp - g++ -std=c++17 -c hw2pr2.cpp +hw2pr1.o: hw2pr1.cpp + g++ -std=c++17 -c hw2pr1.cpp node.o: node.cpp node.h g++ -std=c++17 -c node.cpp diff --git a/hw2/hw2pr3/makefile b/hw2/hw2pr3/makefile new file mode 100644 index 0000000..f4d5fb2 --- /dev/null +++ b/hw2/hw2pr3/makefile @@ -0,0 +1,10 @@ +all: main + +main: hw2pr3.o + g++ -std=c++17 hw2pr3.o -o main + +hw2pr1.o: hw2pr2.cpp + g++ -std=c++17 -c hw2pr2.cpp + +clean: + rm -rf *.o *.gch main