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

Podobné dokumenty
Algoritmizace řazení Bubble Sort

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

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

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

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Algoritmizace prostorových úloh

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

Více o konstruktorech a destruktorech

Algoritmizace a programování

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

Šablony, kontejnery a iterátory

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

Mělká a hluboká kopie

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Maturitní téma: Programovací jazyk JAVA

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

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

Dynamické datové struktury III.

Sada 1 - Základy programování

Algoritmizace a programování

Paměť počítače. alg2 1

IB111 Úvod do programování skrze Python

Šablony, kontejnery a iterátory

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Algoritmizace prostorových úloh

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základy programování (IZP)

Algoritmizace prostorových úloh

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

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Úvod do programování 6. hodina

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Konstruktory a destruktory

Kolekce, cyklus foreach

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

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

ADT/ADS = abstraktní datové typy / struktury

Zadání k 2. programovacímu testu

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi

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

9. přednáška - třídy, objekty

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

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

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Profilová část maturitní zkoušky 2017/2018

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

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.

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

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Bubble sort. příklad. Shaker sort

POČÍTAČE A PROGRAMOVÁNÍ

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

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

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

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

Úvod do programování. Lekce 1

Ú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 )/ ;

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

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

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

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

Da D to t v o é v ty t py IB111: Datové typy

PREPROCESOR POKRAČOVÁNÍ

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

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

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

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

Sada 1 - PHP. 03. Proměnné, konstanty

Jazyk C++ II. Šablony a implementace

Množina v C++ (set, multiset).

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

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Standardní algoritmy vyhledávací.

IB111 Úvod do programování skrze Python

MAXScript výukový kurz

Jazyk C++ II. STL knihovna kontejnery část 1

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

Ukazatele, dynamická alokace

Výčtový typ strana 67

Úvod do programovacích jazyků (Java)

Funkční objekty v C++.

Struktura programu v době běhu

6. Problém typové anonymity prvků v kolekci Sjednocení typově rozdílných prvků pomocí rozhraní Kolekce pro jeden typ prvků...

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

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

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

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Digitální učební materiál

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

Algoritmy I. Třídění ALGI 2010/2011

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Transkript:

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

C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0;

Java Deklarace pole typ_prvku_pole jmeno_pole[]; // není v C# typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole int druhepole[] = 1, 1, 1, 1;

Statické pole v C++ Specifikace "statický" znamená, že paměť pro dané pole se alokuje již při překladu a tedy pocet_prvku musí být konstantní výraz. Jinými slovy pocet_prvku nemůže být nějaká proměnná, byť by její hodnota byla známa již při překladu. Můžeme použít buď konstantu nebo číselnou hodnotu zapsanou přímo do kódu Deklarace a vytvoření pole typ_prvků_pole jméno_pole[pocet_prvku]; Inicializace pole int pole[5] = 0,1,2,3,4; Počet prvků pole není nutné uvádět, překladač ho určí podle počtu hodnot uvedených ve složených závorkách. int pole[] = 0,1,2,3,4;

Dynamické pole v C++ Deklarace a vytvoření int *pole = new int[10]; Operátor new vrací adresu prvního prvku v poli. Pokud pole vytvoříme pomocí operátoru new, měli bychom jej také po ukončení práce s ním smazat pomocí delete. Protože dynamické pole vytváříme za běhu programu, nikoliv při překladu jako statické pole, nemusíme ve chvíli překladu znát počet jeho prvků. Smazání pole delete [] pole; Hranaté závorky určují, že se má uvolnit cele pole, ne pouze jeden prvek, na který ukazuje ukazatel pole.

Naplnění pole v C# int[] pole = new int[10]; //cisla nacteme z klavesnice for (int i = 0; i < pole.length; i++) Console.Write("Zadejte cele cislo: "); pole[i] = Convert.ToInt32(Console.ReadLine()); //cisla do pole vygenerujeme Random rnd = new Random(); for (int i = 0; i < pole.length; i++) pole[i] = rnd.next(1, 101);

Naplnění pole v Javě int[] pole = new int[10]; Scanner scr = new Scanner(System.in); for(int i = 0; i < pole.length; i++) System.out.print("Zadej cislo: "); pole[i] = scr.nextint(); Random rnd = new Random(); for(int i = 0; i < pole.length; i++) pole[i] = rnd.nextint(100)+1;

Naplnění pole v C++ int pole[5]; for(int i = 0; i < 5; i++) cout << "Zadej cislo: "; cin >> pole[i]; int pocet_prvku; cout << "Zadej pocet prvku v poli: "; cin >> pocet_prvku; int *p = new int[pocet_prvku]; for(int i = 0; i < pocet_prvku; i++) p[i] = i*5 + 1;

Výpis pole v C#, Javě a C++ int[] pole = 12, 15, 5, 58, 15; // C# for (int i = 0; i < pole.length; i++) Console.WriteLine(pole[i]); int[] pole = 12, 15, 5, 58, 15; //Java for (int i = 0; i < pole.length; i++) System.out.println(pole[i]); int pole[] = 12, 15, 5, 58, 15; //C++ for (int i = 0; i < 5; i++) cout << pole[i] << endl;

Listy v C# Deklarace a naplnění Listu List<int> list = new List<int>(); list.add(45); list.add(63); list.add(5); List<string> listslov = new List<string>(); listslov.add("ahoj"); listslov.add("nazdar");

Průchod Listem v C# for (int i = 0; i < list.count; i++) Console.WriteLine(list.ElementAt(i)); for (int i = 0; i < list.count; i++) Console.WriteLine(list[i]); foreach (int x in list) Console.WriteLine(x);

Práce s Listem v C# list.removeat(0); //odstranim prvek s indexem 0 list.remove(5); //odstrani z listu cislo 5 list.insert(0,10); //vlozi pod index 0 v listu cislo 10 list.clear(); //smaze vsechny prvky v listu bool b = list.contains(5); //vraci true, pokud je cislo 5 v listu

ArrayList v Javě Deklarace ArrayListu List<String> list = new ArrayList<String>(); ArrayList<Integer> listcisel = new ArrayList<Integer>(); Do třídy ArrayList je implementováno rozhraní List Naplnění ArrayListu list.add("ahoj"); list.add("nazdar"); list.add("cau"); listcisel.add(5); listcisel.add(new Integer(7));

Práce s ArrayListem v Javě Výpis ArrayListu - I. možnost for(int i = 0; i<list.size(); i++) System.out.println(list.get(i)); Výpis ArrayListu - II. možnost for(string pomocnaprom : list) System.out.println(pomocnaProm); list.remove(0); // smaze prvek v listu s indexem 0 list.clear(); // smaze vsechny polozky v listu

Pole versus Listy Přístup k jednotlivým prvkům pole je rychlejší (má konstantní složitost) než přístup k prvkům Listu (ArrayListu). Pole spotřebovává méně paměti než Listy o stejné kapacitě. U Listu (ArrayListu) nemusíme při deklaraci znát jeho velikost.

Třídění polí Bublinkové řazení (bubble sort) je jednoduchý řadící algoritmus. Algoritmus opakovaně prochází pole, přičemž porovnává každé dva sousedící prvky, a pokud nejsou ve správném pořadí, prohodí je. Pro praktické účely je neefektivní, využívá se hlavně pro výukové účely či v nenáročných aplikacích. Třídění přímým výběrem (select sort) 1. V posloupnosti najdeme nejmenší prvek a vyměníme ho s prvkem na první pozici. Tím dojde k rozdělení posloupnosti na dvě části. Setříděná část obsahuje pouze jeden prvek, nesetříděná n-1. 2. V nesetříděné části najdeme nejmenší prvek a vyměníme ho s prvním prvkem v nesetříděné části, čímž dojde k zařazení tohoto prvku do setříděné části. 3. Obsahuje-li nesetříděná část více než jeden prvek, pokračujeme bodem 2, jinak je třídění ukončeno

Quick sort Základní myšlenkou quicksortu je rozdělení řazené posloupnosti čísel na dvě přibližně stejné části. V jedné části jsou čísla větší a ve druhé menší, než nějaká zvolená hodnota (nazývaná pivot). Pokud je tato hodnota zvolena dobře, jsou obě části přibližně stejně velké. Pokud budou obě části samostatně seřazeny, je seřazené i celé pole. Obě části se pak rekurzivně řadí stejným postupem.

