 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
andrelinoge Član


Pridružen-a: Sob 13 Nov 2004 1:43 Prispevkov: 63 Aktiv.: 0.27 Kraj: vse od Murske Sobote pa do Maribora
|
Objavljeno: Ned Dec 12, 2004 3:54 pm Naslov sporočila: programiranje in polja |
|
|
Imam majhno težavo iz programiranja in bi prosil, če mi lahko kdo, ki je bolj izkušen programer pomaga.
Težava pa je takšna......
pišem v c++ kjer sem definiral polje
char podatki [500] [50] ;
V to polje iz datoteke "fajl.txt" preberem vrstice (dosti vrstic brez presledkov napisanega besedila)
ifstream vhod("fajl.txt");
for (i=0;i<500;i++)
vhod.getline(podatki[i],50,'\n');
Če se ne motim imam zdaj polje v katerem je vsaka vrstica v datoteki shranjena v svoji vrstici polja.
Vrstice so torej razporejene v nekem vrstnem redu. In v vsaki vrstici so vmes neke številke, ki jih moram prebrati in obdelati. Ko to storim pa bi moral spremeniti vrstni red vrstic in spet obdelati. To bi moral storiti z vsemi ostalimi možnimi razporeditvami vrstic. Obdelati bi moral vse možne kombinacije.
Meni ne uspe stuhtati na kakšen način bi lahko pregledal vse možne kombinacije. Kako naj menjujem vrstice, da bom dobil vse kombinacije? Mislim, da bi bilo dobro, če bi namesto premetavanja teh vrstic raje ustvaril še eno polje, kjer bi bile le številke od 0 do 499 in bi potem tisto premetaval. To bi mi koristilo tudi pri samem obdelovanju podatkov iz vrstic.
Upam, da sem dovolj dobro opisal problem in če bo kdo imel kaj časa in idej, mi pomagal ter mogoče celo napisal program, se mu že vnaprej zahvaljujem za pomoč. |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Ned Dec 12, 2004 9:33 pm Naslov sporočila: |
|
|
Če tole mal pogledam na "uč" vidim, da maš definiranih 500 vrstic in 50 stolpcev. Mislim, da te ne razumem najbolje:
Citiram: |
Vrstice so torej razporejene v nekem vrstnem redu. In v vsaki vrstici so vmes neke številke, ki jih moram prebrati in obdelati. Ko to storim pa bi moral spremeniti vrstni red vrstic in spet obdelati. To bi moral storiti z vsemi ostalimi možnimi razporeditvami vrstic. Obdelati bi moral vse možne kombinacije. |
URG? Vse kar mi je popolnoma jasno je:
Citiram: |
Obdelati bi moral vse možne kombinacije. |
To pa narediš takole:
Koda: |
for(i=0; i<500; i++)
{
for(j=0; j<500; j++)
{
//obdelava [i][j]
}
//obdelava [i][j]
}
|
S tema dvema for zankama zaobjameš oz. "preletiš" vsa polja, ki jih imaš definirane. Še vedno mi pa ni jasno ali sem odgovoril na tvoje vprašanje... |
|
Nazaj na vrh |
|
 |
andrelinoge Član


