Fundamente de informatică - Tema 4

  1. Citirea de expresii
    Scrieți o funcție care citește o formulă în formă normală conjunctivă și o reprezintă ca listă de liste de literali.
    Formula se dă la intrare cu câte o clauză pe fiecare linie, până la sfârșitul intrării (EOF). Identificatorii (numele propozițiilor) sunt secvențe de litere, cifre și liniuță de subliniere. Semnul + reprezintă disjuncția, și ~ reprezintă negația. Între operatori și identificatori pot fi un număr arbitrar (inclusiv zero) de spații albe (spațiu, tab, etc.). Exemplu:
    a +b+~c0 +~ d
      c_1
     ~a+ c0
    
  2. Lucrul cu liste
    O configurație de blocuri suprapuse (ca în ultimul curs) se poate reprezenta ca mulțime de liste de întregi: în fiecare listă, primul element fiind cel mai de sus.
    Scrieți o funcție care primește o configurație și returnează mulțimea tuturor configurațiilor care se pot obține mutând un bloc liber altundeva: pe alt bloc, sau plasându-l singur.
    Exemplu: din configurația { [1;2], [3] } se obține mulțimea de configurații: { { [1], [2], 3] }, { [2], [1;3] }; { [3;1;2] } }
    Soluție scurtă, sau definind întâi un modul pentru mulțimi cu tipărire.
Marius Minea
Last modified: Thu Nov 8 15:30:00 EEST 2012