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

C’de stdlib.h Kütüphanesi? Merhaba arkadaşlar, Şimdi gelelim oyun oynamayı (bilgisayar oyunları) çok fazla seven arkadaşlarımıza, Bu sefer oyun oynayan tarafta değil oyunu yazan tarafta olacağız. Bilmece bunun gibi makaleye giriş yaptım kusura bakmayın. Oyun kodlayan ya da kodlama işine sadece oyun yazabilmek için girmiş programcıların en aşırı sevdiği kütüphaneyi bu makalemizde inceleyeceğiz. rand() / srand() rasgele sayı üretme fonksiyonlarıyla yanında dersimize başlayalım…       Stdlib.h Kütüphanesi Bu kütüphanede gene matematiksel işlemler için kullanılıyor fakat 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> halinde entegre etmeniz gerekmektedir.   ABS() Fonksiyonu Absolute kelimesinin kısaltılmışı olan bu fonksiyon tıpkı İngilizce manası benzeri mutlak kıymet anlamına gelmektedir. Daha önceki makalemde Fabs() fonksiyonundan bahsetmiştim şimdide abs fonksiyonununda tıpkı işlevi gördüğünden bahsediyorum arada tek bir ayrım öbür makalemde double türünde kıymet alıp vermeniz gerektiğini söylemiştim bu fonksiyonda ise int türünde kıymet alıp vermeniz gerekmektedir. Kısaca aradaki tek ayrım parametre değerlerinin farkıdır…   RAND() Fonksiyonu Rand() fonksiyonu bilhassa oyun çeşidi simülasyonlarda rasgele sayı üretmek için bol bol uygulanan ve çok fazla da sevilen bir fonksiyondur sebebiyse şöyle bir düşündüğümüzde hemen hemen tüm oyunlarda ihtiyaç duyulur ve bu fonksiyonun en muhteşem niteliği belirli bir aralıkta tutabilmemizdir sonucu. Bir tavla oyununda mesela zar en fazla altı gelebilir böyle bir halde 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 evvela kullandıgımız fonksiyonlarda () tarafı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> üç int sayisal(); 4 int main() 5 { int x; altı do{ 7 printf(“Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin”); 8 scanf(“%d”,&x); 9 }while(x!=1); on 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 tam olarak entegre ediyoruz.   2.si rand() fonksiyonunu int şekilde aldık ama parametre bölümü 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 şeklini kullandık ve 0 dan değil de 1 den başlasın diye 1 ekledik…   Ve çok fazla önemli bir açık mevcut programımızda çok fazla şanlı iseniz programın bazan tıpkı sayıyı tekrardan ürettiğini göreceksiniz ee sayısal lotoda tıpkı sayıyı 2 kez yazamayacağınıza göre bunu engellemek için bir kısım daha yazmalısınız.. Bunu 2 biçimde yapabilirsiniz. Ya sıra oluşturup bununla birlikte dizide birbirine benzeyen var mı kontrol edersiniz ya da switch Case yapısı ile altı türlü değişkene her bir imal edilen sayıyı atayıp Şayet tıpkı sayıya denk geldiyseniz yine başa dönüp yeni bir kıymet daha bulmasını isteyebilirsiniz.   Şimdi dikkatli kullanıcıyla dikkatsiz kullanıcıyı burada ayırdık sanırım. Aslında 2 kere art arkaya programı çalıştırırsanız gözleyebilirsiniz ki program mutlaka tıpkı sayıyı üretiyor yani altı sayıda hiç değişmiyor bunun için başka bir fonksiyona geçiyoruz…   SRAND() Fonksiyonu Bu fonksiyon rand() fonksiyonu ile beraberinde çalışır ve bu fonksiyon aldığı değere göre rand() fonksiyonuna bir kıymet çıkarttırır. Şöyle ki; az önceki programımızın fonksiyon yönünü şöyle değiştirirsek:   1 #include<stdio.h> 2 #include<stdlib.h> üç int sayisal(); 4 int main() 5 { int x; altı do{ 7 printf(“Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin”); 8 scanf(“%d”,&x); 9 }while(x!=1); on 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 imal edilen sayıların türlü olduğunu gözlemleyebilirsiniz fakat gene bir sıkıntı mevcut bu seferde srand() fonksiyonu muhtelif kıymet almazsa gene daima tıpkı kıymet alacaktır.. BU gerçekte çok fazla büyük bir sorundur fakat çözümüde bir o kadar güzeldir.BU mantığı özenerek ifade etmek istiyorum nedeniyse hemen hemen bütün programlama dillerinde bunun kullanıldığını biliyorum. Hayatımızda devamlı değişen ve hiç bir süre aynısı olmayacak birşeye ihtiyacımız mevcut değil mi?   Çünkü srand() fonksiyonu devamlı yeni kıymet almalı o süre ona devamlı değişen bir şey bulmalı derken sağ olsun C ‘nin yaratıcıları bize time() fonksiyonunu sunmuş. Evet devamlı değişen şey zamandır ve bunu srand() fonksiyonu için kullanacağız. Neresi İlginç bunun diyen sesler duyuyorum peki bu süre yani time() fonksiyonun 1 Ocak 1970 tarihinden bu güne kadar olan Saniyelerden herhangi bir tanesini 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); üç rand()%49+1   İşte bu bundan sonra devamlı yeni sayı elde edebiliriz…Az önceki kodumuzu yeni durumuna göre modifiye edersek. Time.hkütüphanesini eklemeyi unutmayalım.   1 #include<stdio.h> 2 #include<stdlib.h> üç #include<time.h> 4 5 int sayisal(); altı int main() 7 { int x; 8 do{ 9 printf(“Bu Haftanin Sansli Sayilari Siralamak icin 1 e basin”); on 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 }


Yapılan Yorumlar
Erdem OFLAZ

Bir mum, diğer mumu tutuşturmakla ışığından bir şey kaybetmez.
 Kategoriler
 Popüler yazılar