#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