You are on page 1of 29

MC-102 — Aula 12 Vetores

Instituto de Computa¸ c˜ ao – Unicamp

6 de Setembro de 2012

Roteiro
Introdu¸ c˜ ao Vetores Vetores Vetores Vetores Vetores Exerc´ ıcios Informa¸ c˜ oes Extras: Inicializa¸ c˜ ao de um vetor

1

2

– Defini¸ c˜ ao – Como usar – Exemplos em fun¸ c˜ oes

3

4

(Instituto de Computa¸ c˜ ao – Unicamp)

MC-102 — Aula 12

6 de Setembro de 2012

2 / 29

scanf("%f". scanf("%f". &nota3). printf("Nota do aluno 3: "). &nota2). &nota1). printf("Nota do aluno 1: "). scanf("%f".Vetores Como armazenar 3 notas? float nota1. nota3. nota2. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 3 / 29 . printf("Nota do aluno 2: ").

nota2. printf("Nota do aluno 2: ").. */ printf("Nota do aluno 100: "). &nota2). scanf("%f".. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 4 / 29 . /* . scanf("%f". scanf("%f".. &nota1). nota3. /* ..Vetores Como armazenar 100 notas? float nota1. &nota100). */ nota100. printf("Nota do aluno 1: ")..

´ Indices fora dos limites podem causar comportamento anˆ omalo do programa.Vetores — Defini¸ c˜ ao Cole¸ c˜ ao de vari´ aveis do mesmo tipo referenciada por um nome comum. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 5 / 29 . Tamanho pr´ e-definido. Posi¸ c˜ oes cont´ ıguas na mem´ oria. (Herbert Schildt) Caracter´ ısticas: Acesso por meio de um ´ ındice inteiro.

int primos[100]. Exemplo float notas[100]. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 6 / 29 .Declara¸ c˜ ao de um vetor <tipo> identificador [<tamanho do vetor>].

O acesso de um vetor em uma posi¸ c˜ ao espec´ ıfica tem o mesmo comportamento que uma vari´ avel simples. A primeira posi¸ c˜ ao de um vetor tem ´ ındice 0.Usando um vetor Ap´ os declarada uma vari´ avel do tipo vetor. identificador [<posi¸ c˜ ao>]. Au ´ltima posi¸ c˜ ao de um vetor tem ´ ındice <tamanho do vetor> . pode-se acessar uma determinada posi¸ c˜ ao do vetor utilizando um valor inteiro.1. Exemplo int nota[10]. a = nota[5]. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 7 / 29 . int a. nota[5] = 95.

for(g=0. g++) vet[g]=5*g. Vocˆ e pode usar valores inteiros para acessar uma posi¸ c˜ ao do vetor. O valor pode ser inclusive uma vari´ avel inteira. vet[10]. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 8 / 29 .Usando um vetor identificador [<posi¸ c˜ ao>]. g<10. Exemplo int g.

int f. Nome ´ Indice d - 0 vetor 1 2 3 4 f - (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 9 / 29 . int vetor[5].Vetores Na mem´ oria: int d.

Vetores Ao executar vetor[3]=10.: Nome ´ Indice d vetor 1 2 3 10 f - 0 4 (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 10 / 29 .

vetor[-1]=1. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 11 / 29 .Vetores O que ocorre se for executado os comandos: vetor[5]=5.

vetor[5]=5.Vetores Ao executar vetor[3]=10. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 12 / 29 . Nome ´ Indice d 1 vetor 1 2 3 10 f 5 0 4 Isto ir´ a causar um erro no seu programa pois vocˆ e est´ a alterando valores de outras vari´ aveis. vetor[-1]=1. Em muitos casos o seu programa ser´ a encerrado (Segmentation Fault).

Quest˜ oes importantes sobre vetores O tamanho do vetor ´ e pr´ e-definido (durante a execu¸ c˜ ao do programa n˜ ao pode ser alterado). (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 13 / 29 . ´ Indices fora dos limites podem causar comportamento anˆ omalo do c´ odigo.

i < n. int n. i. &n). } O programa acima est´ a correto? (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 14 / 29 . scanf("%f". &nota[i]). printf("N´ umero de alunos: ").Como armazenar n (<= 100) notas? float nota[100]. i+1). for (i = 0. i++) { printf("Nota do aluno %d: ". scanf("%d".

} for (i = 0. i. i+1). i < n. if(n>100){ n=100. &nota[i]). printf("N´ umero de alunos: "). scanf("%d".Como armazenar n (<= 100) notas? Vocˆ e deve testar se n > 100 para evitar erros!! float nota[100]. } (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 15 / 29 . i++) { printf("Nota do aluno %d: ". int n. scanf("%f". printf("\nNumero maximo de alunos alterado para 100"). &n).

Exemplo: Produto Interno de dois vetores Ler dois vetores de dimens˜ ao 5 e computar o produto interno destes. Quais tipos de vari´ aveis usar? (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 16 / 29 .

scanf("%lf". for(i=0. i++){ resultado = resultado + ( vetor1[i]*vetor2[i] ). i<5.&vetor1[i]). } printf("\n\n").i+1).0. i < 5. i++){ printf("Entre com valor %d para vetor 2:". resultado.Exemplo: Produto Interno de dois vetores Ler dois vetores de dimens˜ ao 5 e computar o produto interno destes. int i. i++){ printf("Entre com valor %d para vetor 1:". vetor2[5]. for(i=0. } printf("\n\nO produto interno e: %lf\n". i<5.resultado). scanf("%lf".&vetor2[i]). for(i=0. } (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 17 / 29 . int main(){ double vetor1[5]. } //calculando o produto interno resultado = 0.i+1).

(Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 18 / 29 . o programa deve informar isso. Se n˜ ao houver elementos em comum.Exemplo: Elementos Iguais Ler dois vetores com 5 inteiros cada. Checar quais elementos do segundo vetor s˜ ao iguais a algum elemento do primeiro vetor.

i+1). } (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 19 / 29 . vetor2[5]. i++) for(j = 0.i.i+1). printf("Posicao %d do vetor1 igual a %d do vetor2.\n". scanf("%d". int i. j < 5. for(i=0. } printf("\n\n"). scanf("%d". for(i=0. for(i = 0.Exemplo: Elementos Iguais int main(){ int vetor1[5]. i < 5 . } if(!umEmComum) printf("Nenhum elemento em comum!\n").j).&vetor2[i]). } umEmComum = 0. j++) if(vetor1[i] == vetor2[j]){ umEmComum = 1. umEmComum. i++){ printf("Entre com valor %d para vetor 1:". i<5.&vetor1[i]). i++){ printf("Entre com valor %d para vetor 2:". i<5. j.

Vetores em fun¸ co ˜es Vetores tamb´ em podem ser passados como parˆ ametros em fun¸ c˜ oes. n˜ ao ´ e criado um novo vetor! Isto significa que os valores de um vetor s˜ ao alterados dentro de uma fun¸ c˜ ao! (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 20 / 29 . Quando uma vari´ avel simples ´ e passada como parˆ ametro. Ao contr´ ario dos tipos simples. seu valor ´ e atribu´ ıdo para uma nova vari´ avel local da fun¸ c˜ ao. vetores tˆ em um comportamento diferente quando usados como parˆ ametros de fun¸ c˜ oes. No caso de vetores.

for(i=0. int i.Vetores em fun¸ co ˜es #include <stdio. } int main(){ int x[10].h> void fun1(int vet[]. int tam){ int i.i<10. fun1(x. } (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 21 / 29 .i<tam. for(i=0.i++) x[i]=8.i++) vet[i]=5.i++) printf("%d\n".10).i<10. for(i=0.x[i]).

} } O c´ odigo acima n˜ ao compila. i++) { printf("Digite um numero:"). &vet[i]).Vetores em fun¸ co ˜es Vetores n˜ ao podem ser devolvidos por fun¸ c˜ oes. vet[100]. usando o fato de que vetores s˜ ao alterados dentro de fun¸ c˜ oes. #include <stdio. pois n˜ ao podemos retornar um int[] .h> int[] leVet() { int i. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 22 / 29 . scanf("%d". podemos obter um resultado parecido com isso. Mas mesmo assim. i < 100. for (i = 0.

i++){ printf("Digite numero:").vet[i]).h> void leVet(int vet[]. } } void escreveVet(int vet[]. podemos criar a seguinte fun¸ c˜ ao: #include <stdio. i++) printf("vet[%d] = %d\n". i< tam. int tam){ int i. for(i = 0. } (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 23 / 29 .&vet[i]). int tam){ int i. scanf("%d". for(i=0. i < tam.i.Vetores em fun¸ co ˜es Mas como um vetor ´ e alterado dentro de uma fun¸ c˜ ao.

Vetor 1 --------\n"). } (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 24 / 29 .10).Vetor 2 --------\n").Vetor 2 --------\n"). escreveVet(vet1. printf(" -----. printf(" -----. printf(" -----.20).Vetores em fun¸ co ˜es int main(){ int vet1[10]. leVet(vet1. leVet(vet2.20). escreveVet(vet2. printf(" -----. vet2[20].Vetor 1 --------\n").10).

Exerc´ ıcio Crie uma fun¸ c˜ ao int maiorValor(int vet[]. int tam) que recebe como parˆ ametros um vetor e seu tamanho e devolve o maior valor armazenado no vetor. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 25 / 29 .

(Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 26 / 29 . int tam) que recebe como parˆ ametros um vetor e seu tamanho e devolve a m´ edia dos valores armazenados no vetor.Exerc´ ıcio Crie uma fun¸ c˜ ao double media(int vet[].

int tam. seu tamanho e um inteiro C . 7) e C = 35 ent˜ ao a fun¸ c˜ ao deve devolver 1. 4. A fun¸ c˜ ao deve retornar 1 caso existam dois elementos distintos do vetor tal que a multiplica¸ c˜ ao destes ´ e C. Mas se C = −1 ent˜ ao a fun¸ c˜ ao deve devolver 0. int C) que recebe como parˆ ametros um vetor. −10. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 27 / 29 . Exemplo: Se vet = (2. 5.Exerc´ ıcio Crie uma fun¸ c˜ ao int checa(int vet[].

4.3. 10.6}. 5.Informa¸ co ˜es Extras: Inicializa¸ c˜ ao de um vetor Em algumas situa¸ c˜ oes ´ e necess´ ario declarar e j´ a atribuir um conjunto de valores contantes para um vetor. -1. int vet2[] = {5. Exemplos: double vet1[] = {2. Em C. (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 28 / 29 . isto ´ e feito atribuindo-se uma lista de elementos para o vetor na sua cria¸ c˜ ao da seguinte forma: <tipo> identificador [] = {elementos separados por v´ ırgula} . 4. 3.5. 3. 0}. 4.

3. int i. int vet2[] = {5. 0}. for(i=0. i++) printf("%d\n". i<4. for(i=0. 10.Informa¸ co ˜es Extras: Inicializa¸ c˜ ao de um vetor #include <stdio. 4. 5. 3. i<6. 3. } (Instituto de Computa¸ c˜ ao – Unicamp) MC-102 — Aula 12 6 de Setembro de 2012 29 / 29 .6}. -1.h> int main(){ double vet1[] = {2. 4. vet1[i]). vet2[i]).4.5. i++) printf("%lf\n".