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:
No Format |
---|
Wiki Markup |
h2. Yleistä Muuttujiin talletetaan tiedot, joita ohjelma käsittelee. Tieto voi olla lukuja ja merkkejä, tieto voi olla esitetty yksittäinä arvoina tai [taulukkomuodossa|Taulukot]. Muuttujan määritteleminen tapahtuu seuraavasti: {noformat}tyyppi muuttujan_nimi;{noformat} |
,
...
missä
...
tyyppi
...
on
...
tiedon
...
tyyppi
...
ja
...
muuttujan_nimi
...
on
...
muuttujan
...
nimi.
...
Esimerkiksi
...
yhden
...
kokonaislukumuuttujan
...
määritteleminen:
Code Block |
---|
}int muuttuja1;{code} h2. 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 |
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
...
...
,
...
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 |
---|---|---|---|---|
| boolean-arvo | 1? | true...false |
...
true...false |
...
| merkki | 1 | 0...255 |
...
-128...+127 |
...
| lyhyt kokonaisluku | 2 | 0...65536 |
...
-32767...+32768 |
...
| kokonaisluku | 4 | 0...4294967296 |
...
-2147483647...+2147483648 |
...
| pitkä kokonaisluku | 8 | 0...18446744073709551615 |
...
-9223372036854775808...+9223372036854775807 | ||||
| reaaliluku | 4 | - | ? |
| kaksoistarkkuuden reaaliluku | 8 | - | ? |
| tavuosoitin (voidaan ajatella, että tämä ei tarkoita mitään) | ? | - | - |
| 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:
Code Block |
---|
| | {{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: {code} char OmaMuuttuja = 'a'; // huom! yksittäiset merkit laitetaan heittomerkkien väliin. {code} |
Toinen
...
esimerkki:
Code Block |
---|
} int Luku = 5; // kokonaislukumuuttuja, joka voi tallettaa etumerkillisen luvun {code} |
Muuttujalle
...
voidaan
...
antaa
...
lisämääreitä:
Määre | Merkitys | Käy seuraaviin tyyppeihin |
---|---|---|
| etumerkillinen | |
| etumerkitön | |
| pitkä | |
| lyhyt | |
Esim.
Code Block |
---|
|| Määre || Merkitys || Käy seuraaviin tyyppeihin || | {{signed}} | etumerkillinen | {{char, int}} | | {{unsigned}} | etumerkitön | {{char, int}} | | {{long}} | pitkä | {{int, double}} | | {{short}} | lyhyt | {{int}} | Esim. {code} unsigned int Luku = 65535; // Muuttuja voi olla ainoastaan positiivinen kokonaisluku {code} h2. 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: {code |
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:
Code Block |
---|
} int auton_nopeus; {code} |
Muuttujan
...
eri
...
sanat
...
voidaan
...
erotella
...
toisistaan
...
esimerkiksi
...
alaviivalla.
...
C++:ssa
...
käytetään
...
tyypillisesti
...
tapaa,
...
jossa
...
muuttujassa
...
olevat
...
sanat
...
aloitetaan
...
isoilla
...
kirjaimilla
...
seuraavasti:
Code Block |
---|
} int AutonNopeus; {code} |
Monet
...
ohjelmoijat
...
liittävät
...
muuttujan
...
eteen
...
kirjaimen
...
kuvaamaan
...
muuttujan
...
tyyppiä
...
seuraavasti:
Code Block |
---|
} int iAutonNopeus; {code} |
Tyypistä
...
otetaan
...
yksi
...
kirjain
...
muuttujan
...
eteen
...
muistuttamaan
...
ohjelmoitsijaa
...
muuttujalle
...
annetusta
...
tyypistä.
...
(tätä
...
sanotaan
...
unkarilaiseksi
...
notaatioksi)
Note |
---|
} 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.
Code Block |
---|
{note} h2. 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. h3. 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. {code} int x=0; // Yhteinen (globaali) muuttuja int y=0; // Yhteinen (globaali) muuttuja task main() { return 1; } {code} h3. Paikallinen muuttuja |
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:
Code Block |
---|
} 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; } {code} |
Esimerkki
...
ohjelmalohkon
...
paikallisesta
...
muuttujasta:
Code Block |
---|
} task main() { int i; // Main-funktion paikallinen muuttuja for (i=0; i<100; i++) { float f; // For-toistorakenteen sisäinen paikallinen muuttuja ... } } {code} h3. 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 |
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.
Code Block |
---|
ilmiselvän sekaannusvaaran takia. {code} #include <stdio.h> int x = 5; // Globaali muuttuja task main() { int x = -100; // Main-funktion paikallinen muuttuja ... } {code} |
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ä.
Code Block |
---|
} string str1 = "ROBOT"; {code} |
Merkkijono
...
voidaan
...
näyttää
...
ruudulla
...
seuraavasti:
Code Block |
---|
} nxtDisplayCenteredTextLine(3, "%s", str1); {code} |
Hyödyllisiä
...
funktioita:
...
|
...
|
...
Lisää |
...
jälkimmäisen |
...
parametrin |
...
ensimmäisen |
...
loppuun |
|
...
|
...
Vertailee |
...
parametreina |
...
saatuja |
...
merkkijonoja |
...
keskenään, |
...
palauttaa |
...
0 |
...
jos |
...
merkkijonot |
...
samat |
|
...
|
...
Kopioi |
...
jälkimmäisen |
...
ensimmäisen |
...
tilalle |
|
...
|
...
|
...
Poistaa |
...
sDest-merkkijonon |
...
nIndex:in |
...
osoittamasta |
...
kohdasta |
...
nSize |
...
määrän |
...
merkkejä |
|
...
|
...
Etsii |
...
jälkimmäistä |
...
merkkijonoa |
...
ensimmäisestä |
...
ja |
...
palauttaa |
...
sen |
...
indeksin |
|
...
|
...
|
...
|
...
Muodostaa |
...
merkkijonon |
...
C-kielestä |
...
tuttujen |
...
sääntöjen |
...
perusteella, |
...
kts. |
...
dokumentaatio |
|
...
|
...
Muuttaa |
...
merkkitaulukon |
...
(char |
...
array) |
...
merkkijonoksi |
...
(string) |
...
|
...
|
...
|
...
Sama |
...
kuin |
...
|
...
, |
...
mutta |
...
siirtää |
...
maksimissaan |
...
vain |
...
nMaxBufferSize |
...
määrän |
...
merkkejä |
|
...
|
...
|
...
Sama |
...
kuin |
...
|
...
, |
...
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:
Code Block |
---|
merkkejä | h2. Paikallinen staattinen muuttuja Jos halutaan paikallisen muuttujan muistavan arvonsa siitä, kun funktio suoritettiin edellisen kerran, täytyy muuttuja esitellä staattisena esim. seuraavasti: {code} void funktio() { static int Laskuri; // Paikallinen staattinen muuttuja, säilyttää tietonsa funktiokutsujen välillä } task main() { } {code} |
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.