Terve. Olen opetellut vasta vähän aikaa php-ohjelmointia ja eteen on tullut ongelma. Eli tarkoitus on tehdä lomake, johon voi kirjoittaa lauseen/sanan ja kyseinen lause/sana tulee näkyviin takaperin eli palidromina.
Eli kirjoitan sanan ANNA textfieldiin ja painan Submit -näppäintä, niin sanan pitäisi ilmestyä takaperin jolloin se on ANNA. (Palidromi)
Kirjoitan sanan JEESUS textfieldiin niin tulee lukemaan SUSEEJ. (Ei ole Palidromi)
Miten saan tehtyä php-koodin joka toimii tällä tavoin???
Kiitos
PHP:ssa on tähänkin asiaan funktio, strrev.
Tosin lauseen kääntäminen takaperin ei (yleensä) palindromeja tee.
Siis eihän tuossa tarvitse tehdää mitään jos se on palindromi.
Tää on hyvä ohjelmoinnin perusharjotus. Kannattaa harjotuksen vuoks koittaa ratkasta ilman valmisfunktiota :)
Ja vinkkinä for ($i = count($sana); $i > 0; $i--) ;)
Strlen kuulostaisi mielestäni paremmalta funktiolta tähän kuin count. Vähäinen PHP-osaamiseni muistelisi että seuraava palauttaisi ykkösen sanan pituuden sijaan:
Lisäksi php:ssa alkaa indeksointi nollasta, ja strlen($sana) viittaisi yli tuosta sanasta. Lisäksi itse kävisin silmukalla läpi vain puolet sanan alkioista ja swappailisin eri päistä kirjaimia. Voihan toki olla että olet hakenut vain jotain erilaista ratkaisua jota en nyt ymmärrä.
EDIT: Ja jotta vastaisin alkuperäisellekin kirjoittajalle, niin voisin selventää mitä sinun kannattaa tehdä jotta saat sanasi käännettyä. En tiedä paljonko tiedät PHP-ohjelmoinnista, mutta seuraava koodinpätkä kertonee sinulle jotain:
<? $kaannettava = "sananen"; // muuttuja, joka sisältää itse sanan echo "$kaannettava[0],$kaannettava[1]\n"; // [numero] viittaa sanan numeronnenteen kirjaimeen, jossa indeksointi alkaa 0:sta ykkösen sijaan // sitten kirjaimien vaihto keskenään $toinen = "ab"; $piv = $toinen[0]; // tallennetaan ensimmäinen kirjain väliaikaismuuttujaan $toinen[0] = $toinen[1]; $toinen[1] = $piv; echo "$toinen\n"; // kääntö onnistui \o/ // huomioi väliaikaismuuttujan käyttö, sillä jos vaihto olisi tehty suoraan seuraavaan tyyliin: $toinen = "ab"; $toinen[0] = $toinen[1]; $toinen[1] = $toinen[0]; echo $toinen; // olisi merkkijonosta tullutkin "ba":n sijasta "bb". ?>
Huomaathan, että pitempien sanojen kääntäminen ei koodinpätkälläni onnistu, vaan joudut käyttämään silmukkarakennetta apuna.
EDIT2: Pistin tagit kuntoon
Kuten jo edellisellä viestilläni yritin vihjailla, niin mikäli tämä liittyy palindromeihin, niin pelkästä stringin kääntämisestä toisinpäin (joka onnistuu PHP:n valmiilla funktiolla) ei ole paljoa hyötyä.
Jos halutaan toteuttaa palindromitesteri, niin sitten teksti pitää kääntää ympäri ja verrata alkuperäiseen ja sanoa että "joo, hieno palindromi" jos se täsmää ja "ei nyt mennyt ihan putkeen" jos ei. Tässä kannattaa huomioida että yleensä palindromissa hyväksytään välilyöntien ja välimerkkien "siirtyminen" käännettäessä.
Eli siis esimerkiksi seuraava on OK
"Ella ja jano tuloo, sinä älykäs Atteni, aika huikan ööliä sai Taru Ratia säilöön, Aki U haki ainetta Säkylään, iso olut on ajajalle."
vaikka se onkin kääntäen
".ellajaja no tulo osi ,näälykäS attenia ikah U ikA ,nööliäs aitaR uraT ias äilöö nakiuh akia ,inettA säkylä änis ,oolut onaj aj allE"
Itse tekisin niin, että muuttaisin annetun merkkijonon pieniksi kirjaimiksi, poistaisin kaikki muut paitsi a-zåäö ja sitten katsoisin onko esim. $t sama kuin strrev($t).
Nyt en saa tota tekstifieldiä toimimaan, niin että siihen kirjoitettava sana kääntyy.. Eli käytin tota Strrev-komentoa..
Eli Dreamweaverilla laitoin siellä Desing puolella Formin, jonne lisäsin textfieldin ja buttonin. OK?
Eli tämmönen kutakuinkin pitäisi saada tehtyä
Mitä teit ja mikä meni pieleen?
Meni hermot ja löysin täältä valmiin palindromin tarkistajan, mutten saa sitä toimimaan..
Jos joku viitsisi vähän neuvoa..
<body> <form id="form1" name="form1" method="post" action=""> <p>Anna sana tai lause <label> <input type="textfield" name="teksti" id="teksti" /> </label> </p> <p> <label> <input type="submit" name="button" id="button" value="Paina" /> </label> </p> <p> </p> </form> <?php $teksti=$_POST['teksti']; function onko_palindromi($teksti) { $kirjaimet = "abcdefghijklmnopqrstuvwxyzåäö"; $teksti = strtolower($teksti); //muuttaa suuret kirjaimet pieniksi for ($i = 0; $i < strlen($teksti); $i++) { if (strstr($kirjaimet, $teksti[$i])) { $pelkät_kirjaimet .= $teksti[$i]; //echo $pelkät_kirjaimet; } } $käännetty = strrev($pelkät_kirjaimet); //kääntää kirjaimet käänteisiksi if ($pelkät_kirjaimet == $käännetty) { $onko_palindromi = TRUE; } else { $onko_palindromi = FALSE; } return array($tekst, strrev($tekst), $onko_palindromi); } $pal = $_GET["p"]; $tulokset = onko_palindromi($pal); if ($tulokset[2]) { //jos kyseessä on palindromi echo $tulokset[0] ."<br>"; //tulostetaan mahdollinen palindromi echo $tulokset[1] ."<br>"; //tulostetaan mahd. palindromi käännettynä echo "On palindromi!"; } else { echo $tulokset[0] ."<br>"; //tulostetaan mahdollinen palindromi echo $tulokset[1] ."<br>"; //tulostetaan mahd. palindromi käännettynä echo "Ei ole palindromi..."; } ?> </body>
Kiitos..
p.s eli en saanut tässäkään toimimaan tuota button-painiketta, mitään ei tapahdu kun tekstikenttään jotain kirjoittaa..
Mod. lisäsi kooditagit
Virhe löytyy näiltä riveiltä:
$teksti=$_POST['teksti']; // ... $tulokset = onko_palindromi($pal);
Chiman kirjoitti:
Virhe löytyy näiltä riveiltä:
$teksti=$_POST['teksti']; // ... $tulokset = onko_palindromi($pal);
Vai luuletko että rivi
AtteKoo kirjoitti:
<form id="form1" name="form1" method="post" action="">
olisi myös virheellinen. On toki totta, että tuossa koodissa on huomattavan paljon korjattavaa, jotta tuosta saisi toimivan.
Teuro kirjoitti:
Vai luuletko että rivi
AtteKoo kirjoitti:
<form id="form1" name="form1" method="post" action="">
olisi myös virheellinen.
Luuletko sinä? Minä en. Sen sijaan mainitsisin ehkä nämä rivit:
<input type="textfield" name="teksti" id="teksti" />
$pal = $_GET["p"];
Itse asiassa olen ollut siinä virheellisessä uskossa, että action kohdassa tulisi olla lomakkeen kohdetiedoston sijainti. Ilmeisesti pelkät lainausmerkit riittävät ilmoittamaan, että lomake käsitellään samassa tiedostossa.
Sitten jatkokehitystä:
Eikös ole mahdollista myös se, ettei palindromissa ole pakko olla välit samoissa kohdissa?
Esim. "Oi suullinen illuusio" on myös mielestäni palindromi, vaikkei tietääkseni se olekaan takaperin täysin sama: "oisuulli nenilluus iO".
Lebe80 kirjoitti:
"oisuulli nenilluus iO"
Mitä toi tarkottaa?
Matso: se on palindromi, jossa välilyönnit on vain takaperin eri kohdissa. Silti siinä lukee takaperin myös "oi suullinen illuusio".
Aihe on jo aika vanha, joten et voi enää vastata siihen.