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