Knihovna kombinatorických funkcí

Save this PDF as:
 WORD  PNG  TXT  JPG

Rozměr: px
Začít zobrazení ze stránky:

Download "Knihovna kombinatorických funkcí"

Transkript

1 MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Knihovna kombinatorických funkcí BAKALÁŘSKÁ PRÁCE Jiří Smejkal Brno, jaro 2010

2 Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Vedoucí práce: RNDr. Aleš Zlámal ii

3 Poděkování Na tomto místě bych rád poděkoval vedoucímu této práce panu RNDr. Aleši Zlámalovi za vstřícnost a trpělivost. Dále pak mé rodině za podporu ve studiu a všem, kteří se se mnou podílili o své rady a zkušenosti. iii

4 Klíčová slova funkce, knihovna, kombinatorika, permutace, variace, kombinace, jazyk C iv

5 Shrnutí Cílem bakalářské práce je vytvořit kombinatorickou knihovnu pro programovací jazyk C, jejíž funkce mohou sloužit k programování problémů kombinatorické povahy. v

6 Obsah 1 Úvod Konvence pro pojmenování funkcí v jazyce C Popis problematiky Analýza stávajícího systému pojmenování funkcí Trigonometrické funkce Exponenciální a logaritmické funkce Aritmetické funkce Tvorba názvů funkcí pro kombinatorickou knihovnu Tvoření názvů podle funkcionality Zkratky pro typy parametrů a návratové hodnoty Způsob řazení zkratek za sebe Funkce kombinatorické knihovny Permutace Alokace permutace Délka permutace Inicializace permutace typu int Inicializace permutace typu char Typ permutace Tisk permutace Tisk permutace na standardní výstup Tisk permutace do proudu Generování následující permutace Získání permutace podle pořadí Kopírování permutace Porovnání permutací Skládání permutací Cyklický posuv permutace Znaménko permutace Dealokace permutace Bitové permutace Variace a kombinace Počet všech variací, kombinací Alokace variace, kombinace vi

7 3.2.3 Parametry variace, kombinace Inicializace variace, kombinace typu int Inicializace variace, kombinace typu char Tisk variace, kombinace na standardní výstup Tisk variace, kombinace do proudu Generování následující variace Generování následující kombinace Kopírování variace, kombinace Dealokace variace, kombinace Praktické ukázky Problém obchodního cestujícího Výpočet determinantu matice Šifrování komunikace Závěr Literatura vii

8 Kapitola 1 Úvod Knihovny v programovacích jazycích jsou jejich velice důležitou součástí, nebot obsahují velké množství funkcí [1], které jsou programátorovi k dispozici. Ten nemusí vymýšlet algoritmy a funkce, které před ním již někdo vymyslel a implementoval, ale stačí je vyhledat v knihovně a nahrát do svého programu. Samotné nahrání je velice snadné, vystačíme si jediným příkazem a potřebné funkce jsou následně volně přístupné k použití. Mezi standardní knihovny zatím nebyla zařazena kombinatorická knihovna. Dávám si tedy za cíl vytvořit knihovnu, která bude ulehčovat práci s permutacemi, variacemi, kombinacemi a bude obsahovat některé funkce potřebné k programování úloh kombinatorické povahy. Za pomoci známých algoritmů implementuji funkce, které uživatel může použít a u nichž bude mít zaručenou jejich korektnost, nebot naprogramované funkce budou otestovány. Ve druhé kapitole se nachází popis již existujícího modelu standardní knihovny jazyka C, hlavně konvence pro pojmenování funkcí. V novějších jazycích je povoleno přetěžování funkcí (funkce dělající významově totéž, ale s jinými typy parametrů mající stejný název). Uživatel použije jeden název pro funkci, již volá a překladač rozhodne, který typ funkce se zavolá. Rozhodnutí je založeno v tomto případě na typech parametrů. V jazyce C je takováto shoda jmen nepřípustná [2]. Vyskytuje se tedy problém, jak utvořit názvy významově podobných funkcí. Název funkcí vznikne spojením zkratek z následujících věcí: funkcionality, vstupních parametrů a návratové hodnoty funkce. Zřetězením těchto zkratek dává někdy nejasný význam. Největším problémem je však nejednotnost systému, například jednou je typ vstupního parametru na začátku slova, kdežto jindy na konci. Proto zde analizuji starý systém pro kombinatorickou knihovnu a navrhuji nový, který je jednotný a zároveň se příliš neodlišuje od toho, na co už jsou uživatelé zvyklí. Tento kompromis je v ní použit. Třetí kapitola obsahuje výčet všech funkcí, které se nachází v naší kombinatorické knihovně. U každé z funkcí je popsáno k čemu slouží, jaké jsou parametry funkce a návratové hodnoty. Použití funkce je názorně ukázáno na krátkém programu využívající její funkcionalitu. Ve čtvrté kapitole se věnuji ukázkám, jak lze funkce z naší knihovny využít na praktických příkladech a závěr obsahuje celkové hodnocení knihovny s jejím možným rozšířením. 1

9 Kapitola 2 Konvence pro pojmenování funkcí v jazyce C 2.1 Popis problematiky Funkce v programovacích jazycích mají jména, která označují pamět ová místa a pomocí nichž uživatel k daným funkcím přistupuje, aniž by musel používat jejich adresy. V mnohých moderních jazycích je možné definovat několik funkcí se stejným jménem, pokud mají rozdílnou množinu parametrů (alespoň co se jejich množství a typů týče). Této vlastnosti se říká přetěžování funkcí. Když je zavolána přetížená funkce, překladač vybere správnou funkci podle počtu, typů a pořadí argumentů volané funkce [3]. Příklad přetížení funkcí: int fun(int a, int b) return 1; int fun(int a) return 2; int fun(double a) return 3; potom při volání funkce fun tímto způsobem: int x = fun(2, 3); se použije první definice fun kvůli volání funkce s dvěma argumenty, oběma typu int a při volání int x = fun(4.3); se použije třetí definice funkce fun, protože argument přetížené funkce je typu double. V jazyce C je takovéto kolizní pojmenování funkcí nepřípustné a proto je nutné názvy funkcí od sebe odlišit přidáním nějakých znakových řetězců, aby bylo zajištěno jejich různé pojmenování. Předchozí funkce by mohly vypadat v jazyce C třeba takto: int fun2i(int a, int b) return 1; int funi(int a) return 2; int fund(double a) return 3; kde i značí, že argument má být typu int, číslo 2 signalizuje požadavek dvou argumentů, zatímco d značí použití funkce s argumentem typu double. U takto vytvořených názvů funkcí je důležité, aby jejich používání bylo intuitivní a proto by měl v pojmenování funkcí být určitý systém. 2

10 2.2. ANALÝZA STÁVAJÍCÍHO SYSTÉMU POJMENOVÁNÍ FUNKCÍ Při vytváření názvů funkcí se budeme řídit těmito pravidly: vytvoření názvů podle funkcionality určení zkratky pro datové typy argumentů umístění zkratek označující datové typy argumentů zvolení implicitního typu argumentů 2.2 Analýza stávajícího systému pojmenování funkcí Cílem není vytvořit úplně nový a odlišný systém pojmenování, ale aby byl jednotný pro celou knihovnu a přesto se příliš nelišil od stávajících modelů, na které jsou uživatelé používající jazyk C zvyklí. Toho docílíme studií názvů existujících funkcí a odhalením jejich nedostatků se zaměřením hlavně na matematickou knihovnu <math.h> Trigonometrické funkce Ve standardní knihovně jazyka C existují funkce sin, cos, tan, acos, asin, atan, atan2. Všechny jsou pouze ve verzích s datovým typem double. Jejich rozšíření o práci s datovými typy float a long double jsou funkce z knihovny glibc. double sin (double x) Z názvu funkce je na první pohled zřejmé, že funkce počítá sin úhlu x vyjádřeného v radiánech. Výchozí typ parametru a návratové hodnoty je double, pokud není specifikováno jinak. float sinf (float x) Přidání f označuje, že se jedná o funkci pracující s datovým typem float. Analogicky výskyt zkratky l značí práci s datovým typem long double. Zkratka f je přidána na konec názvu funkce. 3

11 2.2. ANALÝZA STÁVAJÍCÍHO SYSTÉMU POJMENOVÁNÍ FUNKCÍ Exponenciální a logaritmické funkce double exp (double x) Zkratka exp je běžně používána v matematické literatuře pro označení exponenciální funkce. Výchozí typ parametru a návratové hodnoty je double, takže zkratka doznačující datový typ double se neuvádí. float expf (float x) Zkratka f značí float a je umístěn na konci názvu, nic se tedy neliší od předchozí funkce sin. float logf (float x) Funkce logaritmu, která pracuje s typem float, což je specifikováno taktéž na konci Aritmetické funkce Ve standardní knihovně nalezneme pro výpočet absolutní hodnoty funkce: abs, labs a fabs pracující s typy int, long int a double, chybí pouze verze s float. int abs (int number) Funkce vrací absolutní hodnotu čísla zadaného jako parametr, proto zkratka abs (absolute). Výchozím typem je int. long int labs (long int number) Zkratka l značí long int právě kvůli výchozímu typu int, což je změna oproti předchozím funkcím, které měli výchozí typ double a proto l znamenalo long double. Výchozím typem je int. double fabs (double number) Oproti ostatním funkcím, které označují f jako float, zde f značí typ double. Tím nastává problém, jak označit float, viz následující funkce. Řešení: dabs nebo raději absd. 4

