A maior rede de estudos do Brasil

Grátis
95 pág.
Aula 06 - Estruturas de dados homogêneas I - Vetores Numéricos

Pré-visualização | Página 3 de 5

posicao encontraMaior( vetor, 6)
imprima("Maior valor esta na posicao ", posicao);
}
Variáveis
maior = 7.9
indice = 4
i = 5
posicao = 4
Maior valor esta na posicao 4
Imprime o índice do 
maior valor
39
Criar uma função em C que receba um vetor 
de números reais e um valor inteiro 
representando o seu tamanho. Essa função 
deverá ordenar o vetor em ordem crescente.
40
Exercício 2 - Solução Proposta
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;
}
}
}
}
41
Exercício 2 Teste de Mesa
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
42
Exercício 2 Teste de Mesa
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;
}
}
}
}
Inicialmente função é
chamada passando-se 
os valores propostos
5.044.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
43
Exercício 2 Teste de Mesa
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;
}
}
}
}
A seguir são criadas as 
variáveis auxiliares
5.044.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 
j = 
aux = 
44
Exercício 2 Teste de Mesa
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;
}
}
}
}
A idéia central é ir puxando
os menores valores através de 
trocas para o início do vetor
5.044.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 
aux = 
45
Exercício 2 Teste de Mesa
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;
}
}
}
}
É 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.
5.044.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 4
aux = 
46
Exercício 2 Teste de Mesa
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;
}
}
}
}
Os testes são feitos sempre entre os 
valores i e o seu antecessor (i-1)
5.044.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 4
aux = 
47
Exercício 2 Teste de Mesa
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;
}
}
}
}
Como é menor, efetua a troca
5.044.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 4
aux = 5.0
48
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.044.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 4
aux = 5.0
49
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 4
aux = 5.0
50
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 3
aux = 5.0
51
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 3
aux = 5.0
Aqui o teste falha. Vai para a próxima 
iteração do loop interno.
52
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 2
aux = 5.0
53
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.03.022.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 2
aux = 5.0
54
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.022.03.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 2
aux = 3.0
Como valor é menor, efetua a troca 
como visto anteriormente.
55
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.022.03.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 1
aux = 3.0
56
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.022.03.011.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 1
aux = 3.0
57
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.022.011.03.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 1
aux = 3.0
Como valor é menor, efetua a troca 
como visto anteriormente.
58
Exercício 2 Teste de Mesa
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;
}
}
}
}
44.05.022.011.03.0
0 1 2 3 4 
Variáveis:
tam = 5
i = 0 
j = 0
aux = 3.0
Nesse ponto, como j = 0, saiu do laço 
interno e volta para o externo.
59
Exercício 2 Teste de Mesa
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];