You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Yleistä

Muuttujiin talletetaan tiedot, joita ohjelma käsittelee. Tieto voi olla lukuja ja merkkejä, tieto voi olla esitetty yksittäinä arvoina tai taulukkomuodossa.

Muuttujan määritteleminen tapahtuu seuraavasti:

tyyppi muuttujan_nimi;

, missä tyyppi on tiedon tyyppi ja muuttujan_nimi on muuttujan nimi.

Esimerkiksi yhden kokonaislukumuuttujan määritteleminen:

int muuttuja1;

Muuttujan tyyppi

Muuttujat ovat siis tietovarastoja, tietovarastot ovat erilaiselle tiedolle erikokoisia.

Siksi RobotC-kielessä tiedolla on aina tyyppi, tyyppi kertoo muuttujan tarvitseman muistin määrän. Tietokoneen muistia kuvataan tavuilla. Tavun pituus on kahdeksan bittiä. Kahdeksalla bitillä voidaan kuvata luvut 0...255 tai -128...+127.

Esimerkiksi ASCII-taulukossa, joka sisältää tietokoneen esittämät merkit, jokainen kirjoitettava merkki edustaa lukua 0...255. Täten yksi merkki varaa tietokoneelta muistia yhden tavun. (Unicode-merkistössä merkit esitetään kahdella tavulla, jolloin voidaan esittää 65535 erilaista merkkiä, jolloin miltei kaikki maailman merkit saadaan esitettyä ilman erillisiä kooditaulukoita)

C-kielen muuttujien tyypit ja arvoalueet 32 bittisessä järjestelmässä:

tyyppi

merkitys

tavuja

etumerkitön lukualue

etumerkillinen lukualue

char

merkki

1

0...255

-128...+127

short

lyhyt kokonaisluku

2

0...65536

-32767...+32768

int

kokonaisluku

4

0...4294967296

-2147483647...+2147483648

long

pitkä kokonaisluku

8

0...18446744073709551615

-9223372036854775808...+9223372036854775807

float

reaaliluku

4

-

?

double

kaksoistarkkuuden reaaliluku

8

-

?

void

tavuosoitin (voidaan ajatella, että tämä ei tarkoita mitään)

?

-

-

string

merkkijono (kts. alla)

?

-

-

Muuttujan tyyppi kertoo sen, millaista tietoa muuttujaan voi tallentaa, esimerkiksi char OmaMuuttuja voi tallettaa yhden merkin.

Eli muuttujaan OmaMuuttuja voidaan sijoittaa yksi merkki, esimerkiksi:

char OmaMuuttuja = 'a'; // huom! yksittäiset merkit laitetaan heittomerkkien väliin.

Toinen esimerkki:

int Luku = 5; // kokonaislukumuuttuja, joka voi tallettaa etumerkillisen luvun

Muuttujalle voidaan antaa lisämääreitä:

Määre

Merkitys

Käy seuraaviin tyyppeihin

signed

etumerkillinen

char, int

unsigned

etumerkitön

char, int

long

pitkä

int, double

short

lyhyt

int

Esim.

unsigned int Luku = 65535; // Muuttuja voi olla ainoastaan positiivinen kokonaisluku

Muuttujan nimeäminen

Muuttuja kannattaa nimetä selkeällä nimellä, joka kertoo muuttujan käyttötarkoituksen. Huom! isot ja pienet kirjaimet tarkoittavat eri asiaa.
Puhdas C-kielen esittelytapa on seuraava:

int auton_nopeus;

Muuttujan eri sanat voidaan erotella toisistaan esimerkiksi alaviivalla.

C++:ssa käytetään tyypillisesti tapaa, jossa muuttujassa olevat sanat aloitetaan isoilla kirjaimilla seuraavasti:

int AutonNopeus;

Monet ohjelmoijat liittävät muuttujan eteen kirjaimen kuvaamaan muuttujan tyyppiä seuraavasti:

int iAutonNopeus;

Tyypistä otetaan yksi kirjain muuttujan eteen muistuttamaan ohjelmoitsijaa muuttujalle annetusta tyypistä. (tätä sanotaan unkarilaiseksi notaatioksi)

Edellä mainitut muuttujien nimeystavat eivät vaikuta millään tapaa muuttujan käyttöön tai ohjelman toimintaan.

Muuttujan näkyvyysalue

Muuttuja voi olla käytettävissä ainoastaan ohjelmalohkossa, yhdessä funktiossa (paikallinen) tai koko ohjelmassa. Riippuen siitä missä kohtaa ohjelmaa muuttuja esitellään, sitä voidaan käyttää ohjelmassa eri tavoin.

Yhteinen muuttuja (global variable)

