Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Random

Başlatan elektronikman, 16 Eylül 2008, 19:17:59

elektronikman

Merhaba arkadaşlar
1 ile 100 arasında tesadüfi sayı üretme imkanı varmı.
16f877 proton+

OG

Random ve Seed için Genel Yazılım,
Alıntı Yap

Syntax

Variable = RANDOM
RANDOM Variable

Overview

Generate a pseudo-randomisation on Variable. Variable should be a 16-bit variable.

Operators

Variable - store the result. The pseudo-random algorithm used has a working length of 1 to 65535 (only zero is not produced).


Example

VAR1 = RANDOM ' Get a random number into VAR1
RANDOM VAR1   ' Get a random number into VAR1

---------------------------
SEED
SEED Value

Overview


Seed the random number generator, in order to obtain a more random result.

Operators

Value - a variable, constant or expression, with a value from 1 to 65535. A value of $0345 is a good starting point.


Example

' Create and display a RANDOM number
DEVICE = 16F877
XTAL = 4
DIM RND AS WORD

SEED $0345
CLS
AGAIN:
RND = RANDOM
PRINT AT 1,1,DEC RND, "     "
DELAYMS 500
GOTO AGAIN
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

elektronikman

Bu şekilde random  1 ile 48 arasında sayı üretiyor. ama aynı rakamlar gelebiliyor onuda çözersem sorun çözülecek

DIM RND1 AS BYTE
SAYIURET:
SEED $0345
CLS
TEKRAR:
RND1 = RANDOM
IF RND1= 0 THEN  TEKRAR
IF RND1 > 48 THEN TEKRAR
PRINT $FE,1,DEC RND1, " "
DELAYMS 500
GOTO TEKRAR
END

fatihvelid

static	long	randx;
static	char	randf;
void srand(unsigned x)
{
	randx = x;
	randf = 1;
}

int Random(void)
{
    int RandNum;
    repeat:
	if(!randf)
		srand(1);
		RandNum = (int)((randx = randx*1103515245L + 12345)>>16) & 077777;
		if(!((RandNum>0) && (RandNum < 65000))) 		    goto repeat;	
	return(RandNum);
}


Basic'e çevirirseniz istediğiniz aralıkta sayı üretebilirsiniz.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

alpaslan

Arkadaşlar,

c mantığı anlamak açısından iyi ama asıl soru picbasic pro da nasıl yaparız?

elektronikman

Evet önemli olan basıc'te çözmek ve ben yukarıdaki programla 1 ile 48 arasında sayı üretmeyi çözdüm şu anda çözülmeyen sorun döngüde aynı sayılar gelebiliyor  örnegin:döngü 10 defa dönecekse 10 farklı rakam olması gerek.

alpaslan

protondan farklı olarak picbasic pro da bir deneme yaptım. Tam olmadı....

proteus-bas-hex

Link:

http://mihd.net/tzckrgq

elektronikman

........
SAYIURET:
SEED CONTUR
CLS
PRINT $FE,1, " CONTUR: " ,DEC CONTUR
TEKRAR:
AN1:
RND1 = RANDOM
IF RND1= 0 THEN  AN1
IF RND1 > 48 THEN AN1
PRINT $FE,$C0,DEC RND1, " "
DELAYMS 500

AN2:
RND2 = RANDOM
IF RND2= 0 THEN AN2
IF RND2 > 48 THEN AN2
IF RND2=RND1 THEN AN2
PRINT $FE,$C4,DEC RND2, " "
DELAYMS 500

AN3:  
RND3 = RANDOM
IF RND3= 0 THEN AN3
IF RND3 > 48 THEN AN3
IF RND3=RND2 THEN AN3
PRINT $FE,$C8,DEC RND3, " "
DELAYMS 500

AN4:  
RND4 = RANDOM
IF RND4= 0 THEN AN4
IF RND4 > 48 THEN AN4
IF RND4=RND3 THEN AN4
IF RND4=RND2 THEN AN4
IF RND4=RND1 THEN AN4
PRINT $FE,$D0,DEC RND4, " "
DELAYMS 500

AN5:  
RND5 = RANDOM
IF RND5= 0 THEN AN5
IF RND5 > 48 THEN AN5
IF RND5=RND4 THEN AN5
IF RND5=RND3 THEN AN5
IF RND5=RND2 THEN AN5
IF RND5=RND1 THEN AN5
PRINT $FE,$D4,DEC RND5, " "
DELAYMS 500

AN6:    
RND6 = RANDOM
IF RND6= 0 THEN AN6
IF RND6 > 48 THEN AN6
IF RND6=RND5 THEN AN6
IF RND6=RND4 THEN AN6
IF RND6=RND3 THEN AN6
IF RND6=RND2 THEN AN6
IF RND6=RND1 THEN AN6
PRINT $FE,$D8,DEC RND6, " "
DELAYMS 500
.....
.....
GOTO START
END
Bu şekilde çözdüm limitli ve her defasında farklı rakam öretiyor.