Forum » Programiranje » Nasvet - izpis najvisjega stevila
Nasvet - izpis najvisjega stevila
IronMan01 ::
Zdravo, zanima me če mi lahko pomagate pri nečem čisto osnovnem, ker se še začetnik. Imamo program, ki nam pač izpiše naključno generirana števila, koliko teh nam izpiše, vpišemo sami, zdaj pa bi rad izpisal največje in najmanše število in povprečno vrednost od tistih števil, ki jih je program izpizsal, vem da bi moral preverjati če je prvo večje od drugega, nekaj v tem smislo, ne kapne mi kako, prosim za pomoč:) In še preveril kako dober je tak naključno generator??????
Lp
Lp
Bojevnik ::
To je sicer daleč od optimalnega algoritma, vzameš eno število in ga primerjaš z vsemi ostalimi, ko je neko število večje vzameš tistega in potem ponavljaš postopek dokler ne najdeš največjega.
Za malo bolj optimiziran način, si pa lahko pogooglaš quicksort.
Za malo bolj optimiziran način, si pa lahko pogooglaš quicksort.
WarpedGone ::
Hmm, recimo nekaj takega:
1. preberi koliko naključnih števil se naj generira in to shrani v N
2. najmanjseStevilo = 999999999 (ta vrednost naj bo večja od največjega možnega generiranega naključnega števila)
3. najvecjeStevilo = 0 (ta vrednost naj bo manjša od najmanjšega možnega generiranega naključnega števila)
4. povprecnaVrednost = 0
5. vsota = 0
6. stevec = 0
7. ponavljaj dokler stevec < N:
a) nakljucnoStevilo = novo nakljucno stevilo
b) ce nakljucnoStevilo < najmanjseStevilo potem najmanjseStevilo = nakljucnoStevilo
c) ce nakljucnoStevilo > najvecjeStevilo potem najvecjeStevilo = nakljucnoStevilo
d) vsota = vsota + nakljucnoStevilo
e) stevec = stevec + 1
8. povprecnaVrednost = vsota / N
Ne razumem, kaj misliš s tem?
1. preberi koliko naključnih števil se naj generira in to shrani v N
2. najmanjseStevilo = 999999999 (ta vrednost naj bo večja od največjega možnega generiranega naključnega števila)
3. najvecjeStevilo = 0 (ta vrednost naj bo manjša od najmanjšega možnega generiranega naključnega števila)
4. povprecnaVrednost = 0
5. vsota = 0
6. stevec = 0
7. ponavljaj dokler stevec < N:
a) nakljucnoStevilo = novo nakljucno stevilo
b) ce nakljucnoStevilo < najmanjseStevilo potem najmanjseStevilo = nakljucnoStevilo
c) ce nakljucnoStevilo > najvecjeStevilo potem najvecjeStevilo = nakljucnoStevilo
d) vsota = vsota + nakljucnoStevilo
e) stevec = stevec + 1
8. povprecnaVrednost = vsota / N
In še preveril kako dober je tak naključno generator??????
Ne razumem, kaj misliš s tem?
Zbogom in hvala za vse ribe
Zgodovina sprememb…
- spremenilo: WarpedGone ()
BigWhale ::
gokky ::
Kvaliteta generiranja števil je vezana na naključnost generiranja. Če imaš generator, ki generira števila od 1-N za relativno velik N, potem bi dober generator približno enako razporedil verjetnost na vsa števila (recimo pri N**2 ponovitvah bi vsako število našel N-krat).
Seveda pa je to samo nujni, ne pa zadostni predpogoj. Matematiki in šolani ljudje bodo znali priložiti še kak pogoj ne ponavljanja sekvenc,...
V gornjem primeru bi generirana števila razdelil v razrede in vsaj preveril, da ima vsak razred približno enako zadetkov. Za zahtevnost naloge bo najbrž več kot dovolj.
Seveda pa je to samo nujni, ne pa zadostni predpogoj. Matematiki in šolani ljudje bodo znali priložiti še kak pogoj ne ponavljanja sekvenc,...
V gornjem primeru bi generirana števila razdelil v razrede in vsaj preveril, da ima vsak razred približno enako zadetkov. Za zahtevnost naloge bo najbrž več kot dovolj.
darkkk ::
Maja, kar se tiče "random" generatorjev na računalnikih... jih formalno ni. Pač do sedaj se je še vedno izkazalo, da so padli na kaki verjetnostni finti. Vendar pa za šolske in razne testne potrebe čisto ustrezajo. Da bi pa loterijo fural na C-jevem randomu ... mjah no :P
Drugače kako preveriti kvaliteto generatorja... dejansko ti bo statistični pristop dal osnovno merilo. Lej če izbiraš npr "realna" števila iz intervala (0,1), bi se moralo povprečje ustaliti pri 1/2 za dovolj veliko število ponovitev. V tvojem primeru bi to moralo biti število na približno polovici tvojega največjega števila.
Al pa simuliraš met kocke in se ti mora relativna frekvenca vsake številke 1,2,3,4,5,6 ustaliti pri 1/6. (moraš vodit 6x vsoto ...)
Drugače kako preveriti kvaliteto generatorja... dejansko ti bo statistični pristop dal osnovno merilo. Lej če izbiraš npr "realna" števila iz intervala (0,1), bi se moralo povprečje ustaliti pri 1/2 za dovolj veliko število ponovitev. V tvojem primeru bi to moralo biti število na približno polovici tvojega največjega števila.
Al pa simuliraš met kocke in se ti mora relativna frekvenca vsake številke 1,2,3,4,5,6 ustaliti pri 1/6. (moraš vodit 6x vsoto ...)
Zgodovina sprememb…
- spremenil: darkkk ()
kihc ::
To je sicer daleč od optimalnega algoritma, vzameš eno število in ga primerjaš z vsemi ostalimi, ko je neko število večje vzameš tistega in potem ponavljaš postopek dokler ne najdeš največjega.
Za malo bolj optimiziran način, si pa lahko pogooglaš quicksort.
Kar jaz vem je quicksort hitrejši samo pri iskanju k-tega elementa, pri max in min pa je kječjemu počasnejši. Qucksort ima povprečje O(n*logn), mediana median O(n). Če pa greš cez celo tabelo in iščeš min in max maš pa tud O(n). Tak da ne komplicirat kjer ni potrebe.
x
IronMan01 ::
Mhm, sem naredil in mi dela pravilno, le najmanjše število mi izpiše kot nič, drugace razumem celotno zadevo, sam ni mi jasno zakaj je stevec = stevec + 1 ??????? Izpiše mi tudi najmanjše generirano število in to je 0, ubistvo ga ne generira in izpiše na zaslon, ampak vseeno je na ekranu prvo nična in pod njej generirana števila, najbrž mi zato vrne najmanjše število kot 0 pri izpisu največjega nimam problema mi ga izpiše pravilno, ampak sem nastavil da je NajmanjseStevilo=RAND_MAX in NajvecjeStevilo=0, ker RAND_MIN ne obstaja
??
??
Zgodovina sprememb…
- spremenil: IronMan01 ()
Keki ::
Ni treba nastavlat največjega in najmanjšega na neko vrednost za katero domnevamo da se ne bo presegla, ker se nam bo slej ko prej zalomlo. Privzamemo da je prvi najmanjši, če je kateri od naslednjih manjši bodi najmanjši ta in isto za največjega.
Al pa izvedeš count sort, roman sort,abc sort oz kateregakoli ki teče v linearnem času(O(n)) in izpišeš prvi oz zadnji element polja.
psevdo za prvo bi zgledal nekak tak
polje n elementov
int min
int max
min = polje pri 0
max = polje pri 0
for i=1 to n
begin
if polje pri i > max
max = polje pri i
if polje pri i < min
min = polje pri i
end
izpis min, max
Al pa izvedeš count sort, roman sort,abc sort oz kateregakoli ki teče v linearnem času(O(n)) in izpišeš prvi oz zadnji element polja.
psevdo za prvo bi zgledal nekak tak
polje n elementov
int min
int max
min = polje pri 0
max = polje pri 0
for i=1 to n
begin
if polje pri i > max
max = polje pri i
if polje pri i < min
min = polje pri i
end
izpis min, max
http://www.alfakan.si/
http://mihajerot.si/
http://mihajerot.si/
Zgodovina sprememb…
- spremenilo: Keki ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [php] unique randomOddelek: Izdelava spletišč | 1206 (916) | Yacked2 |
» | programiranje krožek(pomoč)Oddelek: Pomoč in nasveti | 2754 (1742) | Marat |
» | C++ programOddelek: Programiranje | 1271 (1066) | klmen |
» | Programiranje C++Oddelek: Šola | 1603 (1409) | bi0s |
» | Varnost generatorjev naključnih številOddelek: Novice / Varnost | 6287 (6286) | Thomas |