13  Arranjos e Ponteiros

13.1  Arranjos

Arranjos, também conhecidos como vetores ou matrizes, são agrupamentos de variáveis do mesmo tipo, variáveis homogêneas, com o mesmo nome mas diferenciadas por um ou mais índices.

Diz-se que o arranjo é um vetor quando seus itens possuem uma única dimensão, um único índice, e quando o arranjo for definido por duas dimensões, dois índices, costuma-se referenciá-lo como matriz.

A forma de declarar um vetor é:

 

TipoDeDado NomeDoVetor [QuantidadeDeItens];

 

Em termos práticos, esse tipo de variável significa que a simples declaração de um único vetor do tipo int com 5 itens equivale a 5 declarações de variáveis int distintas.

 

Exemplo:

 

int Vet[5];

 

Índices

0

1

2

3

4

 

 

 

 

 

 

 

 

Vet

0

0

0

0

0

 

 

 

 

 

 

 

 

Tamanho

 

 

 

 

 

 

 

int

 

 

 

 

 

 

Que é bem diferente de:

int a;

int b;

int c;

int d;

int e;

 

Observação: Na linguagem de programação C/C++ não existe verificação automática dos limites de um arranjo. Isto deve ser feito pelo programa.

Ao se criar um vetor, normalmente assume-se que o programa está armazenando elementos nulos (zero), o que nem sempre pode ser verdade! Pode-se ainda desejar que o mesmo seja criado com alguns valores específicos. Em ambos os casos alguns cuidados são necessários.

Por exemplo, supondo que em um vetor de 100 itens seja necessário atribuir em cada item o valor –1. O fragmento de programa abaixo resolve esta questão:

 

int a[100];

for (i=0;i<100;a[i++]=-1);

 

Que significa a mesma coisa que:

 

int a[100];

for (i=0;i<100;i++)

 {

  a[i]=-1;

 }

 

A linguagem C/C++ também permite definir “constantes” que são muito úteis na manipulação de vetores e matrizes. O fragmento de código acima pode ser então melhorado como se segue:

 

#define QTDITENS 100

int a[QTDITENS];

for (i=0;i< QTDITENS;i++)

 {

  a[i]=-1;

 }

 

Texto explicativo retangular: Se a quantidade de itens aumentar ou diminuir a alteração no #define irá atualizar todo o programa!

 


 

Há ocasiões nas quais se deseja que o arranjo, ao ser criado, já tenha valores default atribuídos a seus itens. Em C/C++ pode-se fazer isso conforme se segue:

 

Exemplo:

 

int Vet[5] = { 16, 2, 77, 33, 1024 };

 

Índices

0

1

2

3

4

 

Vet

16

2

77

33

1024

 

 

Como o vetor Vet só dispõe de 5 posições, se um sexto valor fosse dado no conjunto inicial, isso acarretaria erro durante a compilação, pois, neste caso, foi declarado que o vetor teria no máximo 5 posições.

 

A linguagem C/C++ também permite que o tamanho do vetor seja determinado pela quantidade de dados apresentado no conjunto de valores a serem atribuídos no vetor. A próxima declaração que resulta na mesma configuração de memória apresentada no exemplo anterior.

 

 

Exemplo:

 

int Vet[ ] = { 16, 2, 77, 33, 1024 };

 

Abaixo, pode-se observar outros resultados que também são interessantes:

 

int Vet[5] = { 16, 2, 77 };

 

Índices

0

1

2

3

4

 

Vet

16

2

77

0

0

 

 

e...

 

int Vet[ ] = { 16, 2, 77 };

 

Índices

0

1

2

 

 

 

Vet

16

2

77

 

 

 

 

Observação: Um vetor de char é uma string.

 

Exemplo:

 

char frase[18] = "Isto e uma string";

 

Que equivale a:

 

char frase[18] = {'i', 's', 't', 'o', '  ', ... 's', 't', 'r', 'i', 'n', 'g', '\0'};

 

O último caractere de uma  string é o elemento nulo ‘\0’.

 

Uma declaração típica de vetor ou matriz aloca memória iniciando num endereço base. Em C/C++ o nome de um vetor ou de uma matriz é de fato, um ponteiro constante a este endereço de memória. Nessa linguagem o primeiro índice sempre será 0 (zero) e a quantidade de memória ocupada pelo arranjo depende do número de itens que formam o vetor ou a matriz e do espaço de memória que o tipo de dado definido para o arranjo ocupa.

 

No caso de um vetor a memória ocupada seria:

 

Quantidade_de_bytes = sizeof(tipo) * tamanho_do_vetor

 

 

13.2  Exercícios de Vetores

Ex 1)        Dado um vetor com as seguintes características:

·        quantidade máxima de elementos: 50;

·        quantidade real de elementos: N;

·        elementos inteiros;

elaborar um programa para:

·        sortear os elementos do vetor entre –20 e +30;

·        calcular e exibir a Soma de todos os elementos;

·        calcular e exibir a Quantidade de elementos positivos;

Dicas para o sorteio:        

·        a função rand(k) sorteia um valor entre 0 e k-1;

·        sortear um valor entre 0 e 50, pois a faixa possui 50 valores (de –20 a 30);

·        retirar 20 do valor sorteado para obter o valor correto;

·        fórmula utilizada:  rand(51)-20.

 

Solução:

 

 

//---------------- Botão Calcular ---------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int v[50];                    //Vetor do enunciado

int s,q,n,i;

 

//Sorteio

randomize();                  //Iniciliza aleatorios

n=StrToInt(Edit1->Text);      //Qtd de itens no vetor

for (i=0; i<n; i++)           //Varia de 0 a n-1

    v[i] = random(51)-20;     //Sorteio no item i

 

//Soma

s=0;

for (i=0; i<n; i++)           //Varia de 0 a n-1

    s=s+v[i];                 //Acumulador

Label2->Caption="Soma de todos os elementos = " +

                IntToStr(s);

 

//Quantidade de positivos

q=0;

for (i=0; i<n; i++)           //Varia de 0 a n-1

    if (v[i]>0)               //É positivo?

      q=q+1;                  //+1 em caso afirmativo

Label3->Caption="Quantidade de positivos = " +

                IntToStr(q);

}

//-----------------------------------------------------