Tehtävä:
Luvun neljännessä tehtävässä tehdään jälleen ainakin jollain tapaa hyödyllinen ohjelma. Tällä kertaa ohjelman tehtävänä on lukea käyttäjän antama tekstisyöte ja muuttaa se Morse-koodiksi.
Ohjelmaa varten on luotu tiedosto 8-4_tiedosto.txt, joka sisältää kaikki englanninkielen aakkosten Morse-aakkoset muodossa [kirjain]:[morsekoodi] \n [kirjain]:[morsekoodi]\n jne...
Tiedosto sisältää kaikki aakkoset väliltä A-Z. Tehtävänäsi on siis luoda ohjelma, joka pyytää käyttäjältä syötteen muodossa "Kirjoita muutettava lause: " ja tämän jälkeen taulukoiden ja merkkijonojen metodeja apuna käyttäen muuttaa käyttäjän syötteen merkki merkiltä kirjainta vastaavaksi morsekoodiksi, erotellen morsekoodimerkit toisistaa "/"-merkillä.
Toimiessaan oikein ohjelma tulostaa seuraavaa:
Example output:
Kirjoita muutettava lause:
ohjelmointi
Morse-koodina vastaava on seuraavaa:
/---/..../.---/./.-../--/---/../-./-/..
Vastaus
#!/usr/bin/env ruby
# coding: utf-8
morseTiedosto = "8-4_tiedosto.txt"
$_jakajaMerkki = ":"
def morseKaantaja(aakkoset)
morseTeksti = ""
puts "Kirjoita muutettava lause: "
syote = String(gets.chomp).gsub(/[^a-zA-Z]/,"").upcase.split("")
for i in syote
morseTeksti += "/" + aakkoset[i]
end
puts "Morse-koodina vastaava on seuraavaa:\n#{morseTeksti}"
end
def aakkosetMap(tiedosto)
taulukko = {}
if File.readable?(tiedosto)
linenum = 1
File.foreach(tiedosto) do |line|
# On hyvä tarkistaa, että sisäänluettavan tiedoston tämänhetkinen
# rivi on oikean pituinen. Muussa tapauksessa rivi ohitetaan.
if line.split($_jakajaMerkki).length == 2
aakkonen = line.split($_jakajaMerkki)[0]
morse = line.split($_jakajaMerkki)[1].chomp
if aakkonen.length != 1
warn "Merkki '#{aakkonen}' ei ole kelvollinen aakkonen"
next
end
taulukko.merge!(Hash[aakkonen, morse])
else
warn "Havaittiin viallinen syntaksi rivillä #{linenum}. Ohitetaan rivi."
end
linenum += 1
end
end
return taulukko
end
morseKaantaja(aakkosetMap(morseTiedosto))
Tiedosto 8-4_tiedosto.txt:
A:.-
B:-...
C:-.-.
D:-..
E:.
F:..-.
G:--.
H:....
I:..
J:.---
K:-.-
L:.-..
M:--
N:-.
O:---
P:.--.
Q:--.-
R:.-.
S:...
T:-
U:..-
V:...-
W:.--
X:-..-
Y:-.--
Z:--..