amonteiro@catolica-es.edu.br acostaprofessor@gmail.com Faa um programa em C que receba como entrada duas notas (N1 e N2) de uma turma de 50 alunos. Aps ler todas as notas, seu programa deve calcular a mdia aritmtica de cada aluno e exibir o resultado na tela.
Como armazenar todos os dados de entrada? R: Vamos precisar de uma estrutura de dados chamada vetor 2 um tipo especial de matriz, ou seja, uma matriz que possui apenas uma dimenso.
O vetor uma estrutura capaz de armazenar vrios dados... TODOS DO MESMO TIPO. Ao declarar o vetor, seu tipo j definido. Logo, o vetor uma estrutura de dados homognea.
Os vetores consistem de posies contnuas de memria, e seus elementos so acessados por meio de um ndice. O ndice mais baixo corresponde ao primeiro elemento e o mais alto ao ltimo elemento. 3 A sintaxe para a declarao de um vetor a seguinte:
tipo nome_vetor[tam];
tipo declara o tipo de cada elemento do vetor. tam define quantos elementos o vetor capaz de armazenar. Uma vez declarado o tamanho de um vetor, ele no pode mais ser alterado. SEMPRE um valor inteiro! Colchetes obrigatrios 4 O tamanho de um vetor determinado em sua declarao, antes da execuo do programa. Isto significa que o tamanho de um vetor NO poder ser lido ou alterado durante a execuo do programa. Verifica-se ento que para armazenar dados em vetores necessrio conhecer antecipadamente a quantidade mxima de elementos a serem processados. Quando este nmero no for conhecido, deve-se maximizar o tamanho do vetor baseado em critrios intuitivos (bom senso) relacionado ao problema em questo. 5 EXEMPLO: Declarar um vetor de 100 elementos, chamado pontos, e do tipo int. int pontos[100];
O ndice inicial de todo vetor sempre 0 (zero). O ndice final sempre o tamanho do vetor menos 1 (tam 1), ou seja, neste caso 99. 6 Outros exemplos: float dados[30]; Declara um vetor de float de 30 posies ndice inicial = 0 ndice final = 29 char nome[18]; Declara um vetor de caracteres de 18 posies ndice inicial = 0 ndice final = 17 int media[n]; Declara um vetor de inteiros de n posies ndice inicial = 0 ndice final = n 1 double vet[3*x]; Declara um vetor de double de 3*x posies ndice inicial = 0 ndice final = 3*x 1 7 Os elementos do vetor so acessados atravs do nome do vetor e de um ndice (que determina qual elemento queremos acessar). nome_do_vetor[ndice]
Exemplo: dados[3] = 987; nome[6] = m;
Este ndice precisa ser um valor maior ou igual a zero (0) e menor que o tamanho do vetor (< tam).
8 Outros exemplos printf(%f, media[0]); Exibe o valor armazenado no ndice 0. scanf(%d, &dados[n]); Ler um valor digitado pelo usurio e armazena no ndice n. vetor[idx+1] = vetor[2]; O ndice idx+1 do vetor recebe o valor armazenado no ndice 2. nome1[m] = nome2[2*s+1]; O ndice m do vetor nome1 recebe o valor do ndice 2*s+1 do vetor nome2. x = (2*vet[m] + n*vet[n]) / vet[m+n];
9 Outros exemplos media[0]++; Incrementa o valor armazenado no ndice 0.
--vet[3]; Decrementa o valor armazenado no ndice 3.
if(vetor[idx] > 0) Verifica se o valor do ndice idx maior do que 0. 10 ATENO: C no tem verificao de limites em vetores. Voc pode ultrapassar o fim de um vetor e escrever nos dados de outra varivel ou at mesmo de outro programa, SE tiver permisso Segmentation Fault (Falha de segmentao)
EXEMPLO: int vet[10]; vet[15] = 100;
No d erro de compilao, mas d erro de execuo 11 Em C no possvel passar por valor um vetor inteiro como parmetro para uma funo. Voc pode declarar o parmetro como um vetor dimensionado ou como um vetor no-dimensionado. EXEMPLO: void func(int vet[10]) ou void func(int vet[ ])
O comprimento do vetor no importa para a funo porque C no faz verificao de limites. 12 Leitura e Escrita: Um exemplo de uma funo que preenche os elementos de um vetor de inteiros.
void preenche_vetor (int vetor[ ], int tamanho) { int i; for (i = 0; i < tamanho; i++) { scanf(%d, &vetor[i]); } } 13 Leitura e Escrita: Agora mostraremos uma funo que imprime os elementos de um vetor de inteiros.
void imprime_vetor (int vetor[ ], int tamanho) { int i; for (i = 0; i < tamanho; i++){ printf(%d ,. vetor[i]); } } 14 Insero em uma Posio Pr-determinada do Vetor: Na insero necessrio ter posies disponveis para que o vetor possa crescer. O que devemos fazer para no perdermos nenhum valor? Resp: Deslocar os elementos para a direita.
15 Insero em uma Posio Pr-determinada do Vetor:
void inserir (int vetor[], int elem, int pos, int tam) { int i;
for (i = tam 2; i > pos 1; i--) vetor[i + 1] = vetor[i];
vetor[pos] = elem; }
16 Excluso de um Elemento do Vetor: Na excluso necessrio diminuir o vetor a fim de eliminar buracos no vetor. O que devemos fazer para eliminar os buracos? Resp: Deslocar os elementos para a esquerda.
17 Excluso de um Elemento do Vetor: void excluir (int vetor[], int elem, int tam) { int i, pos, encontrou; encontrou = pos = 0; while ((pos < tam) && (!encontrou)) { if (vetor[pos] == elem) { encontrou = 1; for (i = pos; i < tam 1; i++ ) vetor[i] = vetor[i + 1]; } pos = pos + 1; } } 18 Pesquisa Sequencial em um Vetor: int pesquisa_sequencial(int vetor[], int tam, int elem ) { int i, encontrou, pesq_seq; encontrou = 0; pesq_seq = -1; for (i = 0; i < tam && !encontrou; i++){ if (vetor[i] == elem){ pesq_seq = i; encontrou = 1; } } return pesq_seq; } 19 int main ( void ) { int qtd ; printf ("Digite a qtde de elementos: "); scanf ("%d", &qtd); int vetnum [ qtd ]; for (int i = 0; i < qtd ; i++) { printf (Digite o elemento %d: ", i); scanf ("%d", &vetnum[i]); } for (int i = 0; i < qtd ; i++) { printf ("%d", vetnum[i]); } return 0; } 20 Faa um programa que calcule a soma de todos os elementos de um vetor.
Faa um programa que soma os elementos correspondentes de dois vetores gerando um novo vetor. Imprimir todos os elementos deste novo vetor.
21 SCHILDT, Herbert. C Completo e Total. 3 ed. So Paulo: Pearson Makron Books, 2006, Cap. 4. 22