Ruby fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

2.5 KiB

4 Morse-koodaaja

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:--..