Первый день года Формула, приводящая к противоречивым результатам - PullRequest
0 голосов
/ 29 сентября 2018

Цель состоит в том, чтобы найти первый день года, а затем рассчитать на основе этого календари и високосные годы.Я сталкиваюсь с проблемой;в то время как классу была дана формула (невозможно использовать массивы или функции), я могу получить правильный результат для большинства заданных лет, кроме случаев, когда дело доходит до вычисления субботы (0 для остатка послемодуль.)

Моя формула не подходит?

Я свяжу страницу, которая разбивает формулу, и, конечно, предоставлю мою.

** Вот страница с формулой: **

MathФорум - Формула на первый день года

Вот моя формула с моим кодом:

 //Calculating Dates:
//N = d + 2m + [3(m+1)/5] + y + [y/4] - [y/100] + [y/400] + 2
//N = 1 + 2(13) + [3(13+1)/5] + year_int + [year_int/4] - [year_int/100] + 
//[year_int/400] + 2
// I'm using a hard-coded "13" to represent January in the place of m
 day_one =
        1 + 2*(13) + 3*(13 + 1)/5 + year_int + (year_int / 4) - (year_int / 100) + (year_int / 400) +
        2;
day_one = day_one % 7;


if (day_one < 0 || day_one >= 7) {
printf("Invalid Day\n");
} else {
switch (day_one) {


    case 1:
        weekday = "Sunday";
        printf("%s", weekday);
        break;
    case 2:
        weekday = "Monday";
        printf("%s", weekday);
        break;
    case 3:
        weekday = "Tuesday";
        printf("%s", weekday);
        break;
    case 4:
        weekday = "Wednesday";
        printf("%s", weekday);
        break;
    case 5:
        weekday = "Thursday";
        printf("%s", weekday);
        break;
    case 6:
        weekday = "Friday";
        printf("%s", weekday);
        break;
    case 0:
        weekday = "Saturday";
        printf("%s", weekday);
        break;
    default: printf("Error");
    break;
}
}

Я действительно ценю любую помощь, я 'м только ищет указаний.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Я надеюсь, что это более понятно.Пожалуйста, смотрите комментарий с !!!внутри функции

/* 
ZELLER'S Algorithm
https://en.wikipedia.org/wiki/Zeller's_congruence
Gregorian calendar
*/
 #include <stdio.h>

 int day_of_week(int d,int m,int y);
 int main(void)
 {
  int day,month,year;
  printf ("Day, Month, Year\n");
  scanf ("%d %d %d",&day,&month,&year); 
  printf("%d",day_of_week(day,month,year)); 
  return 0;
 }

 int day_of_week(int d, int m, int y)
 //This function returns the ISO number of the day for a given day,month,year
 {
  int day;  
  if (d<1 || d>31 || m<1 || m>12 || y<1583 ) return 0; // In that case we have major error!
  if ((m==1) || (m==2)) 
    {m=m+12;--y;} // You have to do this correction !!!!
  day=d+(m+1)*26/10+y+y/4+6*(y/100)+y/400;
  day=day % 7; // 0=Saturday 1=Sunday ...
  day=((day+5) % 7)+1; // Convertion to ISO date: 1=Monday, 2=Tuesday ..
  return (day);
 }
0 голосов
/ 29 сентября 2018

Мне удалось выяснить, что для поиска первого числа года следует хранить целое число прошлого года.Затем я оглянулся на чтение и понял, что оно произнесено простым текстом.

facepalm

Спасибо за проверку, если вы были здесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...