MUUTTUJAT
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):Parempi tapa vakion määrittelemiseen on seuraava:#include <iostream> using namespace std; #define PI 3.14159 int main() { ..... }
Vakion käyttäminen varsonaisen ohjelman sisällä:#include <iostream> using namespace std; const float PI = 3.14159; int main() { ..... }
/* 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ä.
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; }