MUUTTUJAT

Muuttuja on muistipaikka, johon voidaan tallentaa arvo (numero-arvo) ja josta arvo voidaan tarvittaessa hakea. Muuttujalla annetaan nimi jonka avulla muuttujaa voidaan käsitellä, Muuttujan nimellä oikeastaan viitataan muistipaikkaan. Yleensä ohjelmoitsijoiden kannalta ohjelmaa ajaettaessa (run) muistipaikka sijaitsee RAM-muistissa. Huomaa eri käyttöjärjestelmien vaikuttavan muuttujalle varattavan muistin kokoon, esim vanhat 32-bittiset käyttöjärjestelmät.

Eri suuruisia ja eri tyyppisiä arvoja varten on omat tietotyypit. Perustyyppejä ovat kokonaisluvut, liukuluvut, (desimaaliluvut) ja merkkityypit. Esimerkkiohjelmalla voi tarkistaa eri muuttujatyyppien tietokoneesta tarvitseman tilan.

/* Ohjelma näyttää muuttujien koot tietokoneessa */ #include <iostream> #include <string.h> using namespace std; int main() { cout << "Muuttujien koko tietokoneessa:\n\n"; cout << "Muuttuja int: " << sizeof(int) <<" tavua (bytes)" << endl; cout << "Muuttuja short: " << sizeof(short) <<" tavua (bytes)" << endl; cout << "Muuttuja long: " << sizeof(long) <<" tavua (bytes)" << endl; cout << "Muuttuja char: " << sizeof(char) <<" tavua (bytes)" << endl; cout << "Muuttuja float: " << sizeof(float) <<" tavua (bytes)" << endl; cout << "Muuttuja double: " << sizeof(double) <<" tavua (bytes)" << endl; cin.get(); return 0; }




Muuttuja-tyyppi Arvot Koko tavua (bytes)
unsigned short int 0 - 65 535 2
short int -32 768 - +32 767 2
unsigner long int 0 - 4 294 967 295 4
long int - 2 147 483 648 - +2 147 483 647 4
char 256 eri merkkiä (kirjaimia yms) 1
float 1.2 -38 - 3.438 4
double 2.2 -308 - 1,8308 8


MUUTTUJIEN NIMEÄMINEN

Muuttujat kannattaa nimetä siten, että ne kuvaavat sitä asiaa joita niihin on tallennettu.

int luku, luku1, luku2, kpl, l_maara; char kirjain, merkki, X; float keskiarvo, vali_aika, hinta; HUOM! luku1, Luku1 ja LUKU1 ovat kaikki eri muuttujia !!



Muuttujien nimissä ei saa käyttää ns ohjelmointikielen varattuja sanoja.

C-kielen varatutsanat:

C-kieli
auto break case char
double continue default do
float else enum extern
int long register return
short signed sizeof static
struct switch typedef union
unsigned void volatile while

C++ -kielen varatutsanat:

C++ -kieli
asm bool catch class
const_cast delete dynamic_cast explicit
false friend inline mutable
namespace new operator private
protected public __rtti static_cast
template this throw true
try typeid typename reinterpret_cast
using virtual wchar_t


MUUTTUJIEN KÄYTTÄMINEN

Esimerkki-ohjelmassa sijoitetaan muuttujiin arvo ja tulostetaan muuttujien sisältö näytölle cout-funktiolla.

/* Muuttujien sisällön näyttö cout-funktiolla*/ #include <iostream> #include <string.h> using namespace std; int main() { unsigned short luku1 = 1; signed int luku2 = 2; unsigned long luku3 = 1000000; long luku4 = 2000000; float luku5 = 1.3333; double luku6 = 0.0007; char kirjain = 'A'; cout << " Muuttuja short: " << luku1 << endl; cout << " Muuttuja int: " << luku2 << endl; cout << " Muuttuja unsigned long: " << luku3 << endl; cout << " Muuttuja long: " << luku4 << endl; cout << " Muuttuja float: " << luku5 << endl; cout << " Muuttuja double: " << luku6 << endl; cout << " Muuttuja char: " << kirjain << endl; cin.get(); return 0; }




Muuttujien nimeäminen ja niiden käyttäminen:

