13.07.2015 Views

13.3 3. prednaska .. 170 - Hornad

13.3 3. prednaska .. 170 - Hornad

13.3 3. prednaska .. 170 - Hornad

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Úvod do programovania a sietíŠtruktúry údajova algoritmyIng. Branislav Sobota, PhD.doc. Ing. Zdeněk Havlice, CSc.KPI FEI TU Košice© 2007


Obsah1. Základné pojmy2. Ty údajov<strong>3.</strong> Primitívne a štruktúrované typy údajov4. Algoritmus – definícia a vlastnosti5. Prostriedky na vyjadrenie algoritmov• textové• grafické• vývojové diagramy• štruktúrogramy a NS diagramy6. Základné prvky algoritmov7. Základné riadiace štruktúry8. PríkladyKPI FEI TU KošiceŠtruktúry údajov a algoritmy 2


Základné pojmy• Číslicový počítač je definovaný ako zložitýuniverzálny číslicový systém (automat), určený nasamočinné vykonávanie požadovanej postupnostioperácií (výpočtov) nad údajmi, zobrazenýmičíslicovým kódom, na základe vopred pripravenéhoa v pamäti uloženého programu.• Výpočtový proces je transformácia vstupnýchúdajov na výstupné. Je to postupnosť operácií, ktorévedú od počiatočných vstupných údajov kukonečným výsledkom.KPI FEI TU KošiceŠtruktúry údajov a algoritmy 3


Základné pojmy• Technické prostriedky (hardvér, angl. hardware) sú technickézariadenia číslicového počítača, ktoré umožňujú uchovávanie,spracovanie a prenos binárne kódovaných informácií. Tietoprostriedky sú navzájom poprepájané do určitej architektúry, ktorácharakterizuje spôsob spracovania informácií.KPI FEI TU KošiceŠtruktúry údajov a algoritmy 4


Základné pojmyDruhy údajov spracovávaných v počítači•inštrukcie•operandyKPI FEI TU KošiceŠtruktúry údajov a algoritmy 5


Základné pojmy• Programové prostriedky (softvér, angl. software) -programy - v užšom význame sú to binárne zakódovanéinformácie o spôsobe spracovania určitých údajovdoplnené podľa potreby o binárne zakódované údaje - t.j.program tvorí postupnosť inštrukcií a údajov.Programové prostriedky daného číslicového počítača súprogramy, ktoré môže daný počítač vykonávať -súvykonateľné na danej architektúre.• Program môže existovať v rôznych formách.• vykonateľná forma, ktorá je binárne kódovaná a jepriamo vykonateľná na danom číslicovom počítači.• textová forma ako tzv. zdrojový text zapísaný vnejakom programovacom jazyku.KPI FEI TU KošiceŠtruktúry údajov a algoritmy 6


Základné pojmy• Počítačový systém (výpočtový systém) je systémzahrňujúci číslicový počítač (základné technickévybavenie - technické prostriedky), prídavnétechnické vybavenie a programové vybavenie(programové prostriedky).KPI FEI TU KošiceŠtruktúry údajov a algoritmy 7


Základné pojmyvstupnéúdajeVýpočtový procesVýpočtový systémTechnické prostriedkypoč ítač aProgramové prostriedkypočítačavýstupnéúdajeKPI FEI TU KošiceŠtruktúry údajov a algoritmy 8


Typy informácií spracovávaných v• logické• číselné• textové• zvukové• grafické• biometrické• ...počítačiKPI FEI TU KošiceŠtruktúry údajov a algoritmy 9


Typ údajov• každá konštanta, premenná, výraz alebo funkcia súurčitého typu• typ konštanty, premennej alebo funkcie sa explicitnestanovuje v rámci ich deklarácie• základné vlastnosti pojmu, ako ich budeme chápať:1. Typ údajov určuje množinu hodnôt, do ktorej daná konštanta prináleží,alebo ktoré môže daná premenná či výraz nadobudnúť, alebo ktorúmôžeme daným operátorom alebo funkciou vypočítať.2. Typ hodnoty konštanty, premennej alebo výrazu sa dá určiť na základeich deklarácie alebo zápisu bez nevyhnutnosti uskutočniť vlastnývýpočtový proces programu.<strong>3.</strong> Každý operátor alebo funkcia predpokladá argumenty presnedefinovaných typov a poskytuje výsledok tiež presne definovanéhotypu. V prípade, že operátor pripúšťa argumenty rôznych typov (napr. +pre celé alebo reálne čísla), dá sa typ výsledku určiť podľa špecifickýchpravidiel príslušného programovacieho jazyka.KPI FEI TU KošiceŠtruktúry údajov a algoritmy 10


Primitívne typy údajov• Enumeračný typ – malý počet hodnôt, reprezentované celýmičíslami, nad nimi sa nevykonávajú žiadne numerické operácieenum {BIELA, MODRA, CERVENA} farba;typ premenná• Celočíselný typ – podmnožina množiny celých čísel, ktorej veľkosťje rôzna pre rôzne typy počítačov. Operácie nad nimi spĺňajú bežnéaritmetické pravidlá.int a, b;• Reálny typ – podmnožina reálnych číselfloat x; double y;• Znakový typ – množina znakov vytlačiteľných na danom počítači(ASCII, UNICODE)char c;• Typ pre logické pravdivostné hodnoty – obsahuje dve hodnoty,zvyčajne sa označujú ako true a false, + logické operátoryKPI FEI TU KošiceŠtruktúry údajov a algoritmy 11


Štruktúrované typy údajov• Základné metódy štruktúrovania: pole (array), záznam (struct,record), množina (set), postupnosť (file - súbor)• Zložitejšie štruktúry sa zvyčajne nedefinujú ako statické typy, ale vpriebehu výpočtu programu sa vytvárajú dynamicky (viď neskôrspojkové zoznamy, stromy), pričom sa môže meniť ich veľkosť a tvar• Pole – homogénna štruktúra, ktorá pozostáva z prvkov jediného typu(tzv. bázový alebo základný typ).• Štruktúra s náhodným prístupom – všetky prvky môžu byťvybraté náhodne a sú rovnako sprítupniteľné• Referencia individuálneho prvku – meno + index• (kardinalita(bázový typ)) n ... n je kardinalita typu indexu poľatyp_prvkov identifikátor[počet_prvkov]int a[3];int x;x = a[0];//a je pole troch prvkov typu int//celočíselná premenná x//priradenie prvého prvku poľa a do//premennej xKPI FEI TU KošiceŠtruktúry údajov a algoritmy 12


