Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Rajatun lukusarjan Summa (MOOC-tehtävä)

Sivun loppuun

f3rnand [30.09.2017 18:16:00]

#

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ä...)

Metabolix [30.09.2017 18:32:39]

#

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ä.

Grez [30.09.2017 21:30:26]

#

Itse käyttäisin

tulos = (mista + mihin) * (mihin - mista + 1) / 2

Mutta se ei varmaankaan ole harjoituksen tarkoitus :D

Jaska [01.10.2017 13:20:53]

#

Matematiikassa sarjassa on äärettömän monta summattavaa ( https://fi.wikipedia.org/wiki/Sarja_(matematiikka) ), kun taas jonossa termien määrä voi olla äärellinen ( https://fi.wikipedia.org/wiki/Lukujono ). Onko tuossa virhe, eli pitäisikö tutkia äärellisen lukujonon alkioiden summaa, vai onko tarkoitus tutkia sarjoja muotoa a+(a+1)+(a+2)+...+(a+n)+0+0+0+... ? En ole kuullut termiä rajattu sarja. Ehkäpä tehtävän laatija tarkoitti suppenevaa sarjaa.

Laittaisin palautetta tehtävän tekijälle, että muokkaisi tehtävän matemaattiset käsitteet kuntoon.

groovyb [01.10.2017 13:53:23]

#

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.

tkok [02.10.2017 15:22:18]

#

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): Mate­ma­tii­kassa sarjassa on äärettömän monta...

Sarjasta voi laskea summan aloittaen tietystä termistä ja päättäen toiseen termiin. Kyseessä ei ole sarjan summa.

TapaniS [03.10.2017 09:40:34]

#

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ä.

Grez [03.10.2017 14:00:57]

#

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.

TapaniS [04.10.2017 08:28:04]

#

f3rnand kirjoitti:

...
oon kirjoittanut alla olevan koodin, mutta ohjelma tulosta lukujen arvon (3*5=12)
...

No mikä muu merkitys *-merkillä on oheisessa yhteydessä?

Grez [04.10.2017 09:46:55]

#

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

TapaniS [05.10.2017 08:51:32]

#

Joo, tosiaan! Olin huolimaton, kun katsoin sen kertomerkiksi.


Sivun alkuun

Vastaus

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

Tietoa sivustosta