/* Ohjelma pyyttää kaksi lukua ja merkin sekä näyttää ne */ #include <iostream> #include <string.h> using namespace std; int main() { signed int Luku1; float Luku_1; char Kirjain; cout << " Anna luku (int): " << endl; cin >> Luku1; cout << " Anna luku (float): " << endl; /* anna muodossa 12.45 */ cin >> Luku_1; cout << " Anna kirjain tai merkki (char): " << endl; cin >> Kirjain; cout << "\nLuvut olivat "; cout << Luku1 <<" ja "<< Luku_1 <<", annettu merkki "; cout << Kirjain << endl; cin.get(); cin.get(); return 0; }



Käytettäessä erityyppisiä muuttujia esimerkiksi samassa laskukaavassa voi päätyä ongelmiin:

/* Esimerkkejä muuttujista laskukaavoissa */ int luku1 = 3, luku2 = 2, luku3 = 5, summa; float arvo1 = 3, arvo2 = 2, arvo3 = 5, keskiarvo; Kokonaislukujen summa Oikein, koska kaikki muuttujat int-tyyppiä: summa = luku1 + luku2 + luku3; Kokonaislukujen keskiarvo Ongelmia, luvut int-tyyppiä, keskiarvo float-tyyppiä: keskiarvo = (luku1 + luku2 + luku3) / 3; Desimaali- eli liukulukujen keskiarvo Oikein, koska kaikki muuttujat ovat float-tyyppiä: keskiarvo = (arvo1 + arvo2 + arvo3)/3;




VAKIOT

Vakioita ovat esimerkiksi piin-likiarvo ja valonnopeus. Kuten C-kielessäkin, vakio voidaan määritellä seuraavalla tavalla (ei suositeltava):

#include <iostream> using namespace std; #define PI 3.14159 int main() { ..... }

Parempi tapa vakion määrittelemiseen on seuraava:

#include <iostream> using namespace std; const float PI = 3.14159; int main() { ..... }

Vakion käyttäminen varsonaisen ohjelman sisällä:

/* Tynnyrin tilavuus */ #include <iostream> #include <string.h> using namespace std; const float PI = 3.14159; int main() { float sade, korkeus, tilavuus; cout << " Anna sade: "; cin >> sade; cout << " Anna korkeus: "; /* anna muodossa 12.45 */ cin >> korkeus; tilavuus = 2 * PI * sade * korkeus; cout << "\nTynnyrin tilavuus = "; cout << tilavuus; cin.get(); cin.get(); return 0; }




LUETELLUT TYYPIT

Luetellut tyypit ovat joukko vakioita, joilla on tietty arvo. Sisäisesti luetellun tyypin arvot ovat kokonaislukuja. Ohjelman tehokkuuden kannalta enum-tyyppien sijasta voisi yhtä hyvin käyttää itse määriteltyjä numeroarvoja, mutta lueteltujen tyyppien käyttäminen on suositeltavampaa niiden luettavuuden ja ylläpidettävyyden takia.

Kun määritellään vakio Color luetelluksi tyypiksi ja annetaan sille arvot Punainen, Sininen, Vihreä ja Keltainen, saa luettelon ensimmäisenä oleva Punainen symbolisen arvon 0, Sininen 1 jne.

/* enum, luetellut tyypit */ #include <iostream> #include <string.h> using namespace std; enum Color {Punainen, Sininen, Vihrea, Keltainen}; enum Testi {Luku1 =10 , Luku2, Luku3, Luku4 = 40, Luku5, Luku6}; int main() { cout << "\n Luku1 = " << Luku1 };<<endl; cout << " Luku2 = " << Luku2 };<<endl; cout << " Luku3 = " << Luku3 };<<endl; cout << " Luku4 = " << Luku4 };<<endl; cout << " Luku5 = " << Luku5 };<<endl; cout << " Luku6 = " << Luku6 };<<endl; cout << "\n Punainen = " << {Punainen };<<endl; cout << " Sininen = " << {Sininen };<<endl; cout << " Vihrea = " << {Vihrea };<<endl; cout << " Keltainen = " << {Keltainen };<<endl; cin.get(); cin.get(); return 0; }




TAULUKOT

Taulukoita on yksi- ja kaksiuloitteisia eri tyyppistä tietoa varten, samaan taulukkoon ei voi tallentaa esim numeroita ja kirjaimia vaan niille on tehtävä omat taulukkonsa. Taulukko esitellään sekä mahdollisesti alustetaan ohjelman alussa ennen sen käyttämistä.

Example pic

Esimerkissä ensin kerrotaan minkä tyyppistä tietoa taulukko sisältää (int, char, float), seuraavaksi annetaan talukoille nimet (lukuja, Etu_sukunimi, keskiarvot) ja lopuksi kerrotaan taulukon koko. Esimerkissä lukuja-taulukon koko on 5 riviä, Etu_sukunimi-taulukon 40 riviä ja keskiarvot-taulukon 3 riviä ja 4 saraketta.

