2.2.7 Aritmeettinen lauseke

C++-kielessä on määritelty seuraavat aritmeettiset operaatiot:

Operaatioiden suoritusjärjestys on totuttu (ensin kerto- ja jakolasku, sitten yhteen- ja vähennyslasku) ja normaalin laskujärjestyksen voi ohittaa kaarisuluin ryhmittelemällä:

3+4*5
3*(4+5)

Huomattavaa on, ettei C++ tarjoa valmista operaattoria potenssiin korotusta varten.

Perussääntönä aritmeettisissa operaatioissa on, että jos molemmat operandit ovat saman tyyppisiä, on myös tulos kyseistä tyyppiä. Siten summan

4+5

tulos on kokonaisluku 9, mutta summan

4.0+5.0

tulos on liukuluku 9.0.

Erityisesti on huomattava, että kahden kokonaisluvun jako-operaatiossa tuloksena on kokonaisluku, eli tällöin suoritetaan kokonaisjako.

Näin ollen osamäärän

5/2

arvoksi saadaankin yllättäen tasan 2, kun taas osamäärän

5.0/2.0

arvoksi tulee 2.5.

2.2.7.1 Kääntäjä suorittaa muunnoksia

Jos operaation toinen operandi on liukuluku ja toinen kokonaisluku, menetellään siten, että kokonaisluku muunnetaan automaattisesti liukuluvuksi ennen operaation suoritusta, joten varsinaisessa operaatiossa on kaksi liukulukua. Näin ollen tulos on liukuluku. Kääntäjä suorittaa muuntamisen itse, käyttäjän ei tarvitse siitä huolehtia. Käyttäjän tulee kuitenkin tietää, että kone suorittaa tällaista muuntamista. Muutoin tulee ennemmin tai myöhemmin eteen tilanne, jossa ihmetellään saatuja tuloksia. Siten lausekkeet

5/2.0 ja 5.0/2

molemmat antavat tulokseksi 2.5.

2.2.7.2 Etumerkkioperaatio

Lisäksi on määritelty etumerkkioperaatio -. Jos muuttujat i ja j ovat kokonaislukumuuttujia ja j:n arvo on 12, sijoituksen

i = -j;

jälkeen muuttujan i arvo on -12.

2.2.7.3 Modulo

Kokonaisluvuille on määritelty myös modulo-operaatio %. Tämä operaatio palauttaa kokonaisjaon jakojäännöksen, eli operaation

14%5

arvoksi saadaan 4.

2.2.7.4 ++ ja -- operaattorit

Ykkösen lisääminen tai vähentäminen muuttujan arvoon voidaan C++-kielessä suorittaa lyhyesti ++ tai-- operaatioilla, siis lause

i++;  // sama kuin i = i + 1;

lisää muuttujan i arvoa yhdellä ja

i--;  // sama kuin i = i - 1;

vähentää i:n arvoa yhdellä.

2.2.7.5 Esimerkkiohjelma

Käydään läpi tähän mennessä opittuja asioita esimerkin avulla. Ohjelmassa on kommentein kerrottu eri ohjelmakohtien ja lauseiden merkityksestä. Tällaista ylikommentointia ei omissa ohjelmissa tietenkään käytetä. Ohjelman lukijasta oletetaan (tavallisesti), että hän hallitsee C++-kielen, joten kaikki tyyppiä "tässä määritellään muuttuja" olevat kommentit voidaan omissa ohjelmissa unohtaa. Kommentein kerrotaan, mitä ohjelma tekee ja millä menetelmällä, eikä miten se on ohjelmoinnin kannalta toteutettu.

/* *********************************************************
ESIM1.CPP
  Alkukommentti kertoo mm. ohjelman tekijän, päivämäärän ja
  lyhyesti mitä ohjelma tekee. Kommentit eivät vaikuta
  mitenkään ohjelman toimintaan. Kurssilla ohjelma ilman
  kommentteja ei kuitenkaan "toimi".
  Luotu:    05.08.1993, Markku Malinen
  Muutettu: 15.09.1995, Tarmo Hyttinen
            24.04.1997, Timo Männikkö
  Toiminta: Laskee yhteen matkoja.
********************************************************* */

#include <iostream.h> // kirjasto, jossa määritelty mm. cout

int main(void) // pääohjelma
{
  int alkumatka = 10, loppumatka; // muuttujien määrittelyt
  int kokomatka;                  // alkumatka alustetaan, muita ei
  double tuplamatka;

  loppumatka = 15;                    // sijoitetaan vakioarvo
  kokomatka = alkumatka + loppumatka; // sijoitetaan aritmeettisten
  tuplamatka = 2.0*kokomatka;         //  lausekkeiden arvoja

  cout << "Edestakainen matka on "; // tulostetaan näytölle
  cout << tuplamatka << " km\n";

  return 0; // palautetaan käyttöjärjestelmälle arvo 0
}

Mitä edellinen ohjelma tulostaa?