Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Potenssilasku

JPR [30.10.2012 15:43:26]

#

Pari(ehkä tyhmää) kysymystä tuli mieleen lukiessani tuosta C++-opasta kohdasta 3 - Ehdot, silmukat ja poikkeukset (kyseessä potenssilasku):

-Minkä takia tulos määritellään luvuksi 1?

-Missä kohdassa tarkalleen ottaen määritellään, että tuolla int i:llä kerrotaan tuo kantaluku (eikö tuo tulos *= kanta tarkoita samaa kuin tulos = tulos * kanta)?

#include <iostream>

int main() {
    double kanta;
    int eksponentti;
    std::cout << "Anna kantaluku ja kokonaiseksponentti." << std::endl;
    std::cin >> kanta >> eksponentti;

    // Lasketaan negatiivinen potenssi käänteisluvun avulla.
    // n**(-e) = (1/n)**e, missä ** on kertolasku
    if (eksponentti < 0) {
        eksponentti = -eksponentti;
        kanta = 1 / kanta;
    }
    double tulos = 1;
    for (int i = 0; i < eksponentti; ++i) {
        tulos *= kanta;
    }

    std::cout << "Potenssilaskun tulos on " << tulos << std::endl;
}

Metabolix [30.10.2012 15:55:55]

#

Koodissa lasketaan potenssilasku toistamalla silmukassa kertolaskua, kuten varmaan itsekin laskisit paperilla. Alkuarvo on 1, koska x⁰ on 1 (paitsi 0⁰, jota ei ole määritelty). Missään kohdassa ei ole tarkoitus kertoa mitään i:llä, vaan tietenkin kerrotaan aina kantaluvulla.

Ymmärrätkö paremmin tämän koodin?

double tulos = 1;
for (int i = 0; i < eksponentti; ++i) {
	std::cout << kanta << " potenssiin " << i << " on " << tulos << std::endl;
	tulos *= kanta;
}
std::cout << kanta << " potenssiin " << eksponentti << " on " << tulos << std::endl;

Nyt ohjelman toiminta voisi olla vaikka seuraava:

Anna kantaluku ja kokonaiseksponentti.
2 4
2 potenssiin 0 on 1
2 potenssiin 1 on 2
2 potenssiin 2 on 4
2 potenssiin 3 on 8
2 potenssiin 4 on 16

JPR [30.10.2012 16:46:05]

#

Kiitos vastauksesta, nyt alan ymmärtää hiukan paremmin..! Matematiikka sinänsä ei ole vieras käsite, mutta nuo koodit sekoittivat ajatukset pahasti kun yritin järkeillä niitä (enkä ole voinut jatkaa opasta eteenpäin ennenkuin tuo asia selkeni).

Vastaus

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

Tietoa sivustosta