int lukuja[5]; char Etu_sukunimi[40]; float keskiarvot[3][4];


Taulukko voidaan alustaa, eli täyttää, samalla tavalla kuin C-kielessäkin.

int lukuja[5] = {10,11,12,13,14}; char Etu_sukunimi[40] = {'A','K','I','_','A','J','O'}; float keskiarvot[2][4] = {{1.2, 1.3, 1.4, 1.5}, {2.1, 2.2, 2.3, 2.4}};


Esimerkissä näytetään aluksi taulukoiden LUKUJA, ETU_SUKUNIMI ja KESKIARVOT sisältö. Taulukoiden sisällön näyttämisen jälkeen pyydetään ohjelman käyttäjältä nimi etunimi_sukunimi) ETU_SUKUNIMI-taulukkoon sekä näytetään annettu nimi taulukosta. Huomaa, esimerkkiohjelmassa on annettava etunimen jälkeen alaviiva ennen sukunimen kirjoittamista:

/* Taulukot 1 */ #include <iostream> #include <string.h> using namespace std; int main() { int LUKUJA[5] = {10, 11, 12, 13, 14}; char ETU_SUKUNIMI[40] = {'A','K','I','_','A','J','O'}; float KESKIARVOT[2][4] = { {1.2, 1.3, 1.4, 1.5}, {2.1, 2.2, 2.3, 2.4} }; cout <<" " << LUKUJA[0] << endl; cout <<" " << LUKUJA[1] << endl; cout <<" " << LUKUJA[2] << endl; cout <<" " << LUKUJA[3] << endl; cout <<" " << LUKUJA[4] << endl<< endl; cout << " " << ETU_SUKUNIMI << endl<< endl; cout <<" "<< KESKIARVOT[0][0]<<" "<< KESKIARVOT[0][1] <<" "<< KESKIARVOT[0][2]<<" "<< KESKIARVOT[0][3]<< endl; cout <<" "<< KESKIARVOT[1][0]<<" "<< KESKIARVOT[1][1] <<" "<< KESKIARVOT[1][2]<<" "<< KESKIARVOT[1][3]<< endl; cout <<"\n Anna nimesi (etu nimi sukunimi); " << endl; cin >> ETU_SUKUNIMI; cout << "\n " << ETU_SUKUNIMI << endl<< endl; cin.get(); cin.get(); return 0; }




Esmerkissä on yksi- sekä kaksiuloitteinen taulukko ja niihin alustettu sisältö ("int" -osat). Ohjelma laskee ensin yksiuloitteisen taulukon lukujen summan sekä näyttää summan. seuraavaksi ohjelma laskee kaksiuloitteisen taulukon rivien summat erikseen sekä näyttää tulokset. Lopuksi ohjelma näyttää molemmista taulukoista yhden "solun" sisällön käyttämällä ohjelman alussa esiteltyjä muuttujia rivi ja sarake.

/* Taulukot 2 */ #include <iostream> #include <string.h> using namespace std; int main() { int taulukkoA[4] = { 10, 20, 30, 40}; int taulukkoB[2][3] = { {1, 2, 3}, {4, 5, 6} }; int rivi = 1, sarake = 1; int summaA, summaB_rivi1, summaB_rivi2; cout << "Taulukon A lukujen summa: " << endl << endl; summaA = taulukkoA[0] + taulukkoA[1] + taulukkoA[2] + taulukkoA[3]; cout << "Taulukon A summa = " << summaA << endl << endl; summaB_rivi1 = taulukkoB[0][0] + taulukkoB[0][1] + taulukkoB[0][2]; summaB_rivi2 = taulukkoB[1][0] + taulukkoB[1][1] + taulukkoB[1][2]; cout << "\nTaulukon B rivien summat: " << endl << endl; cout << "Taulukon B 1.rivin summa = " << summaB_rivi1 << endl; cout << "Taulukon B 2.rivin summa = " << summaB_rivi2 << endl << endl; cout << "\nTaulukoissa A (1.rivi) ja B (1.rivi - 1.sarake): " <<endl <<endl; cout << "Taulukossa A = " << taulukkoA[rivi] << endl; cout << "Taulukossa B = " << taulukkoB[rivi][sarake] << endl; cin.get(); cin.get(); return 0; }