Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: 2-3 ulotteisen taulukon järjestäminen

PaavoOR [12.03.2005 02:25:49]

#

Tämä ohjelmapätkä järjestää kolmiulotteisen taulukon suurimmasta pienimpään ja päinvastoin. Ohjelma on hyvin helppo kääntää mille kielelle tahansa. Oikeastaan ohjelman taulukko on vain osittain kolmiulotteinen, koska kolmatta ulottuvuutta ei järjestetä, vaan taulukko järjestetään sen yhden tiedon perusteella. Jos tarvitset kaksiulotteisen taulukon järjestelijää, ohjelmasta saa helposti sellaisen, poistamalla vain kaikki $g for lauseet ja yhden ulottuvuuden. Oikeastaan ohjelman idea on hyvin yksinkertainen, ja pätee useampiulotteisiinkin taulukoihin. Järjestettävät tiedot luetaan peräjälkeen taulukkoon, ja järjestetään, kuin yksiulotteinen taulukko. Pienimmästä suurimpaan järjestäminen ei tällä pätkällä ole tehokkain mahdollinen, koska mennään "mutkan kautta". Tämä koodipätkä on "irrallinen", eli sitä ei voi testata, kuin sijoittamalla jonkin oman ohjelman sisään. Toivottavasti tästä on hyötyä jollekin.

 //-----------------------------------------------------------------------
 //Järjestää kolmiuloitteisen taulukon kolmannen ulottuvuuden
 // arvon $no mukaan suurimmasta pienimpään ja pienimmästä suurinpaan.
 //Yhtäsuuri jäljempi arvo sijoitetaan taulukossa ensin suurimmasta
 // pienimpään järjestettäessä ja pienimmästä suurimpaan järjestettäessä
 //yhtäsuuri tulee jäljemmäksi. Jos vaihdat >= merkin kohdasta jossa kommentti
 //on <lue ohje ylhäältä> pelkäksi = merkiksi, ja toiseen <lue ohje ylhäältä>
 //kohtaan lisäät < merkin perään = yhtäsuuren arvon järjestys muuttuu
 //päinvastaiseksi
 //Muuttujat: $taulukko[$n][$k][$p] alkuperäinen taulukko
 //    $t2aulukko[$n*$k][$p] väliaikainen taulukko
 //    $at2[$n*$k][$p] väliaikainen taulukko
 //    $at[$n*$k][$p] lopullinen, suurimmasta pienimpään järjestetty taulukko
 //    $at3[$n*$k][$p] lopullinen, pienimmästä suurimpaan järjestetty taulukko
 //    $no alkuperäisen taulukon kolmannen ulottuvuuden muuttuja, jonka
 //      perusteella taulukko järjestetään.
 //    $no täytyy olla pienempi kuin $p, siis jotain nolla - ($p-1)
 //    $laskuri2 on laskuri, ja for lauseiden laskurit ovat $i, $j, $g, $h
 // Jos muutat tämän kielelle, missä taulukoille täytyy varata tila,
 // kaksiuloitteisten taulukoiden tilantarve on $at[$n*$k][$p]
 //-----------------------------------------------------------------------

//Kopioidaan kolmiulotteinen taulukko kaksiulotteiseksi
 for ($i=0;$i<$n;$i++) for ($j=0;$j<$n;$j++)
  for ($g=0;$g<$p;$g++) $t2aulukko[$j+$i*$n][$g]=$taulukko[$i][$j][$g];

//Järjestetään taulukko $at[][] suurimmasta pienimpään
 for ($i=0;$i<($n*$n);$i++) {
   for ($h=0;$h<($n*$n);$h++) {
   if ($t2aulukko[$i][$no]>=$at[$h][$no]) //lue ohje yltä
   break;
  }
   for ($j=$h;$j<$n*$n;$j++) {
    for ($g=0;$g<$p;$g++) $at2[$j+1][$g]=$at[$j][$g];
   }
   for ($g=0;$g<$p;$g++) $at[$h][$g]=$t2aulukko[$i][$g];
   for ($j=$h+1;$j<($n*$n);$j++) {
     for ($g=0;$g<$p;$g++) $at[$j][$g]=$at2[$j][$g];
   }
   if ($t2aulukko[$i][$no]<$at[$i-1][$no]) //lue ohje yltä
    for ($g=0;$g<$p;$g++) $at[$i][$g]=$t2aulukko[$i][$g];
  }


//Järjestetään taulukko $at3[][] pienimmästä suurimpaan
  $laskuri2=0;
  for ($i=$n*$n-1;$i>-1;$i--) {
   if ($at[$i][$no]==0) continue;
   for ($g=0;$g<$p;$g++) $at3[$laskuri2][$g]=$at[$i][$g];
   $laskuri2++;
  }

D.J-Dew [19.03.2005 19:53:08]

#

Ei varmaan ois kannattanu pistää php-tageja...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta