2 Eylül 2014 Salı

C Programlamada Süper Loto (İstatistik Tablolu * şemalı)

#include <stdio.h>
#include <stdlib.h>
#define size 54 //sayıların gidebileceği en son sınır
#define sayilar 6//sayılardan seçilebilecek en son sınır
    void anaMENU(int,int,int dizi[],int oyuncu_tercih[],int oyuncu_puan[]);//fonksiyonlar tanimlaniyor…
    void altmenu(int ,int,int dizi[],int oyuncu_tercih[],int oyuncu_puan[]);//dizi ve  sayılar  belirtiliyor
    void yerDegistirme(int *, int *);//fonksiyona pointer (işaretçi)  gonderiliyor..
    void en_cokyapilan_tercih(int []);//fonksiyon tanımlaması yapılıyor
    int super_loto(int,int,int dizi[],int oyuncu_tercih[],int oyuncu_puan[]);
    int bubble_sort(int []);
    int bubble_sort2(int []);
    int sartli_yazdir(int []);//değeri 1den buyuk olanlar
    int kazanilanodul_sayisi(int []);//ödül sayısını yazdırma
    int diziyi_yaz(int []);//dizinin yazması
    int kac_defa(int [],int []);//kaç defa tekrar ettiği
    int kacTane_bul(int [],int []);//kaç tane var
    int main()
{
    int static dizi[size]={0};//static   sayesinde program açıldığında  dizilere sıfır  atanır
    int static oyuncu_tercih[size]={0};//ve  sadece bir kez yaratılır (bir kez sıfır kullanılır)
    int static oyuncu_puan[4]={0};//odullerin   sayisini (puan için) bulmak amaciyla yazilmis bir dizi
    unsigned besleme=0;//Beslemeye (ihtimallere) başlangıçta sıfır değerini atariz
// bir kez besleme alınır
    int toplam_odul=0;//toplam ödüle 0 atnır
    printf("Beslemeyi giriniz:\n");//kullanıcıdan beslemeyi (bilgisayarın sunduğu ihtimalleri yazdırmak için ) girmesi istenir
    scanf("%u",&besleme);//besleme  değerleri yazdırılır
    srand(besleme);//srand() fonksiyonu, rand() tarafindan uretilecek sayi icin bir başlangic noktasi ayarlar.
    anaMENU(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//deger döndürmeyen fonksiyon cagiriliyor
    return 0;
}
    void anaMENU(int besleme,int toplam_odul,int dizi[],int oyuncu_tercih[],int oyuncu_puan[]){//parametre dondurmeyen fonksiyon
    int menu;
    char cikis;//char değişkenler için kullanılır
    do{

            printf("\n ANA MENU\n");
            printf("1. Super Loto (6/54) Oynama\n");
            printf("2. Istatistikleri Goruntule\n");
            printf("3. Cikis\n");
    do{
            printf("(Toplam puaniniz:%d kazanilan puan)Lutfen Seciminizi giriniz:\n",toplam_odul);
            scanf("%d",&menu);}
    while(menu<1 || menu>3);//Dogru giris yapilincaya kadar beklenir…
    switch(menu){


        case 1: //fonksiyonlara dizi ve sayilar gonderiliyor…
        super_loto(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//fonksiyon cagiriliyor…
        break;
        case 2:
        altmenu(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//fonksiyon cagiriliyor…
        break;
        case 3:
        do{//cevap dogru girilinceye kadar bekleniyor…
        printf("Cikmak istediginize emin misiniz(e/E/h/H)?:");
        fflush(stdin);//stdin dosyasının bufferlarını boşaltmak için kullanılır güvenli veri aktarımını sağlar
        cikis=getchar();//klavyeden karakter okumak için kullanılır
          }

    while (cikis != 'e' && cikis != 'E' && cikis!='h' && cikis!='H');
        }
    }

    while(cikis == 'H' || cikis == 'h');//cikilmak istenmiyorsa basa donuluyor…

}


    int super_loto(int besleme,int toplam_odul,int dizi[],int oyuncu_tercih[],int oyuncu_puan[] ){//oyunun oynandigi fonksiyon
    char devam;
    do{
            //rand() 0-MAX değerleri araından seçtiği sayıları alma işlemi
            int sayi[6]={0};//ve bilgisayar tekrar sayı belirliyor…

            int tahmin[6]={0};//tahminlere sıfır  atanıyor…
            int i,a;//her oyunda tahminlere sıfır  atanıyor
            int dogru_tahmin=0;
            for(i=0;i<=5;i++){
                sayi[i]=1+(rand()%54);//sayilarin 54den buyuk olmasi engelleniyor…
                if(i>0)//sayilarin ayni olmamasi saglaniyor..
                    for(a=0;a<=(i-1);a++){

                        while(sayi[a]==sayi[i]){

                            sayi[i]=1+rand()%54;}
        }
    }
    kacTane_bul(dizi,sayi);//hangi sayinin kac kez ciktigini sayan fonksiyon cagiriliyor..
    printf("Lutfen Alti tane sayi girin\n");
    for(i=0;i<6;i++){//tahminler aliniyor…
    {
        printf("%d.Sayiyi girin:\n",i+1);
        scanf("%d",&tahmin[i]);}
        while(tahmin[i]<1 || tahmin[i]>54){//hata mesaji veriliyor..
            printf("Hatali giris yaptiniz. Lutfen [0-54] araliginda bir deger girin.\n");
            scanf("%d",&tahmin[i]);
            }
        if(i>0)
            for(a=0;a<=(i-1);a++){
                while(tahmin[a]==tahmin[i]){//ayni olup olmadigi kontrol ediliyor…
                    printf("Ayni sayiyi girdiniz.Lutfen farkli sayilar kullanarak tekrar giris yapiniz.\n");
                    scanf("%d",&tahmin[i]);
            }
        }
    }
    for(i=0;i<6;i++){//tahminler ve sayilar karsilastiriliyor…
        for(a=0;a<=5;a++){
            if (sayi[i]==tahmin[a]){
                dogru_tahmin++;
            }
        }
    }
    kacTane_bul(oyuncu_tercih,tahmin);//tahmin edilen sayilarin miktari hesaplanmak uzere fonksiyona gonderiliyor…
    bubble_sort(tahmin);//tahmin ve sayi adli diziler buyukten kucuge siralaniyor
    bubble_sort(sayi);
    printf("\n Bilgisayarin yaptigi tahminler        Sizin Tahminleriniz\n");
    printf("\n-------------------------------        -------------------- \n");
    for(i=0;i<=5;i++){
        printf("%15d %25d\n",sayi[i],tahmin[i]);
    }
    switch(dogru_tahmin){//dogru tahmin sayisina gore odul belirleniyor ve kac kez kazanildigi sayiliyor…

        case 0:case 1: case 2: printf("Dogru tahmin sayiniz:%d  Uzgunum  odul kazanamadiniz.\n",dogru_tahmin);
        break;
        case 3: printf("Dogru tahmin sayisi:3 TEBRİKLER kazandiginiz odul:1 oyuncu_puan\n");
        toplam_odul=toplam_odul+1;
        oyuncu_puan[0]++;
        break;
        case 4: printf("Dogru tahmin sayisi:4 TEBRİKLER kazandiginiz odul:3 oyuncu_puan\n");
        toplam_odul=toplam_odul+3;
        oyuncu_puan[1]++;
        break;
        case 5: printf("Dogru tahmin sayisi:5 TEBRİKLER kazandiginiz odul:10 oyuncu_puan\n");
        toplam_odul=toplam_odul+10;
        oyuncu_puan[2]++;
        break;
        case 6: printf("Dogru tahmin sayisi:6 TEBRİKLER kazandiginiz odul:50 oyuncu_puan\n");
        toplam_odul=toplam_odul+50;
        oyuncu_puan[3]++;
        break;
    }
    printf("Toplam odulunuz:%d puandir\n",toplam_odul);
    devam=' ';//asagidaki dongu, do-while ile yapilirsa buna gerek yok
    while (devam!='e' && devam!='E' && devam!='h' && devam!='H')//bir kez daha oynamak isteyip istemediği soruluyor
    {
        printf("Bir kez daha oynamak ister misiniz(e/E/h/H)?\n");
        fflush(stdin);
        devam=getchar();
        }
    if(devam=='h'||devam=='H')
    anaMENU(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//cevap hayir ise menu  fonksiyonu  cagiriliyor…
    }

    while (devam=='e' || devam=='E');
    return 0;
}
    void altmenu(int besleme,int toplam_odul,int dizi[],int oyuncu_tercih[],int oyuncu_puan[]){//menu fonksiyonu…
        int secim=0;
        printf(" \n Istatistik Alt Menusu\n");//menu yazdiriliyor..
        printf("1. cekilişte cikan sayilarin, kac kez ciktiklarinin listelenmesi\n");
        printf("2. Cekiliste en az 1 kez cikan sayilarin, kac kez ciktiklarina gore sirali olarak listelenmesi\n");
        printf("3. Oyuncunun hangi odulleri kac kez kazandiginin listelenmesi\n");
        printf("4. Oyuncunun en cok tercih ettigi 3 sayinin listelenmesi\n");
        printf("5. ANA MENU\n");
        printf("Lutfen Seciminizi giriniz:\n");
        scanf("%d",&secim);
        while(secim<1 || secim>5)//secim kontrol ediliyor ve hata mesaji veriliyor…
        {
            printf("Hatali veri girisi!LUTFEN [1-5] araliginda bir sayi giriniz\n");
            scanf("%d",&secim);}
            switch(secim){
            case 1://sayilar ve kac kez ciktiklarini yazdirmak icin gerekli fonklar cagiriliyor…
            printf("\nSayi     Kac Kez      Cubuk Grafik\n");
            printf("\n----     --------     -------------  \n");
            diziyi_yaz(dizi);//dizi yazdiriliyor…
            altmenu(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//alt menuye donuluyor…
            break;
            case 2:
            printf("\nSayi   Cubuk Grafigi\n");
            printf("\n----   ------------ \n");
            bubble_sort2(dizi);//dizi siralaniyor…
            sartli_yazdir(dizi);//degeri 1′den buyuk olanlar yazdiriliyor
            altmenu(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//islem bitince alt menu cagiriliyor…
            break;
            case 3:
            odul_sayisi(oyuncu_puan);//odul sayisini yazdiran fonk cagiriliyor…
            altmenu(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//tekrar alt menuye donuluyor…
            break;
            case 4:
            en_cokyapilan_tercih(oyuncu_tercih);//gereken fonk cagiriliyor…
            altmenu(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//alt menuye donus;
            break;
            case 5:
            anaMENU(besleme,toplam_odul,dizi,oyuncu_tercih,oyuncu_puan);//ana menu cagiriliyor…
            break;
        }
    }
    int diziyi_yaz(int dizi[]){//gonderilen dizi yazdiriliyor…
        int i=0;
        int sirasi,j;
        sirasi=0;
        for(i=0;i<54;i++){
        printf("%5d%10d              " ,(i+1),dizi[i]);
        for(j=0;j<dizi[i];j++){
            printf("*");
            }
        printf("\n");
        sirasi++;
        if(sirasi==20 || sirasi==43 || sirasi==54){//satir sayisi belirleniyor…
            printf("sayilarin devam etmesi icin herhangi bir tusa basin\n");
            getche();
        }//gecis saglaniyor…
    }
    return 0;
}
    int sartli_yazdir(int dizi[]){//gonderilen dizide 1′den buyuk degerlere sahip olanlar yazdiriliyor…
        int i=0;
        int sirasi,j,max[54];
        kac_defa(dizi,max);
        sirasi=0;
        for(i=0;i<54;i++){
            if(dizi[i]>=1){
                printf("%5d10d         ",max[i],dizi[i]);
                for(j=0;j<dizi[i];j++){
                    printf("*");
            }
        printf("\n");
        sirasi++;
        if(sirasi==20 || sirasi==43 || sirasi==54){//satir sayisina gore gore sayfa atlaniyor…
            printf("sayilarin devam etmesi icin herhangi bir tusa basin\n");
            getche();
            }
        }
    }
    return 0;
    }
    int kacTane_bul(int dizi[],int sayi[]){//sayi mikltarini bulan fonk..
    int a,i;
    for(i=0;i<sayilar;i++){
        a=sayi[i];//sayi dizisindeki elmenin kac kez yazildigi sayiliyor…
        dizi[a-1]++;
            }
        return 0;
    }
    void yerDegistirme(int *sayi1, int *sayi2){//iki pointer  in yer degistirmesi amaciyla yazilmstir…
        int gecici=0;
        gecici=*sayi1;
        *sayi1=*sayi2;
        *sayi2=gecici;
        }
    int bubble_sort(int dizi[]){
        int yer_degisti,i;//kabarcik siralama islemini erken bitirmek icin kullanilacak
            do{

                    yer_degisti=0;
                    for(i=0;i<(sayilar-1);i++){
                        if(dizi[i]>dizi[i+1]){
                            yerDegistirme(&dizi[i],&dizi[i+1]);//yer degitir fonk nu gerekli pointer ler gonderilerekcagiriliyor…
                            yer_degisti=1;
                    }// en az bir kez yer degistirme islemi yapildi…
                }
            }

            while(yer_degisti==1);
            return 0;
        }
    int bubble_sort2(int dizi[]){//hem degerler hem de karakterler yer degistiriyor…
            int gecici,sayi1,sayi2;
            int yer_degisti,i;
            int gecici_sayi=0;
            do{
                   yer_degisti=0;
                   for(i=0;i<4;i++){
                        if(dizi[i]<dizi[i+1]) {
                            gecici_sayi=dizi[i];//Isaretlenme sayisi yer degistiriliyor
                            dizi[i]=dizi[i+1];
                            dizi[i+1]=gecici_sayi;
                            sayi1=i;
                            sayi2=(i+1);
                            gecici=sayi1;//Karakter yer degistiriliyor
                            sayi1=sayi2;
                            sayi2=gecici;
                            yer_degisti=1;//En az 1 kez yer degistirme islemi yapildi
                        }
                    }
                }
            while(yer_degisti==1);
            return 0;
            }
        int odul_sayisi(int oyuncu_puan[]){//oduller ve kac kez kazanildiklari yazdiriliyor…
            printf("\nDogru Tahmin Sayisi   Kazandigi Odul Sayisi   Kazandigi Odul Puani\n");
            printf("\n-------------------   ---------------------   ---------------------  \n");
            printf("%10d%22d%34d\n",3,oyuncu_puan[0],oyuncu_puan[0]);
            printf("%10d%22d%34d\n",4,oyuncu_puan[1],(3*oyuncu_puan[1]));
            printf("%10d%22d%34d\n",5,oyuncu_puan[2],(10*oyuncu_puan[2]));
            printf("%10d%22d%34d\n",6,oyuncu_puan[3],(50*oyuncu_puan[3]));
            return 0;
            }
        void en_cokyapilan_tercih(int dizi[]){//tahminlerde en cok tercih edilen 3 deger bulunuyor…
            int a,max[54];
            printf("\nSayinin Oynanma Sayisi\n");
            printf("\n----------------------\n");
            kac_defa(dizi,max);
            for(a=0;a<3;a++){//isaretlenme sayisina gore miktar olarak ilk uctekiler yazdiriliyor…
                printf("%5d%20d\n",max[a],dizi[a]);
            }
        }
        int kac_defa(int dizi[],int max[]){//kac kez cıkma sayisina gore siralama…
            int i;
            int gecici_sayi,yer_degisti;
            int gecici_char;
            for(i=0;i<54;i++){
                max[i]=(i+1);
            }//karakterler diziye aktariliyor…
        do{
            yer_degisti=0;
            for(i=0;i<54;i++){
                if(dizi[i]<dizi[i+1]) {
                    gecici_sayi=dizi[i];//Isaretlenme sayisi yer degistiriliyor
                    dizi[i]=dizi[i+1];
                    dizi[i+1]=gecici_sayi;
                    gecici_char=max[i];//karakter adi yer degistiriliyor
                    max[i]=max[i+1];
                    max[i+1]=gecici_char;
                    yer_degisti=1;//En az 1 kez yer degistirme islemi yapildi
                }
            }
        }
    while(yer_degisti==1);
    return 0;
}

Hiç yorum yok:

Yorum Gönder