65
1/62 Programa¸ ao de Computadores I Aula 09 Programa¸c˜ ao: Vetores Jos´ e Romildo Malaquias Departamento de Computa¸c˜ ao Universidade Federal de Ouro Preto 2011-1

Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

Embed Size (px)

Citation preview

Page 1: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

1/62

Programacao de Computadores I

Aula 09

Programacao: Vetores

Jose Romildo Malaquias

Departamento de ComputacaoUniversidade Federal de Ouro Preto

2011-1

Page 2: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

2/62

Motivacao

Problema

Faca um programa que leia as notas dos alunos de uma turma de 5alunos, determine e mostre a media aritmetica das notas, e onumero de alunos com notas inferiores a media.

Page 3: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

3/62

Motivacao (cont.)

#include <stdio.h>

int main(void)

{

double nota;

double soma = 0.0;

for (int i = 0; i < 5; i++)

{

printf("nota %d: ", i+1);

scanf("%lf", &nota);

soma = soma + nota;

}

double media = soma / 5;

printf("media: %2f\n", media);

// e agora ... como acessar as notas ja digitadas?

return 0;

}

Page 4: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

4/62

Motivacao (cont.)

I Este programa utiliza uma unica variavel para armazenar anota digitada pelo usuario.

I Toda vez que o usuario digita uma nova nota, o valoranteriormente digitado e perdido.

I Apos ler todas as notas e calcular a media, nao e maispossıvel comparar cada nota com a media.

I Solucao?Usar uma variavel diferente para armazenar cada nota.

Page 5: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

5/62

Motivacao (cont.)

#include <stdio.h>

int main(void)

{

double n1, n2, n3 , n4 , n5;

printf("nota 1: "); scanf("%lf", &n1);

printf("nota 2: "); scanf("%lf", &n2);

printf("nota 3: "); scanf("%lf", &n3);

printf("nota 4: "); scanf("%lf", &n4);

printf("nota 5: "); scanf("%lf", &n5);

double media = (n1 + n2 + n3 + n4 + n5) / 5;

printf("media: %2f\n", media);

int cont = 0;

if (n1 < media) cont ++;

if (n2 < media) cont ++;

if (n3 < media) cont ++;

if (n4 < media) cont ++;

if (n5 < media) cont ++;

printf("abaixo da media: %d\n", cont);

return 0;

}

Page 6: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

6/62

Motivacao (cont.)

I O problema foi resolvido.

I Porem o fato de usarmos uma variavel diferente para cadanota impossibilita o uso de comando de repeticao.

I Assim foi necessaro escrever scanf 5 vezes, e if 5 vezes.

Page 7: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

7/62

Motivacao (cont.)

I Estenda o problema para trabalhar com uma turma de 100alunos.

E possıvel, porem esta sera uma tarefa enfadonha e sujeita aerros, pois serao necessarios:

100 variaveis distintas, cada uma com um nome diferente.100 comandos scanf

100 comandos if

I Pergunta:Existe outra maneira de trabalhar com as 100 variaveis semusar 100 nomes diferentes?

I Resposta:Sim, utilizando vetor.

Page 8: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

8/62

Motivacao (cont.)

I Estenda o problema para trabalhar com um numero de alunosque somente sera conhecido em tempo de execucao.

Com este esquema nao e possıvel.

I Pergunta:Existe uma maneira de trabalhar com um numerodesconhecido (pelo programador) de variaveis?

I Resposta:Sim, utilizando vetor.

Page 9: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

9/62

Vetor

I Vetor e uma variavel composta homogeneaunidimensional.

I Um vetor e formado por uma sequencia de variaveis, todas domesmo tipo de dados.

I Dizemos que cada variavel componente e um elemento dovetor.

I As variaveis que compoem um vetor sao todas identificadaspor um mesmo nome.

I Estas variaveis sao alocadas sequencialmente na memoria.

Page 10: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

10/62

Vetor (cont.)

Page 11: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

11/62

Declaracao de uma variavel vetor

tipo identificador [tamanho];

I Primeiro o tipo de dado dos componentes do vetor:int, float, double, char, . . .

I Segundo o nome da variavel vetor: usando as mesmasconvencoes de um identificador comum:array, vetor, variavelDeNumeros, vet, . . .

I E por fim, o tamanho do vetor (isto e, a quantidade deelementos que formam o vetor) escrito entre colchetes:[5], [10], [3], . . .

Page 12: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

12/62

Declaracao de uma variavel vetor (cont.)

Exemplos:

int vet [6]; // um vetor de 6 inteiros

double notas [100]; // um vetor de 100 doubles

char texto [256]; // um vetor de 256 caracteres

