(H) Lukusarjoja vektorissa

Tavoite: Opin STL:n säiliöiden perusajatuksen käyttämällä vektoria pienten operaatioiden toteuttamiseen. Lisäksi harjoittelen erilaisia tapoja käyttää C++:n toistorakenteita (for-silmukkaa).

Ohjeita: Hae ohjelmakoodipohja: templates/04/container/ -> student/04/container/.

Muistutus

Huomasithan lukea edellisen kierroksen lopusta (tai valikosta vasemmalta “Uusien koodipohjien haku”) miten toimia, jotta saisit uudet myöhemmin julkaistut koodipohjat käyttöösi.

Ohjelmakoodipohjassa on valmiina pääohjelma, jossa käytetään kokonaislukuvektoria. Toteuta funktiot, joita pääohjelmassa kutsutaan. Pääohjelmaa ei saa muuttaa.

Funktio print_integers on toteutettu valmiiksi.

Funktio read_integers on osittain toteutettu. Jatka toteutus valmiiksi. Funktio antaa käyttäjän syöttää niin monta lukua kuin jälkimmäinen parametri määrää, ja tallentaa luvut ensimmäisenä parametrina olevaan vektoriin. (HUOM! Pohdi myös, miksi tehtävänannon laatija on päättänyt välittää vektorin parametrina eikä paluuarvona.)

Funktio same_values palauttaa totuusarvon, joka kertoo, ovatko kaikki vektorissa olevat luvut samoja.

Funktio is_ordered_non_strict_ascending palauttaa totuusarvon, joka kertoo, ovatko vektorissa olevat luvut ei-tiukassa nousevassa suuruusjärjestyksessä (identtiset arvot sallitaan).

Funktio is_arithmetic_series palauttaa totuusarvon, joka kertoo, muodostavatko vektorissa olevat luvut aritmeettisen lukusarjan. (Sarja on aritmeettinen, jos sen peräkkäisten termien erotus on vakio.)

Funktio is_geometric_series palauttaa totuusarvon, joka kertoo, muodostavatko vektorissa olevat luvut geometrisen lukusarjan. (Sarja on geometrinen, jos sen peräkkäisten termien suhdeluku on vakio. Kokonaislukusarjalla tämä suhdeluku on rationaaliluku, jolloin pelkistä nollista koostuvaa sarjaa ei pidetä geometrisena.)

Funktio triple_integers kolminkertaistaa vektorissa olevat luvut.

Esimerkki ohjelman toiminnasta:

How many integers are there? 4
Enter the integers: 1 2 4 8
All the integers are not the same
The integers are in a non-strict ascending order
The integers do not form an arithmetic series
The integers form a geometric series
Tripled values: 3 6 12 24

Vinkkejä tehtävän tekemiseen:

  • Mieti, millainen for-lause parhaiten sopii kuhunkin funktioon.
  • Osittain valmiiksi toteutetussa read_integers-funktiossa on demonstroitu yksinkertaisin mahdollinen tapa lukea useita kokonaislukuja C++:ssa. Kannattaa kuitenkin huomata, että kun syöttöoperaattori >> ohittaa kaiken tyhjän tilan käyttäjän syötteessä, niin myöskin rivinvaihdot ohitetaan. Voit testata ohjelmaa myös siten, että syötät jokaisen kokonaisluvun omalle rivilleen.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.