Buscar

Aula 06 - Vetores Numéricos

Prévia do material em texto

15/07/2013
1
João Monlevade, 15 de julho de 2013
Universidade Federal de Ouro Preto
Campus João Monlevade
Prof. Mateus Ferreira Satler
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Em diversas situações os tipos básicos de dados 
(inteiro, real, caracter, ....) não são suficientes 
para representar a informação que se deseja 
armazenar.
◦ Exemplo, uma palavra: “AULA”.
◦ Valor de 50 produtos em uma loja
 Existe a possibilidade de construção de novos 
tipos de dados a partir da composição (ou 
abstração) de tipos de dados primitivos.
◦ Esses novos tipos têm um formato denominado 
ESTRUTURA DE DADOS, que define como os tipos 
primitivos estão organizados.
2
15/07/2013
2
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Problema 1
◦ Como poderíamos fazer um algoritmo para ler 50 
notas de uma turma e calcular sua média?
3
int main ()
{
int i; //variável de controle
float nota, media, soma = 0;
for (i = 1; i <= 50; i=i+1)
{
printf("Digite uma nota:");
scanf(“%f”, &nota);
soma = soma + nota;
}
media = soma/50;
printf("Media = %f", media);
return 0;
}
Problema:
Qual o valor da 1ª, 
ou 5ª ou 40ª nota???
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Problema 2
◦ Fazer um programa para ler 50 notas de uma turma e 
calcular a sua média. Imprimir as notas lidas juntamente 
com a média da turma como na tabela.
4
Nota Média
8,0 7,75
4,6 7,75
2,3 7,75
3,7 7,75
7,8 7,75
9,0 7,75
... ...
• Como fazê-lo? No exemplo 
anterior, uma nota é sobreposta 
por outra em cada iteração do 
para.
• A solução é armazenar todas as 
50 notas lidas...
Mas como?!?
15/07/2013
3
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Quando uma determinada estrutura de dados 
for composta de variáveis com o mesmo tipo 
primitivo, temos um conjunto homogêneo de 
dados.
 Essas variáveis são chamadas de variáveis 
compostas homogêneas.
5
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Variáveis Compostas Homogêneas 
Unidimensionais (Vetores)
◦ As variáveis compostas homogêneas 
unidimensionais são utilizadas para representar 
arranjos unidimensionais de elementos de um 
mesmo tipo, em outras palavras, são utilizadas para 
representar vetores.
6
15/07/2013
4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 A sintaxe para declaração de uma variável 
deste tipo em C é a seguinte:
tipo identificador [qtd de elementos];
 Exemplo: vetor com 5 elementos do tipo inteiro
int dados [5];
7
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Cada um dos elementos de um vetor é referenciado 
individualmente por meio de um número inteiro entre colchetes 
após o nome do vetor.
 Exemplo: dados
8
Considerando o vetor dados, 
quais valores serão atribuídos a 
X e Y nos exemplos abaixo???
X = dados[1];
Y = dados[4];
3 2 4 7 1
0 1 2 3 4
A instrução abaixo atribui um 
valor ao elemento 0 (zero) do 
vetor dados:
dados[0] = 6;
I = 0;
dados[i] = 6;
15/07/2013
5
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 O programa a seguir, usa o comando for para inicializar 
com zeros os elementos de um array inteiro n de 10 
elementos e o imprime sob a forma de uma tabela.
9
int main()
{
int n[10], i;
for (i=0; i<= 9; i++)
{
n[i] = 0;
}
printf("%s%13s\n","Elemento", "Valor");
for (i=0; i<= 9; i++)
{
printf("%7d%13d\n",i,n[i]);
}
return 0;
}
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 O programa abaixo inicializa os dez elementos de um 
array s com os valores: 2, 4, 6, ..., 20 e imprime o array
em um formato de tabela.
10
#define TAMANHO 10
int main()
{
int s[TAMANHO], j;
for (j=0; j<= TAMANHO - 1; j++)
{
s[j] = 2 + 2*j;
}
printf("%s%13s\n","Elemento", "Valor");
for (j=0; j<= TAMANHO - 1; j++)
{
printf("%8d%13d\n",j,s[j]);
}
return 0;
}
15/07/2013
6
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 É possível fornecer valores a cada elemento 
de um vetor no momento da sua declaração.
 Exemplo:
