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