Se consideră o matrice patrata a cu dimensiunea nxn (n impar) si un vector v cu nxn elemente. Numarul n si elementele matricei se citesc de la tastatura. Sa se copieze in vectorul belementele matricei a parcurse 22

  1. linie cu linie

Pentru a copia elementele matricei a în vectorul v parcurgând matricea linie cu linie, putem folosi un algoritm elementar care parcurge fiecare element al matricei și îl copiază în vectorul v la poziția corespunzătoare. Astfel, pentru o matrice de dimensiune n, elementul de pe linia i și coloana j se va afla la poziția (i-1)*n + j-1 în vectorul v.

#include <iostream>

using namespace std;

int main() {

    int n;

    cout << „Introduceti dimensiunea matricei: „;

    cin >> n;

    int a[n][n];

    cout << „Introduceti elementele matricei:\n”;

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            cin >> a[i][j];

        }

    }

    int v[n*n];

    int k = 0; // contor pentru a numara cate elemente am copiat in vectorul v

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            v[k] = a[i][j];

            k++;

        }

    }

    cout << „Elementele copiate in vectorul v sunt:\n”;

    for (int i = 0; i < n*n; i++) {

        cout << v[i] << ” „;

    }

    cout << endl;

    return 0;

}

În acest cod, se citește dimensiunea matricei n și elementele matricei a, se parcurge matricea și se copiază elementele în vectorul v. Ulterior, se afișează elementele copiate în vector.

b) coloană cu coloană

Pentru a copia elementele matricei a în vectorul v coloană cu coloană, putem folosi următorul algoritm:

  1. Parcurgem coloanele matricei, de la stânga la dreapta.
  2. Pentru fiecare coloană, parcurgem elementele sale de sus în jos.
  3. La fiecare element vizitat, copiem valoarea acestuia într-o poziție corespunzătoare din vectorul v, calculată pe baza poziției curente a elementului în matrice
  •  

#include <iostream>

using namespace std;

int main() {

  int n;

  cout << „Introduceti dimensiunea matricei: „;

  cin >> n;

  int a[n][n];

  int v[n*n];

  // Citim elementele matricei

  cout << „Introduceti elementele matricei:\n”;

  for (int i = 0; i < n; i++) {

    for (int j = 0; j < n; j++) {

      cin >> a[i][j];

    }

  }

  // Copiem elementele coloanelor matricei in vectorul v

  int k = 0; // index in vectorul v

  for (int j = 0; j < n; j++) { // parcurgem coloanele

    for (int i = 0; i < n; i++) { // parcurgem elementele coloanei j

      v[k] = a[i][j]; // copiem elementul a[i][j] in v[k]

      k++; // trecem la urmatorul element din vectorul v

    }

  }

  // Afisam elementele vectorului v

  cout << „Elementele vectorului v sunt:\n”;

  for (int i = 0; i < n*n; i++) {

    cout << v[i] << ” „;

  }

  cout << endl;

  return 0;

}

Această soluție poate fi adaptată și pentru a copia elementele matricei linie cu linie, înlocuind parcurgerea coloanelor cu parcurgerea liniilor în bucla exterioară și parcurgerea elementelor liniilor în bucla interioară.

c) în spirală (pornind de la elementul a[0][0] în sens invers trigonometric).

#include <iostream>

using namespace std;

const int MAX = 100;

int main() {

    int n, a[MAX][MAX], b[MAX*MAX], cnt = 0;

    cout << „Introduceti dimensiunea matricei: „;

    cin >> n;

    cout << „Introduceti elementele matricei: \n”;

    for (int i = 0; i < n; i++)

        for (int j = 0; j < n; j++)

            cin >> a[i][j];

    int startRow = 0, endRow = n-1, startCol = 0, endCol = n-1;

    while (startRow <= endRow && startCol <= endCol) {

        for (int i = endCol; i >= startCol; i–)

            b[cnt++] = a[endRow][i];

        for (int i = endRow-1; i >= startRow; i–)

            b[cnt++] = a[i][startCol];

        if (startRow != endRow) {

            for (int i = startCol+1; i <= endCol; i++)

                b[cnt++] = a[startRow][i];

        }

        if (startCol != endCol) {

            for (int i = startRow+1; i < endRow; i++)

                b[cnt++] = a[i][endCol];

        }

        startRow++;

        endRow–;

        startCol++;

        endCol–;

    }

    cout << „Elementele matricei parcurse in spirala sunt: \n”;

    for (int i = 0; i < cnt; i++)

        cout << b[i] << ” „;

    return 0;

    }

Codul dat anteror este o implementare a algoritmului pentru parcurgerea matricei în spirală (în sens invers trigonometric), pornind de la elementul a[0][0].

Inițializăm variabilele rStart (prima linie), rEnd (ultima linie), cStart (prima coloană) și cEnd (ultima coloană) cu valorile 0 și n-1, respectiv, unde n este dimensiunea matricei. Acestea vor fi actualizate de fiecare dată când trecem prin toate elementele corespunzătoare unei linii/coloane.

În while loop, parcurgem elementele matricei în funcție de poziția curentă și direcția de parcurgere. Direcția se schimbă atunci când ajungem la ultimul element al rândului/coloanei curente sau când ajungem la un element deja vizitat. În acest caz, actualizăm și valorile rStart, rEnd, cStart și cEnd.

La fiecare pas, adăugăm elementul curent în vectorul result. După ce am parcurs toate elementele matricei, returnăm vectorul result.

Astfel, implementarea dată permite parcugerea elementelor matricei în spirală, în sens invers trigonometric, și reținerea acestora într-un vector.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *