/* To compute the solar azimuthal and zenithal angles (in degrees) for a point over the globe defined by its longitude and its latitude (in dec. degrees) for a day of the year (fixed by number of the month and number of the day in the month) at any Greenwich Meridian Time (GMT dec. hour). */ void GeomCond::possol(float tu) { long int ia = 0; long int nojour; /* solar position (zenithal angle asol,azimuthal angle phi0 */ /* in degrees) */ /* jday is the number of the day in the month */ day_number(ia, nojour); pos_fft (nojour, tu); if (asol > 90.f) G_warning(_("The sun is not raised")); }
/* * Routine: mk_datetbl * Purpose: populate the date dimension * Algorithm: * Data Structures: * * Params: * Returns: * Called By: * Calls: * Assumptions: * Side Effects: * TODO: */ int mk_w_date (void * row, ds_key_t index) { int res = 0; /* begin locals declarations */ static date_t base_date; int day_index, nTemp; date_t temp_date, dTemp2; struct W_DATE_TBL *r; static int bInit = 0; tdef *pT = getSimpleTdefsByNumber(DATE); if (row == NULL) r = &g_w_date; else r = row; if (!bInit) { r->d_month_seq = 0; r->d_week_seq = 1; r->d_quarter_seq = 1; r->d_current_month = 0; r->d_current_quarter = 0; r->d_current_week = 0; strtodt(&base_date, "1900-01-01"); /* Make exceptions to the 1-rng-call-per-row rule */ bInit = 1; } nullSet(&pT->kNullBitMap, D_NULLS); nTemp = (long)index + base_date.julian; r->d_date_sk = nTemp; mk_bkey(&r->d_date_id[0], nTemp, D_DATE_ID); jtodt (&temp_date, nTemp); r->d_year = temp_date.year; r->d_dow = set_dow (&temp_date); r->d_moy = temp_date.month; r->d_dom = temp_date.day; /* set the sequence counts; assumes that the date table starts on a year boundary */ r->d_week_seq = ((int)index + 6) / 7; r->d_month_seq = (r->d_year - 1900) * 12 + r->d_moy - 1; r->d_quarter_seq = (r->d_year - 1900) * 4 + r->d_moy / 3 + 1; day_index = day_number (&temp_date); dist_member (&r->d_qoy, "calendar", day_index, 6); /* fiscal year is identical to calendar year */ r->d_fy_year = r->d_year; r->d_fy_quarter_seq = r->d_quarter_seq; r->d_fy_week_seq = r->d_week_seq; r->d_day_name = weekday_names[r->d_dow + 1]; dist_member (&r->d_holiday, "calendar", day_index, 8); if ((r->d_dow == 5) || (r->d_dow == 6)) r->d_weekend = 1; else r->d_weekend = 0; if (day_index == 1) dist_member (&r->d_following_holiday, "calendar", 365 + is_leap (r->d_year - 1), 8); else dist_member (&r->d_following_holiday, "calendar", day_index - 1, 8); date_t_op (&dTemp2, OP_FIRST_DOM, &temp_date, 0); r->d_first_dom = dTemp2.julian; date_t_op (&dTemp2, OP_LAST_DOM, &temp_date, 0); r->d_last_dom = dTemp2.julian; date_t_op (&dTemp2, OP_SAME_LY, &temp_date, 0); r->d_same_day_ly = dTemp2.julian; date_t_op (&dTemp2, OP_SAME_LQ, &temp_date, 0); r->d_same_day_lq = dTemp2.julian; r->d_current_day = (r->d_date_sk == CURRENT_DAY) ? 1 : 0; r->d_current_year = (r->d_year == CURRENT_YEAR) ? 1 : 0; if (r->d_current_year) { r->d_current_month = (r->d_moy == CURRENT_MONTH) ? 1 : 0; r->d_current_quarter = (r->d_qoy == CURRENT_QUARTER) ? 1 : 0; r->d_current_week = (r->d_week_seq == CURRENT_WEEK) ? 1 : 0; } return (res); }
void main () { FILE*in_file; int time; int i,j,k; int year, month, day; int result; int day_number1, day_number2; int start0,start1; int n_calender; in_file=fopen("input.txt","r"); fscanf(in_file,"%d",&time); for(i=0; i<time; i++) { fscanf(in_file,"%d %d",&year,&month); start0=(day_number(year, month)+5)%7; start1= month_number(year,month); n_calender= start1+start0; for(k=0; k<2; k) { if(n_calender%7==0) { break; } else { n_calender=n_calender+1; } } printf("%d %d\n",year,month); for(j=1;j<n_calender+1;j++) { if(j<start0+1) { if(j%7==0) printf("0\n"); else printf("0 "); } else if(j>start1+start0) { if(j%7==0) printf("0\n"); else printf("0 "); } else { if(j%7==0) printf("%d\n",j-start0); else printf("%d ",j-start0); } } } }