◦ float valores[5] = {3.6, 2.7, 4.2, 7.9, 1.2};
◦ float numeros[5] = {3.1}; //Como fica o vetor ???????
11
3.6 2.7 4.2 7.9 1.2
0 1 2 3 4
valores
3.1 0.0 0.0 0.0 0.0
0 1 2 3 4
numeros
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Observações:
◦ Os vetores NÃO são automaticamente inicializados!!!
◦ Se houver menos valores do que o número de elementos 
do vetor , os elementos restantes são inicializados 
automaticamente com o valor zero.
 int n[5] = {32, 64, 27};
◦ A seguinte declaração causa um erro de sintaxe:
 int n[5] = {32, 64, 27, 18, 95, 14};
◦ O tamanho do vetores pode ser omitido:
 int n[ ] = {1, 2, 3, 4, 5};
12
15/07/2013
7
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Em C, vetores são passados SEMPRE por 
referência.
 O tamanho do vetor pode ser omitido.
13
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 No exemplo abaixo é apresentado um procedimento 
imprimeVetor que imprime um vetor de tamanho tam.
14
#include <stdio.h>
#define TAMANHO 10
void imprimeVetor (int vet[], int
tam)
{
int i;
for (i = 0; i <= tam - 1; i++)
{
printf("%d\n", vet[i]);
}
}
int main()
{
int s[TAMANHO], i;
for (i = 0; i <= TAMANHO - 1; 
i++)
{
printf ("Informe o valor do
vetor na posição %d: ", i);
scanf (“%d", &s[i]);
}
imprimeVetor(s, TAMANHO);
return 0;
}
15/07/2013
8
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Vamos ver agora o teste de mesa para o 
seguinte problema:
◦ Criar uma função que receba um vetor de números 
reais e seu tamanho e retorne o índice do maior 
valor contido no vetor. Se houver mais de uma 
ocorrência do maior valor, retornar o índice do 
primeiro. Faça um programa principal para testar a 
função.
15
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER16
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
15/07/2013
9
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER17
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Inicialmente são
criadas as 
variáveis
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER18
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Chama a função 
encontraMaior
15/07/2013
10
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER19
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice= 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Vetor e seu Vetor e seu 
tamanho são 
passados como 
parâmetro
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER20
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Variáveis locais 
da função são 
inicializadas
Variáveis:
maior = 3.0
indice = 0
15/07/2013
11
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER21
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Começa a busca 
pelo índice 1, uma 
vez que o índice 
zero já foi utilizada
para inicializar a 
variável indice
Variáveis:
maior = 3.0
indice = 0
i = 1
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER22
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 4.3 > 3.0)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Executa o primeiro 
teste
Variáveis:
maior = 3.0
indice = 0
i = 1
15/07/2013
12
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER23
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 4.3 > 3.0)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Sendo o teste 
verdadeiro, atualiza 
variáveis maior e 
indice.
Variáveis:
maior = 4.3
indice = 1
i = 1
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER24
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Passa para a 
próxima 
iteração do 
loop.
Variáveis:
maior = 4.3
indice = 1
i = 2
15/07/2013
13
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER25
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 5.6 > 4.3)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Mais um teste 
verdadeiro.
Variáveis:
maior = 4.3
indice = 1
i = 2
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER26
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 4.3 > 3.0)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Sendo o teste 
verdadeiro, atualiza 
variáveis maior e 
indice.
Variáveis:
maior = 5.6
indice = 2
i = 2
15/07/2013
14
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER27
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Passa para a 
próxima 
iteração do 
loop.
Variáveis:
maior = 5.6
indice = 2
i = 3
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER28
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 2.8 > 5.6)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Valor do vetor é 
menor, não entra na 
condição.
Variáveis:
maior = 5.6
indice = 2
i = 3
15/07/2013
15
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER29
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Passa para a 
próxima 
iteração do 
loop.
Variáveis:
maior = 5.6
indice = 2
i = 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER30
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 7.9 > 5.6)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Mais um teste 
verdadeiro.
Variáveis:
maior = 5.6
indice = 2
i = 4
15/07/2013
16
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER31
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 4.3 > 3.0)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Sendo o teste 
verdadeiro, atualiza 
variáveis maior e 
indice.
Variáveis:
maior = 7.9
indice = 4
i = 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER32
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Passa para a 
penúltima 
iteração do 
loop.
Variáveis:maior = 7.9
indice = 4
i = 5
15/07/2013
17
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER33
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( 3.4 > 7.9)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Valor do vetor é 
menor, não entra na 
condição.
Variáveis:
maior = 7.9
indice = 4
i = 5
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER34
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Passa para a 
última iteração do 
loop (nesse caso, 
não entra).
Variáveis:
maior = 7.9
indice = 4
i = 6
15/07/2013
18
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER35
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return 4;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Retorna o índice 
do maior valor.
Variáveis:
maior = 7.9
indice = 4
i = 6
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER36
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Volta para a função 
principal, pegando 
o retorno do índice 
do maior valor
posicao = 4
15/07/2013
19
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER37
int encontraMaior (float vet [], int tam)
{
int indice, i;
float maior = vet[0];
indice = 0;
for (i = 1; i < tam; i++)
{
if( vet[i] > maior)
{
maior = vet[i];
indice = i;
}
}
return indice;
}
int main ()
{
float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4};
int posicao;
posicao = encontraMaior(vetor, 6);
printf("Maior valor esta na posicao %d", posicao);
return 0;
}
Imprime o índice do
maior valor
posicao = 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
 Vamos ver agora o teste de mesa para o 
