Files
2025-02-Numerical/lib/nr/cpp/recipes/badluk.cpp
2025-09-12 18:55:25 +09:00

54 lines
1.2 KiB
C++

#include <iostream>
#include <iomanip>
#include <cmath>
#include "nr.h"
using namespace std;
int main(void) // Program badluk
{
const int IYBEG=2000,IYEND=2100;
const DP ZON=-5.0;
int ic,icon,idwk,im,iyyy,jd,jday,n;
DP timzon=ZON/24.0,frac;
cout << endl << "Full moons on Friday the 13th from ";
cout << setw(5) << IYBEG << " to " << setw(5) << IYEND << endl;
for (iyyy=IYBEG;iyyy<=IYEND;iyyy++) {
for (im=1;im<=12;im++) {
jday=NR::julday(im,13,iyyy);
idwk=int((jday+1) % 7);
if (idwk == 5) {
n=int(12.37*(iyyy-1900+(im-0.5)/12.0));
icon=0;
for (;;) {
NR::flmoon(n,2,jd,frac);
frac=24.0*(frac+timzon);
if (frac < 0.0) {
--jd;
frac += 24.0;
}
if (frac > 12.0) {
++jd;
frac -= 12.0;
} else
frac += 12.0;
if (jd == jday) {
cout << endl << setw(2) << im;
cout << "/13/" << setw(4) << iyyy << endl;
cout << fixed << setprecision(1);
cout << "Full moon" << setw(6) << frac;
cout << " hrs after midnight (EST)" << endl;
break;
} else {
ic=(jday >= jd ? 1 : -1);
if (ic == (-icon)) break;
icon=ic;
n += ic;
}
}
}
}
}
return 0;
}