Prof. Adriano Teixeira de Souza
   São um conjunto de variáveis identificadas
    por um mesmo nome.

    ◦ Homogêneas (vetores e matrizes)

    ◦ Heterogêneas (estruturas)




                            Prof. Adriano Teixeira de Souza
   Correspondem a posições da memória:
      ◦ identificadas por um único nome
      ◦ individualizadas por índices
      ◦ cujo conteúdo é de um mesmo tipo




Notas:     6,1   2,3   9,4   5,1      8,9     9,8      10      7,0   6,3   4,4

Posição: 0       1     2     3         4        5       6       7    8     9



                                   Prof. Adriano Teixeira de Souza
Posição do livro
                  0      1     2       …       n-1

             0    788 598 265          …      156

             1    145 258 369          …      196
Prateleira




             2    989 565 345          …      526
              ⋮    ⋮     ⋮     ⋮       ⋱         ⋮

             m-1 845 153 564 892 210

                             Prof. Adriano Teixeira de Souza
   Utilizados para armazenar conjuntos de
    dados cujos elementos podem ser
    endereçados por um único índice.

   Também são conhecidos como vetores.




                        Prof. Adriano Teixeira de Souza
   Utilizados para armazenar conjuntos de
    dados cujos elementos necessitam ser
    endereçados por mais de um índice.

   Também são conhecidos como matrizes.




                        Prof. Adriano Teixeira de Souza
   Arranjos de 2 dimensões


               0    1     2       …       n-1

           0   788 598 265        …      156

           1   145 258 369        …      196

           2   989 565 345        …      526

           ⋮    ⋮   ⋮     ⋮       ⋱         ⋮

          m-1 845 153 564 892 210

                        Prof. Adriano Teixeira de Souza
   Arranjo de 3 dimensões



    0   1       2   3       0   1       2   3         0   1       2   3       0   1       2   3
0                       0                         0                       0
1                       1                         1                       1
2                       2                         2                       2
3                       3                         3                       3
            0                       1                         2                       3




                                                Prof. Adriano Teixeira de Souza
   Arranjo de 4 dimensões
    0   1   2   3       0   1   2   3         0   1    2   3        0     1   2   3
0                   0                     0                     0
1                   1                     1                     1
2                   2                     2                     2
3                   3                     3                     3
        (0,0)               (0,1)                  (0,2)                  (0,3)


    0   1   2   3       0   1   2   3         0   1    2   3        0     1   2   3
0                   0                     0                     0
1                   1                     1                     1
2                   2                     2                     2
3                   3                     3                     3
        (1,0)               (1,1)                  (1,2)                  (1,3)




                                        Prof. Adriano Teixeira de Souza
   Como declarar:



 Exemplos:
<tipo> <nome> [<tamanho1>][<tamanho2>]...;




    float   VetReais[100];
    int     Vetor[5][9];
    char    Nome_cliente[50];
    float   cubo[20][12][7];




                                Prof. Adriano Teixeira de Souza
   O compilador C aloca uma porção contígua da
    memória para armazenar os elementos das
    matrizes e vetores.




                         Prof. Adriano Teixeira de Souza
int VetInt[n];



Índices:     0      1       2      3          4         5       ...   n-1


VetInt                                                          ...




            Índice do primeiro elemento:      zero
            Índice do último elemento:        n–1
            Quantidade de elementos:                    n



                                  Prof. Adriano Teixeira de Souza
   Índices fora dos limites podem causar
    comportamento anômalo do código.
               0   1     2    3        4        5


       2           9                                     8


       X1              Vetor[6]                          X2


      int X1;                      Vetor[1]           = 9;
      int Vetor[6];                Vetor[-1] = 2;
      int X2                       Vetor[6]           = 8;


                              Prof. Adriano Teixeira de Souza
   O tamanho de um vetor ou matriz é pré-
    definido, ou seja, após a compilação, não
    pode ser mudado.

   Portanto, vetores e matrizes são chamadas
    estruturas de dados estáticas, pois mantém o
    mesmo tamanho ao longo de toda a
    execução do programa.




                         Prof. Adriano Teixeira de Souza
   Atribuir valores na declaração do vetor:

     int vetor[5] = {1,2,3,4,5};


   Atribuir valores na declaração da matriz:

     float matriz[2][3] = {{1,2,3},{4,5,6}};




                         Prof. Adriano Teixeira de Souza
   Colocar os números de 1 a 5 num vetor:
     for (i=0; i<5; i++)
            Vetor[i] = i + 1;


   Colocar os números de 5 a 1 num vetor:

     for (i=0; i<5; i++)
            Vetor[i] = 5 - i;




                         Prof. Adriano Teixeira de Souza
   Preencher uma matriz n × m com zeros:


     for (i=0; i < N; i++)
        for (j=0; j < M; j++)
           Matriz[i][j] = 0;




                         Prof. Adriano Teixeira de Souza
   Copiar dados de um vetor para outro:
     #define TAM_MAX 10
     double VetReais[TAM_MAX], VetCopia[TAM_MAX];
     for (i=0; i<TAM_MAX; i++)
            VetCopia[i] = VetReais[i];

   Boa prática de programação:
    ◦ Definir o tamanho de vetores com constantes
      flexibiliza a manutenção do código.




                           Prof. Adriano Teixeira de Souza
   Leitura dos dados de um vetor:


     for (i=0; i<TAM_MAX; i++)
     {
         printf("Digite um número: ");
            scanf("%f", &Vet[i]);
     }




                         Prof. Adriano Teixeira de Souza
Determinar:                       0    1    2    3
1.  M[3][0]                   0   1    2    3    4
2.  M[4][2]
                              1   5    -5   3    0
3.  M[1][3]
4.  M[5][M[0][2]]             2   1    1    1    1

5.  M[M[3][1]][1]             3   -3   2    0    0
6.  M[4][(M[1][2]+M[3][0])]   4   0    0    1    1

    1.   -3    4.   -2
                              5   -1   -1   -2   -2
    2.   1     5.   1
    3.   0     6.   0
   Ler um elemento K.
   Ler um vetor A de N elementos.
   Verificar se o elemento K está presente no
    vetor:
    ◦ Se estiver, imprimir a posição onde ele foi
      encontrado.
    ◦ Caso contrário, imprimir mensagem "elemento K
      não encontrado".




                           Prof. Adriano Teixeira de Souza
   Ler N valores inteiros (N ≤ 100) até que seja
    digitado o valor zero.

   A seguir, inverter o vetor, trocando o 1º
    elemento com o último, o 2º com o
    penúltimo, e assim sucessivamente.

   Ao final, imprimir o vetor invertido.




                          Prof. Adriano Teixeira de Souza
   Faça um programa que imprima uma matriz
    quadrada de dimensão N contendo:
    ◦   o número 1 nos elementos abaixo da diagonal principal
    ◦   o número 0 nos demais elementos


   N deve ser menor ou igual a 20.




                               Prof. Adriano Teixeira de Souza
Fonte: DENIT




                         FORTALEZA




                                                                                  SÃO PAULO
                                                                       SALVADOR
                                        MANAUS




                                                         JANEIRO
                                                 PORTO


                                                         RIO DE
                                                 VELHO
                 BELÉM
BELÉM                     1611          5298      4397      3250       2100       2933
FORTALEZA        1611                   5763      4865      2805       1389       3127
MANAUS           5298     5763                     901      4374       5009       3971
PORTO VELHO      4397     4865           901                3473       4023       3070
RIO DE JANEIRO   3250     2805          4374      3473                 1649         429
SALVADOR         2100     1389          5009      4023      1649                  1962
SÃO PAULO        2933     3127          3971      3070       429       1962


                                     Prof. Adriano Teixeira de Souza
1.   Construir um algoritmo que leia a tabela anterior
     e informe ao usuário a distância entre duas
     cidades fornecidas por ele, até que ele forneça
     duas cidades iguais (origem e destino).

2.   Construir um algoritmo que permita ao usuário
     informar várias cidades, até inserir “xx”, e que
     imprima a distância total para cumprir todo o
     percurso especificado entre as cidades
     fornecidas.




                           Prof. Adriano Teixeira de Souza

Estrutura de dados - Variáveis homogêneas e Heterogêneas

  • 1.
  • 2.
    São um conjunto de variáveis identificadas por um mesmo nome. ◦ Homogêneas (vetores e matrizes) ◦ Heterogêneas (estruturas) Prof. Adriano Teixeira de Souza
  • 3.
    Correspondem a posições da memória: ◦ identificadas por um único nome ◦ individualizadas por índices ◦ cujo conteúdo é de um mesmo tipo Notas: 6,1 2,3 9,4 5,1 8,9 9,8 10 7,0 6,3 4,4 Posição: 0 1 2 3 4 5 6 7 8 9 Prof. Adriano Teixeira de Souza
  • 4.
    Posição do livro 0 1 2 … n-1 0 788 598 265 … 156 1 145 258 369 … 196 Prateleira 2 989 565 345 … 526 ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ m-1 845 153 564 892 210 Prof. Adriano Teixeira de Souza
  • 5.
    Utilizados para armazenar conjuntos de dados cujos elementos podem ser endereçados por um único índice.  Também são conhecidos como vetores. Prof. Adriano Teixeira de Souza
  • 6.
    Utilizados para armazenar conjuntos de dados cujos elementos necessitam ser endereçados por mais de um índice.  Também são conhecidos como matrizes. Prof. Adriano Teixeira de Souza
  • 7.
    Arranjos de 2 dimensões 0 1 2 … n-1 0 788 598 265 … 156 1 145 258 369 … 196 2 989 565 345 … 526 ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ m-1 845 153 564 892 210 Prof. Adriano Teixeira de Souza
  • 8.
    Arranjo de 3 dimensões 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 0 1 2 3 Prof. Adriano Teixeira de Souza
  • 9.
    Arranjo de 4 dimensões 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 (0,0) (0,1) (0,2) (0,3) 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 (1,0) (1,1) (1,2) (1,3) Prof. Adriano Teixeira de Souza
  • 10.
    Como declarar:  Exemplos: <tipo> <nome> [<tamanho1>][<tamanho2>]...; float VetReais[100]; int Vetor[5][9]; char Nome_cliente[50]; float cubo[20][12][7]; Prof. Adriano Teixeira de Souza
  • 11.
    O compilador C aloca uma porção contígua da memória para armazenar os elementos das matrizes e vetores. Prof. Adriano Teixeira de Souza
  • 12.
    int VetInt[n]; Índices: 0 1 2 3 4 5 ... n-1 VetInt ... Índice do primeiro elemento: zero Índice do último elemento: n–1 Quantidade de elementos: n Prof. Adriano Teixeira de Souza
  • 13.
    Índices fora dos limites podem causar comportamento anômalo do código. 0 1 2 3 4 5 2 9 8 X1 Vetor[6] X2 int X1; Vetor[1] = 9; int Vetor[6]; Vetor[-1] = 2; int X2 Vetor[6] = 8; Prof. Adriano Teixeira de Souza
  • 14.
    O tamanho de um vetor ou matriz é pré- definido, ou seja, após a compilação, não pode ser mudado.  Portanto, vetores e matrizes são chamadas estruturas de dados estáticas, pois mantém o mesmo tamanho ao longo de toda a execução do programa. Prof. Adriano Teixeira de Souza
  • 15.
    Atribuir valores na declaração do vetor: int vetor[5] = {1,2,3,4,5};  Atribuir valores na declaração da matriz: float matriz[2][3] = {{1,2,3},{4,5,6}}; Prof. Adriano Teixeira de Souza
  • 16.
    Colocar os números de 1 a 5 num vetor: for (i=0; i<5; i++) Vetor[i] = i + 1;  Colocar os números de 5 a 1 num vetor: for (i=0; i<5; i++) Vetor[i] = 5 - i; Prof. Adriano Teixeira de Souza
  • 17.
    Preencher uma matriz n × m com zeros: for (i=0; i < N; i++) for (j=0; j < M; j++) Matriz[i][j] = 0; Prof. Adriano Teixeira de Souza
  • 18.
    Copiar dados de um vetor para outro: #define TAM_MAX 10 double VetReais[TAM_MAX], VetCopia[TAM_MAX]; for (i=0; i<TAM_MAX; i++) VetCopia[i] = VetReais[i];  Boa prática de programação: ◦ Definir o tamanho de vetores com constantes flexibiliza a manutenção do código. Prof. Adriano Teixeira de Souza
  • 19.
    Leitura dos dados de um vetor: for (i=0; i<TAM_MAX; i++) { printf("Digite um número: "); scanf("%f", &Vet[i]); } Prof. Adriano Teixeira de Souza
  • 20.
    Determinar: 0 1 2 3 1. M[3][0] 0 1 2 3 4 2. M[4][2] 1 5 -5 3 0 3. M[1][3] 4. M[5][M[0][2]] 2 1 1 1 1 5. M[M[3][1]][1] 3 -3 2 0 0 6. M[4][(M[1][2]+M[3][0])] 4 0 0 1 1 1. -3 4. -2 5 -1 -1 -2 -2 2. 1 5. 1 3. 0 6. 0
  • 21.
    Ler um elemento K.  Ler um vetor A de N elementos.  Verificar se o elemento K está presente no vetor: ◦ Se estiver, imprimir a posição onde ele foi encontrado. ◦ Caso contrário, imprimir mensagem "elemento K não encontrado". Prof. Adriano Teixeira de Souza
  • 22.
    Ler N valores inteiros (N ≤ 100) até que seja digitado o valor zero.  A seguir, inverter o vetor, trocando o 1º elemento com o último, o 2º com o penúltimo, e assim sucessivamente.  Ao final, imprimir o vetor invertido. Prof. Adriano Teixeira de Souza
  • 23.
    Faça um programa que imprima uma matriz quadrada de dimensão N contendo: ◦ o número 1 nos elementos abaixo da diagonal principal ◦ o número 0 nos demais elementos  N deve ser menor ou igual a 20. Prof. Adriano Teixeira de Souza
  • 24.
    Fonte: DENIT FORTALEZA SÃO PAULO SALVADOR MANAUS JANEIRO PORTO RIO DE VELHO BELÉM BELÉM 1611 5298 4397 3250 2100 2933 FORTALEZA 1611 5763 4865 2805 1389 3127 MANAUS 5298 5763 901 4374 5009 3971 PORTO VELHO 4397 4865 901 3473 4023 3070 RIO DE JANEIRO 3250 2805 4374 3473 1649 429 SALVADOR 2100 1389 5009 4023 1649 1962 SÃO PAULO 2933 3127 3971 3070 429 1962 Prof. Adriano Teixeira de Souza
  • 25.
    1. Construir um algoritmo que leia a tabela anterior e informe ao usuário a distância entre duas cidades fornecidas por ele, até que ele forneça duas cidades iguais (origem e destino). 2. Construir um algoritmo que permita ao usuário informar várias cidades, até inserir “xx”, e que imprima a distância total para cumprir todo o percurso especificado entre as cidades fornecidas. Prof. Adriano Teixeira de Souza