Hollosi Information eXchange /HIX/
HIX CODER 264
Copyright (C) HIX
1998-10-29
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 RE : veletlen szamok (mind)  48 sor     (cikkei)
2 videokartya tipusa. (mind)  9 sor     (cikkei)
3 Homero (mind)  12 sor     (cikkei)
4 Re: random (mind)  19 sor     (cikkei)
5 GNU C, memory alignment (mind)  17 sor     (cikkei)
6 Re: 2 word-bol 3 byte (mind)  21 sor     (cikkei)
7 Re: A veletlenszam generator (mind)  46 sor     (cikkei)
8 RND algoritmusok (mind)  156 sor     (cikkei)
9 Re: COM kerdes... (VC++ 6.0 [VS 6.0]) (mind)  49 sor     (cikkei)
10 Re: Outgoing COM interface (mind)  32 sor     (cikkei)
11 Re: *** HIX CODER *** #263 (mind)  27 sor     (cikkei)
12 DelphiX problema (mind)  9 sor     (cikkei)
13 Sziasztok ! (mind)  10 sor     (cikkei)

+ - RE : veletlen szamok (mind) VÁLASZ  Feladó: (cikkei)

>   ... valamilyen source (C,C++,Pascal,Assembler)
>	fileban megvan a VELETLEN SZAMOK generalasa.....

Hi!
Az alabbit ajanlom, mar tobb eveken keresztul hasznalom. Ez az RNG
(Random Number Generator) tesztelve volt es el van fogadva a Gaming
Laboratories International-ba, es guarantalt hogy 99.9% random, tobb
fajta teszteken. 

// Heart of the Random Number Generator - Triple LSFR's, with the LSB of
each XOR'd to produce one bit  each time the function is called.

static unsigned long rA, rB, rC

Unsigned int RandomBit(void)
{
	rA =
((((rA>>31)^(rA>>6)^(rA>>4)^(rA>>2)^(rA<<1)^rA)&1)<<31)|(rA>>1); 
	rB = ((((rB>>30)^(rB>>2))&1)<<30)|(rB>>1); 
	rC = ((((rC>>28)^(rC>>1))&1)<<28)|(rC>>1); 
	return(((rA ^ rB ^ rC)) & 1);
	// returns XOR of all three LSFR's
}

// ha egy veletlen szam kell (x bit hosszu, 16 bits maximum) az alabbi
GetRandomNumber routine kell hivni x-el az argument-be, es veletlen
szamot adja vissza 0 es (2^x)-1 kozott.

unsigned int GetRandomNumber (unsigned char bNumberOfBits)
{
	unsigned int wRandomReturn = 0;
	bNumberOfBits %= 17;
	while(bNumberOfBits--)
	{
		wRandomReturn <<= 1;
		wRandomReturn |= RandomBit();
	}
	return(wRandomReturn);
}

Meg egy dolog, az rA, rB es rC variable-t initialise-ni kell egyszer,
ezt akarhonnan lehet, altalaba a RTC-bol (Real Time Clock) a
legegyszerubb. 

Ha meg jobb veletlen szamokat akarsz, akkor "hook into the timer
interrupt" es hivd onnan a RandomBit-et allandoan.

Voros Attila - ISDgames
+ - videokartya tipusa. (mind) VÁLASZ  Feladó: (cikkei)

Udv CODER-ek!

Kene egy program, ami megallapitja egy videokartya tipusat pontosan.

Azaz, megmondja pl. egy S3-asrol(konkretan ahhoz kene), hogy hanyas
revision, mikor adtak ki, a BIOS datumat, stb..

Elore is kosz,
	HTGe
+ - Homero (mind) VÁLASZ  Feladó: (cikkei)

Udvozlet!

Kerdes:
Hogyan tudom olvasni az alaplapi homerot? 
A BIOS progi vlahogy megteszi, mert folyamatosan valtozik az erteke,
de hogyan tudom en ezt C-bol olvasni?
(Acorp 5TX52 , Award bios)
Ha mas alaplapra van, az is jo, talan hasonlit...
Elore is koszonom

          Potyos               Hering Laszlo       Bodnar Aikido Dojo
 mailto:
