ZPRO v "C" Ing. Vít Hanousek
verze 0.3
Ing. Vít Hanousek
ZPRO v "C"
Hello World
Nejjednoduší program ukazující vypsání textu. #include
using namespace std; int main(void) { cout << "Hello World" << endl; return 0; }
Ing. Vít Hanousek
ZPRO v "C"
ˇ Pamet’
ˇ ˇ pro uložení dat Promenná – Vyhrazuje místo v pameti ˇ ˇ Ukazatel – Promenná obsahující adresu místa v pameti Obrázek
Ing. Vít Hanousek
ZPRO v "C"
ˇ Promenná
ˇ Založení promenné: Pˇriˇrazení hodnoty: ˇ Pˇriˇrazení hodnoty jiné promenné: ˇ Vypsání hodnoty promenné: ˇ Naˇctení prommené ze vstupu:
Ing. Vít Hanousek
typ nazev; nazev = 1; nazev=nazev_2; cout << nazev; cin >> nazev;
ZPRO v "C"
Základní datové typy
Datové typy: Celá cˇ ísla: Celá cˇ ísla bez zaménka: Racionální cˇ ísla:
int, long, long long unsigned int, ... float, double, long double
bool
Ing. Vít Hanousek
ZPRO v "C"
ˇ Obor platnosti promenné
ˇ Globální promenné: deklarované mimo funkce pˇrístupné v celém programu
ˇ Lokální promenné: deklarované v bloku { } pˇrístupné jen v daném bloku
Ing. Vít Hanousek
ZPRO v "C"
Literálni konstanty
Typy: 10 1.0
– int – double
Ing. Vít Hanousek
ZPRO v "C"
Aritmetika cˇ íslených datových typu˚
Operátory: + – sˇcítání – odeˇcítání – násobení * ˇ / – delení % – modulo ++ – inkrementace hodnoty -- – dekrementace hodnoty
Ing. Vít Hanousek
ZPRO v "C"
Aritmetika cˇ íslených datových typu˚
probíhá nad stejným datovým typem jako jsou operandy:: int + int = int double + double = double int/int = int !!!!!!!!!!! float/int = ?? -> automatické pˇretypování -> float/float = float
Operátor pˇretypování: (typ)promenna ˇ program se pokusí pˇrevést promenou na žádaný typ
Pˇreteˇcení: unsigned int a=0; a--;
Ing. Vít Hanousek
ZPRO v "C"
a==UINT_MAX
Ukazatele
ˇ ˇ Promenné ukládající adresu jiné promenné
Založení ukazatele: datovy_typ * nazev_ukazatele; ˇ Pˇriˇrazení adresy promenné do ukazatele: nazev_ukazatele = &promenna; ˇ Pˇriˇrazení hodnoty do promenné na kterou ukazuje ukazatel: nazev_ukazatele=1; * ˇ Vypsání hodnoty promenné na kterou ukazuje ukazatel: cout << *nazev_ukazatele;
Ing. Vít Hanousek
ZPRO v "C"
Ukazatele
Operátory: &promena *uk sizeof(typ) new typ delete uk (typ*)uk
ˇ – vrací adresu promenné – dereference ukazatele – vrací velikost datového typu ˇ velikosti daného typu – alokuje pamet’ – vrcí ukazatel na ni ˇ ˇ na kterou ukazuje ukazatel – uvolnuje pamet’ – pˇretypování ukazatele
Typ: void
Ing. Vít Hanousek
ZPRO v "C"
ˇ ˇ Rízení behu programu
ˇ ˇ Rízení behu programu: ˇ Podmínené bloky Smyˇcky Funkce
Ing. Vít Hanousek
ZPRO v "C"
ˇ ˇ Rízení behu programu – IF ˇ blok programu: Podmínený if(podmínka) { //pˇ ríkazy pokud byla podmínka splnˇ ena } nebo if(podmínka) { //pˇ ríkazy pokud byla podmínka splnˇ ena } else { //pˇ ríkazy pokud nebyla podmínka splnˇ ena } Ing. Vít Hanousek
ZPRO v "C"
ˇ ˇ Rízení behu programu – WHILE
while(podmínka) { //smyˇ cka pobˇ eží pokud bude podmínka platit }
Ing. Vít Hanousek
ZPRO v "C"
ˇ ˇ Rízení behu programu – FOR
for(pred_behem;podminka;po_kazde_iteraci) { //smyˇ cka pobˇ eží pokud bude podmínka platit }
Typycky: for(int i=0;i
Ing. Vít Hanousek
ZPRO v "C"
ˇ ˇ Rízení behu smyˇcky
break; zastavení nejbližší smyˇcky continue; ukonˇcení aktuální iterace smyˇcky
Ing. Vít Hanousek
ZPRO v "C"
Podmínky
Libovolná nenulová hodnota je pravdivá Operátory: ˇ == – Rovnost hodot prommených ˇ != – Nerovnost hodnot promenných < – Menší než ˇ než > – Vetší <= – Menší nebo rovno ˇ nebo rovno >= – Vetší =
– Pˇriˇrazení hodnoty – Má hodnotu pˇriˇrazované hodnoty
Ing. Vít Hanousek
ZPRO v "C"
Skládání podmínek
Operátory: ! – NOT, || – OR, && – AND,
negace nebo a
Ing. Vít Hanousek
ZPRO v "C"
Funkce Podporogramy Tvoˇríme pro cˇ ásti kódu které se opakují v ruzných ˚ místech ˇ Tvoˇríme pro ucelené kroky kódu, pro zpˇrehlednení Deklarace musí pˇredcházet použití ˇ Parametry se chovají jako lokální promenné založené ve funkci inicializované pˇredávanou hodnotou Parametry se pˇredávají hodnotou ˇ funkce a pˇredává return slouží pro okamžité opuštení návratovou hodnotu Ing. Vít Hanousek
ZPRO v "C"
Funkce – Obecneˇ
Deklarace: –jen hlaviˇcka funkce se stˇredníkem typ nazev(typ param1,typ param2, ...); Definice: typ nazev(typ para1,typ param2, ...) { //dˇ elej nˇ eco užiteˇ cného }
Ing. Vít Hanousek
ZPRO v "C"
Funkce – Bez parametru˚ – Bez návratové hodnoty
void nazev(void) { //dˇ elej nˇ eco užiteˇ cného } Volání v programu: nazev();
Ing. Vít Hanousek
ZPRO v "C"
Funkce – S parametry – Bez návratové hodnoty
void nazev(typ param1, typ param2, .... ) { //dˇ elej nˇ eco užiteˇ cného } Volání v programu: nazev(promenna_1,promenna_2,...);
Ing. Vít Hanousek
ZPRO v "C"
Funkce – S parametry – S návratovou hodnotou
typ nazev(typ param1, typ param2, .... ) { //dˇ elej nˇ eco užiteˇ cného return neco; } Volání v programu: promenna = nazev(promenna_1,promenna_2,...);
Ing. Vít Hanousek
ZPRO v "C"
Pole
ˇ ˇ ˇ N promenných stejného typu umístených v pameti zasebou Poˇcet prvku˚ musí být konstanta v dobeˇ pˇrekladu (v C) Pole lze pˇretypovat na ukazatel typu prvku pole Nejsou kontrolovány hranice pole Indexy jsou od 0 do N-1 Obrázek
Ing. Vít Hanousek
ZPRO v "C"
Pole
Založení pole: typ nazev[pocet_prvku]; Pˇristup 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;
Ing. Vít Hanousek
ZPRO v "C"
Pole a ukazatele
Operátor Indexu [] lze použít i na dereferenci ukazatele a pˇristoupení k požadovanému prvku K prvkum ˚ pole lze pˇristupovat pomocí ukazatelu˚ Operátor inkrementace ++ zvyšuje adresu ukazatele o velikost typu ukazatele
Ing. Vít Hanousek
ZPRO v "C"
Struktury:
Námi definvaný datový typ obsahující více položek jiných datových typu˚ Zvyšuje cˇ itelnost kódu ˇ Umožnuje tvoˇrit dynamické datové struktury (spojový seznam,...) Pˇredchudce ˚ Objektu˚ v C/C++ asi 5 zpusob ˚ u˚ definic, my se nauˇcíme jeden.
Ing. Vít Hanousek
ZPRO v "C"
Struktury: ˇ Obecne: typedef struct { typ nazev_polozky1; typ nazev_polozky2; ... } nazev_strukury; Pˇríklad: typedef struct { double re; double im; } komplexni_cislo; Ing. Vít Hanousek
ZPRO v "C"
Struktury použití:
ˇ Deklarace promené: 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
Ing. Vít Hanousek
ZPRO v "C"
ˇ Rozdelení programu do více souboru: ˚ Zpˇrehlední kódu projektu ˇ Umožnuje tvorbu knihoven Funkce jednotého charakteru umístíme do separátního souboru Deklarace funkcí se umíst’ují do Hlaviˇckového souboru nazev.h Definice funkcí se umíst’ují do souboru nazev.cpp V souboru, kde budeme funkce volat pˇripojíme hlaviˇckový soubor #include "nazev.h" Ing. Vít Hanousek
ZPRO v "C"
Hlaviˇckový soubor: nazev.h
#ifndef MOJE_FUNKCE_H #define MOJE_FUNKCE_H //deklarace funkcí typ nazev1(typ parametr); typ nazev2(typ parametr); //deklarace strukur,... #endif
Ing. Vít Hanousek
ZPRO v "C"
Implementaˇcní soubor: nazev.cpp
#include "nazev.h" typ nazev1(typ parametr) { } typ nazev2(typ parametr) { }
Ing. Vít Hanousek
ZPRO v "C"
Použití: main.cpp
#include "nazev.h" int main(void) { nazev1(5); return 0; }
Ing. Vít Hanousek
ZPRO v "C"
ˇ ezce ˇ Ret
Pole znaku˚ 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’
Ing. Vít Hanousek
ZPRO v "C"
ˇ Pˇrevod ˇretezce na cˇ íslo
#include <stdlib.h> int strtol(char *text, char **end,int soustava); double strtod(char *text, char **end); Struktura text text na pˇrevedeni Otevˇrení: end adresa ukazatele, na kterou se zapíše ukazatel ukazující prvni znak za pˇrevedenym cˇ islem Pokud se konverze nezdaˇrí pak *end==text
Ing. Vít Hanousek
ZPRO v "C"
Soubory Funkce: Struktura FILE Otevˇrení: FILE* fopen(char * nazev, char * mode); Uzavˇrení: fclose(FILE* soubor); Módy: ˇ Ctení "r" Zápis: "w" Zápis na konex: "a"
Ing. Vít Hanousek
ZPRO v "C"
ˇ Soubory Ctení
char * fgets ( char * text, int max, FILE * soubor ) text misto pro uložení max maximální poˇcet naˇctenych zanku˚ soubor soubor otevˇrený pro cˇ tení vrací: NULL když nic nenaˇcte, jinak adresu naˇctených dat.
Ing. Vít Hanousek
ZPRO v "C"
Soubory Zápis
int fputs ( char * text, FILE * stream ); text text pro zapsání soubor soubor otevˇrený pro zápis vraci: poˇcet zapsaných znaku˚
Ing. Vít Hanousek
ZPRO v "C"
printf
int printf ( char * format, ... ); Výstup na STDOUT, obdoboa COUT ˇ format ˇretezec pro vypsani s ˇridicimi znaky ... parametry dle ˇridicich znaku printf ( "cislo: %d \n",5);
Ing. Vít Hanousek
ZPRO v "C"
printf
%d vypis int %f vypis double ˇ %s vypis ˇretezce (char *) \n enter \t tabulator
Ing. Vít Hanousek
ZPRO v "C"
fprintf
int fprintf (FILE *soubor, char * format, ... ); soubor soubor otevˇrený pro cˇ tení ˇ format ˇretezec pro vypsani s ˇridicimi znaky ... parametry dle ˇridicich znaku
Ing. Vít Hanousek
ZPRO v "C"
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 ˇretezec n maximalni delka ˇ format ˇretezec pro vypsani s ˇridicimi znaky ... parametry dle ˇridicich znaku
Ing. Vít Hanousek
ZPRO v "C"
Konec
A to je vše
Ing. Vít Hanousek
ZPRO v "C"