C dilinden anlayan arkadaşlar bakabilirmisiniz

chm358
30-11-2017, 21:24   |  #1  
chm358 avatarı
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Kas 2017

arkadaşlar c dilinde fonksiyon kullanarak nasıl yazabilirim?


 Bir tombala torbasında 1'den 99'a kadar numaralanmış (99 dahil) pullar bulunmaktadır. Çekilen bir pul aynı oyun içerisinde torbaya geri atılmayacaktır. Kazanma kuralları ise aşağıdaki gibidir:


  1. Torbadan 3 pul çekiliyor. Çekilen pulların toplamı 150'den küçük ise oyuncu kazanıyor.
  2. Torbadan 3 pul çekiliyor. Çekilen pulların toplamı asal sayı ise oyuncu kazanıyor.
  3. Torbadan 3 pul çekiliyor. En büyük değerli pul ile en küçük değerli pul arasındaki fark ortanca değerli puldan büyük ise oyuncu kazanıyor.

Diğer her türlü durumda oyuncu kaybediyor. Kullanıcı oyuna devam için e/E tuşuna bastığı sürece oyun devam edecek olup bir sonraki oyuna geçmeden önce çekilen 3 pul torbaya geri atılacaktır. Bu bilgilere göre oyunu aşağıdaki örnek ekran çıktısına benzer bir şekilde simule eden C programını yazınız.

Not: rand(), srand(time(NULL)) => stdlib.h, time.h

Sistem Bilgilerim
White-Fox
30-11-2017, 22:07   |  #2  
White-Fox avatarı
Yıllanmış Üye
Teşekkür Sayısı: 149
1,042 mesaj
Kayıt Tarihi:Kayıt: Eyl 2010

 

3 ünün toplamına bakıcaksın.

ilk önce 1-99 random sayı üret 3 tane sonra topla sonra koşulları sağlıyormu diye bak.koşullara görede kazandın kaybettin yaz.random if-else kullanacaksın okadar başka bir şey yok.Fonksiyonu istediğin yerde kullanabilirsin istersen sayıları toplayan bir fonk yaz.yada koşulları sorgulayan.

White-Fox bu faydalı yanıtı için aşağıdaki 1 kişiden teşekkür aldı... [ Göster ]
chm358
30-11-2017, 22:53   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Kas 2017

çok teşekkür ederim ödev kız arkadaşımında rica etsem uygulamayı dev c++ da yazıp asmglrhotmail.com adresine gönderebilir misin ? bu ödevden yüksek alması gerekiyormuş yardımcı olursan çok sevinirim.

deipsiaw
04-12-2017, 21:14   |  #4  
Taze Üye
Teşekkür Sayısı: 0
1 mesaj
Kayıt Tarihi:Kayıt: Ara 2017

usta bana da lazım bugun saat 11.30 a kadar müsaitsen yardım eder misin

sessiz12
11-01-2018, 20:21   |  #5  
Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Haz 2014

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>


int isPrime(int number);
int mid(int number1, int number2, int number3);
int min(int number1, int number2, int number3);
int max(int number1, int number2, int number3);
int sumIsPrime(int number1, int number2, int number3);
int isBelow150(int number1, int number2, int number3);
int maxAndMinGapIsBigMid(int number1, int number2, int number3);
int getNumber();
void ucPulCek(int pullar[]);

