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:// | ||