====== Jednorozměrná pole ====== Deklarujeme pole deseti celých čísel int a [10]; Překladač pro proměnnou **a** vyhradí místo stejně dlouhé jako deset celočíselných proměnných. \\ K jednotlivým položkám přistupujeme pomocí **a[0]**, **a[1]**, ... , **a[9]**. \\ První položka má index 0. Pokud chceme naplnit pole hodnotami 10, 20, ... , 100 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] ----------------------------------------------------------------------- | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | ----------------------------------------------------------------------- Můžeme to udělat následujícím programem #include using namespace std; int a [10]; int main () { for (int i = 0; i < 10; i ++) { a[i] = 10*(i+1); } for (int i = 0; i < 10; i ++) { cout << "a " << i << " ... " << a[i] << endl; } } ==== Součet hodnot ===== #include using namespace std; int a [10]; int main () { for (int i = 0; i < 10; i ++) { a[i] = 10*(i+1); } int sum = 0; for (int i = 0; i < 10; i ++) { sum = sum + a[i]; } cout << "soucet " << sum << endl; } ==== Inicializace pole ===== Velikost pole můžeme zadat také konstantou (nebo konstantním výrazem, tj, výrazem složeným jen z konstant) Pole je možné inicializovat seznamem hodnot ve složených závorkách. ( Pokud zadáme příliš málo hodnot, zbývající položky pole mají nedefinovanou hodnotu. ) const int N = 10; int b [N] = { 7, 3, 12, 5, 20, 2, 8, 1, 22, 7 }; Nemusíme zadávat délku pole. \\ Za poslední hodnotou může být čárka navíc. #include using namespace std; int c [] = { 7, 3, 12, 5, 20, }; int main () { cout << "delka pole c je " << sizeof (c) / sizeof (c[0]) << endl; // nelze pouzit pro parametry funkce } delka pole c je 5 ==== Největší hodnota v poli ===== #include using namespace std; const int N = 10; int b [N] = { 7, 3, 12, 5, 20, 2, 8, 1, 22, 7 }; int main () { int top = b[0]; for (int i = 1; i < 10; i ++) { if (b[i] > top) { top = b[i]; } } cout << "maximum " << top << endl; } ==== Jednoduché třídění hodnot ==== #include using namespace std; const int N = 10; int b [N] = { 7, 3, 12, 5, 20, 2, 8, 1, 22, 7 }; int main () { for (int k = 0; k < N; k ++) { for (int i = 0; i < 10-k-1; i ++) { if (b[i] > b[i+1]) { // prohodime b[i] , b[i+1] int t = b[i]; b[i] = b[i+1]; b[i+1] = t; } } } for (int i = 0; i < N; i ++) { cout << b[i] << " "; } cout << endl; } ==== Výstup do textového souboru ==== Použijeme //file output stream// podobným způsobem jako //cout//. #include using namespace std; ofstream f ("data.txt"); f << " ... " << endl; #include #include // ofstream ... output file stream using namespace std; const int N = 20; int a[N]; int main () { a[0] = 0; a[1] = 1; for (int i = 2; i < N; i++) { a[i] = a[i-1] + a [i-2]; } cout << "( "; for (int i = 0; i < N; i++) { cout << a[i]; if (i < N - 1) { cout << ", "; } } cout << " )" << endl; ofstream f ("data.txt"); f << "( "; for (int i = 0; i < N; i++) { f << a[i]; if (i < N - 1) { f << ", "; } } f << " )" << endl; f.close(); if (f.good ()) { cout << "soubor je v poradku" << endl; } else { cout << "soubor je v chybovem stavu" << endl; } } ==== Funkce pro třídění a tisk ==== Typ parametru obsahuje i počet prvků pole. \\ Pole se předává jako ukazatel (adresa začátku pole). \\ Pokud změním hodnoty uložené v parametru, změní se původní pole. #include using namespace std; const int N = 10; void print (int p[N]) { cout << "( "; for (int i = 0; i < N; i ++) { cout << p[i]; if (i+1 < N) { cout << ", "; } } cout << " )" << endl; } void sort (int p[N]) { for (int k = 0; k < N; k ++) { for (int i = 0; i < N-k-1; i ++) { if (p[i] > p[i+1]) { // prohodime p[i] , p[i+1] int tmp = p[i]; p[i] = p[i+1]; p[i+1] = tmp; /* pokud predavane pole jako paramater, meni se obsah puvodniho pole, ve skutecnosti se predava ukazatel na zacatek pole */ } } } } int b [N] = { 7, 3, 12, 5, 20, 2, 8, 1, 22, 7 }; int c [] = { 7, 3, 12, 5, 20, }; int main () { print (b); sort (b); print (b); cout << "delka pole c je " << sizeof (c) / sizeof (c[0]) << endl; // nelze pouzit pro parametry funkce } ( 7, 3, 12, 5, 20, 2, 8, 1, 22, 7 ) ( 1, 2, 3, 5, 7, 7, 8, 12, 20, 22 ) delka pole c je 5 [[template|pokud Vás zajímá příklad s objektem, předefinovanými [] a šablonami, tak je schovaný zde]] ==== Sčítání vektorů a násobení vektoru číslem ===== #include using namespace std; const int N = 3; void add (double v[N], double a[N], double b[N]) // v = a + b { for (int i = 0; i < N; i ++) { v[i] = a[i] + b[i]; } } void mul (double v[N], double c, double a[N]) // v = c * a { for (int i = 0; i < N; i ++) { v[i] = c * a[i]; } } void print (double p[N]) { cout << "( "; for (int i = 0; i < N; i ++) { cout << p[i]; if (i+1 < N) { cout << ", "; } } cout << " )" << endl; } int main () { double a [N] = { 1 , 0, 0 }; double b [N] = { 1 , 2, 3 }; double z [N]; print (a); print (b); // z = 0.5 a + b mul (z, 0.5, a); add (z, z, b); print (z); } ==== Předvod do jiné číselné soustavy ==== #include using namespace std; void conv (int n, int zaklad = 2) { const int MAX = 10; char cislice [MAX]; int i = 0; while (n > 0 && i < MAX) { int k = n % zaklad; // ziskame nejnizsi cislici jako cislo od 0 do zaklad-1 if (k <= 9) { cislice [i] = '0' + k; // prevedeme cislo na znak } else { cislice [i] = 'A' + k - 10; // 10 prevedeme na A, 11 na B, ... } n = n / zaklad; // odstranime nejnizsi cislici i ++; } while (i > 0) { i --; cout << cislice [i]; } cout << endl; } int main() { conv (12); conv (256); conv (512); conv (1024); // pole cislic je prilis kratke }