Pridružen-a: Sob 13 Nov 2004 1:43 Prispevkov: 63 Aktiv.: 0.27 Kraj: vse od Murske Sobote pa do Maribora
|
Objavljeno: Pon Dec 13, 2004 8:43 pm Naslov sporočila: |
|
|
Mogoče res nisem bil ravno najbolj razumljiv...
Torej.. Če pokažem na majhnem primeru. Imam recimo v polju shranjene 3 stavke (do 50 črk)
prvi stavek
drugi stavek
tretji stavek
oz. na kratko
1
2
3
V stavkih so napisane tudi številke, ki jih preberem in z njimi nekaj izračunam. Nato pa bi moral enako izračunati še za ostale kombinacije stavkov. Torej še za...
1
3
2
in
2
1
3
in
2
3
1
in
3
1
2
in
3
2
1
Ne vem kako bi lahko menjaval te vrstice, da bi dobil vse možne kombinacije.
prosim še naprej za pomoč. |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Tor Dec 14, 2004 3:23 pm Naslov sporočila: |
|
|
Uou, se mi je zdelo, da ne more biti tako enostavno!
Če te prav razumem ti iščeš vse permutacije vrstic. Samo kot zanimivost: pri 500 vrsticah je teh permutacij 500! (število veliko 1177 znakov).
Nekaj sem se igral, vendar ne najdem "univerzalne" enačbe s katerimi bi pokril vse variante. Me pa prav zanima, kje boš to uporabil?
Bom pa še poizkušal, ker je problem kar zanimiv... |
|
Nazaj na vrh |
|
 |
andrelinoge Član


Pridružen-a: Sob 13 Nov 2004 1:43 Prispevkov: 63 Aktiv.: 0.27 Kraj: vse od Murske Sobote pa do Maribora
|
Objavljeno: Tor Dec 14, 2004 9:37 pm Naslov sporočila: |
|
|
Lepo lepo. Hvala za trud. Tudi mene malo skrbi, ker je tega res malo dosti... Upam, da mi ne bo treba računalnika pustiti cel teden, da bo vse skupaj poračunal
Vendar, če ti uspe stuhtati program, ki bi to naredil... potem lahko naredim le
Dosti sreče in dobrih idej ti želim.
Lep pozdrav. |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Sre Dec 15, 2004 1:44 am Naslov sporočila: |
|
|
Če si boš s tem kaj pomagal: Code Project
To je z moje strani vse. Nimam časa, da bi se še naprej ukvarjal s tem.
Oglej si tabelo bolj pri dnu strani!
Koda: |
Upam, da mi ne bo treba računalnika pustiti cel teden, da bo vse skupaj poračunal :D |
Algoritem na sekundo naredi 80640 permutacij. Ti pa bi jih imel, ummm... hja, nekako 500!
Preveč? |
|
Nazaj na vrh |
|
 |
Oliver Član

Pridružen-a: Sre 27 Okt 2004 13:36 Prispevkov: 39 Aktiv.: 0.16 Kraj: Ljubljana
|
Objavljeno: Čet Dec 16, 2004 5:17 pm Naslov sporočila: |
|
|
andrelinoge je napisal/a: |
Tudi mene malo skrbi, ker je tega res malo dosti... Upam, da mi ne bo treba računalnika pustiti cel teden, da bo vse skupaj poračunal
|
Cel teden?
Število možnih vrstnih redov je , kot je že bilo rečeno 500! ! Petsto s klicajem pomeni 500*499*498*...*3*2*1. Kot je že tudi bilo rečeno, je to cifra z zelo veliiiiiiiiko številkami. Po mojem je to prilbližno 10 na 1133-o potenco . Za primerjavo naj povem, da je ocena števila atomov v vidnem vesolju tam okoli 10 na 80-o potenco. Torej, če bi vsak atom v vesolju vseboval toliko manjših delcev, kot jih je v vesolju in vsak tak delec še toliko delčkov in to delitev ponoviš še desetkrat in bi potem vsak tak delčiček imel toliko računalnikov, kot je atomov v vesolju in bi vsak tak računalnik lahko izračunal v sekundi toliko vrstnih redov, kot je atomov v vesolju, no, potem bi imel rezultat že kar v eni sekundi.
Seveda pa bi potem rabil še kar nekaj časa, da bi to vse pregledal.
LP, Oliver |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Čet Dec 16, 2004 6:29 pm Naslov sporočila: |
|
|
Sem že rekel: to je število veliko 1177 znakov
Sledi, da je to kar bi ti rad naredil nemogoče.
Pojdi delat raje kaj drugega:  |
|
Nazaj na vrh |
|
 |
Oliver Član

