Computação I (MAB120) DCC/UFRJ Aula 12: vetores 13 de maio de 2016
Objetivos dessa aula Apresentar o conceito de Tipos Compostos Homogêneos Apresentar o conceito de vetores Apresentar as operações básicas sobre vetores e demonstrar o seu uso
Tipos compostos homogêneos tipos de dados que armazenam vários dados semelhantes, isto é, de um mesmo tipo
Vetor um tipo composto homogêneo que usa um mecanismo de indexação para acessar os seus elementos Simplifica a implementação de programas que precisam lidar com uma grande quantidade de dados semelhantes (por exemplo, os milhares de alunos em uma escola) Sem vetores, seria necessário criar uma variável distinta para cada um desses alunos Com o uso de vetores, conjuntos de objetos semelhantes podem ser tratados de forma mais simples
Exemplo sem uso de vetor: duas leituras dos dados #define QTD_NOTAS 50 int main (){ int i, conta; float nota, soma=0.0, media; for(i=0; i < QTD_NOTAS; i++) { scanf ("%f", ¬a); soma = soma + nota; media = soma / QTD_NOTAS; conta = 0; for(i=0; i < QTD_NOTAS; i++) { scanf ("%f", ¬a); if(nota > media) conta++; printf("%d alunos com nota acima da media", conta); return 0;
Finalidade de vetores o uso de vetores é necessário quando um conjunto de dados de um mesmo tipo deve ser armazenado para utilização durante a execução do programa se vetores fossem empregados no exemplo anterior, as notas de todos os alunos poderiam ter sido armazenadas num único vetor durante a primeira leitura dos dados, e ficariam disponíveis para uso durante toda a execução
Definição de vetor em C na linguagem C, um vetor é definido da seguinte maneira: <tipo> <nome do vetor> [número de elementos do vetor]; exemplos int a [5]; char nome [20]; long long int matriculas [1000]; float notasalunos [50];
Representação de vetor na memória os elementos de um vetor são armazenados em uma sequência contínua de memória exemplo int a [5]; // a tem 5 elementos do tipo int
Representação de vetor na memória exemplo char nome [20]; // nome tem 20 elementos do tipo char O primeiro elemento de um vetor em C tem índice ZERO!
Exemplo com uso de vetor: uma leitura dos dados #define QTD_NOTAS 50 int main (){ int i, conta; float notas[qtd_notas], soma=0.0, media; for(i=0; i < QTD_NOTAS; i++) { scanf ("%f", ¬as[i]); soma = soma + notas[i]; media = soma / QTD_NOTAS; conta = 0; for(i=0; i < QTD_NOTAS; i++) { if(notas[i] > media) conta++; printf("%d alunos com nota acima da media", conta); return 0;
Exercício: o que o programa abaixo faz? #define TAMANHO 20 int main(void) { int vet[tamanho]; int i; for(i=0; i<tamanho; i++) { scanf("%d", &vet[i]); i=tamanho-1; while(i>=0) { printf("%d ", vet[i]); i--; return 0;
Exercício: o que o programa abaixo faz? #define TAMANHO 5 int main(void) { float vet[tamanho] = {-34, 2, -8.9, 0, 9; short int i; float maior, menor; maior = menor = vet[0]; for(i=1; i<tamanho; i++) { if(vet[i] > maior) maior = vet[i]; else if(vet[i] < menor) menor = vet[i]; printf("\nmaior=%.1f menor=%.1f\n", maior, menor); return 0;
O que está errado no código abaixo? int main (){ int num; float notas [num]; printf ("Quantas notas deseja armazenar?"); scanf ("%d", &num); for(i=0; i<num; i++ { scanf("%f", ¬as[i]); return 0;
dentro de estruturas É possível definir vetores dentro de estruturas, exemplo: typedef struct { int matricula; int idade; float notas[3]; taluno;
Exemplo de uso do tipo taluno int main (void) { taluno a; taluno b = {54321, 23, {2.3, 4.5, 5.6; float media; a.matricula = 12345; a.idade = 18; a.notas[0] = 2.5; a.notas[1] = 6.8; a.notas[2] = 8.9; media = (a.notas[0] + a.notas[1] + a.notas[2]) / 3; printf("a:%d %d %f\n", a.matricula, a.idade, media); media = (b.notas[0] + b.notas[1] + b.notas[2]) / 3; printf("b:%d %d %f\n", b.matricula, b.idade, media); return 0;
como parâmetros de funções podem ser usados como parâmetros de funções em C...mas não podem ser usados como valores de retorno de funções (ao contrário de estruturas, que podem ser valores de retorno de funções)
Exemplo float calculomedia (float vet[], int tam) { int i; float soma, media; soma = 0.0; for (i=0; i<tam; i++) { soma = soma + vet[i]; media = soma / tam; return media;
..continuação exemplo int main () { int i; float media, notas[5]; for (i=0; i < 5; i++) { printf ("Digite uma nota:"); scanf ("%f", ¬as[i]); media = calculomedia (notas, 5); printf ("media = %f \n", media); return 0;
Exercício Uma operação muito comum em computação é a intercalação de dois vetores que já estão ordenados. Considere um vetor A de tamanho N e outro B de tamanho M. O vetor resultante C é construído a partir dos dois originais e terá tamanho N + M. Escreva uma função em C que receba dois vetores de inteiros ordenados (ordem crescente) como entrada e seus respectivos tamanhos, e imprima na tela o vetor resultante da intercalação desses dois vetores.
Alteração da data da Prova 1 Nova data: 3 de junho de 2016 (sexta-feira)
Referências bibliográficas 1 Introdução à programação: uma nova abordagem usando C, Flávio Varejão, Campus/Elsevier, 2015. 2 Curso de Linguagem C, apostila do prof. Adriano Cruz (DCC/UFRJ), 2013