Ir ao conteúdo
  • Cadastre-se

vetor crescente erro! ajuda?


italobrenun

Posts recomendados

Boa tarde

na hora que eu digito 2|1|3 da certo o vetor fica crescente!

mas na hora que digito 3|1|2 esta dando erro! o vetor não sai crescente

como faço para ele dar certo?



#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,h,aux;
int vet[20],vetor[20];
for(h=1,i=0;i<3;i++,h++) /* lê os números */
{
printf(" Digite o %do numero:\t",h);
scanf("\n%d",&vet[i]);
}
for(h=0;h<3;h++) /* Copiar o vetor */
{
vetor[h]=vet[h];
}
//************************************…
for(h=0,i=0;i<3;i++,h++)
{
if(vet[h]>vet[h+1])
{
aux=vet[h+1];
vet[h+1]=vet[h];
vet[h]=aux;
}
}
//////////////////////////////////////…
for(h=0;h<3;h++)
{
printf("%d",vet[h]);
}

system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

-Dá pra juntar o primeiro e segundo for. Você pega o valor, grava na 1ª matriz e já copia na segunda, não tem porque fazer duas vezes esse caminho.

-Não entendi porque 2 contadores (i e h) dá pra se virar com 1 só. No primeiro é só usar i+1 ao invés de h, e no 3º o i não foi usado.

-312 funciona direitinho, o problema são outros números em que exista mais e 1 inversão, como 231 (resultado:213). Motivo: o método bolha funciona por várias repetições, não apenas 1, por isso precisa de 2 laços for aninhados. Se a matriz tem 3 elementos, será necessário passar 3 vezes por todos os elementos para ordenar qualquer tipo de sequencia. (Na realidade 2 com o algoritmo otimizado, mas com 3 tá ótimo.)


#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,h,aux;
int vet[20],vetor[20];
for(i=0;i<3;i++){ /* lê os números */
printf(" Digite o %do numero:\t",i+1);
scanf("\n%d",&vet[i]);
vetor[i]=vet[i];
}
for(i=0;i<3;i++){
for(h=0; h+1<3; h++){
if(vet[h]>vet[h+1]){
aux=vet[h+1];
vet[h+1]=vet[h];
vet[h]=aux;
}
}
}
for(h=0;h<3;h++){
printf("%d",vet[h]);
}
system("PAUSE");
return 0;
}

Laço otimizado:


for(i=0;i<2;i++){
for(h=0; h+1+i < 3; h++){
if(vet[h]>vet[h+1]){
aux=vet[h+1];
vet[h+1]=vet[h];
vet[h]=aux;
}
}
}

Nessa escala não faz diferença nenhuma, talvez até atrapalhe, mas em uma matriz de 100 elementos você vai passar 99 vezes e a cada passada você verifica 1 elemento a menos (100, 99, 98, 97, 96, etc...), pois você já sabe que o "fundo" da matriz contém sempre os maiores elementos.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...