C’de Artık Yıl ve Ayın Kaç Gün Olduğunu Bulma

31 gün olan aylar

1., 3., 5., 7., 8., 10., 12. aylardır. Yani: Ocak, Mart, Mayıs, Temmuz, Ağustos, Ekim, Aralık

30 gün olan aylar

4., 6., 9., 11. aylardır. Yani: Nisan, Haziran, Eylül, Kasım

28 veya 29 gün olan ay

Şubat ayıdır. Artık yıllarda 29, diğer yıllarda 28 gündür.

Artık yıl nedir?

Genel bir kural olarak artık yıllar 4 rakamının katı olan yıllardır:
1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020 gibi.

Ancak bu kuralın iki istisnası vardır:

  1. 100’ün katı olan yıllardan sadece 400’e kalansız olarak bölünebilenler artık yıldır:
    Örneğin 1200, 1600, 2000 yılları artık yıldır ancak 1700, 1800 ve 1900 artık yıl değildir.
    Sadece 400’e tam olarak bölünebilenlerin artık yıl kabul edilmesinin nedeni, bir astronomik yılın 365,25 gün değil, yaklaşık olarak 365,242 gün olmasından kaynaklanan hatayı gidermektir.
  2. Hesabı daha da hassas hâle getirmek için -400’e kalansız bölünebildiği halde- 4000’e kalansız olarak bölünebilen yıllar artık yıl kabul edilmez:
    Örneğin 4000, 8000, 12000, 16000, 24000, 32000 ve 48000 yılları 400’e tam bölünebildiği halde artık yıl kabul edilmeyecektir.

(Wikipedia)

C Kodu

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

 int main()
{
	int ay, yil;
	int gunsayisi;
	printf("Yil giriniz:");
	scanf("%d",&yil);
	printf("Ay giriniz:");
	scanf("%d",&ay);
	switch(ay)
	{
		case 1: case 3: case 5: case 7:
		case 8: case 10: case 12:
			gunsayisi=31;
			break;
		case 4: case 6: case 9: case 11:
			gunsayisi=30;
			break;
		case 2:
			if (yil%4==0&&yil%100!=0||yil%400==0&&yil%4000!=0)
				gunsayisi=29;
			else
				gunsayisi=28;
			break;
		default: gunsayisi=0;
	}
	printf("Gun sayisi: %d",gunsayisi);
	getch();
	return 0;
}

Tags: , , , , ,

No comments yet.

Leave a Reply

*