C++ lühikursus: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
Line 65: Line 65:
Kolmas tüüp - valikulause (switch statement)
Kolmas tüüp - valikulause (switch statement)


Kui meil näiteks on vaja et muutuja iga konkreetse väärtuse peale käivituks tingimuslause võüime kasutada valiklauset (switch case). Valiklauseid on suhteliselt kerge jälgida ning modifitseerida. Töötab see nii, et alustades ülaltpoolt hakkab programm võrdlema tingimusi- juhul kui tingimus sobib käivitab ta selle bloki. Viimane case blokk on "default" mis käivitatakse alati kui programm sinnani jõuab. Kuna iga bloki lõpus on ka break käsk siis sinnani jõudes katkestatakse  valiklause ning lõpetatakse seal oleva koodi täitmine.  
Kui meil näiteks on vaja, et muutuja iga konkreetse väärtuse peale käivituks erinev tingimus, võime kasutada valiklauset (switch case). Valiklauseid on suhteliselt kerge jälgida ning modifitseerida. Töötab see nii, et alustades ülaltpoolt hakkab programm võrdlema tingimusi- juhul kui tingimus sobib käivitab ta selle bloki. Viimane case blokk on "default" mis käivitatakse alati kui programm sinna jõuab. Kuna iga bloki lõpus on ka break käsk siis sinnani jõudes katkestatakse  valiklause ning lõpetatakse seal oleva koodi täitmine.  


NÄIDE
NÄIDE
Line 119: Line 119:
Do-while kordus
Do-while kordus


Do while kordus on põhimõtteliselt sama nagu while kordus ühe väikse erandiga, nimelt kontrollitakse tsüklist väljumise tingimust peale seda kui tsükkel on juba käivitatud. See tagab et antud tsükkel  käivitatakse vähemalt üks kord ka siis kui tingimus ei pruugi tõele vastata. See on kasulik juhul kui tingimus tsüklist väljumiseks on defineeritud tsüki enda sees .
Do while kordus on põhimõtteliselt sama nagu while kordus ühe väikse erandiga: nimelt kontrollitakse tsüklist väljumise tingimust peale seda kui tsükkel on juba käivitatud. See tagab, et antud tsükkel  käivitatakse vähemalt üks kord ka siis kui tingimus ei pruugi tõele vastata. Mis on väga kasulik juhul kui kontrolltingimus tsüklist väljumiseks on defineeritud tsükli enda sees .