12 2.3. TVORBA NÁZVŮ FUNKCÍ PRO KOMBINATORICKOU KNIHOVNU float fabsf (float number) Kvůli nevhodnému použití f pro double u funkce fabs je přidáno ještě jedno f na konec. Takovéto řešení není příliš uživatelsky příjemné, bylo by vhodnější použít absf pro float a zároveň absd pro double. Příznak typu je lepší umístit za významové slovo abs, protože například u funkce cabsf, s prototypem float cabsf (complex float z), má tento příznak také na konci. 2.3 Tvorba názvů funkcí pro kombinatorickou knihovnu Po zanalyzovaní funkcí z matematické knihovny a vypozorování určitých vzorů, můžeme nyní pojmenovat funkce naší kombinatorické knihovny, čemuž se věnujeme v této podkapitole Tvoření názvů podle funkcionality Z názvu funkce musí být na první pohled patrný její význam, skládá se proto ze zkratky významového slova. Neuvádí se celý název, aby programátor nebyl nucen vypisovat dlouhý název funkce, ale pouze zkratka vystihující danou funkcionalitu. Podle prefixu každé funkce poznáme, zda funkce pracuje s permutacemi, variacemi nebo kombinacemi. U variací je zvolena předpona var (variation), která může být chápána jako proměnná (variable). Předpona var však nikdy nebude samotná, takže k záměně s variable nedojde. Permutace Variace Kombinace Faktoriál perm var comb fact Tabulka 2.1: Tabulka základních zkratek funkcí Zkratky pro typy parametrů a návratové hodnoty K jednoznačnému označení funkce se do názvu přidávají informace identifikující datový typ, s kterým daná funkce pracuje. Permutace, variace nebo kombinace mohou obsahovat hodnoty s typem int, short int, long int, char a k nim ještě bez znaménkově chápané datové typy, jejichž hodnoty nenabývají záporných hodnot (unsigned int, unsigned short int, unsigned long int, 5

13 2.3. TVORBA NÁZVŮ FUNKCÍ PRO KOMBINATORICKOU KNIHOVNU Inicializace Alokace paměti Dealokace paměti Kopírování Výpis Zjištění velikosti Následující n-tice init alloc free copy print sizeof next Tabulka 2.2: Tabulka zkratek pro specifikace funkcí unsigned char). Reálné datové typy (float, double, long double) nebudeme v kombinatorické knihovně vůbec používat, vystačíme s typy celočíselnými. Jako intuitivní řešení se nabízí vzít počáteční písmena z datového typu. Například pro char by byla zkratka c, pro unsigned int zkratka ui a pro unsigned long int zkratka uli. Pokud jsou operandy typu char nebo int uvedeny bez typového specifikátoru signed nebo unsigned, předpokládá se použití typu signed char, resp. signed int. V případě kompilátoru ANSI C je potřeba ověřit, zda implicitně reprezentuje typ char jako signed char nebo unsigned char [4]. V naší kombinatorické knihovně je vhodnější použít všechny typy implicitně jako unsigned, jelikož permutace, variace nebo kombinace jsou v této knihovně inicializovány bud od nuly nebo od jedné a žádné záporné hodnoty tak nemohou obsahovat. Pro úplnost jsou implementovány i funkce se znaménkovými typy, které obsahují ve zkratce navíc písmeno s od klíčového slova signed. Z důvodu přehlednosti se vynechává uvádění implicitního datového typu int. Stejně jako se neuvádí u trigonometrické funkce sin zkratka pro double, nebo u aritmetické funkce pro výpočet absolutní hodnoty zkratka pro int, tak i zde se vynechává písmeno i pro funkce pracující s datovým typem int. V kombinatorické knihovně se přidávají do názvu funkce zkratky, které jsou znázorněny v tabulce Způsob řazení zkratek za sebe Otázkou je, jak seřadit zkratky za sebe, aby takto vytvořený název byl přehledný a bylo na první pohled zřejmé o jaký druh funkce se jedná. Ke zvýraznění a oddělení zkratek je možné použít způsob zápisu tzv. camelcase, který je používán jako konvence psaní různých identifikátorů v jazyce Java, PHP nebo Ruby. V jazyce C ovšem není tento způsob tvoření názvů používán, stejně jako použití podtržítka. Výsledný název tedy vznikne zřetězením významového slova (viz tabulka 2.1), bližší 6

14 2.3. TVORBA NÁZVŮ FUNKCÍ PRO KOMBINATORICKOU KNIHOVNU Datový typ Zkratka Poznámka int s signed (int) unsigned int short int sh signed short (int) unsigned short int h long int sl signed long (int) unsigned long int l char sc signed char unsigned char c Tabulka 2.3: Tabulka datových typů a jejich zkratek specifikace funkce (tabulka 2.2) a zkratky pro typ parametru funkce (tabulka 2.3). Například inicializace permutace tvořené bezznaménkovými znaky bude vypadat takto: perm + init + c. 7

15 Kapitola 3 Funkce kombinatorické knihovny V této kapitole jsou popsány všechny funkce kombinatorické knihovny, která má název comb.c. Funkce jsou děleny do tří sekcí: funkce pro permutace, variace a kombinace. Většina funkcí je naprogramována v 8 variantách, liší se datovým typem prvků v permutaci, které mohou být typu unsigned int, int, unsigned char, char, unsigned short, short, unsigned long a nebo long. Při použití každé z funkcí si můžeme vybrat mezi objektově orientovanou variantou nebo její alternativou v podobě klasického přístupu. Objektový přístup má uschovanou velikost permutace před samotnou permutací a přístup k ní je řešen funkcí permsizeof, kdežto u klasického přístupu je velikost permutace zadána jako další parametr funkce a do názvu funkce je pro odlišení přidáno písmeno n, které značí nutnost zadání délky permutace (například permninit). Popis funkce se skládá z obecného popisu, kde je uvedeno k čemu funkce slouží, případně obsahuje technické údaje k objasnění, jak je funkce implementována. Dále je uveden prototyp funkce, z něhož je patrný název, jsou popsány parametry a návratová hodnota funkce. K lepšímu pochopení je uvedena názorná ukázka v podobě krátkého programu s jeho výstupem. Při práci s permutacemi, variacemi nebo kombinacemi v jejich objektové variantě je nutné nejprve přidělit pamět funkcemi permalloc, varalloc a comballoc, dále inicializovat vzniklý objekt pomocí funkcí perminit, varinit, případně combinit a teprve potom s nimi lze manipulovat. 3.1 Permutace Permutací z n-prvkové množiny M nebo n-člennou permutací nazýváme každou uspořádanou n-tici navzájem různých prvků, vytvořenou z množiny prvků M. Počet všech permutací z n prvků: P(n) = n = n! [5]. 8

16 3.1. PERMUTACE Nebo můžeme permutace obecněji definovat tímto způsobem: Permutací množiny M nazýváme každé prosté zobrazení množiny M na množinu M. Faktoriálem čísla n nazýváme funkci F na množině všech nezáporných celých čísel, definovanou takto: F(0) = 1, F(n + 1) = (n + 1) F(n) (n N 0 ) Místo F(n) píšeme n!. Pro n 1 je n! = (n - 1) n [5] Alokace permutace Permutace je v paměti reprezentována jako jednorozměrné pole, k jehož alokaci využíváme funkce ze standardní knihovny jazyka C calloc. Alokovaný blok funkcí permalloc má velikost o jedna větší než je požadovaná velikost permutace zadaná jediným vstupním parametrem. První prvek pole je vyhrazen pro uložení velikosti permutace a všechny ostatní pro samotnou permutaci. Vrácen je ukazatel na první prvek permutace, který ve skutečnosti ukazuje až na druhý prvek alokovaného pole. Všechny bity alokovaného pole jsou inicializovány na nulu, jen první prvek pole obsahuje velikost permutace. U funkce permnalloc je pouze dynamicky alokováno pole s velikostí rovnou n. Velikost alokované permutace je omezena datovým typem prvků, které obsahuje, což znázorňuje tabulka 3.1, která udává ke každé funkci maximální počet prvků permutace. U permutací typu unsigned int nebo unsigned long je ještě snížen rozsah na polovinu kvůli použití vstupního parametru typu int, resp long. Alokovat větší permutace stejně není zatím fyzicky možné, protože takovéto permutace by vyžadovaly až 17 GB operační paměti. Při požadavku o alokaci větší permutace než je povoleno, nedochází k přidělení paměti, ale dojde k nastavení externí proměnné errno [6] na hodnotu ERANGE. Název funkce: unsigned int *permalloc(int n) unsigned int *permnalloc(int n) Parametry: Parametr n je celočíselná hodnota, která určí velikost alokované permutace. 9

17 Návratová hodnota: 3.1. PERMUTACE Ukazatel na blok alokované paměti, typ ukazatele záleží na použité funkci (například permalloc vrací ukazatel na unsigned int, permallocsl zase ukazatel na long int). Není-li z nějakého důvodu možné pamět přidělit, funkce vrací nulový ukazatel. #include<stdio.h> #include "comb.h" int main() unsigned int *permutace, n = 10, size = 0; permutace = permalloc(n); size = permsizeof(permutuce); printf("velikost permutace je %d a zabira v pameti %d B.\n", size,1+size*sizeof(unsigned int)); permfree(permutace); return 0; Příklad 3.1.1: Příklad použití funkce permalloc Funkce Prvky datového typu Maximální počet prvků permutace permalloc unsigned int nebo permallocs int nebo permallocc unsigned char 256 permallocsc char 128 permallocl unsigned long permallocsl long int permalloch unsigned short permallocsh short int permnalloc unsigned int nebo permnallocs int nebo permnallocc unsigned char 256 permnallocsc char podle architektury 2B nebo 4B 10

18 3.1. PERMUTACE Funkce Prvky datového typu Maximální počet prvků permutace permnallocl unsigned long permnallocsl long int permnalloch unsigned short permnallocsh short int Tabulka 3.1: Omezení velikosti permutace datovým typem Délka permutace Funkce permsizeof slouží k zjištění velikosti permutace. Velikost je uložena před prvním prvkem permutace, takže je možné délku permutace zpřístupnit indexem -1. Tento přístup se nedoporučuje kvůli reprezentaci největší možné velikosti permutace uložené na tomto místě. Všechny typy bez znaménka používají přímou binární notaci, bez ohledu na to, zda typy bez znaménka používají dvojkovou doplňkovou notaci, jedničkovou doplňkovou notaci nebo přímou notaci. Znaménkový bit se považuje za normální datový bit. To znamená, že slovo o n bitech může reprezentovat celá čísla od 0 do 2 n -1 [6]. Pro uložení velikosti permutace 2 n tam, kde je povoleno zapsat slovo maximálně o velikosti 2 n -1 se využije hodnoty 0, která je funkcí permalloc nastavena pouze v případě hodnoty 2 n. Funkce permsizeof nulu automaticky reprezentuje jako číslo o jedna větší než je horní hranice rozsahu daného typu. Například pole datového typu char může obsahovat pouze hodnoty v rozmezí 0 až 255. Pro velikost permutace 256, kterou není možné v proměnné daného typu zobrazit, značí nula v poli na indexu -1 právě velikost permutace rovnou 256. Název funkce: int permsizeof(unsigned int *perm) Parametry: Parametr perm je ukazatel na první prvek permutace. Návratová hodnota: Funkce permsizeof vrací počet prvků permutace, která byla vytvořena funkcí permalloc. Pokud má permutace nulovou délku nebo vstupní parametr má hodnotu nulového ukazatele, je vrácena 0. 11

