<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Clasa_a_VI-a_lec%C8%9Bia_11</id>
	<title>Clasa a VI-a lecția 11 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Clasa_a_VI-a_lec%C8%9Bia_11"/>
	<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Clasa_a_VI-a_lec%C8%9Bia_11&amp;action=history"/>
	<updated>2026-04-19T10:43:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.algopedia.ro/wiki/index.php?title=Clasa_a_VI-a_lec%C8%9Bia_11&amp;diff=14324&amp;oldid=prev</id>
		<title>Bella: /* Transpunere matrice */</title>
		<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Clasa_a_VI-a_lec%C8%9Bia_11&amp;diff=14324&amp;oldid=prev"/>
		<updated>2017-12-18T13:59:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Transpunere matrice&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Lecție =&lt;br /&gt;
 In [http://algopedia.ro/wiki/index.php/Clasa_a_VI-a_isa Pagina principala] gasiti link catre profilul vostru din site-urile de pe care lucram. Asa monitorizez eu activitatea voastra. &lt;br /&gt;
&lt;br /&gt;
== Matrice elemente generale ==&lt;br /&gt;
Matricele sînt asemănătoare cu vectorii, dar cu două dimensiuni (coordonate, poziții) în loc de una. Vectorii se mai numesc și tablouri unidimensionale, iar matricele se mai numesc și tablouri bidimensionale.&lt;br /&gt;
=== Declarare matrice ===&lt;br /&gt;
Matricele se declară similar cu vectorii, însă cu o dimensiune în plus:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;int a[100][500];&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Primul număr, &amp;lt;tt&amp;gt;100&amp;lt;/tt&amp;gt; în cazul nostru, reprezintă numărul de linii al matricei &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt;. Al doilea număr, &amp;lt;tt&amp;gt;500&amp;lt;/tt&amp;gt; în exemplul de mai sus, reprezintă numărul de coloane al matricei &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt;, sau numărul de elemente al fiecărei linii. O matrice poate fi privită ca un vector de vectori. În exemplul de mai sus &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; poate fi privită ca un vector de &amp;lt;tt&amp;gt;100&amp;lt;/tt&amp;gt; de elemente. Fiecare element al acestui vector este, la rîndul lui, un alt vector, de &amp;lt;tt&amp;gt;500&amp;lt;/tt&amp;gt; de elemente. Numărul total de elemente al matricei &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; este &amp;lt;tt&amp;gt;100&amp;lt;/tt&amp;gt; x &amp;lt;tt&amp;gt;500&amp;lt;/tt&amp;gt;, adică &amp;lt;tt&amp;gt;50000&amp;lt;/tt&amp;gt; de elemente întregi.&lt;br /&gt;
&lt;br /&gt;
=== Citire matrice ===&lt;br /&gt;
Cum citim o matrice? Asemănător cu un vector, vom citi mai întîi numărul de linii și numărul de coloane, apoi elementele. Elementele se citesc, în general, de-a lungul liniilor, fiecare linie fiind citită ca un vector:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;fscanf( fin, &amp;quot;%d%d&amp;quot;, &amp;amp;m, &amp;amp;n );&lt;br /&gt;
for ( i = 0; i &amp;lt; m; i++ )&lt;br /&gt;
  for ( j = 0; j &amp;lt; n; j++ )&lt;br /&gt;
    fscanf( fin, &amp;quot;%d&amp;quot;, &amp;amp;a[i][j] );&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scriere matrice ===&lt;br /&gt;
Scrierea este asemănătoare cu citirea, cu mențiunea să avem grijă să tipărim un &amp;lt;tt&amp;gt;&amp;#039;\n&amp;#039;&amp;lt;/tt&amp;gt; la finalul fiecărei linii:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;for ( i = 0; i &amp;lt; m; i++ ) {&lt;br /&gt;
  for ( j = 0; j &amp;lt; n; j++ )&lt;br /&gt;
    fprintf( fout, &amp;quot;%d &amp;quot;, a[i][j] );&lt;br /&gt;
  fprintf( fout, &amp;quot;\n&amp;quot; );&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Căutare element în matrice ===&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;i = j = 0;&lt;br /&gt;
while ( (i &amp;lt; m) &amp;amp;&amp;amp; (a[i][j] != e) ) {&lt;br /&gt;
  j++;&lt;br /&gt;
  if ( j &amp;gt;= n ) {&lt;br /&gt;
    j = 0;&lt;br /&gt;
    i++;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Matrice patratice ==&lt;br /&gt;
O matrice patratica este o matrice in care numarul de  linii este egal cu numarul de coloane ( n = m ). Intr-o matrice patratica vom avea elemente specifice precum cele doua diagonale ale sale, diagonala principala si diagonala secundara, diagonale fata de care vom defini zone ale matricei patratice. &lt;br /&gt;
&lt;br /&gt;
=== Parcurgerea diagonalei principale ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for( i = 0; i &amp;lt; n; i++ ) &lt;br /&gt;
      printf ( &amp;quot;%d  &amp;quot;, a[i][i] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Parcurgerea diagonalei secundare ===&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for (i = 0; i &amp;lt; n; i++ )&lt;br /&gt;
    printf (&amp;quot;%d  &amp;quot;, a[i][n-i-1]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parcurgerea elementelor de deasupra diagonalei principale ===&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for( i = 0; i &amp;lt; n; i++ ) &lt;br /&gt;
  for (j = i + 1; j &amp;lt; n; j++ )&lt;br /&gt;
    printf ( &amp;quot;%d &amp;quot;, a[i][j] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parcurgerea elementelor de sub diagonala principala ===&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for( i = 0; i &amp;lt; n; i++ ) &lt;br /&gt;
  for (j = 0; j &amp;lt; i; j++ )&lt;br /&gt;
    printf ( &amp;quot;%d &amp;quot;, a[i][j] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parcurgerea elementelor de deasupra diagonalei secundare ===&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for ( i = 0; i &amp;lt; n; i++ ) &lt;br /&gt;
  for (j = 0; j &amp;lt; n - i - 1; j++ )&lt;br /&gt;
    printf (&amp;quot;%d &amp;quot;, a[i][j]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Parcurgerea elementelor de sub diagonala secundara ===&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for (i = 0; i &amp;lt; n; i++ ) &lt;br /&gt;
  for ( j = n-i; j &amp;lt; n; j++ )&lt;br /&gt;
    printf ( &amp;quot;%d &amp;quot;, a[i][j] );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Transpunere matrice ===&lt;br /&gt;
Temă în clasă: se dă o matrice pătrată, să se modifice astfel încît în final elementele ei să fie oglindite față de diagonala principală. Diagonala principală e cea care începe în colțul din stînga-sus și se termină în colțul din dreapta-jos. Această operațiune se mai numește si &amp;#039;&amp;#039;transpunere&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;for ( i = 1; i &amp;lt; n; i++ )&lt;br /&gt;
  for ( j = 0; j &amp;lt; i; j++ ) {&lt;br /&gt;
    aux = a[i][j];&lt;br /&gt;
    a[i][j] = a[j][i];&lt;br /&gt;
    a[j][i] = aux;&lt;br /&gt;
  }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Aceeași problemă pentru diagonala secundară. Diagonala secundară e cea care începe în colțul din dreapta-sus și se termină în colțul din stînga-jos&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;for ( i = 0; i &amp;lt; (n - 1); i++ )&lt;br /&gt;
  for ( j = 0; j &amp;lt; (n - i); j++ ) {&lt;br /&gt;
    aux = a[i][j];&lt;br /&gt;
    a[i][j] = a[n - 1 - j][n - 1 - i];&lt;br /&gt;
    a[n - 1 - j][n - 1 - i] = aux;&lt;br /&gt;
  }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Flip si rotatie ===&lt;br /&gt;
==== Flip orizontal ====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for ( l = 0; l &amp;lt; m / 2; l++ )&lt;br /&gt;
  for ( c = 0; c &amp;lt; n; c++ ) {&lt;br /&gt;
     aux = a[l][c];&lt;br /&gt;
     a[l][c] = a[m - 1 - l][c];&lt;br /&gt;
     a[m - 1 - l][c] = aux;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Rotatie orizontala ====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for ( l = 0; l &amp;lt; m; l++ ) {     // pentru fiecare linie in parte ducem ultimul element de pe linie in fata&lt;br /&gt;
  aux = a[l][n - 1];            // salvam ultimul element in aux&lt;br /&gt;
  for ( c = n - 1; c &amp;gt; 0; c-- ) // mutam toate elementele ramase o pozitie la dreapta&lt;br /&gt;
     a[l][c] = a[l][c - 1];&lt;br /&gt;
  a[l][0] = aux;                // punem pe prima pozitie elementul salvat in aux&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Matrice - aplicatii ==&lt;br /&gt;
Continuăm cu exerciții de bază cu matrice, de rezolvat în clasă.&lt;br /&gt;
=== Parcurgerea pe diagonale a unei matrice ===&lt;br /&gt;
Rezolvați problema [http://varena.ro/problema/diagonal diagonal] la vianuarena:&lt;br /&gt;
&lt;br /&gt;
Se citește o matrice pătrată de caractere. Să se afișeze două linii de caractere, fiecare linie conținînd toate caracterele matricei. Prima linie afișată conține caracterele matricei în parcurgerea pe diagonale paralele cu diagonala principală. A doua linie afișată conține caracterele matricei în parcurgerea pe diagonale paralele cu diagonala secundară. Diagonala principală este din coțul stînga sus în colțul dreapta jos. Diagonala secundară este din colțul dreapta sus, în colțul dreapta jos. Atenție! Fișierul de intrare conține numai matricea de caractere, fiecare linie terminîndu-se cu &amp;lt;tt&amp;gt;&amp;#039;\n&amp;#039;&amp;lt;/tt&amp;gt;. Nu se dă &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;, dimensiunea matricei, trebuie să o deduceți. Exemplu:&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| [[Image:matr-parcurg-diag-princ.gif|frame|none|Parcurgerea pe diagonale paralele cu diagonala principală]]&lt;br /&gt;
| [[Image:matr-parcurg-diag-sec.gif|frame|none|Parcurgerea pe diagonale paralele cu diagonala secundară]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;center&amp;gt;Prima linie afișată: &amp;#039;&amp;#039;minejoafkpbglchd&amp;#039;&amp;#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;A doua linie afișată: &amp;#039;&amp;#039;abecfidgjmhknlop&amp;#039;&amp;#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Zoom x 2 ===&lt;br /&gt;
Rezolvați problema [http://varena.ro/problema/zoomx2 zoomx2] la vianuarena:&lt;br /&gt;
&lt;br /&gt;
Se citește o matrice pătrată de caractere. Să se construiască o altă matrice în care fiecare caracter apare de două ori pe orizontală și de două ori pe verticală (zoom ori 2). Exemplu:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:matr-car.gif|frame|none|Matricea inițială]]&amp;lt;/center&amp;gt;&lt;br /&gt;
| [[Image:matr-car-zoom-x2.gif|frame|none|Matricea finală]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Am vorbit despre două variante de implementare: una prin parcurgerea matricei originale, care pentru fiecare element completează patru elemente in matricea finală și a doua variantă care parcurge matricea finală și pentru fiecare element calculează corespondentul în matricea originală.&lt;br /&gt;
&lt;br /&gt;
=== Căutare submatrice în matrice ===&lt;br /&gt;
Rezolvați problema [http://varena.ro/problema/cautare căutare] la vianuarena:&lt;br /&gt;
&lt;br /&gt;
Se dau două matrice pătrate, matricea &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; de dimensiune &amp;lt;tt&amp;gt;m&amp;lt;/tt&amp;gt; și matricea &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt; de dimensiune &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;. Se știe că &amp;lt;tt&amp;gt;1 ≤ n ≤ m ≤ 100&amp;lt;/tt&amp;gt;. Să se spună de cîte ori se regăsește matricea &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt; în matricea &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt;. Exemplu:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-spacing:0;&amp;quot;&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:matr-cautare.gif|frame|none|Matricea a]]&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;[[Image:sablon-cautare.gif|frame|none|Matricea b]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
În acest caz matricea &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt; apare de 13 ori în matricea &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Aplicație: problema joc ==&lt;br /&gt;
Am vorbit despre problema [http://varena.ro/problema/joc1 joc] (ONI 2011 clasa a 7-a), care are o implementare ușoară cu condiția să țineți toate matricele de căutat, inclusiv rotațiile lor, într-un vector de 12 matrice cu elemente zero și unu. Astfel, va trebui să declarați un tablou &amp;#039;&amp;#039;&amp;#039;tridimensional&amp;#039;&amp;#039;&amp;#039; inițializat. Necesită atenție la declararea acestui tablou, dar programul se simplifică. &lt;br /&gt;
Cum declaram aceasta matrice? O vom gandi ca un vector de 12 matrici 3x3 cu componente char. &lt;br /&gt;
char forme[12][3][3];&lt;br /&gt;
Aceasta matrice va trebui initializata, conform figurilor date.&lt;br /&gt;
&lt;br /&gt;
Sa ne reamintim:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
//Initializare vector: elementele vor fi caractere, despartite de virgula, toate elementele incluse in acolade.&lt;br /&gt;
char a[3] = { 1, 0, 0 };&lt;br /&gt;
//Initializare matrice: elementele sunt 3 vectori cu 3 elemente, inclusi intre acolade&lt;br /&gt;
&lt;br /&gt;
char a[3][3]= { { 1, 0, 0 },&lt;br /&gt;
                { 1, 0, 0 },&lt;br /&gt;
                { 1, 1, 1 } }&lt;br /&gt;
//Similar veti declara si matricea tridimensionala: elementele vor fi 12 matrice de 3x3 elemente, incluse intre acolade.&lt;br /&gt;
&lt;br /&gt;
char a[12][3][3]={ &lt;br /&gt;
                 { { 1, 0, 0 },&lt;br /&gt;
                   { 1, 0, 0 },&lt;br /&gt;
                   { 1, 1, 1 } },&lt;br /&gt;
                 ...............&lt;br /&gt;
                 } &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tema =&lt;br /&gt;
* [http://varena.ro/problema/matrix matrix] &lt;br /&gt;
* Terminați problemele: [http://varena.ro/problema/diagonal diagonal], [http://varena.ro/problema/zoomx2 zoomx2], [http://varena.ro/problema/cautare căutare] &lt;br /&gt;
* [http://varena.ro/problema/joc1 Joc1] dată la ONI 2011 clasa a 7-a. &lt;br /&gt;
* Probleme cu parcurgerea matricelor patratice din pbinfo, dar dupa ce ati terminat problemele de mai sus, cate probleme puteti.&lt;br /&gt;
Optional 2&lt;br /&gt;
* [http://varena.ro/problema/cartier Cartier] - ONI 2012 clasa a 6-a.&lt;/div&gt;</summary>
		<author><name>Bella</name></author>
	</entry>
</feed>