#include #include /* Program genelinde fonksiyonlar -1 HAYIR, 0 EVET degerini dondurur. */ int yil_gecerli_mi(int yil) { if(yil<1) return -1; /* Milattan önce desteğimiz bulunmamaktadir. */ return 0; } int ay_gecerli_mi(int ay) { if (ay>12 || ay<1) return -1; return 0; } int gun_gecerli_mi(int gun, int ay, int yil) { int gunsayisi=31; if (gun<1 || gun>aydaki_gun(ay,yil)) return -1; return 0; } int yil_artik_mi(int yil) { /* Bir yılın 4'e bölümünden kalan 0 ise o yıl artıktır. */ /* Ancak o yıl 100'e bölünüyorsa artık değildir. Ama 400'e de bölünüyorsa artıktır. */ if ((yil % 4 == 0 && yil % 100 != 0) || (yil % 400 == 0)) return 0; return -1; } int fark_hesapla(int ilkgun, int ilkay, int ilkyil, int songun, int sonay, int sonyil) { int i; int ilk_kacinci_gun=0; int son_kacinci_gun=0; for (i=1;iilkyil) return 0; // Sorun yok, devam edelim :) if (ilkyil>sonyil) return -1; // Eleman normalde geçmiş olması gereken tarihe gelecek tarihi yazmış. // E fonksiyon hala işliyorsa o zaman demek ki yıllar aynı. // O zaman ne yapıyoruz? Aylara bakıyoruuuuuuuzzz!! if (sonay>ilkay) return 0; if (ilkay>sonay) return -1; //Gıcıklık. // Hala mı devam... O zaman artık günlere bakalım. if (songun>ilkgun) return 0; if (ilkgun>songun) return -1; // Ama aynı gün de yazılmaz ki! Ne yapıyoruz, o zaman da -2 gönderiyoruz ki bir çözüm bulsunlar. return -2; } void gun_sonrasi(int gun, int ay, int yil, int eklenecek) { gun = gun + eklenecek; while (gun>aydaki_gun(ay,yil)) { gun = gun - aydaki_gun(ay,yil); ++ay; if (ay>12) { ay=1; ++yil; } } printf("\nTarih %d.%d.%d olacaktir.\n",gun,ay,yil); } void gun_oncesi(int gun, int ay, int yil, int cikarilacak) { gun = gun - cikarilacak; while (gun<1) { --ay; if (ay<1) { ay=12; --yil; if (yil<1) { /* Milattan once destegi vermiyorum */ printf("Uzgunuz ama su an icin milattan oncesi icin destegimiz bulunmamaktadir.\n"); return; } } gun = gun + aydaki_gun(ay,yil); } printf("\nTarih %d.%d.%d olacaktir.\n",gun,ay,yil); } void beklet() { printf("\nDevam etmek icin bir tusa basin."); getche(); } int main() { /* Bugünün değişkenleri */ int yil=-1; int ay; int gun; /* Menü değişkenleri */ int sag_serbest=-1; char secenek=0; /* Diğer alınan tarih verileri değişkenleri */ int ilkyil=-1, ilkay=-1, ilkgun=-1; int sonyil=-1, sonay=-1, songun=-1; int once_sonra=-1; printf("Umut BENZER\n"); printf("05-06-7670\n"); printf("Ege Universitesi Bilgisayar Muhendisligi 1. Sinif\n"); printf("http://www.ubenzer.com\n"); printf("Tarih Hesaplama Yazilimi 1.2\n\n"); printf("Baslamadan once sizden bugunun tarihini isteyecegim.\n"); while (yil_gecerli_mi(yil) == -1) /* Niye bu tarih_gecerli mi degil de boyle uc tane fonksiyon?? */ { printf("Yil: "); scanf("%d",&yil); /* Cunku odevde denildi ki, tarih gecersizse devamini isteme. */ } while (ay_gecerli_mi(ay) == -1) { printf("Ay: "); scanf("%d",&ay); } while (gun_gecerli_mi(gun,ay,yil) == -1) { printf("Gun: "); scanf("%d",&gun); } while (sag_serbest==-1) { system ("cls"); printf("*** Menu *** (Bugun: %d.%d.%d)\n\n",gun,ay,yil); printf("1. Verilen iki tarih arasinda kac gun fark oldugunun bulunmasi \n"); printf("2. Verilen bir tarihten bugune kadar gecen gun sayisinin bulunmasi \n"); printf("3. Verilen bir yil icerisinde verilen iki tarih arasinda gecen gun sayisinin bulunmasi \n"); printf("4. Verilen bir tarihten verilen gun sayisi kadar sonraki tarihin bulunmasi \n"); printf("5. Bugunden verilen gun sayisi kadar onceki tarihin bulunmasi \n"); printf("6. Bugunden verilen gun sayisi kadar sonraki tarihin bulunmasi \n"); printf("7. Cikis \n\n"); printf("Lutfen istediginiz islemin numarasini giriniz. "); secenek=getche(); system ("cls"); switch(secenek) /* char fonksiyonu girilen karakterin ASCII kodunu verir. */ { /* Onun icin secenek degiskenini switche sayi olarak sokabiliyorum.*/ case 49: /* ve case'lere de ASCII kodlarini yerlestiriyorum. :) */ ilkyil=-1; ilkay=-1; ilkgun=-1; /* Önce sıfırlayalım */ sonyil=-1; sonay=-1; songun=-1; printf("1. Verilen iki tarih arasinda kac gun fark oldugunun bulunmasi \n"); while (yil_gecerli_mi(ilkyil) == -1) { printf("Ilk tarihin yilini giriniz: "); scanf("%d",&ilkyil); } while (ay_gecerli_mi(ilkay) == -1) { printf("Ilk tarihin ayini giriniz: "); scanf("%d",&ilkay); } while (gun_gecerli_mi(ilkgun,ilkay,ilkyil) == -1) { printf("Ilk tarihin gununu giriniz: "); scanf("%d",&ilkgun); } while (yil_gecerli_mi(sonyil) == -1) { printf("Son tarihin yilini giriniz: "); scanf("%d",&sonyil); } while (ay_gecerli_mi(sonay) == -1) { printf("Son tarihin ayini giriniz: "); scanf("%d",&sonay); } while (gun_gecerli_mi(songun,sonay,sonyil) == -1) { printf("Son tarihin gununu giriniz: "); scanf("%d",&songun); } switch (hangisi_buyuk(ilkgun,ilkay,ilkyil,songun,sonay,sonyil)) { case -1: // Kullanıcı tarih sırasını ters girmiş. Ama biz hata mesajı vermiyor, bu hatayı düzelterek kullanıcıya yardımcı oluyoruz. (Yardımsever program) printf ("\nUYARI: Son tarih, ilk tarihten daha once.\n"); printf("\nArada %d gun var.",fark_hesapla(songun, sonay, sonyil, ilkgun, ilkay, ilkyil)); break; case 0: // Sorun yok printf("\nArada %d gun var.",fark_hesapla(ilkgun, ilkay, ilkyil, songun, sonay, sonyil)); break; case -2: // Haydaaaaaaaa printf ("\nGirdiginiz tarih degerleri ayni. Demek ki gun gecmemis. :)\n"); } beklet(); break; case 50: ilkyil=-1; ilkay=-1; /* Önce sıfırlayalım */ ilkgun=-1; printf("2. Verilen bir tarihten bugune kadar gecen gun sayisinin bulunmasi \n"); while (yil_gecerli_mi(ilkyil) == -1) { printf("Yil: "); scanf("%d",&ilkyil); } while (ay_gecerli_mi(ilkay) == -1) { printf("Ay: "); scanf("%d",&ilkay); } while (gun_gecerli_mi(ilkgun,ilkay,ilkyil) == -1) { printf("Gun: "); scanf("%d",&ilkgun); } switch (hangisi_buyuk(ilkgun,ilkay,ilkyil,gun,ay,yil)) { case -1: // Kullanıcı günümüzden daha ileriki bir tarihi girmiş. Olsun varsın, onu da söyleriz biz. (Yardımsever program) printf("\n Girdiginiz tarih %d gun SONRASININ tarihi.\n",fark_hesapla(gun, ay, yil, ilkgun, ilkay, ilkyil)); break; case 0: // Sorun yok printf("\nGirdiniz tarihten bu zamana kadar %d gun gecmis.",fark_hesapla(ilkgun, ilkay, ilkyil, gun, ay, yil)); break; case -2: // Haydaaaaaaaa printf ("\nBu gunun tarihini girdiginizin farkinda misiniz? Uykulusunuz? :))\n"); } beklet(); break; case 51: ilkyil=-1; ilkay=-1; ilkgun=-1; /* Önce sıfırlayalım */ sonay=-1; songun=-1; printf("3. Verilen bir yil icerisinde verilen iki tarih arasinda gecen gun sayisinin bulunmasi \n"); while (yil_gecerli_mi(ilkyil) == -1) { printf("Olay hangi yil icinde gelisecek? "); scanf("%d",&ilkyil); } while (ay_gecerli_mi(ilkay) == -1) { printf("Ilk tarihin ayini giriniz: "); scanf("%d",&ilkay); } while (gun_gecerli_mi(ilkgun,ilkay,ilkyil) == -1) { printf("Ilk tarihin gununu giriniz: "); scanf("%d",&ilkgun); } while (ay_gecerli_mi(sonay) == -1) { printf("Son tarihin ayini giriniz: "); scanf("%d",&sonay); } while (gun_gecerli_mi(songun,sonay,ilkyil) == -1) { printf("Son tarihin gununu giriniz: "); scanf("%d",&songun); } switch (hangisi_buyuk(ilkgun,ilkay,ilkyil,songun,sonay,ilkyil)) { case -1: // Kullanıcı tarih sırasını ters girmiş. Ama biz hata mesajı vermiyor, bu hatayı düzelterek kullanıcıya yardımcı oluyoruz. (Yardımsever program) printf ("\nUYARI: Son tarih, ilk tarihten daha once.\n"); printf("\nArada %d gun var.",fark_hesapla(songun, sonay, ilkyil, ilkgun, ilkay, ilkyil)); break; case 0: // Sorun yok printf("\nArada %d gun var.",fark_hesapla(ilkgun, ilkay, ilkyil, songun, sonay, ilkyil)); break; case -2: // Haydaaaaaaaa printf ("\nGirdiginiz tarih degerleri ayni. Demek ki gun gecmemis. :)\n"); } beklet(); break; case 52: ilkyil=-1; ilkay=-1; /* Önce sıfırlayalım */ ilkgun=-1; once_sonra=-1; printf("4. Verilen bir tarihten verilen gun sayisi kadar sonraki tarihin bulunmasi \n"); while (yil_gecerli_mi(ilkyil) == -1) { printf("Yil: "); scanf("%d",&ilkyil); } while (ay_gecerli_mi(ilkay) == -1) { printf("Ay: "); scanf("%d",&ilkay); } while (gun_gecerli_mi(ilkgun,ilkay,ilkyil) == -1) { printf("Gun: "); scanf("%d",&ilkgun); } while (gun_gecerli_mi(ilkgun,ilkay,ilkyil) == -1) { printf("Gun: "); scanf("%d",&ilkgun); } while (once_sonra < 0) { printf("Kac gun sonrasini hesaplamami istersiniz? "); scanf("%d",&once_sonra); } gun_sonrasi(ilkgun,ilkay,ilkyil,once_sonra); beklet(); break; case 53: printf("5. Bugunden verilen gun sayisi kadar onceki tarihin bulunmasi \n"); once_sonra=-1; /* Önce sıfırlayalım */ while (once_sonra < 0) { printf("Bugunden kac gun oncesini hesaplamami isterdiniz? "); scanf("%d",&once_sonra); } gun_oncesi(gun,ay,yil,once_sonra); beklet(); break; case 54: printf("6. Bugunden verilen gun sayisi kadar sonraki tarihin bulunmasi \n"); once_sonra=-1; /* Önce sıfırlayalım */ while (once_sonra < 0) { printf("Bugunden kac gun sonrasini hesaplamami isterdiniz? "); scanf("%d",&once_sonra); } gun_sonrasi(gun,ay,yil,once_sonra); beklet(); break; case 65: printf("Supriz Yumurta | Easter Egg\n"); printf("I would love to change the world, but they won't give me the source code.\n"); printf("http://en.wikiquote.org/wiki/Computers#Programming (Anonim)\n\n\n"); printf("Tebrikler, bu programin gizli ozelligini buldunuz. :)\n Devam etmek icin bir tusa basin.\n"); getche(); break; case 55: do { printf ("\nCikmak istediginizden emin misiniz? (E-H)"); secenek = getche(); if (secenek == 'E' || secenek == 'e') { sag_serbest = 0; secenek = 'H'; } } while (secenek != 'H' && secenek != 'h'); break; default: printf("Lutfen 1'den 7'ye kadar bir secim yapin.",secenek); beklet(); break; } } printf("\n\nProgram sonlandi. :)"); return 0; }