Ir ao conteúdo
  • Cadastre-se

C Exercício de Menor , Intermediário e Maior


Pedrockz
Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Ler três números e guarda-los em três variáveis com os nomes: maior, intermediário e menor.
 

Todas combinações que da pra fazer com 3 números estão nos IF´s 

Quando entro com o ultimo número maior ele cai na variável errada!!

Exemplo: 1 2 3  

Ele responde como   1 MENOR

                                    3 INTERMEDIÁRIO

                                    2 MAIOR 

 

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

int main()
{

    int num1, num2, num3, menor, inter, maior;

    printf("DIGITE UM NUMERO: ");
    scanf("%d", &num1);
    printf("DIGITE UM SEGUNDO NUMERO: ");
    scanf("%d", &num2);
    printf("DIGITE UM TERCEIRO NUMERO: ");
    scanf("%d", &num3);

    printf("\n");



    if((num1 > num2) && (num2 > num3)){
      menor = num3;
      inter = num2;
      maior = num1;
    }
    else if((num2 > num1) && (num3 > num1)){
      menor = num1;
      inter = num3;
      maior = num2;
    }
    else if((num3 > num2) && (num2 > num1)){
      menor = num1;
      inter = num2;
      maior = num3;
    }
    else if ((num3 > num1) && (num1 > num2)){
      menor = num2;
      inter = num1;
      maior = num3;
    }
   else if ((num1 > num3) && (num3 > num2)){
      menor = num2;
      inter = num3;
      maior = num1;
   }
   else if((num2 > num1) && (num1 > num3)){
      menor = num3;
      inter = num1;
      maior = num2;
   }
   else{
    printf("DIGITE NUMEROS DISTINTOS!!");
   }



    printf("MENOR = %d \n", menor);
    printf("INTERMEDIARIO = %d \n", inter);
    printf("MAIOR = %d \n", maior);




    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>

int main(void) {
	 printf("DIGITE TRES NUMEROs: ");
  int a, b, c;
  scanf("%d", & a);
  scanf("%d", & b);
  scanf("%d", & c);
  if (a > b) 
    if (b > c) printf("MAIOR: %4d\nINTERMEDIARIO: %4d\n MENOR: %4d\n", a, b, c);
    else 
      if (a > c) printf("MAIOR: %4d\nINTERMEDIARIO: %4d\n MENOR: %4d\n", a, c, b); 
      else printf("MAIOR: %4d\nINTERMEDIARIO: %4d\n MENOR: %4d\n", c, a, b);
  else 
    if (b > c)
      if (a > c) printf("MAIOR: %4d\nINTERMEDIARIO: %4d\n MENOR: %4d\n", b, a, c);
      else printf("MAIOR: %4d\nINTERMEDIARIO: %4d\n MENOR: %4d\n", b, c, a); 
  else printf("MAIOR: %4d\nINTERMEDIARIO: %4d\n MENOR: %4d\n", c, b, a);
  return 0;
}

 

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

  • Solução

@Pedrockz Não precisa comparar 1 por 1.

Como não tem um intervalo (por exemplo, poder apenas inserir números de 0 a 100), você poderia fazer o seguinte:

Maior tem que ser inicializado como um número menor que todos inseridos, e Menor, tem que ser maior que os mesmos, mas como você não sabe se os números inseridos serão negativos ou positivos, para isso, declare mais 3 variáveis e use a função fabs(), a fim de obter o valor absoluto dos números (por exemplo: num1 = -1, fabs(num1) = 1, num2 = 1, fabs(num2) = 1).

Dessa forma, some todos os valores absolutos dos números e atribua à Menor, e depois subtraia todos os valores absolutos dos números e atribua à Maior.

Depois, basta comparar Maior e Menor com todos os números inseridos e, por fim, se um número não for maior que Maior, nem menor que Menor, este é o intermediário:

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

int main()
{

    double num1, num2, num3, fnum1, fnum2, fnum3, menor, inter, maior;

    printf("DIGITE UM NUMERO: ");
    scanf("%lf", &num1);
    printf("DIGITE UM SEGUNDO NUMERO: ");
    scanf("%lf", &num2);
    printf("DIGITE UM TERCEIRO NUMERO: ");
    scanf("%lf", &num3);
    
    fnum1 = fabs(num1);
    fnum2 = fabs(num2);
    fnum3 = fabs(num3);
    
    menor = fnum1+fnum2+fnum3;
    maior = -fnum1-fnum2-fnum3;
    
    printf("\n");

    if(menor > num1){
        menor = num1;
    }
    if(menor > num2){
        menor = num2;
    }
    if(menor > num3){
        menor = num3;
    }
    
    if(maior < num1){
        maior = num1;
    }
    if(maior < num2){
        maior = num2;
    }
    if(maior < num3){
        maior = num3;
    }
    
    if(num1 < maior && num1 > menor){
        inter = num1;
    } else if(num2 < maior && num2 > menor){
        inter = num2;
    } else if(num3 < maior && num3 > menor){
        inter = num3;
    }

    printf("MENOR = %.2lf \n", menor);
    printf("INTERMEDIARIO = %.2lf \n", inter);
    printf("MAIOR = %.2lf \n", maior);

    return 0;
}

@herbertbahia Muito mais que mostrar a solução: mostre a resolução.

É interessante explicar como chegar neste algoritmo que você propôs, ou adicionar comentários no mesmo para facilitar a compreensão por parte do usuário.

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

@herbertbahia É... Preferencialmente opte por desenvolver o algoritmo do autor do post ou solucionar dúvidas do mesmo...

Mesmo que seja uma questão simples, discorrer sobre a resolução é interessante.

Mas obrigado de qualquer forma por mandar o link da resolução que você pegou por aí...

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

Dá pra usar as lógicas de algoritmos de ordenação, veja os códigos usando o 3 algoritmos de ordenação mais simples:

 

> Insertion Sort:

#include <stdio.h>

int main()
{

    int num1, num2, num3, menor, inter, maior;
    
    printf("DIGITE UM NUMERO: ");
    scanf("%d", &num1);
    printf("DIGITE UM SEGUNDO NUMERO: ");
    scanf("%d", &num2);
    printf("DIGITE UM TERCEIRO NUMERO: ");
    scanf("%d", &num3);
    
    printf("\n");
    
    
    if ((num1 == num2) || num1 == num3 || num2 == num3){
        printf("DIGITE NUMEROS DISTINTOS!!");
        return 0;
    }
    else {
        //INSERTION SORT:
        //Deve inserir cada novo numero na lista tal que mantem a lista ordenada,
        //movendo os numeros ja na lista para frente caso necessario, para abrir
        //espaco para inserir o numero na posicao correta.
        
        //Insere o primeiro numero na lista ordenada
        menor = num1;
        
        //Insere o segundo numero na lista ordenada
        if(menor > num2){
            inter = menor;
            menor = num2;
        }
        else {
            inter = num2;
        }
        
        //Insere o terceiro numero na lista ordenada
        if(inter > num3){
            maior = inter;
            if (menor > num3){
                inter = menor;
                menor = num3;
            }
            else {
                inter = num3;
            }
        }
        else{
            maior = num3;
        }
        
    }
    printf("MENOR = %d \n", menor);
    printf("INTERMEDIARIO = %d \n", inter);
    printf("MAIOR = %d \n", maior);
    
    return 0;
}

 

> Bubble Sort:

#include <stdio.h>

int main()
{

    int num1, num2, num3, menor, inter, maior, temp;
    
    printf("DIGITE UM NUMERO: ");
    scanf("%d", &num1);
    printf("DIGITE UM SEGUNDO NUMERO: ");
    scanf("%d", &num2);
    printf("DIGITE UM TERCEIRO NUMERO: ");
    scanf("%d", &num3);
    
    printf("\n");
    
    
    if ((num1 == num2) || num1 == num3 || num2 == num3){
        printf("DIGITE NUMEROS DISTINTOS!!");
        return 0;
    }
    else {
        //BUBBLE SORT:
        //Vai comparando cada 2 posições consecutivas e trocando caso os numeros
        //estejam fora de ordem, quando chega ao fim das posições volta para
        //comparar as 2 primeiras posições.

        //Poe os numeros na lista desornados
        menor = num1;
        inter = num2;
        maior = num3;
        
        //Compara primeiras 2 posições consecutivas e troca se tiver fora de ordem
        if(menor > inter){
            temp = menor;
            menor = inter;
            inter = temp;
        }
        
        //Compara proximas 2 posições consecutivas e troca se tiver fora de ordem
        if(inter > maior){
            temp = inter;
            inter = maior;
            maior = temp;
        }
        //O maior dos 3 ja foi movido para o local correto, agora so falta
        //ordenar as 2 primeiras posições.
        
        //Compara primeiras 2 posições consecutivas e troca se tiver fora de ordem
        if(menor > inter){
            temp = menor;
            menor = inter;
            inter = temp;
        }
    }
    printf("MENOR = %d \n", menor);
    printf("INTERMEDIARIO = %d \n", inter);
    printf("MAIOR = %d \n", maior);
    
    return 0;
}

 

> Selection Sort:

#include <stdio.h>

int main()
{

    int num1, num2, num3, menor, inter, maior, temp;
    
    printf("DIGITE UM NUMERO: ");
    scanf("%d", &num1);
    printf("DIGITE UM SEGUNDO NUMERO: ");
    scanf("%d", &num2);
    printf("DIGITE UM TERCEIRO NUMERO: ");
    scanf("%d", &num3);
    
    printf("\n");
    
    
    if ((num1 == num2) || num1 == num3 || num2 == num3){
        printf("DIGITE NUMEROS DISTINTOS!!");
        return 0;
    }
    else {
        //SElECTION SORT:
        //Vai para cada posicao procura e seleciona o menor dos valores ainda
        //nao ordenados e poe nessa posicao.
        
        //Poe os numeros na lista desornados
        menor = num1;
        inter = num2;
        maior = num3;
        //Deve selecionar o menor dos valores desordados para colocar no menor.
        
        //Se o valor intermediario for menor que menor atual faz a troca
        if(menor > inter){
            temp = menor;
            menor = inter;
            inter = temp;
        }
        
        //Se o valor maior for menor que menor atual faz a troca
        if(menor > maior){
            temp = menor;
            menor = maior;
            maior = temp;
        }
        //O menor dos 3 ja foi selecionado e movido para o local correto, agora 
        //so falta selecionar o menor entre os 2 numeros que ainda nao foram
        //ordenados e por como valor intermediario.
        
        //Se o valor maior for menor que intermediario atual faz a troca
        if(inter > maior){
            temp = inter;
            inter = maior;
            maior = temp;
        }
    }
    printf("MENOR = %d \n", menor);
    printf("INTERMEDIARIO = %d \n", inter);
    printf("MAIOR = %d \n", maior);
    
    return 0;
}

 

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