This shows you the differences between two versions of the page.
programare:laboratoare:lab06 [2018/11/05 14:38] george.pirtoaca [Matrice. Operaţii cu matrice: adunare, înmulţire. Reprezentarea în memorie.] |
programare:laboratoare:lab06 [2021/10/24 14:14] (current) andrei.traistaru99 [Exerciţii de Laborator] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Matrice. Operaţii cu matrice: adunare, înmulţire. Reprezentarea în memorie. ===== | ===== Matrice. Operaţii cu matrice: adunare, înmulţire. Reprezentarea în memorie. ===== | ||
- | **Responsabil:** [[andrei.parvu@cti.pub.ro|Andrei Pârvu]] | + | **Responsabili:** |
+ | * [[neatudarius@gmail.com|Darius Neațu (CA 2019-2020)]] | ||
+ | * [[ion_dorinel.filip@cti.pub.ro|Dorinel Filip (CA 2019-2020)]] | ||
+ | * [[andrei.parvu@cti.pub.ro|Andrei Pârvu]] | ||
[[https://docs.google.com/document/d/16GNacxqmnRjaBx7w8tt9rRprbpiOjx8njzIrv4Q0mI0/edit?usp=sharing|Probleme]] | [[https://docs.google.com/document/d/16GNacxqmnRjaBx7w8tt9rRprbpiOjx8njzIrv4Q0mI0/edit?usp=sharing|Probleme]] | ||
Line 292: | Line 295: | ||
**Următoarele două probleme vă vor fi date de asistent în cadrul laboratorului.** | **Următoarele două probleme vă vor fi date de asistent în cadrul laboratorului.** | ||
- | [[https://drive.google.com/drive/u/1/folders/1qB6EZLGVubKbuTXMtMue06egH_8fo25M|Checker laborator 6]] | + | [[https://drive.google.com/file/d/1u5l6ouDLRZ5WGrG8YV-iHYXqo3S6aRu9/view?usp=sharing|Checker laborator 6]] |
[[ https://ocw.cs.pub.ro/courses/programare/checker | Tutorial folosire checker laborator ]] | [[ https://ocw.cs.pub.ro/courses/programare/checker | Tutorial folosire checker laborator ]] | ||
- | [[https://drive.google.com/open?id=0B0KdZmf314eIdzQtWlM0VURmUTg | Teste problema 1]] | ||
- | [[https://drive.google.com/open?id=0B0KdZmf314eIdjV4VDlhUGZFdEE | Teste problema 2]] | ||
Line 391: | Line 392: | ||
===== Exerciţii de Laborator ===== | ===== Exerciţii de Laborator ===== | ||
+ | * **Exercitiul 1 [2 pct]:** Citiți de la tastatură o matrice (puteți hardcoda dimensiunea maximă a matricei). Afișați matricea transpusă. | ||
+ | <code> | ||
+ | Exemplu: | ||
- | - Scrieţi un program pentru înmulţirea a două matrice, dacă aceasta este posibilă. Va trebui să implementaţi două funcţii:\\ | + | Input: 2 4 // număr de linii urmat de număr de coloane din matrice |
- | * [1p] una pentru citirea unei matrice într-un tablou bidimensional, dat ca parametru. | + | 1 2 3 4 |
- | * [2.5p] una care să realizeze efectiv înmulţirea a două matrice. | + | 5 6 7 8 |
- | - [1.5p] Scrieţi un program care ridică o matrice patratică cu n linii şi n coloane la puterea p, cu p număr întreg pozitiv. | + | |
- | - [2p] Scrieți un program care citeste o matrice si indicele unei coloane a acesteia și afișează cele două diagonale care pornesc de pe linia 0 și indicele coloanei respective. Valorile elementelor aflate pe diagonale vor fi inlocuite cu 0.\\ Exemplu: <code> | + | |
- | 3 4 1 | + | |
- | 1 2 3 4 | + | |
- | 3 4 5 6 | + | |
- | 6 7 8 9 | + | |
- | 1 0 3 4 | + | Output: 1 5 |
- | 3 4 0 6 | + | 2 6 |
- | 6 7 8 0 | + | 3 7 |
+ | 4 8 | ||
+ | </code> | ||
+ | * **Exercitiul 2 [2 pct]:** Citiți de la tastatură 2 matrice (puteți hardcoda dimensiunea maximă a matricelor) – prima matrice numită în continuare A, iar a doua B. Determinați dacă este posibilă operația de înmulțire de matrice folosind drept operanzi cele două matrice. Determinați toate rezultatele posibile și afișati-le la consolă, precizând ordinea în care s-au înmulțit operanzii. Dacă nu se poate efectua nicio operație de înmulțire, afișați mesajul „Nu se poate efectua operatia de inmultire cu aceste matrice!”. | ||
+ | <code> | ||
+ | Exemplu: | ||
+ | |||
+ | Input: 2 2 // număr de linii urmat de număr de coloane din matricea A | ||
+ | 1 2 | ||
+ | 3 4 | ||
+ | 2 2 // număr de linii urmat de număr de coloane din matricea B | ||
+ | 5 6 | ||
+ | 7 8 | ||
+ | |||
+ | Output: A * B | ||
+ | 19 22 | ||
+ | 43 50 | ||
- | 1 0 3 4 | + | B * A |
- | 0 4 5 6 | + | 23 34 |
- | 6 7 8 9 | + | 31 46 |
</code> | </code> | ||
- | - [3p] Fie două matrice $A$ si $B$. Să se afișeze toate perechile $(A', B')$, unde $A'$ este submatrice a lui $A$ și $B'$ este submatrice a lui $B$, în care suma elementelor din $A'$ este egală cu suma elementelor din $B'$. Submatricele $A'$ si $B'$ trebuie să aibă cel puțin 2 linii și 2 coloane.\\ Exemplu: <code> | + | * **Exercitiul 3 [2 pct]:** Folosind logica funcției implementată anterior, implementați operația de ridicare la putere a unei matrice. Citiți de la consolă matricea, respective puterea la care trebuie ridicată matricea. Afișați la consolă rezultatul obținut sau mesajul “Operatie invalida” in caz contrar. |
- | 3 4 // matricea A | + | <code> |
- | 3 2 1 3 | + | Exemplul 1: |
- | 6 5 2 3 | + | |
- | 5 3 2 1 | + | |
- | 4 3 // matricea B | + | |
- | 2 3 3 | + | |
- | 4 1 2 | + | |
- | 5 3 2 | + | |
- | 2 7 6 | + | |
- | // Rezultat sub forma (linie stanga sus, coloana stanga sus, linie dreapta jos, coloana dreapta jos) | + | Input: 2 2 // număr de linii urmat de număr de coloane din matrice |
- | (0, 0, 1, 3), (0, 0, 2, 2) | + | 1 2 |
- | (0, 0, 1, 3), (2, 0, 3, 2) | + | 3 4 |
- | (0, 1, 1, 2), (0, 0, 1, 1) | + | 3 // puterea la care trebuie ridicată matricea anterioară |
- | (0, 1, 2, 2), (0, 0, 1, 2) | + | |
- | (0, 1, 2, 3), (1, 0, 3, 1) | + | |
- | (0, 2, 1, 3), (0, 1, 1, 2) | + | |
- | (1, 0, 2, 3), (0, 0, 3, 1) | + | |
- | (1, 0, 2, 3), (0, 1, 3, 2) | + | |
- | (1, 2, 2, 3), (1, 1, 2, 2) | + | |
+ | Output: 37 54 | ||
+ | 81 118 | ||
+ | |||
+ | Exemplul 2: | ||
+ | |||
+ | Input: 2 3 // număr de linii urmat de număr de coloane din matrice | ||
+ | 1 2 3 | ||
+ | 4 5 6 | ||
+ | 3 // puterea la care trebuie ridicată matricea anterioară | ||
+ | |||
+ | Output: Operatie invalida | ||
</code> | </code> | ||
- | BONUS: | + | * **Exercitiul 4 [2 pct]:** Citiți o matrice pătratică de la tastatură. Intersecția diagonalelor matricei, formează 4 zone „triunghiulare” în matrice. Implementați o funcție care primește ca parametru o matrice pătratică și dimensiunea laturii acesteia și afișează elementele aflate în triunghiul superior. |
- | - [2p] Dându-se o matrice $A$ de dimensiune $N * M$ să se sorteze diagonalele acesteia, utilizând un algoritm de bubble-sort. \\ Exemplu: <code> | + | <code> |
- | 4 3 | + | Exemplul 1: |
- | 5 6 3 | + | |
- | 3 4 5 | + | Input: 4 // dimensiunea laturii matricei |
- | 2 7 4 | + | 1 2 3 4 |
- | 5 1 1 | + | 5 6 7 8 |
+ | 9 0 1 2 | ||
+ | 3 4 5 6 | ||
+ | |||
+ | Output: 1 2 3 4 | ||
+ | 6 7 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Exemplul 2: | ||
+ | |||
+ | Input: 3 // dimensiunea laturii matricei | ||
+ | 1 2 3 | ||
+ | 4 5 6 | ||
+ | 7 8 9 | ||
+ | |||
+ | Output: 1 2 3 | ||
+ | 5 | ||
+ | </code> | ||
+ | * **Exercitiul 5 [2 pct]:** Se citesc două matrice de la tastatură. Verificați dacă a doua matrice este submatrice a primei matrice. | ||
+ | <code> | ||
+ | Exemplul 1: | ||
+ | |||
+ | Input: 2 2 // număr de linii urmat de număr de coloane din matricea A | ||
+ | 1 2 | ||
+ | 3 4 | ||
+ | |||
+ | 2 2 // număr de linii urmat de număr de coloane din matricea B | ||
+ | 5 6 | ||
+ | 7 8 | ||
+ | |||
+ | Output: Fals | ||
+ | |||
+ | Exemplul 2: | ||
+ | |||
+ | Input: 2 2 // număr de linii urmat de număr de coloane din matricea A | ||
+ | 1 2 | ||
+ | 3 4 | ||
+ | |||
+ | 3 3 // număr de linii urmat de număr de coloane din matricea B | ||
+ | 5 6 4 | ||
+ | 1 2 5 | ||
+ | 3 4 6 | ||
+ | |||
+ | Output: Adevarat | ||
+ | </code> | ||
+ | * **Bonus [2 pct]:** CSe citește o matrice A de la tastatură. Afișați la consolă o matrice B cu proprietatea că B[i][j] = max(A[0..i][0..j]), unde max(A[0..i][0..j]) înseamnă elementul maxim din submatricea A care are colțul stânga – sus în A[0][0] și colțul dreapta – jos în A[i][j]. | ||
+ | <code> | ||
+ | Exemplu: | ||
+ | |||
+ | Input: 3 4 // număr de linii urmat de număr de coloane din matricea A | ||
+ | 1 2 5 2 | ||
+ | 6 3 9 8 | ||
+ | 4 0 4 5 | ||
+ | |||
+ | Output: 1 2 5 5 | ||
+ | 6 6 9 9 | ||
+ | 6 6 9 9 | ||
- | // Rezultat | ||
- | 4 5 3 | ||
- | 1 4 6 | ||
- | 1 3 5 | ||
- | 5 2 7 | ||
</code> | </code> | ||
<hidden> | <hidden> | ||
===== Soluții ===== | ===== Soluții ===== | ||
- | {{:programare:laboratoare:6-solutions.zip|}} | + | |
</hidden> | </hidden> | ||
+ | |||
+ | ===== Referinţe ===== | ||
+ | * [[https://github.com/cs-pub-ro/ComputerProgramming/blob/master/Laboratories/Lab6/Lab6.pdf | Cheatsheet matrici]] | ||
+ |