Differences

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

Link to this comparison view

asc:laboratoare:02 [2022/04/02 18:38]
stefan_dan.ciocirlan [Exerciții]
asc:laboratoare:02 [2024/02/29 13:28] (current)
giorgiana.vlasceanu [Resurse]
Line 22: Line 22:
 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:​
  
-**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 import-uri >
  
-Construcția **''​<nowiki>if __name__ == "​__main__"</​nowiki>''​** delimitează '​main'​-ul unui modulAceasta 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).+<code python import_example.py> 
 +import random 
 +random.randint(0,4        # trebuie specificat numele modulului
  
-<spoiler Click aici pentru exemple de funcții ​si import-uri ​>+import random as rand       # folosire alias pentru numele modulului 
 +rand.randint(0,​4) ​          # trebuie specificat alias-ul 
 + 
 +from random import *        # import tot continutul modulului 
 +randint(0,​4) ​               # nu mai trebuie specificat numele modulului 
 + 
 +from random import randint ​ # import doar randint 
 +randint(0,​4) ​       
 +</​code>​ 
 +</​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. 
 + 
 +<spoiler Click aici pentru exemple de funcții >
  
 <code python func_example.py>​ <code python func_example.py>​
Line 40: Line 56:
 </​code>​ </​code>​
  
 +</​spoiler>​
  
-<code python import_example.py> +Construcția **''​<nowiki>if __name__ == "​__main__"</​nowiki>''​** delimitează '​main'​-ul unui modulAceasta 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).
-import random +
-random.randint(0,4)         # trebuie specificat numele modulului +
- +
-import random as rand       # folosire alias pentru numele modulului +
-rand.randint(0,4)           # trebuie specificat alias-ul+
  
-from random import *        # import tot continutul modulului 
-randint(0,​4) ​               # nu mai trebuie specificat numele modulului 
- 
-from random import randint ​ # import doar randint 
-randint(0,​4) ​       
-</​code>​ 
- 
-</​spoiler>​ 
  
 ===== Ce este un thread? ===== ===== Ce este un thread? =====
Line 177: Line 181:
  
 <note important>​ <note important>​
-Crearea unui obiect Thread nu pornește execuția thread-ului. ​Acestu ​lucru se întâmplă doar după apelul metodei **//​start()//​**.+Crearea unui obiect Thread nu pornește execuția thread-ului. ​Acest lucru se întâmplă doar după apelul metodei **//​start()//​**.
 </​note>​ </​note>​
  
Line 458: 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 470: 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 487: 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}}   * {{.:​lab2-sol.zip|Soluție laborator}}
 +</​hidden>​
 ==== Referințe ==== ==== Referințe ====
  
asc/laboratoare/02.1648913906.txt.gz · Last modified: 2022/04/02 18:38 by stefan_dan.ciocirlan
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