// moon.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы. // #include #include #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-файл.