Buscar

09-vetores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 65 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 65 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 65 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1/62
Programação de Computadores I
Aula 09
Programação: Vetores
José Romildo Malaquias
Departamento de Computação
Universidade Federal de Ouro Preto
2011-1
2/62
Motivação
Problema
Faça um programa que leia as notas dos alunos de uma turma de 5
alunos, determine e mostre a média aritmética das notas, e o
número de alunos com notas inferiores à média.
3/62
Motivação (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("média: %2f\n", media);
// e agora ... como acessar as notas já digitadas?
return 0;
}
4/62
Motivação (cont.)
I Este programa utiliza uma única variável para armazenar a
nota digitada pelo usuário.
I Toda vez que o usuário digita uma nova nota, o valor
anteriormente digitado é perdido.
I Após ler todas as notas e calcular a média, não é mais
posśıvel comparar cada nota com a média.
I Solução?
Usar uma variável diferente para armazenar cada nota.
5/62
Motivação (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("média: %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 média: %d\n", cont);
return 0;
}
6/62
Motivação (cont.)
I O problema foi resolvido.
I Porém o fato de usarmos uma variável diferente para cada
nota impossibilita o uso de comando de repetição.
I Assim foi necessáro escrever scanf 5 vezes, e if 5 vezes.
7/62
Motivação (cont.)
I Estenda o problema para trabalhar com uma turma de 100
alunos.
É posśıvel, porém esta será uma tarefa enfadonha e sujeita a
erros, pois serão necessários:
100 variáveis distintas, cada uma com um nome diferente.
100 comandos scanf
100 comandos if
I Pergunta:
Existe outra maneira de trabalhar com as 100 variáveis sem
usar 100 nomes diferentes?
I Resposta:
Sim, utilizando vetor.
8/62
Motivação (cont.)
I Estenda o problema para trabalhar com um número de alunos
que somente será conhecido em tempo de execução.
Com este esquema não é posśıvel.
I Pergunta:
Existe uma maneira de trabalhar com um número
desconhecido (pelo programador) de variáveis?
I Resposta:
Sim, utilizando vetor.
9/62
Vetor
I Vetor é uma variável composta homogênea
unidimensional.
I Um vetor é formado por uma sequência de variáveis, todas do
mesmo tipo de dados.
I Dizemos que cada variável componente é um elemento do
vetor.
I As variáveis que compõem um vetor são todas identificadas
por um mesmo nome.
I Estas variáveis são alocadas sequencialmente na memória.
10/62
Vetor (cont.)
11/62
Declaração de uma variável vetor
tipo identificador [tamanho];
I Primeiro o tipo de dado dos componentes do vetor:
int, float, double, char, . . .
I Segundo o nome da variável vetor: usando as mesmas
convenções de um identificador comum:
array, vetor, variavelDeNumeros, vet, . . .
I E por fim, o tamanho do vetor (isto é, a quantidade de
elementos que formam o vetor) escrito entre colchetes:
[5], [10], [3], . . .
12/62
Declaração de uma variável 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
13/62
Declaração de uma variável vetor (cont.)
I Todo vetor é um espaço linear na memória dividido em várias
variáveis componentes de acordo com o tamanho declarado.
I Ao declaramos
int vet[4]
é alocado na memória um espaço linear para 4 variáveis
inteiras, representadas da seguinte forma:
I Assim vet é uma variável vetor formada por 4 espaços de
memória.
14/62
Acessando elementos de um vetor
I Os componentes de um vetor são numerados
sequencialmente começando com zero.
I Para identificar cada componente usamos o nome do vetor
juntamente com o número que indica a posição do
componente na sequência.
I A posição de um componente é chamada de ı́ndice.
I Exemplo:
double Notas [10];
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 expressão inteira) entre
colchetes.
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 posição 1 do vetor
Notas, ou seja, o segundo elemento do vetor.
17/62
Acessando elementos de um vetor (cont.)
I Uma vez que as variáveis que compõem o vetor têm o mesmo
nome, o que distingue cada uma delas é o seu ı́ndice, que
referencia sua localização dentro da estrutura.
18/62
Acessando elementos de um vetor (cont.)
19/62
Acessando elementos de um vetor (cont.)
I A primeira posição de um vetor tem ı́ndice 0.
I A última posição de um vetor tem ı́ndice tamanho - 1 .
I Importante:
O sistema de execução não verifica se o ı́ndice usado para
acessar um componente do vetor é válido.
É responsabilidade do programador garantir que o ı́ndice
usado para acessar um elemento de um vetor é válido.
20/62
Acessando elementos de um vetor (cont.)
Não esqueça:
I Para acessar uma posição espećıfica de um vetor basta indicar
a posição desejada entre colchetes
I A posição é chamada de ı́ndice.
I A faixa de ı́ndices válidos inicia em 0 e termina com o
tamanho - 1.
I Exemplo: os ı́ndices válidos para um vetor de tamanho 4 são
0, 1, 2 e 3.
21/62
Acessando elementos de um vetor (cont.)
Exemplo:
Declarar um vetor de tamanho 4 e atribuir o valor 540 na posição
1 e o valor 8456 na posição 3.
int vetor [4];
vetor [1] = 540;
vetor [3] = 8456;
22/62
Acessando elementos de um vetor (cont.)
I O limite do vetor é sempre o seu tamanho menos 1.
I No exemplo anterior o vetor é de tamanho 4, a posição
máxima é 3, pois 4 − 1 = 3.
I Se um valor for atribúıdo fora dos limites do vetor ocorrerá
um erro muito grave, pois o valor estará sendo armazenado
em um espaço de memória que não pertence ao vetor.
I Ainda no exemplo anterior, não se deve fazer
vetor [4] = 200;
23/62
Exemplo: ler e mostrar um vetor
Inserir 5 notas em um vetor, depois disso visualizar as notas
inseridas.
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]);
}
// visualizaç~ao dos dados
for (j = 0; j < 5; j++)
printf("%d ", notas[j]);
return 0;
}
25/62
Exemplo: ler e mostrar um vetor (cont.)
26/62
Exemplo: ler e mostrar um vetor (cont.)
27/62
Exemplo: ler e mostrar um vetor (cont.)
28/62
Exemplo: ler e mostrar um vetor (cont.)
29/62
Exemplo: ler e mostrar um vetor (cont.)
30/62
Exemplo: ler e mostrar um vetor (cont.)
31/62
Exemplo: ler e mostrar um vetor (cont.)
32/62
Exemplo: ler e mostrar um vetor (cont.)
33/62
Exemplo: ler e mostrar um vetor (cont.)
34/62
Exemplo: ler e mostrar um vetor (cont.)
35/62
Exemplo: ler e mostrar um vetor (cont.)
36/62
Exemplo: ler e mostrar um vetor (cont.)
37/62
Exemplo: ler e mostrar um vetor (cont.)
38/62
Exemplo: ler e mostrar um vetor (cont.)
39/62
Exemplo: ler e mostrar um vetor (cont.)
40/62
Exemplo: ler e mostrar um vetor (cont.)
41/62
Exemplo: ler e mostrar um vetor (cont.)
42/62
Exemplo: ler e mostrar um vetor (cont.)
43/62
Exemplo: média de 5 notas
Faça um programa que leia as notas dos alunos deuma turma de 5
alunos, determine e mostre a média aritmética das notas, e o
número de alunos com notas inferiores à média.
44/62
Exemplo: média 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 ]);
}
// cálculo e exibiç~ao da média
double soma = 0;
for (indice = 0; indice < 5; indice ++)
soma = soma + notas[indice ];
45/62
Exemplo: média de 5 notas (cont.)
double media = soma /5;
printf("média: %2f\n", media );
// cálculo e exibiç~ao da quantidade
// de notas abaixo da média
int cont = 0;
for (indice = 0; indice < 5; indice ++)
if (notas[indice] < media)
cont = cont + 1;
printf("abaixo da média: %d\n", cont);
return 0;
}
46/62
Exemplo: preenchendo um vetor
I Colocar os números de 1 a 5 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = i + 1;
I Colocar os números de 5 a 1 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = 5 - i;
46/62
Exemplo: preenchendo um vetor
I Colocar os números de 1 a 5 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = i + 1;
I Colocar os números de 5 a 1 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = 5 - i;
46/62
Exemplo: preenchendo um vetor
I Colocar os números de 1 a 5 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = i + 1;
I Colocar os números de 5 a 1 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = 5 - i;
46/62
Exemplo: preenchendo um vetor
I Colocar os números de 1 a 5 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = i + 1;
I Colocar os números de 5 a 1 em Vetor.
for (int i = 0; i < 5; i++)
Vetor[i] = 5 - i;
47/62
Uso de constantes com vetores
I Geralmente é melhor usar um nome representando um valor
constante do que usar a própria constante em um programa.
I Para tanto define-se a constante no ińıcio do programa, e no
restante do programa usa-se o nome definido.
I Se for necessário redefinir o valor da constante no texto do
programa, o local a ser alterado é somente na declaração da
constante.
I Além disto, o uso de um nome pode ser uma dica do
significado da constante.
48/62
Uso de constantes com vetores (cont.)
I Geralmente é melhor definir e usar uma constante para
representar o tamanho de um vetor do que escrever o valor do
tamanho explicitamente em todas os locais que precisamos do
tamanho.
49/62
Uso de constantes com vetores (cont.)
I Uma constante pode ser definida como uma macro do
pré-processador usando a diretiva #define.
I No ińıcio da compilação, o pré-processador substitui todas as
ocorrências no nome da macro pela definição dada.
I Este procedimento é apenas manipulação do texto do
programa.
I Não é 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;
50/62
Uso de constantes com vetores (cont.)
I Uma constante pode ser definida no ńıvel da linguagem
através do especificador const colocado em uma declaração
de variável, antes no nome do tipo.
I A variável assim definida é similar às outras variáveis, exceto
pelo fato de que o seu valor não pode ser alterado. Portanto
não é posśıvel fazer uma atribuição 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];
51/62
Exemplo: ordem inversa
Construa um algoritmo que leia 300 números inteiros e imprima
esses números na ordem inversa de entrada.
52/62
Exemplo: ordem inversa (cont.)
#include <stdio.h>
#define QUANTIDADE 300 // definiç~ao de macro
int main(void)
{
int vet[QUANTIDADE ];
int i;
// leitura dos dados
for (i = 0; i < QUANTIDADE; i++)
{
printf("número %d: ", i + 1);
scanf("%d", &vet[i]);
}
// impress~ao na ordem inversa
printf("\nordem inversa :\n");
for (i = QUANTIDADE - 1; i >= 0; i--)
printf("número %d: %d\n", i + 1, vet[i]);
return 0;
}
53/62
Inicialização de vetores
I Quando declaramos um vetor, os seus elementos não são
inicializados.
I Neste caso os seus elementos são desconhecidos (lixo) e só
deverão ser utilizados após atribuição.
I Porém é posśıvel fazer a inicialização de um vetor com os
valores iniciais desejados.
I Os valores inicias são colocados entre chaves {}.
I Exemplo:
int v[5] = { 16, 36, 3, 8, 26 };
54/62
Inicialização de vetores (cont.)
I A quantidade de valores entre chaves não deve ser maior que
o tamanho do vetor.
I A fim de facilitar a inicialização, C permite omitir o número
de elementos (tamanho): [].
I Neste caso, o compilador assume que o tamanho do vetor é
igual ao número de valores especificados na inicialização
(entre chaves).
I Exemplo:
int v[] = { 16, 36, 3, 8, 26 };
55/62
Busca
I Dada uma coleção de n elementos, pretende-se saber se um
determinado valor x está presente nessa coleção.
I Para efeitos práticos, vamos supor que essa coleção é
implementada como sendo um vetor de n elementos inteiros:
v[0]..v[n-1].
56/62
Pesquisa seqüêncial
I Utilizamos uma variável encontrado para sinalizar se o valor
já foi encontrado. Inicialmente o seu valor é falso
(representando como 0 no C).
I Percorremos o vetor desde a primeira posição até a última, ou
até o valor ser encontrado:
Para cada posição i , comparamos v[i] com o valor x:
se forem iguais sinalizamos que o valor foi encontrado
atribuindo verdadeiro (representado como 1 no C) à variável
encontrado
se chegarmos ao fim do vetor sem sucesso conclúımos que o
valor não existe no vetor
57/62
Pesquisa seqüêncial (cont.)
Passos:
1. Inicialização
int i = 0;
int encontrado = 0; /* falso */
58/62
Pesquisa seqüêncial (cont.)
2. Pesquisa
while (i < TAMANHO && ! encontrado)
{
if (vetor[i] == x)
encontrado = 1; /* verdadeiro */
else
i++;
}
59/62
Pesquisa seqüêncial (cont.)
3. Tratamento do resultado
if (encontrado)
printf("Valor %d encontrado na posiç~ao %d\n",
vetor[i], i);
else
printf("Valor %d n~ao encontrado\n",
vetor[i]);
60/62
Pesquisa seqüêncial (cont.)
Exemplo:
#include <stdio.h>
#define TAMANHO 4
int main(void)
{
int vet[TAMANHO ];
int i;
// leitura dos dados
printf("Digite %d números :\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);
61/62
Pesquisa seqüêncial (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 posiç~ao %d\n", i - 1);
else
printf("n~ao encontrado\n");
return 0;
}
62/62
FIM
Créditos:
Baseado no material preparado pelo
Prof. Guillermo Cámara-Chávez.

Continue navegando