double medias [2*n]; // um vetor de 2*n doubles

Page 13: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

13/62

Declaracao de uma variavel vetor (cont.)

I Todo vetor e um espaco linear na memoria dividido em variasvariaveis componentes de acordo com o tamanho declarado.

I Ao declaramos

int vet[4]

e alocado na memoria um espaco linear para 4 variaveisinteiras, representadas da seguinte forma:

I Assim vet e uma variavel vetor formada por 4 espacos dememoria.

Page 14: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

14/62

Acessando elementos de um vetor

I Os componentes de um vetor sao numeradossequencialmente comecando com zero.

I Para identificar cada componente usamos o nome do vetorjuntamente com o numero que indica a posicao docomponente na sequencia.

I A posicao de um componente e chamada de ındice.

I Exemplo:

double Notas [10];

Page 15: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

15/62

Acessando elementos de um vetor (cont.)

I Sintaxe:

vetor[ındice]

I Primeiramente escreve-se o vetor.

I Depois escreve-se o ındice (uma expressao inteira) entrecolchetes.

Page 16: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

16/62

Acessando elementos de um vetor (cont.)

I Exemplo:

double Notas [10];

Notas [1] = 9.35;

printf("%f", Notas [1]);

Notas[1] refere-se ao componente na posicao 1 do vetorNotas, ou seja, o segundo elemento do vetor.

Page 17: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

17/62

Acessando elementos de um vetor (cont.)

I Uma vez que as variaveis que compoem o vetor tem o mesmonome, o que distingue cada uma delas e o seu ındice, quereferencia sua localizacao dentro da estrutura.

Page 18: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

18/62

Acessando elementos de um vetor (cont.)

Page 19: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

19/62

Acessando elementos de um vetor (cont.)

I A primeira posicao de um vetor tem ındice 0.

I A ultima posicao de um vetor tem ındice tamanho - 1 .

I Importante:

O sistema de execucao nao verifica se o ındice usado paraacessar um componente do vetor e valido.

E responsabilidade do programador garantir que o ındiceusado para acessar um elemento de um vetor e valido.

Page 20: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

20/62

Acessando elementos de um vetor (cont.)

Nao esqueca:

I Para acessar uma posicao especıfica de um vetor basta indicara posicao desejada entre colchetes

I A posicao e chamada de ındice.

I A faixa de ındices validos inicia em 0 e termina com otamanho - 1.

I Exemplo: os ındices validos para um vetor de tamanho 4 sao0, 1, 2 e 3.

Page 21: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

21/62

Acessando elementos de um vetor (cont.)

Exemplo:

Declarar um vetor de tamanho 4 e atribuir o valor 540 na posicao1 e o valor 8456 na posicao 3.

int vetor [4];

vetor [1] = 540;

vetor [3] = 8456;

Page 22: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

22/62

Acessando elementos de um vetor (cont.)I O limite do vetor e sempre o seu tamanho menos 1.

I No exemplo anterior o vetor e de tamanho 4, a posicaomaxima e 3, pois 4 − 1 = 3.

I Se um valor for atribuıdo fora dos limites do vetor ocorreraum erro muito grave, pois o valor estara sendo armazenadoem um espaco de memoria que nao pertence ao vetor.

I Ainda no exemplo anterior, nao se deve fazer

vetor [4] = 200;

Page 23: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

23/62

Exemplo: ler e mostrar um vetor

Inserir 5 notas em um vetor, depois disso visualizar as notasinseridas.

Page 24: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

24/62

Exemplo: ler e mostrar um vetor (cont.)

#include <stdio.h>

int main(void)

{

double notas [5]; // um vetor de 5 elementos

int j; // ındice no vetor

// entrada dos dados

for (j = 0; j < 5; j++)

{

printf("Inserir nota %d: ", j+1);

scanf("%d", &notas[j]);

}

// visualizac~ao dos dados

for (j = 0; j < 5; j++)

printf("%d ", notas[j]);

return 0;

}

Page 25: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

25/62

Exemplo: ler e mostrar um vetor (cont.)

Page 26: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

26/62

Exemplo: ler e mostrar um vetor (cont.)

Page 27: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

27/62

Exemplo: ler e mostrar um vetor (cont.)

Page 28: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

28/62

Exemplo: ler e mostrar um vetor (cont.)

Page 29: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

29/62

Exemplo: ler e mostrar um vetor (cont.)

Page 30: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

30/62

Exemplo: ler e mostrar um vetor (cont.)

Page 31: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

31/62

Exemplo: ler e mostrar um vetor (cont.)

Page 32: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

32/62

Exemplo: ler e mostrar um vetor (cont.)

Page 33: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

33/62

Exemplo: ler e mostrar um vetor (cont.)

Page 34: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

34/62

Exemplo: ler e mostrar um vetor (cont.)

Page 35: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

35/62

Exemplo: ler e mostrar um vetor (cont.)

Page 36: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

36/62

Exemplo: ler e mostrar um vetor (cont.)

Page 37: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

37/62

Exemplo: ler e mostrar um vetor (cont.)

Page 38: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

38/62

Exemplo: ler e mostrar um vetor (cont.)

Page 39: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

39/62

Exemplo: ler e mostrar um vetor (cont.)

Page 40: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

40/62

Exemplo: ler e mostrar um vetor (cont.)

Page 41: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

41/62

Exemplo: ler e mostrar um vetor (cont.)

Page 42: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

42/62

Exemplo: ler e mostrar um vetor (cont.)

Page 43: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

43/62

Exemplo: media de 5 notas

Faca um programa que leia as notas dos alunos de uma turma de 5alunos, determine e mostre a media aritmetica das notas, e onumero de alunos com notas inferiores a media.

Page 44: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

44/62

Exemplo: media de 5 notas (cont.)

#include <stdio.h>

int main(void)

{

double notas [5];

int indice;

// leitura dos dados

for (indice = 0; indice < 5; indice ++)

{

printf("nota %d: ", indice + 1);

scanf("%lf", &notas[indice ]);

}

// calculo e exibic~ao da media

double soma = 0;

for (indice = 0; indice < 5; indice ++)

soma = soma + notas[indice ];

Page 45: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

45/62

Exemplo: media de 5 notas (cont.)

double media = soma /5;

printf("media: %2f\n", media );

// calculo e exibic~ao da quantidade

// de notas abaixo da media

int cont = 0;

for (indice = 0; indice < 5; indice ++)

if (notas[indice] < media)

cont = cont + 1;

printf("abaixo da media: %d\n", cont);

return 0;

}

Page 46: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

46/62

Exemplo: preenchendo um vetor

I Colocar os numeros de 1 a 5 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = i + 1;

I Colocar os numeros de 5 a 1 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = 5 - i;

Page 47: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

46/62

Exemplo: preenchendo um vetor

I Colocar os numeros de 1 a 5 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = i + 1;

I Colocar os numeros de 5 a 1 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = 5 - i;

Page 48: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

46/62

Exemplo: preenchendo um vetor

I Colocar os numeros de 1 a 5 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = i + 1;

I Colocar os numeros de 5 a 1 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = 5 - i;

Page 49: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

46/62

Exemplo: preenchendo um vetor

I Colocar os numeros de 1 a 5 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = i + 1;

I Colocar os numeros de 5 a 1 em Vetor.

for (int i = 0; i < 5; i++)

Vetor[i] = 5 - i;

Page 50: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

47/62

Uso de constantes com vetores

I Geralmente e melhor usar um nome representando um valorconstante do que usar a propria constante em um programa.

I Para tanto define-se a constante no inıcio do programa, e norestante do programa usa-se o nome definido.

I Se for necessario redefinir o valor da constante no texto doprograma, o local a ser alterado e somente na declaracao daconstante.

I Alem disto, o uso de um nome pode ser uma dica dosignificado da constante.

Page 51: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

48/62

Uso de constantes com vetores (cont.)

I Geralmente e melhor definir e usar uma constante pararepresentar o tamanho de um vetor do que escrever o valor dotamanho explicitamente em todas os locais que precisamos dotamanho.

Page 52: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

49/62

Uso de constantes com vetores (cont.)I Uma constante pode ser definida como uma macro do

pre-processador usando a diretiva #define.

I No inıcio da compilacao, o pre-processador substitui todas asocorrencias no nome da macro pela definicao dada.

I Este procedimento e apenas manipulacao do texto doprograma.

I Nao e feita nenhuma checagem de tipo com o nome da macro.

I Exemplo:

#define TAMANHO 5

double VetReais[TAMANHO ];

// coloca 5,4,3,2,1 no vetor

for (i = 0; i < TAMANHO; i++)

VetReais[i] = TAMANHO + i;

Page 53: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

50/62

Uso de constantes com vetores (cont.)

I Uma constante pode ser definida no nıvel da linguagematraves do especificador const colocado em uma declaracaode variavel, antes no nome do tipo.

I A variavel assim definida e similar as outras variaveis, excetopelo fato de que o seu valor nao pode ser alterado. Portantonao e possıvel fazer uma atribuicao a ela.

I Exemplo:

const int TAMANHO = 20

double VetReais[TAMANHO], VetCopia[TAMANHO ];

// copia os dados de um vetor para outro

for(i = 0; i < TAMANHO; i++)

VetCopia[i] = VetReais[i];

Page 54: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

51/62

Exemplo: ordem inversa

Construa um algoritmo que leia 300 numeros inteiros e imprimaesses numeros na ordem inversa de entrada.

Page 55: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

52/62

Exemplo: ordem inversa (cont.)

#include <stdio.h>

#define QUANTIDADE 300 // definic~ao de macro

int main(void)

{

int vet[QUANTIDADE ];

int i;

// leitura dos dados

for (i = 0; i < QUANTIDADE; i++)

{

printf("numero %d: ", i + 1);

scanf("%d", &vet[i]);

}

// impress~ao na ordem inversa

printf("\nordem inversa :\n");

for (i = QUANTIDADE - 1; i >= 0; i--)

printf("numero %d: %d\n", i + 1, vet[i]);

return 0;

}

Page 56: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

53/62

Inicializacao de vetores

I Quando declaramos um vetor, os seus elementos nao saoinicializados.

I Neste caso os seus elementos sao desconhecidos (lixo) e sodeverao ser utilizados apos atribuicao.

I Porem e possıvel fazer a inicializacao de um vetor com osvalores iniciais desejados.

I Os valores inicias sao colocados entre chaves {}.

I Exemplo:

int v[5] = { 16, 36, 3, 8, 26 };

Page 57: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

54/62

Inicializacao de vetores (cont.)

I A quantidade de valores entre chaves nao deve ser maior queo tamanho do vetor.

I A fim de facilitar a inicializacao, C permite omitir o numerode elementos (tamanho): [].

I Neste caso, o compilador assume que o tamanho do vetor eigual ao numero de valores especificados na inicializacao(entre chaves).

I Exemplo:

int v[] = { 16, 36, 3, 8, 26 };

Page 58: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

55/62

Busca

I Dada uma colecao de n elementos, pretende-se saber se umdeterminado valor x esta presente nessa colecao.

I Para efeitos praticos, vamos supor que essa colecao eimplementada como sendo um vetor de n elementos inteiros:v[0]..v[n-1].

Page 59: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

56/62

Pesquisa sequencial

I Utilizamos uma variavel encontrado para sinalizar se o valorja foi encontrado. Inicialmente o seu valor e falso(representando como 0 no C).

I Percorremos o vetor desde a primeira posicao ate a ultima, ouate o valor ser encontrado:

Para cada posicao i , comparamos v[i] com o valor x:

se forem iguais sinalizamos que o valor foi encontradoatribuindo verdadeiro (representado como 1 no C) a variavelencontrado

se chegarmos ao fim do vetor sem sucesso concluımos que ovalor nao existe no vetor

Page 60: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

57/62

Pesquisa sequencial (cont.)

Passos:

1. Inicializacao

int i = 0;

int encontrado = 0; /* falso */

Page 61: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

58/62

Pesquisa sequencial (cont.)

2. Pesquisa

while (i < TAMANHO && ! encontrado)

{

if (vetor[i] == x)

encontrado = 1; /* verdadeiro */

else

i++;

}

Page 62: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

59/62

Pesquisa sequencial (cont.)

3. Tratamento do resultado

if (encontrado)

printf("Valor %d encontrado na posic~ao %d\n",

vetor[i], i);

else

printf("Valor %d n~ao encontrado\n",

vetor[i]);

Page 63: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

60/62

Pesquisa sequencial (cont.)

Exemplo:

#include <stdio.h>

#define TAMANHO 4

int main(void)

{

int vet[TAMANHO ];

int i;

// leitura dos dados

printf("Digite %d numeros :\n", TAMANHO );

for (i = 0; i < TAMANHO; i++)

scanf("%d", &vet[i]);

// leitura do valor a ser pesquisado

int valor;

printf("Valor procurado :\n");

scanf("%d", &valor);

Page 64: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

61/62

Pesquisa sequencial (cont.)

// realiza a pesquisa

int encontrado = 0; /* falso */

for (i = 0; i < TAMANHO && !encontrado; i++)

encontrado = (vet[i] == valor);

// exibe resultado

if (encontrado)

printf("encontrado na posic~ao %d\n", i - 1);

else

printf("n~ao encontrado\n");

return 0;

}

Page 65: Programa˘c~ao de Computadores I - DECOM-UFOP · 100 comandos scanf 100 comandos if ... I E por m, o tamanho do vetor (isto e, a quantidade de elementos que formam o vetor) escrito

62/62

FIM

Creditos:Baseado no material preparado pelo

Prof. Guillermo Camara-Chavez.