# Zkouska 29.6.2010

<{ForumPost(poster="DarkTemplar", timestamp=2010-06-29 20:03:41)}>
Ahoj,  
  
prosim, mohl by jste sem nekdo dat zadani z dnesni zkousky z Neproceduralka 29.6 a kdyztak i nejake to reseni.  :wink:   
Diky.
<{/ForumPost}>

<{ForumPost(poster="vlastagf", timestamp=2010-06-30 20:14:55)}>
Hodim sem alespon zadani.  
  
Prolog 1.)   
Je zadany graf a cesta grafem. Je treba definovat predikat, ktery postupne vrati vsechna Hamiltonovska prodlouzeni cesty grafem. (cili cesta pres vsechny vrcholy) Reprezentace dat neni pevne dana.  
  
Prolog 2.)  
Prevod formuli z DNF do CNF. Spojky *and*, *or* a *not* definovat jako operatory.  
  
Haskell 1.)  
Definovat funkci, ktera overi, ze zadana posloupnost je Grayuv kod. Coz je posloupnost binarnich cisel "stejne delky", kde sousedni cisla se lisi maximalne o jeden bit, vcetne prvniho a posledniho cisla a jejich pocet je 2^n.  

    [0,0], [0,1], [1,1], [1,0]
    

Haskell 2.)  
Vymyslet strukturu binarniho stromu, ktery v listech uchovava jeden typ hodnot a ve vrcholech druhy typ hodnot. Substituovat za typ v listech a napsat funkci, ktera ocisluje listy ve stromu od 1 zprava.  

    BinStrom a b = List a | Vrchol (BinStrom a b) b (BinStrom a b)
    a funkce bude vracet treba
    List (a,Int)
    


<{/ForumPost}>

<{ForumPost(poster="srlok", timestamp=2010-07-20 15:43:21)}>
Tady je moje reseni na ten haskell 2, neni uplne idealni ale funguje mi

    data Btree a = Nil | Node a (Btree a) (Btree a)
             deriving (Show, Eq)
    
    numleaves :: Btree a -> Int
    numleaves Nil = 0
    numleaves (Node _ Nil Nil) = 1
    numleaves (Node _ l r) = (numleaves l) + (numleaves r)
    
    markleaves :: Btree a -> Btree (a,Int)
    markleaves Nil = Nil
    markleaves (Node a l r) = markleavesr (Node a l r) 1
    
    markleavesr :: Btree a -> Int -> Btree (a,Int)
    markleavesr Nil _ = Nil
    markleavesr (Node a Nil Nil) n = (Node (a,n) Nil Nil)
    markleavesr (Node a l r) n = (Node (a,0) lm rm) where
                                     lm = markleavesr l cntr
                                           where cntr = n + numleaves r
                                     rm = markleavesr r n
    


<{/ForumPost}>

