Aylık Satış Raporu Hazırlama

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


[rawr]

#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("https://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;
}

[/rawr]
Kaynak kodunu incelemek ve fikir sahibi olmak amacıyla kullanabilirsiniz. Ama doğrudan kopyala yapıştır yapmak veya kendinize mal etmek yasak. Kopya çekmeyelim. =)

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.)

👋 🚨 Yeni yazılardan haberdar olmak ister misiniz? 👇