Heissan!
Olen nyt muutaman päivän verran polkuopintojen kautta opiskellut itselleni uutta ammattia. Kokemusta ohjelmoinnista ei ole eli nollasta lähdetään.
Pythonilla olen lukenut että kannataa aloittaa, mutta koulun ohjaajalta neuvo oli kuitenkin Rubylla. Aloitin Rubylla ja nyt alan asiaa epäillä.
Matkani tyssää heti ensimmäisiin tehtäviin. Hyvä minä!
tehtävä:
Neljäs harjoitustehtävä käsittelee Rubyn erilaisia tapoja käsittää lukuarvoja sekä pyöristämistoimintoja. Tehtävänä onkin rakentaa ohjelma, jolle voidaan antaa mielivaltaisen mittainen desimaaliluku, jonka ohjelma pyöristää yhden desimaalin tarkkuuteen.
Toteutetaan ohjelma siten, että ohjelma aloittaa pyytämällä desimaalilukua muodossa "Anna jokin desimaaliluku: ". Tämän jälkeen ohjelma laskee pyöristetyn luvun, ja tulostaa "Luku on pyöristettynä [vastaus]".
Minä teen näin:
luku = rand(100) + rand print "Anna jokin desimaaliluku: " puts luku print "Luku on pyöristettynä " puts luku.round.to_f
kun joku muu osaa sen näin:
print "Anna jokin desimaaliluku: " input = gets.to_f rounded = input.round(1) print "Luku on pyöristettynä #{rounded}"
Kysymys on että esim. input = gets.to_f --> mistä minä keksin tarvitsevani input lisäyksen tai suorilteen koko input = gets.to_f ? Jos kysymyykseen pitäisi vastata ensimmäisen luvun perusteella niin ei siinä kyllä kaikkea selitetä. Turhauttaa opiskella sitten täysin uutta kun ei saa ideasta kiinni...mistä tiedän keksiä siis eri komentoja jos en tiedä mitä ne edes on?
Help!
jamsujuu kirjoitti:
print "Anna jokin desimaaliluku: " input = gets.to_f rounded = input.round(1) print "Luku on pyöristettynä #{rounded}"Kysymys on että esim. input = gets.to_f --> mistä minä keksin tarvitsevani input lisäyksen tai suorilteen koko input = gets.to_f ? Jos kysymyykseen pitäisi vastata ensimmäisen luvun perusteella niin ei siinä kyllä kaikkea selitetä. Turhauttaa opiskella sitten täysin uutta kun ei saa ideasta kiinni...mistä tiedän keksiä siis eri komentoja jos en tiedä mitä ne edes on?
Rubyssa on valmiiksi monenlaisia olioita, joilla on erilaisia metodeita.
Esim. gets lukee käyttäjän syötteen ja palauttaa merkkijono (string) olion.
String-objektilla on esimerkiksi metodi to_f, joka muuttaa merkkijonon liukuluvuksi ja palauttaa liukuluku-olion.
Liukuluku -objektilla taas sitten on metodi round, joka pyöristää luvun halutulle tarkkuudelle ja palauttaa pyöristetyn luvun (liukulukuolion tai kokonaislukuolion).
Se, että mitä metodeita milläkin kieleen rakennetulla luokalla on, löytyy dokumentaatiosta.
Ohjelmointi on yleisesti ottaen juuri sitä, että koitetaan selvittää millä käytettävissä olevilla työkaluilla saa aikaan toivotun lopputuloksen. Sitten opiskelun ja kokemuksen kautta oppii miten erilaisia asioita kannattaa tehdä.
Ohjelmoinnin alkeissa on kyse pitkälti siitä, että opittuja pieniä palasia yhdistetään oikeassa järjestyksessä. Aluksi ne palaset kerrotaan oppimateriaalissa, mutta kuten Grez sanoi, pitemmän päälle tietoa pitää oppia etsimään dokumentaatiosta tai muuten netistä.
Tehtävässä on kerrottu, mitkä palaset siihen tarvitaan: Pitää pyytää (käyttäjältä), eli tästä kohti pitäisi ”arvata”, että print ja gets ovat tarpeen. Pitää pyytää ”desimaaliluku” (oikeasti liukuluku), eli to_f on tarpeen. Muut palat sinulla olikin koossa eli round ja tekstin tulostus. Sitten nämä ratkaisun palaset yhdistetään oikeassa järjestyksessä. Muuttujien käyttö tässä tehtävässä on valinnaista, ja toisessa koodissa esiintyvä input voisi yhtä hyvin olla vaikka luku tai petteri, eli älä anna englanninkielisen nimen hämätä.
# Vähän muuttujia: print "Anna jokin desimaaliluku: " puts "Luku on pyöristettynä " + gets.to_f.round(1).to_s # Paljon muuttujia: print "Anna jokin desimaaliluku: " rivi = gets luku = rivi.to_f tulos = luku.round(1) tulostettava = tulos.to_s puts "Luku on pyöristettynä " + tulostettava
Jos sinulta puuttuivat nämä palaset, on varmaan kaksi vaihtoehtoa: kurssin materiaali on huono tai et ole lukenut sitä tarpeeksi tarkasti. Jos ongelma oli palasten yhdistämisessä ratkaisuksi, täytyy vain jatkaa tehtävien tekemistä ja kehittää tätä ajatusprosessia.
Googlaamalla sain käsityksen, että tekemäsi kurssi on ehkä Viope-kurssi, ja vuosien takaa oma käsitykseni eräistä Viope-kurssien materiaaleista on todella matala. Toki 10 vuodessa voisi olettaa myös jotain kehitystä tapahtuvan kurssien tasossa, mutta toisaalta tuon tehtävänannon epätarkkuudet eivät nosta toiveita. Jos tuntuu, että kurssilla on vaikea edistyä, suosittelen kokeilemaan rohkeasti jotain toista kurssia.
Ohjelmoinnin alkeisiin erittäin hyvä kurssi on Helsingin Yliopiston MOOC-keskuksen tarjoama Ohjelmoinnin perusteet. Siinä käytetään Pythonia, mutta jos suoritat kyseisen kurssin alkupuolen läpi, opit varmasti myös Ruby-kurssin kannalta hyödyllisiä asioita.
Hirmu hauska apuväline on myös tekoäly. Tietysti pitää olla tarkkana, että oppii myös itse asioita eikä vain kopioi vastauksia, mutta ainakin umpikujassa tekoälyltä voi saada vinkkejä ja sitten voi palata takaisin lukemaan materiaalista, oliko jokin näistä asioista mennyt ohi. Esimerkiksi ChatGPT myös selittää usein huolellisesti ratkaisun, joten sitä voi käyttää myös oikeasti oppimisen apuna.
ChatGPT kirjoitti:
Tässä on Ruby-ohjelma, joka toteuttaa harjoitustehtävän kuvaamallasi tavalla:
def round_to_one_decimal(num) rounded = num.round(1) puts "Luku on pyöristettynä #{rounded}" end print "Anna jokin desimaaliluku: " input = gets.chomp.to_f round_to_one_decimal(input)Tämä ohjelma määrittelee funktion round_to_one_decimal, joka ottaa parametrina desimaaliluvun ja pyöristää sen yhden desimaalin tarkkuuteen käyttäen round-metodia. Lopuksi tulostetaan pyöristetty luku.
Ohjelma pyytää käyttäjältä syötettä desimaalilukuna gets.chomp.to_f -rivillä. gets lukee käyttäjän antaman syötteen, chomp poistaa rivinvaihdon ja to_f muuttaa sen liukuluvuksi.
Voit suorittaa tämän Ruby-ohjelman komentoriviltä, ja se pyytää sinua antamaan desimaaliluvun ja tulostaa sen pyöristettynä yhden desimaalin tarkkuuteen.
Metabolix kirjoitti:
Ohjelmoinnin alkeissa on kyse pitkälti siitä, että opittuja pieniä palasia yhdistetään oikeassa järjestyksessä. Aluksi ne palaset kerrotaan oppimateriaalissa, mutta kuten Grez sanoi, pitemmän päälle tietoa pitää oppia etsimään dokumentaatiosta tai muuten netistä.
Netti ei ole aina pakollinen tiedonhakuun. Olen toisinaan opetellut suoraan lähdekoodista, mitä tietty funktio tekee. Ilmeisesti ainakin jotkut kokeneemmat ohjelmoijat tuntevat käyttämänsä ohjelmointikielen kirjastot niin hyvin, että eivät juuri käytä nettiä.
No on ne kokeneemmat ohjelmoijatkin joskus olleet aloittelijoita ja opetelleet.
Itse kun aloittelin ohjelmointia ei nettiä nykymuodossa vielä ollut, joten silloin piti lueskella kirjoja.
Minä olen aloitellut ohjelmoitntia SpekraVideo-aikoihin ennen Commdore 64:ää. Eli heti 80-luvulla ja silloin mitään internettiä ollut, joten piti lukea printatuista kirjoista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.