Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Matrice pătratice în C++. Diagonala principală și secundară

În lecția anterioară am învățat cum funcționează matricele și cum se parcurg.

În această lecție vorbim despre matrice pătratice, un tip particular de matrice.

Ce este o matrice pătratică?

O matrice pătratică este o matrice particulară, cu același număr de linii și de coloane — adică cu n == m. Pentru simplitate, vom menționa doar n-ul, deoarece m-ul are aceeași valoare. Matricea de acest tip are o serie de particularități care se folosesc în anumite probleme.

Diagonala principală și diagonala secundară

Diagonala principală a unei matrice este diagonala care începe din colțul stânga-sus și se termină în colțul dreapta-jos. Mai exact, un element a[i][j] aparține diagonalei principale dacă i == j.

Similar, diagonala secundară este cealaltă diagonală, care începe din colțul dreapta-sus și se termină în cel stânga-jos. Un element a[i][j] aparține diagonalei secundare dacă i + j == n + 1, sau cu alte cuvinte, j == n - i + 1 (unde matricea este indexată de la 1).

În imaginea de mai jos, diagonala principală este cea roșie, diagonala secundară este cea albastră, elementul 4 (din mijloc) aparținând ambelor diagonale.

https://i.ibb.co/1qvhPpb/image.png

Observații

Observăm că o matrice pătratică are n elemente pe diagonala principală și n elemente pe diagonala secundară. Pentru diagonala principală, elementele sunt: a[1][1], a[2][2], a[3][3], …, a[i][i], …, a[n][n]. Pentru diagonala secundară, elementele sunt: a[1][n], a[2][n - 1], a[3][n - 2], …, a[i][n - i + 1], …, a[n][1].

Așadar, avem următorii algoritmi pentru afișarea elementelor de pe cele două diagonale.

Afișarea elementelor de pe diagonala principală în C++

Următorul cod afișează elementele a[i][i], aflate pe diagonala principală:

#include <iostream>

using namespace std;

int n, m, a[101][101]; //n = nr linii, m = nr coloane, a = matricea

int main()
{
    cin >> n >> m; //Citim numărul de linii și de coloane

    //Citim matricea
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            cin >> a[i][j];
        }
    }

    //Afișăm elementele diagonalei principale
    for(int i = 1; i <= n; i++) {
        cout << a[i][i] << " ";
    }
    return 0;
}

Afișarea elementelor de pe diagonala secundară în C++

#include <iostream>

using namespace std;

int n, m, a[101][101]; //n = nr linii, m = nr coloane, a = matricea

int main()
{
    cin >> n >> m; //Citim numărul de linii și de coloane

    //Citim matricea
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            cin >> a[i][j];
        }
    }

    //Afișăm elementele diagonalei secundare
    for(int i = 1; i <= n; i++) {
        cout << a[i][n - i + 1] << " ";
    }
    return 0;
}

Probleme propuse

# Problemă Dificultate
276. Determinare matrice patratica 4 Ușoară (2 )
282. Parcurgere chenar Ușoară (2 )
277. Transpusa Medie (4 )
139. Suma in matrice patratica Ușoară (2 )
274. Determinare matrice patratica 2 Ușoară (2 )
Vrei mai multe probleme? Pe această pagină găsești întreaga listă de probleme propuse.