Štruktúrované typy (2)• Záznam –slúži na spájanie ľubovoľných prvkov (zložiek) – môžubyť aj štruktúrované, do zložených typov.• v matematike sa takýto zložený typ nazýva karteziánsky súčinzložkových typov• v oblasti spracovania údajov sa takéto zložené typy nazývajúzáznamy• kardinalita(typ 1)* kardinalita(typ 2)*...* kardinalita(typ n)struct názov { typ 1id_prvku 1;. . .typ nid_prvku n;} zoznam_ premenných;struct bod { //bod je menovkaint x; //x je členská premenná štruktúryint y; //y je členská premenná štruktúry} p, q; //p, q sú premenné typu záznam bodp.x = 1; p.y = 2; //p predstavuje bod [1,2]KPI FEI TU KošiceŠtruktúry údajov a algoritmy 13


AlgoritmusDefinícia:Algoritmus je presný popis definujúci výpočtový proces, ktorý vedieod meniteľných vstupných údajov až k požadovaným výsledkom.Vlastnosti:• Determinovanosť –presnosť a zrozumiteľnosťPo každom kroku je presne určené, aký bude krok nasledujúci.• Rezultatívnosť – zameranie na získanie hľadaných výsledkovProces, ktorý vedie vždy k výsledkom.• Konečnosť – poskytnutie výsledkov za konečný počet krokovKonečnosť v čase – rezultatívnosť, konečnosť v priestore –reprezentovateĺnosť konečným počtom príkazov.• Hromadnosť –meniteľné vstupné údajeKPI FEI TU KošiceŠtruktúry údajov a algoritmy 14


Vyjadrenie algoritmovTextový popis – slovné vyjadrenie algoritmu – zvyčajne je to pre násjednoduché, ale dovoľuje nejednoznačnosť výkladu alebo je rozsiahly.Grafické vyjadrenie:• Vývojové diagramy – súbor štandardizovaných značiek, pomocouktorých zobrazujeme postupnosť riešenia úlohy.• Štruktúrogramy – stromový diagram, ktorý popisuje štruktúru, tokriadenia, prípadne aj tok dát v programe alebo v module programu.Uzly diagramu tvoria bloky zodpovedajúce volaniu podprogramovalebo bloky preddefinovaných činností.• Nassi-Schneidermanove diagramy (N-S diagramy) –popisujú štruktúru a tok riadenia štruktúrovaným spôsobom. Na rozdielod štruktúrogramov nie je použitý strom, ale bloky špeciálnych tvarov.KPI FEI TU KošiceŠtruktúry údajov a algoritmy 15


Príklad štruktúrogramuVstuphodnoteniaskúšokVstupzáznamuIdentifikáciaštudentaHodnotenie *povinnéhopredmetuHodnotenie ovoliteľnéhopredmetuOsobné čísloMeno apriezviskoNázovpredmetuZnámkaNázovpredmetuZnámkaRadenie blokov zľava doprava – sekvencia, príznak iterácie ( * ) – cyklus, príznakvoliteľnosti ( o ) - vetvenieKPI FEI TU KošiceŠtruktúry údajov a algoritmy 16


Príklad NS-diagramuČítaj a, b, cD = 2*b - 4*a*cnieAk D < 0áno„reálne korene“x1 = (-b + sqrt(D))/(2*a)x2 = (-b - sqrt(D))/(2*a)„komplexné korene“Rc = -b/(2*a)Ic = sqrt(-D)/(2*a)Radenie za sebou definuje sekvenciu, vetvenie je reprezentované trojuholníkovýmblokom s definovaním podmienky a cyklus má špeciálny tvarKPI FEI TU KošiceŠtruktúry údajov a algoritmy 17


Vývojové diagramy (1)Počiatočná a koncová značkaSTARTENDV počiatočnej značke môže byť aj názov algoritmu alebopodprogramu. Koncových značiek môže byť viacNávestie1Touto značkou sa označuje prerušená spojnica v diagrame,napr.ak diagram má viac strán v dokumentáciiKPI FEI TU KošiceŠtruktúry údajov a algoritmy 18


Vývojové diagramy (2)Vstup/výstup dát – týmto symbolom sa označujú všetky vstupy avýstupy periférnych zariadenícitaj:X,Ytlac:X,YRučný vstup dát – vstup údajov z klávesniceA,B,CSpracovanie – výpočet, prenos hodnôt, rušenie záznamu,...D = A + BKPI FEI TU KošiceŠtruktúry údajov a algoritmy 19


Vývojové diagramy (3)Vetvenie (selekcia) – postup spracovania programu sa mení vdôsledku logickej podmienky2-cestné vetvenie3-cestné vetvenieviac-cestné vetvenie - prepínačánoA = BnieSamostatne definovaná činnosť (podprogram) – samostatnýúsek programu, ktorý možno vyvolať z ľubovoľného miesta programu.Jeho definícia je na inom miesteMeno podprogramu(zoznamparametrov)PopisparametrovKPI FEI TU KošiceŠtruktúry údajov a algoritmy 20


Základné prvky algoritmovÚdajové objekty:• atribúty – typ, hodnota, umiestnenie (adresa),• klasifikácia – jednoduché (skalárne, neštruktúrované) a zložené(štruktúrované – napr. pole, záznam, množina, sekvenčný súbor),• spôsoby reprezentácie v pamäti – výskyt objektu v programeako konštanta alebo premenná,• spôsoby odvolávania sa na objekty – konštanty označujemeich hodnotou a na označenie premenných sa používajú identifikátory,• spôsoby ukladania štruktúrovaných objektov v pamätia triedy pamäte – pre údajové objekty sa vyhradzuje súvisláoblasť pamäte (možná požiadavka zarovnať objekt na určitú hranicu);statické (existujú počas celého behu programu) adynamické/automatické údajové objekty (existujú len počas behuurčitej časti programu)KPI FEI TU KošiceŠtruktúry údajov a algoritmy 21


Základné prvky algoritmov (2)• viditeľnosť objektov:• lokálne - viditeľné len v rámci určitých častí programu (zvyčajnepodprogramov),• globálne – viditeľné v rámci celého programu.• Definícia údajového objektu – špecifikácia konkrétneho objektudaného typu. Priamo súvisí s procesom pridelenia pamäťového miesta.• Deklarácia údajového objektu – popis typu tohto objektu.Deklaráciou určujeme, ako sa má s údajovým objektom v programezaobchádzať. Spravidla sa používa v podprogramoch, do ktorých saodovzdávajú údajové objekty.Poznámka: Definíciu objektu môžeme v programe vykonať iba raz, kýmdeklarácií objektu sa v rámci zdrojového textu môže vyskytnúťľubovoľný počet.KPI FEI TU KošiceŠtruktúry údajov a algoritmy 22


Základné riadiace štruktúrySekvencia: príkazy sa vykonajú v takom poradí, ako sú uvedené(default tok zhora-nadol)Vetvenie: výber z viacerých (aspoň dvoch) možností• Preskok DvojcestnéniePodmienkaánoČinnosťánoniePodm.Činnosť 1 Činnosť 2• Viaccestné – každá vetva je určená pre množinu hodnôt• Prepínač –každá vetva je určená pre konkrétnu hodnotu výrazuuvedeného v podmienkeKPI FEI TU KošiceŠtruktúry údajov a algoritmy 23


Základné riadiace štruktúry (2)Cyklus: špecifikovanie opakujúcich sa činností; pozostáva z:1. Inicializácie2. Vykonania tela cyklu<strong>3.</strong> Testu podmienky ukončenia cyklu4. Prípravy ďalšieho kroku cyklu – aktualizácie.Delíme ich na:• Aritmetické (vo fáze inicializácie poznáme presný počet opakovanícyklu)• Logické• prefixné – test podmienky je pred telom cyklu• postfixné – test podmienky za telom cykluKPI FEI TU KošiceŠtruktúry údajov a algoritmy 24


Základné riadiace štruktúry (3)prefixný postfixný aritmetickýInicializáciaInicializáciai=ph,kh,krokPodmienkaTeloTeloTeloPodmienkaAktualizáciaAktualizáciaph–počiatočná hodnotakh – konečná hodnotaKPI FEI TU KošiceŠtruktúry údajov a algoritmy 25


Príklad: Najväčší spol. deliteľFormulácia úlohy:Pre dve načítané celé čísla z klávesnice zistite a na štandardný výstupvypíšte najväčší spoločný deliteľ.Analýza úlohy:Pre výpočet najväčšieho spoločného deliteľa (NSD) použijemeeuklidovský algoritmus pre výpočet NSD dvoch kladných celýchčísel. Vychádza z faktu, že NSD dvoch kladných celých čísel x a y jezároveň aj NSD čísel y a zvyšku po delení x/y.Navrh údajových štruktúr:V programe budeme potrebovať tri celočíselné premenné pre uloženiedvoch vstupných čísel (x, y) a pomocnú premennú uchovávajúcuzvyšok po celočíselnom delení (z).KPI FEI TU KošiceŠtruktúry údajov a algoritmy 26


Príklad: NSDNSDx, yz=x mod yz ≠ 0niex = yy = zánoz=x mod ytlac: yKoniecKPI FEI TU KošiceŠtruktúry údajov a algoritmy 27


Príklad: NSD#include NSDmain()x, y{int x, y, zvysok;z=x mod yprintf(“zadaj x: ”);scanf(“%d”, &x);printf(“zadaj y: ”);z ≠ 0scanf(“%d”, &y);ánozvysok = x%y;x = ywhile(zvysok != 0) {y = zx = y;y = zvysok;zvysok = x%y;z=x mod y}printf(“Najvacsi spolocny delitel je: %d\n”, y);}tlac: ynieKPI FEI TU KošiceKoniecŠtruktúry údajov a algoritmy 28


otázky ?KPI FEI TU KošiceŠtruktúry údajov a algoritmy 29

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!