Ir ao conteúdo
  • Cadastre-se

C Receber 3 números e imprimir em ordem crescente e decrescente.


_Pedro_1002_

Posts recomendados

@_Pedro_1002_ primeiro voce tem que saber o tipo de dado que vai usar : int ,float ,double, long , etc etc...

voce pode escrever as funções que representem as atividades desejaveis: tipo imprimir_descrescente(tipo num1,tipo num2, tipo num3) 

é claro que dentro da função um laço de repetição com incremento/decremento e a função de printar no console.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

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

int main()
{
  int n[3], i;
  int menor=0, medio=0, maior=0;

  for (i=0;i<3;i++)
  {
     printf("digite um numero: ");
     scanf("%d",&n[i]);
  }

  if (n[0]>n[1])
  {
      if (n[1]>n[2])
        {
          maior=n[0];
          medio=n[1];
          maior=n[2];
        }
        else if (n[2]>n[0])
        {
            maior=n[2];
            medio=n[0];
            menor=n[1];
        }
        else
        {
            maior=n[0];
            medio=n[2];
            menor=n[1];
        }
  }else if(n[1]>n[2])
    {
      if (n[2]>n[0])
        {
          maior=n[1];
          medio=n[2];
          menor=n[0];
        }
        else
        {
            maior=n[1];
            medio=n[0];
            menor=n[2];
        }
    }
    else
    {
        maior=n[2];
        medio=n[1];
        menor=n[0];
    }

 printf("a ordem crescente eh: %d %d %d\n", menor, medio, maior);
 printf("a ordem decrescente eh: %d %d %d ", maior, medio, menor);

    system("pause");
    return 0;
}

teria como simplificar?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

use operadores logicos

n 0
n 1
n 2

maior

se n 0 > n1 && n0 > n2, maior = n0
senao se n 1 > n0 && n1 > n2, maior = n1
senao se n2 > n0 && n2 > n1, maior = n2

menor

se n 0 < n1 && n0 < n2, menor = n0
senao se n 1 < n0 && n1 < n2, menor = n1
senao se n2 < n0 && n2 < n1, menor = n2

medio

 se n != maior && n!=menor, n = medio

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

 

@herbertbahia

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

int main()
{
  int n[3], i;
  int menor=0, medio=0, maior=0;

  for (i=0;i<3;i++)
  {
     printf("digite um numero: ");
     scanf("%d",&n[i]);
  }

  if ((n[0]>n[1])&&(n[0]>n[2]))
  {
      maior=n[0];
  }
  else if ((n[1]>n[0])&&(n[1]>n[2]))
  {
      maior=n[1];
  }
  else if ((n[2]>n[0])&&(n[2]>n[1]))
  {
      maior=n[2];
  }

  if ((n[0]<n[1])&&(n[0]<n[2]))
  {
      menor=n[0];
  }
  else if ((n[1]<n[0])&&(n[1]<n[2]))
  {
      menor=n[1];
  }
  else if ((n[2]<n[0])&&(n[2]<n[1]))
  {
      menor=n[2];
  }

  for (i=0;i<3;i++)
  {
      if ((n[i]!=maior)&&(n[i]!=menor))
        {
            medio=n[i];
        }
  }

 printf("a ordem crescente eh: %d %d %d\n", menor, medio, maior);
 printf("a ordem decrescente eh: %d %d %d ", maior, medio, menor);

    system("pause");
    return 0;
}

dessa maneira certo? com um 'for' para o medio

Link para o comentário
Compartilhar em outros sites

é bom implementar alguma coisa pra quando o número for igual tambem 😁

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

int _maior(int n0,int n1,int n2);
int _menor(int n0,int n1,int n2);
int _medio(int n0,int n1,int n2);
	
int main()
{
  int n[3], i;
  
  for (i=0;i<3;i++)
  {
     printf("digite o numero %d: ",i+1);
     scanf("%d",&n[i]);
  }

     printf("Maior: %d\n",_maior(n[0],n[1],n[2]));
     printf("Menor: %d\n",_menor(n[0],n[1],n[2]));
     printf("Medio: %d\n",_medio(n[0],n[1],n[2]));
    system("pause");
   return EXIT_SUCCESS;
}

int _maior(int n0,int n1,int n2){
int  maior;
n0 > n1 && n0 > n2? maior = n0:n0;
n1 > n0 && n1 > n2? maior = n1:n1;
n2 > n0 && n2 > n1? maior = n2:n2;
return maior;
}

int _menor(int n0,int n1,int n2){
int  menor;
n0 < n1 && n0 < n2? menor = n0:n0;
n1 < n0 && n1 < n2? menor = n1:n1;
n2 < n0 && n2 < n1? menor = n2:n2;
return menor;
}