19 3.1. PERMUTACE Inicializace permutace typu int Alokované místo v paměti funkcí permalloc obsahuje prvky pole rovné nule. K nastavení počátečních hodnot permutace slouží funkce perminit, která vytvoří identickou permutaci. Pro matematické účely je k dispozici funkce perminit1, ta nastaví identickou permutaci od jedné, kdežto u funkce perminit je počátečním prvkem permutace nula. Pro inicializaci permutace od nuly lze použít její modifikaci perminitex (jako exclusive), u které dojde k vytknutí vybraného prvku permutace a k celkovému zmenšení velikosti o jedna. Funkce má dva parametry, první je ukazatel na permutaci a druhý je vyjmutý prvek n n n n Název funkce: void perminit(unsigned int *perm) void permninit(unsigned int *perm, int n) void perminit1(unsigned int *perm) void permninit1(unsigned int *perm, int n) void permninitex(unsigned int *perm, int t) void permninitex(unsigned int *perm, int t, int n) Parametry: Parametr perm je ukazatel na permutaci, která má být inicializována. Parametr t je prvek, který bude z permutace vytknut. Návratová hodnota: Žádná Inicializace permutace typu char Permutace obsahující znaky lze nastavit pomocí libovolného znaku. Ten pak bude prvním prvkem permutace a na ostatních pozicích permutace budou znaky s ordinální hodnotou o jedna větší než má jeho předchůdce. Název funkce: void perminitc(unsigned char *perm, char init) void permninitc(unsigned char *perm, char init, int n) 12

20 3.1. PERMUTACE Parametry: Parametr perm je ukazatel na permutaci, která má být inicializována. Znaková konstanta init je počátečním prvkem permutace. Návratová hodnota: Žádná. #include<stdio.h> #include "comb.h" int main() unsigned char *permutace, n = 8; permutace = permallocc(n); printf("znakova permutace zacinajici znakem a : \n"); perminitc(permutace, a ); permprintc(permutace); printf("\nznakova permutace zacinajici znakem H : \n"); perminitc(permutace, H ); permprintc(permutace); permfreec(permutace); return 0; Příklad 3.1.2: Příklad použití funkce perminitc Výstup ukázkového příkladu: Znakova permutace zacinajici znakem a : [a, b, c, d, e, f, g, h] Znakova permutace zacinajici znakem H : [H, I, J, K, L, M, N, O] Typ permutace Tato pomocná funkce nám zjistí hodnotu nejmenšího prvku, který se v dané permutaci vyskytuje. Po alokovaní místa v paměti pro uložení permutace a následném nastavení 13

21 3.1. PERMUTACE hodnot, může permutace obsahovat prvky od jedné nebo od nuly. Typem permutace se zde rozumí právě toto nastavení. Název funkce: int permtype(unsigned int *perm) int permntype(unsigned int *perm, int n) Parametry: Parametr perm je ukazatel na první prvek permutace. Návratová hodnota: Funkce permtype vrací hodnotu 0, pokud je permutace inicializována od nuly, hodnotu 1 v případě inicializace permutace od jedné. V ostatních případech vrací funkce hodnotu Tisk permutace Permutaci lze vypsat přímo na standardní výstup nebo je možné ji zapsat do specifikovaného proudu. Formát výpisu číselné permutace je dán jednou ze tří funkcí: permprint2line, permprint nebo permprintcycle. Pro výpis znakové permutace existuje pouze jedna varianta, která vypisuje permutaci jako sekvenci prvků (funkce permprintc). Zápis permutace tabulkou: Funkce permprint2line zobrazuje permutaci konečné množiny S jako tabulku se dvěma řádky tak, jak se to obvykle v matematice píše. V prvním je seznam elementů množiny S a na druhém se nachází obrazy každého z elementů Permutace reprezentovaná polem: Alternativní zobrazení permutace je zjednodušením předchozího výpisu, kde jsou vypsány pouze obrazy elementů (druhý řádek tabulky). Tato reprezentace permutace znázorňuje způsob uložení elementů permutace v poli. První řádek tabulky (vzory elementů permutace) je skryt pod indexy prvků pole. [ ]

22 3.1. PERMUTACE Zápis permutace pomocí nezávislých cyklů: Další způsob zápisu permutací je pomocí nezávislých cyklů. Cykly jsou uzavřeny v kulatých závorkách a vzniknou následujícím způsobem: začneme výběrem některého elementu x z S takového, že π(x) x a zapisujeme sekvenci (x π(x) π(π(x))...) následných obrazů π, dokud obraz nebude x. Množina zapsaných hodnot tvoří orbit elementu x a uzávorkovaný výraz nám udává odpovídající cyklus. Dále pokračujeme výběrem elementu y z S, který nebyl doposud zapsán v žádném z orbitů a zároveň π(y) y, zapíšeme odpovídající cyklus, a tak dále dokud všechny elementy z množiny S nepatří do nějakého cyklu, nebo nejsou pevnými body 1. Definice. Každou permutaci π S n lze rozložit na součin nezávislých cyklů délky alespoň 2. Tento rozklad je až na pořadí činitelů jednoznačný. Zápis výše uvedené permutace pomocí nezávislých cyklů: ( ) ( ) 3 6 Poznámka: v cyklu nejdříve vypisujeme jeho minimální prvek Tisk permutace na standardní výstup Zapíše permutaci v daném formátu na standardní výstup (stdout). Název funkce: void permprint2line(unsigned int *perm) void permnprint2line(unsigned int *perm, int n) void permprint(unsigned int *perm) void permnprint(unsigned int *perm, int n) void permprintcycle(unsigned int *perm) void permnprintcycle(unsigned int *perm, int n) Parametry: Parametr perm je ukazatel na permutaci, která má být vytištěna na standardní výstup. Návratová hodnota: Žádná. 1. elementy permutace, které zůstávají na místě (π(x) = x) 15

23 3.1. PERMUTACE #include<stdio.h> #include "comb.h" int main() unsigned int *permutace, n = 8; permutace = permget(n,4433); // vytvoreni permutace: [0,7,1,6,4,5,3,2] printf("vypis permutace tabulkou: \n"); permprint2line(permutace); printf("\nzjednoduseny vypis permutace: \n"); permprint(permutace); printf("\npermutace vypsana pomoci nezavislych cyklu: \n"); permprintcycles(permutace); permfree(permutace); return 0; Příklad 3.1.3: Příklad použití funkce permprint Výstup ukázkového příkladu: Vypis permutace tabulkou: ( ) ( ) Zjednoduseny vypis permutace: [0, 7, 1, 6, 4, 5, 3, 2] Permutace vypsana pomoci nezavislych cyklu: (1 7 2)(3 6) Tisk permutace do proudu Funkce umožňující uživateli zápis permutace do specifikovaného proudu. Mimo permutace lze do proudu zapsat i textový řetězec, který bude umístěn před výpis permutace. 16

24 3.1. PERMUTACE Název funkce: int permfprint2line(file * stream, char * text, unsigned int *perm) int permfprint(file * stream, char * text, unsigned int *perm) int permfprintcycle(file * stream, char * text, unsigned int *perm) int permnfprint2line(file * stream, char * text, unsigned int *perm, int n) int permnfprint(file * stream, char * text, unsigned int *perm, int n) int permnfprintcycle(file * stream, char * text, unsigned int *perm, int n) Parametry: První parametr stream je ukazatel na objekt FILE, který identifikuje proud pro výpis permutace. Druhý parametr text tvoří uvozovací textový řetězec před výpisem permutace. Parametr perm je ukazatel na permutaci, která má být vytištěna do určeného proudu. Návratová hodnota: Počet znaků, které se posílají do výstupního proudu, pokud nenastane chyba. V případě výskytu chyby je vrácena hodnota EOF, která má ve většině tradičních implementacích hodnotu Generování následující permutace Funkce permnext změní obsah permutace zadané jako jediný parametr tak, že výsledná permutace je lexikograficky větší. Zároveň neexistuje permutace, která by byla větší než původní, ale menší než nově vytvořená. Tato vlastnost nám umožní generovat všechny možné permutace v případě volání funkce na jednotkovou permutaci. Permutace jsou vytvářeny dokud funkce nevrátí hodnotu nula (neexistuje už žádná větší permutace). Řešením, jak vytvořit všech n! permutací se zabýval Trotter [7], který uspořádal jednotlivé transpozice do sekvence tak, aby každé dva prvky, které mají být transponovány byly sousedící. Jiný přístup zvolil Wells, jeho metoda spočívá ve vytvoření nové permutace z předchozí. Stejného principu využívám i v této práci s tím rozdílem, že vytvořené permutace jsou lexikograficky uspořádané. K vytvoření minimálního lexikografického následníka je potřeba nalézt dva prvky, které zaměníme a seřadit určitou podmnožinu prvků permutace. Časová složitost problému seřazení posloupnosti o n prvcích je Θ(n log n). Když ale využijeme skutečnosti, že 17

25 3.1. PERMUTACE #include<stdio.h> #include "comb.h" int main() unsigned int *permutace, n = 8; FILE * pfile = NULL; pfile = fopen("permfprint_example.txt","w"); permutace = permalloc(n); perminit(permutace); permfprint(pfile,"identicka permutace: ", permutace); permfprint(pfile,"", permutace); fclose(pfile); permfree(permutace); return 0; Příklad 3.1.4: Příklad použití funkce permfprint řazená posloupnost je již seřazena sestupně, dosáhneme rychlejších výsledků. K obrácenému seřazení totiž stačí provést reverzi, což znamená prohodit první prvek s posledním, druhý s předposledním atd. Tím se nám časová složitost sníží na n/2. Stále je však otázkou, jak nalézt prvky, které mají být prohozeny. Řešení tohoto problému je popsáno v sekci: Popis algoritmu. Název funkce: int permnext(unsigned int *perm) int permnnext(unsigned int *perm, int n) 18

26 Parametry: 3.1. PERMUTACE Parametr perm je ukazatel na permutaci, ze které se bude vytvářet následující permutace. Návratová hodnota: Pokud existuje lexikograficky větší permutace, než která byla zadána jako vstupní parametr, je vrácena hodnota 1, v opačném případě hodnota 0. Zdrojový kód: int permnext(unsigned int *p) int i, dm, hm, pos, ord = 1; if( p == NULL) return 0; for( pos = permsizeof(p) - 1; pos > 0; pos-- ) for( i = pos - 1; i >= 0 && ord; i-- ) if( p[i] < p[pos] ) /* swap */ p[i] ^= p[pos]; p[pos] ^= p[i]; p[i] ^= p[pos]; /* reverse */ hm = permsizeof(p) - 1; for( dm = i + 1; dm < hm; dm++,hm-- ) p[hm] ^= p[dm]; p[dm] ^= p[hm]; p[hm] ^= p[dm]; return 1; else if( p[i] < p[i+1] ) ord = 0; ord = 1; return 0; 19

