Ukazatele #1, struktury
|
|
- Richard Navrátil
- před 6 lety
- Počet zobrazení:
Transkript
1 Ukazatele #1, struktury BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České vysoké učení technické v Praze xvagner@fit.cvut.cz, vogeljos@fit.cvut.cz 14., 23. a 24. listopadu 2017
2 Přehled Datové typy ukazatel. Ukazatele reference, dereference. Struktura jako datový typ. Pamět ová reprezentace struktury. Pole struktur, ukazatele na struktury. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 2/35
3 Ukazatele motivace Chceme pracovat s daty uvnitř nějaké funkce. Data si do funkce můžeme předat zkopírováním: void foo ( int x )... int data =...; foo ( data ); funkce má k dispozici vlastní proměnnou x, tato proměnná obsahuje kopii hodnoty z proměnné data, proměnná data se jednorázově zkopíruje do x, od tohoto okamžiku nemají proměnné nic společného, funkce foo může hodnotu proměnné x zničit (přepsat), tím nezmění data. Kopírování proměnné nemusí být vždy výhodné. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 3/35
4 Ukazatele motivace Kdy je kopírování nevýhodné: kopírování může trvat dlouho, pokud je proměnná velká. Kopírování proměnné typu int je velmi rychlé, režie kopírování by se uplatnila pro proměnné od velikosti řádově stovek bajtů, změny v proměnné x uvnitř foo nejsou vidět ven, toto požadujeme např. u výstupních parametrů. Místo kopie hodnoty proměnné bychom mohli funkci předat informaci o umístění proměnné, se kterou má pracovat. Informace o umístění proměnné je její adresa v paměti. void foo ( int * x )... int data =...; foo ( &data ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 4/35
5 Ukazatele Ukazatele abstrakce adres ve vyšších programovacích jazycích. Hodnota ukazatele na typ T reprezentuje adresu v paměti, kde je hodnota typu T uložena. Deklarace ukazatele: T * ptr Proměnná ptr reprezentuje adresu. Stejně jako u jiných (lokálních) proměnných, je počáteční hodnota nedefinována. Proměnná může být inicializována adresou: T x; /* proměnná typu T, kdekoli deklarovaná */... T * p = & x; /* alternativně mimo deklaraci: */ p = & x; Unární prefixový operátor & se nazývá reference (odkaz). Výsledkem operace &x je ukazatel (adresa) proměnné x. Ukazatel je datového typu T* ukazatel na hodnoty typu T. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 5/35
6 Ukazatele reference Vlastní adresa je celé číslo udávající pozici proměnné v paměti (počítáno v bajtech od počátku pamět ového prostoru). Zjednodušeně pokud tuto kombinaci bitů pošle CPU na adresní sběrnici, pamět ový čip zpřístupní odpovídající obsah. Skutečné hodnoty adres jsou jen málokdy důležité: adresy proměnných jsou přiděleny kompilátorem, adresy proměnných se mohou lišit, závisí na kompilátoru, OS, nebo na okamžitém využití paměti. Je obvyklé označovat adresy šipkou vedoucí od ukazatele k referencované proměnné. int x = 10, *iptr = &x; char c = a, *cptr; cptr = &c; x iptr c cptr 10 'a' M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 6/35
7 Ukazatele dereference Pro přístup k proměnné, jež je referencována ukazatelem, musí být použit operátor dereference *. Když ptr je ukazatel typu T*, pak výraz *ptr označuje hodnotu referencovanou tímto ukazatelem ptr. int x, *iptr = &x; char c, *cptr; cptr = &c; *iptr = 20; *cptr = Z ; x iptr c cptr 20 'Z' M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 7/35
8 Ukazatele kompatibilita Ukazatele stejného typu je možno přiřazovat: int x, *p1 = &x, *p2; p2 = p1; /* p1 a p2 nyní referencují proměnnou - x */ *p2 = 10; /* x má nyní hodnotu 10 */ Když přiřazujeme adresy různých typů (např.. T1* a T2*), kompilátor hlásí varovnou zprávu, ale kód je vytvořen. Výsledek dereferencování takové adresy je podivný (špatná interpretace hodnoty, data přepsána,... ). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 8/35
9 Ukazatele kompatibilita int x, *iptr; char c, *cptr; iptr = &c; /*!!! */ cptr = &x; /*!!! */ *iptr = 0; /* Čtyři bajty od adresy proměnné c jsou naplněny nulami. Možná je nějaká proměnná přepsána (třeba zrovna adresa v cptr). */ *cptr = 0; /* První bajt proměnné x je vynulován. Zbylé tři bajty jsou nezměněny. Hodnota proměnné x nemusí být 0. */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 9/35
10 Ukazatele poznámka k pořadí bajtů v paměti Jak je uložena např. hodnota x = = 0x ? Hodnota (32 bitů) bude zaujímat 4 bajty paměti: little-endian (Intel): 0x78 0x56 0x34 0x12 big-endian (Motorola, SPARC): 0x12 0x34 0x56 0x78 bi-endian (can switch in boot time): ARM, PowerPC, MIPS, IA64 Efekt posledního příkladu (*cptr=0;) velmi závisí na architektuře procesoru. Vynulován bude nejnižší nebo nejvyšší bajt proměnné x. Tedy hodnota se změní bud na 0x = , nebo na 0x = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 10/35
11 Ukazatele ukazatel NULL Ukazatel NULL speciální hodnota adresy, která nic nereferencuje. Hodnota NULL ukazatele je používána pro signalizaci speciálních případů (např. operace selhala). V jazyce C je hodnota NULL definována: #define NULL ((void*)0) Pokus o dereferenci ukazatele NULL vede k pádu programu: int main(void) { int *p = NULL; *p = 10; /* zde spadne */ printf ( "Hello world!\n" ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 11/35
12 Ukazatele (de)motivace Za obrázek děkujeme Randallu Munroe, XKCD comics #138 (xkcd.com). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 12/35
13 Ukazatele (de)motivace Za obrázek děkujeme Randallu Munroe, XKCD comics #138 (xkcd.com). Pointers will be back next week! M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 12/35
14 Struktury motivace Problém: přečíst jméno studenta, příjmení studenta a jeho průměrný prospěch, vstupní data jsou na std. vstupu, vypsat studenta s nejlepším průměrem. Příklad: John Smith 2.45 George Peterson 1.32 Peter O Brien 1.93 Michael Corleone 2.21 Výsledek: George Peterson 1.32 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 13/35
15 Struktury motivace Nástin řešení: inicializace proměnné(ých) nejlepší_student while ( další student přečten ) porovnání do ted nejlepšího průměru s průměrem právě přečteného if je lepší then uložení jména, příjmení a průměru do nejlepší_student výpis nejlepšího_studenta M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 14/35
16 Struktury motivace #define NAME_MAX 32 int main ( void ) { char curname[name_max], cursurname[name_max]; char bestname[name_max], bestsurname[name_max]; double bestavg = 5, curavg; while ( scanf ( "%31s%31s%lf", curname, cursurname, &curavg ) == 3 ) { printf ( "%s %s: %f\n", curname, cursurname, curavg ); if ( curavg < bestavg ) { /* ok, přiřadit */ bestavg = curavg; strncpy ( bestname, curname, sizeof(bestname) ); strncpy ( bestsurname, cursurname, sizeof(bestsurname) ); printf ( "Nejlepsi prumer:\n" ); printf ( "%s %s: %f\n", bestname, bestsurname, bestavg ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 15/35
17 Struktury Nevýhody řešení: příliš mnoho proměnných, související proměnné jsou jen slabě propojeny (podobné pojmenování, případně stejný index v poĺıch), když přidáme novou informaci (třeba datum narození), bude třeba program modifikovat na mnoha místech. Lepší řešení použití struktury. Struktura je složený datový typ, který spojuje související informace (proměnné) do jedné větší jednotky. Struktury lze přirovnat k funkcím: funkce spojují související akce (výpočty) do jedné větší jednotky, struktury spojují související data (proměnné) do jedné větší jednotky. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 16/35
18 Struktury #define NAME_MAX 32 struct TStudent { /* jméno datového typu */ char name[name_max]; /* složky (položky struktury) */ char surname[name_max]; double avg; ; int main ( void ) { struct TStudent cur, best; best. avg = 5; /* přístup ke složce */... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 17/35
19 Struktury struct TStudent {... ; int main ( void ) { struct TStudent cur, best; best.avg = 5; while ( scanf ( "%31s%31s%lf", cur.name, cur.surname, &cur.avg ) == 3 ) { printf ( "%s %s: %f\n", cur.name, cur.surname, cur.avg ); if ( cur.avg < best.avg ) best = cur; /* ok, přiřadit */ printf ( "Nejlepsi prumer:\n" ); printf ( "%s %s: %f\n", best.name, best.surname, best.avg ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 18/35
20 Struktury Jméno typu struct TStudent je poněkud zdlouhavé. Je možné používat kratší jméno, když definici struktury modifikujeme: typedef struct TStudent { /* typedef deklaruje */ char name[name_max]; /* nové jméno typu */ char surname[name_max]; double avg; TSTUDENT; /* TSTUDENT je nové, jednoduché jméno typu struct TStudent */ int main ( void ) { TSTUDENT cur, best; /* jméno typu */... /* bez klíčového slova struct */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 19/35
21 Struktury deklarace detailněji struct TStudent { char name[name_max]; char surname[name_max]; double avg; foo; /* struct TStudent je jméno datového typu: */ struct TStudent a; /* a je proměnná */ /* foo je proměnná typu struct TStudent: */ printf ( "%s\n", foo. name ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 20/35
22 Struktury deklarace detailněji typedef struct TStudent { char name[name_max]; char surname[name_max]; double avg; TSTUDENT; /* struct TStudent je jméno datového typu: */ struct TStudent a; /* a je proměnná */ /* TSTUDENT je jméno datového typu: */ TSTUDENT b; /* b je proměnná */ a = b; /* stejný datový typ, tedy lze přiřazovat */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 21/35
23 Struktury deklarace detailněji typedef struct { char name[name_max]; char surname[name_max]; double avg; TSTUDENT; typedef struct { char name[name_max]; char surname[name_max]; double avg; XSTUDENT; TSTUDENT a; XSTUDENT b; a = b; /* nelze přiřadit, odlišný datový typ */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 22/35
24 Struktury reprezentace v paměti #define NAME_MAX 32 typedef struct TStudent { char name[name_max]; char surname[name_max]; double avg; TSTUDENT; TSTUDENT student = {"John", "Smith", 1.35 ; /* init */ +0 'J' 'o' 'h' 'n' '\0' 'S' 'm' 'i' 't' 'h' '\0' (as a double) +72 size of the structure M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 23/35
25 Struktury reprezentace v paměti #define NAME_MAX 32 typedef struct TStudent { char name[name_max]; char surname[name_max]; double avg; TSTUDENT; int main ( void ) { TSTUDENT x; printf ( "name: %d\n", (int)((char*)&x.name - (char*)&x) ); printf ( "surname: %d\n", (int)((char*)&x.surname - (char*)&x) ); printf ( "avg: %d\n", (int)((char*)&x.avg - (char*)&x) ); printf ( "sizeof: %d\n", (int)sizeof ( x ) ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 24/35
26 Struktury reprezentace v paměti Při spuštění program vypíše očekávané hodnoty: 0, 32, 64, a 72. Co se stane, když deklaraci modifikujeme? #define NAME_MAX 33 Modifikovaný program nevypíše: 0, 33, 66, 74, ale místo toho 0, 33, 72, 80. Složka avg má délku 8 bajtů. Nejrychlejší přístup k této položce vyžaduje, aby počáteční adresa byla dělitelná 8. Když není předchozí podmínka splněna, procesor čte položku více cykly sběrnice (Intel, AMD) nebo odmítne položku přečíst vůbec a dojde ke pádu programu (SPARC, MIPS). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 25/35
27 Struktury reprezentace v paměti Kompilátor provádí tedy tzv. zarovnání (aligning): položky struktur nebo proměnné o velikosti 2 k bajtů jsou alokovány na adresách začínajících na násobku 2 k, v našem příkladu kompilátor vložil 6 bajtů navíc mezi položky surname a avg, když je program napsán korektně, tak tyto bajty nejsou vůbec používány, kvůli rychlému přístupu je položka avg je zarovnána. Zarovnání proměnných je významně platformně závislé. Přenositelná aplikace nesmí záviset na platformě specifických velikostech/zarovnání proměnných. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 26/35
28 Struktury a pole Příklad: Program čte studenty, ukládá je do paměti, řadí je podle průměrného prospěchu a pak je vypíše. Uvedeme funkce, které vedou na lépe přehledné a čitelné řešení: void printstudent ( TSTUDENT s ); int readstudent ( TSTUDENT * ps ); void sortstudents ( TSTUDENT a[], int n ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 27/35
29 Struktury a pole int main( void ) { TSTUDENT students[max]; int cnt = 0, i; while ( cnt < MAX && readstudent ( &students[cnt] ) ) cnt ++; sortstudents ( students, cnt ); for ( i = 0; i < cnt; i ++ ) printstudent ( students[i] ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 28/35
30 Struktury a pole Seřazení pole algoritmem select sort: V poli nalezneme nejmenší prvek a prohodíme jej s prvkem na indexu 0. Ve zbytku pole (od indexu 1) nalezneme nejmenší prvek a prohodíme jej s prvkem na indexu 1. To samé se zbytku počínaje indexy 2, 3,.... Výsledkem je seřazené pole. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 29/35
31 Struktury a pole void sortstudents ( TSTUDENT a[], int n ) { int i, j, imin; for ( i = 0; i < n - 1; i ++ ) { imin = i; /* umístění nejmenšího prvku */ for ( j = i + 1; j < n; j ++ ) if ( a[j].avg < a[imin].avg ) imin = j; /* na pozici j je menší */ if ( imin!= i ) { TSTUDENT tmp = a[imin]; /* prohození obsahu */ a[imin] = a[i]; /* všech složek zároveň */ a[i] = tmp M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 30/35
32 Struktury a pole void printstudent ( TSTUDENT s ) { printf ( "%s %s %f\n", s.name, s.surname, s.avg ); int readstudent ( TSTUDENT * ps ) { /* ps je výstupní parametr, předáme jej jako ukazatel */ TSTUDENT s; if ( scanf ( "%31s%31s%lf", s.name, s.surname, &s.avg )!= 3 ) return 0; *ps = s; return 1; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 31/35
33 Struktury a pole void printstudent ( TSTUDENT s ) { printf ( "%s %s %f\n", s.name, s.surname, s.avg ); int readstudent ( TSTUDENT * ps ) { /* ps je výstupní parametr, předáme jej jako ukazatel */ TSTUDENT s; if ( scanf ( "%31s%31s%lf", s.name, s.surname, &s.avg )!= 3 ) return 0; *ps = s; return 1; Struktura TSTUDENT je dost velká. Vyplatí se její kopírování při každém volání printstudent? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 31/35
34 Struktury a pole void printstudent ( TSTUDENT s ) { printf ( "%s %s %f\n", s.name, s.surname, s.avg ); int readstudent ( TSTUDENT * ps ) { /* ps je výstupní parametr, předáme jej jako ukazatel */ TSTUDENT s; if ( scanf ( "%31s%31s%lf", s.name, s.surname, &s.avg )!= 3 ) return 0; *ps = s; return 1; Struktura TSTUDENT je dost velká. Vyplatí se její kopírování při každém volání printstudent? Je potřeba při načítání zapsat data do lokální proměnné a pak je zkopírovat do parametru? Nešlo by to přímo? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 31/35
35 Struktury a pole void printstudent ( TSTUDENT * s ) { /* s je dost velký (~100 B) vstupní parametr, který funkce * pouze čte. Proto jej z výkonnostních důvodů předáme * odkazem (jako ukazatel). Volající použije: * printstudent( &students[i] ); */ printf ( "%s %s %f\n", (*s).name, (*s).surname, (*s).avg ); int readstudent ( TSTUDENT * s ) { /* s je výstupní parametr, předáme jej jako ukazatel */ if ( scanf ( "%31s%31s%lf", (*s).name, (*s).surname, &(*s).avg )!= 3 ) return 0; return 1; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 32/35
36 Struktury a pole void printstudent ( TSTUDENT * s ) { /* s je dost velký (~100 B) vstupní parametr, který funkce * pouze čte. Proto jej z výkonnostních důvodů předáme * odkazem (jako ukazatel). Volající použije: * printstudent( &students[i] ); */ printf ( "%s %s %f\n", (*s).name, (*s).surname, (*s).avg ); int readstudent ( TSTUDENT * s ) { /* s je výstupní parametr, předáme jej jako ukazatel */ if ( scanf ( "%31s%31s%lf", (*s).name, (*s).surname, &(*s).avg )!= 3 ) return 0; return 1; Zápis (*s).name je zdlouhavý a nepřehledný. Lze jej nahradit operátorem ->. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 32/35
37 Ukazatele a struktury void printstudent ( TSTUDENT * s ) { /* s je dost velký (~100 B) vstupní parametr, který funkce * pouze čte. Proto jej z výkonnostních důvodů předáme * odkazem (jako ukazatel). Volající použije: * printstudent( &students[i] ); */ printf ( "%s %s %f\n", s->name, s->surname, s->avg ); int readstudent ( TSTUDENT * s ) { /* s je výstupní parametr, předáme jej jako ukazatel */ if ( scanf ( "%31s%31s%lf", s->name, s->surname, &s->avg )!= 3 ) return 0; return 1; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 33/35
38 Ukazatele a struktury Při práci s ukazateli na strukturu často potřebujeme ukazatel dereferencovat a následně zpřístupnit složku struktury. Např.: TSTUDENT *p;... (*p).name... Tuto operaci lze nahradit jediným operátorem šipka. Kód se lépe píše a je přehlednější: TSTUDENT *p;... p->name... Následující zápisy jsou rovnocenné: TSTUDENT *p; TSTUDENT s;... s. name <=> (&s) -> name p -> name <=> (*p). name M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 34/35
39 Otázky a odpovědi Otázky... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Ukazatele, BI-PA1 35/35
Funkce, procedury, složitost
Funkce, procedury, složitost BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı
VíceBI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Ukazatele BI-PA1
VíceMělká a hluboká kopie
Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
VíceZáklady programování (IZP)
Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 27.11.2017,
VíceBI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Ukazatele BI-PA1
VíceUkazatele #2, dynamická alokace paměti
Ukazatele #2, dynamická alokace paměti BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních
VíceZáklady programování (IZP)
Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz
Vícefor (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }
Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný
VíceFunkce, intuitivní chápání složitosti
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Funkce, intuitivní
VíceStruktura programu v době běhu
Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů
VíceUkazatele, dynamická alokace
Ukazatele, dynamická alokace Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad, Martin Mazanec Karel Richta,
VíceBI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel. 7., 9. a 10. listopadu 2017
Pole, Řetězce BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České
VíceÚvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií
9 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 28. prosince 2009 Struktury Struktury heterogenní struktura položky mohou být různých datových typů vystupuje jako jediný objekt
VíceZáklady programování (IZP)
Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden
VíceÚvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií
1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední
VíceBI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel. 10., 12. a 13. října 2017
Proměnné, základní vstup a výstup BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních
VíceAbstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství
VíceIUJCE 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íceVíce o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
VíceÚvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
VíceFunkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr
Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K
VíceStrukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr
Strukturované typy a ukazatele Úvod do programování 1 Tomáš Kühr Motivace Se základními datovými typy si sice vystačíme Někdy to ale může být nepříjemně nepřehledné Příklady: long double soucet(const long
VícePole a Funkce. Úvod do programování 1 Tomáš Kühr
Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně
VíceZáklady C++ I. Jan Hnilica Počítačové modelování 18
Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program
Více8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod 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 třídám a objektům, instančním
VíceJazyk C++, některá rozšíření oproti C
Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra
VíceDekompozice problému, rekurze
Dekompozice problému, rekurze BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České
Více1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
VícePříkazy if, while, do-while, for, switch
Příkazy if, while, do-while, for, switch BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı
VícePB071 Programování v jazyce C Jaro 2013
Programování v jazyce C Jaro 2013 Uživatelské datové typy, dynamické struktury a jejich ladění Organizační Organizační Vnitrosemetrální test 7.4. Dotazník k domácím úkolům informační, nebodovaný, pomáhá
VíceIUJCE 07/08 Přednáška č. 1
Úvod do předmětu Literatura Záznamy přednášek a vaše poznámky Harbison, S. P., Steele, G. L.: Referenční příručka jazyka C Herout, P.: Učebnice jazyka C Kernighan, B. W., Ritchie, D. M.: The C Programming
VíceProgramování v jazyce C a C++
Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu
Víceint t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;
Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,
VíceStromy, soubory. BI-PA1 Programování a Algoritmizace 1. Ladislav Vagner, Josef Vogel
Stromy, soubory BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České vysoké učení
VíceZPRO v "C" Ing. Vít Hanousek. verze 0.3
verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout
VíceObsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
VíceSpráva paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /
Správa paměti doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Motivace Úrovně správy paměti. Manuální
VíceBI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Vstup, výstup BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České
VíceAlgoritmizace a programování
Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický
VíceOdvozené a strukturované typy dat
Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu
Více2 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íceZákladní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí
02 Jazyk C - je imperativní říkáme, co se má udělat, voláme příkazy - další imperativní jazyky: Pascal, Java, C/C++ apod. - na rozdíl od jazyků deklarativních např. Prolog, Haskell, Scheme, Lisp (funkcionální
VíceReprezentace dat v informačních systémech. Jaroslav Šmarda
Reprezentace dat v informačních systémech Jaroslav Šmarda Reprezentace dat v informačních systémech Reprezentace dat v počítači Datové typy Proměnná Uživatelské datové typy Datové struktury: pole, zásobník,
VícePointery II. Jan Hnilica Počítačové modelování 17
Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky
VíceUkazatel (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íce8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek
8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy
Více4. Rekurze. BI-EP1 Efektivní programování Martin Kačer
4. Rekurze BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VíceProgramování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
VíceAbstraktní datové typy, moduly
Abstraktní datové typy, moduly BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních
Více1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
VíceAplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a
Aplikace Embedded systémů v Mechatronice Michal Bastl A2/713a Aplikace Embedded systémů v Mechatronice Obsah přednášky: Opakování Pointery v C pole a řetězce předání funkci referencí Vlastní datové typy
VícePaměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
Více7 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íceBI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Vstup, výstup BI-PA1
VíceRekurzivní algoritmy
Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS
VíceProgramování v C++ 1, 1. cvičení
Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených
VícePROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11.
David Matoušek Programování v jazyce C v pøíkladech Praha 2011 David Matoušek Programování v jazyce C v pøíkladech Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo
Více2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.
Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv copyright To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VíceSpojová implementace lineárních datových struktur
Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB
VíceMATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
VíceLineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
Více7. 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ícepřetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální
VíceDynamické datové struktury III.
Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované
VíceC++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19
C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,
VíceJazyk C# a platforma.net
Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 2. část BI-DNP Evropský sociální fond
Vícepřetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
VíceZáklady programování (IZP)
Základy programování (IZP) Páté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 5. týden
VíceProgramování v jazyce C a C++
Programování v jazyce C a C++ Příklad na tvorbu třídy Richter 1 4. prosince 2017 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno Dvourozměrné pole pomocí tříd Zadání Navrhněte a napište třídu pro realizace
VícePř. další použití pointerů
Př. další použití pointerů char *p_ch; int *p_i; p_ch = (char *) p_i; // konverze int * na char * 8 int i = 5; int *p_i; p_i = &i; POZOR!!!! scanf("%d", p_i); printf("%d", *p_i); Obecný pointer na cokoliv:
VíceJazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem
Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat
VíceIAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);
Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());
VíceVýrazy, operace, příkazy
Výrazy, operace, příkazy Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad Karel Richta, Martin Hořeňovský,
VíceIUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí
Velké projekty v C velký = 100ky a více řádek udržovatelnost, bezpečnost, přehlednost kódu rozdělení programu do více souborů další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Globální
VíceÚvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
VíceBitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr
Bitové operátory a bitová pole Úvod do programování 2 Tomáš Kühr Bitové operátory Provádějí danou operaci s jednotlivými bity svých operandů Operandy bitových operátorů mohou být pouze celočíselné Vyhodnocení
VíceTřídy a struktury v C++
katedra informatiky FEI VŠB-TU Ostrava 7. prosince 2015 Odvozené a strukturované typy dat v C základní datové typy součást normy jazyka, preprocesor použití netypových maker, raději voĺıme konstanty d
VíceZačínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů
Začínáme vážně programovat Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Podmínky a cykly Dokončení stručného přehledu řídících struktur jazyka C. Složený příkaz, blok Pascalské
Více6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek
6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek 1/73 https://en.cppreference.com internetová stránka s referencemi https://gedit.en.softonic.com/download
VíceOperační systémy. Cvičení 3: Programování v C pod Unixem
Operační systémy Cvičení 3: Programování v C pod Unixem 1 Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené
VíceStřední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace
Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Pole Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 14 Číslo: V/5 Programování v jazyce
VíceIUJCE 07/08 Přednáška č. 6
Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak
VíceC++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++
C++ Akademie SH 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory Za áte níci C++ 20. b ezna 2011 Obsah 1 Prom nné - primitivní typy Celá ísla ƒísla s pohyblivou desetinnou árkou, typ bool 2 Podmínka
Více2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
VíceDTP Základy programování Úvod do předmětu
DTP Základy programování 01 - Úvod do předmětu Úvod Co již umíte? Plán předmětu Studijní materiály Způsob ukončení předmětu Základní pojmy I. Řešený problém: Řešeným nebo zpracovávaným problémem je konkrétní
VícePokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
VíceOperační systémy. Cvičení 4: Programování v C pod Unixem
Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné
VíceUkazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů
Ukazatele a pole 204 Deklarace jednorozměrného pole s inicializací Chceme-li pole v deklaraci inicializovat, zapíšeme seznam inicializátorů jednotlivých prvků do složených závorek: #define N 5 int A[N]
VíceDynamická alokace paměti
Dynamická alokace paměti doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Dynamická alokace
VíceOpakování programování
Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování
Víceint ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N
Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze
VíceNapř.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;
Struktury - složený datový typ. - datový typ jehož položky jsou jiné proměnné: - používá obvykle dohromady s příkazem typedef nechci vypisovat opakovaně složitou deklaraci pomocí typedef udělám nový datový
VícePODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2
PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C
VíceZáklady programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP
Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................
VíceParalelní architektury se sdílenou pamětí typu NUMA. NUMA architektury
Paralelní architektury se sdílenou pamětí typu NUMA NUMA architektury Multiprocesorové systémy s distribuovanou pamětí I. úzkým hrdlem multiprocesorů se sdílenou pamětí je datová komunikace s rostoucím
VíceAbstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
VíceObsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program
Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup
VíceŘídicí struktury. alg3 1
Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení
Více