Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP:n do-while-loopin toiminta

LCHawk [27.05.2014 15:24:43]

#

Seuraava koodi:

<?php
$mjono="MAALAISTALO";

function tarkasta($sana){
    if ($sana == strrev($sana)) {
        echo "1";
    }   else {
        echo "0";
    }
}

$alku=0;
$loppu=strlen($sana)-1;
$sana="";
$pituus=0;
$max=0;
do{
    $sana=substr($mjono,$alku,$loppu);
    //var_dump($sana);
    if(tarkasta($sana)===1){
        $pituus=$loppu-$alku;
    }
    if($pituus>$max){
        $max=$pituus;
    }
    $alku++;
    $loppu--;
}while($alku!=$loppu);

$alku=0;
$loppu=strlen($sana)-1;
$pituus=0;

do{
    $sana=substr($mjono,$alku,$loppu);
    if(tarkasta($sana)===1){
        $pituus=$loppu-$alku;
    }
    if($pituus>$max){
        $max=$pituus;
    }
    $alku++;
    var_dump($alku);
    //var_dump($loppu);
}while($alku!=$loppu);

$alku=0;
$loppu=strlen($sana)-1;
$pituus=0;

do{
    $sana=substr($mjono,$alku,$loppu);
    if(tarkasta($sana)===1){
        $pituus=$loppu-$alku;
    }
    if($pituus>$max){
        $max=$pituus;
    }
    $loppu--;
}while($alku!=$loppu);
echo $max;

var_dump($alku) alkaa aluksi neljä nollaa (siis 0000) ja sitten ykkösiä niin pitkään kunnes tulee aikakatkaisu. En ymmärrä, mikä maksaa? $alku++; pitäisi aina kasvattaa sen arvoa yhdellä, mutta se ilmeisestkin jotenkin nollaantuu?

Grez [27.05.2014 15:37:35]

#

Aika monta virhettähän tuossa on (äkkiseltään pisti silmään ainakin 5), mutta ikuisen loopin syy on lienee se että samanaikaisesti kasvatat alkua 1:llä ja pienennät loppua 1:llä ja ne eivät koskaan ole samat, jolloin looppisikaan ei koskaan pääty

Itse asiassa loopin ajokierroksilla arvot, joita vertaillaan taitaa olla seuraavat:

alku 1, loppu -2
alku 2, loppu -3
jne.

LCHawk [27.05.2014 15:45:45]

#

Jeps. Olimpa puusilmä. Muutin nyt niin, että läpikäydään niinkauan kuin $alku<$loppu.

-tossu- [27.05.2014 15:47:20]

#

Koodi tulostaa loputtomasti ykkösiä, koska tulostat niitä tarkasta-funktiossa ja ensimmäinen silmukka ei pääty koskaan. Toiseen silmukkaan asti ei koskaan edes päästä. Var_dump sitä paitsi tulostaisi myös muuttujan tyypin.

Haluat selvästi, että tarkasta-funktio palauttaa arvon. Käytä siis returnia ja ota myös selvää, mitä eroa on koodeilla if("1"==1) sekä if("1"===1). Samalla kannattaa manuaalista tarkistaa, miten substr-funktio toimii ja miten kaikki virheilmoitukset saa päälle.

Koska kyseessä on PHP-haasteen tehtävä, saat itse miettiä, mikä vika itse hakualgoritmissa on.

Vastaus

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

Tietoa sivustosta