Hei, osaako joku opastaa seuraavan tehtävän kanssa:
Luvun toisessa tehtävässä tehdään laskuri, jolla lasketaan paljonko autolla ajaminen tulee maksamaan bensan hinnassa mitattuna. Pyydetään ensiksi käyttäjältä kaksi syötettä "Anna autolla ajetut kilometrit: " sekä "Anna bensanhinta: ". Tämän jälkeen käyttäjä voi valita, onko matka maantie- vai kaupunkiajoa valinnalla "Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: ".
Oletetaan, että käyttäjän auto kuluttaa 5 litraa bensiiniä sadalla kilometrillä jos matka ajetaan maantiellä, ja 9 litraa jos matka ajetaan kaupungissa. Kun lukemat on tiedossa, lasketaan vastaus kaavalla (bensanhinta*kulutus litroina*matka kilmetreinä) / 100.0, ja tulostetaan se muodossa "Matka maksoi [tulos] euroa.". Ilmoitetaan tulos desimaalien tarkkuudella, joskaan vastausta ei tarvitse erikseen pyöristää. Lopuksi kysytään käyttäjältä "Lasketaanko toinen matka? (k/e): ". Jos käyttäjä valitsee "k", aloitetaan alusta. Jos "e", lopetetaan. Ohjelmassa voidaan olettaa, että käyttäjä syöttää ainoastaan oikeita lukuarvoja ja valitsee ainoastaan kelvollisia vaihtoehtoja.
Toimiessaan oikein ohjelma tulostaa esimerkiksi seuraavaa:
Anna autolla ajetut kilometrit: 140 Anna bensanhinta: 1.44 Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: 2 Matka maksoi 18.144 euroa Lasketaanko toinen matka? (k/e)?: e
Tässä minun koodini, jota en saa toimimaan:
toista = true while toista print "Anna autolla ajetut kilometrit: ";km=gets print "Anna bensanhinta: "; bensahinta = gets print "Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: "; matka = gets #TÄSSÄ SE VIRHE ON, MITEN TÄMÄN SAA TOIMIMAAN if matka == 1 puts "Matka maksoi #{(bensahinta.to_f*5*km.to_f)/100.0} euroa" else puts "Matka maksoi #{(bensahinta.to_f*9*km.to_f)/100.0} euroa" print "Lasketaanko toinen matka? (k/e)?: "; toinen = gets; toinen.chomp! if toinen == "e" toista = false end end end
koodia111 kirjoitti:
Tässä minun koodini, jota en saa toimimaan:
... #TÄSSÄ SE VIRHE ON, MITEN TÄMÄN SAA TOIMIMAAN if matka == 1 puts "Matka maksoi #{(bensahinta.to_f*5*km.to_f)/100.0} euroa" ...
Ruby ei ole tuttu, mutta villi veikkaus: Yrität verrata merkkijonoa ja numeroa keskenään eikä Ruby tee automaattista muunnosta, vaan se jäisi sinulle tehtäväksi.
Aivan kuten jalski sanoo: teksti "1" ja luku 1 eivät ole sama asia. Vertailussa täytyy siis käyttää vain tekstejä tai lukuja. Tapauksessasi ongelma korjautuu helpoiten ykkösen ympärille lisättävillä lainausmerkeillä, mutta jossain muussa tilanteessa voisit tarvita myös metodeja to_i tai to_s.
puts [ "1" == 1, "1".to_i == 1, "1" == "1", "1" == 1.to_s ] # false, true, true, true
Hei, kiitos avuista ja tosiaan siinähän se ongelma olikin ja sain sen toimimaan, kun muutin matkan arvon "matka.to_i".
Aihe on jo aika vanha, joten et voi enää vastata siihen.