summaryrefslogtreecommitdiffstats
path: root/dev/a3-earthquake/earthquake_database.cc
diff options
context:
space:
mode:
authorunknown <paulx161@umn.edu>2021-02-17 13:53:18 -0600
committerunknown <paulx161@umn.edu>2021-02-17 13:53:18 -0600
commitb302ad0465573fd77fa50d5ed261289c29080b90 (patch)
tree28ef9128beff73e81a1c04d199283fb0e4ec7c8d /dev/a3-earthquake/earthquake_database.cc
parentAdded example projects from lecture (diff)
downloadcsci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar
csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.gz
csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.bz2
csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.lz
csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.xz
csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.zst
csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.zip
Added Assignment 3 worksheet and code
Diffstat (limited to 'dev/a3-earthquake/earthquake_database.cc')
-rw-r--r--dev/a3-earthquake/earthquake_database.cc77
1 files changed, 77 insertions, 0 deletions
diff --git a/dev/a3-earthquake/earthquake_database.cc b/dev/a3-earthquake/earthquake_database.cc
new file mode 100644
index 0000000..2c9a822
--- /dev/null
+++ b/dev/a3-earthquake/earthquake_database.cc
@@ -0,0 +1,77 @@
+/** CSci-4611 Assignment 3: Earthquake
+ */
+
+#include <fstream>
+#include <algorithm>
+
+#include "earthquake_database.h"
+
+
+EarthquakeDatabase::EarthquakeDatabase(std::string filename) {
+
+ std::ifstream in(filename.c_str());
+ std::string line;
+ while (getline(in, line)) {
+ if (line.size() > 30) {
+ Earthquake e(line);
+ if (earthquakes.size() == 0) {
+ min_mag_ = (float)e.magnitude();
+ max_mag_ = (float)e.magnitude();
+ }
+ if (e.magnitude() > max_mag_) {
+ max_mag_ = (float)e.magnitude();
+ }
+ if (e.magnitude() < min_mag_) {
+ min_mag_ = (float)e.magnitude();
+ }
+ earthquakes.push_back(e);
+ }
+ }
+}
+
+Earthquake EarthquakeDatabase::earthquake(int index) {
+ return earthquakes[index];
+}
+
+int EarthquakeDatabase::min_index() {
+ return 250;
+}
+
+int EarthquakeDatabase::max_index() {
+ return (int)earthquakes.size() - 1;
+}
+
+int EarthquakeDatabase::FindMostRecentQuake(Date d) {
+ double targetSeconds = d.ToSeconds();
+ int start = min_index();
+ int end = max_index();
+ while (start < end-1) {
+ int half = (start + end) / 2;
+ if (earthquakes[half].date().ToSeconds() > targetSeconds) {
+ end = half - 1;
+ }
+ else {
+ start = half;
+ }
+ }
+ if (start == end) {
+ return start;
+ }
+ else {
+ if (earthquakes[end].date().ToSeconds() > targetSeconds) {
+ return start;
+ }
+ else {
+ return end;
+ }
+ }
+}
+
+float EarthquakeDatabase::min_magnitude() {
+ return min_mag_;
+}
+
+float EarthquakeDatabase::max_magnitude() {
+ return max_mag_;
+}
+