Programování v jazyce C++

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Standardní knihovní funkce pro práci s textovými řetězci
Pro začátek něco lehčího
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Programování v C jazyku - SEMINÁŘ
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Programování 2 Cvičení 5.
Prezentace a vysvětlení programového prostředí NXC
Pascal - větvení.
Opakování Co je výsledkem následujícího prográmku? my $a="kol"; my $b="o"; $a.= $b; $b.= $a; print "a = $a, b = $b\n"; Vkládání speciálních znaků? Uvozovací.
Algoritmy I. Cvičení č. 10.
Programování v Pascalu Přednáška 3
C# pro začátečníky Mgr. Jaromír Osčádal
If-else, do-while, switch, operátory
Programování v C++ Cvičení.
Principy překladačů Mezikód Jakub Yaghob.
Algoritmizace a programování
Materiály k přednášce Úvod do programování Ondřej Čepek.
Generování mezikódu Jakub Yaghob
MATLAB® ( část 3 - scripty).
8. přednáška typedef - preprocesor Studijní materiály najdete na adrese:
Operátory (1. část) 3 A1PRG - Programování – Seminář
Informatika I 3. přednáška
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Jednoduché datové typy
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
C – strukturované příkazy
Sémantická analýza Jakub Yaghob
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
JavaScript Podmínky, cykly a pole.
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
C – switch Mgr. Lenka Švancarová. switch syntaxe switch (výraz) { case hodnota_1: příkaz(y)_ve_větvi_1; case hodnota_2: příkaz(y)_ve_větvi_2; … default:
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
Ukazatele BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – if Mgr. Lenka Švancarová. if vývojový diagram Podmínka Příkaz(y) Podmínka Příkaz(y) Úplné větveníNeúplné větvení ++--
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Pascal - větvení.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Programování v jazyce C++ Představení jazyků C a C++
Programování ÚVOD, PROMĚNNÉ, OPERÁTORY A PODMÍNĚNÝ PŘÍKAZ ERIK KRÁL.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Výukový materiál zpracován v rámci projektu
Algoritmizace a programování
Programování v jazyce C++
Kurz algoritmizace a programování v jazyce C
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Oblast platnosti identifikátoru (1)
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Proměnné (1) Proměnná: Definice proměnných:
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Programování v jazyce C++ Operátory, řídicí struktury, pointery

Přiřazení Např. n = 123; Obecně: l-hodnota = výraz; Přiřazení je výrazem. Příkazem se stává po přidání středníku. Návratovou hodnotou je přiřazovaná hodnota. Lze použít i vícenásobné přiřazení: x = z = y = 5;

Aritmetické operátory Unární operátory +, -, Binární operátory +, -, *, %, / – může být celočíselné i klasické, Speciální unární operátory, ++, --, preinkrement / postinkrement (dekrement).

Logické operátory Není typ bool Unární: Binární: ! – negace Binární: && – konjunkce || – disjunkce Zkrácené vyhodnocování.

Relační operátory Řeší vztah mezi dvěma výrazy. Výsledkem je logická hodnota. Binární: == – rovnost !=, >, <, >=, <= – nerovnost

Bitové operátory Pracují s operandy na úrovni bitů. Unární: Binární: ~ – bitová negace. Binární: & – bitový součin, | – bitový součet, ^ – nonekvivalence (XOR), <<, >> – bitový posun.

Další operátory () – závorky +=, /=, %=, >>=, &=, ... – přiřazovací operátory a += b  a = a + b, (typ) – přetypování, sizeof – velikost vyhrazené paměti, , – operátor čárky, ?: – podmíněný výraz.

Priorita operátorů Zdroj: Pavel Herout – Učebnice jazyka C

Větvení programu příkaz if syntaxe: if (podmínka) příkaz; if (podmínka) příkaz1 else příkaz2; jsou-li příkazy if do sebe, váže se else vždy k nejbližšímu if. příkaz musí být vždy ukončen středníkem, zatímco blok nesmí.

Příklady použití if (a >= ’a’ && a <= ’z’) if (a == 1) x if (a = 1) if (a) <=> if (a != 0) if (!a) <=> if (a == 0) if ((c = getchar()) >= ’A’) x if (c = getchar() >= ’A’)

Přepínač slouží k větvení programu více než dvěma směry, příkaz switch, nelze psát prostý výčet hodnot, rozhodovaný výraz nemusí být int, každá větev je ukončena break, je podporována větev default, příkazy v každé větvi není třeba uzavírat do {}.

Použití přepínače switch (getchar()) { case ’a’: case ’b’: case ’c’: putchar (’1’); break; case ’d’: case ’e’: putchar (’3’); break; default: putchar (’4’); break; }

Dobré rady do života ;-) raději než deset příkazů if s jednou rozhodovací proměnnou použijte jeden switch, jak se bude chovat přepínač bez příkazů break? default nemusí být na konci, ale pište ho tam, píšete-li příkazy pod sebe, odsazujte, příkaz break za poslední větví není nutný, ale píše se tam z konvence, pozor, break má i jinou funkci!!

