aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzedarider <ymherklotz@gmail.com>2016-11-07 19:21:02 +0000
committerzedarider <ymherklotz@gmail.com>2016-11-07 19:21:02 +0000
commitdd5af3d6748be7826e1f312a5ed73bc1c7092912 (patch)
treeeeefdc5a7ea2fd429d5958e408fd14460bb0521e
parent36c282d3212603eb8c395f61fa0e5401ca104587 (diff)
downloadsecond-year-computing-dd5af3d6748be7826e1f312a5ed73bc1c7092912.tar.gz
second-year-computing-dd5af3d6748be7826e1f312a5ed73bc1c7092912.zip
finished multiple labs
-rw-r--r--labs/Makefile2
-rwxr-xr-xlabs/bin/pointsbin0 -> 204616 bytes
-rw-r--r--labs/build/counter.obin0 -> 21640 bytes
-rw-r--r--labs/build/intvector.obin0 -> 10216 bytes
-rw-r--r--labs/build/main.obin0 -> 85240 bytes
-rw-r--r--labs/build/modulo_counter.obin0 -> 20160 bytes
-rw-r--r--labs/build/point.obin0 -> 47616 bytes
-rw-r--r--labs/build/rcl_circuit.obin0 -> 38392 bytes
-rw-r--r--labs/build/stopwatch.obin0 -> 22944 bytes
-rw-r--r--labs/build/triangle.obin0 -> 44392 bytes
-rw-r--r--labs/include/counter.hpp19
-rw-r--r--labs/include/intvector.hpp29
-rw-r--r--labs/include/modulo_counter.hpp14
-rw-r--r--labs/include/people.hpp35
-rw-r--r--labs/include/point.hpp16
-rw-r--r--labs/include/rcl_circuit.hpp36
-rw-r--r--labs/include/stopwatch.hpp22
-rw-r--r--labs/include/triangle.hpp4
-rw-r--r--labs/src/counter.cpp20
-rw-r--r--labs/src/intvector.cpp88
-rw-r--r--labs/src/main.cpp48
-rw-r--r--labs/src/main_intvector.cpp.bck39
-rw-r--r--labs/src/main_stopwatch.cpp.bck22
-rw-r--r--labs/src/main_triangles.cpp.bck27
-rw-r--r--labs/src/modulo_counter.cpp12
-rw-r--r--labs/src/point.cpp22
-rw-r--r--labs/src/rcl_circuit.cpp23
-rw-r--r--labs/src/stopwatch.cpp19
-rw-r--r--labs/src/triangle.cpp8
29 files changed, 500 insertions, 5 deletions
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
--- /dev/null
+++ b/labs/bin/points
Binary files differ
diff --git a/labs/build/counter.o b/labs/build/counter.o
new file mode 100644
index 0000000..814cfb5
--- /dev/null
+++ b/labs/build/counter.o
Binary files differ
diff --git a/labs/build/intvector.o b/labs/build/intvector.o
new file mode 100644
index 0000000..443a714
--- /dev/null
+++ b/labs/build/intvector.o
Binary files differ
diff --git a/labs/build/main.o b/labs/build/main.o
new file mode 100644
index 0000000..963448d
--- /dev/null
+++ b/labs/build/main.o
Binary files differ
diff --git a/labs/build/modulo_counter.o b/labs/build/modulo_counter.o
new file mode 100644
index 0000000..d9ea828
--- /dev/null
+++ b/labs/build/modulo_counter.o
Binary files differ
diff --git a/labs/build/point.o b/labs/build/point.o
new file mode 100644
index 0000000..808d1e4
--- /dev/null
+++ b/labs/build/point.o
Binary files differ
diff --git a/labs/build/rcl_circuit.o b/labs/build/rcl_circuit.o
new file mode 100644
index 0000000..ad391de
--- /dev/null
+++ b/labs/build/rcl_circuit.o
Binary files differ
diff --git a/labs/build/stopwatch.o b/labs/build/stopwatch.o
new file mode 100644
index 0000000..c4ccb63
--- /dev/null
+++ b/labs/build/stopwatch.o
Binary files differ
diff --git a/labs/build/triangle.o b/labs/build/triangle.o
new file mode 100644
index 0000000..1680109
--- /dev/null
+++ b/labs/build/triangle.o
Binary files 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 <ostream>
+
+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 <cmath>
+
+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 <complex>
+
+class component {
+public:
+ virtual std::complex<double> get_impedance(double omega) =0;
+ virtual ~component() {}
+};
+
+class resistor : public component {
+public:
+ resistor(double r = 0);
+ std::complex<double> get_impedance(double omega);
+private:
+ double resistance;
+};
+
+class capacitor : public component {
+public:
+ capacitor(double c = 0);
+ std::complex<double> get_impedance(double omega);
+private:
+ double capacitance;
+};
+
+class inductor : public component {
+public:
+ inductor(double l = 0);
+ std::complex<double> 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 <ostream>
+
+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 <iostream>
#include <vector>
+#include "../include/rcl_circuit.hpp"
+
using namespace std;
int main(int argc, char* argv[]) {
(void)argc;
(void)argv;
+ vector<component*> 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 <iostream>
+#include <vector>
+
+#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 <iostream>
+#include <vector>
+
+#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 <iostream>
+#include <vector>
+
+#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<double> resistor::get_impedance(double omega) {
+ (void) omega;
+ std::complex<double> impedance(resistance);
+ return impedance;
+}
+
+capacitor::capacitor(double c) : capacitance(c) {}
+
+std::complex<double> capacitor::get_impedance(double omega) {
+ std::complex<double> impedance(0, -1/(omega*capacitance));
+ return impedance;
+}
+
+inductor::inductor(double l) : inductance(l) {}
+
+std::complex<double> inductor::get_impedance(double omega) {
+ std::complex<double> 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());
}