Vetores Vetor é um tipo de dado usado para representar uma certa quantidade de variáveis de valores homogêneos (do mesmo tipo). Imagine o seguinte problema: calcular a média das notas da prova de 5 alunos. Você poderia declarar: int nota0, nota1, nota2, nota3, nota4; e o programa deverá ler os valores separadamente: printf( Digite a nota do aluno 0 ); scanf( %d, ¬a0); printf( Digite a nota do aluno 1 ); scanf( %d, ¬a1); printf( Digite a nota do aluno 4 ); scanf( %d, ¬a4); Imagine se pretendêssemos encontrar a média aritmética das notas de uma classe de 50 alunos? Seria uma programação bastante volumosa. O vetor é uma série de variáveis do mesmo tipo referenciadas por um único nome, onde cada variável é diferenciada através de um número chamado índice. A declaração em linguagem C para um vetor é feita da seguinte maneira: int notas[5]; Esta declaração aloca memória para armazenar 5 inteiros e anuncia que notas é um vetor de 5 elementos de inteiros. A palavra int declara que todo elemento do vetor é do tipo int. notas é o nome dado ao vetor e [5] indica que o vetor terá 5 elementos. Em C, os vetores precisam ser declarados, como quaisquer outras variáveis, para que o compilador conheça o tipo do vetor e reserve espaço de memória suficiente para armazená-la. Os elementos de um vetor são guardados numa seqüência contínua de memória, isto é, um seguido ao outro. Na declaração de um vetor, deve-se colocar entre [ ] o tamanho o do vetor (quantos elementos ele poderá armazenar). Disciplina: Programação Estruturada 1
Referenciando um elemento do vetor Uma vez declarado o vetor, precisamos de um modo de referenciar os elementos individualmente. Isto é feito através de um número entre colchetes seguindo o nome do vetor. Quando referenciamos um elemento do vetor este número especifica a posição do elemento no vetor. É importante diferenciar bem os conceitos de posição e conteúdo. Os elementos do vetor são sempre numerados por índices iniciados por 0 (zero), como mostra o exemplo da figura abaixo: vetor conteúdo 0 1 2 3 4 posição O elemento referenciado pela posição (índice) 2 é especificado pela seguinte instrução: notas[2] Este não é o segundo elemento do vetor e sim o terceiro, pois a numeração começa em 0. Assim o último elemento do vetor possui um índice menor que o tamanho do vetor. Exemplo 1: Faça uma programa que declare um vetor para armazenar 5 notas, leia as 5 notas e calcule a média. #include <stdio.h> int notas[5]; int i, soma = 0; printf( media das notas = %d, soma/5); Disciplina: Programação Estruturada 2
Armazenando dados no vetor No exemplo1, a parte do programa que armazena dados no vetor é: O laço for causa um processo de solicitação ao usuário e leitura das notas, repetido 5 vezes. Na instrução scanf( ), nós usamos o operador (&) junto da variável notas[i], que é uma variável como outra qualquer. Lendo dados do vetor No exemplo1, a parte do programa que lê dados do vetor é: O laço for adiciona os valores contidos em cada elemento do vetor (notas[i]) em uma variável soma, para depois calcular a média. Utilizando a diretiva #define Com a diretiva #define podemos definir um valor constante conforme o exemplo abaixo. Exemplo 2: Faça um programa que leia notas até que a nota seja menor ou igual a 0. Calcule e apresente a média das notas. #include<stdio.h> #define tamanho 40 float notas[40], soma = 0.0; int i; do scanf( %f, ¬as[i]); Disciplina: Programação Estruturada 3
if (notas[i] > 0) i++; while(notas[i] > 0); printf( media das notas = %.2f, soma/(i-1) ); No exemplo2, a diretiva define foi utilizada para criar uma constante chamada tamanho e que contém o valor 40. O uso de constantes para dimensionar vetores é comum em C, pois, se com o passar do tempo quisermos aumentar ou diminuir este valor, precisamos somente trocar o 40 pelo número desejado e a troca refletirá em qualquer parte do programa onde a palavra tamanho aparece. A variável notas foi definida com o tamanho máximo de 40 elementos reais, utilizando a palavra tamanho. No exemplo 2, o laço do-while repete a solicitação da nota ao usuário, armazenando-a no vetor notas, até que seja fornecido um valor menor ou igual à zero (0). Quando o último item for digitado, a variável i terá alcançado um valor acima do valor total de itens. Portanto, para encontrar o número de itens válidos devemos subtrair 1 do valor contido em i. O ideal no exemplo 2 é verificar se o limite máximo do vetor não foi ultrapassado e isso é de responsabilidade do programador. Sendo assim, poderíamos embutir o seguinte trecho no código: do if (i > = tamanho) printf( capacidade máxima do vetor preenchida\n ); break; scanf( %f, ¬as[i]); if (notas[i] > 0) i++; while(notas[i] > 0); O comando break termina a execução do laço do-while. Disciplina: Programação Estruturada 4
Inicializando vetores Um vetor pode ser inicializado na instrução de sua declaração, para que possamos especificar valores prefixados. Para sua inicialização devemos colocar os valores separados por vírgulas e todos eles entre. A quantidade de valores definidos não pode ser superior ao tamanho máximo do vetor. Se há menos inicializadores que a dimensão especificada, os outros serão zero. Exemplo 3: #include<stdio.h> float soma = 0.0, notas[5] = 5.0, 6.0, 7.0, 8.0, 9.0; int i; printf( media das notas = %d, soma/5); Exercícios 1) Faça um programa que seja capaz de conhecer e armazenar quaisquer 10 valores inteiros em um vetor. 2) Faça um programa que seja capaz de conhecer e armazenar N valores inteiros quaisquer em um vetor com capacidade de armazenamento de 50 elementos inteiros. O valor de N é fornecido pelo usuário. 3) Faça um programa que, tendo como dados de entrada 10 valores reais, calcule a média aritmética entre os mesmos, e que seja possível saber quantos elementos são superiores a média calculada. 4) Faça um programa que leia 2 vetores de 10 elementos inteiros cada, e que construa um terceiro vetor composto somente com os elementos que estão nos dois vetores. 5) Refaça o item 4, evitando elementos repetidos no vetor gerado. 6) Faça um programa que leia 2 vetores de 50 elementos inteiros cada. Em seguida crie um vetor soma com base nos dois vetores lidos. Disciplina: Programação Estruturada 5