Lab

2017/2018

Notele de la seminar si laborator sunt disponibile aici

1. Some problems with sets

2. Some problems with recursive functions over natural numbers + countable & uncountable

3. Test + Some problems with lists and recursive functions over lists

4. Some problems with lists and recursive functions over lists + Graph traversals

5. Graph traversals + Tree traversals + some problems with trees and recursive functions over trees

6. Test + Recap

7. Antrenament implementare functii in C

  • Descarcati exemplul de program de aici
  • Porniti editorul Kate (meniul KMenu->Utilities->Kate) si deschideti fisierul descarcat anterior
  • Cititi exemplele + atentie la eventualele explicatii
  • Compilati si rulati exemplul
    • In Kate in partea de jos exista un meniu/buton denumit Terminal. Apasati pe el pentru a deschide un terminal
    • Compilarea
      • In Terminal dati comanda gcc -Wall -o nume_fisier_executabil nume_fisier_program
      • Exemplu: gcc -Wall -o programulMeu numbers.c
      • Atentie: unde e spatiu se pune spatiu !
    • Rularea
      • In Terminal dati comanda ./nume_fisier_executabil
      • Exemplu: ./programulMeu
  • Definiti pe foaie (ca la curs/seminar) functiile recursive de mai jos, apoi implementati si rulati in scheletul de program (definitia e initial in forma pattern matching si apoi o aduceti la forma conditionala cu reguli if-then-else)
    • Functia recursiva factorial:N->N, unde factorial(n) intoarce n!. In main, tipariti rezultatul factorial(5).
    • Functia recursiva fib:N->N, unde fib(n) este al n-lea numar fibonacii. In main, tipariti al 5-lea numar fibonacii.
    • Observatie 1: Pentru verificare, functiile sunt definite in curs (dar faceti-le voi de mana prima data)
    • Observatie 2: De cate ori modificati codul sursa, nu uitati sa salvati si sa recompilati programul
    • Observatie 3: Pentru cei care au mai facut programare in liceu - nu folositi variabile locale ori globale

8. Programe cu liste

  • Descarcati scheletul de program de aici
  • Definiti pe foaie (ca la curs/seminar) functiile recursive de mai jos, apoi implementati si rulati in scheletul de program (definitia e initial in forma pattern matching si apoi o aduceti la forma conditionala cu reguli if-then-else):
    • length:List[Z] - > N, reprezentand lungimea listei data ca argument
    • elementePare:List[Z] -> N, intorcand numarul de elemente pare ce apar in lista data ca argument
    • listaElementelorPare:List[Z] -> List[Zp], intorcand o lista ce contine toate elementele pare ce apar in lista data ca argument
    • Observatii: List[Z] in programul vostru va fi IntList; lista goala e emptyIntList; pt. cei care au facut programare in liceu: nu se umbla la structura listei ci se folosesc functiile tail, head, cons.

9. Programe cu arbori binari

  • Descarcati scheletul de program de aici
  • Definiti pe foaie (ca la curs/seminar) functiile/procedurile recursive de mai jos, apoi implementati si rulati in scheletul de program (definitia e initial in forma pattern matching si apoi o aduceti la forma conditionala cu reguli if-then-else):
    • postordine:BinTrees[Z], ce tipareste pe ecran in postordine nodurile arborelui binar dat ca argument
    • height:BinTrees[Z] -> N, ce intoarce inaltimea arborelui dat ca argument
    • Observatii: BinTrees[Z] in programul vostru va fi BinaryIntTree; arborele gol este emptyBinaryIntTree; aveti deja definite functiile root, left, si right; pt. cei care au facut programare in liceu: nu se umbla la structura arborelui ci se folosesc functiile root, left, right