Pridružen-a: Sre 27 Okt 2004 13:36 Prispevkov: 39 Aktiv.: 0.16 Kraj: Ljubljana
|
Objavljeno: Pet Dec 17, 2004 1:20 am Naslov sporočila: |
|
|
[quote="Umnik"]Sem že rekel: to je število veliko 1177 znakov
Od kod ti pa to? Število je namreč veliko 1135 znakov. Zadnjič sem napisal, da je število dolgo približno 10 na 1133-to. Narobe sem namreč po spominu prepisal izračun. Tvoja cifra se mi je pa le zdela malo prevelika, pa sem še enkrat preveril.
LP, Oliver |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Pet Dec 17, 2004 12:58 pm Naslov sporočila: |
|
|
Izračun je iz Mathematice 4.1.
Veš kaj? Pri takih številkah me niti ne zanima ali je 42 ničel premalo ali pa preveč...
Je pa sedaj vprašanje, kateri ima prav?  |
|
Nazaj na vrh |
|
 |
Oliver Član

Pridružen-a: Sre 27 Okt 2004 13:36 Prispevkov: 39 Aktiv.: 0.16 Kraj: Ljubljana
|
Objavljeno: Sob Dec 18, 2004 12:35 am Naslov sporočila: |
|
|
Umnik je napisal/a: |
Izračun je iz Mathematice 4.1.
Veš kaj? Pri takih številkah me niti ne zanima ali je 42 ničel premalo ali pa preveč...
Je pa sedaj vprašanje, kateri ima prav?  |
Tudi meni je vseeno, vsaj dokler je tako kakor pravim jaz.
Hm, morda Mathematica računa po približni Stirlingovi formuli, ampak da bi po tej dobil tako nenatančen odgovor .
Kakorkoli že, jaz sem potenco od 10 izračunal takole:
500! = 1*2*.........*499*500 // sedaj pa udarimo desetiški logaritem na obeh straneh
log(500!) = log(1*2*.........*499*500) // logaritem produkta je vsota logaritmov faktorjev, torej:
log(500!) = log(1) + log(2) +.......+log(499)+ log(500) // vsoto na desni izračuna calc (ali exel)
log(500!) = 1134,09 // po definiciji je x = 10 na (log(x)) zatorej:
500! = 10 na 1134,09
Da pa nebi bil v dvomu, sem po polemiki napisal še kratek turbopascal programček, ki pravi:
500! = 122013682599111006870123878542304692625357434280319284219241358838584
53731538819976054964475022032818630136164771482035841633787220781772004807852051
59329285477907571939330603772960859086270429174547882424912726344305670173270769
46106280231045264421887878946575477714986349436778103764427403382736539747138647
78784954384895955375379904232410612713269843277457155463099772027810145610811883
73709531016356324432987029563896628911658974769572087926928871281780070265174507
76841071962439039432253642260523494585012991857150124870696156814162535905669342
38130088562492468915641267756544818865065938479517753608940057452389403357984763
63944905313062323749066445048824665075946735862074637925184200459369692981022263
97195259719094521782333175693458150855233282076282002340262690789834245171200620
77146409794561161276291459512372299133401695523638509428855920187274337951730145
86357570828355780158735432768888680120399882384702151467605445407663535984174430
48012893831389688163948746965881750450692636533817505547812864000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000
Torej je Mathematica k 122 končnim ničlam dodala še 42 ničel
LP, Oliver |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Sob Dec 18, 2004 5:54 pm Naslov sporočila: |
|
|
Popolnoma prav imaš
Očitno sem naredil napako, ko sem zajemal rezultat. Mathematica doda na koncu vrstice še znak "\", ki ga prvič ko sem tole "računal" nisem upošteval in najbrž sem zajel tudi kakšen presledek... Se opravičujem.
Ampak si pa vztrajen, moram priznat. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 4 dni
Powered by phpBB © 2001, 2005 phpBB Group
|