+ - Re: random (mind) VÁLASZ  Feladó: (cikkei)

On 27 Oct 98 at 8:08,  wrote:

Masok is irtak:

> in ax, 40h
> and ax, 3
> (vagy vmi hasonlo)

Ezekkel vigyazni kell, ugyanis csak akkor jok, ha egyetlen egyszer 
akarsz egy veletlenszamot. Az eloszlasuk ugyanis egyaltalan nem 
veletlenszeru!

Nagyjabol jo veletlenszamgeneratort irni kulon tudomany, en nem ertek 
hozza, csak annyit tudok, hogy nem evidens. Amit tegnap bekuldtem, 
arrol azt olvastam, hogy eleg rendes.

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - GNU C, memory alignment (mind) VÁLASZ  Feladó: (cikkei)

Kedves GNU C guruk, elore is elnezest, ha a trivialissal hozakodnek elo:

Nem muxenek a dos/windoze alol Linuxra atemelt forrasaim, mert a gcc
defaultban 4 byte-os hatarra igazitja a strukturatagok cimeit, es nem
tudom hogy lehetne rabirni hogy ezt felejtse el.
(#pragma align 1 nem hasznalt)
Tele van a forrasom olyannal ahol egyenest fajlbol strukturaba 
fread-el a bestia, ilyenkor persze doglott a progi.
configure.in, makefile meg nincs, siman gcc-vel forditok. Megneztem a
gcc man-t, az alignmentrol nem talaltam semmi mukodokepes opciot.

Mi a varazsige?

TurboC,M$C, tsai, az osszes primitiv fordito tud olyat, hogy en mondom
meg hany byte-os hatarra igazitsa a cimeket. A gcc ne tudna ezt?

udv: VAti
+ - Re: 2 word-bol 3 byte (mind) VÁLASZ  Feladó: (cikkei)

Szia!

Szerintem igy rovidebb. :)

var
  a, b: word;
  x1, x2, x3: byte;
.

Eredmenyek: 
  x1 = 77, x2 = 38, x3 = 46

Udvozlettel:
		Giskard
+ - Re: A veletlenszam generator (mind) VÁLASZ  Feladó: (cikkei)

ImRe wrote:
> RND     MACRO                   ;
>         MOV     AX,WORD PTR SEED1       ;
>         MOV     BX,WORD PTR SEED2       ;
>         MOV     CX,AX           ;
>         MOV     DX,8405H        ;
>         MUL     DX              ;
>         SHL     CX,3            ;
>         ADD     CH,CL           ;
>         ADD     DX,CX           ;
>         ADD     DX,BX           ;
>         SHL     BX,2            ;
>         ADD     DX,BX           ;
>         ADD     DH,BL           ;
>         SHL     BX,5            ;
>         ADD     DH,BL           ;
>         INC     AX              ;
>         ADC     DX,0            ;
>         MOV     WORD PTR SEED1,AX       ;
>         MOV     WORD PTR SEED2,DX       ;
>         ENDM                    ;
szerintem erdemesebb 386 utasitasokkal leirni:
(meglepoen egyszeru, es gyorsabb)

Seed 	  dd ?
RndConst  dd 8088405h

  mov	eax,[Seed]
  mul	[RndConst]
  inc	eax
  mov   [Seed],eax

> ; A tapasztalatok szerint a dx-ben kiadott ertek jobb, mint az ax-beni
> ; ------------------------------;
tudtommal a pascal is dx-et hasznal, meghozza szorozza
a random fv parameterevel (limit ertekkel).

  mul	dword ptr [Limit]  ; edx-be egy 0..Limit-1 erteket kapunk

bye
ui: Seed-et program inditaskor erdemes inicializalni peldaul
[40h:6Ch]-re.
-- 
Picard / Rhyme
Gabor Kovacs        mailto:
tel:+36(30)9606169  icq:18722202
+ - RND algoritmusok (mind) VÁLASZ  Feladó: (cikkei)

