Programové jednotky

Dosud jsme psali kód programu vždy do jednoho souboru. To je v případě složitějších programů dost nepraktické - vzniká dlouhý kód, ve kterém se lze jen obtížně orientovat. Pascal (stejně jako snad skoro každý rozumný programovací jazyk) umožňuje programátorovi poskládat komplikovaný program z více souborů zvaných programové jednotky. Jedna programová jednotka by měla vždy obsahovat sadu funkcí, procedur, konstant, typových definic, a proměnných, které spolu nějak souvisí a v rámci programu plní nějakou úzce vymezenou úlohu.

Struktura jednotky v Pascalu je pevně dána:

Unit NAZEVJEDNOTKY;

interface

{ zde jsou deklarovany konstanty, typy, promenne, funkce atd.
  ktere jednotka poskytuje }

implementation

{ zde jsou implementovany vsechny funkce a procedury z casti interface }

Begin

{ zde je inicializacni kod jednotky }

End.

Abychom mohli používat interface, který jednotka nabízí, musíme Pascalu říct, že chceme jednotku použít. To lze zařídit vložením řádku

uses NAZEVJEDNOTKY;

na začátek programu.


Fronta

Na cvičení jsme programovali jednotku, která implementuje jednoduchou frontu. Zkuste si naprogramovat jednotku, která implementuje zásobník.


Reprezentace grafu

Čas od času se nám hodí pracovat s nějakým grafem. K reprezentaci můžeme použít různé datové struktury (uvedeno s příkladem kódu v pascalu - jak ho použít/zneužít/vylepšit nechávám k zamyšlení na dlouhé zimní večery):

  • Matice sousednosti
    var MatrixS: array[1..N,1..N] of integer;
    
  • Matice incidence
    var MatrixI: array[1..M,1..N] of boolean;
    
  • Seznam sousedů
    var Vertex: array[1..N] of word;
        Neighbours: array[1..(2*MAX_EDGE_CNT)] of word; 
    
  • Seznam hran
    type TEdge = record
                  u: word;
                  v: word;
                 end;
    
    var EdgeList: array[1..MAX_EDGE_CNT] of TEdge;
    

Přitom N je vždy počet vrcholů grafu a M je počet hran.

Domácí úkol

V CodExu byla zadána úloha: Lloydova osmička. Jde o speciální Vánoční úlohu. To znamená, že pokud ji budete odevzdávat na poslední chvíli, tak budete pravděpodobně programovat o Vánocích :) Na příštím cvičení žádnou úlohu do CodExu zadávat nebudu.