Mine sisu juurde

Programmeerimiskeel C/Seletus

Allikas: Vikiõpikud

Et andmeid töödelda, peavad andmed olema mälus.

Andmeid on kahte laadi:

  • väärtusparameeter
  • viidaparameeter

Andmed on mälus 2'nd koodis, ning vastavalt andmetüübile on eraldatud vastav arv bitte. Läbi vormingu kuvatakse kasutajale imitatsioon, nagu oleks tegemist arvude, tekstiga või suvalise sisuga.

Muutujad

[muuda]

Muutuja on koht mälus, kus saab väärtuseid hoida. Muutujale mälu reserveerimis protsessi nimetatakse deklareerimiseks. Muutujaid iseloomustab paindlikus, tüüp&struktuur, kogus, skoop ja väärtus.

Skoop

[muuda]

muutuja eluiga/ligipääs, mis on kas

  1. lokaalne - piirdub deklareeritud fuktsiooni eluajaga ja deklareeritakse funktsiooni sees.
  2. globaalne - piirdub programmi eluajaga, ning on ligipääsetav igast funktsioonist ja deklareeritakse funktsiooni väljas.

Lisaks C++ toob veel erinevad skoope juurde, nagu üleklassiline, korduse sisene jne.

Kogus

[muuda]

Koguse alusel jaotuvad andmed

  1. muutuja - andmetüübist ja arhidektuurist sõltuvalt teatud bittid, kuhu salvestatakse väärtused
  2. dimensioone omavad muutujad ehk massiivid - kogumik muutujaid. Massiivid omavad ühte kindlat andmetüüpi ja andes dimensioonile järjekorranumbri ehk indeksi, pääsetakse ligi andmetele, mis on eraldatud mäluväljale kirjutatud. Massiivi, mis omab ühte dimensiooni nimetatakse vektoriks ja kahte dimensiooni maatriksiks.

Andmetüübid

[muuda]

Lihtsad andmetüübid on:

  1. tähemärk
    ( char )
    
  2. täisarv
    ( int, short, long, long long )
    
  3. ujukomaarv
    ( float, double, long double)
    

Tähemärgid ja täisarvud on kas märgiga (signed) või märgita (unsigned). Vaikimisi on nad märgiga. Olgu öeldud, et tähemärki on võimalik salvestada ka täisarve.

Lihtsad andmetüübid võimaldavad kirjeldada kombineeritud andmetüüpe. Viimasteks on:

  1. Massiivid
  2. Kirjed
  3. Ühendid

Kombineeritud andmetüübid võivad põhineda ka juba kirjeldatud kombineeritud andmetüüpidel. Teksti (sõne e. stringi) hoidmiseks kasutatakse tähemärkide massiivi. Eraldi vastavat andmetüüpi ei ole. Kirjed on ühest või enamast väljast koosnevad andmekogumid. Ühendid on erinevad kirjetest sellega, et nende mälukasutus vastab ainult suurimalt väljale.

Võtmesõnaga typedef saab anda igale andmetüübile uue nime.

Näited

[muuda]
/* Täisarvu tüüpi muutuja */
int t2isarv;

/* Algväärtustatud lühike täisarv */
short lyhike_t2isarv = 42;

/* Algväärtusega lühike märgita täisarv */
unsigned short lyhike_m2rgita_t2isarv = 65535;

/* Ujukoma arv */
float ujukomaarv;

/* Algväärtustatud topelttäpsusega ujukomaarv */
double pii = 3.14159285;

/* Pikkade t2isarvude massiiv 100-st elemendist */
long massiiv[100];

/* Algväärtustatud tähtede massiiv kuni 250 tähemärgi hoidmiseks */
unsigned char string[250] = "String";

/* Uus andmetüüp nimi, mis on massiiv sajast märgita tähemärgist */
typedef unsigned char nimi[100];

/* Isikut kirjeldav struktuur */
struct isik
{
    nimi eesnimi;
    nimi perenimi;
    float pikkus;        /* meetrites */
    unsigned int vanus;  /* sekundites */
    char sugu;
};
/* ja massiiv 12 isiku andmete salvestamiseks */
struct isik isikud[12];

/* Ühendi kirjeldamine */
union yhend
{
    char c;
    short s;
    int i;
    long l;
    float f;
    double d;
};
/* Ühendi muutuja loomine. See muutuja võtab sama palju mälu kui väli d. */
union yhend yhendi_n2ide;

Väärtus

[muuda]

Väärtuse alusel jaotuvad muutujad:

  1. konstantideks - programmi kestel muutumatu väärtust andmed (võtmesõna "const" on deklareerimisel muutuja tüübi ees). Konstandi deklareerimisel tuleb ta väärtustada. Konstandid on koodi kirjutatud arvud, tekst(kiri mis asetseb jutumärkide vahel), tähemärk(märk mis paikneb apostroofide vahel).
    const double pii=3.14;
    
    Lisaks:
    • Konstandid on ka erimärgid (nagu: \t - tabulatsion; \n - reavahetus).
    • Kõik muutujad mida saab konstantidena märkida, tuleks seda teha
  2. Muutujateks - programmi kestel oma väärtusi hoidev mälu. Muutujatele on iseloomulike programmi kestel om väärtust muuta, kui nad seda ei tee, tuleks nad deklareerida kui konstatnidena. Nenede algväärtustamine on võimalik, kuid see pole kohustuslik.
    double ostud_summa_kokku=0.0;
    

Paindlikus

[muuda]

Paindlikuse alusel jagunevad andmed staatilisteks ja dünaamilisteks andmeteks:

  1. Staatilised on kõik andmed, millele on kompileerimise hetkeks teada andmete skoop ja mälu eraldatakse. Staatilise mälu vabastamise peale skoobi lõppu ehk prügikoristuse eest hoolitseb programm ise.
  2. Dünaamilised on andmed, millele pole kompileerimise hetkeks teada andmete skoop ja muutujatele eraldatakse mälu programmi käigus. Dünaamiliste andmete puhul tuleb organiseerida ise mälu prügikoristus. Dünaamiliseks nimetatakse ka enesepoole pöörduvaid ehk rekrusiivseid funktsioone.