while cyklus syntaxe: např.: testuje podmínku před průchodem cyklem, while (podmínka) příkaz; např.: while (getchar() == ’ ’) i++; testuje podmínku před průchodem cyklem, nedokážeme říci, kolikrát proběhne, tělo cyklu může být i prázdné.

do – while cyklus syntaxe: např.: do příkaz while (podmínka); do i++; while (getchar() == ’ ’);

for cyklus syntaxe: např. jednotlivé části lze vynechat, středníky ne! for(inicializace;podmínka;iterace) příkaz; např. for (i = 1; i < 10; i++) ... jednotlivé části lze vynechat, středníky ne! v jednotlivých částech lze použít více příkazů, ty je pak nutné spojovat operátorem čárka, v rámci iterace může být proměnná měněna libovolným způsobem.

Sémantika for cyklu Mějme tento for cyklus: for (i=1; i<10; i++) c += i; Lze jej nahradit tímto while cyklem: i = 1; while (i<10) { i++; }

Dobré rady do života ;-) definovat řídící proměnnou v inicializační části cyklu lze pouze v jazyce C++, používejte pouze jednu řídící proměnnou, její hodnotu neměňte v těle, častá chyba – středník navíc: for (i = 1; i < 2; i++); x = x + i; lze použít i nekonečný cyklus: for ( ; ; )

Předčasné ukončení cyklu běh cyklu můžeme ukončit i dříve, k tomu nám slouží dva příkazy: break – zcela ukončí běh cyklu, continue – ukončí aktuální průběh cyklu a pokračuje následujícím během téhož cyklu.

Pointery deklarace v C: datový typ svázaný s jiným typem, int *p_a; datový typ svázaný s jiným typem, hodnotou pointeru je adresa, pointery lze nazývat dynamickými proměnnými, na jednom řádku lze definovat statické i dynamické proměnné stejného typu, * je dereferenční operátor, & je referenční operátor, nulový pointer označujeme NULL,

Operace s pointery I. int a, b, *p_a, *p_b; printf(”%d”, p_a); *p_a = a; p_a = a;

Operace s pointery I. int a, b, *p_a, *p_b; printf(”%d”, p_a); *p_a = a; p_a = a;

Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a; int i, *p_i = &i; int i, *p_i; p_i = &i;

Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a; int i, *p_i = &i; int i, *p_i; p_i = &i;

Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a; int i, *p_i = &i; int i, *p_i; p_i = &i;

Operace s pointery II. int a, b, *p_a, *p_b; p_a = &a; &a = p_a; int i, *p_i = &i; int i, *p_i; p_i = &i;

Zásady při práci s pointery nikdy nepřiřazujeme adresu hodnotě a naopak, je slušné označovat pointery prefixem ’p_’, je třeba dát pozor, kdy použít operátor *, kdy operátor & a kdy identifikátor bez operátoru, je-li třeba používejte přetypování pointerů (int *), chcete-li funkci předat nějakou adresu, používejte právě pointery – simuluje se jimi předávání odkazem.

