Väärtustüüpi muutujad CSharp programmeerimiskeeles: Difference between revisions
No edit summary |
|||
(14 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
[[Category: Õppetöö]] | |||
[[Category:Programmeerimine CSharp keeles]] | |||
= Eesmärk = | = Eesmärk = | ||
Antud õpiobjekti eesmärgiks on tutvustada väärtustüüpi muutujatüüpide olemust ning kasutamisvõimalusi C# programmeerimiskeeles. | Antud õpiobjekti eesmärgiks on tutvustada väärtustüüpi muutujatüüpide olemust ning kasutamisvõimalusi C# programmeerimiskeeles. | ||
Line 9: | Line 12: | ||
* Koodinäited | * Koodinäited | ||
* Praktilised ülesanded | * Praktilised ülesanded | ||
= Materjalid = | |||
** [http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx Väärtustüüpi muutujad] | |||
= Muutujad ja muutujatüübid = | = Muutujad ja muutujatüübid = | ||
Line 25: | Line 31: | ||
= Väärtustüüpi muutujatüübid = | = Väärtustüüpi muutujatüübid = | ||
'''Väärtustüüpi muutujad on muutujad, millistele eraldatakse initsialiseerimise käigus konkreetne mäluruum.''' | '''Väärtustüüpi muutujad on muutujad, millistele eraldatakse initsialiseerimise käigus konkreetne mäluruum.''' | ||
===Näide:=== | ===Näide:=== | ||
< | <source lang="csharp"> | ||
int a; | int a; | ||
//deklareeritakse 32 bitine täisarvtüüpi muutuja a | //deklareeritakse 32 bitine täisarvtüüpi muutuja a | ||
Line 35: | Line 39: | ||
int b=2; | int b=2; | ||
//deklareeritakse ja initsialiseeritakse muutuja b | //deklareeritakse ja initsialiseeritakse muutuja b | ||
</ | </source> | ||
Initsialiseerimise käigus reserveeritakse väärtustüüpi muutuja hoidmiseks vajalik mäluruum ning väärtustüüpi muutuja korral on muutuja seotud alati just sellele mäluosaga. Initsialiseerimata muutuja poole pöördudes saadakse viga koodi kompileerimise käigus. '''Muutuja initsialiseeritakse esimese väärtustamise käigus (ehk siis, kui muutujale omistatakse esimest korda väärtus).''' | Initsialiseerimise käigus reserveeritakse väärtustüüpi muutuja hoidmiseks vajalik mäluruum ning väärtustüüpi muutuja korral on muutuja seotud alati just sellele mäluosaga. Initsialiseerimata muutuja poole pöördudes saadakse viga koodi kompileerimise käigus. '''Muutuja initsialiseeritakse esimese väärtustamise käigus (ehk siis, kui muutujale omistatakse esimest korda väärtus).''' | ||
===Näide:=== | |||
<source lang="csharp"> | |||
int a; | int a; | ||
//deklareeritakse 32 bitine täisarvtüüpi muutuja a | //deklareeritakse 32 bitine täisarvtüüpi muutuja a | ||
Console.WriteLine(a); //siin tekib viga | Console.WriteLine(a); //siin tekib viga | ||
</source> | |||
'''Eelnevast järeldub, et väärtustüüpi muutujad on C# programmeerimiskeeles algväärtustamata!''' | '''Eelnevast järeldub, et väärtustüüpi muutujad on C# programmeerimiskeeles algväärtustamata!''' | ||
Line 56: | Line 58: | ||
{| class=" | {|class="wikitable" border="1" | ||
| Nimi | | Nimi | ||
| Selgitus | | Selgitus | ||
Line 201: | Line 203: | ||
Hoidmaks erinevate tüüpi andmeid, mis moodustavad koos mingi seostatud kogumi kasutatakse struktuure. Näiteks moodustub struktuur inimene järgmistest andmetest: eesnimi (tekst), perenimi (tekst), sugu (tõeväärtus, 0- naine, 1 -mees), kaal (reaalarv). Sellised andmed moodustavad ühtse terviku ühe inimese kirjeldamiseks, kuid eraldiseisvana on väga erinevat tüüpi. | Hoidmaks erinevate tüüpi andmeid, mis moodustavad koos mingi seostatud kogumi kasutatakse struktuure. Näiteks moodustub struktuur inimene järgmistest andmetest: eesnimi (tekst), perenimi (tekst), sugu (tõeväärtus, 0- naine, 1 -mees), kaal (reaalarv). Sellised andmed moodustavad ühtse terviku ühe inimese kirjeldamiseks, kuid eraldiseisvana on väga erinevat tüüpi. | ||
===Näide=== | |||
<source lang=csharp> | |||
struct inimene | |||
{ | |||
public string eesnimi; | |||
public string perenimi; | |||
public bool sex; | |||
public float weight; | |||
} | |||
</source> | |||
Sellise struktuuriga saame luua uue muutuja kasutaja ja anda kasutajale, eesnime, perenime, soo ja kaalu: | Sellise struktuuriga saame luua uue muutuja kasutaja ja anda kasutajale, eesnime, perenime, soo ja kaalu: | ||
===Näide=== | |||
<source lang=csharp> | |||
inimene kasutaja; | inimene kasutaja; | ||
kasutaja.eesnimi = "Jaan"; | |||
kasutaja.eesnimi = "Jaan" | kasutaja.perenimi = "Mets"; | ||
kasutaja.perenimi = "Mets" | |||
kasutaja.sex = 1; | kasutaja.sex = 1; | ||
kasutaja.weight = 80.0; | kasutaja.weight = 80.0; | ||
</source> | |||
= Tüübiteisendused = | = Tüübiteisendused = | ||
Tüübiteisendusteks on kasutada kahte liiki vahendeid: konverteerimine ja vormimine. | Tüübiteisendusteks on kasutada kahte liiki vahendeid: konverteerimine ja vormimine. | ||
Line 245: | Line 231: | ||
Konverteerimine on võimaluse korral ühes andmeformaadis oleva väärtuse teisendamine teise andmeformaati. Näiteks: kui meil on olemas string taht, milline hoiab väärtust „3“, siis me ei saa, seda väärtust omistada otse täisarvtüüpi muutujale. Eelnevalt tuleb teostada tüübiteisendus. | Konverteerimine on võimaluse korral ühes andmeformaadis oleva väärtuse teisendamine teise andmeformaati. Näiteks: kui meil on olemas string taht, milline hoiab väärtust „3“, siis me ei saa, seda väärtust omistada otse täisarvtüüpi muutujale. Eelnevalt tuleb teostada tüübiteisendus. | ||
===Näide=== | |||
<source lang=csharp> | |||
string lause = "33"; | |||
int arv = lause; //tekib viga | |||
string | </source> | ||
int | |||
Üks võimalus konverteerimiseks on kasutada System.Convert nimeruumi tööriistu: | Üks võimalus konverteerimiseks on kasutada System.Convert nimeruumi tööriistu: | ||
===Näide=== | |||
<source lang=csharp> | |||
string lause = "33"; | |||
int arv = System.Convert.ToInt32(lause); // ei teki viga | |||
string | </source> | ||
int | |||
System.Convert nimeruumis on olemas kõik vajalikud tööriistad kõigi enamlevinud väärtustüüpi muutujatüüpide tüübiteisendusteks. | System.Convert nimeruumis on olemas kõik vajalikud tööriistad kõigi enamlevinud väärtustüüpi muutujatüüpide tüübiteisendusteks. | ||
{| class=" | {| class="wikitable" border="1" | ||
| GetTypeCode | | GetTypeCode | ||
| Tagastab tüübikoodi | | Tagastab tüübikoodi | ||
Line 344: | Line 322: | ||
|} | |} | ||
= Väärtuste vormimine = | = Väärtuste vormimine = | ||
Teatud juhtudel on võimalik muutujate väärtuste vormimine (ik ''cast''). See on võimalik eelkõige siis, kui muutujatüübid on lahedased, kuid täpsus (või väärtuste võimalik vahemik) erinev. Vormimiseks tuleb muutuja nime ette sulgudesse kirjutada sobiv muutujatüüp, millele vastavaks soovitakse väärtus vormindada. | Teatud juhtudel on võimalik muutujate väärtuste vormimine (ik ''cast''). See on võimalik eelkõige siis, kui muutujatüübid on lahedased, kuid täpsus (või väärtuste võimalik vahemik) erinev. Vormimiseks tuleb muutuja nime ette sulgudesse kirjutada sobiv muutujatüüp, millele vastavaks soovitakse väärtus vormindada. | ||
===Näide=== | |||
<source lang=csharp> | |||
Int64 SuurArv = 645433; | |||
int arv = SuurArv; //saadakse viga | |||
</source> | |||
===Näide=== | |||
<source lang=csharp> | |||
Int64 SuurArv = 645433; | |||
int arv = (int)SuurArv; //toimub väärtuse vormindamine | |||
</source> | |||
Int64 | |||
int | |||
===Näide=== | |||
<source lang=csharp> | |||
double komaArv = 2.4; | |||
int arv = (int)komaArv; //toimub väärtuse vormindamine | |||
</source> | |||
'''NB! Viimases näites toimub väärtuse täpsuse kadu!''' | |||
= Koodinäited = | = Koodinäited = | ||
Line 382: | Line 350: | ||
== Kahe arvu liitmine == | == Kahe arvu liitmine == | ||
Kõik Console.ReadLine() meetodi abil loetud väärtused on string tüüpi ehk tekst. | Kõik Console.ReadLine() meetodi abil loetud väärtused on string tüüpi ehk tekst. | ||
<source lang="csharp"> | |||
class | class Program | ||
{ | |||
static void Main(string[] args) | |||
{ | |||
static | Console.WriteLine("Sisesta esimene arv: "); | ||
int a = Convert.ToInt32(Console.ReadLine()); | |||
Console.WriteLine("Sisesta teine arv: "); | |||
int b = Convert.ToInt32(Console.ReadLine()); | |||
int summa = a + b; | |||
Console.WriteLine("Arvude " + a + " ja " + b + " summa on: " + summa); | |||
int | } | ||
} | |||
</source> | |||
int | |||
int | |||
" summa on: " | |||
== Kahe arvu korrutamine == | == Kahe arvu korrutamine == | ||
Kasutaja sisestatud väärtus ei pruugi alati olla teisendamiskõlbulik! | Kasutaja sisestatud väärtus ei pruugi alati olla teisendamiskõlbulik! | ||
class | <source lang="csharp"> | ||
class Program | |||
{ | |||
static void Main(string[] args) | |||
static | { | ||
Console.WriteLine("Sisesta arv"); | |||
double arv; | |||
string tmp = Console.ReadLine(); | |||
double | |||
string | |||
if (double.TryParse(tmp, out arv)) | |||
Console.WriteLine(arv * arv); | |||
* | else | ||
Console.WriteLine("Sisestatud väärtus oli vales formaadis"); | |||
} | |||
} | |||
</source> |
Latest revision as of 19:10, 7 October 2014
Eesmärk
Antud õpiobjekti eesmärgiks on tutvustada väärtustüüpi muutujatüüpide olemust ning kasutamisvõimalusi C# programmeerimiskeeles.
- Muutujad ja muutujatüübid
- Väärtustüüpi muutujad
- Väärtustüüpi muutujatüübid C# programmeerimiskeeles
- Struktuurid
- Tüübiteisendused
- Koodinäited
- Praktilised ülesanded
Materjalid
Muutujad ja muutujatüübid
Programmeerimise käigus on reeglina vaja hoida meeles mingit hulka andmeid (vahetulemused, toimunud sündmused, sisendväärtused, väljundväärtused jne). Neid väärtused tuleb hoida mälus. Selleks defineeritakse koht mälus, mida kasutatakse andmete hoidmiseks ning seda defineeritud kohta nimetatakse muutujaks. Kuna andmed, mida hoitakse võivad olla väga erinevad, siis öeldakse ka muutuja defineerimisel, mis tüüpi andmeid selles muutujas hoidma hakatakse (muutujatüüp).
Muutujatüübi vajadus tuleneb eelkõige selles, et erinevad andmed võtavad mälus erineva koguse mäluruumi. Näiteks 8 biti ehk ühe baidi mäluruumi abil on võimalik meeles hoida 28=256 erinevat seisu. 256 erineva seisu abil on võimalik: hoida meeles täisarve 0..255, märgiga täisarve -128..127, ASCII kooditabeli abil ühe sümboli jne. Kahendsüsteemi arv 111111112 võib tähistada näiteks täisarvu 255 või ka -1, et teada millena seda väärtust käsitleda peab olema öeldud, mis tüüpi andmetega on tegu. |
Tuntumad muutujatüübid on: tõeväärtus, märgita täisarv, märgiga täisarv, reaalarv (komakohaga), tähemärk, tekst jne. Kuna erinevad andmed võtavad erinevalt mäluruumi, siis on ka erinevat tüüpi muutujad mälus erineva suurusega. Kõige vähem mäluruumi nõuab tõeväärtusmuutuja (kaks seisu õige/vale) – 1 bitt ja täisarvud (2-8 baiti), reaalarvulised muutujad nõuavad juba rohkem mälu ja teksti hoidmiseks on vaja vähemalt 1 bait ühe sümboli kohta.
Muutujatüübid võib jaotada: väärtustüübid (muutujad, millel on konkreetne suurus ja koht) ja viitetüüpi. Selles õpiobjektis vaatleme eelkõige väärtustüüpi muutujatüüpe.
Väärtustüüpi muutujatüübid
Väärtustüüpi muutujad on muutujad, millistele eraldatakse initsialiseerimise käigus konkreetne mäluruum.
Näide:
int a;
//deklareeritakse 32 bitine täisarvtüüpi muutuja a
int b=2;
//deklareeritakse ja initsialiseeritakse muutuja b
Initsialiseerimise käigus reserveeritakse väärtustüüpi muutuja hoidmiseks vajalik mäluruum ning väärtustüüpi muutuja korral on muutuja seotud alati just sellele mäluosaga. Initsialiseerimata muutuja poole pöördudes saadakse viga koodi kompileerimise käigus. Muutuja initsialiseeritakse esimese väärtustamise käigus (ehk siis, kui muutujale omistatakse esimest korda väärtus).
Näide:
int a;
//deklareeritakse 32 bitine täisarvtüüpi muutuja a
Console.WriteLine(a); //siin tekib viga
Eelnevast järeldub, et väärtustüüpi muutujad on C# programmeerimiskeeles algväärtustamata!
Levinumad väärtustüüpi muutujatüübid
C# programmeerimiskeeles on levinumad muutujatüübid järgmised:
Nimi | Selgitus | Suurus | Väärtuste vahemik | Kasutamine |
bool
System.Boolean |
Tõeväärtustüüp | 8 bitti | true / false | bool seis;
seis = false; |
byte
System.Byte |
Bait | 8 bitti | 0 kuni 255 | byte bait;
bait = 8; |
char
System.Char |
Tähemärk | 16 bitti | U+0000 kuni U+ffff | char taht;
taht = ’a’; |
decimal
System.Decimal |
Rahaliste suuruste hoidmiseks mõeldud muutujatüüp | 128 bitti | 28-29 numbrikohta, märgiga, kaks komakohta | decimal raha;
raha = 99.9m; |
double
System.Double |
64 bitine reaalarv | 64 bitti | ±5.0 × 10−324 kuni
±1.7 × 10308 |
double reaal;
reaal = 6,5454221; |
float
System.Single |
32 bitine reaalarv | 32 bitti | ±1.5 × 10−45 kuni
±3.4 × 1038 |
float arv
arv = 6,5454221f; |
int
System.Int32 |
32 bitine täisarv | 32 bitti | -2 147 483 648 kuni 2 147 483 647 | int i;
i = 321; |
long
System.LOng |
64 bitine täisarv | 64 bitti | –9 223 372 036 854 775 808
kuni 9 223 372 036 854 775 807 |
long pikkI;
pikkI = 823111331131312;
|
sbyte
System.SByte |
Märgiga 8 bitine täisarv | 8 bitti | -128 kuni 127 | sbyte sbait;
sbait = -8; |
short
System.Int16 |
16 bitine täisarv | 16 bitti | -32768 kuni 32767 | Short lyhike;
lyhike = 321; |
uint
System.UInt32 |
32 bitine märgita täisarv | 32 bitti | 0 kuni 4 294 967 295 | uint positiivne;
positiivne = 321; |
Lisalugemist: http://msdn.microsoft.com/en-us/library/s1ax56ch(VS.80).aspx
Struktuurid
Hoidmaks erinevate tüüpi andmeid, mis moodustavad koos mingi seostatud kogumi kasutatakse struktuure. Näiteks moodustub struktuur inimene järgmistest andmetest: eesnimi (tekst), perenimi (tekst), sugu (tõeväärtus, 0- naine, 1 -mees), kaal (reaalarv). Sellised andmed moodustavad ühtse terviku ühe inimese kirjeldamiseks, kuid eraldiseisvana on väga erinevat tüüpi.
Näide
struct inimene
{
public string eesnimi;
public string perenimi;
public bool sex;
public float weight;
}
Sellise struktuuriga saame luua uue muutuja kasutaja ja anda kasutajale, eesnime, perenime, soo ja kaalu:
Näide
inimene kasutaja;
kasutaja.eesnimi = "Jaan";
kasutaja.perenimi = "Mets";
kasutaja.sex = 1;
kasutaja.weight = 80.0;
Tüübiteisendused
Tüübiteisendusteks on kasutada kahte liiki vahendeid: konverteerimine ja vormimine.
Konverteerimine on võimaluse korral ühes andmeformaadis oleva väärtuse teisendamine teise andmeformaati. Näiteks: kui meil on olemas string taht, milline hoiab väärtust „3“, siis me ei saa, seda väärtust omistada otse täisarvtüüpi muutujale. Eelnevalt tuleb teostada tüübiteisendus.
Näide
string lause = "33";
int arv = lause; //tekib viga
Üks võimalus konverteerimiseks on kasutada System.Convert nimeruumi tööriistu:
Näide
string lause = "33";
int arv = System.Convert.ToInt32(lause); // ei teki viga
System.Convert nimeruumis on olemas kõik vajalikud tööriistad kõigi enamlevinud väärtustüüpi muutujatüüpide tüübiteisendusteks.
GetTypeCode | Tagastab tüübikoodi |
ToBoolean | Tagastab tõeväärtustüübi |
ToByte | Tagastab bait-tüüpi väärtuse |
ToChar | Tagastab tähemärgi |
ToDateTime | Tagastab DateTime tüüpi väärtuse |
ToDecimal | Tagastab decimal tüüpi väärtuse |
ToDouble | Tagastab double tüüpi väärtuse |
ToInt16 | Tagastab short tüüpi väärtuse |
ToInt32 | Tagastab int tüüpi väärtuse |
ToInt64 | Tagastab long tüüpi väärtuse |
ToSByte | Tagastab sbyte tüüpi väärtuse |
ToSingle | Tagastab single tüüpi väärtuse |
ToString | Tagastab string tüüpi väärtuse |
ToUInt16 | Tagastab ushort tüüpi väärtuse |
ToUInt32 | Tagastab int tüüpi väärtuse
Bottom of Form Bottom of Form
|
ToUInt64 | Tagastab ulong tüüpi väärtuse
Bottom of Form Bottom of Form |
Väärtuste vormimine
Teatud juhtudel on võimalik muutujate väärtuste vormimine (ik cast). See on võimalik eelkõige siis, kui muutujatüübid on lahedased, kuid täpsus (või väärtuste võimalik vahemik) erinev. Vormimiseks tuleb muutuja nime ette sulgudesse kirjutada sobiv muutujatüüp, millele vastavaks soovitakse väärtus vormindada.
Näide
Int64 SuurArv = 645433;
int arv = SuurArv; //saadakse viga
Näide
Int64 SuurArv = 645433;
int arv = (int)SuurArv; //toimub väärtuse vormindamine
Näide
double komaArv = 2.4;
int arv = (int)komaArv; //toimub väärtuse vormindamine
NB! Viimases näites toimub väärtuse täpsuse kadu!
Koodinäited
Järgnevalt mõned näited väärtustüüpi muutujate kasutamisest:
Kahe arvu liitmine
Kõik Console.ReadLine() meetodi abil loetud väärtused on string tüüpi ehk tekst.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Sisesta esimene arv: ");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Sisesta teine arv: ");
int b = Convert.ToInt32(Console.ReadLine());
int summa = a + b;
Console.WriteLine("Arvude " + a + " ja " + b + " summa on: " + summa);
}
}
Kahe arvu korrutamine
Kasutaja sisestatud väärtus ei pruugi alati olla teisendamiskõlbulik!
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Sisesta arv");
double arv;
string tmp = Console.ReadLine();
if (double.TryParse(tmp, out arv))
Console.WriteLine(arv * arv);
else
Console.WriteLine("Sisestatud väärtus oli vales formaadis");
}
}