Viestin lähetti Mike
Elikkä VB tietäjille olisi semmonen kyssäri, että onko VB:ssä jotain funktiota mikä järjestäisi esim. taulukkoon tallennetut muuttujat automaattisesti suurimmasta pienempään vai milläköhän keinolla tuo pitäisi hoitaa.
Vertailuoperaattoreilla saa kyllä helposti erotettua suurimman ja pienimmän pois, mutta siitä ei paljoa apua ole, kun pitäisi saada järjestykseen koko helahoito.
Demonstroin nyt vielä tähän, jos selitin turhan epäselvästi.
Laitetaan kaksialkioinen taulukko esim. (2,4), joka voisi paperilla näyttää vaikka tältä sen jälkeen kun käyttäjä on syöttänyt sinne arvot:
pekka 100
jukka 5000
kalle 67,5
matti 5001
elikkä kuinka helvetissä saan ohjelman tulostamaan nuo "paremmuus"järjestyksessä. Ilmeisesti tuo numeroalkio pitää iteroida, jos valmista funktiota ei VB:ssä ole, mutta millainen olisi se vertailu.*ittu kun ei meinaa taas välähtää, ei sitten millään..
en nyt ole kovinkaan hyvin näihin järjestely algoritmeihin tutustunut, mutta tämä tuli ihan omasta päästäni mieleeni - eikä varmasti ole sieltä tehokkaammasta päästä. En ole myöskään vb:llä koodannut, mutta koitan sitä selittää yleisellä tasolla.
Eli luot uuden samankokoisen taulukon, kuin se jonka haluat järjestää. Luot myös muuttujan, mihin tallennetaan taulukon sen hetikinen suurin arvo. Tämän jälkeen teet kaksi for-loopia, josta sisimmäinen käy järjestettävää taulukkoa läpi. Apumuuttujaan tallennetaan aina sen hetkinen suurin arvo, mitä verrataan kyseisen kohdan taulukon arvoon. Aina kun suurempi arvo löytyy, niin tallennetaan kyseinen taulukon kohta toiseen muuttujaan ja kyseinen arvo jo ennen mainittuun muuttujaan. Esim jos suurin arvo olisi kohdassa a[2][2], niin silloin muuttuja b = 2. Kun sisimmäinen loop on käyty kerran läpi, niin on tuossa apumuuttujassa sortattavan taulukon suurimman arvon kohta. Tämän jälkeen luetaan taulukosta tuo suurin arvo ja kirjoitetaan se siihen juuri luotuun uuten taulukkoon ja vanhaan taulukkoon laitetaan siihen kohtaan arvo -1 (tai jokin muu haluttu arvo, mikä kertoo, että kyseinen arvo on jo siirretty uuteen taulukkoon). Tämän jälkeen aloittaa myös ulommainen loop uuden kierroksen ja sama homma toistetaan. Tällöin tuohon uuden taulukon 2. arvoksi tulee luonnollisesti 2. suurin luku, jne.
esim. näin voisi javalla järjestää lottonumerot suuruusjärjestykseen (suurimmasta alottaen). Valitettavasti en vb:tä osaa, mutta toivottavasti tästä on jotain hyötyä sinulle
Koodi:
int[] numerot = new int[7];
// Tässä välissä arvottaisiin lotto-numerot ja alla alkaa niiden järjestely
int[] jarjestetytNumerot = new int[numerot.length()];
int suurinArvo;
int taulukonKohta;
for (int loop1 = 0; loop1 < numerot.length(); loop1++) {
suurinArvo = 0;
taulukonKohta = 0;
for (int loop2 = 0; loop2 < numerot.length(); loop2++) {
if (numerot[loop2] > suurinArvo) {
taulukonKohta = loop2;
suurinArvo = numerot[loop2];
}
}
jarjestetytNumerot[loop1] = suurinArvo;
numerot[taulukonKohta] = 0;
}
edit:
Tämä tapa tietenkin vaatii tietyn arvoalueen millä luvut ovat, jotta voit merkata jo nuo siirretyt solut siirretyiksi, jollain sopivalla arvolla. Tähän luonnollisesti kelpaa ainoastaan luvut, mitä taulukossa ei voi "luonnostaan" esiintyä. Tuossa esimerkissä arvo 0 sopii hyvin, koska lottonumeroa 0 ei ole olemassa. Mikäli haluat järjestää suurimmasta pienempään on tuon merkkiluvun oltava pienempi kuin pienin mahdollinen arvo, mitä taulukkoon voi tulla "luonnollisesti". Jos taas haluat järjestää luvut pienemmästä suurimpaan on taas luvun oltava suurempi, kuin yksikään taulukossa "luonnollisesti" esiintyvä luku.