Haliho!

        Nezegettem a #263-ik szamba kuldott algoritmusokat es meglepve
     tapasztaltam, hogy a legtobbjuk "hazilag fabrikalt" , minden matema-
     tikai megalapozottsag nelkul... Pedig a ma hasznalt jo veletlenszam
     algoritmusok is tisztan matematikai uton allitjak elo a szamot, nem
     pedig portolvasassal, vagy veletlennek tuno bitkapcsolgatassal. A baj
     ezekkel a "portolvasos" eljarasokkal, hogy csak latszolag veletlen-
     szeruek az igy generalt szamok, valojaban vajmi keves kozuk van hozza.
     Erdemesebb inkabb kis tobbletraforditassal _SOKKAL_ veletlenszerubb
     generatort irni! (A veletlenseg meresere egyebkent vannak modszerek,
     akit bovebben erdekel nezze meg a Knuth konyv II kotetet, vagy
     _LEGVEGSO ESETBEN_ irjon maganba.)(Egyebkent a level anyaga is a konyv
     es sajat tapasztalat alapjan keszult.)

       -------------------------------------
       Linearis kongruencia-sorozat modszere
       -------------------------------------

       A modszer a veletlenszamok egy sorozat generalja, ahol a kovetkezo
     elemet az

        X(n+1) = ( a*X(n) + c ) mod m, ahol

                                0 < m                   (modulus)
                                0 =< a < m              (egyutthato)
                                0 =< c < m              (novekmeny)
                                0 =< X(0) < m           (kezdoertek)

     osszefugges alapjan kell szamolni, ahol "mod m" az m-el torteno osztas
     maradekat jelenti. Mivel ez egy periodikus sorozat, szukseges hogy a
     periodus hossza (ami lkkt(m,a)) a leheto legnagyobb legyen. Ehhez es
     az egyeb veletlenszeruseghez szukseges feltetelek teljesulesehez az
     alabbi felteleknek is teljesulnie kell:

                c es m relativ primek
                m minden primosztoja (a-1)-nek is primosztoja
                ha m 4 tobbszorose, akkor (a-1) is 4 tobbszorose

       Nehany szam, amik (matematikusok altal) kiprobaltan jo generatort adnak:

                a                       c               m
                3141592653              2718281829      2^35
                1812433253              0               2^32
                1566083941              0               2^32
                69069                   0               2^32
                1664525                 0               2^32
                6364136223846793005     0               2^64

       Mas szamokkal is lehet kiserletezni, de a felteteleket betartasa
     eseten sem fogtok ezeknel jobbakat talalni.

       Ezek utan az RND rutin:

     rndnum  dd      0                       ; ez tartalmazza szamot

             ; kezdoertek beallitasa datumbol es idobol keverve
     initrnd PROC
             mov     ah, 2ah                 ; datum lekerdezes
             int     21h
             mov     WORD PTR rndnum, dx
             mov     WORD PTR rndnum+2, cx
             mov     ah, 2ch                 ; ido lekerdezes
             int     21h
             xor     WORD PTR rndnum, cx
             xor     WORD PTR rndnum+2, dx
             ret
     initrnd ENDP

             ; eax-ben ad egy 32-bites veletlenszamot
     getrnd  PROC
             mov     eax, rndnum
             mov     edx, 3141592653         ; ez az egyutthato
             mul     edx
             add     eax, 2718281829         ; ez a novekmeny
             mov     rndnum, eax
             ret
     getrnd  ENDP

       ------------------------------------
       R.R.Coveyou fele kvadratikus modszer
       ------------------------------------

       Ennel a modszernel a kezdoertek tetszoleges, de az alabbi
     teljesuljon ra:

        X(0) mod 4 = 2

       A tovabbi ertekek az

        X(n+1) = [ X(n)*( X(n)+1 ) ] mod 2^e

     keplet alapjan szamolhatok, ahol "e" tetszoleges. Ezzel a modszerrel
     is hasonlo veletlenszeruseget lehet elerni, mint a linearis
     kongruencia-sorozat modszerevel.

       Assemblyben:

     rndnum  dd      0                       ; ez a szam

             ; kezdoertek, mint az elobb, de az also 2 bitje: "10"
     initrnd PROC
             mov     ah, 2ah                 ; gets the date
             int     21h
             mov     WORD PTR rndnum, dx
             mov     WORD PTR rndnum+2, cx
             mov     ah, 2ch                 ; gets the time
             int     21h
             xor     WORD PTR rndnum, cx
             xor     WORD PTR rndnum+2, dx
             and     BYTE PTR rndnum, 0fch   ; x(0) mod 4 = 2
             or      BYTE PTR rndnum, 02h
             ret
     initrnd ENDP

             ; eax-ben adja a 32 bites veletlenszamot
     getrnd  PROC
             mov     eax, rndnum
             mov     edx, eax
             inc     edx
             mul     edx
             mov     rndnum, eax
             ret
     getrnd  ENDP

       -----------------
       Additiv generator
       -----------------

       Ennel a generatornal szukseg van egy 55 elemu puffere, ahol az utolso
     55 szam van eltarolva. A puffert indulaskor fel kell tolteni, a szamok
     nem lehetnek csupa paros szamok, de egyebkent TETSZOLEGESEK. A sorozat
     kovetkezo elemet az

        X(n) = ( X(n-24) + X(n-55) ) mod m

     osszefugges adja, ahol m tetszoleges (logikusan 2^e, pl. 32) es n>55.
     A 24 es az 55 nem hasrautessel lettek kitalalva, ezekre a szamokra
     eleg hosszu a sorozat periodusa. Termeszetesen a pufferbe utolso
     elemkent be kell irni az eppen generalt szamot, hogy kesobb fel
     lehessen hasznalni a tovabbi szamok generalasahoz. Ez az algoritmus
     gyengebb mint a linearis konguencia-sorozat modszer, viszont nem
     tartalmaz szorzast.

       Ehhez nem irok peldat, aki akarja az ugyis meg tudja csinalni. ;-)

       Ja, es meg valami: Mindegyik generatorra igaz, hogy a nagyobb
     helyierteku bitek "veletlenebbek", igy ha pl. csak 8 bites
     veletlenszam kell, akkor inkabb valamelyik felsobb bajtot hasznald!

       Na, akkor ennyi.

                        Bye,
                                        MOD

     Nincs valakinek jo doksija d3d programozasrol? Ha igen elkuldhetne.
+ - Re: COM kerdes... (VC++ 6.0 [VS 6.0]) (mind) VÁLASZ  Feladó: (cikkei)

Hali

 wrote in message ...
>Hellosztok!
>
>Le tudna skarcintani valaki, hogy hogy kene egy ActiveX Code Component -et
>felhasznalni VC++ 6.0 -ban ?

Ha jol ertem, egy COM komponenst szeretnel felhasznalni. Tobb megoldas is
van, en a nativ COM tamogatast javaslom, ha van a komponensnek Type
Library-ja.

Igy nez ki pl az SQLOLE COM komponens hasznalata:

#import "d:\winnt\system32\sqlole65.dll" // tipuskonyvtar behozatala
using namespace SQLOLE;

 ......

 HRESULT hr;
 _ApplicationPtr pApp; // interfesz: _Application, ebbol a smartptr
 NameListPtr pNameList;
 _bstr_t strDBLibVer;
 _bstr_t strServer;

 hr = pApp.CreateInstance( __uuidof(Application) ); // coclass: Application
 if( FAILED(hr) ) return FALSE;

 strDBLibVer = pApp->DBLibraryVersionString; // property hivas
 OutputDebugString( (TCHAR*)strDBLibVer );
 pNameList = pApp->ListAnnouncedNetworkSQLServers(); // method hivas

 for( long i = 1; i <= pNameList->Count; i++ )
 {
     strServer = pNameList->Item( i );
     OutputDebugString( (TCHAR*)strServer );
 }

 return TRUE;

>
>By
>Godzzo (icq:20217263)
>

Udv

Schadt Gyorgy, MCSD

+ - Re: Outgoing COM interface (mind) VÁLASZ  Feladó: (cikkei)

Hi

 wrote in message ...

