Differences

This shows you the differences between two versions of the page.

Link to this comparison view

asc:laboratoare:02 [2023/03/04 10:47]
daniel.dosaru [Recapitulare laborator 1]
asc:laboratoare:02 [2024/02/29 13:28] (current)
giorgiana.vlasceanu [Resurse]
Line 21: Line 21:
  
 Un fișier de cod Python este considerat un **modul**. Pentru a folosi alte module utilizăm ''​import''​ în următoarele modalități:​ Un fișier de cod Python este considerat un **modul**. Pentru a folosi alte module utilizăm ''​import''​ în următoarele modalități:​
-<spoiler Click aici pentru exemple de funcții si import-uri > 
- 
-<code python func_example.py>​ 
-def f(a, b="​world",​ c=0):  
-    print (" "​.join([a,​ b, str(c)])) 
- 
-f("​hello"​) ​                 # hello world 0 
-f("​hello",​ "​lab"​) ​          # hello lab 0 
-f("​hello",​ "​lab",​ 2)        # hello lab 2 
-f("​hello",​ c=2)             # hello world 2 
-f("​hello",​ "​lab",​ c=2)      # hello lab 2 
- 
-</​code>​ 
  
 +<spoiler Click aici pentru exemple de import-uri >
  
 <code python import_example.py>​ <code python import_example.py>​
Line 49: Line 37:
 randint(0,​4) ​       randint(0,​4) ​      
 </​code>​ </​code>​
- 
 </​spoiler>​ </​spoiler>​
  
  
 **Funcțiile** se declară folosind keyword-ul ''​def''​ și nu li se specifică tip de return sau tipuri pentru parametri. Se poate simula supraîncărcarea (overloading) metodelor folosind parametri cu valori implicite. Funcțiile sunt de fapt obiecte. **Funcțiile** se declară folosind keyword-ul ''​def''​ și nu li se specifică tip de return sau tipuri pentru parametri. Se poate simula supraîncărcarea (overloading) metodelor folosind parametri cu valori implicite. Funcțiile sunt de fapt obiecte.
 +
 +<spoiler Click aici pentru exemple de funcții >
 +
 +<code python func_example.py>​
 +def f(a, b="​world",​ c=0): 
 +    print (" "​.join([a,​ b, str(c)]))
 +
 +f("​hello"​) ​                 # hello world 0
 +f("​hello",​ "​lab"​) ​          # hello lab 0
 +f("​hello",​ "​lab",​ 2)        # hello lab 2
 +f("​hello",​ c=2)             # hello world 2
 +f("​hello",​ "​lab",​ c=2)      # hello lab 2
 +
 +</​code>​
 +
 +</​spoiler>​
  
 Construcția **''<​nowiki>​if __name__ == "​__main__"</​nowiki>''​** delimitează '​main'​-ul unui modul. Aceasta nu este obligatorie,​ însă dacă nu e folosită, orice cod cu indentare top level s-ar executa de fiecare dată când fișierul este parsat (ex: când este importat). Construcția **''<​nowiki>​if __name__ == "​__main__"</​nowiki>''​** delimitează '​main'​-ul unui modul. Aceasta nu este obligatorie,​ însă dacă nu e folosită, orice cod cu indentare top level s-ar executa de fiecare dată când fișierul este parsat (ex: când este importat).
Line 459: Line 462:
  
  
-**Task ​0**  - Rulați exemplele task01.py task02.py task03.py task04.py task05.py.+**Task ​1**  - Rulați exemplele task01.py task02.py task03.py task04.py task05.py.
  
-**Task ​1**  - Creați și rulați threaduri urmărind cerințele din fișierul ''​task1.py''​ din scheletul de laborator.+**Task ​2**  - Creați și rulați threaduri urmărind cerințele din fișierul ''​task2.py''​ din scheletul de laborator.
  
-**Task ​2**  - Problema producător-consumator folosind semafoare. +**Task ​3**  - Problema producător-consumator folosind semafoare. 
-      * În task2.py este dată o implementare sumară a clasei Coffee și a unei clase ExampleCoffee. Folosind ca model, clasa ExampleCoffee,​ realizați alte 3 implementări pentru următoarele tipuri de cafea: Espresso, Americano și Cappuccino, care vor trebui să moștenească clasa de bază Coffee.+      * În task3.py este dată o implementare sumară a clasei Coffee și a unei clase ExampleCoffee. Folosind ca model, clasa ExampleCoffee,​ realizați alte 3 implementări pentru următoarele tipuri de cafea: Espresso, Americano și Cappuccino, care vor trebui să moștenească clasa de bază Coffee.
       * CoffeeFactory funcționează ca un producător,​ iar User ca un consumator și vor trebui să realizeze operațiunile de produce și consume, mereu, fără blocaje.       * CoffeeFactory funcționează ca un producător,​ iar User ca un consumator și vor trebui să realizeze operațiunile de produce și consume, mereu, fără blocaje.
       * Implementați toate aceste clase, precum și clasa Distributor,​ care deține un buffer limitat la un număr fix de cafele, precum și de elementele de sincronizare necesare.       * Implementați toate aceste clase, precum și clasa Distributor,​ care deține un buffer limitat la un număr fix de cafele, precum și de elementele de sincronizare necesare.
Line 471: Line 474:
  
  
-**Task ​3**  - Implementați problema filozofilor ​în task3.py.+**Task ​4**  - Implementați problema filozofilor.
     *  Se consideră mai mulți filozofi ce stau în jurul unei mese rotunde. În mijlocul mesei este o farfurie cu spaghete. Pentru a putea mânca, un filozof are nevoie de două bețisoare. Pe masă există câte un bețișor între fiecare doi filozofi vecini. Regula este că fiecare filozof poate folosi doar bețișoarele din imediata sa apropriere. Trebuie evitată situația în care nici un filozof nu poate acapara ambele bețișoare. Comportamentul tuturor filozofilor trebuie să fie identic.     *  Se consideră mai mulți filozofi ce stau în jurul unei mese rotunde. În mijlocul mesei este o farfurie cu spaghete. Pentru a putea mânca, un filozof are nevoie de două bețisoare. Pe masă există câte un bețișor între fiecare doi filozofi vecini. Regula este că fiecare filozof poate folosi doar bețișoarele din imediata sa apropriere. Trebuie evitată situația în care nici un filozof nu poate acapara ambele bețișoare. Comportamentul tuturor filozofilor trebuie să fie identic.
  
Line 488: Line 491:
   * <​html><​a class="​media mediafile mf_pdf"​ href=":​asc:​lab2:​index?​do=export_pdf">​PDF laborator</​a></​html>​   * <​html><​a class="​media mediafile mf_pdf"​ href=":​asc:​lab2:​index?​do=export_pdf">​PDF laborator</​a></​html>​
   * {{.:​lab2-skel.zip|Schelet laborator}}   * {{.:​lab2-skel.zip|Schelet laborator}}
-  ​<​hidden> ​ * {{.:​lab2-sol.zip|Soluție laborator}} ​ </​hidden>​ +<​hidden>​ 
 +  * {{.:​lab2-sol.zip|Soluție laborator}} 
 +</​hidden>​
 ==== Referințe ==== ==== Referințe ====
  
asc/laboratoare/02.1677919646.txt.gz · Last modified: 2023/03/04 10:47 by daniel.dosaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0