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

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

Odvozené a strukturované typy dat

Třídy a struktury v C++

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

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

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

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

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

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ý

Struktura programu v době běhu

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

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

Algoritmizace a programování

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

Základy programování (IZP)

Základy programování (IZP)

Zápis programu v jazyce C#

Základy programování (IZP)

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

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

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

Opakování programování

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

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

Konstruktory a destruktory

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

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

ADT/ADS = abstraktní datové typy / struktury

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

Programovací jazyk C++ Hodina 1

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

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

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

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

Programování v jazyce C a C++

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

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

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

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

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

Mělká a hluboká kopie

Funkce, intuitivní chápání složitosti

Základní datové struktury

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Výrazy, operace, příkazy

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

Jazyk C++ I. Šablony

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Úvod do programovacích jazyků (Java)

Základy programování (IZP)

Úvod do programovacích jazyků (Java)

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

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

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Jazyk C++ I. Šablony 2

konstruktory a destruktory (o)

Více o konstruktorech a destruktorech

PB071 Programování v jazyce C Jaro 2013

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

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

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

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

PŘETĚŽOVÁNÍ OPERÁTORŮ

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Ukazka knihy z internetoveho knihkupectvi

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

Dynamická alokace paměti

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Abstraktní třídy, polymorfní struktury

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

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

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

O datových typech a jejich kontrole

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

Data, výrazy, příkazy

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

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

Algoritmizace a programování

Úvod do programování. Lekce 5

Programování v Javě I. Leden 2008

PREPROCESOR POKRAČOVÁNÍ

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

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

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

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

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

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

Výrazy, operace, příkazy

Programování v Javě I. Únor 2009

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

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

Algoritmizace a programování

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

Objektově orientované programování

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

