Differences

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

Link to this comparison view

sd-ca:laboratoare:lab-05 [2020/03/19 17:04]
teodor_adrian.mirea [Schelet]
sd-ca:laboratoare:lab-05 [2024/03/31 21:07] (current)
andrei.pirlea [Interviu]
Line 2: Line 2:
  
 Responsabili:​ Responsabili:​
-   * [[mailto:rares96cheseli@gmail.com|Rareș Cheșeli]] +  ​* [[mailto:andreipirlea03@gmail.com|Andrei Pîrlea]] 
-   ​* [[mailto:amirea99@gmail.com|Adrian Mirea]]+  * [[mailto:popaiarina13@gmail.com|Iarina-Ioana Popa]]
  
  
Line 35: Line 35:
 O stivă poate fi implementată cu ajutorul unui **vector** sau cu **liste înlănțuite**. O stivă poate fi implementată cu ajutorul unui **vector** sau cu **liste înlănțuite**.
  
-În cadrul acestui laborator, ne vom concentra asupra implementării unei stive cu ajutorul unui vector de stocare+În cadrul acestui laborator, ne vom concentra asupra implementării unei stive cu ajutorul unui liste înlănțuite
  
 ==== Reprezentare internă cu vector ==== ==== Reprezentare internă cu vector ====
Line 128: Line 128:
         EROARE: forma postfixată nu este corectă         EROARE: forma postfixată nu este corectă
 </​code>​ </​code>​
 +
 +
 +=== Exemplu de utilizare in sistemele de operare ===
 +
 +Sistemele de operare folosesc conceptul de stiva pentru rularea oricarui program prin ceea ce se numeste call stack.
 +Acesta este un mecanism care tine evidenta functiilor care se executa la un moment de timp. Call stack-ul
 +va fi populat cu stack frame-uri, fiecare functie avand propriul frame ce se va distruge la terminarea executiei acesteia.
 +Fiecare frame va stoca mai multe informatii necesare rularii programului precum parametri primiti de functie, variabile locale
 +si adresa de return.
 +La fiecare apel de functie, inainte de a executa codul respectivei functii, procesorul salveaza pe stiva
 +adresa urmatoarei instructiuni de dupa acel apel, astfel incat, la terminarea functiei, sa poata relua executia din punctul corect.
  
 ===== Coadă (Queue) ===== ===== Coadă (Queue) =====
Line 171: Line 182:
   * //int is_full(struct Queue *queue)// - se verifică dacă următorul index după **tail** (circular) este egal cu **head**. Dacă da, returnează //​1//, ​ returnează //0// în caz contrar. Complexitate:​ O(1)   * //int is_full(struct Queue *queue)// - se verifică dacă următorul index după **tail** (circular) este egal cu **head**. Dacă da, returnează //​1//, ​ returnează //0// în caz contrar. Complexitate:​ O(1)
  
 +
 +=== Exemplu de utilizare a unei cozi (circulare) ===
 +
 +Conceptul de CPU scheduling se refera la ordinea in care procesele noastre ruleaza. Deoarece avem mai multe procese decat core-uri,
 +trebuie sa stabilim un algoritm care ghideaza planificarea aceasta: cat timp unele vor rula, altele isi vor astepta randul.
 +Cel mai simplu mecanism de acest tip este folosirea este folosirea unei cozi (circulare),​ in care toate procesele sunt tratate cu
 +aceeasi prioritate si se executa in ordinea in care au fost introduse in coada. Spunem despre acest tip de algoritm ca este de tip
 +[[https://​www.guru99.com/​round-robin-scheduling-example.html|Round Robin]].
 +
 +Pasii sunt urmatorii:
 +Lansam un proces. El este adaugat in coada si primeste o cuanta de timp de nivelul ms (cat timp are voie sa ruleze).
 +Cand se elibereaza un loc pe procesor, se face dequeue, iar procesul scos din coada va rula. Daca isi consuma toata cuanta
 +de timp si inca nu si-a terminat toate instructiunile,​ este adaugat inapoi in coada, i se reseteaza cuanta si isi asteapta randul.
 + 
  
 ===== Alte tipuri de coadă ===== ===== Alte tipuri de coadă =====
Line 304: Line 329:
  
 ===== Schelet ===== ===== Schelet =====
- +<note important>​ 
-{{:​sd-ca:​laboratoare:​schelet_laborator05_stackqueue.zip|}} +Daca folositi **Github Classroom**,​ va rugam sa va actualizati scheletul cu cel de mai jos. Cel din repo-ul clonat initial nu este la cea mai recenta versiune. 
- +</​note>​ 
 +{{:​sd-ca:​laboratoare:​sda_lab5.zip|Scheletul de laborator}}
 ===== Exerciţii ===== ===== Exerciţii =====
  
 <​note>​ <​note>​
-Fiecare laborator va avea unul sau doua exerciții publice si un pool de subiecte ascunsedin care asistentul poate alege cum se formeaza celelalte puncte ale laboratorului. +Trebuie să vă creați cont de [[https://​lambdachecker.io | Lambda Checker]]dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestruluiAveti grija sa selectati contestul corect la submit, si anume **[[https://​beta.lambdachecker.io/​contest/​31 |SD-CA-LAB-04 Stiva si Coada]]**
- +
-Atenție! Pentru acest laborator asistentul poate înlocui exercițiile publice complet.+
 </​note>​ </​note>​
  
  
-1) [**3p**] Implementați,​ plecând de la scheletul de cod, stiva.+1) [**3p**] Implementați,​ plecând de la scheletul de cod, stiva. ​**Atenție!** În implementarea stivei se va folosi **lista simplu înlănțuită** detaliată în secțiunea de mai sus. (problema **Stack Implementation** pe LambdaChecker)
  
-2) [**3p**] Implementați,​ plecând de la scheletul de cod, coada.+2) [**3p**] Implementați,​ plecând de la scheletul de cod, coada. ​**Atenție!** Implementarea are la baza un **vector circular** despre care puteți citi mai multe în secțiunea de mai sus. (problema **Queue Implementation** pe LambdaChecker)
  
-3) [**1p**] ​Determinați dacă un șir format din caracterele ''​('',​ ''​['',​ ''​{'',​ ''​)'',​ ''​]'',​ ''​}''​ este corect parantezat.+3) [**1p**] ​Rezolvati problema **Lucrări**. O veti gasi pe LambdaChecker in contestul Laborator 5 SD.
  
 +(**Bonus**) [**2p**] Implementați operațiile elementare ale unei stive folosind două cozi. Problema admite două versiuni: una în care operația pop este eficientă, iar cealaltă în care operația push este eficientă. (pentru a primi punctajul, implementați soluția local, apoi urcați codul pe GitHub)
 +
 +<​hidden>​
 4) [**1p**] Verificați dacă un număr este palindrom folosind un deque. 4) [**1p**] Verificați dacă un număr este palindrom folosind un deque.
 +</​hidden>​
  
 ===== Interviu ===== ===== Interviu =====
Line 340: Line 366:
   - Cum s-ar implementa o stivă folosind o coadă de priorități?​   - Cum s-ar implementa o stivă folosind o coadă de priorități?​
   - De câte cozi este nevoie ca să se poată implementa o coadă de priorități?​   - De câte cozi este nevoie ca să se poată implementa o coadă de priorități?​
 +  - Rezolvati problema Turnurilor din Hanoi.
  
 ===== Bibliografie ===== ===== Bibliografie =====
sd-ca/laboratoare/lab-05.txt · Last modified: 2024/03/31 21:07 by andrei.pirlea
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