seguinte problema:
◦ Criar um procedimento em C que receba um vetor 
de números reais e um valor inteiro representando 
o seu tamanho. Esse procedimento deverá ordenar 
o vetor em ordem crescente.
38
15/07/2013
20
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER39
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER40
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Vamos supor para esse 
exercício que o vetor de 
entrada tenha 5 posições e os 
seguintes valores
11.0, 22.0, 3.0, 44.0, 5.0
15/07/2013
21
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER41
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
11.0 22.0 3.0 44.0 5.0
0 1 2 3 4
Inicialmente o 
procedimento é 
chamado 
passando-se os 
valores propostos
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER42
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 
j = 
aux = 
11.0 22.0 3.0 44.0 5.0
0 1 2 3 4
A seguir são criadas 
as variáveis 
auxiliares
15/07/2013
22
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER43
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 
aux = 
11.0 22.0 3.0 44.0 5.0
0 1 2 3 4
A ideia central é ir “puxando” os 
menores valores através de 
trocas para o início do vetor
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER44
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 4
aux = 
11.0 22.0 3.0 44.0 5.0
0 1 2 3 4
É no loop interno que iremos iterar sobre o vetor 
efetuando essas trocas, conforme os menores 
valores forem sendo identificados. Repare que 
iremos iterar do último elemento até o elemento i+1.
15/07/2013
23
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER45
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 44.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 4
aux = 
11.0 22.0 3.0 44.0 5.0
0 1 2 3 4
Os testes são feitos 
sempre entre os
valores i e o seu 
antecessor (i-1)
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER46
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 44.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 4
aux = 5.0
11.0 22.0 3.0 44.0 5.0
0 1 2 3 4
Como é menor, 
efetua a troca.
15/07/2013
24
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER47
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 44.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 4
aux = 5.0
11.0 22.0 3.0 44.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER48
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 44.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 4
aux = 5.0
11.0 22.0 3.0 5.0 44.0
0 1 2 3 4
15/07/2013
25
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER49
void ordena(float vet[], int tam)
{int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 3
aux = 5.0
11.0 22.0 3.0 5.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER50
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 3.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 3
aux = 5.0
11.0 22.0 3.0 5.0 44.0
0 1 2 3 4
Aqui o teste falha. 
Vai para a próxima
iteração do loop 
interno.
15/07/2013
26
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER51
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 2
aux = 5.0
11.0 22.0 3.0 5.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER52
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 3.0 < 22.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 2
aux = 5.0
11.0 22.0 3.0 5.0 44.0
0 1 2 3 4
15/07/2013
27
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER53
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 3.0 < 22.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 2
aux = 3.0
11.0 3.0 22.0 5.0 44.0
0 1 2 3 4
Como valor é 
menor, efetua a 
troca como visto 
anteriormente.
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER54
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 1
aux = 3.0
11.0 3.0 22.0 5.0 44.0
0 1 2 3 4
15/07/2013
28
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER55
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 3.0 < 11.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 1
aux = 3.0
11.0 3.0 22.0 5.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER56
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 3.0 < 11.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 1
aux = 3.0
3.0 11.0 22.0 5.0 44.0
0 1 2 3 4
Como valor é 
menor, efetua a 
troca como visto 
anteriormente.
15/07/2013
29
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER57
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 0
j = 0
aux = 3.0
3.0 11.0 22.0 5.0 44.0
0 1 2 3 4
Nesse ponto, como 
j = 0, saiu do laço 
interno e volta para 
o externo.
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER58
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 0
aux = 3.0
3.0 11.0 22.0 5.0 44.0
0 1 2 3 4
Como o i é incrementado, a posição 
0 do vetor não será mais modificada
15/07/2013
30
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER59
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 4
aux = 3.0
3.0 11.0 22.0 5.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER60
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 44.0 < 5.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 4
aux = 3.0
3.0 11.0 22.0 5.0 44.0
0 1 2 3 4
15/07/2013
31
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER61
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 3
aux = 3.0
3.0 11.0 22.0 5.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER62
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 22.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 3
aux = 3.0
3.0 11.0 22.0 5.0 44.0
0 1 2 3 4
15/07/2013
32
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER63
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 22.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 3
aux = 5.0
3.0 11.0 5.0 22.0 44.0
0 1 2 3 4
Como valor é 
menor, efetua a 
troca como visto 
anteriormente.
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER64
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 2
aux = 5.0
3.0 11.0 5.0 22.0 44.0
0 1 2 3 4
15/07/2013
33
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER65
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 11.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 2
aux = 5.0
3.0 11.0 5.0 22.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER66
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 5.0 < 11.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 2
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
Como valor é 
menor, efetua a 
troca como visto 
anteriormente.
15/07/2013
34
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER67
void ordena(float vet[], int tam)
{
int i, j;float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 1
j = 1
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
Nesse ponto, como 
j = 1, saiu do laço 
interno e volta para 
o externo.
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER68
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 2
j = 1
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
Como o i é incrementado, a posição 
1 do vetor não será mais modificada
15/07/2013
35
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER69
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 44.0 < 22.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 2
j = 4
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER70
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 22.0 < 11.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 2
j = 3
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
15/07/2013
36
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER71
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 2
j = 2
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
Nesse ponto, como 
j = 2, saiu do laço 
interno e volta para 
o externo.
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER72
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 3
j = 2
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
Como o i é incrementado, a posição 
2 do vetor não será mais modificada
15/07/2013
37
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER73
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( 44.0 < 22.0 )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 3
j = 4
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER74
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 3
j = 3
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
Nesse ponto, como 
j = 3, saiu do laço 
interno e volta para 
o externo.
15/07/2013
38
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER75
void ordena(float vet[], int tam)
{
int i, j;
float aux;
for(i = 0; i <= (tam-2); i++)
{
for(j = tam-1; j > i; j--)
{
if ( vet[j] < vet[j-1] )
{
aux=vet[j];
vet[j]= vet[j-1];
vet[j-1]=aux;
}
}
}
}
Variáveis:
tam = 5
i = 4
j = 3
aux = 5.0
3.0 5.0 11.0 22.0 44.0
0 1 2 3 4
O i é incrementado e sai do laço 
externo, finalizando o procedimento.
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
1. Quais são os elementos do vetor 
referenciados pelas expressões abaixo ? 
vet
a) vet[3] b) vet[0] c) vet[13]
2. Qual é a diferença entre os números “3” das 
duas instruções abaixo?
int vet [3];
vet[3] = 5;
76
1 2 4 7 4 2 8 9 0 6 5 4 3
15/07/2013
39
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
3. Dada um tabela contendo a idade de 10 alunos, 
faça um programa que calcule o número de 
alunos com idade superior a média.
4. Faça um programa para ler e somar dois 
vetores de 10 elementos inteiros. Imprima ao 
final os valores dessa soma, elemento a 
elemento.
5. Refaça o exercício anterior criando um 
procedimento para efetuar a leitura dos vetores 
e um segundo procedimento que imprimirá a 
soma dos vetores.
77
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
6. Refaça o exercício anterior criando uma função que 
receba o vetor com a idade dos alunos e retorne a 
quantidade de alunos com idade superior a média.
7. Faça um programa que leia, via teclado, 20 valores 
do tipo inteiro e determine qual o menor valor 
existente no vetor e imprima valor e seu índice no 
vetor.
8. Refaça o exercício anterior criando um 
procedimento que receba como parâmetro o vetor e 
imprima o menor valor e seu índice no vetor.
78
15/07/2013
40
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
9. Desenvolva um programa que leia um vetor de números reais, 
um escalar e imprima o resultado da multiplicação do vetor 
pelo escalar.
10. Faça um procedimento que faça a leitura um vetor de 10 
elementos inteiros e imprima somente os valores armazenados 
nos índices pares.
11. Faça um programa que leia um vetor com 15 valores reais. A 
seguir, encontre o menor elemento do vetor e a sua posição 
dentro do vetor, mostrando: “O menor elemento do vetor esta 
na posição XXXX e tem o valor YYYYY.”
12. Faça um programa que leia um vetor de 15 posições (reais) e 
depois um valor a ser procurado no vetor. Imprima se o valor 
foi ou não encontrado e a quantidade de vezes que o valor 
está presente no vetor.
79
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
13. Faça uma função que receba um vetor de números 
inteiros e um valor inteiro. A função deverá procurar 
este segundo valor neste vetor e retornar seu índice se 
for encontrado. Se o elemento não for encontrado, 
retornar -1.
14. Dada uma tabela com as notas de uma turma de 20 
alunos, faça funções que retornem:
a) A média da turma.
b) A quantidade de alunos aprovados (>=60)
c) A quantidade de alunos reprovados (< 60)
15. Faça um programa que leia um conjunto de 20 valores e 
armazene-os num vetor V. Particione-o em dois outros 
vetores, P e I, conforme os valores de V forem pares ou 
ímpares. No final, imprima os valores dos 3 vetores.
80
15/07/2013
41
CEA 030 – Programação de Computadores I
PROF. MATEUS FERREIRA SATLER
16. Faça um programa que leia um vetor G[13] que é o 
gabarito de um teste da loteria esportiva, contendo os 
valores 1 quando for coluna 1, 0 quando for coluna do 
meio e 2 quando for coluna 2. Ler a seguir, para 5 
apostadores, seu cartão de apostas (R[13]) e depois da 
leitura imprimir quantos acertos o apostador teve. Faça 
o teste através de funções.
17. Com relação ao exercício anterior, calcule e mostre o 
percentual dos apostadores que fizeram de 10 a 13 
pontos e o percentual dos apostadores que fizeram 
menos do que 10 pontos.
18. Faça um programa que leia um vetor de valores inteiros 
e imprima-o na ordem crescente. O vetor deve ter 
tamanho N (utilize a diretiva #define).
81

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes