Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Podobné dokumenty
Martin Flusser. December 15, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. November 16, 2017

Martin Flusser. November 1, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Programování v C++ 1, 1. cvičení

Programování v C++, 2. cvičení

Programování v C++ 3, 3. cvičení

Pole a kolekce. v C#, Javě a C++

Úvod do programování - Java. Cvičení č.4

Více o konstruktorech a destruktorech

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Mělká a hluboká kopie

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Pointery II. Jan Hnilica Počítačové modelování 17

Lineární spojový seznam (úvod do dynamických datových struktur)

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Programování v C++ 1, 14. cvičení

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.

Základy programování (IZP)

přetížení operátorů (o)

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Základy programování (IZP)

Jazyk C++ I. Šablony 2

Základy programování (IZP)

Algoritmizace a programování

Jazyk C++, některá rozšíření oproti C

Operační systémy. Cvičení 4: Programování v C pod Unixem

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Základy programování (IZP)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

přetížení operátorů (o)

Dynamická vícerozměrná pole. Základy programování 2 Tomáš Kühr

Dědění, polymorfismus

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Základy C++ I. Jan Hnilica Počítačové modelování 18

PROGRAMOVÁNÍ V C++ CVIČENÍ. Michal Brabec

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Konstruktory a destruktory

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7

Používejte jen ty konstrukty jazyka C/C++, které jsme doposud probírali (nepoužívejte STL apod.)

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Struktura programu v době běhu

Jazyk C++ I. Polymorfismus

Struktury a dynamická paměť

17. Projekt Trojúhelníky

Programování v C++ 2, 8. cvičení

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Funkční objekty v C++.

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Programování v C++ 1, 17. cvičení

Standardní algoritmy vyhledávací.

Př. další použití pointerů

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Řídicí struktury. alg3 1

IUJCE 07/08 Přednáška č. 6

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Ukazatele, dynamická alokace

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Dynamická alokace paměti

Zápis programu v jazyce C#

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

Spojová implementace lineárních datových struktur

Programování v jazyce C a C++

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Jazyk C++ I. Šablony 3

Odvozené a strukturované typy dat

PB161 Programování v jazyce C++ Přednáška 4

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Abstraktní třídy, polymorfní struktury

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Základy programování (IZP)

Programování v C++ 1, 5. cvičení

Dynamická identifikace typů v C++.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Zpracoval:

Úkoly k předmětu PGA. Evropský sociální fond Praha a EU Investujeme do vaší budoucnosti

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

Cvičení č. 2. Komunikace mezi procesy Program Hodiny. 4 body

konstruktory a destruktory (o)

Vysoké učení technické v Brně, Fakulta elektrotechniky a komunikačních technologií Ústav automatizace a měřící techniky. Semestrální projekt

Množina čísel int stl-set-int.cpp

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Základy programování (IZP)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Transkript:

ZPRO cvičení 8 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 7, 2016

Outline I 1 Outline 2 Dynamické alokování paměti 3 Dynamická alokace cvičení 4 Uživatelské rozhranní 5 UI cvičení 6 Domácí úkol 7 Zdroje

Dynamické alokování paměti Do ted jsme používali jen tzv. statické alokování, kdy bylo již při překladu známo, kolik proměnných a jaké velikosti budeme používat. Dynamické alokování umožnuje alokovat pamět za běhu programu. Můžeme pracovat s daty o kterých nevíme dopředu jak jsou rozsáhlá.

Provedení a syntaxe Základem je vhodný ukazatel a operátory new a delete

Provedení a syntaxe Základem je vhodný ukazatel a operátory new a delete 1 int * a = new int ; 2 double * d = new double ; 3 //... 4 delete a; 5 delete d;

Provedení a syntaxe Základem je vhodný ukazatel a operátory new a delete 1 int * a = new int ; 2 double * d = new double ; 3 //... 4 delete a; 5 delete d; Operátor new vrací nulový ukazatel při neúspěšné alokaci. Proč je nutné používat delete?

Provedení a syntaxe pro pole Základem je vhodný ukazatel a operátory new[] a delete[] 1 int *a = new int [10]; 2 double * d = new double [ 5]; 3 //... 4 delete [] a; 5 delete [] d;

Dynamická alokace cvičení 1 Warm up: Dynamicky alokujte int. Funkcnost overte pomoci cin a cout. 2 Do stejného ukazatele alokujte, naplňte a vypiste pole o třech prvcích. Použijte funkci pro výpis pole z předchozích cičení. Nezapomeňte správně mazat.

Dynamická alokace cvičení cv3 zadání Cílem je napsat funkci pro přidávání prvku do již plného dynamicky alokovaného pole. int* pridej do pole (int pole [], int* velikost, int pridavany prvek)

