Kendi Random Fonksiyonum Hakkinda
-
Muritler merhaba,odevimde kendi random fonksiyonumu yazmam isteniyor.Bu fonksiyonun ismi myRand() ve bu fonksiyonun icinde ilk basta srand(time(NULL)) ile seed yapiyoruz.Daha sonra
number diye bir degisken uretiyoruz ve rand() fonksiyonu yardimiyla bir sayi uretiyor belirli bir aralikta.Daha sonra uretilen bu sayinin karesi aliniyor ve karesi de a diye bir degiskene
ataniyor.Daha sonra myRand() fonksiyonunun icinde bir getRange(a, 2, 5) fonksiyonu cagriliyor ki bu fonksiyon belirtilen indexler arasindaki sayilari butun halinde cikartiyor sayidan.Soz gelimi
sayi 125987 olsun indexler de 2 ve 5 olsun.2598 sayisi elde ediliyor.Bu sayi da myRand() fonksiyonunda return ettiriliyor bir for dongusu icerisinde.
Kod su sekildedir:
int myRand()
{
srand(time(NULL));
int random_number;
for (int q = 0 ; q<=iteration ; q++ )
{
int number,a;
number = 100 + rand()%(integer_max-100);
a = pow(number,2);
random_number = getRange(a,1,5);
return random_number;
}
}
int getRange(int number, int startIndex, int endIndex)
{
int basamak_sayisi = 0;
int dizi[40];
int a = 0;
while(number != 0)
{
dizi[a] = number % 10;
number = number / 10;
a++;
basamak_sayisi++;
}
int new_number;
new_number = dizi[basamak_sayisi-startIndex]*pow(10,(basamak_sayisi-startIndex)) + dizi[basamak_sayisi-2]*pow(10,(basamak_sayisi-2))+dizi[basamak_sayisi-3]*pow(10,(basamak_sayisi-3))+dizi[basamak_sayisi-4]*pow(10,(basamak_sayisi-4))+dizi[basamak_sayisi-endIndex]*pow(10,(basamak_sayisi-endIndex));
return new_number;
}
Sorun su ki bu kendi yaptigim myRand() fonksiyonu bazen negatif deger uretiyor ve bir kere urettikten sonra kendini yenilemiyor.
Neden kendim boyle bir fonksiyon yaptim?Fantezi sahibi degilim muritler,hoca kendi random fonksiyonumuzu bu kalipta yazmamizi istiyor.Bile bile amelelelik yapiyoruz sanki rand() yeterli olmuyormus gibi.
Okudugunuz icin tesekkur ederim.
-
Negatif değer üretmenin sebebi integer aralıklarının dışına çıkıyor olman olabilir. unsigned int kullanırsan düzelecektir. Random değer üretmek için yazdığın fonksiyonun içinde random fonksiyonu var. onu kullanıyorsan bi anlamı yok zaten.
Rand() fonksiyonsuz şöyle yapabilirsin.
#include<iostream> #include<ctime> #include<time.h> using namespace std; unsigned int random(){ int x=clock(); for(int i=0;i<500000;i++);//Delay int y=clock(); return x*y*x*y; } int main(){ for(int i=0;i<100;i++) cout << random()%1000000 <<"\n"; system("pause"); }