27 3.1. PERMUTACE Použité proměnné: Proměnná pos je index prvku pole, jenž má být prohozen s jiným prvkem tak, aby došlo k přechodu na následující permutaci. Pod indexem i hledáme v poli menší prvek než je na pozici pos. Při nalezení této dvojice jsou prvky s indexy i a pos vzájemně prohozeny. Indexy dm a hm označují počáteční a koncový úsek pole, který bude seřazen vzestupně. Hodnota proměnné ord udává, že posloupnost prvků za pozicí s indexem i je sestupně uspořádaná a tudíž můžeme prvky na indexech i a pos prohodit, aniž by došlo k vzniku nesprávné permutace. Popis algoritmu: K vzniku nové permutace hledáme dvojici prvků, které prohodíme. Aby vznikl lexikografický následník, zaměníme větší prvek umístěný v pozici blíže ke konci, s prvkem menším v pozici blíže začátku. Nalezení dvojice prohazovaných prvků probíhá následujícím způsobem: Začínáme porovnávat od posledního prvku s jeho předchůdci. Při hledání menšího prvku si kontrolujeme, zda se za ním nachází sestupně seřazená posloupnost. Pokud tomu tak není, prohození nelze provést, protože by došlo k přeskočení několika možností a při generování všech n! permutací by výsledkem byla jen určitá podmnožina z celkového počtu. Tuto situaci názorně ilustruje následující obrázek, ve kterém nedochází k prohození prvku 4 s prvním menším prvkem 3 (5 < 6 > 4), nebot bychom přeskočili menší permutace: [1, 2, 3, 6, 4, 5] a [1, 2, 3, 6, 5, 4]. Prvek 3 na této pozici můžeme zaměnit s prvkem 4 až v okamžiku, kdy je splněna podmínka seřazené sekvence prvků (6 > 5 > 4) viz obrázek. 20

28 3.1. PERMUTACE Pokud nemůžeme provést prohození prvků at už z důvodu neexistence menšího prvku nebo kvůli neseřazené posloupnosti prvků za nalezeným menším prvkem, posuneme se o jednu pozici doleva a opakujeme porovnávání s předchůdci prvku na této nové pozici. Jakmile můžeme prvky bez problému prohodit, učiníme tak a uspořádáme sekvenci následovanou za menším z nalezených dvou prvků (prvek v pozici blíže začátku). Tato sekvence v případě prohození bude vždy sestupně uspořádaná, jinak nelze prvky prohodit. K setřídění posloupnosti tedy stačí provést reverzi prvků a výsledkem je minimální lexikografický následník zadané permutace. Časová složitost: Počet porovnání je v nejhorším případě roven n 1 i=1 (n i) kde n 1. Nejvíce záměn prvků nastane v případě prohození prvku na první pozici s jakýmkoliv jiným prvkem, pak je seřazena celá posloupnost následovaná za prvním prvkem. Počet prohození je tedy: 1 + (n 1) / 2. #include<stdio.h> #include "comb.h" int main() unsigned int *permutace, n = 4; permutace = permalloc(n); perminit1(permutace); do permprint(permutace); while( permnext(permutace) ); return 0; Příklad 3.1.5: Příklad použití funkce permnext Výstup ukázkového příkladu: [1, 2, 3, 4] [2, 1, 3, 4] [3, 1, 2, 4] [4, 1, 2, 3] [1, 2, 4, 3] [2, 1, 4, 3] [3, 1, 4, 2] [4, 1, 3, 2] [1, 3, 2, 4] [2, 3, 1, 4] [3, 2, 1, 4] [4, 2, 1, 3] [1, 3, 4, 2] [2, 3, 4, 1] [3, 2, 4, 1] [4, 2, 3, 1] 21

29 3.1. PERMUTACE [1, 4, 2, 3] [2, 4, 1, 3] [3, 4, 1, 2] [4, 3, 1, 2] [1, 4, 3, 2] [2, 4, 3, 1] [3, 4, 2, 1] [4, 3, 2, 1] Získání permutace podle pořadí K získání permutace, která je vytvořena podle lexikografického uspořádání v požadovaném pořadí slouží funkce permget. K výpočtu je využita funkce permnext, která generuje permutace do té doby, než je vytvořena správná permutace. Název funkce: unsigned int *permget(int n, int s) unsigned int *permnget(int n, int s) Parametry: Parametr n udává velikost požadované permutace. Podle parametru s se vygeneruje v pořadí s-tá permutace. Návratová hodnota: Ukazatel na nově vytvořenou permutaci Kopírování permutace V případě potřeby vytvořit kopii permutace lze využít funkce permcopy. Při jejím zavolání dojde k alokaci paměti, zkopírování všech prvků původní permutace do nově alokovaného bloku a následně je vrácena adresa zkopírované permutace. Název funkce: unsigned int *permcopy(unsigned int *perm) unsigned int *permncopy(unsigned int *perm, int n) Parametry: Parametr perm je ukazatel na permutaci, z níž se bude vytvářet kopie. Návratová hodnota: Ukazatel na nově vytvořenou kopii původní permutace. 22

30 3.1. PERMUTACE #include<stdio.h> #include "comb.h" int main() unsigned int *permutace, *kopie, n = 8; permutace = permalloc(n); perminit(permutace); kopie = permcopy(permutace); // zaloha permutace permnext(permutace); // vytvoreni nasledujici permutace printf("nove vytvorena permutace (naslednik puvodni): \n"); permprint(permutace); printf("\npredchudce nove vytvorene permutace: \n"); permprint(kopie); permfree(permutace); permfree(kopie); return 0; Příklad 3.1.6: Příklad použití funkce permcopy Výstup ukázkového příkladu: Nove vytvorena permutace (naslednik puvodni): [0, 1, 2, 3, 4, 5, 7, 6] Predchudce nove vytvorene permutace: [0, 1, 2, 3, 4, 5, 6, 7] Porovnání permutací Pro porovnání permutací zavedeme pojem lexikografického uspořádání (slovníkové řazení). Jde o matematický pojem z oboru teorie uspořádání, který formalizuje vlastnosti uspořádání "podle abecedy"[8]. Definice: Lexikografické uspořádání na uspořádáné n-tici X n = [a 1,a 2,...,a n ] : a i X je definováno vztahem [a 1,a 2,...,a n ] Le [b 1,b 2,..., b n ] (a 1 b 1 ) (a 1 = b 1 a 2 b 2 ) (a 1 = b 1 a 2 = b 2 a 3 b 3 )... (a 1 = b 1 a 2 = b 2... a n-1 = b n-1 a n b n ) 23

31 3.1. PERMUTACE Název funkce: int permcmp(unsigned int *p, unsigned int *q) int permncmp(unsigned int *p, unsigned int *q, int n) Parametry: Parametr p a q jsou ukazatele na porovnávané permutace. Návratová hodnota: Číslo -1, 0, 1, je-li p lexikograficky menší, rovno, větší než q Skládání permutací Násobení permutací není v obecném případě komutativní operace, proto rozlišujeme mezi skládáním zleva, či zprava. Ke složení dvou permutací zleva slouží funkce permcompl, permutace lze složit i zprava funkcí permcompr. U komutativních permutací nezáleží, kterou z výše uvedených funkcí použijeme. Zjištění komutativity permutací provádí funkce permiscommutative. Název funkce: int *permcompl(unsigned int *l, unsigned int *r) int *permncompl(unsigned int *l, unsigned int *r, int n) int *permcompr(unsigned int *l, unsigned int *r) int *permncompr(unsigned int *l, unsigned int *r, int n) Parametry: Parametry l a r jsou ukazatele na skládané permutace. Návratová hodnota: Ukazatel na permutaci, která vznikla jako součin dvou permutací. Pokud nelze složit zadané permutace, je vrácen nulový ukazatel. 24

32 3.1. PERMUTACE #include<stdio.h> #include "comb.h" int main() unsigned int *P = NULL, *Q = NULL, n = 8; unsigned int *S_zleva = NULL, *S_zprava = NULL; P = permget(n,9157); Q = permget(n,32859); printf("\np: \n"); permprint2line(p); printf("\nq: \n"); permprint2line(q); S_zleva = permcompl(p, Q); printf("\ns = P * Q : \n"); permprint2line(s_zleva); S_zprava = permcompr(p, Q); printf("\ns = Q * P : \n"); permprint2line(s_zprava); permfree(p); permfree(q); permfree(s_zleva); permfree(s_zprava); return 0; Příklad 3.1.7: Příklad použití funkce permcompl a permcompr Výstup ukázkového příkladu: P: Q: ( ) ( ) ( ) ( ) S = P * Q : ( ) ( ) S = Q * P : ( ) ( ) 25

33 3.1. PERMUTACE Cyklický posuv permutace Zavoláním funkce permshiftl na permutaci dojde k cyklickému posunu prvků o k pozic doleva. Pro cyklický posuv elementů permutace doprava slouží funkce permshiftr. Obrázek níže ilustruje posouvání prvků v permutaci naší funkcí. Jak už z názvu vyplývá, jde o cyklické posuny. Na obrázku cyklicky posouváme osmiprvkovou posloupnost o dvě místa doprava a při tom potřebujeme vykonat dva nezávislé cyklické posuny. Při každém z nich si do cyklu zakomponujeme pomocnou proměnnou, aby nedošlo ke ztrátě informace o jednom z prvků. Tento algoritmus je efektivnější, než kdybychom si vytvořili celou kopii permutace, a její prvky pak vkládali na ty správné pozice. Vyžadovalo by to dvojnásobnou pamět, n přiřazení do kopírované permutace a následných n vložení zpátky. My zde potřebujeme pouze jednu pomocnou proměnnou, do které přiřazujeme prvky pouze tolikrát, kolik je potřeba vykonat cyklů. U permutací délky 2, 3, 5, 7, 11, 13, atd. (velikosti jsou prvočísla) tvoří posun o libovolný počet vždy jen jeden cyklus a tedy jedno přiřazení navíc, celkový počet přiřazení je v tomto případě rovno n + 1. Název funkce: void permshiftl(unsigned int *perm, int k) void permnshiftl(unsigned int *perm, int k, int n) void permshiftr(unsigned int *perm, int k) void permnshiftr(unsigned int *perm, int k, int n) Parametry: Parametr perm je ukazatel na permutaci, kterou cyklicky posuneme o určitý počet míst doleva, či doprava. Parametr k specifikuje počet míst, o kolik se posune každý prvek permutace. Návratová hodnota: Žádná. 26

34 3.1. PERMUTACE #include<stdio.h> #include "comb.h" int main() unsigned int *permutace = NULL, n = 8, k = 1; permutace = permalloc(n); perminit1(permutace); printf("posun o %d misto doprava: \n",k); permprint(permutace); permshiftr(permutace, k); permprint(permutace); perminit1(permutace); printf("\nposun o %d misto doleva: \n",k); permprint(permutace); permshiftl(permutace, k); permprint(permutace); permfree(permutace); return 0; Příklad 3.1.8: Příklad použití funkce permshiftl a permshiftr 27

35 3.1. PERMUTACE Výstup ukázkového příkladu: Posun o 1 misto doprava: [1, 2, 3, 4, 5, 6, 7, 8] [8, 1, 2, 3, 4, 5, 6, 7] Posun o 1 misto doleva: [1, 2, 3, 4, 5, 6, 7, 8] [2, 3, 4, 5, 6, 7, 8, 1] Znaménko permutace Říkáme, že permutace množiny U n = 1, 2,..., n má inverzi, právě když existují takové indexy i, j (i < j), že k i > k j (i, j U n ). Označíme-li v(p) počet všech inverzí v permutaci P, pak permutaci P nazýváme sudou, resp. lichou, právě když v(p) je sudé, resp. liché číslo. Znaménko [ signum ] permutace P je číslo z(p) = ( 1) v(p) [5]. Příklad: Inverze permutace [3, 1, 2, 5, 4] jsou vyznačeny obloučkem. Název funkce: int permsgn(unsigned int *perm) int permnsgn(unsigned int *perm, int n) Parametry: Parametr perm je ukazatel na permutaci, u které zkoumáme její znaménko. Návratová hodnota: Je-li permutace sudá, je vrácena hodnota 1, v případě lichosti permutace je vrácena hodnota -1. Výstup ukázkového příkladu: Znamenko permutace: [1, 2, 3, 4, 5] je +1. Znamenko permutace: [1, 2, 3, 5, 4] je

36 3.1. PERMUTACE #include<stdio.h> #include "comb.h" int main() unsigned int *permutace = NULL, n = 5; permutace = permalloc(n); perminit1(permutace); printf("znamenko permutace: [1, 2, 3, 4, 5] je %+d.\n", permsgn(permutace)); permnext(permutace); printf("znamenko permutace: [1, 2, 3, 5, 4] je %+d.\n", permsgn(permutace)); return 0; Příklad 3.1.9: Příklad použití funkce permsgn Dealokace permutace Funkce permfree uvolní pamět, která byla přidělena funkcí permalloc. Při volání obyčejné funkce free na alokovanou permutaci se neuvolní kus paměti (obsahující údaj o velikosti permutace), který je umístěn před polem. Název funkce: void permfree(unsigned int *perm) Parametry: Parametr perm je ukazatel na permutaci, která má být z paměti uvolněna. Návratová hodnota: Žádná Bitové permutace Mezi permutace můžeme zařadit i ty bitové, kde dochází k permutaci jednotlivých bitů, kdežto u obyčejných permutací jsou permutovány celé prvky pole. K tomuto účelu slouží funkce bitperm, která bere jako první vstupní parametr prvek, jehož bity budou následně permutovány permutací zadanou jako druhý parametr. Funkce bitpermb nám vrátí permutovaný prvek funkcí bitperm do původní podoby. 29

37 3.1. PERMUTACE Pro permutování bitů se využívá dvou bitových operátorů, bitového součinu (AND) a bitové nonekvivalence (XOR). Pomocí bitového součinu se namapujeme postupně na každý bit vstupních dat a ten pak bitovou nonekvivalencí změníme, pokud je to možné (nemůže nám vzniknou bitový vzorek s jiným počtem jedniček a nul, než jaký byl u původního vzorku). Bity, které budou změněny, udává rozdíl každé dvojice sousedících prvků ze zadané permutace a pozice jedniček a nul v původním vzorku. Název funkce: int bitperm(int b, int *perm) int bitpermn(int b, int *perm, int n) int bitpermb(int b, int *perm) int bitpermbn(int b, int *perm, int n) Parametry: Parametr b je prvek, jehož bity chceme permutovat. Parametr perm je ukazatel na permutaci, podle které jsou bity prvku b permutovány. Pokud chceme permutovat všechny bity vstupního údaje, musí mít permutace stejné množství prvků jako je počet bitů prvku b. Přístupné velikosti permutace datového typu int jsou: 8, 16, 24 a 32. Podle těchto velikostí dojde k permutaci spodních 8, 16, 24 nebo všech 32 bitů vstupního prvku. Při jiných velikostech nedochází k žádné permutaci bitů. Návratová hodnota: Prvek b po permutaci jeho bitů. Výstup ukázkového příkladu: Permutace p1 = [3, 7, 2, 6, 1, 5, 0, 4] Permutaci bitu cisla 164 ( ) pomoci p1 vzniklo cislo 52 ( ). Permutace p2 = [7, 5, 3, 1, 6, 4, 2, 0] Permutaci bitu cisla 164 ( ) pomoci p2 vzniklo cislo 25 ( ). 30

38 3.2. VARIACE A KOMBINACE #include<stdio.h> #include "comb.h" int main() int p1[]=3,7,2,6,1,5,0,4; int p2[]=7,5,3,1,6,4,2,0; unsigned int b, n =8; printf("permutace p1 = "); permnprints(p1,n); b = 164; printf("permutaci bitu cisla %d ( ) pomoci p1 vzniklo cislo %d ( ).\n", b, bitpermn(b, p1, n)); printf("\npermutace p2 = "); permnprints(p2,n); printf("permutaci bitu cisla %d ( ) pomoci p2 vzniklo cislo %d ( ).\n", b, bitpermn(b, p2, n)); return 0; Příklad : Příklad použití funkce bitpermn 3.2 Variace a kombinace Variace i kombinace jsou k-tice vybírané z n prvků. Jejich struktura v paměti se liší jen nepatrně, u kombinací jde o jednorozměrné pole obsahující k prvků, kdežto u variací je do pole zařazeno i zbylých n-k nevybraných prvků, umístěných v poli až za vybranou k-ticí. Základní operace s nimi mají stejnou implementaci, ale používají rozdílná jména funkcí (prefix var pro práci s variacemi, prefix comb jde-li o kombinace). Dvojí pojmenování je zvoleno kvůli tomu, aby bylo na první pohled zřejmé o jakou formu k-tice jde (zda-li v ní záleží na pořadí, či nikoliv). Variací k-té třídy z n-prvkové množiny nebo variací k-té třídy z n-prvků nazýváme každou uspořádanou k-tici navzájem různých prvků, vytvořenou z n-prvkové množiny, tj. každý prvek z daných n prvků se v jedné variaci může vyskytnout právě jednou. Počet všech variací k-té třídy z n-prvkové množiny: V(k, n) = n(n 1) (n 2)...(n k + 1) = n! / (n k)!. Kombinací k-té třídy z n-prvkové množiny nebo kombinací k-té třídy z n prvků nazýváme každou k-prvkovou podmnožinu z n-prvkové množiny, tj. u kombinace nepřihlížíme k uspořádání prvků a každý prvek z daných n prvků se v jedné kombinaci může vyskytnout nejvýše jednou. 31

39 3.2. VARIACE A KOMBINACE Počet všech kombinací k-té třídy z n prvků: C(k, n) = n! / k!(n k)! [5] Počet všech variací, kombinací Funkce varcount počítá podle definice celkový počet všech variací. Funkce combcount počítá podle definice celkový počet všech variací. Výpočet však neprobíhá přes výpočet faktoriálů tak, že prvně se spočítá n! a poté dojde k dělení jmenovatelem, ale průběžně se krátí zlomek největším společným dělitelem. Kdyby se neprovádělo krácení ihned, už při velikosti n = 13 by došlo k přetečení datového typu long int a výsledky by byly správné jen pro malé vstupní hodnoty n. I tak jsme ale schopni vrátit jen počet možností menší než , což je omezení dané návratovým typem long int. Název funkce: long varcount(int k, int n) long combcount(int k, int n) Parametry: Parametr k je celočíselná hodnota, která určuje velikost k-tice. Hodnota n značí velikost množiny, ze které lze vybírat prvky. Návratová hodnota: Celkový počet variací (kombinací) řádu k z n prvků. Výstup ukázkového příkladu: Celkovy pocet vsech kombinaci radu 3 ze 6 prvku je 20. Celkovy pocet vsech variaci radu 3 ze 6 prvku je 120. Celkovy pocet vsech kombinaci radu 5 ze 10 prvku je 252. Celkovy pocet vsech variaci radu 5 ze 10 prvku je Max. pocet variaci, ktery lze vypocitat: V(10, 13) = Max. pocet kombinaci, ktery lze vypocitat: K(15, 34) =

40 3.2. VARIACE A KOMBINACE #include<stdio.h> #include "comb.h" int main() int k, n; k = 3; n = 6; printf("celkovy pocet vsech kombinaci radu %d ze %d prvku je %ld.\n", k, n, combcount(k,n)); printf("celkovy pocet vsech variaci radu %d ze %d prvku je %ld.\n\n", k, n, varcount(k,n)); k = 5; n = 10; printf("celkovy pocet vsech kombinaci radu %d ze %d prvku je %ld.\n", k, n, combcount(k,n)); printf("celkovy pocet vsech variaci radu %d ze %d prvku je %ld.\n\n", k, n, varcount(k,n)); k = 10; n = 13; printf("max. pocet variaci, ktery lze vypocitat: V(%d, %d) = %ld.\n", k, n, varcount(k,n)); k = 15; n = 34; printf("max. pocet kombinaci, ktery lze vypocitat: K(%d, %d) = %ld.\n", k, n, combcount(k,n)); return 0; Příklad 3.2.1: Příklad použití funkce varcount a combcount Alokace variace, kombinace Variace k-té třídy z n prvků je v paměti uložena jako pole o velikosti n + 2. U kombinací je velikost alokovaného pole pouze k + 2. Před každou k-ticí jsou umístěny charakteristické informace (počet vybíraných prvků a celková velikost vybírané množiny) a u variací jsou ještě navíc za k-ticí umístěny zbylé prvky, které nebyly zahrnuty do variace. K údajům o velikostech lze přistoupit pomocí funkcí sizeofn a sizeofk s určitým prefixem, které vrací velikost n, resp. velikost k. Název funkce: unsigned int *varalloc(int k, int n) unsigned int *varknalloc(int k, int n) 33

