Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ruby: Ehtolause ei toimi toivotusti

koodia111 [07.04.2018 01:37:01]

#

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

jalski [07.04.2018 09:02:13]

#

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.

Metabolix [07.04.2018 09:23:51]

#

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

koodia111 [07.04.2018 21:30:31]

#

Hei, kiitos avuista ja tosiaan siinähän se ongelma olikin ja sain sen toimimaan, kun muutin matkan arvon "matka.to_i".

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta