Ir ao conteúdo

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


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Postado

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;
}

 

Postado
#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
  • Solução
Postado

@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
Postado

@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
Postado

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

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