41 3.2. VARIACE A KOMBINACE unsigned int *comballoc(int k, int n) unsigned int *combknalloc(int k, int n) Parametry: Parametr k je celočíselná hodnota, která určuje velikost k-tice. Hodnota n značí velikost množiny, ze které lze vybírat prvky. Návratová hodnota: Ukazatel na blok alokované paměti. Typ ukazatele záleží na použité funkci (například varalloc vrací ukazatel na unsigned int, varallocsl zase ukazatel na long int). Není-li z nějakého důvodu možné pamět přidělit, funkce vrací nulový ukazatel Parametry variace, kombinace Parametry variace se rozumí třída variace (k) a velikost množiny prvků (n), ze které vybíráme její podmnožinu. K zisku velikosti k a n slouží funkce varsizeofk (combsizeofk) resp. varsizeofn (combsizeofn). Parametry k-tic jsou nastaveny při alokaci paměti funkcemi varalloc a comballoc, takže v případě volání funkcí na jinak vytvořené pole budou vráceny nesmyslné výsledky. Název funkce: int varsizeofk(unsigned int *var) int varsizeofn(unsigned int *var) int combsizeofk(unsigned int *comb) int combsizeofn(unsigned int *comb) Parametry: Parametr var (comb) je ukazatel na první prvek k-tice. Návratová hodnota: Funkce varsizeofk a combsizeofk vrací velikost k-tice, neboli počet vybíraných prvků z celkového množství n. Funkce varsizeofn a combsizeofn vrací velikost počáteční množiny n, ze které jsou k-tice vybírány. Pokud má k-tice nulovou délku nebo vstupní parametr má hodnotu nulového ukazatele, je vrácena 0. 34

42 3.2. VARIACE A KOMBINACE Inicializace variace, kombinace typu int Kombinace i variace jsou nastaveny tak, že obsahují nejmenších k-prvků, kde výchozí nejmenší prvek je roven nule, při inicializaci od jedné je možné použít funkci varinit1 nebo combinit1. U variací je kromě k-tice inicializováno i nevybraných n-k prvků. Název funkce: void varinit(unsigned int *var) void varkninit(unsigned int *var, int k, int n) void combinit(unsigned int *comb) void combkninit(unsigned int *comb, int k, int n) Parametry: Parametr var (comb) je ukazatel na variaci (kombinaci), která má být inicializována. Návratová hodnota: Žádná Inicializace variace, kombinace typu char Variace (kombinace) obsahující znaky lze nastavit pomocí libovolného znaku. Ten pak bude prvním prvkem k-tice a na ostatních pozicích budou znaky s ordinální hodnotou o jedna větší než má jeho předchůdce. Název funkce: void varinitc(unsigned char *var, char init) void varkninitc(unsigned char *var, char init, int k, int n) void combinitc(unsigned char *comb, char init) void combkninitc(unsigned char *comb, char init, int k, int n) Parametry: Parametr var (comb) je ukazatel na variaci (kombinaci), která má být inicializována. Znaková konstanta init je počátečním prvkem variace (kombinace). 35

43 3.2. VARIACE A KOMBINACE Návratová hodnota: Žádná. #include<stdio.h> #include "comb.h" int main() unsigned char *variace, n = 8, k = 5; variace = varallocc(k,n); printf("znakova variace zacinajici znakem a : \n"); varinitc(variace, a ); varprintc(variace); printf("\nznakova variace zacinajici znakem H : \n"); varinitc(variace, H ); varprintc(variace); varfreec(variace); return 0; Příklad 3.2.2: Příklad použití funkce varinitc Výstup ukázkového příkladu: Znakova variace zacinajici znakem a : [a, b, c, d, e] Znakova variace zacinajici znakem H : [H, I, J, K, L] Tisk variace, kombinace na standardní výstup Zapíše k-tici na standardní výstup (stdout). Variace jsou vypsány v hranatých závorkách, kdežto prvky kombinace jsou uzavřeny ve složených množinových závorkách, aby se zdůraznilo, že nezáleží na pořadí prvků. Název funkce: void varprint(unsigned int *var) void varknprint(unsigned int *var, int k, int n) void combprint(unsigned int *comb) void combknprint(unsigned int *comb, int k, int n) 36

44 Parametry: 3.2. VARIACE A KOMBINACE Parametr var (comb) je ukazatel na k-tici, která má být vytištěna na standardní výstup. Návratová hodnota: Žádná. #include<stdio.h> #include "comb.h" int main() unsigned int *variace, *kombinace, k = 5, n = 8; variace = varalloc(k,n); varinit(variace); printf("\nvypis variace, kde zalezi na poradi prvku: \n"); varprint(variace); kombinace = comballoc(k,n); combinit(kombinace); printf("\nvypis kombinace, kde nezalezi na poradi prvku: \n"); combprint(kombinace); varfree(variace); combfree(kombinace); return 0; Příklad 3.2.3: Příklad použití funkce varprint a combprint Výstup ukázkového příkladu: Vypis variace, kde zalezi na poradi prvku: [0, 1, 2, 3, 4] Vypis kombinace, kde nezalezi na poradi prvku: 0, 1, 2, 3, Tisk variace, kombinace do proudu Funkce umožňující uživateli zápis k-tice do specifikovaného proudu. Mimo k-tice lze do proudu zapsat i textový řetězec, který bude umístěn před ní. 37

45 3.2. VARIACE A KOMBINACE Název funkce: int varfprint(file * stream, char * text, unsigned int *var) int combfprint(file * stream, char * text, unsigned int *comb) int varknfprint(file * stream, char * text, unsigned int *var, int k, int n) int combknfprint(file * stream, char * text, unsigned int *comb, int k, int n) Parametry: První parametr stream je ukazatel na objekt FILE, který určuje proud pro výpis k-tice. Druhý parametr text tvoří uvozovací textový řetězec před výpisem k-tice. Parametr var (comb) je ukazatel na k-tici, která má být vytištěna do určeného proudu. Návratová hodnota: Počet znaků, které se posílají do výstupního proudu, pokud nenastane chyba. V případě výskytu chyby je vrácena hodnota EOF, která má ve většině tradičních implementacích hodnotu -1. #include<stdio.h> #include "comb.h" int main() unsigned int *variace, k = 5, n = 8; FILE * pfile = NULL; pfile = fopen("varfprint_example.txt","w"); variace =varalloc(k,n); varinit(variace); permfprint(pfile,"nejmensi variace: ", variace); permfprint(pfile,"", variace); fclose(pfile); varfree(variace); return 0; Příklad 3.2.4: Příklad použití funkce varfprint 38

46 3.2. VARIACE A KOMBINACE Obsah souboru varfprint_example.txt: nejmensi variace: [0, 1, 2, 3, 4] [0, 1, 2, 3, 4] Generování následující variace Funkce varnext vytvoří na adrese, která byla zadaná jako jediný vstupní parametr, minimálního lexikografického následníka k dané variaci. Opakovanou aplikací funkce lze generovat všechny lexikograficky uspořádané variace. Další variace vznikne transpozicí dvou prvků. Bud jsou oba prohazované prvky součástí k-tice a nacházejí se ve variaci, nebo se jeden z nich vyskytuje v k-tici (menší prvek) a druhý se tam nevyskytuje (větší prvek). Pak je menší prvek z variace odstraněn a naopak větší prvek zařazen mezi vybranou k-tici. Prvky, které nebyly zahrnuty do variace se nachází na indexech k až n 1 (dále jen za variací), kdežto vybrané prvky tvořící k-tici jsou v poli na indexech 0 až k 1 (dále jen ve variaci). Samotnou transpozicí vznikne lexikograficky větší variace, minimálního zvětšení dosáhneme pomocí vzestupného seřazení prvků od pozice nalezeného menšího prvku až do konce. Podrobnější popis seřazení i nalezení transpozice se nachází v sekci popis algoritmu. Název funkce: int varnext(unsigned int *var) int varknnext(unsigned int *var, int k, int n) Parametry: Parametr var je ukazatel na variaci, ze které se bude vytvářet její následník. Návratová hodnota: Pokud existuje lexikograficky větší variace, než která byla zadána jako vstupní parametr, je vrácena hodnota 1, v opačném případě je vrácena hodnota 0. 39

47 3.2. VARIACE A KOMBINACE Zdrojový kód: int varnext(unsigned int *p) int i, pos, k = varsizeofk(p); for( i = k-1; i >= 0 ; i--) /*zvetseni variace o prvek, ktery je za variaci*/ for( pos = k; pos < varsizeofn(p); pos++) if( (p[i] < p[pos]) ) swap_and_sort(p, i, pos); return 1; /* nepodarilo se zvetsit variaci prvkem za variaci */ /* zkousime ji tedy zvetsit prvkem ve variaci */ for( pos = k-1; pos > i; pos--) if( (p[i] < p[pos]) ) swap_and_sort(p, i, pos); return 1; /* zadna dalsi variace neexistuje, je vracena 0 */ return 0; void swap_and_sort(unsigned int *p, int i, int pos) int dm, hm; /* swap */ p[i] ^= p[pos]; p[pos] ^= p[i]; p[i] ^= p[pos]; /* reverse prvku za variaci*/ 40

48 3.2. VARIACE A KOMBINACE hm = varsizeofn(p)-1; for( dm = varsizeofk(p); dm < hm; dm++,hm--) p[hm] ^= p[dm]; p[dm] ^= p[hm]; p[hm] ^= p[dm]; /* reverse vsech prvku od pozice mensiho prvku az do konce */ hm = varsizeofn(p)-1; for( dm = i+1; dm < hm; dm++,hm--) p[hm] ^= p[dm]; p[dm] ^= p[hm]; p[hm] ^= p[dm]; Použité proměnné: Proměnná pos je index prvku pole, jenž má být prohozen s jiným prvkem tak, aby došlo ke zvětšení variace. Pod indexem i hledáme v poli menší prvek než je na pozici pos. Při nalezení této dvojice jsou prvky s indexy i a pos vzájemně prohozeny. V poli pod indexem k je umístěn první prvek, který nebyl vybrán a tedy se ve variaci nevyskytuje. Indexy dm a hm označují počáteční a koncový úsek pole, který bude seřazen. Popis algoritmu: Nejprve se snažíme zvětšit pozici posledního prvku ve variaci záměnou s vetším prvkem za variací. Prvky za variací jsou uspořádány vzestupně, takže porovnávání probíhá postupně od indexu k do n-1. Pokud nelze provést žádnou záměnu, posuneme se o jednu pozici doleva na předposlední prvek ve variaci a ten opět porovnáváme s prvky za variací. Zde už při neexistenci většího prvku za variací zkoušíme provést záměnu i s prvky nacházející se ve variaci za ním (v tomto případě pouze s posledním prvkem) viz následující obrázek. Tento postup opakujeme dokud nenalezneme dva prvky, které lze prohodit. U maximální variace se už žádné takové dva prvky nenacházejí a proto nedojde ke změně a algoritmus končí. 41

