Přednáška 11 Jiří Šebesta

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Programování 2 Cvičení 5.
LOV, Listbox, Poplist a Combobox v Oracle Forms LOV – seznam hodnot, které se zobrazí po stisku klávesy Enter v textovém poli. LOV – seznam hodnot, které.
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
10. Dynamické datové struktury
Spojové struktury Spojová struktura ( linked structure ):
Pole, ukazatele a odkazy
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Programování v C++ Cvičení.
Algoritmizace a programování
Datové struktury. 2 Co je datová struktura v C datový typ složený z jiných datových typů nejjednodušší datová struktura je pole. všechny jeho prvky jsou.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Algoritmy vyhledávání a řazení
Současný svět Projekt č. CZ /3. 1
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Další abstraktní datové typy
Počítače a programování 1
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
Datové typy a struktury
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Spojové struktury BI-PA1 Programování a algoritmizace 1, ZS
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Realloc a qsort examples BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
Real time jádro operačního systému Lukáš Hamáček.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
OSNOVA: a) Algoritmy třídění b) Třídění dynamických záznamů Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST.
Pokročilé programování v C++ (část B)
Příklady v jazyku C – část 8. Napište program, který inicializuje 2-rozměrné pole uživatele (5 řádků, 2 sloupce) a naplní ho hodnotami (první sloupec.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
OSNOVA: a)Struktury b)Unie c)Výčtový typ d)Dynamické proměnné – úvod e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
Práce se soubory a řetězci Přednáška č. 9. Práce se soubory v C (1)  Knihovna #include  Knihovna #include  Ukazatel FILE *stream;  Otevření souboru.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Počítače a programování 2
Y36PJC Programování v jazyce C/C++
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Programovací jazyk C++
Y36PJC Programování v jazyce C/C++
Vzorové řešení zápočtového testu
Programování 2. hodina RNDr. Jan Lánský, Ph.D.
Programování v jazyce C++
Abstraktní datové typy
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
C# přehled vlastností.
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
Algoritmizace a datové struktury (14ASD)
Funkce s proměnným počtem parametrů
Transkript prezentace:

Přednáška 11 Jiří Šebesta Počítače a programování 1 Přednáška 11 Jiří Šebesta

TÉMA – práce s dynamickými proměnnými Vazby dynamických proměnných Dynamická databáze - příklad

Vazby dynamických proměnných (1/13) Přístup s polem ukazatelů Alokováno statické pole ukazatelů na dynamic-kou proměnnou (strukturu) – max. počet struktur je předem pevně definován

Vazby dynamických proměnných (2/13) Přístup s využitím lineárního seznamu Alokován jen první statický ukazatel na dynamickou strukturu. Každá struktura však má položku ukazatele na následující dyn. strukturu – max. počet je omezen jen kapacitou paměti.

Vazby dynamických proměnných (3/13) Přístup s využitím lineárního seznamu Pro jednodušší implementaci dva statické ukazatele na první a poslední dynamickou strukturu.

Vazby dynamických proměnných (4/13) Lineární seznam příklad – vkládání neznámého počtu závodníků (skokanů do dálky) do seznamu včetně dosaženého výsledku (délky skoku) Struktura a globální proměnné typedef struct comp // competitor record { char name[10]; int jump; struct comp *next; }t_comp; t_comp *first; // ptr to the first comp. - global t_comp *last; // ptr to the last comp. - global int cnt = 0; // the number of recorded comp. - global comp je pojmenování struktury t_comp je pojmenování typu

Vazby dynamických proměnných (5/13) Funkce pro přidání závodníka a jeho skoku do lineárního seznamu void add(char *cname, int cjump) // add comp. record { t_comp *ccomp; // ptr to a comp ccomp = (t_comp*)malloc(sizeof(t_comp)); strcpy(ccomp->name, cname); // record filling ccomp->jump = cjump; cnt++; // the number of records plus one if(cnt == 1) { first = ccomp; // add the first record last = ccomp; } else { last->next = ccomp; // add next record