Yhteinen, tai globaali, muuttuja esitellään kaikkien funktioiden ulkopuolella ja se "näkyy" eli se on käytettävissä kaikissa funktioissa, jotka ovat samassa tiedostossa kuin muuttuja. Yhteistä muuttujaa on hyvin helppo käyttää, koska sen arvoon päästään käsiksi kaikista funktioista. Kun ohjelma kasvaa suureksi, siinä voi olla tuhansia muuttujia, jolloin yhteisten muuttujien käyttö tulee hankalaksi ja ohjelmasta tulee altis virheille.

int x=0; // Yhteinen (globaali) muuttuja
int y=0; // Yhteinen (globaali) muuttuja

task main()
{
   return 1;
}

Paikallinen muuttuja (local variable)

Paikallinen muuttuja esitellään ohjelmalohkon (tai funktion) sisällä ja se on käytettävissä ainoastaan siinä lohkossa, jossa se on määritelty. Alkuarvokseen paikallinen muuttuja saa satunnaisarvon, siksi paikalliset muuttujat tulee alustaa johonkin alkuarvoon esittelyn yhteydessä.
Paikallinen muuttuja katoaa (ja siten kadottaa arvonsa), kun ohjelmalohko (tai funktio) päättyy.

Esimerkki funktion paikallisesta muuttujasta:

float funktio()
{
    float f;                               // Funktion paikallinen muuttuja
    ...
    return f;
}

task main()
{
    int i;
    float a=0.0;                           // Main-funktion paikallinen muuttuja
    for (i=0; i<100; i++) {
        a=funktio();
    }
    return i;
}

Esimerkki ohjelmalohkon paikallisesta muuttujasta:

task main()
{
    int i;                                 // Main-funktion paikallinen muuttuja

    for (i=0; i<100; i++) {
        float f;                           // For-toistorakenteen sisäinen paikallinen muuttuja
        ...
    }
}

Samannimiset muuttujat

Ohjelmassa ei saa olla saman nimisiä muuttujia, paitsi jos ne on määritelty eri näkyvyysalueelle. Eli ohjelmassa voi olla globaali muuttuja int x sekä myös mainissa muuttuja int x. Tämä on sallittua, tosin ei suositeltavaa ilmiselvän sekaannusvaaran takia.

#include <stdio.h>

int x = 5;                                // Globaali muuttuja

task main()
{
    int x = -100;                         // Main-funktion paikallinen muuttuja
    ...
}

Jos ohjelmassa on saman nimisiä muuttujia, viitataan aina 'lähinnä olevaan' eli rajatuimmalla näkyvyydellä olevaan.

Merkkijonot

C-kielestä poiketen, RobotC-kielessä on oma muuttujatyyppi merkkijonoille. Se on nimeltään string. Se voidaan alustaa kuten muutkin muuttujat, mutta arvo tulee laittaa lainausmerkeissä (merkkijonot ovat aina lainausmerkeissä (Robot)C-kielessä.

string str1 = "ROBOT";

Merkkijono voidaan näyttää ruudulla seuraavasti:

nxtDisplayCenteredTextLine(3, "%s", str1);

Hyödyllisiä funktioita:

strcat(pToBuffer, pFromBuffer)

Lisää jälkimmäisen parametrin ensimmäisen loppuun

strcmp(pString1, pString2)

Vertailee parametreina saatuja merkkijonoja keskenään, palauttaa 0 jos merkkijonot samat

strcpy(pToBuffer, pFromBuffer)

Kopioi jälkimmäisen ensimmäisen tilalle

StringDelete(sDest, nIndex, nSize)

Poistaa sDest-merkkijonon nIndex:in osoittamasta kohdasta nSize määrän merkkejä

StringFind(sSrce, sSearch)

Etsii jälkimmäistä merkkijonoa ensimmäisestä ja palauttaa sen indeksin

StringFormat(sDest, sFmtSpec, nParm1, nParm2)

Muodostaa merkkijonon C-kielestä tuttujen sääntöjen perusteella, kts. dokumentaatio

StringFromChars(sToString, FromChars)

Muuttaa merkkitaulukon (char array) merkkijonoksi (string)

strncat(pToBuffer, pFromBuffer, nMaxBufferSize)

Sama kuin strcat, mutta siirtää maksimissaan vain nMaxBufferSize määrän merkkejä

strncmp(pString1, pString2, nMaxBufferSize)

Sama kuin strcpy, mutta kopioi maksimissaan vain nMaxBufferSize määrän merkkejä

Paikallinen staattinen muuttuja

Jos halutaan paikallisen muuttujan muistavan arvonsa siitä, kun funktio suoritettiin edellisen kerran, täytyy muuttuja esitellä staattisena esim. seuraavasti:

void funktio()
{
    static int Laskuri; // Paikallinen staattinen muuttuja, säilyttää tietonsa funktiokutsujen välillä
}

task main()
{
}

Staattinen muuttuja saa automaattisesti alkuarvokseen nollan, joten sitä ei alusteta esittelyn yhteydessä. Staatisena esitellyllä muuttujalla voidaan esim. laskea, kuinka monta kertaa ko. funktiossa on käyty.

  • No labels
You must log in to comment.