Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ongelmia koodissa

MR94 [22.04.2022 15:12:12]

#

Hei olen saanut ulkonäöllisesti koodin oikein, mutta itse toiminta eli tulostus ei toimi. Harmi kun en tähän kuvaa saa koodista. Mutta tässä tarkennus:

Tee ohjelma Helsinki - Rovaniemi -junalipun hinnan määrittämistä varten. Matkalipun hinta määräytyy siten, että ensimmäisen luokan menolippu maksaa 140,61 euroa, toisen luokan menolippu puolestaan 86,10 euroa. Meno-paluu –lippujen hinnat ovat kaksi kertaa menolipun hinta.

Opiskelijat ja eläkeläiset saavat toisen luokan liput puoleen hintaan. Lisäksi asiakkaan pitäisi voida ostaa kerralla monta samanlaista lippua.

Syöttötietoina annetaan siis matkustusluokka, matkustajien lukumäärä ja yhden vai kahdensuuntainen matka sekä tieto mahdollisesta alennuksesta. Tietojen syöttö pitäisi olla käyttäjälle mahdollisimman helppo. Tulostietona ohjelma tulostaa lippuostoksen kokonaishinnan.

Metabolix [22.04.2022 15:43:17]

#

Maailmassa on useita ohjelmointikieliä ja -ympäristöjä, joissa oikea ratkaisu voi olla hyvin erilainen. Eli apua pyytäessä kannattaa kertoa, millä kielellä ja millaiseen ympäristöön ohjelma tulee.

Koodin ulkonäöllä ei ole varsinaisesti merkitystä, eli millähän tavalla olet ”saanut ulkonäöllisesti koodin oikein”? Tai toisin päin voisi sanoa, että jos koodi näyttää oikealta, niin silloinhan sen pitää olla oikein, koska koodissa ei ole mitään näkymättömiä ominaisuuksia.

Koodista ei kannata juuri koskaan laittaa kuvaa, vaan koodi kannattaa laittaa tekstinä, niin sitä on helpompi kopioida ja muokata. Kai osaat tietokoneella kopioida ja liittää tekstiä ja laittaa keskustelun ohjeen mukaiset merkinnät (ns. kooditagit) sen ympärille.

Esimerkiksi Pascalilla tuo ohjelma onnistuisi hyvin näin (ilman virheellisen syötteen tarkastamista):

program Matkaliput;
var luokka, menopaluu, alennus, lippuja, hinta: LongInt;
begin
  writeln('Matkalippulaskuri.');
  writeln('Syötä 1 tai 2 matkustusluokaksi.');
  readln(luokka);
  writeln('Syötä 1 (meno) tai 2 (meno-paluu).');
  readln(menopaluu);
  writeln('Syötä 1, jos olet eläkeläinen tai opiskelija, muuten 0.');
  readln(alennus);
  writeln('Syötä lippujen määrä.');
  readln(lippuja);

  if luokka = 1 then hinta := 14061
  else if alennus = 1 then hinta := 8610 div 2
  else hinta := 8610;
  hinta := hinta * menopaluu * lippuja;
  writeln('Lippujen hinta: ', hinta div 100, ' e ', hinta mod 100, ' snt');
end.

MR94 [25.04.2022 09:49:42]

#

JavaScriptillä pitäisi saada

<font color="blue"><h2>Lippuautomaatti</h2></font>
2.luokka
<input type="radio" name="luokka" id="2.luokka" checked><br>
1.luokka
<input type="radio"  name="luokka" id="1.luokka">
<br/><br/>

Meno:
<input type="radio" name="matka" id="meno" checked><br>
Meno-paluu:
<input type="radio"  name="matka" id="menopaluu">
<br/><br/>

Alennus <input type="checkbox" id="alennus">
<br/><br/>

Lippuja (kpl):
<select id="lippu">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
</select>

<button onclick="tulostaTilaus()">Osta</button>
<br/><br/>
<div id="tulostusAlue"></div>
<script>
"use strict";

