Ir ao conteúdo
  • Cadastre-se

Programa para colocar numeros em ordem decrescente.


HRL

Posts recomendados

Fala galera sou iniciante em prog. e gostaria de uma força pois o meu programa não realiza o calculo corretamente e só esta verificando o primeiro numero.

A função seria entrar com 100 numeros e depois coloca-los em ordem decrescente.

#include <stdio.h>

#include <stdlib.h>

int main ()

{

int i;

int val[5];

int aux;

printf("\t----------------------------------------------------------------\t\n");

printf("\tPrograma que le 100 numeros e os imprime em ordem decrescente:\t\n");

printf("\t----------------------------------------------------------------\t\n");

printf("\n\tEntre com 100 numeros:\n");

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

{

printf("\n\t%d§ valor:", i+1);

scanf("%d", &val);

}

printf("\nEstes sao os valores lidos em ordem decrescente:\n");

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

{

if(val < val[i+1])

{

aux = val;

val = val[i+1];

val[i+1] = aux ;

}

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

}

system("pause");

return 0;

}

Se alguem puder me ajudar ficaria grato.Valeu

p.s- limitei o programa temporariamente só para 5 numeros para fazer os testes, mas se quiserem modificar fiquem a vontade.

Link para o comentário
Compartilhar em outros sites


for (i=0; i<=4; i++) {
if(val[i] < val[i+1]) {
aux = val[i];
val[i] = val[i+1];
val[i+1] = aux ;
}
printf("\nval[%d]: %d\n", i+1, val[i]);
}

Numeros: 1, 2, 3, 4, 5

Fazendo o FOR aqui:

i=0

val[0] < val[1] ? (1 < 2) ? sim // faz a troca deles: 2, 1, 3, 4, 5

i=1

val[1] < val[2] ? (1 < 2) ? sim // faz a troca deles: 2, 3, 1, 4, 5

i=2

val[2] < val[3] ? (1 < 4) ? sim // faz a troca deles: 2, 3, 4, 1, 5

i=3

val[3] < val[4] ? (1 < 5) ? sim // faz a troca deles: 2, 3, 4, 5, 1

i=4

val[4] < val[5] ? (1 < ???) ? erro aqui

Fim do FOR

Você tá conseguindo mover um número pro final do array... falta mover os outros. É só colocar outro FOR pra repetir tudo 5 vezes.

Além disso, você tá vendo que no final ele tá comparando o val4 com o val5... então nesse for você coloca o i de 0 até 3 apenas.

Link para o comentário
Compartilhar em outros sites


for (i=0; i<=4; i++) {
if(val[i] < val[i+1]) {
aux = val[i];
val[i] = val[i+1];
val[i+1] = aux ;
}
printf("\nval[%d]: %d\n", i+1, val[i]);
}

Numeros: 1, 2, 3, 4, 5

Fazendo o FOR aqui:

i=0

val[0] < val[1] ? (1 < 2) ? sim // faz a troca deles: 2, 1, 3, 4, 5

i=1

val[1] < val[2] ? (1 < 2) ? sim // faz a troca deles: 2, 3, 1, 4, 5

i=2

val[2] < val[3] ? (1 < 4) ? sim // faz a troca deles: 2, 3, 4, 1, 5

i=3

val[3] < val[4] ? (1 < 5) ? sim // faz a troca deles: 2, 3, 4, 5, 1

i=4

val[4] < val[5] ? (1 < ???) ? erro aqui

Fim do FOR

Você tá conseguindo mover um número pro final do array... falta mover os outros. É só colocar outro FOR pra repetir tudo 5 vezes.

Além disso, você tá vendo que no final ele tá comparando o val4 com o val5... então nesse for você coloca o i de 0 até 3 apenas.

Valeu cara mas o detalhe é que o programa devera fazer isso com 100 numeros:o. e se eu fizer assim ele ficara gigante e complexo, ou estou errado?

Link para o comentário
Compartilhar em outros sites

Valeu cara mas o detalhe é que o programa devera fazer isso com 100 numeros:o. e se eu fizer assim ele ficara gigante e complexo, ou estou errado?

É só fazer o for pra 100 numeros...

for (x=0; x<99; x++)

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

if(val < val[i+1]) {

aux = val;

val = val[i+1];

val[i+1] = aux ;

}

Link para o comentário
Compartilhar em outros sites

É só fazer o for pra 100 numeros...

Pronto, o problema era que o programa não estava fazendo isso com todos os numeros do vetor.

Ai o programa prontim:

#include <stdio.h>

#include <stdlib.h>

#define quant 100

struct num{

int num_inteiro;

};

int main (void)

