From 7a73162607544204032aa66cce755daf21edebda Mon Sep 17 00:00:00 2001 From: Matt Strapp Date: Tue, 24 May 2022 11:18:46 -0500 Subject: Graduate Signed-off-by: Matt Strapp --- ee1301/wk6/hw6_directory/strap012_HW6A.cpp | 215 +++++++++++++++++++++++++++++ ee1301/wk6/hw6_directory/strap012_HW6B.cpp | 35 +++++ ee1301/wk6/lab5/Bug.cpp | 12 ++ ee1301/wk6/lab5/Bug.hpp | 28 ++++ ee1301/wk6/lab5/momentum.cpp | 28 ++++ ee1301/wk6/lab5/strap012_lab5_w_1.cpp | 75 ++++++++++ ee1301/wk6/lab5/vectorArray.cpp | 43 ++++++ ee1301/wk6/lab5/wUp.cpp | 27 ++++ ee1301/wk6/lab5/warmup.txt | 15 ++ 9 files changed, 478 insertions(+) create mode 100644 ee1301/wk6/hw6_directory/strap012_HW6A.cpp create mode 100644 ee1301/wk6/hw6_directory/strap012_HW6B.cpp create mode 100644 ee1301/wk6/lab5/Bug.cpp create mode 100644 ee1301/wk6/lab5/Bug.hpp create mode 100644 ee1301/wk6/lab5/momentum.cpp create mode 100644 ee1301/wk6/lab5/strap012_lab5_w_1.cpp create mode 100644 ee1301/wk6/lab5/vectorArray.cpp create mode 100644 ee1301/wk6/lab5/wUp.cpp create mode 100644 ee1301/wk6/lab5/warmup.txt (limited to 'ee1301/wk6') diff --git a/ee1301/wk6/hw6_directory/strap012_HW6A.cpp b/ee1301/wk6/hw6_directory/strap012_HW6A.cpp new file mode 100644 index 0000000..ac2b7d0 --- /dev/null +++ b/ee1301/wk6/hw6_directory/strap012_HW6A.cpp @@ -0,0 +1,215 @@ +//Matthew Strapp +//EE1301 +//17 April 2019 +//HW 6A: Dice Class +#include +#include +using namespace std; + +const int maxNumDie=50; + +int* userInputParser(string s); + +class Dice { +private: + int min; + int max; +public: + int roll() { + return rand() % (max-min+1) + min; + }; + Dice() { //Default constructor for debugging purposes + min=1; + max=1; + } + Dice(int gotMin, int gotMax){ + min = gotMin; + max = gotMax; + }; +}; + +int main() { + int rounds; + Dice die; + int roll[maxNumDie]; + int max=0, min=999999, sum=0, sample=0; + double avg; + srand(time(NULL)); // DO NOT WRITE THIS LINE AGAIN OR ANYWHERE ELSE + cout << "What do you want to roll? "; + string s; + getline(cin, s); + cout << "How many rounds do you want to roll? "; + cin >> rounds; + int* pairs = userInputParser(s); + + // This will display the array of die information retrieved from user. + // Replace the following code when you submit your solution. + + // pairs is an array with the following format: + // {num_dice, + // first_die_start, + // first_die_end, + // second_die_start, + // ... } + double numRolls=0; + for (int j=0; j max) { + max = curRoll; + } + if (curRoll < min) { + min = curRoll; + } + sum+=curRoll; + sample=curRoll; + } + avg = sum / numRolls; + cout << "Sample roll: " << sample << endl + << "Minimum roll: " << min << endl + << "Maximum roll: " << max << endl + << "Average roll: " << avg << endl; + +} + + +int* userInputParser(string s) { + static int dice[2*maxNumDie+1] = {0}; // array format: + // {num_dice, + // first_die_start, + // first_die_end, + // second_die_start, + // ... } + // max of maxNumDie dice supported + + string data[4*maxNumDie]; // Intermediate storage for parsing input string + + // count how many '+'s or 'd's the roll[i-1] = die[i-1].roll();re are... + int parts = 0; + for(unsigned int i=0; i < s.length(); i++) + { + if(s[i] == 'd' || s[i] == '+') + { + parts++; + } + } + // ... so we know the number of times to decode values + + int index=0; + unsigned d = s.find('d'); + unsigned p = s.find('+'); + while(d != static_cast(-1) || p != static_cast(-1)) + { + bool dFirst = d < p; + if(dFirst) + { + string before = s.substr(0,d); // part before the 'd' (should be just one number) + // figure out what number is after 'd' + int count = 0; + bool foundDigit=false; + for(int i=0; i< static_cast(s.length()-d-1); i++) + { + if(isdigit(s[count+d+1])) + { + foundDigit=true; + } + if(!isdigit(s[count+d+1]) && foundDigit) + { + break; + } + count++; + } + string after = s.substr(d+1,count); //should be just the number after 'd' + + // store these two parts + data[index] = before; + data[index+1] = after; + index+=2; + + + // remove this part from the string s + s = s.substr(d+count+1); // discard these two parts + } + else // same idea for the '+' + { + // figure out what number is after '+' + int count = 0; + bool foundDigit=false; + for(int i=0; i< static_cast(s.length()-p-1); i++) + { + if(isdigit(s[count+p+1])) + { + foundDigit=true; + } + if(!isdigit(s[count+p+1]) && foundDigit) + { + break; + } + count++; + } + string after = s.substr(p+1,count); //should be just the number after '+' + + // store this part + data[index] = "+"; + data[index+1] = after; + index+=2; + + + // remove this part from the string s + s = s.substr(p+count+1); // discard these two parts + } + + // update d and p for next loop interation + d = s.find('d'); + p = s.find('+'); + + } + + // now we need to figure out how many dice there are (as 2d4 is 2 dice) + // we will treat "+2" as a die that rolls [2,2] + int diceCount = 0; + for(int i=0; i < parts*2; i+=2) + { + if(data[i][0] == '+') + { + diceCount++; + } + else + { + diceCount+=atoi(data[i].c_str()); + } + } + + dice[0] = diceCount*2+1; // put size in first index + + int ind=1; // index for the "dice" array (as not same as data array) + for(int i=0; i < parts*2; i+=2) + { + // if we have a +, add a "Dice" that has a range of 0 + if(data[i][0] == '+') + { + dice[ind] = atoi(data[i+1].c_str()); + dice[ind+1] = atoi(data[i+1].c_str()); + + ind+=2; + } + else // otherwise add however many of the dice requested + { + for(int j=0; j < atoi(data[i].c_str()); j++) + { + dice[ind] = 1; + dice[ind+1] = atoi(data[i+1].c_str()); + + ind += 2; + } + } + } + + return dice; +} diff --git a/ee1301/wk6/hw6_directory/strap012_HW6B.cpp b/ee1301/wk6/hw6_directory/strap012_HW6B.cpp new file mode 100644 index 0000000..17a37fd --- /dev/null +++ b/ee1301/wk6/hw6_directory/strap012_HW6B.cpp @@ -0,0 +1,35 @@ +//Matthew Strapp +//EE1301 +//17 April 2019 +//HW 6B: Recursion and ff(x) +#include + +int ff(int x); +int main() { + int x, y; + do { + std::cout << "Please enter a value of x: "; + std::cin >> x; + } while (x<0); + std::cout << "Beginning calculation of ff(x)...\n"; + y = ff(x); + std::cout << "Calcuation complete, ff(x) = " << y << std::endl; +} + +// This function either returns 1 when x is one of two recrusive conditions depending on if x is even or odd. +int ff(int x) { + if (x > 1) { + if (x%2 == 0) { + // x is even + std::cout << "Calling ff(" << x/2 << ")\n"; + return x*ff(x/2); + } else { + // x is odd but not 1 + std::cout << "Calling ff(" << x-2 << ")\n"; + return x*ff(x-2); + } + } else { + // x is 1 (or 0) + return 1; + } +} diff --git a/ee1301/wk6/lab5/Bug.cpp b/ee1301/wk6/lab5/Bug.cpp new file mode 100644 index 0000000..b4ef154 --- /dev/null +++ b/ee1301/wk6/lab5/Bug.cpp @@ -0,0 +1,12 @@ +#include "Bug.hpp" + +int main() { + Bug buggy(10); + buggy.display(); + buggy.move(); + buggy.display(); + buggy.turn(); + buggy.display(); + buggy.move(); + buggy.display(); +} diff --git a/ee1301/wk6/lab5/Bug.hpp b/ee1301/wk6/lab5/Bug.hpp new file mode 100644 index 0000000..cc704ab --- /dev/null +++ b/ee1301/wk6/lab5/Bug.hpp @@ -0,0 +1,28 @@ +#include + +#ifndef BUG_H + +#define BUG_H +class Bug { +private: + int position, dir; +public: + Bug() { + position=0; + dir=1; + } + Bug(int pos) { + position=pos; + dir=1; + } + void move() { + position+=dir; + } + void turn() { + dir*=-1; + } + void display() { + std::cout << "position = " << position << ", direction = " << dir << std::endl; + } +}; +#endif diff --git a/ee1301/wk6/lab5/momentum.cpp b/ee1301/wk6/lab5/momentum.cpp new file mode 100644 index 0000000..dfbaeee --- /dev/null +++ b/ee1301/wk6/lab5/momentum.cpp @@ -0,0 +1,28 @@ +#include + +double momentum (double velocity, double mass); + +int main() { + double velocity[3]; + double mass; + std::cout << "Please enter velocity (x y z) [m/s]: "; + std::cin >> velocity[0] >> velocity[1] >> velocity [2]; + std::cout << "Please enter mass [kg]: "; + std::cin >> mass; + + double* vector; + vector = new double[3]; + std::cout << "Momentum: <"; + for (int i=0; i<=2; i++) { + vector[i]=momentum(velocity[i], mass); + std::cout << vector[i]; + if ((i<2)) + std::cout << ","; + } + delete[] vector; + std::cout << ">" << std::endl; +} + +double momentum(double velocity, double mass) { + return velocity * mass; +} \ No newline at end of file diff --git a/ee1301/wk6/lab5/strap012_lab5_w_1.cpp b/ee1301/wk6/lab5/strap012_lab5_w_1.cpp new file mode 100644 index 0000000..9f5e285 --- /dev/null +++ b/ee1301/wk6/lab5/strap012_lab5_w_1.cpp @@ -0,0 +1,75 @@ +#include +//#include //Needed if using MinGW + +class DeckOfCards { +private: + int index=0, deck[52]; +public: + DeckOfCards(); + void shuffle(); + int dealCard(); +}; + +void showHand(int hand[], const int size); +int main() { + srand(time(NULL)); + const int size=4; //Size can be changed for larger hands + DeckOfCards deck; + int hand[size]; + for (int i=0; i<13; i++) { + for (int j=0; j1; i--) { + j = rand() % 50 + 1; + if (j < i) { + temp=deck[i]; deck[i]=deck[j]; deck[j]=temp; + } + } +} + +//Function to deal the card when asked by grabbing from the deck and shuffling if such card does not exist. +//Returns the card drawn from the deck +int DeckOfCards::dealCard() { + index++; + if (index>=52) { + index=0; + shuffle(); + } + return deck[index]; +} \ No newline at end of file diff --git a/ee1301/wk6/lab5/vectorArray.cpp b/ee1301/wk6/lab5/vectorArray.cpp new file mode 100644 index 0000000..92d23bd --- /dev/null +++ b/ee1301/wk6/lab5/vectorArray.cpp @@ -0,0 +1,43 @@ +#include + +double randVec(); +double momentum (double velocity); +int main() { + srand(time(NULL)); + double sum[3]={0,0,0}; + double* randVel; double* momArray; + randVel = new double[1000]; + momArray = new double[1000]; + for (int i=0; i<1000; i++) { + randVel[i]=randVec(); + momArray[i]=momentum(randVel[i]); + int j=i%3; + sum[j]+=momArray[i]; + } + std::cout << '<' << sum[0]/1000.0 << ',' << sum[1]/1000.0 << ',' << sum[2]/1000.0 << '>' << std::endl; + delete[] randVel; + delete[] momArray; +} + + +double randVec() { + double vector[3]; + for (int i=0; i<3; i++) { + if (rand()%2+1==1) { + vector[i]=rand()%100+1.0; + } else { + vector[i]=rand()%100*-1.0+1.0; + } + } + return *vector; +} + +double momentum(double velocity) { + double mass; + if (rand()%2+1==0) { + mass=rand()%10+1.0; + } else { + mass=rand()%10*-1.0+1.0; + } + return mass*velocity; +} \ No newline at end of file diff --git a/ee1301/wk6/lab5/wUp.cpp b/ee1301/wk6/lab5/wUp.cpp new file mode 100644 index 0000000..0cb3957 --- /dev/null +++ b/ee1301/wk6/lab5/wUp.cpp @@ -0,0 +1,27 @@ +#include +using namespace std; + +class Point +{ + public: +void showPoint( ); +Point( ); +Point(int newX, int newY) { + xlocation = newX; + ylocation = newY; +} +int xlocation; +int ylocation; +} ; + + +int main() { + int a(1); + int b(2); + int *p1; + p1 = &a; + Point *p2 = new Point(*p1, b); + *p1 = p2->ylocation; + p2->xlocation = 10; + cout << p2->xlocation << ' ' << *p1 << ' ' << b << ' ' << a << endl; +} \ No newline at end of file diff --git a/ee1301/wk6/lab5/warmup.txt b/ee1301/wk6/lab5/warmup.txt new file mode 100644 index 0000000..e18288c --- /dev/null +++ b/ee1301/wk6/lab5/warmup.txt @@ -0,0 +1,15 @@ +1) + a. Line 5 constructs the class with no values. + b. It'll work, but it might not work well. + c. No. + d. Point(int newX, int newY); +2) + a. This changes the value xlocation and ylocation in the Point class to 3 and 10 respectively. + This changes the default values. + b. The object p1 of the class Point is initialized with an xlocation of 3 and a ylocation of 6. + c. The declaration is incorrect. + d. Line 6 is a function of return type Point with no input. + e. Point p2; +3) + a. 10 2 2 2 + b. The array is not deleted (memory leak) -- cgit v1.2.3