Merge sort Algoritmus třídění Merge sort sestává z několika základních částí: Rozdělení neseřazené množiny dat na dvě přibližně stejně velké podmnožiny Seřazení obou podmnožin Spojení seřazených podmnožin do jedné seřazené množiny Tento postup je nejčastěji realizován rekurzivně.

Třídění polí a Listů v C# V jazyce C# existuje třída Array, která obsahuje statickou metodu Sort, pomocí které můžeme setřídit pole. int[] pole = 12, 15, 5, 58, 15; Array.Sort(pole); Array.Reverse(pole); //převrátí prvky v poli Třída List obsahuje instanční metodu Sort. List<string> listslov = new List<string>(); listslov.add("ahoj"); listslov.add("nazdar"); listslov.sort();

Třídění polí a ArrayListů v Javě Java obsahuje třídu Arrays a třídu Collections, ve kterých se nachází statická metoda sort pro pole a ArrayListy. int[] pole = 5, 25, 14, 3, 17; Arrays.sort(pole); ArrayList<Integer> list = new ArrayList<Integer>(); list.add(5); list.add(new Integer(7)); Collections.sort(list);

Pole znaků v C++ Pole znaků má oproti ostatním polím několik zvláštností. První z nich se týká počtu prvků pole. V jazyce C++ (i v C) je každý řetězec ukončen znakem '\0', což je znak s kódovým číslem 0. To znamená, že například na uložení řetězce "Ahoj", potřebujeme 5 znaků (tedy pole minimálně o 5 prvcích). Druhá zvláštnost se týká inicializace znakový polí. Například char Pozdrav[30] = "Dobry den"; do pole Pozdrav se uloží uvedený řetězec a za něj se připojí znak '\0'. Při deklaraci musí mít pole alespoň o jeden prvek víc, než je počet znaků ukládaného řetězce. Znakové pole lze inicializovat stejně jako pole normální např. char retezec[5] = 'a','h','o','j'; Tímto způsobem ovšem překladač nepřipojí na konec znak '\0', o to se zde musíme postarat sami.

Pole znaků v C++ Třetí zvláštnost se týká výpisu řetězců. Znaková pole (na rozdíl od ostatních polí) můžeme vypsat užitím jejich jména cout << Pozdrav; K jednotlivým prvků znakových polí můžeme přistupovat pomocí indexů, stejně jako v případě ostatních polí. Vedle toho je ve standardních knihovnách jazyka C řada funkcí pro nejrůznější operace s těmito řetězci (kopírování, určení délky, vyhledávání podřetězců atd.). Tyto funkce lze využít i v jazyce C++.

Pole a ukazatelé v C++ double policko[10]; Deklaruje pole policko složeného z 10-ti prvků typu double. policko představuje ne jen 10 prvků typu double ležících v paměti těsně za sebou, ale též ukazatel na typ double, v němž je uložena adresa prvního prvku (&policko[0]). Ukazatel (policko + 0) ukazuje na prvek policko[0] a tudíž *(policko + 0) je policko[0]. Ukazatel (policko + 1) ukazuje na prvek policko[1] a tudíž *(policko + 1) je policko[1].

Pole a ukazatelé v C++ Cyklus for(int i = 0; i<10; i++) policko[i] = i; Lze tedy s využitím aritmetiky ukazatelů přepsat takto for(int i = 0; i<10; i++) *(policko + i) = i;

Otázky Jaké datové typy lze uložit do pole? Jaké datové typy lze uložit do Listu? Co void, mohu ten vložit do pole nebo Listu? Jak zjistím délku pole? Jak zjistím kapacitu Listu? Je možné měnit velikost pole? Jak získám první a poslední prvek v poli? Jak získám první a poslední prvek v Listu? Co se stane, když budu chtít vypsat pole[delka_pole]? Mohu setřídit pomocí metody sort pole (List) obsahující jako prvky instance mnou vytvořené třídy? Co se stane po následujících příkazech s původním polem, které mělo 10 prvků? int[] a = new int[10]; a = new int[20]; Jak naleznu v poli (Listu) nejmenší (největší) prvek? Jak vložit prvek na začátek, na konec a doprostřed Listu? Může existovat prázdný List?