Eli olen jumissa PHP-haasteessa tehtävässä 9. Olen saanut Teuron ohjeilla (Olli oli näköjään myös tehnyt samanlaisen koodipätkän) tehtyä tämän koodipätkän:
<?php $vokaalit = array("a", "e", "i", "o", "u", "y", "ä", "ö"); $sana = strtolower($_REQUEST['sana']); $pituus = strlen($sana); $laskuri = 0; for($i = 0; $i < $pituus; $i++) { $kirjain = $sana[$i]; if(in_array($kirjain, $vokaalit)) { $laskuri += 1; } else { $laskuri = 0; } } echo $laskuri; ?>
mutta koodi heittää vain nollaa. Tämän viestin olen myös katsonut, mutta en ymmärtänyt tuota (ongelmaa tuotti se, että mikä $suurin -muuttujan arvoksi pitäisi laittaa, ja se, että mitä silmukan lopussa olevan ehtolauseen pitäisi tehdä.). Olisiko mitään vinkkiä, miten tästä pitäisi edetä?
Sinulla on toimiva laskuri, kuten voit huomata tulostamalla jo for-silmukassa sen arvoja. Nyt pitäisi enää ottaa suurin arvo talteen – tämän ymmärtäminen lienee tehtävän idea, joten enempää vinkkiä ei minusta voi antaa.
Ota kynä ja paperia ja leiki tietokonetta. Miten $laskuri muuttuu silmukan edetessä (ja miksi)? Milloin se sisältää oikean vastauksen? Miten tuon vastauksen saisi talteen?
Edit: Macron viesti alla on päin honkia, koska hän ei ilmeisesti tiedä, mitä tehtävässä kuuluu tehdä. Tarkoitushan ei ole laskea vokaalien kokonaismäärää vaan pisin yhtenäinen jono. Toistan: nykyisen koodin laskuri on jo aivan oikein toteutettu.
Nolla tulee, koska asetat laskurin nollaksi kun kirjain ei ole nolla. Jätä else-kohta pois.
Muokkaus. Vai, oliko tehtävän ideana saada tietoon, että montako vokaalia oli enimmillään peräkkäin?
Taidan alkaa tehdä tätä niin, että aina kun vokaalijono loppuu (suoritetaan else-lohko) laitetaan jono arrayhin. Sitten katsotaan erikseen, mikä arvo arraystä on pisin.
Tuo on yksi ratkaisu, mutta itse asiassa voit välttää taulukon käytön...
Nyt sain ratkaistua, tein sittenkin sillä pätkällä, minkä laitoin aloitusviestiin. Ratkaisu olikin sitten aika yksinkertainen, kun hetken mietti.
Kiitos.
Meinaatko Antti säännöllisiä lausekkeita? Mikäli tarkoitat, niin niillä tuo on melko helppo suoritus. Lähdekooditiedosto puristui 5 riviin sisältäen aloitus- ja lopetustagit.
Tarkoitin vain, että vokaalijonoista ei ole tarpeen tehdä uutta taulukkoa.
Miten tämä tehtävä ratkaistaan?
En halua valmiita scriptejä, vaan joitan vinkkejä miten kannattaa aloittaa, yritin ylläolevaa koodia, mutta en keksinyt miten se toimisi, luin myös kommentteja.
Osaako joku auttaa?
Se sinun olisi tarkoitus ratkaista itse. Tuossa on melkein toimiva koodinpätkä. Ainoa joka puuttuu on tosiaankin tuon pisimmän vokaalijonon pituus, jota tulee kuljettaa silmukan mukana.
Miten vokaalijono pysäytetään? Tällä hetkellä koodini laskee kaikki vokaalit sanasta, tai sitten se ei laske ollenkaan.
Miten pidät kirjaa pisimmästä vokaalijonosta, ja millä tavalla saat selville, onko jokin toinen jono pidempi kuin tällä hetkellä pisin? Miten itse tekisit sen vaikka paperille?
Tässä ketjussa on niin paljon vihjeitä jo, ettei enempää ole mielekästä antaa. Pohdi ja lue tätä keskustelua läpi niin kauan kunnes keksit ratkaisun. Selvitä myös rivi riviltä, mitä aloitusviestissä oleva koodipätkä tekee, ja ennen kaikkea miksi niin tehdään.
trilog kirjoitti:
Miten pidät kirjaa pisimmästä vokaalijonosta, ja millä tavalla saat selville, onko jokin toinen jono pidempi kuin tällä hetkellä pisin? Miten itse tekisit sen vaikka paperille?
Tässä ketjussa on niin paljon vihjeitä jo, ettei enempää ole mielekästä antaa. Pohdi ja lue tätä keskustelua läpi niin kauan kunnes keksit ratkaisun. Selvitä myös rivi riviltä, mitä aloitusviestissä oleva koodipätkä tekee, ja ennen kaikkea miksi niin tehdään.
Juu koetan tässä illalla selvittää tehtävä, kiitos vinkeistä.
Metabolix kirjoitti:
Nyt pitäisi enää ottaa suurin arvo talteen – tämän ymmärtäminen lienee tehtävän idea, joten enempää vinkkiä ei minusta voi antaa.
Mitenkäs tämä talteen otto kannattaisi tehdä? Taulukkomuotoon ilmeisesti, mutta siitähän tuli aika pitkä scripti, jos sen tekisi for- lauseella.
ihan yksinkertaista jos mietit hetken...
Aihe on jo aika vanha, joten et voi enää vastata siihen.