C'de Rand()-Srand(time(NULL)) komutu ve kullanım örnekleri
Rand() komutu ve Srand(time(NULL)) komutu
#include <-stdlib.h> kütüphanesi ile birlikte kullanılan rand() komutu rastgele sayı üretmek amacı ile kullanılır. Ayrıca diğer bir kullanımıda #include <-time.h> srand(time(NULL)) şeklindedir.. ikiside aynı işlemi yapar. Ancak aradaki fark şöyledir.
Örneğin rastgele bir sayı üretelim. Sayımız 0-10 arası bir sayı olsun. Rand() komutu yalnız kullanıldığında;
Dikkat: Kütüphane isimleri düzgün gözükmesi için tire ile belirtilmiştir. Çalıştırıldığında bu tireleri kaldırın. aksi halde ÇALIŞMAZ!!!
#include<-stdio.h>
#include<-conio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-stdlib.h>
int sayi;
sayi=rand()%10;
printf("Rastgele sayi= %d",sayi);
getch();
}
Yukarıda gördüğümüz komut 0-10 arası bir sayı üretecektir. Bu kısımda önemli olan sayi=rand()%10 satırıdır. Bir sayıyı rastgele değer atanmak istenilirse sayı o değere % değeri ile böldürülerek,bölünen değerin kalan kısmı üretilecek sayı olarak ekranda gösterilir. Yani bildiğimiz mod işlemi:)
Aynı işlemi birde srand komutu ile birlikte kullanalım. Bu komutun asıl görevi zamana bağlı bir değer olarak sürekli olarak üretilen sayının değişmesini sağlar. Yani zaman sürekli değişen bir değerdir. Sayıda sürekli değişsin diye bu komutu tanımlama bölümünden sonra kullanırsanız, az önce sabit değer alan sayi değişkenimiz sürekli değişecektir.
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main(){
int sayi;
srand(time(NULL));
sayi=rand()%11;
printf("Rastgele sayi= %d",sayi);
getch();
}
int sayi;
srand(time(NULL));
sayi=rand()%11;
printf("Rastgele sayi= %d",sayi);
getch();
}
Bu kısım da yine rastgele bir sayı üretir. Ama az önce söylediğimiz gibi bu üretilen sayıyı zaman gibi sürekli değişen bir değere bağlayarak sürekli değişmesini sağlayabiliriz. Srand(time(NULL)) komutu gördüğünüz gibi tanımlama kısmından sonra kullanılarak sayi değişkeni için üretilen sayının sürekli olarak değişmesini sağlar. Bir kere tanımlamak yapmak yeterlidir. Kullanımı aynen örnekteki gibidir. NULL nedir diye merak eden varsa, programın istenilen sürekli olarak değişmesini ve çalışmasını sağlar.
Not: Üretilen sayı en az 0'dır. Bunun nedenide kalanın hiç bir zaman negatif olamamasıdır.
Diğer örnekler:
A) 0-25 arası rastgele 10 adet sayı üretmek:
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main()
{
int a=1,sayi;
srand(time(NULL));
while(a<=10){
sayi=rand()%25;
printf("%d sayi=%dn",a,sayi);
a++;
}
getch();
}
{
int a=1,sayi;
srand(time(NULL));
while(a<=10){
sayi=rand()%25;
printf("%d sayi=%dn",a,sayi);
a++;
}
getch();
}
B) Milli Piyango bileti yapma:
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main()
{
int a,b;
srand(time(NULL));
printf("***Milli Piyango***n");
for(a=1;a<=6;a++){
b=rand()%10;
printf("%dt",b);
}
getch();
}
{
int a,b;
srand(time(NULL));
printf("***Milli Piyango***n");
for(a=1;a<=6;a++){
b=rand()%10;
printf("%dt",b);
}
getch();
}
C) Otomatik sayısal loto kuponu dolduran program
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main()
{
int a,b=1,sayi;
srand(time(NULL));
printf("***sayisal loto***n");
while(b<=6){
printf("%d.kolont",b);
for(a=1;a<=6;a++){
sayi=rand()%50;
printf("t%d ",sayi);}
b++;
printf("tn");}
getch();
}
{
int a,b=1,sayi;
srand(time(NULL));
printf("***sayisal loto***n");
while(b<=6){
printf("%d.kolont",b);
for(a=1;a<=6;a++){
sayi=rand()%50;
printf("t%d ",sayi);}
b++;
printf("tn");}
getch();
}
D) İstenilen adette atılan zarın her atış sonrası değerini bulan program:
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main(){
int a,zar,atis;
srand(time(NULL));
printf("---Zar atma---n");
printf("Zarın kaç kere atilacagini girin= ");
scanf("%d",&zar);
for(a=1;a<=zar;a++){
don:
atis=rand()%7;
if(atis!=0){
printf("%d.atis=%dn",a,atis);
}
else{
goto don;
}
}
getch();
}
int a,zar,atis;
srand(time(NULL));
printf("---Zar atma---n");
printf("Zarın kaç kere atilacagini girin= ");
scanf("%d",&zar);
for(a=1;a<=zar;a++){
don:
atis=rand()%7;
if(atis!=0){
printf("%d.atis=%dn",a,atis);
}
else{
goto don;
}
}
getch();
}
E) Çarpmayı yeni öğrenenler için çalışma programı:
Çalışma Mantığı: Doğru cevapta yeni soru hatada ise bilemediniz diyerek program biter:
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main()
{
int a,b,c,d;
srand(time(NULL));
for(a=1;a<=100;a++){
b=rand()%10;
c=rand()%10;
printf("%d*%d= ",b,c);
scanf("%d",&d);
if (d==b*c){
printf("aferin, dogru...n");
}
else{
printf("bilemedin...");
break;
}
}
getch();
}
{
int a,b,c,d;
srand(time(NULL));
for(a=1;a<=100;a++){
b=rand()%10;
c=rand()%10;
printf("%d*%d= ",b,c);
scanf("%d",&d);
if (d==b*c){
printf("aferin, dogru...n");
}
else{
printf("bilemedin...");
break;
}
}
getch();
}
F) Barbut oyunu: Oyuncu sayısı girilerek her kişi için atılan zar değerini yazan
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main()
{
int a,b,c;
srand(time(NULL));
printf("----Barbut Oyunu----n");
printf("Oyuncu sayisi gir=");
scanf("%d",&a);
for(b=1;b<=a;b++){
don:
c=rand()%7;
if(c!=0){
printf("%d.kisi=%dt",b,c);
}
else{
goto don;}
}
getch();
}
{
int a,b,c;
srand(time(NULL));
printf("----Barbut Oyunu----n");
printf("Oyuncu sayisi gir=");
scanf("%d",&a);
for(b=1;b<=a;b++){
don:
c=rand()%7;
if(c!=0){
printf("%d.kisi=%dt",b,c);
}
else{
goto don;}
}
getch();
}
G) Bir markette seçilen kart sayısı ile türetilen sayı eşit ise kullanıcıya "Tebrikler kazandınız..." diyen diğer durumda tekrar seçim yaptıran...
#include<-stdio.h>
#include<-stdlib.h>
#include<-conio.h>
#include<-time.h>
int main()
{
int kart,b;
srand(time(NULL));
tekrar:
printf("0-10 arasi bir kart nosu giriniz: ");
scanf("%d",&kart);
b=rand()%11;
if(kart==b){
printf("Tebrikler Kazandınız...");}
else{
printf("Tekrar Deneyin...n");
goto tekrar;
}
getch();
}
{
int kart,b;
srand(time(NULL));
tekrar:
printf("0-10 arasi bir kart nosu giriniz: ");
scanf("%d",&kart);
b=rand()%11;
if(kart==b){
printf("Tebrikler Kazandınız...");}
else{
printf("Tekrar Deneyin...n");
goto tekrar;
}
getch();
}
Sanırım yeterli gelicektir...
Hiç yorum yok:
Yorum Gönder