link

C’de stdlib.h Kütüphanesi?

stdlib.h-Kütüphanesi_emresupcinMerhaba arkadaşlar,

Şimdi gelelim oyun oynamayı (bilgisayar oyunları) çok seven arkadaşlarımıza, Bu sefer oyun oynayan tarafta değil oyunu yazan tarafta olacağız. Bilmece gibi makaleye giriş yaptım kusura bakmayın. Oyun kodlayan ya da kodlama işine sırf oyun yazabilmek için girmiş programcıların en çok sevdiği kütüphaneyi bu makalemizde inceleyeceğiz. rand() / srand() rasgele sayı üretme fonksiyonlarıyla birlikte dersimize başlayalım…

 

 

 

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<stdlib> ş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..

 

1  #include<stdio.h>
2            #include<stdlib.h>
3          int sayisal();
4          int main()
5          { int x;
6          do{
7   printf("Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin");
8          scanf("%d",&x);
9          }while(x!=1);
10
11          sayisal();
12
13          getchar();getchar();
14          return 0;
15          }
16
17          int sayisal()
18          {
19           int i,a;
20
21          for(i=0;i<6;++i)
22          {
23           a = (rand()%49)+1;
24      printf("Bu haftanin sansli %d. rakami: %d n",i+1,a);
25
26          }
27          }

 

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

 

1.si #include<stdlib.h> 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:

 

1          #include<stdio.h>
2          #include<stdlib.h>
3          int sayisal();
4          int main()
5          { int x;
6          do{
7    printf("Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin");
8          scanf("%d",&x);
9          }while(x!=1);
10
11          sayisal();
12          getchar();getchar();
13          return 0;
14          }
15
16          int sayisal()
17          {
18
19           int i,a;
20           srand(5);
21          for(i=0;i<6;++i)
22          {
23           a = (rand()%49)+1;
24     printf("Bu haftanin sansli %d. rakami: %d n",i+1,a);
25
26          }
27    }

 

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:

 

1  degistir = time(NULL);
2  srand(degistir);
3  rand()%49+1

 

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

 

1          #include<stdio.h>
2          #include<stdlib.h>
3          #include<time.h>
4
5          int sayisal();
6          int main()
7          { int x;
8          do{
9    printf("Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin");
10          scanf("%d",&x);
11          }while(x!=1);
12
13          sayisal();
14          getchar();getchar();
15          return 0;
16          }
17          int sayisal()
18          {
19           int i,a;
20           int degistir;
21           degistir=time(NULL);
22           srand(degistir);
23          for(i=0;i<6;++i)
24          {
25           a = (rand()%49)+1;
26     printf("Bu haftanin sansli %d. rakami: %d n",i+1,a);
27
28          }
29     }
Yazar
Yazar
Bilgisayar Programcısı, Web Tasarımcı, Üniversite Öğrencisi...
Twitter Facebook Google Linkedin Flickr YouTube

Önceki Yazı:C’de Math.h Kütüphanesi?

Sonraki Yazı:F Klavye Size Ne Çağrıştırıyor?

BENZER YAZILAR
YORUMLAR
SİZ DE CEVAP YAZABİLİRSİNİZ
Bu yazı hakkında görüşünüzü belirtin.

ES Web Tasarım Web Tasarım Blog Teması Emre Supçin Bu tema ES Web Tasarım tarafından düzenlenmiştir. Hiçbir şekilde kopyalanamaz.