82
C/C++ a Pascal Ing. Peter Pištek, CEng.

C/C++ a Pascal

  • Upload
    nadine

  • View
    77

  • Download
    0

Embed Size (px)

DESCRIPTION

C/C++ a Pascal. Ing . Peter Pi štek , C E ng. Obsah. Opakovanie z minulého stretnutia Ukazovatele (Pointre) Jednorozmerné polia Viacrozmerné polia Reťazce Dynamické štruktúry. Opakovanie. Základné konštrukcie jazyka Základné údajové šruktúry Funkcie Cykly a rekurzia - PowerPoint PPT Presentation

Citation preview

Nvrh tmovho projektu

C/C++ a PascalIng. Peter Pitek, CEng.1ObsahOpakovanie z minulho stretnutiaUkazovatele (Pointre)Jednorozmern poliaViacrozmern poliaReazceDynamick truktry2OpakovanieZkladn kontrukcie jazykaZkladn dajov ruktryFunkcieCykly a rekurziaPrca so sbormiStruct3OpakovanieC je case sensitive jazykPrototypovanie funkciPri natavan scanf (parametre, &premenna)Rovn (==), rzny (!=), AND ( &&), OR (||), NOT (!)Ztvorkovanie podmienokVo vetvch switchu treba pouva prkaz breakCyklus for me by nekonenPrca so sbormi (princpe sa pridva pred nzov funkcie f a do argumentov sa pridva sbor)4OpakovaniePrkaz fflush okamite ulo obsah buffra do sboruRadej pouva feof() ako kontantu EOFEOLN nie je, treba hada \nstdin, stdout, stderrDefinovanie kontnt - #define MAX 100typedef definovanie vlastnch typovRecord == struct Namiesto \n sa moze hladat aj #10 a #13 resp opacne zalezi od kompilatora5Mini opakovanieswitch(getchar()) { case 'a' : putchar('a'); case 'b' : putchar('b'); case 'c' : putchar('c'); default : putchar('x'); }x, y: double ; printf("Zadajte 2 realne cisla: "); scanf("%lf %lf", x, y); printf("%.2lf\n", (x > y) ? x : y);for (i = 1, i prca s reazcom je rovnak ako prca s poomPri prci so statickm reazcom nezabda na \034Prca s reazcami int strlen(char *s);char *strcpy(char *s1, char *s2);char *strcat(char *s1, char *s2);char *strchr(char *s, char c);int strcmp(char *s1, char *s2);char *strstr(char *s1, char *s2);char *strncpy(char *s1, char *s2, int max);char *strrchr(char *s, char c);int atoi(char *s);long atol(char *s);float atof(char *s);

strcpy - koprovanie reazca s2 do s1, vracia ukazovate na s1strcat - pripoj reazec s2 k s1, vracia ukazovate na s1strchr - njdenie znaku c v reazci s, vracia smernk na prv vskyt znaku, ak sa v s nenachdza znak c, vrti NULLstrcmp - vracia 0, ak s reazce rovnak, zporn slo, ak s1 je lex.men ako s2, kladn slo ak s1 je lex.v ako s2strstr - vracia ukazovate na prv vskyt reazca s2 v reazci s1, v prpade nespechu NULLstrcpy monos prida parameter max koko maximlne sa m skoprova znakovstrrchr to iste o strchr, ale had posledn vskyt znakuatoi konverzia reazca na int (123fg22 konverguje na 123 ned chybu o tom, e s tam in znaky odporam vlastn funkciu)atol analogicky ale pre longatof - analogicky ale pre float35Prca s reazcamichar *gets(char *s); (fgets)int puts(char *s); (fputs)

sprintf vypisuje do reazca (fprintf)sscanf ta z reazca (fscanf)

char *p_text[4];p_text[0] = "prvy";p_text[1] = "druhy";p_text[2] = (char *) malloc(6);strcpy(p_text[2], "treti");p_text[3] = "stvrty";

Prca s reazcami v C36truktryTBookRec = Record Title, Author, ISBN : String; Price : Real; End;Kniha: TBookRec

struct { int vyska[20]; float vaha;} peter,pavol,jan;

