Kezdőoldal » Számítástechnika » Programozás » Pascalban hogy kell úgy egy...

Pascalban hogy kell úgy egy random számot generálni, hogy megadott számok közül válasszon ki egyet?

Figyelt kérdés
Tehát nem úgy, hogy mondjuk 1-től 100-ig, hanem úgy, hogy például adott a 65, a 69, a 73, a 79 és a 85 és e közül az 5 közül válasszon ki egyet véletlenszerűen.

2014. jún. 30. 16:52
1 2 3
 11/25 anonim ***** válasza:
36%

Annyira nem nehéz értelmezni azt a kódot! :)


Az algoritmust tökéletesen valósítottam meg, csak a paramétereket hangoltam szélsőségesre, hogy megmutassam miért problematikus a megközelítésed. Ennyi!

2014. jún. 30. 22:03
Hasznos számodra ez a válasz?
 12/25 anonim ***** válasza:
41%

Ha az jön ki, elveted.

Pascalt ugyan nem tudok, de js tökéletesen megcsinálja:

generálás()

if(generated = 65 or generated = 634765 or ígytovább amennyit akarsz){generálás();}

Nem timeoutol ki semmi.

De a tartományokra felbontás irtózatos hülyeség. Már egy esetén sem látod át, főleg, ha továbbküldöd a debuggernek, úgy törli ki, mint a szart. Senki nem szeret ilyesmikkel szórakozni, tekintve, hogy egy if statementnél gyorsabb dolog aligha lehet, és gyak. biztos, hogy 10000-ből uaz a szám nem jön ki még egyszer.

2014. jún. 30. 22:12
Hasznos számodra ez a válasz?
 13/25 anonim ***** válasza:

Hallod, ne vergődj már, de komolyan.

Az én megoldásom tökéletesen hibátlan, csak úgy látszik, te nem tudod felfogni.

Egyébként nekem van egy kész saját kódom C++-ban egy olyan véletlen szám generátorra, ahol be tudod állítani az alsó és felső határokat, és azt hogy generáljon-e olyan számot, ami már volt korábban vagy mindig újakat.

Ugyanezen az elven működik, tökéletesen.

De lehet csak ennyivel jobb programozó vagyok nálad.

2014. jún. 30. 22:22
Hasznos számodra ez a válasz?
 14/25 anonim ***** válasza:
#12 says: you talin' to me? I've just covered you...
2014. jún. 30. 22:31
Hasznos számodra ez a válasz?
 15/25 anonim ***** válasza:

Egy 8 soros kódra vered magad? :D

[link]


És itt a tartományokra bontás hihetetlenül átláthatatlan kódja! :) 12 soros átláthatatlan szörnyeteg

[link]

2014. jún. 30. 22:42
Hasznos számodra ez a válasz?
 16/25 anonim ***** válasza:

És amúgy sebesség szempontjából sem ártana megnézni, hogy melyik jobb... :)


[link]

2014. jún. 30. 23:39
Hasznos számodra ez a válasz?
 17/25 anonim ***** válasza:

A #3-as megoldása, nem kerülhet végtelen ciklusba. Ez csak elméletileg áll fenn, mert nem valódi véletlent használ, hanem álvéletlen generátort. Ha termikus zajból, vagy sugárzó anyagból gyűjtene véletlent, akkor fenn állna a lehetősége a végtelen ciklusnak. Az álvéletlen generátor nem így működik.


Futásidő szempontjából jobb, ha kiválaszt a tömb elemei közül véletlen indexel egyet. Ha több számot kellene kiválasztani ismétlés nélkül, akkor keverést kell használni. Az első elemet megcseréled egy véletlen elemmel a tömbben, majd a másodikat a tömb második elemétől (ez is benne van) lévő részében egy elemmel és így tovább. Ez az algoritmus lineáris, lépésenként egy elemet kell elérni a tömbben.

2014. júl. 1. 00:44
Hasznos számodra ez a válasz?
 18/25 anonim ***** válasza:
#17 Ha végtelen ciklusba nem is kerül, szélsőséges paraméterekkel akár órákig is futhat. Ezt egy korábbi válaszomban kóddal is bemutattam. Tehát ez a megoldás semmiképp nem univerzális. Csak akkor ideális, ha kevés rossz érték van, és nagyon-nagyon sok jó!
2014. júl. 1. 00:48
Hasznos számodra ez a válasz?
 19/25 anonim ***** válasza:

#18-as nem értem mit értesz univerzális alatt. Bizonyos követelmények fennállása esetén kötelező a végtelen ciklusos megldás használata. Az összes álvéletlen generátor egész biteket/bájtokat ad vissza. Ha nem kettő hatvány hosszú az intervallumod és követelmény az egyenletes eloszlás, nem jó a kb. egyenletes akkor nem veheted simán moduló a byte-ot, mert meg kell nézned nem-e esik az utolsó csonka intervallumba, és ilyenkor muszáj új byte-ot kérned.


Attól mert a programnyelvek készen adják neked ezt a megoldást attól még nem lesz jobb, csak nem látod a ciklust. Megnéztem a Java Random nextInt(n) implementációját abban is így van. És fogadnék, hogy minden programnyelven így csinálják, vagy nem adnak garanciát az egyenletességre (pl. C nyelv rand() függvény ezt te modulózhatod le). Ennyi erővel az összes megoldás nem univerzális, mert mindenki nem kettőhatvány intervallumból kért véletlen számot, és nem tette hozzá, hogy nem egyenletesre gondolt.

2014. júl. 1. 02:13
Hasznos számodra ez a válasz?
 20/25 tabaki ***** válasza:

Őszintén szólva egyáltalán nem tudom követni, hogy hova fajult a társalgás. Kérdezőnek tökéletesen megfelel Guitar God #3 megoldása, két szám esetén valahogy így:

...

repeat

szam:=random(1000)+1;

until (szam<>6) and (szam<>876);

...

De a pascalban is van in operátor, azzal is lehet:

...

repeat

szam:=random(1000)+1;

until not(szam in[6,13,87,88,876]);

...

2014. júl. 1. 14:24
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!