Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:programming:c:crashcourse [2014/10/01 09:05] raivo.sellet: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:
 </code> </code>
  
-~~PB~~+<pagebreak>
  
 ===== Andmed ===== ===== Andmed =====
Line 69: Line 68:
 Sulgudes olevat sõna "signed" ei pea kasutama, kuna vaikimisi ongi andmetüübid bipolaarsed. Sulgudes olevat sõna "signed" ei pea kasutama, kuna vaikimisi ongi andmetüübid bipolaarsed.
  
-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 "tähestikku", kus igal tähel ja märgil on oma järjekorranumber.+AVR mikrokontrolleril //int// = //short// \\ 
 +PC arvutil //int// = //long// \\ 
 + 
 +C-keeles puudub spetsiaalne teksti-andmetüüp. Selle asemel kasutatakse //char// tüüpi massiive (nendest edaspidi) ja ASCII "tähestikku", kus igal tähel ja märgil on oma järjekorranumber.
  
 ==== 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 = 'A'; // A on ASCII märgisüsteemis samuti väärtusega 65 c = 'A'; // A on ASCII märgisüsteemis samuti väärtusega 65
  
Line 89: Line 89:
 unsigned short x, y, test_variable; unsigned short x, y, test_variable;
 </code> </code>
- 
 ==== 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;+
 </code> </code>
  
Line 138: Line 135:
 table[4][3] = 1; table[4][3] = 1;
 </code> </code>
- 
-~~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 omistaminex saab väärtuse 9
-// x saab väärtuse 9+
 x = (13 % 5) * 3; x = (13 % 5) * 3;
  
-// Liitev-omistav operaator +// Liitev-omistav operaatorx väärtuseks saab 14
-// x väärtuseks saab 14+
 x += 5; x += 5;
  
-// Ühe lahutamise kiirmeetod +// Ühe lahutamise kiirmeetodx väärtuseks saab 13
-// x väärtuseks saab 13+
 x--; x--;
 </code> </code>
Line 189: Line 181:
 </code> </code>
  
-**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 puudubsest 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 saab 7 (kahendsüsteemis 111)+// c väärtuseks saab 7 (kahendsüsteemis 111)
 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 funktsiooni deklareerimine +// Kahe int tüüpi parameetriga funktsioon, mis tagastab int-tüüpi väärtuse 
-// Funktsioon tagastab int-tüüpi väärtuse +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) {
-{+
 } }
 </code> </code>
Line 258: Line 245:
 int y = 3; int y = 3;
  
-// Liitmisfunktsiooni väljakutsumine +// Liitmisfunktsiooni väljakutsumine, kus parameetriteks on muutuja ja konstandi väärtus
-// Parameetriteks on muutuja ja konstandi väärtus+
 x = sum(y, 5); x = sum(y, 5);
  
-// Väljalülitamise funktsiooni väljakutsumine +// Väljalülitamise funktsiooni väljakutsumine, parameetrid puuduvad
-// Parameetrid puuduvad+
 power_off(); power_off();
 </code> </code>
Line 269: Line 254:
 C-keele programmi täitmist alustatakse //main// nimelisest funktsioonist, mis teeb selle kohustuslikuks funktsiooniks. C-keele programmi täitmist alustatakse //main// nimelisest funktsioonist, mis teeb selle kohustuslikuks funktsiooniks.
  
-~~PB~~ 
  
 ===== Laused ===== ===== Laused =====
Line 313: Line 297:
 } }
 </code> </code>
- 
-~~PB~~ 
  
 ==== Valikulause ==== ==== Valikulause ====
Line 343: Line 325:
  functionX();  functionX();
  // break lauset pole vaja,  // break lauset pole vaja,
- // kuna võrdlemine lõppeb nagunii+ // kuna võrdlemine lõpeb nagunii
 } }
 </code> </code>
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:
 } }
 </code> </code>
- 
-~~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. //continue// võtmesõnaga saab alustada järgmist tsüklit ilma järgnevat koodi täitmata.+//while// ja //for// tsüklitest saab erandkorras väljuda //break// võtmesõnaga. //continue// võtmesõnaga saab alustada järgmist tsüklit ilma järgnevat koodi täitmata
  
 <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), mitte standard väljundisse (mis on mikrokontrolleritel enamasti jadaliides, PC peal konsooli aken). Funktsioonil on muutuv arv argumente mida vormindatakse vastavalt formaadile.+sprintf funktsioon toimib sarnaselt C-keeles üldlevinud printf funktsiooniga. Erinevuseks on funktsiooni tulemuse väljastamine puhvrisse (märgimassiivi), mitte standardväljundisse (mis on mikrokontrolleritel enamasti jadaliides, PC peal konsooli aken). Funktsioonil on muutuv arv argumentemida vormindatakse vastavalt formaadile.
    
 Näide 1: Näide 1:
Line 432: Line 412:
 </code> </code>
  
-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 //specifier//) %d täisarvu tüüpi argumenti mis tuleb tekstis asendada. Koostatud teksti lõppu lisatakse automaatselt null-bait mis tähistab tekstistringi lõppu. Kasutaja peab kindlustama, et koostatava teksti ja null-baidi pikkus ei ületaks märgimassiivi pikkust. Sprintf funktsioon lihtsustab fraaside ja lausete koostamist erinevat tüüpi muutujatest. Funktsioon tagastab märgimassiivi salvestatud teksti pikkuse (pikkus ei sisalda null-baiti). Vea korral tagastatakse negatiivne arv.+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 //specifier//) %d täisarvu tüüpi argumentimis tuleb tekstis asendada. Koostatud teksti lõppu lisatakse automaatselt null-baitmis tähistab tekstistringi lõppu. Kasutaja peab kindlustama, et koostatava teksti ja null-baidi pikkus ei ületaks märgimassiivi pikkust. Sprintf funktsioon lihtsustab fraaside ja lausete koostamist erinevat tüüpi muutujatest. Funktsioon tagastab märgimassiivi salvestatud teksti pikkuse (pikkus ei sisalda null-baiti). Vea korral tagastatakse negatiivne arv.
  
 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 juhuslikkuse saavutamiseks on kasulik seemendus teha arvugamis ei ole alati sama - näiteks kasutada selleks kellaaega või lahti ühendatud ADC sisendist väärtust.
- +
-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 juhuslikku saavutamiseks on kasulik seemendus teha arvuga mis ei ole alati sama - näiteks kasutada selleks kellaaega või lahti ühendatud ADC sisendist väärtust.+
  
 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);
 </code> </code>
- 
-Põhjalikuma inglisekeelse kirjelduse C keele funktsioonide kohta leiab aadressilt: 
-[[http://www.cplusplus.com/reference/clibrary/|http://www.cplusplus.com/reference/clibrary/]] 
et/programming/c/crashcourse.1412154306.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0