struct miery { int vyska; float vaha;} peter,pavol,jan;struct miery { int vyska; float vaha;};struct miery peter;typedef struct { int vyska; float vaha;} MIERY;MIERY pavol, jan, peter;typedef struct miery { int vyska; float vaha;} MIERY;MIERY pavol, jan, peter;Prisup napr. peter.vyska[1]=198;Vavo hore je truktra (record) ukzan v PascaleC m vie mnostvo monost ako nieo takto zapsa.Vavo dole truktra nie je pomenovan, daj sa poui len definovan premenn (peter, pavol, jan)Ksok vpravo truktra je pomenovan a d sa teda poui alej v programe (napr. miery anja)Ksok vpravo podobne ale truktra je oddelen od deklarcie premennch tie sa mu definova inde, tak ako je uvedene v prkladeKsok hore vaka typedef si definujeme nov typ premennej MIERY, ktor meme alej pouvaKsok hore truktra je aj pomenovan, je to nutn ak truktra ukazuje sama na seba.37Priradenie celho poa naraztypedef struct pole { int pole[10];} STR_POLE;

void main() { STR_POLE a, b; a.pole[0] = 5; b = a;}

38truktry a pointretypedef struct { char meno[30]; int rocnik;} STUDENT;

STUDENT s, *p_s;p_s = (STUDENT *) malloc(sizeof(STUDENT));p_s = &s;(*p_s).rocnik=4p_s->rocnik=4

39Dynamick truktrytypedef struct polozka {//ok int hodnota; struct polozka *p_dalsi;} POLOZKA;

typedef struct {//zle int hodnota; struct POLOZKA *p_dalsi;} POLOZKA;

40Spjan jednosmern zoznamtypedef struct polozka { int hodnota; struct polozka *p_dalsi;} POLOZKA;Je nutn si pamta prv prvok zoznamu (!)Kad prvok ukazuje na nasledujci prvokPosledn prvok ukazuje na NULL41Spjan jednosmern zoznamtypedef struct clovek { char meno[30]; int rocnik; struct clovek *dalsi;} CLOVEK;CLOVEK *prvy, *aktualny, *novy;

novy = (CLOVEK *) malloc(sizeof(CLOVEK));novy->meno = Jurko;novy->rocnik = 3;novy->dalsi = NULL;

aktualny->dalsi = q; //aktualny->dalsi->dalsi = q;

42Spjan jednosmern zoznam

43Spjan jednosmern zoznamCLOVEK *prvy, *aktualny, *zmaz;//zmazat prvok aktualnyzmaz=prvy;//za predpokladu ze nemazeme prvy prvokwhile (zmaz->dalsi==aktualny) zmaz=zmaz->dalsi

zmaz->dalsi=aktualny->dalsiaktualny->dalsi=NULLfree(aktualny)aktualny=NULLaktualny=zmaz

Podobne aj pre pridanie prvku pred aktualny44

45Dynamick truktry FIFOFIFO = first in first out = radImplementcia jednosmernho spjanho zoznamuPridva je mon len na koniec zoznamuOdobera prvky sa d len z konca zoznamu

46Dynamick truktry LIFOLIFO = last in first out = zsobnikImplementcia jednosmernho spjanho zoznamuPridva je mon len na zaiatok (koniec) zoznamuOdobera prvky sa d len zo zaiatku (konca) zoznamu

47Kruhov jednosmern zoznamPrv prvok ukazuje na posledn

48Spjan obojsmern zoznamtypedef struct polozka { int hodnota; struct polozka *p_dalsi;struct polozka *p_pred;} POLOZKA;Kad prvok ukazuje na nasledujci prvok a predchdzajci prvokPosledn prvok ukazuje alej na NULLPrv prvok ukazuje na predchdzajci ako na NULLTreba si pamta prv/posledn prvok49Spjan obojsmern zoznam

50Kruhov obojsmern zoznamPrv prvok ukazuje na posledn a posledn prvok ukazuje na prv

51Binrny stromtypedef struct polozka { int hodnota; struct polozka *p_lavy;struct polozka *p_pravy;} POLOZKA;Kad prvok m dvoch nasledovnkovMu/nemusia/ ukazova na svojho predchodcuTreba si pamta kore stromuPosledn prvky ukazuj na NULL

52

53Pr fnttruktra me by aj v truktreAlokova sa d truktra samotn a aj jej polokytypedef struct { double re, im;} KOMP;

void sucet(KOMP *a, KOMP *b, KOMP *c) { c->re = a->re + b->re; c->im = a->im + b->im;}void main(){ KOMP x, y, z; x.re = 1.4; x.im = 3.2; y = x; sucet(&x, &y, &z);}Zvyajn spsob54Pr fntak je truktra dynamickvoid sucet(KOMP *a, KOMP *b, KOMP *c)sucet(p_x, p_y, p_z) nie &!Alokova sa d truktra samotn a aj jej polokyvoid vytvor2(STUDENT **p) { *p = (STUDENT *) malloc(sizeof(STUDENT)); (*p)->dalsi=NULL; if (*p == NULL) printf("Malo pamate.\n");}

vytvor2(&novy)55C++C rchlo kurz geniality, C++ - zhutnen rchlokurz geniality Atribty = premennMetdy = funkcieNieo ako truktry s funkciami telo metdy je definovan mimoZdrojov weby:Ing. Valentino Vrani, PhD. http://www2.fiit.stuba.sk/~vranic/oop/http://www.builder.cz/art/cpp/cpp_oop.htmlhttp://www.cplusplus.com/doc/tutorial/56PrkladStaton rytier StavstatocnyRytier.polohastatocnyRytier.energia intVlastnosstatocnyRytier.utoc()OborStavhnusnyObor.polohahnusnyObor.energia inthnusnyObor.hladny booleanVlastnoshnusnyObor.odveta();57PrkladObe maj objekt triedy poloha = agregciaclass Obor {boolean hladny;int energia;void odveta(Rytier r) { r.znizEnergiu(1); }int zistiEnergiu() { return energia; }void zvysEnergiu(int i) { energia = energia + i; }void znizEnergiu(int i) { energia = energia i; }}58Prklad - dedenieclass ZlyObor extends Obor {void odveta(Rytier r) {if (hladny)zjedz(r);}void zjedz(Rytier r) {int e = r.zistiEnergiu();r.uberEnergiu(e);zvysEnergiu(e);}}

class PlachyObor extends Obor {void utec() { . . . }void odveta(Rytier r) {utec();}}

59Prklad - polymorfizmusObor o1;Obor o2;o1 = new ZlyObor();o2 = new PlachyObor();o1.odveta(r); // zje rytierao2.odveta(r); // utecie

for (int i = 0; i < 100; i++) {obor[i].odveta(r[i]);}

obor[47] = new ZlyObor();obor[48] = new PlachyObor();obor[49] = new Obor();60ObjektObjekt je entita, ktor mStav zaha vetky vlastnosti objektu a ich hodnotySpvanie ako objekt kon, ako a reaguje v zmysle zmeny stavu a operci, ktor poskytujeIdentitu jednoznan identifikcia objektu

Program sa uskutouje ako interakcia objektovTyp objektu sa oznauje ako trieda (class)Objektom sa prirauj referencie nie hodnoty61Agregcia a zapzdrenieAk viacero objektov obsahuje objekty inej triedyPredstavuje spsob tvorby hierarchie

Zapzdrenie (encapsulation)Skrvanie informciImplementcia objektu m zosta skrytPrstup prostrednctvom rozhrania (interface), ktor tvoria vybran metdyVetko ostatn ako private62AgregciaObjekt me obsahova in objekty HodnotouReferenciouDosahuje sa prostrednctvom atribtov tried63DedenieVeobecn objektObjekty odvoden od nadradenho objektu dedia jeho sprvanie a truktruObjekty roziruj a konkretizuj nadraden objekt pridvaj nov detaily do abstrakcie objektuDedenie predstavuje al spsob tvorenia hierarchieclass Kruh: public Utvar {}64Preaenia metdDve metdy tej istej triedy mu nies rovnak nzov, ak sa lia v zozname parametrovPresnejie preaen s nzvy metdNvratov hodnota sa ned poui na rozlenie medzi metdamiPri preaench metdach sa vyberie metda, ktorej vekos typu formlneho parametra je najbliia k skutonmu (implicitn konverzia)65Virtulne metdyV C++ treba zapn polymorfizmus funkci funkcia, ktor me by prekonvan mus by oznaen ako virtualvirtual void m()=0Takto vytvoren metdy zodpovedaj abstraktnm funkciam z JaveTrieda obsahujca len virtulne funkcie je abstraktn a neme ma intancie

66InicializciaJe nevyhnutnas sa odohrva pomocou kontruktorovNechcen vynechanie sa ako odhaujeAtribty tried sa mu inicializova priamo v definciInicializcia nemus by vykonan kontantou (zlei na porad)67KontruktoryJe pecilna opercia na inicializciu objektu, volan automaticky pri jeho vytvranKontruktor nesie nzov triedy (string s=new string(sdfd))Ak programtor kontruktor nevytvor, tak sa poskytne implicitn (przdny)Neme ma nvratov hodnotuMe ma parametreMe existova viacero kontruktorov (preaenie)68KontruktoryNed sa vola priamo, okrem inch kontruktoroch v rmci tej istej triedy (pomocou this)D sa vola len jeden kontruktor a len na zaiatkuMono inicializova atribty tried v kontruktore69DetruktoryC++ nem priamo zabudovan podporu garbage collectoruObjekty vytvoren pomocou new treba zruit explicitne pomocou delete Ak sa nealokuje dynamicky alia pam tak sta implicitn detruktor(delete p)Explicitn detruktor m meno triedy, ktormu predchdza tilda (~)70Dedenie 2Odvoden trieda je pecilnym prpadom pvodnej triedyUmouje poui raz definovan triedu ako zklad pre alie triedyDedi sa dtruktra (implementcia) dan atribtmi a implementciou metdSprvanie (interface) dan typom, poskytnutmi metdamiako ich plne oddeli

71Dedenie 2Podtrieda zskava truktru nadtriedyMono ju rozri o alie atribty a metdyMono zmeni jej metdyC++ umouje viacnsobn dedenieProblmy opakovan dedenie (oetruje virtulne dedenie)72Dedenie 2Ak sa neuvedie in modiktor prstupu, predpoklad sadedenie privatePri deden private trieda zded len public as a to do vlastnejprivate astiPreto sa toto dedenie oznauje aj ako inheritance withcancellationToto dedenie je podobn agregcii, lebo navonok sa podtriedanejav ako podtyp nadtriedy podtriede vak noUmouje podtriede prstup k protected prvkom nadtriedyDedenie protected je podobn, ale alie odvoden triedy tiepoznaj vzah ich nadtriedy k svojmu nadtypu73Prekonvanie metdDeklarcia nestatickej metdy v podtriede rovnakej signatry (vstupn a nvratov parametre) prekonva pvodn metdu z nadtriedyPrekonan metda sa d zavola z prekonvajcej metdy pomocou (len metda z nadtypu, nie nadnadtypu)Preaenie metd plat aj pri dedenAk sa nelia v parametroch = prekonanieAk sa lia v parametroch = preaeniePrekonva sa daj aj atribty 74Riadenie prstupu v dedenPomocou slovka privateAtribty nadtriedy s prstupom private s v podtriedach u nedostupnD sa poui aj protectedPrvok je prstupn v kadej podtriedePrvok je dostupn triedam v tom istom balku75Inicializcia pri dedenTreba dba o sprvnu inicializciu nadtriedyImplicitne sa volaj len kontruktory bez parametrovOstatn kontruktory pomocou slovka superKad trieda, ktor neded z inej triedy m pouit implicitn dedenie od triedy Object

76FinalZabrauje zmene prvku, na ktor sa vzahujeAtribty triedKontanty, explicitne inicializovan pri definci alebo kontruktore, nebrni zmene samotnho objektuParametre metdParametre me pouva ako ubovon loklne premenn, nebrni zmene samotnho objektuMetdyNedaj sa prekonva (s finlne)TriedyOd finlnej triedy sa ned dedi, vetky metdy s implicitne finlne, vedie k optimalizci programuC++ neobsahuje

77PolymorfizmusAj objekt odvoden od svojho nadradenho objektu mono deklarova pomocou nadradenho objektuKad objekt sa me uplatni na mieste objektu hociktorho z jeho nadtypovKad objekt pozn svoj skuton typ

78Abstrakcia triedy a metdyAbstrakcia = uberanie detailovAbstraktn metdy nemaj telo uren s len na prekonvanieAbstraktn triedy nemaj intancie uren s len na dedenieJedine abstraktn trieda me (ale nemus) obsahova abstraktn metdy

79Rozhranie dedenie sprvaniaUmouje definova sprvanie bez implementcieDedenie rozhrania trieda implementuje rozhranieVetky triedy odvoden od triedy, ktor u implementuje nejak rozhranie tie dedia toto rozhranieKonkrtne triedy musia implementova vetky metdy rozhrania (okrem abstraktnch tried)Triedy mu implementova viac rozhranMe dochdza ku kolzim nzvov

80Rozhranie dedenie sprvaniaRozhrania mu dedi od inho rozhraniaC++ neposkytuje rozhrania, mono simulova triedami s isto virtulnymi funkciami

81akujem za pozornosNabudce - vod do sieti82