49 3.2. VARIACE A KOMBINACE Jakmile nalezneme správnou dvojici prvků, prohodíme je a seřadíme sekvenci za menším z nalezených prvků (prvek na indexu i). K tomu slouží pomocná funkce swap_and_sort, jejíž druhý a třetí parametr obsahuje indexy prohazovaných prvků. Řazení probíhá nadvakrát, nejprve seřadíme prvky za variací tak, aby byla sekvence sestupná místo vzestupná. A poté následuje vzestupné řazení všech prvků od indexů i+1 až n-1. Seřazením jsem dosáhli vytvoření nejmenšího lexikografického následníka původní variace. Časová složitost v nejhorším případě: Časová složitost pomocné funkce swap_and_sort je 1 + (n k)/2 + (n 1)/2. Počet porovnání je (n k + i) kde 0 i k 1. 42

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

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ý

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ý 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ý typem proměnné - ukazatel je tedy adresa společně s

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM CÍLE KAPITOLY Využívat pokročilé možnosti formátování, jako je podmíněné formátování, používat vlastní formát čísel a umět pracovat s listy. Používat

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

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

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

Čísla a číselné soustavy.

Čísla a číselné soustavy. Čísla a číselné soustavy. Polyadické soustavy. Převody mezi soustavami. Reprezentace čísel. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK.

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4 Uložení dat v počítači Data = užitečné, zpracovávané informace Kódování (formát) dat = způsob uložení v počítači (nutno vše převést na čísla ve dvojkové soustavě) Příklady kódování dat Text každému znaku

Více

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

Dotazy tvorba nových polí (vypočítané pole)

Dotazy tvorba nových polí (vypočítané pole) Téma 2.4 Dotazy tvorba nových polí (vypočítané pole) Pomocí dotazu lze také vytvářet nová pole, která mají vazbu na již existující pole v databázi. Vznikne tedy nový sloupec, který se počítá podle vzorce.

Více

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru Čtení dat ze souboru FILE *f = NULL; char str[10] = ""; float a = 0.0, b = 0.0; Soubor otevíráme v režimu pro čtení "r" f = fopen("/home/martinp/testdata/test1.txt",

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly. Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?

Více

Vstup a výstup datové proudy v C

Vstup a výstup datové proudy v C Vstup a výstup datové proudy v C Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 24. října 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Vstup a výstup 24. října 2011 1 / 37 Přehled, rozdělení

Více

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

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

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

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

Už známe datové typy pro representaci celých čísel i typy pro representaci

Už známe datové typy pro representaci celých čísel i typy pro representaci Dlouhá čísla Tomáš Holan, dlouha.txt, Verse: 19. února 2006. Už známe datové typy pro representaci celých čísel i typy pro representaci desetinných čísel. Co ale dělat, když nám žádný z dostupných datových

Více

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování. Delphi lekce 6 Minimum z Object Pascalu Vrátíme se ještě k základům Object Pascalu. Struktura programu Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově

Více

DATABÁZE MS ACCESS 2010

DATABÁZE MS ACCESS 2010 DATABÁZE MS ACCESS 2010 KAPITOLA 5 PRAKTICKÁ ČÁST TABULKY POPIS PROSTŘEDÍ Spuštění MS Access nadefinovat název databáze a cestu k uložení databáze POPIS PROSTŘEDÍ Nahoře záložky: Soubor (k uložení souboru,

Více

map, multimap - Asociativní pole v C++.

map, multimap - Asociativní pole v C++. map, multimap - Asociativní pole v C++. Jedná se o asociativní pole. V asociativním poli jsou uloženy hodnoty ve tvaru (klíč,hodnota), kde klíč je vlastně "index" prvku. Klíčem může být libovolný objekt,

Více

Prezentace a vysvětlení programového prostředí NXC

Prezentace a vysvětlení programového prostředí NXC Úvod Další jazyk, který je možno použít pro programování NXT kostky je NXC Not exatly C Na rozdíl od jazyku NXT-G, kde jsme vytvářeli program pomocí grafických prvků přesněji řečeno pomocí programovacích

Více

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Datové typy a struktury

Datové typy a struktury atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro

Více

Algoritmy I, složitost

Algoritmy I, složitost A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??

Více

Programy na PODMÍNĚNÝ příkaz IF a CASE

Programy na PODMÍNĚNÝ příkaz IF a CASE Vstupy a výstupy budou vždy upraveny tak, aby bylo zřejmé, co zadáváme a co se zobrazuje. Není-li určeno, zadáváme přirozená čísla. Je-li to možné, používej generátor náhodných čísel vysvětli, co a jak

Více

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro: 21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c)

Více

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

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti

Více

PHP tutoriál (základy PHP snadno a rychle)

PHP tutoriál (základy PHP snadno a rychle) PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve

Více

Architektury počítačů a procesorů

Architektury počítačů a procesorů Kapitola 3 Architektury počítačů a procesorů 3.1 Von Neumannova (a harvardská) architektura Von Neumann 1. počítač se skládá z funkčních jednotek - paměť, řadič, aritmetická jednotka, vstupní a výstupní

Více

1. Téma 03 - Rozhodování

1. Téma 03 - Rozhodování 1. Téma 03 - Rozhodování Cíl látky Seznámit se a prakticky si vyzkoušet zápis rozhodování v jazyce Java 1.1. Úvod Jednou z nejčastěji používanou konstrukcí při programování je rozhodování. Právě této problematice

Více

Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz. Algebra Struktury s jednou operací

Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz. Algebra Struktury s jednou operací Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz Algebra Struktury s jednou operací Teoretická informatika 2 Proč zavádíme algebru hledáme nástroj pro popis objektů reálného světa (zejména

Více

1. Průběh funkce. 1. Nejjednodušší řešení

1. Průběh funkce. 1. Nejjednodušší řešení 1. Průběh funkce K zobrazení průběhu analytické funkce jedné proměnné potřebujeme sloupec dat nezávisle proměnné x (argumentu) a sloupec dat s funkcí argumentu y = f(x) vytvořený obvykle pomocí vzorce.

Více

v aritmetické jednotce počíta

v aritmetické jednotce počíta v aritmetické jednotce počíta tače (Opakování) Dvojková, osmičková a šestnáctková soustava () Osmičková nebo šestnáctková soustava se používá ke snadnému zápisu binárních čísel. 2 A 3 Doplněné nuly B Číslo

Více

MATURITNÍ TÉMATA Z MATEMATIKY

MATURITNÍ TÉMATA Z MATEMATIKY MATURITNÍ TÉMATA Z MATEMATIKY 1. Základní poznatky z logiky a teorie množin Pojem konstanty a proměnné. Obor proměnné. Pojem výroku a jeho pravdivostní hodnota. Operace s výroky, složené výroky, logické

Více

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno 12 Délka výpočtu algoritmu Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno neméně důležité hledisko k posouzení vhodnosti algoritmu k řešení zadané úlohy. Jedná se o čas,

Více

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto: 20. Programovací techniky: Abstraktní datový typ, jeho specifikace a implementace. Datový typ zásobník, fronta, tabulka, strom, seznam. Základní algoritmy řazení a vyhledávání. Složitost algoritmů. Abstraktní

Více

Excel tabulkový procesor

Excel tabulkový procesor Pozice aktivní buňky Excel tabulkový procesor Označená aktivní buňka Řádek vzorců zobrazuje úplný a skutečný obsah buňky Typ buňky řetězec, číslo, vzorec, datum Oprava obsahu buňky F2 nebo v řádku vzorců,

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

Kód. Proměnné. #include <iostream> using namespace std; int main(void) { cout << "Hello world!" << endl; cin.get(); return 0; }

Kód. Proměnné. #include <iostream> using namespace std; int main(void) { cout << Hello world! << endl; cin.get(); return 0; } Jazyk C++ Jazyk C++ je nástupcem jazyka C. C++ obsahuje skoro celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že (skoro) každý platný program v C je také platným

Více

45 Plánovací kalendář

45 Plánovací kalendář 45 Plánovací kalendář Modul Správa majetku slouží ke tvorbě obecných ročních plánů činností organizace. V rámci plánu je třeba definovat oblasti činností, tj. oblasti, ve kterých je možné plánovat. Každá

Více

MQL4 COURSE. By Coders guru www.forex-tsd.com. -4 Operace & Výrazy

MQL4 COURSE. By Coders guru www.forex-tsd.com. -4 Operace & Výrazy MQL4 COURSE By Coders guru www.forex-tsd.com -4 Operace & Výrazy Vítejte ve čtvrté lekci mého kurzu MQL4. Předchozí lekce Datové Typy prezentovaly mnoho nových konceptů ; Doufám, že jste všemu porozuměli,

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Vstupní požadavky, doporučení a metodické pokyny

Vstupní požadavky, doporučení a metodické pokyny Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem

Více

Úvod do teorie dělitelnosti

Úvod do teorie dělitelnosti Úvod do teorie dělitelnosti V předchozích hodinách matematiky jste se seznámili s desítkovou soustavou. Umíte v ní zapisovat celá i desetinná čísla a provádět zpaměti i písemně základní aritmetické operace

Více

EXCELentní tipy a triky pro mírně pokročilé. Martina Litschmannová

EXCELentní tipy a triky pro mírně pokročilé. Martina Litschmannová EXCELentní tipy a triky pro mírně pokročilé Martina Litschmannová Obsah semináře definování názvu dynamicky měněné oblasti, kontingenční tabulky úvod, kontingenční tabulky násobné oblasti sloučení, převod

Více

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Požadavky k opravným zkouškám z matematiky školní rok 2014-2015

Požadavky k opravným zkouškám z matematiky školní rok 2014-2015 Požadavky k opravným zkouškám z matematiky školní rok 2014-2015 1. ročník (první pololetí, druhé pololetí) 1) Množiny. Číselné obory N, Z, Q, I, R. 2) Absolutní hodnota reálného čísla, intervaly. 3) Procenta,

Více

RELAČNÍ DATABÁZE ACCESS

RELAČNÍ DATABÁZE ACCESS RELAČNÍ DATABÁZE ACCESS 1. Úvod... 2 2. Základní pojmy... 3 3. Vytvoření databáze... 5 4. Základní objekty databáze... 6 5. Návrhové zobrazení tabulky... 7 6. Vytváření tabulek... 7 6.1. Vytvoření tabulky

Více

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý Autor: Mgr. Dana Kaprálová VZORCE A VÝPOČTY Datum (období) tvorby: září, říjen 2013 Ročník: sedmý Vzdělávací oblast: Informatika a výpočetní technika 1 Anotace: Žáci se seznámí se základní obsluhou tabulkového

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Data a datové typy 1 / 28 Obsah přednášky Základní datové typy Celá čísla Reálná čísla Znaky 2 / 28 Organizace dat Výběr vhodné datvé struktry různá paměťová náročnost různá

Více

1 Mnohočleny a algebraické rovnice

