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

Podobné dokumenty
Vícerozměrná pole. Úvod do programování 2 Tomáš Kühr

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

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

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

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

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

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

Základy programování (IZP)

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

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

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

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

11a Dynamické dvourozměrné pole (obdobně vícerozměrné)

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

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

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

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

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Ukazatele #2, dynamická alokace paměti

Práce se soubory. Úvod do programování 2 Tomáš Kühr

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

Odvozené a strukturované typy dat

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

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

ADT/ADS = abstraktní datové typy / struktury

Ukazatele, dynamická alokace

Struktura programu v době běhu

Reprezentace dat v informačních systémech. Jaroslav Šmarda

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

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

2 Datové typy v jazyce C

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Základy programování (IZP)

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

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

Základy programování (IZP)

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

4. Typ ukazatel, strukturované datové typy

Základy programování (IZP)

Algoritmizace a programování

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Práce s pamětí a předávání parametrů. Úvod do programování 1

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

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

Práce se soubory. Základy programování 2 Tomáš Kühr

Úvod do programování 7. hodina

POČÍTAČE A PROGRAMOVÁNÍ

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

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Algoritmizace a programování

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

8 Třídy, objekty, metody, předávání argumentů metod

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Operátory. Základy programování 1 Tomáš Kühr

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 6: Dynamická alokace paměti, typové konstrukce Autor: RNDr. Jan Lánský, Ph.D.

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

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

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Úvod do programování. Lekce 1

Algoritmizace a programování

Úvod do programovacích jazyků (Java)

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

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

Základní datové struktury

Mělká a hluboká kopie

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

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

Práce s polem a pamětí

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

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

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

Algoritmizace prostorových úloh

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Programování v jazyce C a C++

typová konverze typová inference

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

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

Programování v jazyce C a C++

Algoritmizace a programování

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

Implementace LL(1) překladů

.include "m32def.inc" // Konstanty.equ N = 5 // Počet prvků v poli.equ PRVNI = 3 // První číslo v poli

VBA: VYTVOŘENÍ OBJEKTU GRAF (CHART) Deklarace proměnné typu Chart. Pro vytvoření nového grafu použijeme kolekci ChartObjects a její metodu Add.

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

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

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

1. test z PJC Jméno studenta: Pocet bodu: Varianta 37: příklad 5 (5 bodů)

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

Standardní algoritmy vyhledávací.

Základy programování (IZP)

PROGRAMOVÁNÍ V C++ CVIČENÍ

Výčtový typ strana 67

Transkript:

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

Statická pole připomenutí Příklad definice: int polea[2][3]; Nejjednodušší způsob vytvoření pole Pole je statické oba rozměry se zadávají konstantou Rozměry pole jsou dány již při kompilaci Jednotlivé řádky mají vždy stejnou délku Prvky jsou v paměti uloženy za sebou po jednotlivých řádcích

Dvourozměrné pole jako ukazatel na pole Příklad vytvoření: int(*poleb)[3]; poleb = (int(*)[3])malloc(2 * 3 * sizeof(int)); Přístup k prvkům je stejný jako u statického pole Při kompilaci je nutné znát pouze druhý rozměr pole První rozměr může být vypočítán až za běhu programu Jednotlivé řádky mají vždy stejnou délku Řádky jsou v paměti uloženy za sebou jako u statického pole Pole je ale uloženo v dynamicky alokované paměti

Dvourozměrné pole jako pole ukazatelů Příklad vytvoření: int *polec[2]; polec[0] = (int *)malloc(3 * sizeof(int)); polec[1] = (int *)malloc(3 * sizeof(int)); Přístup k prvkům je stejný jako u předchozích typů polí Při kompilaci je nutné znát pouze první rozměr pole Druhý rozměr pole je možné určit až za běhu programu Velikosti jednotlivých řádků nemusí být stejné Řádky jsou v paměti uloženy samostatně v dynamicky alokované paměti Pole ukazatelů na řádky je ale statické

Dvourozměrné pole jako ukazatel na ukazatel Příklad vytvoření: int **poled; poled = (int **)malloc(2 * sizeof(int *)); poled[0] = (int *)malloc(3 * sizeof(int)); poled[1] = (int *)malloc(3 * sizeof(int)); Přístup k prvkům je stejný jako u předchozích typů polí Oba rozměry mohou být určeny až za běhu programu Řádky jsou uloženy samostatně a nemusí mít stejnou délku Celé pole je uloženo v dynamicky alokované paměti Díky své flexibilitě jeden z nejpoužívanějších způsobů vytvoření vícerozměrného pole Řádky lze samozřejmě vytvářet pomocí cyklu

Shrnutí výhody a nevýhody Paměťové nároky: polea je paměťově nejvýhodnější žádné pomocné ukazatele Ostatní pole vyžadují paměť na uložení ukazatelů Navíc dynamická alokace paměti obvykle spotřebuje další paměť na svou administrativu Rychlost přístupu k prvkům: Obecně je přístup k běžným proměnným na zásobníku je rychlejší než přístup k dynamicky alokované paměti Přístup k prvkům polea je tedy nejrychlejší Naopak nejpomalejší bude pravděpodobně přístup k prvkům poled, kde se jde přes 2 ukazatele do dyn. alokované paměti

Pole textových řetězců Používané relativně často v programech, které pracují s textem Obvykle dvourozměrné pole typu polec nebo poled Příklad: char *texty[3]; texty[0] = "Jedna"; texty[1] = strdup("dva"); texty[2] = (char *)malloc(4 * sizeof(char)); strcpy(texty[2], "Tri"); Pokud použijeme za identifikátorem pole pouze jeden index, pracujeme s celým řetězcem printf("%s\n", texty[1]);

Jak číst (a psát) složitější deklarace? Příklad: int *(*x)[3]; Najdeme identifikátor x a čteme: x je Od identifikátoru čteme doprava, dokud nenarazíme na ) nebo ; ) nás vrací na odpovídající ( Od ní čteme doprava až po již přečtený text: ukazatel na Přeskočíme již zpracovaný text a pokračujeme Opět dokud nenarazíme na ) nebo ; tedy: pole 3 prvků typu Pokud narazíme na ;, přesuneme se na začátek již přečteného textu a čteme doleva: ukazatel na int Celkově: x je ukazatel na pole 3 prvků typu ukazatel na int

Pár příkladů navíc int *polex[2]; int (*poley)[3]; long double *f(int, double); long double *(*f)(); double *(*f[3])(double);

A pro jistotu i řešení int *polex[2]; polex je pole dvou prvků typu ukazatel na int int (*poley)[3]; poley je ukazatel na pole tří prvků typu int double *f(int, double); f je funkce s parametry typu int a double vracející ukazatel na double long double *(*f)(); f je ukzatel na funkci bez parametrů vracející ukazatel na long double double *(*f[3])(double); f je pole tří prvků typu ukazatel na funkci s parametrem typu double vracející ukazatel na double

Cvičení Porcování řetězce Napište funkci char **rozdel(char *data, char oddelovac), která vytvoří a vrátí jako svůj výsledek pole textových řetězců, kde jednotlivé řádky budou podřetězce parametru data, které jsou v řetězci data odděleny znakem oddelovac. Příklad: Vstupni retezec: maslo,mleko,vejce,mouka,rohliky Vysledne pole: maslo mleko vejce mouka rohliky