int main(int argc, char **argv)
{
    char oyun;
    int pullar[3];
    //int kazanmaSebebi = -1;
   
        srand((unsigned) time(0));
   
    printf("*************************************\n");
    printf("Ozellestirilmis bir tombala oyunu\n");
    printf("*************************************\n");
    printf("\nKurallar\n");
    printf("--------------\n");
    printf("\n   Torbadan 3 pul cekiliyor. (1-99)\n\n");
    printf("1. Cekilen pullarin toplami 150'den kucuk ise oyuncu kazaniyor.\n");
    printf("2. Cekilen pullarin toplami asal sayi ise oyuncu kazaniyor.\n");
    printf("3. En buyuk degerli pul ile en kucuk degerli pul arasindaki fark ortanca degerli puldan buyuk ise oyuncu kazaniyor.\n");
    printf("\n   Diger durumlarda oyuncu kaybediyor\n");
    printf("------------------------------------------\n");
   
INOUTGAME:
    printf("\nYeni oyun icin [e/E], cikmak icin [q/Q] : ");
   
    oyun = _getche();
    //0010 0000 - 32
    oyun = oyun | 32; //küçült
   
    if(oyun == 'q') goto GAMEOVER;
    if(oyun != 'e') goto INOUTGAME;
   
    printf("\n");
    ucPulCek(pullar);
   
   
    printf("\n\nCekilen pullar\n");
    printf("------------------\n");
    printf("1. Pul - %d\n", pullar[0]);
    printf("2. Pul - %d\n", pullar[1]);
    printf("3. Pul - %d\n", pullar[2]);
    printf("------------------\n");
   
    //Birinci kural
    if(isBelow150(pullar[0], pullar[1], pullar[2])) goto WIN;
   
    //ikinci kural
    if(sumIsPrime(pullar[0], pullar[1], pullar[2])) goto WIN;
   
    //üçüncü kural
    if(maxAndMinGapIsBigMid(pullar[0], pullar[1], pullar[2])) goto WIN;
   
    printf("Kaybettin\n");
    printf("++++++++++++++++++++++++++++++++++++++++\n");
    printf("++++++++++++++++++++++++++++++++++++++++\n");
    goto INOUTGAME;
   
WIN:
    printf("Kazandin\n");
    printf("++++++++++++++++++++++++++++++++++++++++\n");
    printf("++++++++++++++++++++++++++++++++++++++++\n");
    goto INOUTGAME;


GAMEOVER:
    printf("\nOyun Bitti\n");
    system("pause");
        return 0;
}

void ucPulCek(int pullar[]){
   
    //pulları sıfırla
    for(int i = 0; i < 3; i++) pullar = 0;
   
     printf("\n");
    for(int i = 0; i < 3; i++){
        
        printf("Torbadan %d. pulu cekmek icin herhangi bir tusa bas : ", i + 1);
        _getch();
        
        int pul = getNumber();
        
        while(pullar == pul) pul = getNumber();
        
        pullar = pul;
        printf("%d\n", pul);
    }
}


//tombaladan bir pul çek
int getNumber(){
    return (rand() % 99) + 1;
}

//En büyük değerli pul ile en küçük değerli pul arasındaki fark ortanca değerli puldan büyük ise
int maxAndMinGapIsBigMid(int number1, int number2, int number3){
   
    int maxNumber = max(number1, number2, number3);
    int minNumber = min(number1, number2, number3);
    int midNumber = mid(number1, number2, number3);
    return (maxNumber - minNumber) > midNumber;
}
//çekilen pulların ortancası
int mid(int number1, int number2, int number3){
   
    int lowest = min(number1, number2, number3);

    if(lowest == number1) return number2 < number3 ? number2 : number3;
    else if(lowest == number2) return number1 < number3 ? number1 : number3;
    else return number1 < number2 ? number1 : number2;
   
   
}
//çekilen pulların en küçüğü
int min(int number1, int number2, int number3){
   
    int temp = number1 < number2 ? number1 : number2;
    return temp < number3 ? temp : number3;
}

//çekilen pulların en büyüğü
int max(int number1, int number2, int number3){
   
    int temp = number1 > number2 ? number1 : number2;
    return temp > number3 ? temp : number3;
}

//çekilen pulların toplamı asal mı
int sumIsPrime(int number1, int number2, int number3){
    return isPrime(number1 + number2 + number3);
}

//çekilen pulların toplamı 150'den küçük mü
int isBelow150(int number1, int number2, int number3){
    return (number1 + number2 + number3) < 150;
}

//asal kontrolü
int isPrime(int number){
   
    if(number < 2) return 0;
    if(!(number & 1)) return number == 2;//sayı tek değilse
    if(number % 3 == 0) return number == 3;
    if(number % 5 == 0) return number == 5;
    if(number % 7 == 0) return number == 7;
   
    int kare = (int) sqrt(number);//sayının kareköküne kadar yeterli
    int start = 9;
   
    for(;start < kare; start += 2)
        if(number % start == 0) return 0;
        
    return 1;
}

Buradan kodları alabilirsin.
Düzeltme yapılabilir. Problem hoşuma gitti. Fakat tarifte bir eksik var. Oyuncu kaybettiğinde değil belki ama kazandığında neden kazandığını da bildirmek gerek. En büyük eksik bu oldu bence. Sayfada köşeli parantezlerle ilgili de bir sorun var. Bazı yerlerde görünüyor, bazı yerlerde görünmüyor. O yüzden kodlar şuan hatalı göünüyor. Kaynak dosyadan incele.

Son Düzenleme: sessiz12 ~ 11 Ocak 2018 20:34