Dynamická alokace cvičení cv3 zadání Cílem je napsat funkci pro přidávání prvku do již plného dynamicky alokovaného pole. int* pridej do pole (int pole [], int* velikost, int pridavany prvek) 1 Vytvoříme nové o 1 větší pole. (V praxi se vytvoří nové pole o několik prvků větší) 2 Zkopírujeme obsah z původního pole do nového - pomocná fce void prekopiruj pole (const int pole1 [], int pole2 [], int velikost )

Dynamická alokace cvičení cv3 zadání Cílem je napsat funkci pro přidávání prvku do již plného dynamicky alokovaného pole. int* pridej do pole (int pole [], int* velikost, int pridavany prvek) 1 Vytvoříme nové o 1 větší pole. (V praxi se vytvoří nové pole o několik prvků větší) 2 Zkopírujeme obsah z původního pole do nového - pomocná fce void prekopiruj pole (const int pole1 [], int pole2 [], int velikost ) 3 Přidáme nový prvek na poslední místo 4 Smažeme staré pole 5 Ukazatel na nové pole vrátíme (return) Otestujte (párkrát zavolejte)

cv1 a cv2 1 int * ukaz ; 2 3 ukaz = new int ; 4 * ukaz = 3; 5 cout < <* ukaz << endl ; 6 delete ( ukaz ); 7 8 ukaz = new int [3] {1,3,5}; 9 vypis_pole (ukaz,3); 10 delete [] ( ukaz );

Kopírování pole 1 void prekopiruj_pole ( const int pole1 [], 2 int pole2 [], int velikost ) 3 { 4 for ( int i =0; i < velikost ; i ++ ) 5 pole2 [i] = pole1 [i]; 6 }

Funkce přidej do pole 1 int * pridej_do_pole ( int pole [], int * velikost, 2 int pridavany_prvek ) 3 { 4 int * tmp_pole = new int [* velikost + 1]; // vytvorime nove pole o 1 vetsi 5 6 prekopiruj_ pole ( pole, tmp_ pole, * velikost ); // zkopirujeme do nej stare 7 8 tmp_pole [* velikost ] = pridavany_prvek ; // na posledni misto dame novy prvek 9 // pole delky ( velikost +1) ma posl. index = veliko 10 11 delete [] ( pole ); // stare pole smazem 12 (* velikost ) ++; // zvetseni velikosti 13 return tmp_pole ;

Uživatelské rozhranní Umožňuje ovládat program Cílem bude vytvořit malou databázi (pole) čísel, takovou že:

Uživatelské rozhranní Umožňuje ovládat program Cílem bude vytvořit malou databázi (pole) čísel, takovou že: Program bude pořád spuštěný, ale pracovat bude jen, když mu něco zadáme

Uživatelské rozhranní Umožňuje ovládat program Cílem bude vytvořit malou databázi (pole) čísel, takovou že: Program bude pořád spuštěný, ale pracovat bude jen, když mu něco zadáme V libovolnou chvíli můžeme přidat další číslo

Uživatelské rozhranní Umožňuje ovládat program Cílem bude vytvořit malou databázi (pole) čísel, takovou že: Program bude pořád spuštěný, ale pracovat bude jen, když mu něco zadáme V libovolnou chvíli můžeme přidat další číslo V libovolnou chvíli můžeme vypsat všechna čísla

Uživatelské rozhranní Umožňuje ovládat program Cílem bude vytvořit malou databázi (pole) čísel, takovou že: Program bude pořád spuštěný, ale pracovat bude jen, když mu něco zadáme V libovolnou chvíli můžeme přidat další číslo V libovolnou chvíli můžeme vypsat všechna čísla Program se ukončí na náš příkaz Pozn: všechny funkce už máme, zbýva jen vyřešit jak a kdy je volat.

Příklad jednoduchého UI 1 ========================================= 2 Mame 10 zaznamu. Co budeme delat? 3 ----------------------------------------- 4 Vypsat... V 5 Pridat... P 6 Ukoncit... Q 7 ----------------------------------------- Nacteme char jako odpoved Kus kódu je v nekonečné smyčce Pomoci if nebo switch provedeme odpovidajici cinnost

Swicth 1 switch (ch) 2 { 3 case v : 4 case V : 5 cout <<" Vypis vsech prvku " << endl ; 6 vypis_pole ( pole, velikost ); 7 break ; 8 case q : 9 case Q : 10 delete [] pole ; 11 exit (0); 12 break ; 13 default : 14 cout <<" Neplatne zadani : -(... Opakujte " < 15 }

UI cvičení 1 Vytvořte uživatelské rozhraní pro databázi čísel 2 Zkoušejte 3 Testujte 4 Lad te

Domácí úkol 1 Dolad te program ze cvičení 2 Dodělejte možnost, která nechá uživatele zadat číslo a ověří, jestli se dané číslo vyskytuje v databazi. Také se napočítá jeho četnost.

Zdorje 1 http :// kmlinux. fjfi. cvut.cz /~ fabiadav / cecko 2 / poznamky -k-jazyku - c_plus_plus / 3 dynamicka - alokace