Programação Orientada à Procedimentos II Programação Orientada à Procedimentos I Processamento Paralelo Lógica de Programação Introdução à Computação Informática Básica

 

 

Informática Básica
Introdução à Computação
Lógica de Programação
Programação Orientada à Procedimentos I
Programação Orientada à Procedimentos II

Processamento Paralelo

Aula 16

Aula 17

Aula 18



Matrizes Unidimensionais (Vetores)

À medida que os programas começarem a realizar trabalhos mais úteis, algumas vezes se desejará que uma variável contenha muitos valores. Por exemplo, a variável nota pode controlar as notas obtidas por 100 alunos. da mesma forma, a variável salário poderia controlar o salário de cada funcionário da companhia. Uma matriz é um conjunto de variáveis, do mesmo tipo referenciadas por um único nome, onde cada variável é diferenciada por meio de um número chamado "índice"

Declarando uma Matriz

A utilização mais comum para as matrizes unidimensionais ou vetores, está vinculada à criação de tabelas. Uma variável somente pode conter um valor por vez. No caso das matrizes, estas poderão armazenar mais de um valor por vez, pois são dimensionadas exatamente para este fim. Lembrando que a manipulação dos elementos de uma matriz ocorrerá de forma individualizada, pois não é possível efetuar a manipulação de todos os elementos do conjunto ao mesmo tempo. Para declarar um vetor, é necessário especificar o tipo desejado (tal como int, float, ou double), bem como o tamanho da vetor. Para especificar o tamanho, deve-se colocar o número de valores que o vetor pode armazenar dentro de colchetes após o nome do vetor.


sintaxe: tipo nome_matriz[dimensão];

Por exemplo, a declaração a seguir cria um vetor chamada notas, que pode armazenar 100 notas do tipo int.

int notas[100];

Quando se declara um vetor, C aloca memória suficiente para conter todos os elementos. O primeiro ítem está na posição zero. Por exemplo, no vetor notas, o comando a seguir atribue o valor 80 para o primeiro elemento do vetor.

notas[0]=80;

Como o primeiro elemento do vetor inicia no deslocamento zero, o último elemento ocorre uma posição antes do tamanho do vetor. Dada o vetor anterior, o comando abaixo atribue valor ao último elemento do vetor.

notas[99]=75;

Visualizando uma Matriz Unidimensional

Após a atribuiçào de valores, a matriz irá residir na memória de uma maneira similar à mostrada na figura abaixo:



Inicializando uma Matriz

O valor para cada elementos do vetor pode ser inicializado na mesma instrução de sua declaração ou durante a execução do programa.
exemplo 1:

O exemplo a seguir, inicializa o vetor dmes na mesma instrução que o declara


float dmes[12] = {31,28,32,45,99,90,54,12,9,7,67,88};

A lista de valores é colocada entre chaves e os valores são separados por vírgulas. Os valores são atribuídos na sequência em que são escritos. isto é, dmes{0} terá o valor 31, e dmes[1] 28, e assim por diante. A instrução de definiçào de uma matriz inicializada pode suprimir a dimensão da matriz, restando apenas um par de colchetes vazios:
exemplo 2:


float dmes[] = {31,28,32,45,99,90,54,12,9,7,67,88};

Se nenhum número for fornecido para dimensionar a matriz, o compilador contará o número de valores inicializados e o fixará como dimensão da matriz. É possível inicializar um número menor de elementos do que o declarado na dimensão do vetor.

Checando Limites

A linguagem C, não realiza verificação de limites em matrizes, por isso nada impede que se vá além do fim de uma matriz. Se o limite de uma matriz for transposto durante a operação de atribuição, então os valores sobressalentes irão sobrepor outros dados da memória. Estes valores serão armazenados em sequência, seguindo os elementos da matriz na memória. Como não foi reservado espaço para guardá-los eles sobreporão outras variáveis ou até mesmo uma parte do próprio código do programa que está na memória. Isso acarretará resultados imprevisíveis, e nenhuma mensagem de erro do compilador avisará o que está acontecendo.
exemplo 3:

O exemplo a seguir ultrapassa os limites do vetor notas e nenhuma mensagem de erro será dada pelo compilador!


float notas[5];
notas[6]=3.5;



Usando Estruturas de Laços

Quando você referencia muitos elementos de um vetor, especificar números para cada elemento do vetos pode ser demorado e tedioso. Como uma alternativa, seus programas podem usar uma variável para referenciar os elementos do vetor.
exemplo 4:

Por exemplo, assumindo que a variável i contenha o valor 2, o comando a seguir atribuiria o valor 80 ao vetor[2]:


i=2;
vetor[2]=80;

exemplo 5:

O programa a baixo, usa a variável i e um laço for para exibir os elementos do vetor notas:


# include < stdio.h>
void main() { int notas[5]={80,70,90,85,80}; int i; printf("Valores do Vetor \n"); for (i=0;i <5;i++) printf("notas{%d] %d \n", i, notas[i]); }


Usando Constantes

Quando os programas trabalham com matrizes, é necessário especificar o tamanho da matriz. O exemplo anterior, declara um vetor de cinco elementos, atribui um valor para cada elemento e, depois, usa um laço para exibir os valores de cada um. Supond-se que se queira mais tarde alterar o programa anterior, para que ele suporte 10 elementos ao invés de apenas 5. Será necessário então alterar não somente a declaração da matriz, mas também o laço for. Quanto mais alterações forem necessárias, maiores serão as chances de erro! Como uma alternativa, os programas poderão declarar matrizes usando constantes.

exemplo 6:

O programa a seguir, declara um vetor com base na constante TAM_VETOR e também usa essa constante na condição final do laço for.


# include < stdio.h>
#define TAM_VETOR 5
void main()
{
    int notas[TAM_VETOR] = {80,70,90,85,80};
    int i;
    printf("Valores do Vetor \n");
    for (i=0;i< TAM_VETOR;i++)
        printf("notas{%d] %d \n", i, notas[i]);
}