//Tulostetaan osto.
function tulostaTilaus() {
	//select-listan arvo
	var lippu = document.getElementById("lippu").value;
	//jos valittu radio-button luokka
	if(document.getElementById("lippu" && "1.luokka" && "meno").checked) {
		var luokka = "Kokonaishinta: 140,61€";
    }
    else if(document.getElementById("lippu" && "1.luokka" && "menopaluu").checked {
        luokka = "Kokonaishinta: 281,22€"
    }
    else if(document.getElementById("lippu" && "2.luokka" && "meno").checked {
        luokka = "Kokonaishinta: 86,10€"
    }
    else if(document.getElementById("lippu" && "2.luokka" && "menopaluu").checked {
        luokka = "Kokonaishinta: 172,20€"
    }//jos checkbox-ruksi
	else (document.getElementById("lippu" && "2.luokka" && "meno" && "alennus").checked) {
		var alennus = "Kokonaishinta: 43,05€";
	else if(document.getElementById("lippu" && "2.luokka" && "menopaluu" && "alennus").checked {
        alennus = "Kokonaishinta: 86,10€"


	}
	//Tulostus
	document.getElementById("tulostusAlue").innerHTML = ;
}
</script>

Metabolix [25.04.2022 20:23:39]

#

Tuossa ei mene nyt edes sulkujen määrä tasan, ja getElementById ei toimi noin usealla elementillä.

Mitä jos tekisit ensin vaikka ohjelman, jossa nappia painamalla ilmestyy jokin vakiohinta. Saisit edes siinä sulut kohdalleen ja tuloksen näkyviin. Sitten voisit lisätä lippujen määrän ja lopuksi niitä muita valintoja. Valintojen huomioimisesta on selvä esimerkki edellä, voit soveltaa samaa logiikkaa helposti JavaScriptiin: ensin lasketaan valintojen mukaan oikea hinta ja sitten kerrotaan se lippujen määrällä.

noutti [29.04.2022 08:31:24]

#

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <style>
      input {
        display: block;
      }
      label {
        display: block;
      }
    </style>
    <title>Static Template</title>
  </head>
  <body>
    <h1>Helsinki - Rovaniemi</h1>
    <label>From</label>
    <select id="from">
      <option value="helsinki">Helsinki</option>
      <option value="rovaniemi">Rovaniemi</option>
    </select>
    <label>To</label>
    <select id="to">
      <option value="helsinki">Helsinki</option>
      <option value="rovaniemi">Rovaniemi</option>
    </select>
    <label>Class</label>
    <select id="class">
      <option value="first">First</option>
      <option value="second">Second</option>
    </select>
    <label>Include return</label>
    <input type="checkbox" id="include_return" />
    <label>Number of seats</label>
    <input type="number" id="number_of_seats" min="0" />
    <button onclick="onSubmit()">
      Count
    </button>
    <h2 id="total_price"></h2>
    <script>
      const FROM = "from";
      const TO = "to";
      const CLASS = "class";
      const FIRST = "first";
      const SECOND = "second";
      const INCLUDE_RETURN = "include_return";
      const NUMBER_OF_SEATS = "number_of_seats";
      const TOTAL_PRICE = "total_price";

      const prices = {
        [FIRST]: 86.1,
        [SECOND]: 140.61
      };

      function getValueWithKey(key) {
        return document.getElementById(key).value;
      }

      function getValueWithkeyFromCheckbox(key) {
        return document.getElementById(key).checked;
      }

      function fillTotalPriceValueByNumber(number) {
        document.getElementById(
          TOTAL_PRICE
        ).innerText = `Total price: ${number.toFixed(2)}€`;
      }

      function onSubmit() {
        let total_price = 0;
        const _class = getValueWithKey(CLASS);
        const _from = getValueWithKey(FROM);
        const _to = getValueWithKey(TO);
        const _include_return = getValueWithkeyFromCheckbox(INCLUDE_RETURN);
        const _number_of_seats = getValueWithKey(NUMBER_OF_SEATS);
        if (!_number_of_seats) {
          return window.alert("You must book some seats");
        }
        if (_from === _to) {
          return window.alert("From and to must include different values");
        }
        if (!_class) {
          return window.alert("Error while tryint to get a class");
        }
        if (!prices[_class]) {
          return window.alert("Error while trying to find a price");
        }
        total_price = prices[_class];
        if (_include_return) {
          console.log(_include_return);
          total_price = total_price * 2;
        }
        total_price = total_price * _number_of_seats;
        return fillTotalPriceValueByNumber(total_price);
      }
    </script>
  </body>
</html>

about näin

Vastaus

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

Tietoa sivustosta