From dd5af3d6748be7826e1f312a5ed73bc1c7092912 Mon Sep 17 00:00:00 2001 From: zedarider Date: Mon, 7 Nov 2016 19:21:02 +0000 Subject: finished multiple labs --- labs/Makefile | 2 +- labs/bin/points | Bin 0 -> 204616 bytes labs/build/counter.o | Bin 0 -> 21640 bytes labs/build/intvector.o | Bin 0 -> 10216 bytes labs/build/main.o | Bin 0 -> 85240 bytes labs/build/modulo_counter.o | Bin 0 -> 20160 bytes labs/build/point.o | Bin 0 -> 47616 bytes labs/build/rcl_circuit.o | Bin 0 -> 38392 bytes labs/build/stopwatch.o | Bin 0 -> 22944 bytes labs/build/triangle.o | Bin 0 -> 44392 bytes labs/include/counter.hpp | 19 +++++++++ labs/include/intvector.hpp | 29 +++++++++++++ labs/include/modulo_counter.hpp | 14 +++++++ labs/include/people.hpp | 35 ++++++++++++++++ labs/include/point.hpp | 16 +++++++- labs/include/rcl_circuit.hpp | 36 ++++++++++++++++ labs/include/stopwatch.hpp | 22 ++++++++++ labs/include/triangle.hpp | 4 +- labs/src/counter.cpp | 20 +++++++++ labs/src/intvector.cpp | 88 ++++++++++++++++++++++++++++++++++++++++ labs/src/main.cpp | 48 ++++++++++++++++++++++ labs/src/main_intvector.cpp.bck | 39 ++++++++++++++++++ labs/src/main_stopwatch.cpp.bck | 22 ++++++++++ labs/src/main_triangles.cpp.bck | 27 ++++++++++++ labs/src/modulo_counter.cpp | 12 ++++++ labs/src/point.cpp | 22 +++++++++- labs/src/rcl_circuit.cpp | 23 +++++++++++ labs/src/stopwatch.cpp | 19 +++++++++ labs/src/triangle.cpp | 8 +++- 29 files changed, 500 insertions(+), 5 deletions(-) create mode 100755 labs/bin/points create mode 100644 labs/build/counter.o create mode 100644 labs/build/intvector.o create mode 100644 labs/build/main.o create mode 100644 labs/build/modulo_counter.o create mode 100644 labs/build/point.o create mode 100644 labs/build/rcl_circuit.o create mode 100644 labs/build/stopwatch.o create mode 100644 labs/build/triangle.o create mode 100644 labs/include/counter.hpp create mode 100644 labs/include/intvector.hpp create mode 100644 labs/include/modulo_counter.hpp create mode 100644 labs/include/people.hpp create mode 100644 labs/include/rcl_circuit.hpp create mode 100644 labs/include/stopwatch.hpp create mode 100644 labs/src/counter.cpp create mode 100644 labs/src/intvector.cpp create mode 100644 labs/src/main_intvector.cpp.bck create mode 100644 labs/src/main_stopwatch.cpp.bck create mode 100644 labs/src/main_triangles.cpp.bck create mode 100644 labs/src/modulo_counter.cpp create mode 100644 labs/src/rcl_circuit.cpp create mode 100644 labs/src/stopwatch.cpp diff --git a/labs/Makefile b/labs/Makefile index 68d0b8b..b82064e 100644 --- a/labs/Makefile +++ b/labs/Makefile @@ -7,7 +7,7 @@ TARGET := bin/points SRCEXT := cpp SOURCES := $(shell find $(SRCDIR) -type f -name "*.$(SRCEXT)") OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o)) -CFLAGS := -g -Wall -Wextra -std=c++14 +CFLAGS := -g -Wall -Wextra -Wpedantic -std=c++14 LIB := INC := -I include diff --git a/labs/bin/points b/labs/bin/points new file mode 100755 index 0000000..066ab5a Binary files /dev/null and b/labs/bin/points differ diff --git a/labs/build/counter.o b/labs/build/counter.o new file mode 100644 index 0000000..814cfb5 Binary files /dev/null and b/labs/build/counter.o differ diff --git a/labs/build/intvector.o b/labs/build/intvector.o new file mode 100644 index 0000000..443a714 Binary files /dev/null and b/labs/build/intvector.o differ diff --git a/labs/build/main.o b/labs/build/main.o new file mode 100644 index 0000000..963448d Binary files /dev/null and b/labs/build/main.o differ diff --git a/labs/build/modulo_counter.o b/labs/build/modulo_counter.o new file mode 100644 index 0000000..d9ea828 Binary files /dev/null and b/labs/build/modulo_counter.o differ diff --git a/labs/build/point.o b/labs/build/point.o new file mode 100644 index 0000000..808d1e4 Binary files /dev/null and b/labs/build/point.o differ diff --git a/labs/build/rcl_circuit.o b/labs/build/rcl_circuit.o new file mode 100644 index 0000000..ad391de Binary files /dev/null and b/labs/build/rcl_circuit.o differ diff --git a/labs/build/stopwatch.o b/labs/build/stopwatch.o new file mode 100644 index 0000000..c4ccb63 Binary files /dev/null and b/labs/build/stopwatch.o differ diff --git a/labs/build/triangle.o b/labs/build/triangle.o new file mode 100644 index 0000000..1680109 Binary files /dev/null and b/labs/build/triangle.o differ diff --git a/labs/include/counter.hpp b/labs/include/counter.hpp new file mode 100644 index 0000000..f072183 --- /dev/null +++ b/labs/include/counter.hpp @@ -0,0 +1,19 @@ +#ifndef COUNTER_HPP +#define COUNTER_HPP + +#include + +class Counter { +public: + Counter(); + void increment(); + void reset(); + int get_count() const; + + friend std::ostream& operator<<(std::ostream& out, const Counter& c); + +protected: + int count; +}; + +#endif diff --git a/labs/include/intvector.hpp b/labs/include/intvector.hpp new file mode 100644 index 0000000..f5f0912 --- /dev/null +++ b/labs/include/intvector.hpp @@ -0,0 +1,29 @@ +#ifndef INTVECTOR_HPP +#define INTVECTOR_HPP + +#include + +class intvector { +public: + intvector(); + intvector(const intvector& input_vector); + intvector(int size); + ~intvector(); + + intvector& operator=(const intvector& input_vector); + int& operator[](const int& index); + const int& operator[](const int& index) const; + + void push_back(int i); + + int& at(const int& i); + int size() const; + int capacity() const; + int find(const int& i) const; +private: + int* vector_pointer; + int vector_size; + int vector_capacity; +}; + +#endif diff --git a/labs/include/modulo_counter.hpp b/labs/include/modulo_counter.hpp new file mode 100644 index 0000000..5c04ab0 --- /dev/null +++ b/labs/include/modulo_counter.hpp @@ -0,0 +1,14 @@ +#ifndef MODULO_COUNTER_HPP +#define MODULO_COUNTER_HPP + +#include "counter.hpp" + +class ModuloCounter : public Counter { +public: + ModuloCounter(int m=0); + bool increment(); +private: + int modulo; +}; + +#endif diff --git a/labs/include/people.hpp b/labs/include/people.hpp new file mode 100644 index 0000000..c4f8b64 --- /dev/null +++ b/labs/include/people.hpp @@ -0,0 +1,35 @@ +#ifndef PEOPLE_HPP +#define PEOPLE_HPP + +class person { +public: + virtual int get_id_number() =0; + virtual int get_age() =0; + virtual ~person() {} +}; + +class college_member : public person { +public: +protected: +private: +}; + +class college_visitor : public person { +public: +protected: +private: +}; + +class student : public college_member { +public: +protected: +private: +}; + +class employee : public college_member { +public: +protected: +private: +}; + +#endif diff --git a/labs/include/point.hpp b/labs/include/point.hpp index 95458df..40aa56f 100644 --- a/labs/include/point.hpp +++ b/labs/include/point.hpp @@ -9,7 +9,21 @@ class Point { public: Point() : x(0), y(0), distance(0) {} Point(double x, double y); + ~Point(); + friend bool operator<(const Point& p1, const Point& p2); + inline friend bool operator>(const Point& p1, const Point& p2) { + return p2 < p1; + } + inline friend bool operator>=(const Point& p1, const Point& p2) { + return !(p1 < p2); + } + inline friend bool operator<=(const Point& p1, const Point& p2) { + return !(p1 > p2); + } + friend bool operator==(const Point& p1, const Point& p2); + friend std::ostream& operator<<(std::ostream& out, const Point& p); + void set(double x, double y); void set_x(double x); void set_y(double y); @@ -21,7 +35,7 @@ public: double get_distance(); double get_distance(Point p); - std::string str(); + std::string str() const; protected: private: diff --git a/labs/include/rcl_circuit.hpp b/labs/include/rcl_circuit.hpp new file mode 100644 index 0000000..41e1e6d --- /dev/null +++ b/labs/include/rcl_circuit.hpp @@ -0,0 +1,36 @@ +#ifndef RCL_CIRCUIT_HPP +#define RCL_CIRCUIT_HPP + +#include + +class component { +public: + virtual std::complex get_impedance(double omega) =0; + virtual ~component() {} +}; + +class resistor : public component { +public: + resistor(double r = 0); + std::complex get_impedance(double omega); +private: + double resistance; +}; + +class capacitor : public component { +public: + capacitor(double c = 0); + std::complex get_impedance(double omega); +private: + double capacitance; +}; + +class inductor : public component { +public: + inductor(double l = 0); + std::complex get_impedance(double omega); +private: + double inductance; +}; + +#endif diff --git a/labs/include/stopwatch.hpp b/labs/include/stopwatch.hpp new file mode 100644 index 0000000..208aebd --- /dev/null +++ b/labs/include/stopwatch.hpp @@ -0,0 +1,22 @@ +#ifndef STOPWATCH_HPP +#define STOPWATCH_HPP + +#include "counter.hpp" +#include "modulo_counter.hpp" + +#include + +class Stopwatch { +public: + Stopwatch(); + void tick(); + void reset(); + + friend std::ostream& operator<<(std::ostream& out, const Stopwatch& sw); +private: + Counter hours; + ModuloCounter minutes; + ModuloCounter seconds; +}; + +#endif diff --git a/labs/include/triangle.hpp b/labs/include/triangle.hpp index 2d2cf88..9c13fb9 100644 --- a/labs/include/triangle.hpp +++ b/labs/include/triangle.hpp @@ -6,12 +6,14 @@ class Triangle { public: Triangle() : p1(), p2(), p3() {} - Triangle(Point p1, Point p2, Point p3); + Triangle(Point p1 = Point(), Point p2 = Point(), Point p3 = Point()); void set(Point p1, Point p2, Point p3); void set_point(unsigned point, Point p); double perimeter(); + + void translate(Point p); protected: private: Point p1, p2, p3; diff --git a/labs/src/counter.cpp b/labs/src/counter.cpp new file mode 100644 index 0000000..2af38a8 --- /dev/null +++ b/labs/src/counter.cpp @@ -0,0 +1,20 @@ +#include "../include/counter.hpp" + +Counter::Counter() : count(0) {} + +void Counter::increment() { + count++; +} + +void Counter::reset() { + count = 0; +} + +int Counter::get_count() const { + return count; +} + + +std::ostream& operator<<(std::ostream& out, const Counter& c) { + return out << c.count; +} diff --git a/labs/src/intvector.cpp b/labs/src/intvector.cpp new file mode 100644 index 0000000..fae9ff0 --- /dev/null +++ b/labs/src/intvector.cpp @@ -0,0 +1,88 @@ +#include "../include/intvector.hpp" + +intvector::intvector() { + vector_pointer = new int[1]; + vector_size = 0; + vector_capacity = 1; +} + +intvector::intvector(const intvector& input_vector) { + vector_pointer = new int[1]; + vector_size = 0; + vector_capacity = 1; + *this = input_vector; +} + +intvector::intvector(int size) { + vector_size = size; + vector_capacity = pow(2, ceil(log2(size+1))); + vector_pointer = new int[vector_size]; + + for(int i = 0; i < vector_size; ++i) { + vector_pointer[i] = 0; + } +} + +intvector::~intvector() { + delete[] vector_pointer; +} + +intvector& intvector::operator=(const intvector& input_vector) { + delete[] vector_pointer; + vector_size = input_vector.size(); + vector_capacity = input_vector.capacity(); + vector_pointer = new int[vector_capacity]; + + for(int i = 0; i < input_vector.size(); ++i) { + vector_pointer[i] = input_vector[i]; + } + + return *this; +} + +int& intvector::operator[](const int& index) { + if(index < vector_size) + return vector_pointer[index]; + return vector_size; +} + +const int& intvector::operator[](const int& index) const { + if(index < vector_size) + return vector_pointer[index]; + return vector_size; +} + +void intvector::push_back(int i) { + if(vector_size >= vector_capacity) { + intvector tmp(vector_size); + for(int j = 0; j < vector_size; ++j) { + tmp[j] = vector_pointer[j]; + } + *this = tmp; + } + vector_pointer[vector_size] = i; + ++vector_size; +} + +int& intvector::at(const int& i) { + if(i < vector_size) + return vector_pointer[i]; + return vector_size; +} + +int intvector::size() const { + return vector_size; +} + +int intvector::capacity() const { + return vector_capacity; +} + +int intvector::find(const int& i) const { + for(int j = 0; j < vector_size; ++j) { + if(vector_pointer[j] == i) { + return j; + } + } + return -1; +} diff --git a/labs/src/main.cpp b/labs/src/main.cpp index 2147b4b..399a22c 100644 --- a/labs/src/main.cpp +++ b/labs/src/main.cpp @@ -1,11 +1,59 @@ #include #include +#include "../include/rcl_circuit.hpp" + using namespace std; int main(int argc, char* argv[]) { (void)argc; (void)argv; + vector circuit; + + component* tmp_id; + + char dc; + double tmp_rcl; + int n_devices; + + cout << "number of devices = "; + cin >> n_devices; + + for(int i = 0; i < n_devices; ++i) { + cout << "device choice (r/c/l) = "; + cin >> dc; + + if(dc == 'c') { + cout << "capacitance (F) = "; + cin >> tmp_rcl; + tmp_id = new capacitor(tmp_rcl); + } else if(dc == 'l') { + cout << "inductance (H) = "; + cin >> tmp_rcl; + tmp_id = new inductor(tmp_rcl); + } else { + cout << "resistance (Ohm) = "; + cin >> tmp_rcl; + tmp_id = new resistor(tmp_rcl); + } + + circuit.push_back(tmp_id); + } + + double f; + cout << "frequency = "; + cin >> f; + + for(int i = 0; i < n_devices; ++i) { + cout << "impedance " << i+1 << ": "; + cout << circuit[i]->get_impedance(f*6.28) << " Ohms"; + cout << endl; + } + + for(int i = 0; i < n_devices; ++i) { + delete circuit[i]; + } + return 0; } diff --git a/labs/src/main_intvector.cpp.bck b/labs/src/main_intvector.cpp.bck new file mode 100644 index 0000000..c3043e5 --- /dev/null +++ b/labs/src/main_intvector.cpp.bck @@ -0,0 +1,39 @@ +#include +#include + +#include "../include/intvector.hpp" + +using namespace std; + +int main(int argc, char* argv[]) { + (void)argc; + (void)argv; + + intvector v1; + + for(int i = 0; i < 20; ++i) { + v1.push_back(i); + + cout << "v1.at: " << v1.at(i) << "\tv1.size: " << v1.size() << "\tv1.ca" + "pacity: " << v1.capacity() << endl; + } + + intvector v2(v1); + + for(int i = 0; i < v2.size(); ++i) { + if(v2[i] % 2 == 0) { + v2[i] = v2[i] / 2; + } + } + + v1 = v2; + + for(int i = 0; i < v1.size(); ++i) { + cout << "v1 at " << i << ": " << v1[i] << endl; + cout << "v2 at " << i << ": " << v2[i] << endl; + } + + cout << "4 is at location: " << v1.find(4) << endl; + + return 0; +} diff --git a/labs/src/main_stopwatch.cpp.bck b/labs/src/main_stopwatch.cpp.bck new file mode 100644 index 0000000..9239cc0 --- /dev/null +++ b/labs/src/main_stopwatch.cpp.bck @@ -0,0 +1,22 @@ +#include +#include + +#include "../include/stopwatch.hpp" + +using namespace std; + +int main(int argc, char* argv[]) { + (void)argc; + (void)argv; + + Stopwatch sw; + + for(int i = 0; i < 5000; ++i) { + cout << sw << endl; + sw.tick(); + } + + cout << sw << endl; + + return 0; +} diff --git a/labs/src/main_triangles.cpp.bck b/labs/src/main_triangles.cpp.bck new file mode 100644 index 0000000..217b95e --- /dev/null +++ b/labs/src/main_triangles.cpp.bck @@ -0,0 +1,27 @@ +#include +#include + +#include "../include/point.hpp" +#include "../include/triangle.hpp" + +using namespace std; + +int main(int argc, char* argv[]) { + (void)argc; + (void)argv; + + Point p1(1,1); + Point p2(0,0); + Point p3(2,0); + + Triangle t1(p1, p2, p3); + + cout << "Perimeter of triangle [" << p1.str() << ", " << p2.str() << ", " << + p3.str() << "] = " << t1.perimeter() << endl; + + if(p3 > p1) { + cout << "p1 is smaller than p2" << endl; + } + + return 0; +} diff --git a/labs/src/modulo_counter.cpp b/labs/src/modulo_counter.cpp new file mode 100644 index 0000000..3173139 --- /dev/null +++ b/labs/src/modulo_counter.cpp @@ -0,0 +1,12 @@ +#include "../include/modulo_counter.hpp" + +ModuloCounter::ModuloCounter(int m /* = 0 */) : Counter(), modulo(m) {} + +bool ModuloCounter::increment() { + count++; + if((modulo > 0) && (count >= modulo)) { + reset(); + return true; + } + return false; +} diff --git a/labs/src/point.cpp b/labs/src/point.cpp index 1619bb6..2f63c24 100644 --- a/labs/src/point.cpp +++ b/labs/src/point.cpp @@ -4,6 +4,26 @@ Point::Point(double x, double y) { set(x, y); } +Point::~Point() { + +} + +bool operator<(const Point& p1, const Point& p2) { + if(p1.distance < p2.distance) + return true; + return false; +} + +bool operator==(const Point& p1, const Point& p2) { + if(p1.x == p2.x && p1.y == p2.y) + return true; + return false; +} + +std::ostream& operator<<(std::ostream& out, const Point& p) { + return out << p.str(); +} + void Point::set(double x, double y) { set_x(x); set_y(y); @@ -43,7 +63,7 @@ double Point::get_distance(Point p) { return sqrt(pow(x-p.x, 2) + pow(y-p.y, 2)); } -std::string Point::str() { +std::string Point::str() const { std::stringstream ss; ss << "(" << x << ", " << y << ")"; return ss.str(); diff --git a/labs/src/rcl_circuit.cpp b/labs/src/rcl_circuit.cpp new file mode 100644 index 0000000..8ec3fb2 --- /dev/null +++ b/labs/src/rcl_circuit.cpp @@ -0,0 +1,23 @@ +#include "../include/rcl_circuit.hpp" + +resistor::resistor(double r) : resistance(r) {} + +std::complex resistor::get_impedance(double omega) { + (void) omega; + std::complex impedance(resistance); + return impedance; +} + +capacitor::capacitor(double c) : capacitance(c) {} + +std::complex capacitor::get_impedance(double omega) { + std::complex impedance(0, -1/(omega*capacitance)); + return impedance; +} + +inductor::inductor(double l) : inductance(l) {} + +std::complex inductor::get_impedance(double omega) { + std::complex impedance(0, omega*inductance); + return impedance; +} diff --git a/labs/src/stopwatch.cpp b/labs/src/stopwatch.cpp new file mode 100644 index 0000000..602bafb --- /dev/null +++ b/labs/src/stopwatch.cpp @@ -0,0 +1,19 @@ +#include "../include/stopwatch.hpp" + +Stopwatch::Stopwatch() : hours(), minutes(60), seconds(60) {} + +void Stopwatch::reset() { + hours.reset(); + minutes.reset(); + seconds.reset(); +} + +void Stopwatch::tick() { + if(seconds.increment()) + if(minutes.increment()) + hours.increment(); +} + +std::ostream& operator<<(std::ostream& out, const Stopwatch& sw) { + return out << sw.hours << ":" << sw.minutes << ":" << sw.seconds; +} diff --git a/labs/src/triangle.cpp b/labs/src/triangle.cpp index 991de92..8c715b3 100644 --- a/labs/src/triangle.cpp +++ b/labs/src/triangle.cpp @@ -20,5 +20,11 @@ void Triangle::set_point(unsigned point, Point p) { } double Triangle::perimeter() { - return 0; + return p1.get_distance(p2) + p1.get_distance(p3) + p2.get_distance(p3); +} + +void Triangle::translate(Point p) { + p1.set(p1.get_x()+p.get_x(), p1.get_y()+p.get_y()); + p2.set(p2.get_x()+p.get_x(), p2.get_y()+p.get_y()); + p3.set(p3.get_x()+p.get_x(), p3.get_y()+p.get_y()); } -- cgit