15 Temmuz 2013 Pazartesi

Girilen Tarihin Hangi Güne Denk Geldiğini Hesaplamak

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