1 Mnohočleny a algebraické rovnice 1 Mnohočleny a algebraické rovnice 1.1 Pojem mnohočlenu (polynomu) Připomeňme, že výrazům typu a 2 x 2 + a 1 x + a 0 říkáme kvadratický trojčlen, když a 2 0. Číslům a 0, a 1, a 2 říkáme koeficienty a písmenem

Více

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů). Strojový kód k d a asembler procesoru MIPS Použit ití simulátoru SPIM K.D. - cvičení ÚPA 1 MIPS - prostředí 32 ks 32bitových registrů ( adresa registru = 5 bitů). Registr $0 je zero čte se jako 0x0, zápis

Více

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

Lekce 19 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

Více

3. Celá čísla. 3.1. Vymezení pojmu celé číslo. 3.2. Zobrazení celého čísla na číselné ose

3. Celá čísla. 3.1. Vymezení pojmu celé číslo. 3.2. Zobrazení celého čísla na číselné ose 3. Celá čísla 6. ročník 3. Celá čísla 3.1. Vymezení pojmu celé číslo Ve své dosavadní praxi jste se setkávali pouze s přirozenými čísly. Tato čísla určovala konkrétní počet (6 jablek, 7 kilogramů jablek,

Více

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <-> Znaky každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak číslo) kódování jiný příklad kódování existuje mnoho kódů pojmy: morseova abeceda problémy o znaková sada které znaky

Více

Úvod do programování. Lekce 5

Úvod do programování. Lekce 5 I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í Inovace a zvýšení atraktivity studia optiky reg. č.: CZ.1.07/2.2.00/07.0289 Úvod do programování Lekce 5 Tento projekt je spolufinancován Evropským

Více

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace. Popis ovládání 1. Úvod Tento popis má za úkol seznámit uživatele se základními principy ovládání aplikace. Ovládání je možné pomocí myši, ale všechny činnosti jsou dosažitelné také pomocí klávesnice. 2.

Více

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

Seznámení s datovými typy a operátory

Seznámení s datovými typy a operátory Knihovny tříd Javy KAPITOLA 2 Seznámení s datovými typy a operátory Klíčové dovednosti a pojmy Seznámení s primitivními typy jazyka Java. Používání literálů. Inicializace proměnných. Seznámení s pravidly

Více

STŘEDOŠKOLSKÁ MATEMATIKA

STŘEDOŠKOLSKÁ MATEMATIKA STŘEDOŠKOLSKÁ MATEMATIKA MOCNINY, ODMOCNINY, ALGEBRAICKÉ VÝRAZY VŠB Technická univerzita Ostrava Ekonomická fakulta 006 Mocniny, odmocniny, algebraické výrazy http://moodle.vsb.cz/ 1 OBSAH 1 Informace

Více

Dělitelnost čísel, nejmenší společný násobek, největší společný dělitel

Dělitelnost čísel, nejmenší společný násobek, největší společný dělitel Variace 1 Dělitelnost čísel, nejmenší společný násobek, největší společný dělitel Autor: Mgr. Jaromír JUŘEK Kopírování a jakékoliv další využití výukového materiálu je povoleno pouze s uvedením odkazu

Více

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

Standardní vstup a výstup

Standardní vstup a výstup Standardní vstup a výstup Trochu teorie S pojmy standardní vstup/výstup (I/O, input/output) jste se již pravděpodobně setkali, pokud ale ne, zde je krátké vysvětlení. Standardní vstup a výstup jsou vlastně

Více

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

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0; Iterátory v C++. Iterátor v C++ je vlastně taková obdoba ukazatelů pro kontejnery. Dříve, než se dostaneme k bližšímu vysvětlení pojmu iterátor, ukážeme si jednoduchý příklad, jak pracovat s obyčejným

Více

Rozšíření ksh vůči sh při práci s proměnnými

Rozšíření ksh vůči sh při práci s proměnnými Rozšíření ksh vůči sh při práci s proměnnými (X36UNX, Jan Skalický, 2006) Pole homogenní lineární struktura implicitn ě s číselným rozsahem index ů 0...1023 (někde 4095) implicitn ě řetězcov ě orientovaná

Více

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika FUNKCE 3 Autor: Mgr. Dana Kaprálová Datum (období) tvorby: září, říjen 2013 Ročník: sedmý Vzdělávací oblast: Informatika a výpočetní technika 1 Anotace: Žáci se seznámí se základní obsluhou tabulkového

Více

Nemocnice. Prvotní analýza a plán projektu

Nemocnice. Prvotní analýza a plán projektu Nemocnice Projekt do předmětu AIS Prvotní analýza a plán projektu Lukáš Pohl, xpohll00, xkosti03 Jan Novák, xnovak79 2009/2010 1 Neformální specifikace FN potřebuje informační systém, který bude obsahovat

Více

Numerace. Numerace je nauka, jejímž cílem je osvojení pojmu přirozené číslo.

Numerace. Numerace je nauka, jejímž cílem je osvojení pojmu přirozené číslo. Numerace Numerace je nauka, jejímž cílem je osvojení pojmu přirozené číslo. Numerace má tyto dílčí úkoly: 1) Naučit žáky číst číslice a správně vyslovovat názvy čísel. 2) Naučit žáky zapisovat čísla v

Více

Obsah. Úvod 15 Základní možnosti Excelu 17

Obsah. Úvod 15 Základní možnosti Excelu 17 Obsah Úvod 15 Základní možnosti Excelu 17 1 Jak spouštět Excel z úvodní obrazovky Windows 8 17 2 Jak spouštět Excel z hlavního panelu 17 3 Jak otevřít nový dokument podle šablony 18 4 Jak zařídit, aby

Více

DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS. (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat)

DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS. (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat) DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat) DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 62 Databáze a systémy pro uchování

Více

46 Objekty a atributy

46 Objekty a atributy 46 Objekty a atributy Modul Objekty a atributy je určen pro pokročilé uživatele zodpovědné za mapování přístupnosti architektonických bariér. Modul umožňuje stanovit jaké objekty budou mapovány, jaké skutečnosti

Více

1/2. pro začátečníky. Ing. Zbyněk Sušil, MSc.

1/2. pro začátečníky. Ing. Zbyněk Sušil, MSc. 1/2 pro začátečníky Ing. Zbyněk Sušil, MSc. Průběh lekce Základní informace Seznamy Formátování buněk Operace s řádky a sloupci Příprava tisku Matematické operace Vzorce Absolutní a relativní adresování

Více

ABSTRAKTNÍ DATOVÉ TYPY

ABSTRAKTNÍ DATOVÉ TYPY Jurdič Radim ABSTRAKTNÍ DATOVÉ TYPY Veškeré hodnoty, s nimiž v programech pracujeme, můžeme rozdělit do několika skupin zvaných datové typy. Každý datový typ představuje množinu hodnot, nad kterými můžeme

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

CZ 1.07/1.1.32/02.0006

CZ 1.07/1.1.32/02.0006 PO ŠKOLE DO ŠKOLY CZ 1.07/1.1.32/02.0006 Číslo projektu: CZ.1.07/1.1.32/02.0006 Název projektu: Po škole do školy Příjemce grantu: Gymnázium, Kladno Název výstupu: Prohlubující semináře Matematika (MI

Více

Kolekce, cyklus foreach

Kolekce, cyklus foreach Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro

Více

Dokumentace k projektu pro předměty IZP a IUS

Dokumentace k projektu pro předměty IZP a IUS Dokumentace k projektu pro předměty IZP a IUS Rozdíl kalendářních dat projekt č. 2 27. září 2007 Autor: Ing. David Martinek, martinek@fit.vutbr.cz Ústav Inteligentních Systémů Fakulta Informačních Technologií

Více

Microsoft Excel kopírování vzorců, adresování, podmíněný formát. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

Microsoft Excel kopírování vzorců, adresování, podmíněný formát. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie Microsoft Excel kopírování vzorců, adresování, podmíněný formát Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie Kopírování vzorců v mnoha případech je třeba provést stejný výpočet

Více

Hierarchický databázový model

Hierarchický databázový model 12. Základy relačních databází Když před desítkami let doktor E. F. Codd zavedl pojem relační databáze, pohlíželo se na tabulky jako na relace, se kterými se daly provádět různé operace. Z matematického

Více

Excel - pokračování. Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu

Excel - pokračování. Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu Excel - pokračování Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu Př. Analýza prodeje CD základní jednoduché vzorce karta Domů Př. Skoky do dálky - funkce

Více

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávání v informačních a komunikačních technologií

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávání v informačních a komunikačních technologií VY_32_INOVACE_33_05 Škola Střední průmyslová škola Zlín Název projektu, reg. č. Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávací oblast Vzdělávání v informačních a komunikačních

Více

Způsoby realizace této funkce:

Způsoby realizace této funkce: KOMBINAČNÍ LOGICKÉ OBVODY U těchto obvodů je výstup určen jen výhradně kombinací vstupních veličin. Hodnoty výstupních veličin nezávisejí na předcházejícím stavu logického obvodu, což znamená, že kombinační

Více

15. KubickÈ rovnice a rovnice vyööìho stupnï

15. KubickÈ rovnice a rovnice vyööìho stupnï 15. KubickÈ rovnice a rovnice vyööìho stupnï Čas od času je možné slyšet v pořadech o počasí jména jako Andrew, Mitch, El Ňiňo. otom následuje zpráva o katastrofálních vichřicích, uragánech a jiných mimořádných

Více

Pravděpodobnost v závislosti na proměnné x je zde modelován pomocí logistického modelu. exp x. x x x. log 1

Pravděpodobnost v závislosti na proměnné x je zde modelován pomocí logistického modelu. exp x. x x x. log 1 Logistická regrese Menu: QCExpert Regrese Logistická Modul Logistická regrese umožňuje analýzu dat, kdy odezva je binární, nebo frekvenční veličina vyjádřená hodnotami 0 nebo 1, případně poměry v intervalu

Více

ZŠ ÚnO, Bratří Čapků 1332

ZŠ ÚnO, Bratří Čapků 1332 Úvodní obrazovka Menu (vlevo nahoře) Návrat na hlavní stránku Obsah Výsledky Poznámky Záložky edunet Konec Matematika 1 (pro 12-16 let) LangMaster Obsah (střední část) výběr tématu - dvojklikem v seznamu

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

Nechť M je množina. Zobrazení z M M do M se nazývá (binární) operace

Nechť M je množina. Zobrazení z M M do M se nazývá (binární) operace Kapitola 2 Algebraické struktury Řada algebraických objektů má podobu množiny s nějakou dodatečnou strukturou. Například vektorový prostor je množina vektorů, ty však nejsou jeden jako druhý : jeden z

Více