tarih proğramdaki mantık

Bu konuyu okuyanlar

esma650266

Öğrenci
Katılım
26 Mart 2017
Mesajlar
2
Reaksiyon puanı
1
Puanları
3
Yaş
26
C proğramlamda tarihi kullanıcıdan alan ve günü gösteren proğramın kodu aşagıdaki gibidir. Kırmızı renkle gösterilen kısımların mantığını açıklar mısınız?:)

#include<stdio.h>
#include<conio.h>
#include<math.h>

int fm(int date, int month, int year) {
int fmonth, leap;

//leap function 1 for leap & 0 for non-leap
if ((year % 100 == 0) && (year % 400 != 0))
leap = 0;
else if (year % 4 == 0)
leap = 1;
else
leap = 0;

fmonth = 3 + (2 - leap) * ((month + 2) / (2 * month))
+ (5 * month + month / 9) / 2;

//bring it in range of 0 to 6
fmonth = fmonth % 7;

return fmonth;
}

//----------------------------------------------
int day_of_week(int date, int month, int year) {

int dayOfWeek;
int YY = year % 100;
int century = year / 100;

printf("\nDate: %d/%d/%d \n", date, month, year);

dayOfWeek = 1.25 * YY + fm(date, month, year) + date - 2 * (century % 4);

//remainder on division by 7
dayOfWeek = dayOfWeek % 7;


switch (dayOfWeek) {
case 0:
printf("weekday = Saturday");
break;
case 1:
printf("weekday = Sunday");
break;
case 2:
printf("weekday = Monday");
break;
case 3:
printf("weekday = Tuesday");
break;
case 4:
printf("weekday = Wednesday");
break;
case 5:
printf("weekday = Thursday");
break;
case 6:
printf("weekday = Friday");
break;
default:
printf("Incorrect data");
}
return 0;
}
//------------------------------------------
int main() {
int date, month, year;

printf("\nEnter the year ");
scanf("%d", &year);

printf("\nEnter the month ");
scanf("%d", &month);

printf("\nEnter the date ");
scanf("%d", &date);

day_of_week(date, month, year);

return 0;
}
 

isyankar42

Profesör
Katılım
8 Kasım 2015
Mesajlar
2,755
Reaksiyon puanı
806
Puanları
113
Altli ustlu bir tarih niye bu kadar zor:(
 

arsenik

Rektör
Katılım
8 Ağustos 2009
Mesajlar
11,365
Reaksiyon puanı
242
Puanları
63
Leap artık yıl kavramı için kullanılmış. 2000 - 2004 -2008 - 2012 - 2016... 29 şubat barındırdığı için artık yıl olarak geçer.

Ama 1900 ve 1800 yıllarında 2000 yılındaki gibi artık yıl yoktur. Yani 1900, 1800, 1700'de artık yıl yoktur.

1600 yılında 29 şubat tarihi vardır yani artık yıldır ve 400'e bölümünden kalan 0 olduğu için leap değişkeni 1 olur ve yıl artık yıl kabul edilir.

Detay: Artık yıl - Vikipedi

1. 100'ün katı olan yıllardan sadece 400'e kalansız olarak bölünebilenler artık yıldır:
 

esma650266

Öğrenci
Katılım
26 Mart 2017
Mesajlar
2
Reaksiyon puanı
1
Puanları
3
Yaş
26
Leap artık yıl kavramı için kullanılmış. 2000 - 2004 -2008 - 2012 - 2016... 29 şubat barındırdığı için artık yıl olarak geçer.

Ama 1900 ve 1800 yıllarında 2000 yılındaki gibi artık yıl yoktur. Yani 1900, 1800, 1700'de artık yıl yoktur.

1600 yılında 29 şubat tarihi vardır yani artık yıldır ve 400'e bölümünden kalan 0 olduğu için leap değişkeni 1 olur ve yıl artık yıl kabul edilir.

Detay: Artık yıl - Vikipedi

1. 100'ün katı olan yıllardan sadece 400'e kalansız olarak bölünebilenler artık yıldır:
2004 - 2008 gibi sayılar - 100 ün katı değil ve 400 e kalansız olarak bölünmediği için- 2000 sayısı 100'ün katı ve 400'e kalansız olarak bölündüğü için sonraki 4 yıl giderek mi artık yıl oluyor?
 

arsenik

Rektör
Katılım
8 Ağustos 2009
Mesajlar
11,365
Reaksiyon puanı
242
Puanları
63
2004 - 2008 gibi sayılar - 100 ün katı değil ve 400 e kalansız olarak bölünmediği için- 2000 sayısı 100'ün katı ve 400'e kalansız olarak bölündüğü için sonraki 4 yıl giderek mi artık yıl oluyor?
Hayır.

4 yılda 1 artık gün olur bu günler 2004 - 2008 diye 2016 ya kadar geliyor. Ama 100 e bölünebilen yıllarda durum farklı. 2000 400'e tam bölünebildiği için artık yıl ama 1900 1800 öyle değil. 1600 de 400'e tam bölündüğü için artık yıl.
 
Üst