sexta-feira, 9 de agosto de 2019

C# - Jagged array ( arrays irregulares )

Uma matriz bidimensional pode ser quadrática ou retangular,
sendo retangular na horizontal ou vertical.
Uma matriz 5 X 5 é quadrática, e uma matriz 2 X 5,
é retangular horizontal, e uma matriz 5 X 2 é retangular vertical.
Mas e se precisássemos de uma matriz com tamanhos
diferentes para as linhas? O compilador não aceita
tamanhos diferentes numa matriz bidimensional,
Felizmente foi criado o Jagged Arrays,
que aceita tamanhos diferentes para as linhas.
Para declarar um jagged array, basta colocar um par de colchetes
abrindo e fechando logo depois do primeiro par de colchetes,
definindo o total de linhas no primeiro par de colchetes,
O segundo par de colchetes precisa está em branco,
porque o total de itens em cada linha são diferentes.
Depois de sua clássica declaração um jagged array deve ser
inicializado com o total de elementos definido para cada linha.
A leitura de um jagged array é feita com loops for aninhado,
onde o primeiro faz a leitura de cada linha,
e o segundo a leitura dos elementos de cada linha,
mas seus elementos também podem ser acessados individualmente,
informando a linha e a coluna com o nome dado a matriz.
Aqui está um bom exemplo de arrays irregulares em C#.


Veja abaixo uma imagem do programa em execução:

 
Veja abaixo o código do programa:


using System.Collections;

class Arr {
    /*============================================================*/
    void Informe ( ) {
        Console.BackgroundColor = ConsoleColor.White;
        Console.SetCursorPosition ( 20, 16 );
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Write ( "Por: " );
        Console.SetCursorPosition ( 25, 16 );
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.Write ( "Samuel Lima" );
        Console.SetCursorPosition ( 20, 17 );
        Console.ForegroundColor = ConsoleColor.Black;
        Console.Write ( "sa_sp10@hotmail.com" );
        Console.SetCursorPosition ( 30, 19 );
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Write ( "MUITO OBRIGADO" );
    }
    /*============================================================*/
    void Moldura ( int tam_lin_ini, int tam_lin_fim, int tam_ini_col,
        int tam_fim_col ) {
        int i, c;
        for ( i = tam_lin_ini; i < tam_lin_fim; i++ ) {
            for ( c = tam_ini_col; c < tam_fim_col; c++ ) {
                Console.SetCursorPosition ( c, i );
                Console.BackgroundColor = ConsoleColor.White;
                Console.Write ( " " );
            }
        }
    }
    /*============================================================*/
    void Ini_Array ( ) {
        int i, j;
        int [ ] [ ] arrayJagged = new int [ 5 ] [ ];
        arrayJagged [ 0 ] = new int [ 10 ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        arrayJagged [ 1 ] = new int [ 8 ] { 11, 12, 13, 14, 15, 16, 17, 18 };
        arrayJagged [ 2 ] = new int [ 6 ] { 21, 22, 23, 24, 25, 26 };
        arrayJagged [ 3 ] = new int [ 4 ] { 31, 32, 33, 34 };
        arrayJagged [ 4 ] = new int [ 2 ] { 35, 36 };
        //Posiciona os textos no console
        Console.SetCursorPosition ( 21, 6 );
        Console.ForegroundColor = ConsoleColor.Blue;
        for ( i = 0; i < arrayJagged.Length; i++ ) {
            for ( j = 0; j < arrayJagged [ i ].Length; j++ ) {
                if ( ( arrayJagged [ i ] [ j ] >= 0 &&
                    arrayJagged [ i ] [ j ] < 10 ) )
                    Console.Write ( "0" );
                Console.Write ( arrayJagged [ i ] [ j ] + " " );
            }
            Console.SetCursorPosition ( 21, i + 7 );
        }
        Console.ReadKey ( );
    }
    /*============================================================*/
    public static void Main ( ) {
        Console.Title = ( "JAGGED ARRAY" );
        Arr array = new Arr ( );
        array.Moldura ( 1, 20, 2, 68 );
        Console.SetCursorPosition ( 28, 2 );
        Console.BackgroundColor = ConsoleColor.White;
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Write ( "JAGGED ARRAY" );
        array.Informe ( );
        array.Ini_Array ( );
        //Segura a execução do programa
        Console.ReadKey ( );
    }
}
/*============================================================*/

Nenhum comentário:

Postar um comentário