|
|
- ## 4 Palindrominkokeilija
-
- **Tehtävä:**
-
- Luvun kuusi neljäs harjoitustehtävä on luoda ohjelma, joka testaa onko käyttäjän antama merkkijono palindromi, eli merkkijono, joka on etu- ja takaperin luettuna sama. Esimerkiksi "saippuakauppias" tai lause "Nalle vai Viivi Avellan?" ovat palindromeja, koska ne voidaan lukea samalla tavoin etu- ja takaperin.
-
- Tee siis ohjelma, joka pyytää käyttäjältä testattavaa lausetta kysymällä "Kirjoita testattava lause: " ja testaa syötteen, vastaten joko "[syöte] on palindromi." tai "[syöte] ei ole palindromi; se on väärinpäin [syöte väärinpäin].". Lisäksi, mikäli käyttäjän antama syöte on alle 5 merkkiä pitkä, annetaan virheilmoitus "[syöte] ei ole kelvollinen sana.". Lopuksi käyttäjältä vielä kysytään "Testataanko lisää? (k/e): ".
-
- Toteuta ohjelmasti siten, että palindromin tunnistus onnistuu epäsymmetrisesti asetelluista välilyönneistä ja isoista kirjaimista huolimatta. Välimerkkejä (!,?, : jne...) järjestelmän ei tarvitse tunnistaa; oletetaan että käyttäjä ei kirjoita niitä testisyötteisiin.
-
- Toimiessaan oikein ohjelma tulostaa seuraavaa:
-
- Example output:
-
- ```
- Kirjoita testattava lause: saippua
- saippua ei ole palindromi; se on väärinpäin auppias.
- Testataanko lisää? (k/e): k
- Kirjoita testattava lause: saippuakauppias
- saippuakauppias on palindromi.
- Testataanko lisää? (k/e): e
- ```
-
- **Vastaus**
-
- ```
- #!/usr/bin/env ruby
- # coding: utf-8
-
- def palindromi(syote)
-
- if syote.length < 5
- puts "#{syote} ei ole kelvollinen sana."
- return
- end
-
- syotecp = syote.downcase.gsub(" ", "")
-
- if syotecp == syotecp.reverse
- puts "#{syote} on palindromi."
- else
- puts "#{syote} ei ole palindromi; se on väärinpäin #{syote.reverse}."
- end
-
- end
-
- while true
- print "Kirjoita testattava lause: "
- palindromi(String(gets.chomp))
- begin
- print "Testataanko lisää? (k/e): "
- input = String(gets.strip.chomp)
- case input
- when "k"
- next
- when "e"
- Process.exit(0)
- else
- throw ArgumentError
- end
- rescue ArgumentError
- warn "Tuntematon valinta"
- retry
- end
- end
- ```
|