Toto je starší verze dokumentu!


Řídící struktury

Dělíme na funkce a příkazy

Funkce

Deklarace funkce = prototyp. double sqrt(double x); - návratový typ jméno (parametry); - deklarujeme funkci před jejím použítím, využivá se v hlavičkových souborech

Definice funkce = implementace návratový typ jméno (parametry) {telo funkce, return}

return - ukončuje provádení funkce, může být kdekoliv, ne pouze na konci, i vícekrát

- pokud funkci použijeme dříve než jí definujeme, musí být předtím deklarována.

Příkazy

Jednoduchý příkaz - zkrátka příkaz, např a = b + c;

Složený příkazy - více příkazů, složeny do bloků

V bloku mohou být lokální proměnné, i se stejným jménem jako mimo blok, mají platnost pouze v bloku. Nelze je použít mimo.

Podmíněné příkazy

klasické if/else. V některých jazycích lze pouze if, nekdě je nutná i else část. Může být v bloku i bez bloku, pokud je bez bloku, počítá se pouze první příkaz za podmínkou. Ja slovem if následuje výraz. Tyto podmínky lze libovolně vnořovat - pozor na správné zavorkovíní.

Switch - přepínač

Přepínač slouží k větvenívýpočtu podle hodnoty celočíselného výrazu (v některých jazicích to mohou být i znaky a řetězce).

  • Vyhodnotívýraz,hodnotu porovnávás casenávěštími. Pokud nalezne odpovídajícíhodnotu, předářízenína toto návěští.
  • Pokudhodnotě výrazu neodpovídá žádné návěští, je řízenípředáno návěští default.
  • Pokud default chybí a nevykoná se žádná varianta, řízení se předá bezprostředně za příkaz přepínače.
  • V jednom přepínači nelze mít dvě návěští se stejnou hodnotou, může být default nejvýše jednou
  • Návěštícaselze ukončit příkazem break. Pokud tomu tak není, program bude pokračovat přes všechna následujícínávěští, dokud nenarazína break, returnnebo konec přepínače.
  • Příkaz break může být v rámci přepínače umístěn v libovolně zanořeném bloku.
  • Příkaz break se vždy vztahuje k nejbližšímu nadřazenému přepínači nebo cyklu.
  • Pro default platí stejná pravidla jako pro ostatnínávěští. Konvence říká, že by se mělo zapisovat na konec přepínače.

Cykly

Cykly lze take libovolne vnorovat, nebo kombinovat s podminkami a vsim ostatnim.

while - while (vyraz) {telo} - dopředu neznáme počet iterací, cyklus nemusí proběhnout ani jednou.

do while - do {} while (vyraz); - proběhne alespoň jednou

for for( inicializace ; test podmínky ; zmena ridici promenne) {telo}

  • asi není nutné doprodobna vysvetlovat jednotlivé části.
  • pokud uvnitr nemanipulujeme s ridící proměnnou, známe dopředu počet opakovaní.
  • lze používat více řídících proměnných.

break - tímto příkazem lze kdykoliv ukončit nejblíže vnořený cyklus

continue - tímto příkazem lze kdykoliv ukončit aktualní opakování a začít další iteraci.

Skoky

goto

goto navesti;
printf("Toto se nikdy nevytiskne.");
navesti: printf("Toto se vytiskne.");

- nepoužívá se! - jako příkaz skoku se dá označit i break a continue, protože také přesunou vykonávání na jiné místo.

Datové struktury

Datová struktura - abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému

Abstraktní datový typ (ADT) - je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací definovaných nad tímto typem. Jeden konkrétní prvek ADT bývá označován jako abstraktní datová struktura (ADS).

Seznamy

Seznam je homogenní, lineární, dynamická struktura.

Lineárnost = každý prvek struktury má právě jednoho předchůdce a jednoho následníka (mimo první a poslední prvek).

Prvkem seznamu může být libovolný datový typ (klidně další seznam). Seznam může být i prázdný. Přístup k prvnímu prvku je přímý, k ostatním sekvenční ve směru průchodu.

Jednosměrný seznam – průchod jedním směrem.

Operace:

  • ListInit(L) – vytvoření nového prázdného seznamu
  • First(L) – neprázdný seznam → aktivita na prvním prvku
  • Succ(L) – aktivní seznam → prvek za aktivním získává aktivitu, v případě posledního seznam ztrácí aktivitu
  • Active(L) – aktivní seznam → True, neaktivní → False
  • InsertFirst(L, E) – vloží prvek E na začátek seznamu
  • CopyFirst(L, E) – operace vrátí do E první prvek seznamu – nutný test na neprázdnost
  • DeleteFirst(L, E) – smazání prvního prvku, pokud byl aktivní → ztráta aktivity seznamu
  • PostInsert(L, E) – aktivní seznam → vložení prvku E za aktivní prvek
  • PostDelete(L) – odstranění prvku za aktivním prvkem
  • Copy(L, E) – vrací do E hodnotu aktivního prvku
  • Actualize(L, E) – přepíše hodnotu aktivního prvku na E

Dvojsměrný seznam - průchod oběma směry

- doplnění operací jednosměrného First → First, Last; Post → Post, před Kruhový jednosměrný – poslední prvek ukazuje na první Typické operace nad seznamem – zjištění délky, ekvivalence dvou seznamů, hledání prvku v seznamu, řazení prvků v seznamu, konkatenace (porovnání) seznamů

Diskuze

Jirka Hynekgeorge, 2011/05/06 18:08

Toto mi přijde jako dobrý výpis algoritmů: http://dudka.cz/studyIAL

Jirka Hynekgeorge, 2011/05/06 18:13

Jinak by si to sgsi mohl trochu zpřehlednit. Přijde mi to tu dost naházený, že jsem nad některýma bodama musel přemýšlet, co jimi vlastně chceš sdělit.

Vložte svůj komentář
 
temata/26-datove_a_ridici_struktury/main.1298109093.txt.gz · Poslední úprava: 2011/02/19 10:51 autor: sgs
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki