Imprimir números em ordem decrescente.

198 views
Skip to first unread message

Wylker Pereira

unread,
Sep 24, 2019, 6:12:44 PM9/24/19
to Fórum - De Aluno Para Aluno
Boa noite.
Estou fazendo alguns exercícios em C e um deles pede para imprimir os valores de um vetor, em ordem decrescente.
Porém, após pesquisar no Google, ver os vídeos do canal e fazer testes com alguns códigos, não consegui chegar a uma solução ainda.
Sou iniciante e não tenho aquele timbre de bater o olho e ver o erro.
Então, se possível, gostaria de um pouquinho de paciência.

Segue o código que fiz, até agora:


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

int main (){

int vetor[30], valor, i;
int n = 30;


for (int i = 0; i<30; i = i+1)
   {
       vetor[i] = i + i + 2;
   }

printf("Ordem Decrescente:\n");
   for (int i = 0; i < n-1; i++) printf("%i,\n", vetor[i]);
   printf("%i.\n", vetor[n - 1]);
 
return 0;

}


Segue no Repl.it também.

Obrigado!

Douglas Costa Da Rocha

unread,
Sep 24, 2019, 6:42:52 PM9/24/19
to Fórum - De Aluno Para Aluno
Boa Noite,

Tu tem algumas opções... mas a mais facil, seria tu iniciar teu i em 30, ou no caso 29. e fazer teu for assim: 

         for(i=29;i>=0; i--){ 
            printf("[%d]", vetor[i];
          }

Para funcionar da maneira que estas tentando fazer, teria que decrementar o n a cada rodada no laço, usando recursividade, ai funcionaria... Estou respondendo do celular então não consegui enxergar muito bem teu código, mas pelo que entendi é isso...

Da forma que tu fez teu código, teria que ser da maneira abaixo... Não compilei para ver se funciona, mas esta é a lógica. 

printf("Ordem Decrescente:\n");
   for (int i = 0, j=30; i <n; i++,j--) {
printf("%i,\n", vetor[i]);
    printf("%i.\n", vetor[j-1]);
  }
return 0;

Wylker Pereira

unread,
Sep 24, 2019, 10:44:28 PM9/24/19
to DeAlunoP...@googlegroups.com
Olá Douglas. Obrigado pela ajuda.
Eu só precisei retirar o

printf("%i.\n", vetor[j-1]);
pois estava retornando um crescente e um decrescente. (2, 60, 4, 58, 6, 56....). Falta dois detalhes:

Esse é o enunciado do exercício:
Elabore um algoritmo que preencha um vetor de inteiros, de 30 posições, com os números múltiplos de 2, começando do número 2 até o número 60.
Ao preencher cada posição do vetor, apresentar na tela, o número que foi preenchido e qual a posição do vetor que esse número foi inserido, em cada linha.
Ao finalizar o preenchimento, apresente o vetor com os valores preenchidos do maior para o menor, separados por vírgula e com um ponto, após o último número.


A primeira e a terceira partes eu consegui fazer.
Porém a segunda eu não consegui fazer.
Pelo que entendi tenho que imprimir o número e sua posição no vetor:
[0] 2
[1] 4
[2] 6
[3] 8
Tentei algumas linhas mas não fui capaz, mesmo olhando o material de apoio.


Código atualizado:

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

int main (){

int vetor[30], valor, i;
int n = 30;


for (int i = 0; i<30; i = i+1)
{
vetor[i] = i + i + 2;
}

int length = sizeof(vetor)/sizeof(vetor[0]);
printf("Posição dos Números no Vetor \n"); /* <--- Aqui os números estão saindo fora da ordem: 2, 6, 10, 14, 18...*/
/*Se eu não entendi errado, preciso imprimir o número e a sua posição dentro do vetor, certo?*/

for (int i = 0; i < length; i = i+2) {
printf("%d\n", vetor[i]);
}

printf("Ordem Decrescente:\n"); /* <--- Aqui preciso colocar virgula após cada número e ponto final após o último.*/
for (int i = 0, j=30; i <n; i++,j--) {
printf("%i,\n", vetor[j-1]);
}
return 0;

}


Novamente muito obrigado!



Reply all
Reply to author
Forward
Message has been deleted
0 new messages