Vinkkejä kaivataan :)
Tehtävä: Tee ohjelma joka laskee käyttäjän annettujen lukusarja summan:
Esim. luku1: 3 luku2: 5 Summa = 3+4+5=12
Ensimmäinen: 3
Toinen: 5
Summa on: 12
oon kirjoittanut alla olevan koodin, mutta ohjelma tulosta lukujen arvon (3*5=12)
import java.util.Scanner; public class RajatunLukusarjanSumma { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); int summa =0; System.out.println("Ensimmäinen: "); int mista = lukija.nextInt(); System.out.println("Toinen: "); int mihin = lukija.nextInt(); while(mista <= mihin) { break; } for(int e = 1; e <=mihin; e++) { summa += mista; } System.out.println("Summa on " +summa); } }
(Mod. huom: Vielä on harjoiteltavaa kooditagien käytössä...)
Lue koodisi rivi kerrallaan ja mieti, mitä siinä tapahtuu. Mitä kuvittelet while-silmukan tuossa tekevän? Mistä luvusta arvelet for-silmukan nyt alkavan? (Vinkki: ei ala mista-luvusta.) Mikä luku for-silmukan sisällä tulee lisätyksi summaan? (Vinkki: ei ainakaan silmukan laskuriluku.) Nykyisessä yrityksessä ei siis ole päätä eikä häntää.
Tee silmukka, joka käy läpi luvut lukuväliltä mistä mihin. Tähän riittää yksi silmukka, joka yleensä on for-silmukka. Voit kokeeksi vaikka tulostaa luvut silmukassa, jotta näet, toimiiko ohjelma siltä osin oikein. Sitten lisää silmukassa summaan aina nykyinen luku. Lopuksi tulosta summa.
Jos tämä tuntuu kovin vaikealta, kannattaa lukea vielä uudestaan kurssin oppimateriaalia, jossa varmasti kerrotaan esimerkiksi for-silmukan käytöstä.
Itse käyttäisin
tulos = (mista + mihin) * (mihin - mista + 1) / 2
Mutta se ei varmaankaan ole harjoituksen tarkoitus :D
Matematiikassa sarjassa on äärettömän monta summattavaa ( https://fi.wikipedia.org/wiki/Sarja_
Laittaisin palautetta tehtävän tekijälle, että muokkaisi tehtävän matemaattiset käsitteet kuntoon.
tehtävänanto tuskin liittyy matemaattisiin termeihin, vaan ohjelmalliseen, joskin epäselvään. eli laske yhteen arvot lukusarjasta, indeksien foo ja bar välillä (rajatusti, ei lukusarjan kaikkia arvoja). Otsikko tosin viittaa ihan johonkin muuhun, mitä OP on tehtävään kirjoittanut viestissään.
Ontopic:
Metabolixin vinkki printtien lisäämisestä on hyvä, kun tiedät virheen olevan laskutavassa. Lisää for loopin sisälle printti, joka kertoo mitä alkiota olet lisäämässä summaan ja summan arvon.
Offtopic:
Jaska kirjoitti:
(01.10.2017 13:20:53): Matematiikassa sarjassa on äärettömän monta...
Sarjasta voi laskea summan aloittaen tietystä termistä ja päättäen toiseen termiin. Kyseessä ei ole sarjan summa.
Kysymyksessä oli muuten yksi virhe, 3x5 on 15 (ei 12). Olisi mukava kuulla, miksi teet näitä MOOC-tehtäviä. Ilmeisesti jokin pakollinen kurssi, joka vaan pitää saada läpi?
Sun pitää siis lisätä summaan aina luku, joka kasvaa yhdellä, tässä tapauksessa se on tuo e, joka on laskuriluku. Alku ja loppu vaan kohdilleen, niin se on siinä.
Eihän siinä puhuttu mitään kertolaskusta, vaikka tietty ohjelmoijalle * voi näyttää kertomerkiltä :D. Oikea vastaus (kokonaisulukujen summalle [3,5] välillä) on 12.
f3rnand kirjoitti:
...
oon kirjoittanut alla olevan koodin, mutta ohjelma tulosta lukujen arvon (3*5=12)
...
No mikä muu merkitys *-merkillä on oheisessa yhteydessä?
TapaniS kirjoitti:
f3rnand kirjoitti:
...
oon kirjoittanut alla olevan koodin, mutta ohjelma tulosta lukujen arvon (3*5=12)
...No mikä muu merkitys *-merkillä on oheisessa yhteydessä?
Ilmeisesti samantyylinen kuin asteriskimerkki esim. jokerimerkkinä tiedostoja listattaessa. Eli välissä olevat merkit (numerot) korvataan *:llä. Esim. 3+4+5 -> 3*5, 2+3+4+5+6+7+8 -> 2*8
Joo, tosiaan! Olin huolimaton, kun katsoin sen kertomerkiksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.