c++ akademie sh 3. standardní vstup, výstup, pole, ukazatele · c++ akademie sh 3. standardní...
TRANSCRIPT
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
C++ Akademie SH
3. Standardní vstup, výstup, pole, ukazatele
Michal Kvasni£ka
Za£áte£níci C++
28. b°ezna 2011
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Obsah
1 Standardní vstup a výstupStandardní vstupStandardní výstup - manipulátory
2 PolePouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
3 Platnost prom¥nnýchP°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
4 UkazateleP°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Standardní vstupStandardní výstup - manipulátory
Obsah
1 Standardní vstup a výstupStandardní vstupStandardní výstup - manipulátory
2 PolePouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
3 Platnost prom¥nnýchP°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
4 UkazateleP°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Standardní vstupStandardní výstup - manipulátory
Standardní vstup
Syntaxe:
typ promenna;
cin >> promenna;
O²et°ení vstupu - 01.cpp:
#include <iostream>
using namespace std;
int main(void){
int cislo;
cout << "Zadej cislo: ";
cin >> cislo;
if(cin.fail()){
cout << "Nespravny vstup." << endl;
return 1;
}
cout << "Cislo je: " << cislo << endl;
return 0;
}Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Standardní vstupStandardní výstup - manipulátory
Standardní výstup - manipulátory
Knihovna:
#include <iomanip>
Syntaxe - 02.cpp:
cout � manipulator� promenna � endl;
P°ehled n¥kolika manipulátor·:
setw(int n) ²í°ka poloºky 'n' znak·set�ll(char c) plnící znak 'c'
�xed zobrazení £ísla na 6 des. místdec dekadická konverzehex ²estnáctková konverze
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Pouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
Obsah
1 Standardní vstup a výstupStandardní vstupStandardní výstup - manipulátory
2 PolePouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
3 Platnost prom¥nnýchP°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
4 UkazateleP°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Pouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
Pole - pouºití a syntaxe
Pouºití
Jednoduchá datová struktura, která nám dovoluje sjednotitprom¥nné stejného typu pod jeden identi�kátor
Syntaxe:
typ promenna[velikost_pole];
P°íklad:
int pole[10];
vytvo°ení pole o deseti prvcích
k prvk·m p°istupujeme p°es indexy 0 � 9 (pole[0])
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Pouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
Vyuºití pole I.
Program teploty - bez pouºití pole
Zadání: Program, který p°e£te teploty nam¥°ené v jednotlivých dnech v týdnu,
vypo£ítá pr·m¥rnou teplotu a pro kaºdý den vypí²e odchylku od pr·m¥rné
teploty.
Zdrojový kód - 03.cpp:
#include <iostream>
using namespace std;
int main(void){
int t1, t2, t3, t4, t5, t6, t7, p;
cout << "Zadejte teploty v sedmi dnech v týdnu: " << endl;
cin >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7;
p = (t1+t2+t3+t4+t5+t6+t7)/7;
cout << p << "->" << t1-p<<","<< t2-p <<","<< t3-p <<",";
cout << t4-p <<","<< t5-p <<","<< t6-p <<","<< t7-p << endl;
return 0;
}Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Pouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
Vyuºití pole II.
Program teploty - s pouºitím pole - 04.cpp
#include <iostream>
using namespace std;
int main(void){
int t[6], p = 0;
cout << "Zadejte teploty v sedmi dnech v týdnu: " << endl;
for(int i = 0; i < 7; i++){
cin >> t[i];
p += t[i];
}
p = p/7; cout << p << "->";
for(int i = 0; i < 7; i++){
cout << t[i]-p;
if(i < 6) cout << ",";
else cout << endl;
}
return 0;
}Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
Pouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
Vícerozm¥rné pole
De�nice
Vícerozm¥rným polem se obecn¥ rozumí takové pole, k jehoºprvk·m se p°istupuje pomocí více neº jednoho indexu.
V jazyce C++ se s vícerozm¥rnými poli pracuje jako s poli,jejichº prvky jsou op¥t pole.
P°íklad - dvourozm¥rné pole
Deklarace dvourozm¥rného pole (3 °ádky, 4 sloupce) prvk· typu int a napln¥nív²ech jeho hodnot:
int matice[3][4];
for(int i = 0; i < 3; i++)
for(int j = 0; j < 4; j++)
cin >> matice[i][j];
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
Obsah
1 Standardní vstup a výstupStandardní vstupStandardní výstup - manipulátory
2 PolePouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
3 Platnost prom¥nnýchP°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
4 UkazateleP°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
P°ehled typ· prom¥nných
Lokální prom¥nné
Lokální prom¥nné mají svou platnost omezenou vºdy jen nablok, v kterém jsou de�novány a v blocích vno°ených.
Globální prom¥nné
Jsou de�novány mimo t¥lo jakékoli funkce, proto jsou viditelnév²em funkcím, které jsou deklarované po nich.
Nepsané pravidlo - snaºit se globální prom¥nné pouºívat, comoºná nejmén¥ - nejlépe v·bec.
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
Platnost prom¥nných - p°íklad
P°íklad:#include <iostream>
using namespace std;
int g_cislo1 = 5; //globalni promenna
int main(void){
int cislo2 = 10; //lokalni promenna
for(int i = 0; i < 10; i++)
cout << i;
//lokalni promenna 'i' platna pouze uvnitr toho cyklu
if(g_cislo1 == 5){
int cislo3 = 10;
//lokalni promenna platna pouze uvnitr teto podminky
}
return 0;
}
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
P°edávání prom¥nných hodnotou
Popis:
Pokud voláme funkci, která o£ekává oby£ejné hodnoty, ozna£ujeme toto
p°edání parametru jako p°edání hodnotou. V tomto zp·sobu se p°i volání
funkce se místo prom¥nných dosadí dané hodnoty a ty se ode²lou funkci
(zkopíruji se), která si je p°i°adí do svých lokálních prom¥nných.
P°íklad - 05.cpp:
void fce(int a){//a je lokalni promenna plati pouze v teto fci
cout << a << endl;
a = 5;
}
int main(void){
int cislo = 10;
fce(cislo); // pri tomto volani se dosadi za cislo hodnota 10
return 0; //-> provede se volani fce(10);
}
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Obsah
1 Standardní vstup a výstupStandardní vstupStandardní výstup - manipulátory
2 PolePouºití a syntaxeVyuºití pole I.Vyuºití pole II.Vícerozm¥rné pole
3 Platnost prom¥nnýchP°ehled typ· prom¥nnýchP°íkladP°edávání prom¥nných hodnotou
4 UkazateleP°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
P°edávání prom¥nných odkazem
Popis:
N¥kdy se ov²em hodí, aby funkce mohla m¥nit prom¥nné funkce, která ji
zavolala. K tomuto ú£elu se pouºívá takzvaný výstupní parametr. Funkci se
ode²le jako parametr pouze adresa dané prom¥nné a né její hodnota, díky tomu
se daná funkce m·ºe podívat na toto místo v pam¥ti a p°epsat ho novou
hodnotou. Tento zp·sob se realizuje pomocí ukazatel·.
Ukazatel
Speciální prom¥nná, která má v sob¥ uloºenou adresu n¥jaké prom¥nné.
Syntaxe
typ * jmeno;
int * p_cislo; // Ukazatel na prom¥nnou typu int
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
P°íklad pouºití
Získání adresy n¥jaké prom¥nné:
Pouºitím operátoru reference - &
P°íklad - 06.cpp:
int * p_cislo;
int hodnota = 10;
p_cislo = &cislo;
//Nyni je v promene 'p_cislo' ulozena adresa promenne hodnota
Pokud bychom nyní cht¥li zm¥nit hodnotu v prom¥nné 'hodnota', muºeme taku£init normáln¥, jak jsme zvyklí pomocí hodnota = 20. Nebo m·ºeme pouºítnový zp·sob a to zm¥nu p°es ukazatel pomocí operátoru dereference *.
*p_cislo = 20;
cout << hodnota; // hodnota = 20
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Výstupní parametr funkce
P°íklad - 07.cpp:
void fce(int * p_a){ //ukazatel na promennou 'cislo'
cout << "Deref. 'p_a' ve fci pred zmenou: " << *p_a << endl;
*p_a = 5;
cout << "Deref. 'p_a' ve fci po zmene: " << *p_a << endl;
}
int main(void){
int cislo = 10;
cout << "Promenna 'cislo' v main pred fci: " << cislo << endl;
fce(&cislo);
cout << "Promenna 'cislo' v main po fci: " << cislo << endl;
//Po provedeni fce se hodnota promenne 'cislo' zmeni
return 0;
}
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
P°edání pole jako parametr funkce
Pouºívá se práv¥ p°edání pomocí ukazatele - 08.cpp:
#include <iostream>
using namespace std;
void fce(int * pole){ //totozne s pole[]
cout << "Hodnota pole[2]: " << pole[2] << endl;
pole[2] = 10;
}
int main(void){
int pole[5] = {1,2,3,4,5};
fce(pole); //totoºne s &pole[0] - adresa prvniho prvku pole
cout<< "Hodnota pole[2] po skonceni fce: " << pole[2] << endl;
return 0;
}
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
P°edání vícerozm¥rného pole jako parametr funkce
P°íklad - 09.cpp, 10.cpp:
#include <iostream>
using namespace std;
void fce(int pole[][4]){ //prvni rozmer muzeme preskocit, ale
// ostatni musime specifikovat
cout << "Hodnota pole[2][3]: " << pole[2][3] << endl;
pole[2][3] = 10;
}
int main(void){
int pole[3][4] //staticka alokace
pole[2][3] = 5;
fce(pole); //totoºne s &pole[0] - adresa prvniho prvku pole
cout << "Hodnota pole[2][3] po skonceni fce: " << pole[2][3];
return 0;
}
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele
Standardní vstup a výstupPole
Platnost prom¥nnýchUkazatele
P°edávání prom¥nných odkazemP°íklad pouºitíVýstupní parametr funkceP°edání pole jako parametr funkce
Konec
Konec
D¥kuji za pozornost!
Michal Kvasni£ka 3. Standardní vstup, výstup, pole, ukazatele