Vazby dynamických proměnných (6/13) Výpis seznamu závodníků s výkony v pořadí podle zadávání (od prvního záznamu k poslednímu) void show(void) { t_comp *scomp; int acnt=cnt; scomp = first; do printf("%s: %d cm\n", scomp->name, scomp->jump); scomp=scomp->next; } while (--acnt > 0);

Vazby dynamických proměnných (7/13) main() funkce programu s ovládáním int main(void) { char cmd, aname[10]; int ajump; printf("\nA: Add, S: Show, Q: Quit\n"); scanf("%c", &cmd); fflush(stdin); while(!(cmd == 'Q' || cmd == 'q')) if(cmd=='A' || cmd=='a') printf("\nName: "); scanf("%s", &aname); fflush(stdin); printf("\nJump [cm]: "); scanf("%d", &ajump); fflush(stdin); add(aname, ajump); }

Vazby dynamických proměnných (8/13) if(cmd=='S' || cmd=='s') show(); printf("\nA: Add, S: Show, Q: Quit"); scanf("%c", &cmd); fflush(stdin); } return 0; Příklad: Ex71.c

Vazby dynamických proměnných (9/13) Doplnění předchozího příkladu o nalezení prvního závodníka s nejdelším skokem Doplnění funkce add() void add(char *cname, int cjump) // add comp. record { // the same as in the example 71 if(cnt == 1) { first = ccomp; // add the first record last = ccomp; } else { last->next = ccomp; // add next record last->next = NULL; // last points to null address

Vazby dynamických proměnných (10/13) void results(void) { t_comp *scomp, *gold; int mjump = first->jump; gold = first; scomp = first->next; do if(scomp->jump > mjump) gold = scomp; mjump = gold->jump; } scomp = scomp->next; while(scomp != NULL); printf("\nWin %s (%d cm)\n", gold->name, gold->jump); Příklad: Ex72.c

Vazby dynamických proměnných (11/13) Přístup s využitím zásobníku Jeden statický ukazatel na vrchol zásobníku – systém LIFO (last in – first out).

Vazby dynamických proměnných (12/13) Přístup s využitím stromu

Vazby dynamických proměnných (13/13) Složitější vazba struktur - rodokmen strcpy(me->p_sists[0]-> Name, ”Jana”); me->p_sists[0]-> p_mother = me-> p_mother; //uncles: me->p_mother-> p_brths[x] me->p_father-> p_brths[x]

Dynamická databáze - příklad (1/5) Zadání: Vytvořte program, který bude dynamicky generovat databázi závodníků - skokanů do dálky. Každá struktura bude obsahovat jméno, zemi závodníka, dosažený skok a ukazatel na dalšího závodníka. Napište funkci pro přidání závodníka včetně skoku a funkci pro zobrazení závodníků s jejich výkony. Přidávání modifikujte tak, že do lineárního seznamu budou závodníci vkládáni podle dosaženého skoku (seznam bude vždy setříděn podle dálky skoku) Všechny funkce musejí být nezávislé na platformě (fungují pro konzolu i Windows)

Dynamická databáze - příklad (2/5) Lineární uspořádaný seznam

Dynamická databáze - příklad (3/5) Lineární seznam příklad – vkládání neznámého počtu závodníků (skokanů do dálky) do seznamu včetně dosaženého výsledku (délky skoku) Struktura a globální proměnné typedef struct t_comp // competitor record { char name[10]; char country[10]; int jump; t_comp *next; }; t_comp *first; // ptr to the first comp. - global t_comp *last; // ptr to the last comp. - global int count = 0; // the number of recorded comp. - global

Dynamická databáze - příklad (4/5) Upravená funkce pro přidání závodníka a jeho skoku do lineárního seznamu s automatickým tříděním podle dálky skoku void add(char *cname, char *ccountry, int cjump) { t_comp *ccomp, *prevcomp, *nextcomp; ... Společné doprogramování funkce

Dynamická databáze - příklad (5/5) Uvolňování záznamů z paměti Vyřešená aplikace bude na webu k dispozici od 5.12. jako Ex73sol.c Příklad: Ex73.c

TÉMA NÁSLEDUJÍCÍ PŘEDNÁŠKY Pokročilé algoritmy v C DĚKUJI ZA POZORNOST