Aylık Satış Raporu Hazırlama

İkinici algoritma ödevimiz ve benim çözümüm...

[rawr] ```c #include <stdio.h> #include <stdlib.h>

/* 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;i<ilkay;i++) // Ilk girdide kac gun var? { ilk_kacinci_gun = ilk_kacinci_gun + aydaki_gun(i,ilkyil); } ilk_kacinci_gun = ilk_kacinci_gun + ilkgun;

for(i=1;i<sonay;i++) // Son girdide kac gun var? { son_kacinci_gun = son_kacinci_gun + aydaki_gun(i,sonyil); } son_kacinci_gun = son_kacinci_gun + songun;

if (ilkyil==sonyil) // OOh kebap, ayný yýldan iki güzel gün. { return son_kacinci_gun - ilk_kacinci_gun; } else { // Bir de yillararasi gun farki var 😦 bööööö ilk_kacinci_gun = 365 + yil_artik_mi(ilkyil) + 1 - ilk_kacinci_gun; for (i=ilkyil+1;i<sonyil;i++) { ilk_kacinci_gun = ilk_kacinci_gun + 365 + yil_artik_mi(i) + 1; } return son_kacinci_gun + ilk_kacinci_gun; }

}

int aydaki_gun(int ay, int yil) { switch(ay) { case 2: if (yil_artik_mi(yil) == 0) return 29; else return 28; break; case 4: case 6: case 9: case 11: return 30; } return 31; }

int hangisi_buyuk(int ilkgun, int ilkay, int ilkyil, int songun, int sonay, int sonyil) { // Bu fonksiyonda etkinlik için else yapýsýna gerek yok. Çüknü if=þartý saðlýyorsa then fonskiyon biter. if (sonyil>ilkyil) 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; }


Hepimize bol kaynak kodlu günler. :)

Not: Bu ödev 95 aldı. (5 puan değişken isimlerinin uzun olmasından gitmiş, bence sorun yok, ama naaapalım hocaya göre uzunmuş, sorun yok.)