int _medio(int n0,int n1,int n2){
	int medio;
if((n0< _maior( n0, n1, n2)) && ((n0 >_menor (n0, n1, n2))))medio=n0;
else if((n1< _maior( n0, n1, n2)) && ((n1 >_menor( n0, n1, n2))))medio=n1;
else medio=n2;
return medio;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Eu usaria um vetor, depois ordenaria esse vetor e por último imprimiria:

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

void imprimirCrescente(int a, int b, int c);

void imprimirDecrescente(int a, int b, int c);

void ordenar(int* vetor, int tamanho);

int main() {
    int a = 20;
    int b = 10;
    int c = 20;

    imprimirCrescente(a, b, c);
    imprimirDecrescente(a, b, c);
    return EXIT_SUCCESS;
}

void imprimirCrescente(int a, int b, int c){
    int vetor[3] = {a, b, c};
    ordenar(vetor, 3);

    printf("  Crescente: [");
    for (int i = 0; i < 3; i++) {
        printf("%i", vetor[i]);

        if (i + 1 < 3) {
            printf(", ");
        }
    }
    printf("] \n");
}

void imprimirDecrescente(int a, int b, int c){
    int vetor[3] = {a, b, c};
    ordenar(vetor, 3);

    printf("Decrescente: [");
    for (int i = 2; i >= 0; i--) {
        printf("%i", vetor[i]);

        if (i > 0) {
            printf(", ");
        }
    }
    printf("] \n");
}

void ordenar(int* vetor, int tamanho) {
    for (int i = 0; i < tamanho - 1; i++) {
        for (int j = i+1; j<tamanho;j++) {
            if (vetor[i] > vetor[j]){
                int temp = vetor[i];
                vetor[i] = vetor[j];
                vetor[j] = temp;
            }
        }
    }
}

Uma solução feia, mas funcional.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Talvez só com uma tabela de referência... Mais curto, sem funções e direto com os bits 🤔 

#include <stdio.h>
int     main(void)
{
    int n[3], res = 0;
    char ref[6][3] = {  { 0,1,2 }, { 0,2,1 }, { 1,0,2 },
                        { 1,2,0 }, { 2,0,1 }, { 2,1,0 } };
    do {
        printf("Entre com os 3 numeros, separados por ',': ");
        res = scanf("%d,%d,%d", &n[0], &n[1], &n[2]);
    }   while (res != 3);

    if (n[0] < n[1]) // A<B
    {   if (n[2] < n[0]) res = 4; // C<A<B
        else
            if (n[2] < n[1]) res = 1; else res = 0;
    }
    else // B<=A
        if (n[2] < n[1]) res = 5; // C<B<A
        else
            if (n[2] < n[0]) res = 3; else res = 2;
    
    printf( "Valores em ordem: entrada [%d,%d,%d] crescente [%d,%d,%d]"
        " decrescente [%d,%d,%d]\n", n[0], n[1], n[2],
        n[ref[res][0]], n[ref[res][1]], n[ref[res][2]],
        n[ref[res][2]], n[ref[res][1]], n[ref[res][0]]);
    return 0;
};
Entre com os 3 numeros, separados por ',': 1,2,3
Valores em ordem: entrada [1,2,3] crescente [1,2,3] decrescente [3,2,1]
Entre com os 3 numeros, separados por ',': 3,2,1
Valores em ordem: entrada [3,2,1] crescente [1,2,3] decrescente [3,2,1]
Entre com os 3 numeros, separados por ',': 3,4,4
Valores em ordem: entrada [3,4,4] crescente [3,4,4] decrescente [4,4,3]

 

adicionado 16 minutos depois

Considere que se quer algo eficiente nesse contexto não pode considerar chamar funções. Só o tempo de preparar os argumentos e empilhar tudo e depois restaurar no retorno vai gastar umas 50 vezes mais de tempo

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

cdh.png.5a93fa8e0d92ac79b2aeb2cb3bce8847.png

 

Em 05/08/2020 às 11:36, _Pedro_1002_ disse:

Gostaria de saber como faz este exercício da forma mais simples e eficaz possível.

Pense como uma criancinha 😆

 

@herbertbahia 👍 

Em 06/08/2020 às 13:26, herbertbahia disse:

int _maior(int n0,int n1,int n2)
int _menor(int n0,int n1,int n2)

 

 

 

@_Pedro_1002_ Mesma lógica nos macros.

#define _MAIOR(A1, A2)  (((A1) > (A2)) ? (A1) : (A2))
#define _MENOR(A1, A2)  (((A1) < (A2)) ? (A1) : (A2))
#define SELECIONE(FUNC, A1, A2, A3) (FUNC(FUNC(A1, A2), A3))

    __typeof__(int)
	    maior = SELECIONE(_MAIOR, 3, 2, 1),
	    menor = SELECIONE(_MENOR, 3, 2, 1),
	    medio = ((3 + 2 + 1) - (maior + menor));
    
    printf ("%d %d %d \n", menor, medio, maior);
    printf ("%d %d %d \n", maior, medio, menor);

 

Boa Sorte!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...