NÄIDE
<pre>
<pre>
#include <iostream>
#include <iostream>
Line 129: Line 130:
   unsigned long n;
   unsigned long n;
   do {
   do {
     cout << "Enter number (0 väljud do whilst): ";
     cout << "Enter number (0iga väljud tsüklist): ";
     cin >> n;
     cin >> n;
     cout << "sisestati: " << n << "\n";
     cout << "sisestati: " << n << "\n";

Revision as of 11:27, 17 February 2010

Kursusest

ITK robootikaklubis kasutatakse pilditöötlusplatvormina enda poolt C++, QT4 ja OpenCV vanenditega loodud raamistiku. Kuna õppekavas C++ puudub:( ja samas on seda vähemalt robootikutel vaja siis siin lehel on kursuse materjalid ja tegevused.

Harjutustunnid

1. Structure of a program läbi lugeda

Sissejuhatus

Mis on C++ ja miks meil seda vaja on? programmeerimiskeelte populaarsus

Keele põhikonstruktsioonid

if - tingimuslause

Esimene tüüp - puhas IF

if("tingimus mille puhul seda tingimuslauset täidetakse"){ "tegevus mis sooritatakse kui tingimus tõele vastab" }

NÄIDE

#include <iostream>
using namespace std;
int main (){	
//defineerin boolean i mille väärtus on true
	bool i =true;
//if lause mis käivitub siis kui boolean i väärtuseks on true		
                if (i){
			cout << "Hello World!";
		}
	
}

Teine tüüp -if else

Kui me näiteks meil on rohkem kui üks stsenaarium mille puhul soovime kasutada erinevaid tingimuslauseid võime kasutada "if else" lauset. Eriti mugav on seda kasutada väärtusvahemike eraldamiseks

NÄIDE:

#include <iostream>
using namespace std;
int main(void)
{
   int number;
   cout << "Sisesta number ";
//küsib käsurealt numbrit
   cin >> number;
//kui number on suurem kui 75 siis väljastab sõna "kala"
   if (number >75 )
      cout << "kala" << endl;
//kui number on suurem kui 50 aga väiksem kui 75  siis väljastab sõna "koer"
   else if (number >50 )
      cout << "koer" << endl;
//kui number on väiksem kui 50
   else 
      cout << "mauntz" << endl;
   return 0;
}

Kolmas tüüp - valikulause (switch statement)

Kui meil näiteks on vaja, et muutuja iga konkreetse väärtuse peale käivituks erinev tingimus, võime kasutada valiklauset (switch case). Valiklauseid on suhteliselt kerge jälgida ning modifitseerida. Töötab see nii, et alustades ülaltpoolt hakkab programm võrdlema tingimusi- juhul kui tingimus sobib käivitab ta selle bloki. Viimane case blokk on "default" mis käivitatakse alati kui programm sinna jõuab. Kuna iga bloki lõpus on ka break käsk siis sinnani jõudes katkestatakse valiklause ning lõpetatakse seal oleva koodi täitmine.

NÄIDE

#include <iostream>
using namespace std;
int main(void)
{
   int number;
   cout << "Sisesta number 1,2 või 3 ";
   cin >> number;
	switch (number) {
//juhul kui number on üks käivitame selle bloki
	   case 1:
	      cout << "sisestati number 1 " << endl;
		break;
//juhul kui number on 2 käivitame selle bloki
	   case 2:
	      cout << "Sisestati number 2" << endl;
		break;
//juhul kui eelnevaid blokke pole üldse käivitatud lähme siia blokki
	   default:
		cout << "Sisestati number mis pole kaks ega üks" << endl;
	}
}


While kordus

while(tingimus){kood mida täidetakse nii kaua kuni tingimus kehtib}

NÄIDE

#include <iostream>
using namespace std;

int main ()
{
  int n;
  cout << "Number";
  cin >> n;
// while loop millest ei väljuta ennne kui tingimus ei vasta enam tõele (ehk n on väiksem kui 0)
  while (n>0) {
    cout << n << ", ";
//lahutame 'n'ist iga tsükli käivitamise korral ühe
    n=n-1;
  }
  return 0;
}

Do-while kordus

Do while kordus on põhimõtteliselt sama nagu while kordus ühe väikse erandiga: nimelt kontrollitakse tsüklist väljumise tingimust peale seda kui tsükkel on juba käivitatud. See tagab, et antud tsükkel käivitatakse vähemalt üks kord ka siis kui tingimus ei pruugi tõele vastata. Mis on väga kasulik juhul kui kontrolltingimus tsüklist väljumiseks on defineeritud tsükli enda sees .

NÄIDE

#include <iostream>
using namespace std;

int main ()
{
  unsigned long n;
  do {
    cout << "Enter number (0iga väljud tsüklist): ";
    cin >> n;
    cout << "sisestati: " << n << "\n";
  } while (n != 0);
  return 0;
}
}

Muutujate deklareerimine

Deklareerimine

Muutuja deklareerimine ütleb kompileerimise ajal kompilaatorile muutuja tüübi ning selle võimaliku suuruse - double (8 baiti), int (4 baiti), short (2 baiti), char (1 bait) jne.


Deklareerime int tüüpi muutuja 'a'.

Näide:

int a;


Defineerimine

Muutuja defineerimine sisaldab endas muutujale mälu eraldamist ning muutuja (esmase) väärtuse salvestamist mällu.


Defineerimine eelnevalt deklareeritud int tüüpi muutuja 'a'.

Näide:

a = 10;


Kui muutuja pole eelnevalt deklareeritud, siis on võimalik deklareerimine ja defineerimine omavahel kombineerida. Näide:

int a = 10;


Muutujate deklareerimine funktsioonides

Muutuja deklareerimine funktsiooni sees eraldab automaatselt muutujale mälu (defineerib muutuja).

Näide:

int main()
{
    int a;
    return 0;
}

Selline deklareermine on ohtlik, sest me ei tea, mis on muutuja 'a' väärtus. Kuna kompilaator defineerib muutuja 'a' automaatselt, siis ta väärtuseks saab see, mis parasjagu talle eraldatud mälu aadressil salvestatud oli.


Muutujate väärtustamine

Muutuja deklareerimisel on ta väärtus esialgu määramata või teadmata. Esmakordset väärtustamist nimetatakse muutuja initsialiseerimiseks (initialization).

Näide:

int a = 0;
int a (0); //constructor initialization

Mõlemal kujul initsialiseerimine on C++ puhul korrektne.


Lisalugemist

Rohkem näiteid ja täpsemalt muutujate deklareerimise kohta saab lugeda aadressidelt: http://www.cplusplus.com/doc/tutorial/variables/

http://stackoverflow.com/posts/671984/revisions

Operaatorid ja tehted

Operators

Muutuja väärtustamine (=)

#include <iostream>
int main () {
    int a,b,c;        // a:?,  b:?,  c:?
    c = 0xFF;         // c:255
    a = 2 + (b = 5);  // a:7,  b:5
    a = b = c = 5;    // kõik väärtusega 5
}

Aritmeetilised tehted ( +, -, *, /, % )

Bititehted ( &, |, ^, ~, <<, >> )

Tehtega väärtustamine (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)

(++, --)

( ==, !=, >, <, >=, <= )

( !, &&, || )

(?)

(,)

a = (b=3, b+2);

Tehete järjekord

Sisendi ja väljundi manipuleerimine

IOStream'i manipulaatorid
Ekraanil oleva teksti sisendi ja väljundi manipuleerimiseks on vaja kaasata "iomanip" header:

#include <iomanip>

Välja laius

setw(x), kus x on tähemärkide arv väljal.
Näide korralikult formeeritud korrutustabelist:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
	const int max = 12;
	const int width = 6;
	for(int row = 1;row <= max;row++) {
		for(int col = 1;col <= max;col++) {
			cout << setw(width) << row * col;
		}
		cout << endl;
	}
	return 0;
}

Joondamine väljal

Väljal olevat teksti saab joondada vasakule ja paremale. Algselt joondatakse numbrid paremala ja selle jaoks on vaja ainult vasakjoondus sisse ja välja lülitada.
Sisse ja välja lülitamine:

setiosflags(ios::left);
resetiosflags(ios::left);

Kui teiste juhtumite korral on vaja paremjoondust, siis tasub kasutada ios::right lippu.
Näide, kus üle rea vahetatakse joondust:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
	const int max = 12;
	const int width = 6;
	for(int row = 1;row <= max;row++) {
		if(row % 2) {
			cout << setiosflags(ios::left);
		}
		else {
			cout << resetiosflags(ios::left);
		}
		for(int col = 1;col <= max;col++) {
			cout << setw(width) << row * col;
		}
		cout << endl;
	}
	return 0;
}

OpenCV

CvPoint ja CvLine

CvPoint(int x, int y)

Lingid

C++ tutorial