{

int i =0;

int val[5];

int aux;

int ordenador =1;

printf("\t----------------------------------------------------------------\t\n");

printf("\tPrograma que le 100 numeros e os imprime em ordem decrescente:\t\n");

printf("\t----------------------------------------------------------------\t\n");

printf("\n\tEntre com 100 numeros:\n");

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

{

printf("\n\t%d§ valor:", i+1);

scanf("%d", &val);

}

printf("\nEstes sao os valores lidos em ordem decrescente:\n");

while ( ordenador <= quant)

{

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

{

if(val < val[i+1])

{

aux = val;

val = val[i+1];

val[i+1] = aux ;

}

}

ordenador = ordenador + 1;

}

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

{

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

}

system("pause");

return 0;

}

Valeu pela ajuda dontpanic.

Moderador pode fechar o tópico.

Link para o comentário
Compartilhar em outros sites

Bom, antes de fechar o tópico, eu gostaria de colocar o código corrigido.

Primeiramente essa rotina só funcionará caso os números sejam cadastrados em ordem crescente, podendo assim, fazer a inversão dos números em apenas uma execução do laço "for". Além disso, a troca deve ser feita no sentido descrescente, de maneira mais direta, conforme código abaixo:


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

#define quant 5

struct num
{
int num_inteiro;
};

int main (void)
{

int i =0;
int val[quant];
int aux;
int ordenador =1;

printf("\t----------------------------------------------------------------\t\n");
printf("\tPrograma que le 100 numeros e os imprime em ordem decrescente:\t\n");
printf("\t----------------------------------------------------------------\t\n");

printf("\n\tEntre com 100 numeros:\n");

for ( i = 0; i < quant; i++ )
{
printf("\n\t%d\xc2\xa7 valor:", i+1);
scanf("%d", &val[i]);
}

printf("\nEstes s\xc3\xa3o os valores lidos em ordem decrescente:\n");

while ( ordenador <= quant )
{
for ( i = quant-1; i > 0; i-- )
{
if ( val[i] > val[i-1] )
{
aux = val[i];
val[i] = val[i-1];
val[i-1] = aux ;
}
}

ordenador = ordenador + 1;

}

for ( i = 0; i < quant; i++ )
printf("\nval[%d]: %d\n", i+1, val[i]);

return 0;

}

Caso a inserção seja de maneira aleatória, precisará de um processo de ordenação do tipo bubblesort, heapsort e outros.

Link para o comentário
Compartilhar em outros sites

  • 6 anos depois...

Boa noite Prezados, testei alguns dos códigos acima, porém não obtive exito, pesquisei um pouco, pensei em uma logica um pouco mais enxuta... logo cheguei a este código a seguir:

/*Elabore programa que leia 5 notas de alunos e ordene-as, mostrando ao final as notas em ordem crescente. [16:58,EXemplo 3 final, 17:18]  */
#include <stdio.h>
#include <stdlib.h>
#define tam 5

main () {
    int vet[tam], i=0, j=0, b=1, aux=0;
    for (i=0; i<tam; i++) {         // pedindo o vetor ao usuario
        printf("DIGITE O %d%c NUMERO:", b++, 167);
        scanf("%d", &vet);
        }
        for(i=0; i<tam; i++){       //testando o vetor
            for(j=0; j<tam; j++){
                if(vet>vet[j]){
                aux=vet[j];
                vet[j]=vet;
                vet=aux;
                }
            }
            
        }
        printf("\n*IMPRIME ORDEM DECRESCENTE*\n");
        for(i=0; i<tam; i++){         // imprime numero em ordem Decrescente
            printf("%d\n", vet);
        }
}

 

att, 

Bruno Sousa

Graduando em Engenharia Elétrica.

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#define tam 5
int main () {
    int vet[tam], tmp = 0;
    
    for (int i=0; i<tam; i++) { // pedindo o vetor ao usuario
        printf("DIGITE O vet[%d]:", i);
        scanf("%d", &vet[i]);
        }
        
    for (int i=0; i<tam; i++){       //Crescente
        if(vet[i]>vet[i+1]){
          	 tmp=vet[i+1];
             vet[i+1]=vet[i];
             vet[i]=tmp;
             i = -1;
            }
        }
        printf("\n*IMPRIME ORDEM CRESCENTE*\n");
        for(int i=0; i<tam; i++){         // imprime numero em ordem crescente
            printf("%d\n", vet[i]);
        }
        
    for (int i=0; i<tam; i++){       //Decrescente
        if(vet[i]<vet[i+1]){
          	 tmp=vet[i+1];
             vet[i+1]=vet[i];
             vet[i]=tmp;
             i = -1;
            }
        }
    
        printf("\n*IMPRIME ORDEM DECRESCENTE*\n");
        for(int i=0; i<tam; i++){         // imprime numero em ordem Decrescente
            printf("%d\n", vet[i]);
        }
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...