Transkript:

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 Definice obecná struct název { typ položka1; typ položka2;... typ položkan; identifikator;

Struktury základní definice struct { os1,os2,os3; struktura není pojmenovaná = nedá už jinde použít lze pouze využít proměnné os1,os2,os3 základní definice s názvem struktury struct osoba{ os1,os2,os3; struktura je pojmenovaná = lze ji dále využívat v programu

Struktury oddělená deklarace od definice struct osoba{ ;... struct osoba os1; struct osoba os2,os3; odděluje definice struktury od definice proměnných lze využít proměnné os1,os2,os3

Struktury definice nového datového typu typedef struct{ OSOBA... OSOBA os1,os2; struktura není pojmenovaná pojmenovaný je nový datový typ OSOBA lze definovat proměnné os1,os2

Struktury definice nového datového typu s názvem struktury typedef struct osoba{ OSOBA... OSOBA os1,os2; struktura je pojmenovaná ostatní viz předchozí (definice nového datového typu ) využití názvu struktury pro odkaz na struktury stejného typu

Práce se statickou strukturou typedef struct { OSOBA; void main() { OSOBA os1,os2; printf( zdej jemeno: ); scanf( %s,os1.jmeno); printf( zdej vek: ); scanf( %d,&os1.vek); os1.vek = os1.vek+3; os2 = os1;

Struktury k jednotlivým položkám statické struktury přistupujeme přes tečkovou notaci. práce s prvky struktury stejná jako když nejsou zabaleny do struktury lez provést kopii celé struktury pomocí operátoru přiřazení = (včetně jednotlivých prvků pole)

Struktura a ukazatele Oblast použití: práce v dynamické paměti ve funkcích struktura a ukazatele - příklad typedef struct { OSOBA;... OSOBA os,*ukos;

Struktura a ukazatele Přidělení paměti ukazatel na nic neukazuje nutná alokace ukos = (OSOBA*)malloc(sizeof(OSOBA)); nebo přiřazení reference na již existující pamět ukos=&os Přístup k prvkům (*ukos).vek = 34; ukos->vek = 34; Poznámka *ukos.vek = 34 což odpovídá *(ukos.vek) = 34 CHYBA operátor tečka má vyšší prioritu než dereference

Struktura a ukazatele Struktury ukazující na sama sebe(na stejný datový typ) typedef struct osoba{ struct osoba *dalsi; OSOBA; Pozor na... typedef struct osoba{ struct OSOBA *dalsi; OSOBA;

Struktura a ukazatele Struktury ukazující na sama sebe(na stejný datový typ) typedef struct osoba{ struct osoba *dalsi; OSOBA; Pozor na... typedef struct osoba{ struct OSOBA *dalsi; OSOBA;

Struktura a ukazatele Struktury ukazující na sama sebe(na stejný datový typ) typedef struct osoba{ struct osoba *dalsi; OSOBA; Pozor na... typedef struct osoba{ struct OSOBA *dalsi; OSOBA;

Struktura a ukazatele typedef struct osoba { struct osoba *dalsi; OSOBA; void main(){ OSOBA *os,*prvni=null,*aktual; int pocet=3,i; i=0; while(i<pocet){ os=(osoba*)malloc(sizeof(osoba)); printf( zdej jemeno: ); scanf( %s,os->jmeno); printf( zdej vek: ); scanf( %d,&os->vek); os->dalsi=null; if(prvni==null) prvni=os; else aktual->dalsi=os; aktual=os; i++; os=prvni; for(i=0;i<pocet;i++){ printf( ----%d.osoba----\n,i+1); printf( jmeno:%s\nvek:%d\n,os->jmeno,os->vek); os=os->dalsi;

Struktura a ukazatele

Struktura v jiné struktuře struktura jež obsahuje strukturu jinou vnitřní struktura musí být definována dříve vnitřní struktura je statický prvek

Struktura v jiné struktuře typedef struct{ char ulice[20]; int cp; ADRESA; typedef struct{ int id; ADRESA adresa; ZAKAZNIK; void main(){ int i; ZAKAZNIK polezakaz[10]; polezakaz[0].id=1002; strcpy(polezakaz[0].jmeno, Novak ); strcpy(polezakaz[0].adresa.ulice, Dlouha ); polezakaz[0].adresa.cp=1234;... for(i=0;i<10;i++){ printf( id:%d\njmeno:%s\nadresa:%s %d, %s,polezakaz[i].id, polezakaz[i].jmeno,polezakaz[i].adresa.ulice, polezakaz[i].adresa.cp);

Struktury a funkce Návratová hodnota a parametr funkce struktura jako datový typ ukazatel na strukturu Volání hodnotou je vhodný jen pro malé struktury při vytváření kopií na stacku zabírá kopie struktury zbytečně místo je vyšší časová režie nelze obsah struktury měnit Návratové hodnoty rovněž nutnost kopírování struktury Poznámka Vhodnější volání odkazem tj. pomocí ukazatelů

Struktury a funkce Volání závislé na definici struct osoba { // prvky ; void Tisk(struct osoba os) nebo typedef struct { // prvky OSOBA; void Tisk(OSOBA os)

Struktury a funkce typedef struct{ float x1,x2; BOD; BOD NactiBody(){ BOD bod; bod.x1=1; bod.x2=2; return bod; void NactiBodyOkaz(BOD *bod){ bod->x1=11; bod->x2=12; void main(){ BOD bod1,bod2; bod1=nactibody(); NactiBodyOkaz(&bod2);

Struktury a funkce typedef struct osoba { OSOBA; OSOBA *Alokuj(){ OSOBA *os; os=(osoba*)malloc(sizeof(osoba)); return os; void main() { OSOBA *os=null; os=alokuj();

Struktury a funkce typedef struct osoba { OSOBA; void Alokuj2(OSOBA **os){ *os=(osoba*)malloc(sizeof(osoba)); void main() { OSOBA *os=null; Alokuj2(&os);

Struktury a ukazatele na funkce ukazatel na funkci jako datová položka pomocí ukazatele na funkci pak lze vykonat operaci nad sama sebou

Struktury a ukazatele na funkce typedef struct osoba{ void (*ukvypisosobu)(); OSOBA; void vypisosobu(osoba *os){ printf( jmeno: ); puts(os->jmeno); printf( vek: ); printf( %d,os->vek); void main(){ OSOBA os; os.ukvypisosobu=vypisosobu; strcpy(os.jmeno, pepa ); os.vek=17; os.ukvypisosobu(&os);

Uniony union je podobný struktuře položky se překrývají vyhrazená pamět odpovídá největšímu prvku jež je v unii definovaný struct { char a; int b; double c; promstruct; union { char a; int b; double c; promunion;

Uniony union - příklad typedef union { UNI; void main(){ UNI u; u.vek=97; strcpy(u.jmeno, ahoj );

Výčtový typ konstrukce podobná struktuře seznam symbolických konstant Výčtový typ - konstrukce typedef enum { konstanta1 [ = inicializace], konstanta2 [= inicializace],... ENUM položky nejsou l-hodnoty pokud neinicializujeme hodnoty prvků explicitně pak mají hodnoty 0, 1, 2,... pokud hodnoty inicializujeme pouze některé prvky, první neinicializovaný má hodnotu o 1 větší než předchůdce

Výčtový typ výčtový typ - příklad typedef enum{ FALSE, TRUE BOOL; void main(){ BOOL dal=false; if(dal==false){...

Výčtový typ typedef enum { LEFT = L, RIGHT = R, CENTER = C ZAROVNEJ; void tiskni(char *co, ZAROVNEJ zr) { switch (zr) { case LEFT: printf( %s\n,co); break; case RIGHT: printf( %\t\t%s\n,co); break; case CENTER: printf( %\t%s\n,co); break; void main() { tiskni( Ahoj, RIGHT); tiskni( Ahoj, LEFT); tiskni( Ahoj, CENTER);