Statické pole deklarace v C: int pole[10] = {1, 2, 3}; int pole[10]; int pole[] = {1, 2, 3}; int pole[]; velikost pole musí být známa v době překladu, statické protože jeho adresa je konstantní.

Přístup k jednotlivým položkám položky jsou číslovány od nuly, maximální položka má tedy index N–1, kde N je velikost pole, sáhneme-li vedle, pod UNIXem program havaruje, Windows to mohou ustát, odkaz na n-tou položku: pole[n-1] , pole v C je pointer - ukazuje na první položku, na tu se lze též odkázat řetězcem *pole.

Pointerová aritmetika pole je homogenní struktura, položky jsou uloženy bezprostředně za sebou, na první (s indexem 0) položku se můžeme odkázat pomocí *pole, n-tá položka je umístěna o právě n pozic dále, díky tomu se lze na něho odkázat takto: *(pole + n) (!= *pole + n) stejně lze provádět i rozdíl pointeru a čísla, porovnání pointerů a rozdíl pointerů.

Pointer jako parametr funkce chceme-li, aby funkce změnila hodnotu proměnné, musíme parametry předat odkazem, jazyk C předávání odkazem nepodporuje, funkce tedy musí mít parametr pointer na daný typ, předáváme-li této funkci statickou proměnnou, musíme ji předat s operátorem &, příkladem takovéto funkce je scanf.

Preprocesor jazyka C je součástí překladače, spouští se před vlastním překladem, zpracovává zdrojový text, vypustí kometáře, provádí záměnu textů, výstupem je opět textový soubor, nekontroluje syntaktickou správnost, příkazy uvozeny znakem ’#’.

Makra bez parametrů definovány pomocí příkazu #define, výraz za #define je dále v textu nahrazen hodnotou uvedenou za ním, nutno oddělit mezerou (v uvozovkách se náhrada neprovede), je-li hodnota delší než 1 řádek, musí být na konci každého (kromě posledního) znak ’\’, konstanta platí do konce souboru, hodnota může obsahovat již definovanou konstantu.

Příklady #define MAX 100 #define PI 3.14 #define DVE_PI (2 * PI) #define MOD % #define OR || #define SOUBOR ”soubor.txt” #define DL_TEXT toto je text,\ ktery se nevejde na jeden radek.

Makra s parametry tzv. in-line funkce, jsou nahrazovány na úrovni zdrojového kódu, nižší režie (viz dále), definice: #define jmeno(arg1, ... argN) hodn, za jménem nesmí být mezera, celou hodnotu a jednotlivé argumenty je vhodné (někdy i nutné) ozávorkovat.

Příklady #define secti(a, b) a + b #define secti(a, b) ((a)+(b)) #define velke(c) c=>’A’ && c<=’Z’ #define velke(c) ((c)=>’A’ && (c)<=’Z’) printf (”%d”, secti(a, b)); if (velke(c))...

Předdefinovaná makra jsou definovány v souboru ctype.h příklady: isalnum, isalpha, iscntrl, isgraph, isdigit, isxdigit, isspace, ispunct, islower, isupper, tolower, toupper.

Podmíněný překlad rozhoduje o tom, zda se daná část kódu přeloží či nepřeloží na základě hodnoty či existence makra, příklad: #if výraz část_1 #else část_2 #endif

Podmíněný překlad II testovat lze pouze hodnoty symbolických konstant, nikoliv proměnných, lze použít též operátor defined #if defined(A) <=> #ifdef(A) #if !defined(A) <=> #ifndef(A) strukturu direktivy #if lze ještě rozšířit o #elif lze použít, nechceme-li překládat část programu.

Další operátory #include <soubor> – vložení syst. souboru, #include ”soubor” – vložení lokálního souboru, #undef – zruší definici makra, #error – vypíše chybovou hlášku během preprocesingu, # – převod argumentu na řetězec – dá do uvozovek, ## – argumenty oddělené tímto operátorem po rozvoji makra vytvoří jeden řetězec.

A to je pro dnešek vše Děkuji za pozornost

Použitá literatura Pavel Herout – Učebnice jazyka C, Miroslav Virius – Od C k C++, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Server www.builder.cz.