123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- // moon.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- //
- #include <iostream>
- #include <fstream>
- #include "datetime.h"
- using namespace std;
- int skip_col(string, int);
- void take_moon_survey(date);
- double get_EL(string, int);
- int main()
- {
- date examp(2023, 03, 9);
- take_moon_survey(examp);
- }
- void take_moon_survey(date some_date){
- ifstream data_file;
- data_file.open("./Moon/moon2023.dat");
- if (!data_file.is_open()) {
- cout << "not opened\n";
- return;
- }
- string line;
- date line_date;
- date prev_date;
- prev_date = date(some_date.year,01,01);
- string rise_set = "Moon rising: ";
- unsigned long long length_day=0,cur_length;
- bool flag = 1;
- cout << "date: " << some_date << endl;
- getline(data_file, line);
- double prev_val = -100.0;
- while (getline(data_file, line)) {
- int year, month, day;
- year = (line[0] - 48) * 1000 + (line[1] - 48) * 100 + (line[2] - 48) * 10 + (line[3] - 48);
- month = (line[4] - 48) * 10 + (line[5] - 48);
- day = (line[6] - 48) * 10 + (line[7] - 48);
- line_date = date(year, month, day);
- if (line_date == some_date)
- {
- int el = skip_col(line, 4);
- double EL_val = get_EL(line, el);
- if (prev_val > 0 && EL_val < 0)
- {
- cout << "Moon sets: " << line << endl;
- }
- if (prev_val < 0 && EL_val > 0)
- {
- cout << "Moon rises: " << line << endl;
- }
- prev_val = EL_val;
- //cout << line << '\t' << line_date << '\t' << EL_val << endl;
- }
- else if (flag) {
- length_day++;
- flag = (line_date == prev_date);
-
- }
- else {
- for (unsigned long long i = 1; i < length_day; i++)
- getline(data_file, line);
- }
- }
- data_file.close();
- }
- double get_EL(string line, int index)
- {
- double res = 0.0;
- bool neg = (line[index] == 45);
- int dot = neg ? index + 1 : index;
- double dec_post_dot=1.0;
- while (line[dot] !=46) {
- dot++;
- }
- int start = dot + 1;
- for ( start; line[start] < 58 && line[start]>45; start++) {
- dec_post_dot /= 10;
- }
- start--;
- for (start; line[start] < 58 && line[start] > 47; start--) {
- res =res+ (line[start] - 48) * dec_post_dot;
- dec_post_dot *= 10;
- }
- start--;
- for (start; line[start] < 58 && line[start] > 47; start--) {
- res += (line[start] - 48) * dec_post_dot;
- dec_post_dot *= 10;
- }
- return neg? -1.0*res:res;
- }
- int skip_col(string line, int amount) {
- int i = 0;
- for (int j = 0; j < amount; j++) {
- while (line[i] >= 45 && line[i] <= 57)
- i++;
- while (!(line[i] >= 45 && line[i] <= 57)) {
- i++;
- }
-
- }
- return i;
- }
- // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
- // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
- // Советы по началу работы
- // 1. В окне обозревателя решений можно добавлять файлы и управлять ими.
- // 2. В окне Team Explorer можно подключиться к системе управления версиями.
- // 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
- // 4. В окне "Список ошибок" можно просматривать ошибки.
- // 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
- // 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
|