>Ha jol tudom akkor letezik egy DOM (Document Object Model) amiben
>pontosan le van irva, hogy milyen szabvanyos even-tekre lehet kerni
>notifikaciot, de en most eloszor csak a progress bar lehetoseget
>akarom beepiteni.

>Csinalt mar valaki ilyet vagy van valakinek egy peldaja amin
>keresztul meg tudnam erteni hogy mikent lehet a
>legfajdalommentesebben - ugy ertem, hogy a legtobb VC++ szolgaltatast
>kihasznalva - megvalositani egy outgoing interfacet?

A "szabvany" megoldas, hogy a kliens implemental egy interfeszt (Sink), a
szerver pedig connection pointokat negy interfeszen keresztul
(IConnectionPointContainer, IEnumConnectionPoints, IConnectionPoint,
IEnumConnections). A kliens kikeresi a Sinkjenek megfelelo Connection
Point-ot, es Advise-val beregiszralja magat. H esemeny van, a szerver
vegighivja az osszes beregisztralt Sink megfelelo metodusat.

Az ATL es az MFC is jelentos tamogatast ad a fentiek megvalositasahoz.

Ha viszont csak a progressbarodat akarod mozgatni, akkor szerintem
RegisterWindowMessage, majd egy metoduson keresztul atadod a HWND-t es a
message kodjat, a szerver pedig PostMessage-vel jelez. Regi, de jol bevalt
modszer, igaz csak ugyanazon gepen muxik, es VB-bol nem lehet lekezelni...

Udv

Schadt Gyorgy, MCSD

+ - Re: *** HIX CODER *** #263 (mind) VÁLASZ  Feladó: (cikkei)

> Felado :  [Hungary]
> Temakor: Assembler - valasz ( 20 sor )
> 
> >   UDV : Van-e kozottetek egy (ket) assembler agyacska,vagy olyan pofa
> >   akinek valamilyen source (C,C++,Pascal,Assembler) fileban megvan a
> >   VELETLEN SZAMOK generalasa.En szetneztem (egy kicsit) de sehol sem
> >   talaltam.Azt mondtak,hogy valami PORT-okat kell olvasni,de nem tudom,
> >   hogy melyeket.
> 
>   A helyzet eléggé egyszerű: az ember először lekéri a rendszeridőt, amit
> belepakol egy 32-bites memóriarekeszbe. Amikor új véletlenszámra van szükség,
> egyszerűen elővesszük, eltoljuk néhányszor ízlés szerint, hozzáadunk egy
> tetszőleges számot - lehetőleg nem egyet vagy kettőt, esetleg még
> bitmanipulációkat is végzünk rajta...

Pontosan. ;-)
Ezutan fogjuk a fejunket, mert kiderul, hogy az eljarasunknak 100 alatt van
a periodusa, es raadasul valami idiota eloszlasban adja ki a szamokat.
Remek tanacs. ;-)
Foleg, ha Monte Carlohoz kellene...

ImRe

> --------------------------------------------------------------------------
 ... Our continuing mission: to seek out knowledge of C, to explore strange
unix commands, and to boldly code where no one has man page 4.
                                                                    (lpg)
+ - DelphiX problema (mind) VÁLASZ  Feladó: (cikkei)

Sziasztok!

Van valaki, aki DelphiX-xel dolgozott mar? A kerdesem a kovetkezo. Az addig
rendben van, hogy egy .x file objektumaval zsonglorkodok, de hogy lehet
futasidoben megrajzolni egy objektumot? Azaz nem elore definialttal
dolgozni, hanem mondjuk valtozokkal megadni egy kocka oldalait, stb. Ha
valakinek van ilyen jellegu peldaprogramja, szivesen fogadnam!

Koszi elore is: Anubisz
+ - Sziasztok ! (mind) VÁLASZ  Feladó: (cikkei)

Ugy tudom, regebben volt szo itt a CODER-ben a kifejezes kiertekelesrol.
Meg tudna valaki mondani, hol lehet utananezni? Jo volna magyarul.

Pascal compilert szeretnek irni DOS ala, ami commodore-ra forditana futtathato
kodot. 

                               Koszonom: Tamas FatMan[DS]

Nagy Tamas


AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS