This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:programming:c:crashcourse [2014/10/01 09:05] – raivo.sell | et:programming:c:crashcourse [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ~~PB~~ | ||
====== C keele kiirkursus ====== | ====== C keele kiirkursus ====== | ||
Line 49: | Line 48: | ||
</ | </ | ||
- | ~~PB~~ | + | < |
===== Andmed ===== | ===== Andmed ===== | ||
Line 69: | Line 68: | ||
Sulgudes olevat sõna " | Sulgudes olevat sõna " | ||
- | AVR mikrokontrolleril //int// = //short//, aga PC arvutil //int// = //long//. C-keeles puudub spetsiaalne teksti-andmetüüp. Selle asemel kasutatakse //char// tüüpi massiive (nendest edaspidi) ja ASCII " | + | AVR mikrokontrolleril //int// = // |
+ | PC arvutil //int// = // | ||
+ | |||
+ | C-keeles puudub spetsiaalne teksti-andmetüüp. Selle asemel kasutatakse //char// tüüpi massiive (nendest edaspidi) ja ASCII " | ||
==== Muutujad ==== | ==== Muutujad ==== | ||
Line 76: | Line 78: | ||
<code c> | <code c> | ||
- | // char tüüpi muutuja c deklareerimine | + | char c; // char tüüpi muutuja c deklareerimine |
- | char c; | + | |
- | // Muutujale c väärtuse omistamine. | + | c = 65; // Muutujale c väärtuse omistamine. |
- | c = 65; | + | |
c = ' | c = ' | ||
Line 89: | Line 89: | ||
unsigned short x, y, test_variable; | unsigned short x, y, test_variable; | ||
</ | </ | ||
- | |||
==== Konstandid ==== | ==== Konstandid ==== | ||
Konstante deklareeritakse samamoodi nagu muutujaid, kuid ette lisatakse //const// võtmesõna. Konstantide väärtust ei saa programmi käigus muuta. Näide kasutamisest: | Konstante deklareeritakse samamoodi nagu muutujaid, kuid ette lisatakse //const// võtmesõna. Konstantide väärtust ei saa programmi käigus muuta. Näide kasutamisest: | ||
- | |||
<code c> | <code c> | ||
- | // int tüüpi konstandi määramine | + | const int x_factor = 100; // int tüüpi konstandi määramine |
- | const int x_factor = 100; | + | |
</ | </ | ||
Line 138: | Line 135: | ||
table[4][3] = 1; | table[4][3] = 1; | ||
</ | </ | ||
- | |||
- | ~~PB~~ | ||
===== Avaldised ===== | ===== Avaldised ===== | ||
Line 152: | Line 147: | ||
int x, y; | int x, y; | ||
- | // Mooduli võtmine, korrutamine ja väärtuse omistamine | + | // Mooduli võtmine, korrutamine ja väärtuse omistamine, x saab väärtuse 9 |
- | // x saab väärtuse 9 | + | |
x = (13 % 5) * 3; | x = (13 % 5) * 3; | ||
- | // Liitev-omistav operaator | + | // Liitev-omistav operaator, x väärtuseks saab 14 |
- | // x väärtuseks saab 14 | + | |
x += 5; | x += 5; | ||
- | // Ühe lahutamise kiirmeetod | + | // Ühe lahutamise kiirmeetod, x väärtuseks saab 13 |
- | // x väärtuseks saab 13 | + | |
x--; | x--; | ||
</ | </ | ||
Line 189: | Line 181: | ||
</ | </ | ||
- | **NB!** //bool// andmetüüp on pärit C++ keelest ja C-keeles see tegelikult puudub sest selle asemel on kasutusel täisarvud, kus 0 tähistab väära ja iga muu arv tõest väärtust. Kuid mugavuse pärast on //bool// Kodulabori teegis siiski kasutusel ja see on defineeritud kui //unsigned char//. Konstant //true// tähistab seal väärtust 1 ja //false// väärtust 0. | + | **NB!** //bool// andmetüüp on pärit C++ keelest ja C-keeles see tegelikult puudub, sest selle asemel on kasutusel täisarvud, kus 0 tähistab väära ja iga muu arv tõest väärtust. Kuid mugavuse pärast on //bool// Kodulabori teegis siiski kasutusel ja see on defineeritud kui //unsigned char//. Konstant //true// tähistab seal väärtust 1 ja //false// väärtust 0. |
==== Võrdlused ==== | ==== Võrdlused ==== | ||
- | Arvude väärtuste võrdlemisel saadakse loogilised väärtused. Võrdlustehted on samaväärsus (==), erinevus (!=), suurem (>), suurem-võrdne (>=), väiksem (<) ja väiksem-võrdne (<=). Näide kasutamisest: | + | Arvude väärtuste võrdlemisel saadakse loogilised väärtused. Võrdlustehted on samaväärsus (==), erinevus (!=), suurem (>), suurem-võrdne (> =), väiksem (<) ja väiksem-võrdne (< =). Näide kasutamisest: |
<code c> | <code c> | ||
Line 221: | Line 213: | ||
// Muutuja c disjunktsioon arvuga 2 (kahendsüsteemis 010) | // Muutuja c disjunktsioon arvuga 2 (kahendsüsteemis 010) | ||
- | // c väätuseks | + | // c väärtuseks |
c = c | 2; | c = c | 2; | ||
Line 230: | Line 222: | ||
Bititehted on hädavajalikud mikrokontrollerite registrite kasutamisel. Täpsemalt tutvustab neid AVR registrite peatükk. | Bititehted on hädavajalikud mikrokontrollerite registrite kasutamisel. Täpsemalt tutvustab neid AVR registrite peatükk. | ||
- | |||
- | ~~PB~~ | ||
===== Funktsioonid ===== | ===== Funktsioonid ===== | ||
Line 238: | Line 228: | ||
<code c> | <code c> | ||
- | // Kahe int tüüpi parameetriga | + | // Kahe int tüüpi parameetriga |
- | // Funktsioon | + | int sum(int a, int b) { |
- | int sum(int a, int b) | + | |
- | { | + | |
// Kahe arvu liitmine ja summa tagastamine | // Kahe arvu liitmine ja summa tagastamine | ||
return a + b; | return a + b; | ||
Line 247: | Line 235: | ||
// Ilma parameetrite ja tagastatava väärtuseta funktsioon | // Ilma parameetrite ja tagastatava väärtuseta funktsioon | ||
- | void power_off(void) | + | void power_off(void) { |
- | { | + | |
} | } | ||
</ | </ | ||
Line 258: | Line 245: | ||
int y = 3; | int y = 3; | ||
- | // Liitmisfunktsiooni väljakutsumine | + | // Liitmisfunktsiooni väljakutsumine, kus parameetriteks |
- | // Parameetriteks | + | |
x = sum(y, 5); | x = sum(y, 5); | ||
- | // Väljalülitamise funktsiooni väljakutsumine | + | // Väljalülitamise funktsiooni väljakutsumine, parameetrid |
- | // Parameetrid | + | |
power_off(); | power_off(); | ||
</ | </ | ||
Line 269: | Line 254: | ||
C-keele programmi täitmist alustatakse //main// nimelisest funktsioonist, | C-keele programmi täitmist alustatakse //main// nimelisest funktsioonist, | ||
- | ~~PB~~ | ||
===== Laused ===== | ===== Laused ===== | ||
Line 313: | Line 297: | ||
} | } | ||
</ | </ | ||
- | |||
- | ~~PB~~ | ||
==== Valikulause ==== | ==== Valikulause ==== | ||
Line 343: | Line 325: | ||
functionX(); | functionX(); | ||
// break lauset pole vaja, | // break lauset pole vaja, | ||
- | // kuna võrdlemine | + | // kuna võrdlemine |
} | } | ||
</ | </ | ||
Line 353: | Line 335: | ||
==== while ==== | ==== while ==== | ||
- | //while// võtmesõnaga tähistatud programmilõiku täidetakse seni, kuni sulgudes olev avaldis on tõene. | + | //while// võtmesõnaga tähistatud programmilõiku täidetakse seni, kuni sulgudes olev avaldis on tõene |
<code c> | <code c> | ||
Line 365: | Line 347: | ||
} | } | ||
</ | </ | ||
- | |||
- | ~~PB~~ | ||
==== for ==== | ==== for ==== | ||
- | //for// võtmesõnaga tsükkel sarnaneb //while// tsüklile, kuid lisaks on sulgudes ära määratud enne tsüklit täidetav lause ja iga tsükli ajal täidetav lause. | + | //for// võtmesõnaga tsükkel sarnaneb //while// tsüklile, kuid lisaks on sulgudes ära määratud enne tsüklit täidetav lause ja iga tsükli ajal täidetav lause |
Näide: | Näide: | ||
Line 389: | Line 369: | ||
==== Tsüklis liikumine ==== | ==== Tsüklis liikumine ==== | ||
- | //while// ja //for// tsüklitest saab erandkorras väljuda //break// võtmesõnaga. // | + | //while// ja //for// tsüklitest saab erandkorras väljuda //break// võtmesõnaga. // |
<code c> | <code c> | ||
Line 419: | Line 399: | ||
==== sprintf ==== | ==== sprintf ==== | ||
- | sprintf funktsioon toimib sarnaselt C-keeles üldlevinud printf funktsiooniga. Erinevuseks on funktsiooni tulemuse väljastamine puhvrisse (märgimassiivi), | + | sprintf funktsioon toimib sarnaselt C-keeles üldlevinud printf funktsiooniga. Erinevuseks on funktsiooni tulemuse väljastamine puhvrisse (märgimassiivi), |
Näide 1: | Näide 1: | ||
Line 432: | Line 412: | ||
</ | </ | ||
- | Näiteks kirjutab sprintf funktsioon märgimassiivi //buffer// teksti, mis on koostatud kolmest argumendist ja on vormindatud vastavalt formaadi tekstistringile. Formaadi tekstistringis tähistab marker (inglise keeles // | + | Näiteks kirjutab sprintf funktsioon märgimassiivi //buffer// teksti, mis on koostatud kolmest argumendist ja on vormindatud vastavalt formaadi tekstistringile. Formaadi tekstistringis tähistab marker (inglise keeles // |
Näide 2: | Näide 2: | ||
Line 454: | Line 434: | ||
| %X | Heksadetsimaalarv| 0x3F | | | %X | Heksadetsimaalarv| 0x3F | | ||
- | ===== Üldised utiliidid ===== | + | Standardteegi päisefailides stdio.h, stdlib.h ja string.h on veel terve hulk erinevaid funktsioone erinevate teksti-operatsioonide teostamiseks. Näiteks on võimalik nendega teksti muundada arvudeks, tekste liita ja võrrelda, tekstist märke otsida jpm. |
- | Standard teegi päisefailides stdio.h, stdlib.h ja string.h on veel terve hulk erinevaid funktsioone erinevate teksti-operatsioonide teostamiseks. Näiteks on võimalik nendega teksti muundada arvudeks, tekste liita ja võrrelda, tekstist märke otsida jpm. | + | ===== Juhuarvud ===== |
- | ==== random ==== | + | Juhuarvude genereerimine ei olegi AVR kontrolleril väga lihtne. Esmalt tuleb juhunumbrigeneraator seemendada arvuga, mille alusel genereeritakse suvaliste numbrite jada. Sama numbri järgi genereeritakse alati sama jada, seega suurema |
- | + | ||
- | Juhuarvude genereerimine ei olegi AVR kontrolleril väga lihtne. Esmalt tuleb juhunumbrigeneraator seemendada arvuga, mille alusel genereeritakse suvaliste numbrite jada. Sama numbri järgi genereeritakse alati sama jada, seega suurema | + | |
Näide, juhuarvu genereerimiseks vahemikus 1 kuni 16 (kaasa arvatud). | Näide, juhuarvu genereerimiseks vahemikus 1 kuni 16 (kaasa arvatud). | ||
Line 469: | Line 447: | ||
int x = 1 + (rand() % 16); | int x = 1 + (rand() % 16); | ||
</ | </ | ||
- | |||
- | Põhjalikuma inglisekeelse kirjelduse C keele funktsioonide kohta leiab aadressilt: | ||
- | [[http:// |