Sponsorlu Bağlantılar
#include<stdio.h>
#include<stdlib.h>
char * gunuhesapla(int,int,int);
bool tarihidogrula(int,int,int);
int main()
{
int gun,ay,yil;
printf("Gununu bulmak isteginiz tarihi giriniz(Ornegin:31/03/2012)\n");
scanf("%d%*c%d%*c%d",&gun,&ay,&yil);//%*c ler sayıların arasına yazılabilecek karakterin ihmal edilmesini sağlıyor
if(tarihidogrula(gun,ay,yil))
printf("\nGirdiginiz tarihin gunu:%s\n\n",gunuhesapla(gun,ay,yil));
system("pause");
return 0;
}
char * gunuhesapla(int gun,int ay,int yil)
{
int artikgun1,artikgun2,artikolmayangun,toplam;
int i,gunler;
//7. gün Cumartesi 1. gün Pazar olarak alınıyor.(7=0 mod 7)
char *haftaningunleri[]={"Cumartesi","Pazar","Pazartesi","Sali","Carsamba","Persembe","Cuma"};
int aylardakigunler[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//tarihin yılından önce geçmiş artık yıllar yıl-1 yıl içinde aranıyor.
//tarihin yılı artık yıl ise bunun hesabı if ve for kodu içinde yapılıyor.
artikgun1=(yil-1)/4;//4 e bölünebilen yıllarda bir gün artıyor(yıl 366 çekiyor)
artikolmayangun=(yil-1)/100;//100 e bölünebilen yıllar 365 çekiyor(400 e bölünmeyen)
artikgun2=(yil-1)/400;//400 bölünebilen yıllarda bir gün artıyor(yıl 366 çekiyor)
//her yıl mod 7 e göre 1 getirdiği için yil ile topluyoruz[365=1 (mod7)]
toplam=yil+artikgun1-artikolmayangun+artikgun2;
/*4 e bölünebilen yıllar içinde 100 e ve 400 e bölünebilen yıllar olduğu için
100 e bölünebilen yıllar sonradan çıkartıyoruz.*/
if((yil%4==0&&yil%100!=0)||yil%400==0)// artık yıl mı?
aylardakigunler[2]=29;//artık yıl ise şubat ı 29 yap
/*tarih ifadesinde geçen yıla ait günleri say.Örneğin tarih 01/03/2012 ise 2012 den önceki yılların mod 7 e göre
getireceği fazla günler yukarıdaki hesaplamalarda bulundu.Şimdi geriye kalan 2 ay bir günde fazlalık günlere
eklenerek mod 7 deki değeri alınıyor.(önce tam aylardan gelen günler sonra en son aydaki gün değeri ekleniyor)*/
for(i=1;i<ay;i++)
for(gunler=1;gunler<aylardakigunler[i]+1;gunler++)
toplam++;
toplam+=gun;
toplam=toplam%7;
return haftaningunleri[toplam];
}
bool tarihidogrula(int gun,int ay,int yil)
{
int aylardakigunler[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((yil%4==0&&yil%100!=0)||yil%400==0)
aylardakigunler[2]=29;
if(gun>aylardakigunler[ay]||ay>12)
{
printf("Yanlis tarih girdiniz\n");
return false;
}
else
return true;
}
Sponsorlu Bağlantılar
Hiç yorum yok:
Yorum Gönder