C'de stdlib.h Kütüphanesi

Oyun kodlayan ya da kodlama işine sırf oyun yazabilmek için girmiş programcıların en çok sevdiği kütüphaneyi inceliyoruz, rand() / srand() rasgele sayı üretme fonksiyonlarıyla birlikte!

Oyun kodlayan ya da kodlama işine sırf oyun yazabilmek için girmiş programcıların en çok sevdiği kütüphaneyi inceliyoruz, rand() / srand() rasgele sayı üretme fonksiyonlarıyla birlikte!

Stdlib.h Kütüphanesi

Bu kütüphanede yine matematiksel işlemler için kullanılmaktadır ancak kütüphanesi math.h dan farklıdır.Bu kısımda göreceğimiz fonksiyonları kullanabilmek için stdlib.h kütüphanesini programınıza #include şeklinde entegre etmeniz gerekmektedir.

ABS() Fonksiyonu

Absolute kelimesinin kısaltılmışı olan bu fonksiyon aynı İngilizce anlamı gibi mutlak değer anlamına gelmektedir. Daha önceki makalemde Fabs() fonksiyonundan bahsetmiştim şimdide abs fonksiyonununda aynı işlevi gördüğünden bahsediyorum arada tek bir fark diğer makalemde double türünde değer alıp vermeniz gerektiğini söylemiştim bu fonksiyonda ise int türünde değer alıp vermeniz gerekmektedir. Kısaca aradaki tek fark parametre değerlerinin farkıdır...

RAND() Fonksiyonu

Rand() fonksiyonu özellikle oyun türü simülasyonlarda rasgele sayı üretmek için bol bol kullanılan ve çok da sevilen bir fonksiyondur çünkü şöyle bir düşündüğümüzde hemen hemen bütün oyunlarda ihtiyaç duyulur ve bu fonksiyonun en güzel özelliği belirli bir aralıkta tutabilmemizdir sonucu. Bir tavla oyununda mesela zar en fazla 6 gelebilir böyle bir durumda sonucu sınırlayabilmek bize büyük avantaj kazandırır.RAND() fonksiyonu İngilizce random yani rasgele kelimesinden gelmektedir. Rand() fonksiyonunda integer deger döndürüp hiçbir parametre almamsına dikkat etmeliyiz. Daha önce kullandıgımız fonksiyonlarda () kısmına hangi sayı için işlem yapıyorsak onu alıyorduk ama artık rand() fonksiyonu için bir şey yazmayacağız. Birkaç örnekle devam edelim..


#include<stdio.h>

          #include<stdlib.h>

          int sayisal();

          int main()

          { int x;

          do{

          printf("Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin");

          scanf("%d",&x);

          }while(x!=1);



          sayisal();





          getchar();getchar();

          return 0;

          }



          int sayisal()

          {

           int i,a;



          for(i=0;i<6;++i)

          {

           a = (rand()%49)+1;

           printf("Bu haftanin sansli %d. rakami: %d n",i+1,a);



          }







          }



şimdi burada kodlara biraz göz atarsak şu noktalara dikkat çekmemiz gerekiyor.

1.si #include kütüphanesini kesinlikle entegre ediyoruz.

2.si rand() fonksiyonunu int olarak aldık ama parametre kısmı boş yani void olmalı biz void yazmayıp boş bırakmayı tercih ettik.

3.sü rand() fonksiyonunu 49 tane rakam ve 1 den 49 a kadar olması için mod yöntemini kullandık ve 0 dan değil de 1 den başlasın diye 1 ekledik...

Ve çok önemli bir açık var programımızda çok şanlı iseniz programın bazen aynı sayıyı tekrar ürettiğini göreceksiniz ee sayısal lotoda aynı sayıyı 2 kez yazamayacağınıza göre bunu engellemek için bir kısım daha yazmalısınız.. Bunu 2 şekilde yapabilirsiniz. Ya dizi oluşturup ayrıca dizide birbirine benzeyen varmı kontrol edersiniz yada switch Case yapısı ile 6 farklı değişkene her bir üretilen sayıyı atayıp eğer aynı sayıya denk geldiyseniz tekrar başa dönüp yeni bir değer daha bulmasını isteyebilirsiniz.

Şimdi dikkatli kullanıcıyla dikkatsiz kullanıcıyı burada ayırdık sanırım. Aslında 2 kez arka arkaya programı çalıştırırsanız görürsünüz ki program hep aynı sayıyı üretiyor yani 6 sayıda hiç değişmiyor bunun için başka bir fonksiyona geçiyoruz..

SRAND() Fonksiyonu

Bu fonksiyon rand() fonksiyonu ile birlikte çalışır ve bu fonksiyon aldığı değere göre rand() fonksiyonuna bir değer çıkarttırır. Şöyle ki; az önceki programımızın fonksiyon kısmını şöyle değiştirirsek:


#include<stdio.h>

          #include<stdlib.h>

          int sayisal();

          int main()

          { int x;

          do{

          printf("Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin");

          scanf("%d",&x);

          }while(x!=1);





          sayisal();





          getchar();getchar();

          return 0;

          }



          int sayisal()

          {



           int i,a;

           srand(5);

          for(i=0;i<6;++i)

          {

           a = (rand()%49)+1;

           printf("Bu haftanin sansli %d. rakami: %d n",i+1,a);



          }







          }



Yeni üretilen sayıların farklı olduğunu görürsünüz ancak yine bir sorun var bu seferde srand() fonksiyonu farklı değer almazsa yine hep aynı değer alacaktır.. BU aslında çok büyük bir sorundur ancak çözümüde bir o kadar güzeldir.BU mantığı özenerek anlatmak istiyorum çünkü hemen hemen tüm programlama dillerinde bunun kullanıldığını biliyorum. Hayatımızda sürekli değişen ve hiçbir zaman aynısı olmayacak birşeye ihtiyacımız var değil mi? Çünkü srand() fonksiyonu sürekli yeni değer almalı o zaman ona sürekli değişen bir şey bulmalı derken sağ olsun C 'nin yaratıcıları bize time() fonksiyonunu sunmuş. Evet sürekli değişen şey zamandır ve bunu srand() fonksiyonu için kullanacağız. Neresi ilginç bunun diyen sesler duyuyorum peki bu zaman yani time() fonksiyonun 1 Ocak 1970 tarihinden bu güne kadar olan Saniyelerden herhangi birini seçtiğini söylersem :)

Bu kadar bilgiden sonra srand() fonksiyonunu zamana göre değiştiren kodu görelim:


degistir = time(NULL);

srand(degistir);

rand()%49+1



İşte bu artık sürekli yeni sayı elde edebiliriz...Az önceki kodumuzu yeni haline göre modifiye edersek. Time.h kütüphanesini eklemeyi unutmayalım.


#include<stdio.h>

          #include<stdlib.h>

          #include<time.h>



          int sayisal();

          int main()

          { int x;

          do{

          printf("Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin");

          scanf("%d",&x);

          }while(x!=1);



          sayisal();





          getchar();getchar();

          return 0;

          }



          int sayisal()

          {

           int i,a;

           int degistir;

           degistir=time(NULL);

           srand(degistir);

          for(i=0;i<6;++i)

          {

           a = (rand()%49)+1;

           printf("Bu haftanin sansli %d. rakami: %d n",i+1,a);



          }







          }

  • Etiketler;
Emre Çamalan
1986 doğumlu olan Emre Çamalan, Atılım Üniversitesi Bilgisayar Mühendisligi 2. sınıfta burslu olarak eğitimini sürdürüyor. Programlama merakı ve tecrübesi okuldan öncelere dayananan yazar, Ankara'da yaşıyor.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

örneklerin güzel, özelliklede kodlama goruntusune özenilmis, diger sitelerinkiyle kıyaslarsak çok farklı
sizin gibi arkadaşlar iyi var bu memlekette :) ben daha hiç birşey bilmiyorum desem yalan olmaz :) bana nerden başlamam konusunda ve gerekli bazı pratik bilgiler- taktikler verebilecek olan var mı aranızda? :( umarım yönlendirebilecek olan avrdır bei. emeğine sağlık hocam :)
Tesekkur ederim verdiginiz bilgiler icin. Yukaridaki orneklere yakin bir cok ornek program ve yazi internette okudum. Aslinda burada bir kutuphane dosyasini butun ayrintilariyla incelemek ve icerisindeki fonksiyonlari ornekler ile aciklamak daha yerinde olur diye dusunuyorum. stdlib.h icerisinde kac tane fonksiyon var ve bu fonksiyonlari program icerisinde nasil kullanabiliriz ve ne ise yariyor bu fonksiyonlar gibi... benim sahsi gorusum kutuphaneleri detaylanirmak daha yararli olur gorusunde
tabi bende bunu çok isterim ancak bir stdlib.h kütüphanesi 20 den fazla fonksiyon içeriyorsa o işe girişmeyi kimse göze almıyor sebebi çoklugu degil kullanım sıklıgı, ben sadece en çok işe yarayacaklardan bahsettim tutup size stdlib kütüphanesinde gc_tag(); fonksiyonu script kabul etmez deseydim noluyoruz bu ne demek istiyor diye okumaktan vazgeçerdiniz anlatabildim mi. Yorumlarınız için ben teşekkür ederim..
Paylaşımınız için çok teşekkür ederim:kirp:

Yukarı Git