UPC 2 - Probleme suplimentare

Prelucrări de texte și lucru cu fișiere

Fiecare din programele de mai jos (dacă nu se precizează altfel) va citi textul de prelucrat de la intrare dacă e rulat fără parametri, și din fișierul cu numele dat pe linia de comandă, dacă se dă un argument.
  1. Scrieți un program care numără cuvintele și frazele dintr-un text. Un cuvânt e un șir de caractere alfanumerice consecutive. O frază e o secvență de caractere care conține cel puțin un cuvânt și e încheiată printr-unul din caracterele ! . ?
  2. Scrieți un program care elimină spatiile albe inutile dintr-un text, definite în felul următor:
  3. Scrieți un program care citește de la intrare o expresie aritmetică fără paranteze conținând numere nenegative și operatorii + și - și calculează valoarea ei.
  4. Implementați programul UNIX grep care caută un cuvânt dat ca prim argument pe linia de comandă în fiecare din fișierele cu numele date ca următoarele argumente (sau în intrarea standard, fără alte argumente). Programul va tipări fiecare linie în care apare cuvântul respectiv. Ca variante, implementați una sau mai multe din opțiunile (specificate pe linia de comandă înainte de cuvântul dat):
  5. Implementați programul UNIX uniq care elimină liniile duplicate (identice) consecutive dintr-un fișier, înlocuindu-le cu câte un singur exemplar.

Prelucrări pe liste

Pentru toate problemele de mai jos, încercați atât o abordare iterativă cât și una recursivă.
  1. Scrieți o funcție care ia ca parametri două liste de același tip (de ex. de întregi) și o concatenează pe a doua la prima.
  2. Scrieți o funcție care ia ca parametri două liste de același tip (de ex. de întregi), o inversează pe prima și o concatenează la ea pe a doua.
  3. Scrieți o funcție care ia ca parametru o listă de liste de același tip (de ex. de întregi), și creează o listă care conține toate elementele listelor, puse cap la cap.
  4. Scrieți o funcție care ia ca parametri o listă de întregi și (un pointer la) o funcție void (fără rezultat) cu parametru întreg, și apelează pe rând funcția pentru fiecare element din listă.
  5. Scrieți o funcție care ia ca parametri o listă de întregi și un întreg, și îl adună pe acesta la fiecare element al listei.
  6. Scrieți o funcție care ia ca parametru o listă de întregi și (un pointer la) o funcție întreagă de parametru întreg, apelează pe rând funcția cu toate elementele listei, returnând o listă cu rezultatele.
  7. Scrieți o funcție care ia ca parametru o listă de întregi, și parcurge lista de la cap la coadă, interschimbând două elemente daca primul este mai mare decât al doilea. (Variantă: implementați funcția eficient, rupând și refăcând legăturile doar când s-a găsit locul potrivit pentru elementul curent). Folosiți în mod repetat funcția scrisă pentru a sorta lista cu bubblesort.

Marius Minea
Last modified: Thu Apr 8 07:51:50 EEST 2004