Browse Source

first example and init

jezv 11 months ago
commit
fb9f2ce44f
5 changed files with 150 additions and 0 deletions
  1. 1 0
      .gitignore
  2. 6 0
      .vscode/settings.json
  3. 28 0
      .vscode/tasks.json
  4. BIN
      main
  5. 115 0
      main.cpp

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+Moon

+ 6 - 0
.vscode/settings.json

@@ -0,0 +1,6 @@
+{
+    "files.associations": {
+        "ostream": "cpp",
+        "functional": "cpp"
+    }
+}

+ 28 - 0
.vscode/tasks.json

@@ -0,0 +1,28 @@
+{
+    "tasks": [
+        {
+            "type": "cppbuild",
+            "label": "C/C++: g++-11 build active file",
+            "command": "/usr/bin/g++-11",
+            "args": [
+                "-fdiagnostics-color=always",
+                "-g",
+                "${file}",
+                "-o",
+                "${fileDirname}/${fileBasenameNoExtension}"
+            ],
+            "options": {
+                "cwd": "${fileDirname}"
+            },
+            "problemMatcher": [
+                "$gcc"
+            ],
+            "group": {
+                "kind": "build",
+                "isDefault": true
+            },
+            "detail": "Task generated by Debugger."
+        }
+    ],
+    "version": "2.0.0"
+}

BIN
main


+ 115 - 0
main.cpp

@@ -0,0 +1,115 @@
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <vector>
+#include <math.h>
+
+using namespace std;
+
+struct time
+{
+    int hours, minutes, seconds;
+};
+
+struct day_info
+{
+    struct time rise, culmination, setting;
+    int day_size;
+};
+
+struct day_info get_day_info(ifstream* file)
+{
+    int YMD, HMS, nextYMD, nextHMS, headBytes;
+    double El, nextT, nextR, nextEl, nextAz, nextFI, nextLG, prevEl;
+    struct time rise, culmination, setting;
+    *file >> nextYMD >> nextHMS >> nextT >> nextR >> nextEl >> nextAz >> nextFI >> nextLG;
+    headBytes = file->tellg();
+    YMD = nextYMD;
+    HMS = nextHMS;
+    El = nextEl;
+    *file >> nextYMD >> nextHMS >> nextT >> nextR >> nextEl >> nextAz >> nextFI >> nextLG;
+    while(YMD == nextYMD)
+    {
+        // cout << El << ' ' << nextEl << endl;
+        if (El < 0 and nextEl > 0)
+        {
+            // cout << "rise /|" << endl;
+            rise.hours = nextHMS/10000;
+            rise.minutes = (nextHMS/100)%100;
+            rise.seconds = nextHMS%100;
+        }
+        else if (El > prevEl and El > nextEl and El > 0 and nextEl > 0 and prevEl > 0)
+        {
+            // cout << "culmination /|" << endl;
+            culmination.hours = HMS/10000;
+            culmination.minutes = (HMS/100)%100;
+            culmination.seconds = HMS%100;
+        }
+        else if (El > 0 and nextEl < 0)
+        {
+            // cout << "setting /|" << endl;
+            setting.hours = nextHMS/10000;
+            setting.minutes = (nextHMS/100)%100;
+            setting.seconds = nextHMS%100;
+        }
+        YMD = nextYMD;
+        HMS = nextHMS;
+        prevEl = El;
+        El = nextEl;
+        *file >> nextYMD >> nextHMS >> nextT >> nextR >> nextEl >> nextAz >> nextFI >> nextLG;
+        cout << nextYMD << ' ' << nextHMS << ' ' << nextT << ' ' << nextR << ' ' << nextEl << ' ' << nextAz << ' ' << nextFI << ' ' << nextLG << endl;
+    }
+    struct day_info day_result;
+    day_result.rise = rise;
+    day_result.culmination = culmination;
+    day_result.setting = setting;
+    day_result.day_size = file->tellg() - headBytes;
+    return day_result;
+}
+
+int countDays(int year, int months, int day)
+{
+    months -= 1;
+    int result = (months/2)*30 + (months/2 + months%2)*31;
+    if (months > 1) result -= 2;
+    if (months > 1 and year % 4 == 0) result += 1;
+    if (months > 5) result += 1;
+    return result + day;
+}
+
+int main() {
+    ifstream file;
+    string filepath = "Moon/moon";
+    int year, month, day;
+    cin >> year >> month >> day;
+    for(int i = 0; i < 4; i++) {
+        cout << (year / (int)pow(10, 3-i))%10 << endl;
+        filepath += char((year / (int)pow(10, 3-i))%10 + '0');
+    }
+    filepath += ".dat";
+    cout << filepath << endl;
+    file.open(filepath);
+    if(file) {
+        string s;
+        getline(file, s);
+        cout << s << endl;
+        int headsize = file.tellg();
+        struct day_info first_day = get_day_info(&file);
+        cout << first_day.day_size << endl;
+        cout << countDays(year, month, day) << endl;
+        file.seekg( countDays(year, month, day) * (first_day.day_size) + headsize, ios_base::beg);
+        struct day_info day_result = get_day_info(&file);
+        cout << day_result.rise.hours << ':' << day_result.rise.minutes << ':' << day_result.rise.seconds << endl;
+        cout << day_result.culmination.hours << ':' << day_result.culmination.minutes << ':' << day_result.culmination.seconds << endl;
+        cout << day_result.setting.hours << ':' << day_result.setting.minutes << ':' << day_result.setting.seconds << endl;
+
+        // int days = 100;
+        // int prevSize = 0;
+        // for(int i = 0; i < days; i++) {
+        //     struct day_info first_day = get_day_info(&file);
+        //     cout << first_day.day_size - prevSize << endl;
+        //     prevSize = first_day.day_size;
+        // }
+    }
+    return 0;
+}