verze 0.3
Hello World Nejjednoduší program ukazující vypsání textu. #include <iostream> using namespace std; int main(void) { cout << "Hello World" << endl; return 0; }
Pamět Proměnná Vyhrazuje místo v paměti pro uložení dat Ukazatel Proměnná obsahující adresu místa v paměti Obrázek
Proměnná Založení proměnné: typ nazev; Přiřazení hodnoty: nazev = 1; Přiřazení hodnoty jiné proměnné: nazev=nazev_2; Vypsání hodnoty proměnné: cout << nazev; Načtení promměné ze vstupu: cin >> nazev;
Základní datové typy Datové typy: Celá čísla: int, long, long long Celá čísla bez zaménka: unsigned int,... Racionální čísla: float, double, long double bool
Obor platnosti proměnné Globální proměnné: deklarované mimo funkce přístupné v celém programu Lokální proměnné: deklarované v bloku { } přístupné jen v daném bloku
Literálni konstanty Typy: 10 int 1.0 double
Aritmetika číslených datových typů Operátory: + sčítání - odečítání * násobení / dělení % modulo ++ inkrementace hodnoty -- dekrementace hodnoty
Aritmetika číslených datových typů probíhá nad stejným datovým typem jako jsou operandy:: int + int = int double + double = double int/int = int!!!!!!!!!!! float/int =?? -> automatické přetypování -> float/float = float Operátor přetypování: (typ)promenna program se pokusí převést proměnou na žádaný typ Přetečení: unsigned int a=0; a--; a==uint_max
Ukazatele Proměnné ukládající adresu jiné proměnné Založení ukazatele: datovy_typ * nazev_ukazatele; Přiřazení adresy proměnné do ukazatele: nazev_ukazatele = &promenna; Přiřazení hodnoty do proměnné na kterou ukazuje ukazatel: *nazev_ukazatele=1; Vypsání hodnoty proměnné na kterou ukazuje ukazatel: cout << *nazev_ukazatele;
Ukazatele Operátory: &promena *uk sizeof(typ) new typ delete uk (typ*)uk Typ: void vrací adresu proměnné dereference ukazatele vrací velikost datového typu alokuje pamět velikosti daného typu vrcí ukazatel na ni uvolňuje pamět na kterou ukazuje ukazatel přetypování ukazatele
Řízení běhu programu Řízení běhu programu: Podmíněné bloky Smyčky Funkce
Řízení běhu programu IF Podmíněný blok programu: if(podmínka) { //příkazy pokud byla podmínka splněna } nebo if(podmínka) { //příkazy pokud byla podmínka splněna } else { //příkazy pokud nebyla podmínka splněna }
Řízení běhu programu WHILE while(podmínka) { //smyčka poběží pokud bude podmínka platit }
Řízení běhu programu FOR for(pred_behem;podminka;po_kazde_iteraci) { //smyčka poběží pokud bude podmínka platit } Typycky: for(int i=0;i<n;i++) cout << i;
Řízení běhu smyčky break; zastavení nejbližší smyčky continue; ukončení aktuální iterace smyčky
Podmínky Libovolná nenulová hodnota je pravdivá Operátory: == Rovnost hodot promměných!= Nerovnost hodnot proměnných < Menší než > Větší než <= Menší nebo rovno >= Větší nebo rovno = Přiřazení hodnoty Má hodnotu přiřazované hodnoty
Skládání podmínek Operátory:! NOT, negace OR, nebo && AND, a
Funkce Podporogramy Tvoříme pro části kódu které se opakují v různých místech Tvoříme pro ucelené kroky kódu, pro zpřehlednění Deklarace musí předcházet použití Parametry se chovají jako lokální proměnné založené ve funkci inicializované předávanou hodnotou Parametry se předávají hodnotou return slouží pro okamžité opuštění funkce a předává návratovou hodnotu
Funkce Obecně Deklarace: jen hlavička funkce se středníkem typ nazev(typ param1,typ param2,...); Definice: typ nazev(typ para1,typ param2,...) { //dělej něco užitečného }
Funkce Bez parametrů Bez návratové hodnoty void nazev(void) { //dělej něco užitečného } Volání v programu: nazev();
Funkce S parametry Bez návratové hodnoty void nazev(typ param1, typ param2,... ) { //dělej něco užitečného } Volání v programu: nazev(promenna_1,promenna_2,...);
Funkce S parametry S návratovou hodnotou typ nazev(typ param1, typ param2,... ) { //dělej něco užitečného return neco; } Volání v programu: promenna = nazev(promenna_1,promenna_2,...);
Pole N proměnných stejného typu umístěných v paměti zasebou Počet prvků musí být konstanta v době překladu (v C) Pole lze přetypovat na ukazatel typu prvku pole Nejsou kontrolovány hranice pole Obrázek Indexy jsou od 0 do N-1
Pole Založení pole: typ nazev[pocet_prvku]; Přistup pomocí Operátoru Indexu: nazev[index] = 1; Založení dynamicky alokovaného pole: typ * uk = new typ [pocet_prvnku] Uvolneni dynamicky alokovaného pole: delete [] uk;
Pole a ukazatele Operátor Indexu [] lze použít i na dereferenci ukazatele a přistoupení k požadovanému prvku K prvkům pole lze přistupovat pomocí ukazatelů Operátor inkrementace ++ zvyšuje adresu ukazatele o velikost typu ukazatele
Struktury: Námi definvaný datový typ obsahující více položek jiných datových typů Zvyšuje čitelnost kódu Umožňuje tvořit dynamické datové struktury (spojový seznam,...) Předchůdce Objektů v C/C++ asi 5 způsobů definic, my se naučíme jeden.
Struktury: Obecně: typedef struct { typ nazev_polozky1; typ nazev_polozky2;... } nazev_strukury; Příklad: typedef struct { double re; double im; } komplexni_cislo;
Struktury použití: Deklarace proměné: nazev_struktury nazev_promenne; Pristup k polozkam struktury: nazev_strukury.nazev_polozky Pristup k polozkam dynamicky akokovaných strukur: (*uk).nazev_polozky uk->nazev_polozky
Rozdělení programu do více souborů: Zpřehlední kódu projektu Umožňuje tvorbu knihoven Funkce jednotého charakteru umístíme do separátního souboru Deklarace funkcí se umíst ují do Hlavičkového souboru nazev.h Definice funkcí se umíst ují do souboru nazev.cpp V souboru, kde budeme funkce volat připojíme hlavičkový soubor #include "nazev.h"
Hlavičkový soubor: nazev.h #ifndef MOJE_FUNKCE_H #define MOJE_FUNKCE_H #endif //deklarace funkcí typ nazev1(typ parametr); typ nazev2(typ parametr); //deklarace strukur,...
Implementační soubor: nazev.cpp #include "nazev.h" typ nazev1(typ parametr) { } typ nazev2(typ parametr) { }
Použití: main.cpp #include "nazev.h" int main(void) { nazev1(5); return 0; }
Řetězce Pole znaků char Deklarace char text[255]; Inicializace char text[]="hello World"; Hodnota jednoho znaku: a Posledni znak vždy 0: \0 Specialní znaky: \0 \t \n
Převod řetězce na číslo #include <stdlib.h> int strtol(char *text, char **end,int soustava); double strtod(char *text, char **end); Struktura text text na převedeni Otevření: end adresa ukazatele, na kterou se zapíše ukazatel ukazující prvni znak za převedenym čislem Pokud se konverze nezdaří pak *end==text
Soubory Funkce: Struktura FILE Otevření: FILE* fopen(char * nazev, char * mode); Uzavření: fclose(file* soubor); Módy: Čtení "r" Zápis: "w" Zápis na konex: "a"
Soubory Čtení char * fgets ( char * text, int max, FILE * soubor ) text misto pro uložení max maximální počet načtenych zanků soubor soubor otevřený pro čtení vrací: NULL když nic nenačte, jinak adresu načtených dat.
Soubory Zápis int fputs ( char * text, FILE * stream ); text text pro zapsání soubor soubor otevřený pro zápis vraci: počet zapsaných znaků
printf int printf ( char * format,... ); Výstup na STDOUT, obdoboa COUT format řetězec pro vypsani s řidicimi znaky... parametry dle řidicich znaku printf ( "cislo: %d \n",5);
printf %d vypis int %f vypis double %s vypis řetězce (char *) \n enter \t tabulator
fprintf int fprintf (FILE *soubor, char * format,... ); soubor soubor otevřený pro čtení format řetězec pro vypsani s řidicimi znaky... parametry dle řidicich znaku
sprintf int sprintf (char * s, char * format,... ); int sprintf ( char * s, int n, char * format,... ); int snprintf ( char * s, int n, char * format,... ) s vystupni řetězec n maximalni delka format řetězec pro vypsani s řidicimi znaky... parametry dle řidicich znaku
Konec A to je vše