Alte resurse sau bibliografie

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Verifică dacă un caracter este literă în C++Suma divizorilor unui număr în C++Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Al N-lea termen Fibonacci în C++Transformarea unei litere mici în literă mare în C++Funcții în C++. Ce sunt subprogrameleAria și circumferința unui cerc în C++Prima cifră a unui număr în C++Ce înseamnă endl în C++?Complexitatea unui algoritm (timp și spațiu) în C++Verifică dacă un număr dat este o putere de 2 în C++Instrucțiunea do while (structuri repetitive)Numărul minim de peroane pentru o gară în C++Do while vs while în C++ - Care e diferența?Mediana unui șir de valori în C++Vectorii în C++: citire și afișareCodul ASCII (tabel complet)Maximul și minimul unui vector în C++Aflarea sumei primelor N sume GaussCopiuțe: Cifrele unui numărMaximul și minimul a două valori în C++Căutare binară în C++Cel mai frecvent element dintr-un șir în C++Cum să calculezi instant 2 la puterea N în C++Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăSuma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Inversarea unui șir de caractere în C++Suma 1 + 2 + 3 + ... + N în C++Generarea șirului Fibonacci generalizat în C++Al N-lea termen dintr-o progresie aritmeticăCifra de control a unui numărInstrucțiunea break (structuri repetitive)Afișarea elementelor unui vector recursiv în C++De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicFactorialul unui număr în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleTipul struct în C++. Ce sunt structurile de date neomogeneBordarea unei matrice în C++Inversarea unui vector în C++Transformarea unei litere mari în literă mică în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Oglinditul unui număr în C++Vectori de frecvență (de apariții) în C++Oglinditul recursiv al unui număr în C++Numărul de apariții al unui număr într-un vector în C++Cum să citești și să afișezi în fișiere în C++Transformarea unui număr din baza 10 în baza 2 în C++Cel mai semnificativ bit în C++Cel mai puțin semnificativ bit în C++Valoarea absolută (modulul) unui număr în C++Matrice pătratice în C++. Diagonala principală și secundarăInterclasarea a doi vectori în C++Afișarea divizorilor primi ai unui număr în C++Numărul combinărilor în C++ (formula combinărilor)Verifică dacă o literă este mică sau mare în C++CMMMC a două numere în C++ (cel mai mic multiplu comun)Rădăcina cubică a unui număr în C++ (cube root)Numărul permutărilor în C++ (formula permutărilor)Pointer în C++. Variabile de tipul char * (char steluță)Suma numerelor naturale dintr-un interval dat în C++Distanța dintre două puncte în C++Câte numere naturale sunt într-un interval dat? (C++)Citirea și afișarea matricelor în C++Cum să afișezi partea întreagă a unui număr real în C++Ce este o funcție void în C++?Materia pentru olimpiada de informatică - tot ce trebuie să știiVerifică dacă trei puncte sunt coliniare C++Maximul și minimul a n valori în C++Ciurul lui Eratostene în C++Radicalul unui număr în C++ (rădăcina pătrată)Calculul combinărilor de n luate câte k (nCk) în C++Al N-lea termen dintr-o progresie geometricăȘirul lui Fibonacci în C++Interschimbarea a două variabile în C++ (3 metode)Numărul aranjamentelor în C++ (formula aranjamentelor)Operații cu numere mari în C++ - Toate funcțiile explicateVerifică dacă un număr este par sau impar fără modulo în C++Verifică dacă un număr aparține șirului Fibonacci în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Cel mai mic număr cu suma cifrelor N în C++Vectorii în C++: declarare și parcurgereNumărul de divizori primi ai unui număr în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Recursivitate în C++Numărul de divizori al unui număr în C++Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Verificarea unui an bisect în C++Verificare dacă șir de caractere este palindrom în C++Instrucțiunea for (structuri repetitive)Citește un șir de caractere cu spații în C++Verificare număr prim în C++ (Clasa a IX-a)Verificare dacă un număr este palindrom în C++Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorAria unui triunghi folosind coordonatele acestora în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Combinatorică în C++: permutări, aranjamente, combinări și alteleCea mai lungă secvență de elemente crescătoare în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortMaximul și minimul a trei valori în C++Verifică dacă un caracter este cifră în C++Șiruri de caractere în C++. Tot ce trebuie să știiCe este o variabilă unsigned în C++?Tipuri de date în C++: numere întregi, reale, caractere și alteleTutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Află secolul unui an citit de la tastatură în C++Cifra maximă a unui număr recursiv în C++CMMDC recursiv a două numere naturale în C++Cifra maximă și minimă a unui număr în C++Structuri repetitive (while, do while, for, etc)Numere triunghiulare. Verificarea unui număr triunghiularIndicatorul lui Euler în C++Ce înseamnă variabilă globală și locală în C++?Numărul de cifre ale factorialului unui numărInstrucțiunea continue (structuri repetitive)Divide et Impera (metodă de programare C++)Instrucțiunea de decizie în C++: if, else, switch, caseSuma elementelor unui vector recursiv în C++Verifică dacă o literă este vocală în C++Instrucțiunea while (structuri repetitive)Transformarea unui număr din baza 2 în baza 10 în C++Comentarii în C++Cel mai mare divizor comun (CMMDC) a două numere în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont