folder Tahribat.com Forumları
linefolder C - C++
linefolder C De Adam Asmaca Hakkında Bir Kac Soru.



C De Adam Asmaca Hakkında Bir Kac Soru.

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mywts
    mywts's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    Merhaba arkadaşlar adam asmaca oyununu c de yazmam gerek ancak ben netten araştırdım ve bir program buldum(hazır kod).Ancak bu koddaki bir kaç yeri anlayamadım c programlama da tecrübeli olan arkadaslar yardım ederlerse sevinirim.

    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    int arama (char harf,int rasgele,const char kelime[][11],char deneme[][11],int konum[],int *hak)
    {
    int j;
    int k=0;
    for(j=0; j< 11 ; j++)
    {
    if(kelime[rasgele][j]==harf)
    {
    deneme[0][j]=harf;
    k=1;
    }
    }
    if(k!=1)
    {
    *hak=*hak-1;
    }
    printf("%s ",deneme[0]);
    printf("\n%d hakkın kaldı...\n",*hak);
    return 0;
    }
    int main(){ //main function begins

    char kelime[20][11]={"orman","mert","nihayet","aile","kestirmek ","medrese","değişim","kedi","destan","senato" ,"bilinç","millet","halat","konferans","gelenek","sadece","ırmak","türkçe","zeka","kitap","senaryo"};//declaring char array
    int sans=7;
    int numara;
    int uzunluk;
    char deneme[1][11]={""};
    char harf;
    char cikis;
    int i=0;
    int konum[26];
    printf("Adam asmaca oyununa hoş geldin\n");
    printf("Oyunda 7 hakkın var!\n");
    printf("Eğer harfi bilirsen o hakkı tekrar kullanabilirsin!\n");
    //Alttaki 3 satırın mantığı nedir?
    printf("Numara girin :");
    scanf("%d",&numara);
    uzunluk=(rand()+numara)%12;

    while(i<strlen(kelime[uzunluk])){ // loop
    deneme[0][i]='*'; //changes the word with *
    i++;
    }

    printf("Kelime %d harften oluşuyor. %s \n",i,deneme);

    do{ //loop for change

    printf("\nBir harf giriniz.: ");
    scanf(" %c",&harf); //takes a letter from user

    arama(harf,uzunluk,kelime,deneme,konum,&sans); //function call

    if (strstr(deneme[0],kelime[uzunluk])!=NULL)
    {

    printf("Tebrikler kazandınız.\n");
    printf("Kelime:%s\n",kelime[uzunluk]);
    return 0;
    }

    if (sans==0){ //checks the condition
    printf("Kelimeyi bilemedin...\n");
    printf("Kelime ... %s\n",kelime[uzunluk]);

    }

    }while(sans>0);

    scanf("%c",&cikis);

    return 0;
    }
     Program normalde ingilizceydi ben kendime göre değişken isimlerini türkce olarak yazdım.Sormak istediğim aşağıdaki satırların programda ne işe yaradığı?

    printf("Numara girin :");
    scanf("%d",&numara);
    uzunluk=(rand()+numara)%12;

    Burada kullanıcıdan integer bir değer isteniyor bunun nedeni nedir?

    Bide  int konum[26]; (status'du orjinalinde) şeklinde tanımlanan bu dizi ne işe yarıyor?Kullanım amacı nedir?

    Yardımlarınız için şimdiden teşekkürler.İyi aksamlar... 



     

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    int konum[26]; tanımlaması var, arama fonksiyonunun parametrelerinden biri aynı zamanda konum. Ama fonksiyonun içinde kullanmamışsın. Yani hiçbir işe yaramıyor gibi görünüyor ilk bakışta..


    Sen hiç kaval çaldın mı?
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mywts
    mywts's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    evet hocam hic bir ise yaramıyormus sağol.Zaten dediğim gibi kodu ben yazmadım acaba bir ise yarıyormu diye düsünmüstüm size sormak istedim bir de.Peki o verdiğim satırların ne işe yaradığı hakkında fikrin varmı?

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    ... Kod saçmaladı burada nedense

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Program çok kötü yazılmış, bence sıfırdan yazsan daha iyi ederdin, yine de düzeltebildiğim kadar düzelttim.

    Dediğin satır şu işe yarıyor. Normalde rand() fonksiyonu rastgele sayı üretir ancak program her çalıştığında ayni rastgele sayiyi üretir.

    Program da senden bir sayi isteyip rand() ile topluyor ve senin girdiğin sayi ile rastgelelik sağlamaya çalışıyor. Halbuki bu işin çözümü srand fonskiyonudur.

    O satırları sildim ve srand(time(NULL)); satırı girdim, böylece program her çalıştığında rastgele kelime seçebilir, tabi sana sormadan.

    Birde göstericiler ve diziler çok saçma şekilde kullanılmış, birsürü uyarı veriyordu, onları da doğru tanımladım, Son olarak bir tavsiye, not defteri ile bir sözlük oluştur

    ve program o sözlükten kelime seçsin, bu yöntem hem çok kötü hem de exe yi şişirdikçe şişirir. KOD::

     

    //###################################

    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>

    int arama (char harf,int sira,const char **kelime,char *deneme,int *hak)
    {
        int j;
        int k=0;

        for(j=0; j< 11 ; j++)
        {
            if(kelime[sira][j]==harf)
            {
                deneme[j]=harf;
                k=1;
            }
        }

        if(k!=1) *hak=*hak-1;
           
        printf("%s ",deneme);
        printf("\n%d hakkin kaldi...\n",*hak);
        return 0;
    }


    int main(){ //main function begins

        char *kelime[]={"orman","mert","nihayet","aile","kestirmek ",
                        "medrese","degisim","kedi","destan","senato" ,
                        "bilinç","millet","halat","konferans","gelenek",
                        "sadece","irmak","türkçe","zeka","kitap","senaryo"};//declaring char array
        int        sans=7;
        int     sira;
        int     i=0;
        char     deneme[11]={0};
        char     harf;
        char     cikis;

        printf("Adam asmaca oyununa hos, geldin\n");
        printf("Oyunda 7 hakkin var!\n");
        printf("Eger harfi bilirsen o hakki tekrar kullanabilirsin!\n");

        srand(time(NULL));
        sira=rand()%12;

        for(i=0;i<strlen(kelime[sira]);i++){ // loop
            deneme[i]='*'; //changes the word with *
        }

        printf("\nKelime %d harften olus,uyor. %s \n",i,deneme);

        do
        { //loop for change
            printf("\nBir harf giriniz.: ");
            scanf(" %c",&harf); //takes a letter from user

            arama(harf,sira,(const char**)kelime,deneme,&sans); //function call

            if (strstr(deneme,kelime[sira])!=NULL)
            {
                printf("\n*** Tebrikler kazandiniz.\n");
                printf("Kelime:%s\n",kelime[sira]);
                getch();
                return 0;
            }

            if (sans==0){ //checks the condition
                printf("Kelimeyi bilemedin...\n");
                printf("Kelime ... %s\n",kelime[sira]);
            }

        } while(sans>0);

        scanf("%c",&cikis);

        return 0;
    }
    //###################################

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mywts
    mywts's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    hocam gercekten cok sağol ama ben senin tavsiyene uyup galiba yeniden kodu yazacağım c konusunda da pek bilgili olduğum söylenemez,benim de ilk düşüncem dosyadan rastgele kelime okutmaktı ancak çekincem dosyadan okuttuğum kelimelere harf harf nasıl konumlanacağımı ve rastgele olarak kelimeyi nasıl seçtireceğimi bilmemem.Çok şey istemiş olmazsam bunlar hakkında bir kaynak vermen mümkün mü?Ama bu kod da elimde bulunsun en son çare olarak.

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Eğer tek sorun dosyadan kelime seçmekse iki satır kod, ben bu kodun dosya versiyonunu yazarım sen kendi programına uygularsın.

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mywts
    mywts's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    Yok hocam ya bi projem var yaklaşık da 3 hafta gibi bir zamanım.Perojeden bahsedeyim biraz.Sözlük programı iki tane dosya bulunuyor bunlardan birine türkce-ingilizce diğerine ingilizce-türkce kelimeler işleniyor.Gerisi bildiğimiz dosyalama işlemleri ekle,düzelt,sil,ara tarzı.Sözlükğün başlangıç sayfasında bir adam asmaca kısmı bulunuyor orada da adam asmaca oyunu oynanıyor,Bir kısmında da kişiye dosyalardan rasgele kelimeler seçerek quiz tarzı bir şey yapılıyor.Kelimelerin karşılıkları soruluyor.İşte bu projeyi yapmam gerekiyor ve kendim yapmak,ya da kod parçacığı bulabilirsem satır satır düzenleyip,anlamak istiyorum.Amacım kimseye yaptırmak değil.Sen bana kaynak sağlasan ya da zorda kaldığımda yardımını esirgemesen yeter.Sağol tavsiyen için.saygılar...

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Bu dediklerini konsolda mı yapacaksın, C ile yapmak zorunda mısın sen mi seçtin, bu tür programlar yapılacak son dil C dir.

    Deminki programı sana söyledikten sonra yazmıştım, bir fonksiyon ekledim sadece, sozluk.db den kelime seçiyor, not defteriyle kelime ekleyebilirsin ancak kelime sayisini #define kelime_adet 23 yazan bölümde değiştir.

    Dosyada kaç satır varsa okadar kelime var zaten, durum cubugu olan bir editörle anlayabilirsin. Hadi sana kolay gelsin..

    http://www.sendspace.com/file/sp37l6

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mywts
    mywts's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    Eyvallah hocam sağol baya baya adam asmaca kısmını bitirmişsin zaten.teşekkür ederim.Hadi iyi geceler.Bu arada evet c programlama ödevi mecburi olarak c ' seçiyoruz.

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    vay bea, c ie ne yapabilirim ne yapabilirim diyordum , adam asmaca süper :D kendime göre sıfırdan yazayım kodlara bakmadan.İyice kavrarım.

Toplam Hit: 5003 Toplam Mesaj: 12