Извеждане на матрици***

Напишете програма, която създава следните квадратни матрици и ги извежда на екрана във форматиран вид. Размерът на матриците се въвежда от конзолата. Пример за (4,4):

clip_image021_thumb5

Задачата е взета от книгата „Въведение в Java“. Книгата е много добра за въведение в програмиране, има и други интересни задачи.

Публикувано в 11а, 11в с етикети . Постоянна връзка.

2 Responses to Извеждане на матрици***

  1. dreanor каза:
    #include <cstdlib>
    #include <iostream>
    #include <iomanip>
    #define dolu 1
    #define dqsno 2
    #define gore 3
    #define lqwo 4
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int a;
        cout<<"Strana na kwadratnata matrica: ";
        cin>>a;
        int matrix[a][a],r,k,x=1,n=a;
        int r_dqsno=n-1, r_lqwo=0, k_dolu=0, k_gore=n-1;
        int posoka=dolu;
        for (r=0; r<a; r++)
            for (k=0; k<a; k++)
                matrix[r][k]=0;
        while (x<=a*a)
        {
              switch (posoka){
                   case (dolu):  k=k_dolu++;
                                 for ( r=0; r<n; r++ )
                                 if (matrix[r][k]==0)
                                 matrix[r][k]=x++;
                                 posoka=dqsno;
                                 break;
                                               
                   case (dqsno): r=r_dqsno--;
                                 for ( k=0; k<n; k++)
                                 if (matrix[r][k]==0)
                                 matrix[r][k] = x++;
                                 posoka=gore;
                                 break;      
                   
                   case (gore):  k=k_gore--;
                                 for (r=n-1; r>=0; r--)
                                 if (matrix[r][k]==0)
                                 matrix[r][k]=x++;
                                 posoka=lqwo;
                                 break;
                               
                   case (lqwo):  r=r_lqwo++;
                                 for (k=n-1; k>0; k--)
                                 if (matrix[r][k]==0)
                                 matrix[r][k]=x++;
                                 posoka=dolu;
                                 break;
                  }
             
        }
        for ( r=0; r<a;r++)
        {
            for ( k=0; k<a; k++)
            cout<<setw(3)<<matrix[r][k]<<" ";
            cout<<endl;
        }
                
                 
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    

    Решението на четвъртата (спирална) матрица.

    • Данаил каза:

      Браво за решението! И на мен четвъртата матрица най- ми привлече вниманието :-) Помисли има ли решение, при което ще намаляваш началото и краищата на циклите за посоките, така че да не се налага да имаш условна команда и да въртиш празни цикли. Но и това решение е много интересно. Макросите също са добра идея – помагат програмата да е по-ясна и разбираема.

Вашият коментар