Webmaster общности: Predpriemach.com | SearchEngines.bg

    Двумерни масиви в C++

    Безплатни C# уроци

    Автор: IzKuFeLiQqQqQ

    В този урок ще ви покажа как се декларират, инициализират и извеждат двумерни масиви в c++ и как да се работи с тях и диагоналите им. Работната среда, която използвам е Dev C++!
    Чрез двумерния масив също така се нарича матрица която има зададени колони(в някои учебници може да го срещнете като „стълб“) и редове.
    Има два вида матрица:

    1.Квадратна матрица където колоните са равни на редовете
    2.Правоъгълна матрица където колоните НЕ са равни на редовете
    Ето какво представлява квадратна матрица с 4 колони и 4 реда:

    А правоъгълна матрица с 3 колони и 4 реда изглежда така:

    Не забравяйте, че в всички програмни езици броенето започва от 0 а не от 1!

    Декларирането на двумерен масив става по следния начин:

    int a[m][n];

    като „m“ са колоните, а „n“ редовете в нашата матрица, като стойностите им са зададени в програмата

    int m = 3,n = 4;//3 колони с по 4 реда

    или са въведете чрез оператора cin

    int m,n;
    cin>>m>>n;

    Инициализацията(задаването на стойности) става по 2 начина:

    1.В самата програма, като фрагмент от кода:
    a)Първин начин – деклариране и инициализация в едно:

    int a[3][4]={
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
    };//3 колони с по 4 реда

    b)Втори начин – деклариране и след това инициализация на всека колона с ред:

    int a[3][4];//3 колони с по 4 реда
    a[0][0] = 1;
    a[0][1] = 2;
    a[0][2] = 3;
    a[0][3] = 4;
    a[1][0] = 5;
    a[1][1] = 6;
    a[1][2] = 7;
    a[1][3] = 8;
    a[2][0] = 9;
    a[2][1] = 10;
    a[2][2] = 11;
    a[2][3] = 12;

    Като след въвеждането на тези стойности матрицата ще изглежда така

    2.Въведени чрез оператора cin и 2 цикъла с брояч(for):

    int a[m][n];//Като сте задали стойности на m и n
    for(int i=0;i<n;i++) {//Първия цикъл ВИНАГИ е за редовете...
    for(int j=0;j<m;j++) {//...а втория за колоните!
    cout<<"a["<<i<<"]["<<j<<"]=";
    cin>>a[i][j];
    }
    }

    Извеждането на стойностите има става по този начин:

    1.Извеждане на стойноста на точно определени колона и ред

    cout<<a[1][2];//Това ще изведе стойноста на 3-рия ред от 2-рата колона

    2.Извеждане на стойностите на всички колони и редове

    for(int i=0;i<n;i++) {//Първия цикъл ВИНАГИ е за редовете...
    for(int j=0;j<m;j++) {//...а втория за колоните!
    cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
    }
    }

    Диагонали в квадратната матрица:

    1.Главен диагонал

    Примерни задачи по главния диагонал:
    Намиране на сбора на елементите по главния диагонал.
    Както забелязвате в таблицата по-горе номера на колоната и номера на реда по диагонала са еднакви, тоест в проверката ще проверяваме дали No.колона==No.ред.
    Ето и цялото решение на задачата

    #include<iostream.h>
    #include<conio.h>
    int main() {
    int n;
    double Sbor=0;
    cout<<"n=";
    cin>>n;//въвеждаме броя на колони и редове
    int a[n][n];
    for(int i=0;i<n;i++) {//започваме циклите за въвеждане на стойности
    for(int j=0;j<n;j++) {
    cout<<"a["<<i<<"]["<<j<<"]=";
    cin>>a[i][j];
    if(i==j) Sbor = Sbor + a[i][j];//проверяваме дали No.колона==No.ред и ако да добавяме ст-ста на елемента към общия сбор
    }
    }
    cout<<"Sbor="<<Sbor;
    getch();
    return 0;
    }

    Намиране на сбора на елементите НАД главния диалонал.
    Както забелязвате в таблицата по-горе No.колона винаги е по-малък от No.реда, тоест проверката ще е No.колона < No.реда.
    За да не пишем излишен текст и код можете просто да вземете кода от горната задача, като само промените проверката от

    if(i==j)

    на

    if(i<j)

    Намиране на сбора на елементите Под главния диалонал.
    Погледнете в таблицата по-горе… No.колона винаги е по-голям от No.реда, тоест тук вече проверката ще е No.колона > No.реда.
    Вземете кода от първата задача и променете проверката от

    if(i==j)

    на

    if(i>j)

    и сте готови

    2.Второстепенен(втори главен) диагонал

    Примерни задачи по второстепенния диагонал:
    Намиране на сбора на елементите по второстепения диагонал.
    Както виждате в таблицата за втория главен диагонал по-горе сбора на No.колона и No.ред е равен на зададения брой колони и редове, тоест проверката ще е No.колона + No.реда == броя(n) – 1(защото започва да брои от 0)

    #include<iostream.h>
    #include<conio.h>
    int main() {
    int n;
    double Sbor=0;
    cout<<"n=";
    cin>>n;
    int a[n][n];
    for(int i=0;i<n;i++) {
    for(int j=0;j<n;j++) {
    cout<<"a["<<i<<"]["<<j<<"]=";
    cin>>a[i][j];
    if(i+j==n-1) Sbor = Sbor + a[i][j];
    }
    }
    cout<<"Sbor="<<Sbor;
    getch();
    return 0;
    }

    Намиране на сбора на елементите НАД второстепения диагонал.
    Както виждате в таблицата за втория главен диагонал по-горе сбора на No.колона е по-малък от общия брой – No.ред – 1 е равен на зададения брой колони и редове, тоест проверката ще е No.колона < броя(n) No.ред – 1.
    За да спестим място вземете кода от горната задача и променете проверката от

    if(i+j==n-1)

    на

    if(i+j<n-1)

    Намиране на сбора на елементите ПОД второстепения диагонал.
    Както виждате в таблицата за втория главен диагонал по-горе сбора на No.колона е по-голям от общия брой – No.ред – 1 е равен на зададения брой колони и редове, тоест проверката ще е No.колона > броя(n) No.ред – 1.
    За да спестим място вземете кода от по-по-горната задача и променете проверката от

    if(i+j==n-1)

    на

    if(i+j>n-1)

    Останалите задачи се създават по същатата логика!

    Ето това беше, дано съм ви бил полезен! При проблеми или въпроси пишете във форума на web-tourist и някой ще Ви помогне.

    Урока е авторски и забранявам копирането му в други сайтове без разрешение!!!