Solução em C do Problema 19

/* 
 * SOLUCAO 1. Simples, curta e grossa.
 *
 */

#include <stdio.h>

int main() 
{
  int n1, n2, n3;       /* dados de entrada */
  
  printf("Digite tres numeros: ");
  scanf("%d %d %d", &n1, &n2, &n3);
  
  /* Existem 6 possiveis ordens para imprimior os numeros lidos */
  if (n1 <= n2 && n2 <= n3)
    {
      printf("A ordem crescente: %d %d %d\n", n1, n2, n3);
    }
  else if (n1 <= n3 && n3 <= n2)
    {
      printf("A ordem crescente: %d %d %d\n", n1, n3, n2);
    }
  else if (n2 <= n1 && n1 <= n3)
    {
      printf("A ordem crescente: %d %d %d\n", n2, n1, n3);
    }
  else if (n2 <= n3 && n3 <= n1) 
    {
      printf("A ordem crescente: %d %d %d\n", n2, n3, n1);
    }
  else if (n3 <= n1 && n1 <= n2) 
    {
      printf("A ordem crescente: %d %d %d\n", n3, n1, n2);
    }
  else /* n3 <= n2 && n2 < n1 */
    {
      printf("A ordem crescente: %d %d %d\n", n3, n2, n1);
    }

  return 0;
}

/* 
 * SOLUCAO 2.
 *
 */

#include <stdio.h>

int main() {
  int n1, n2, n3;       /* dados de entrada */
  
  printf("Digite tres numeros: ");
  scanf("%d", &n1);
  scanf("%d", &n2);
  scanf("%d", &n3);
  
  if (n3 > n1)
    if (n1 > n2)
      printf("A ordem crescente: %d %d %d\n", n2, n1, n3);
    else if (n2 < n3)
      printf("A ordem crescente: %d %d %d\n", n1, n2, n3);
  if (n1 > n2)
    if (n2 > n3)
      printf("A ordem crescente: %d %d %d\n", n3, n2, n1);
    else if (n3 < n1)
      printf("A ordem crescente: %d %d %d\n", n2, n3, n1);
  if (n1 < n2)
    if (n3 < n1)
      printf("A ordem crescente: %d %d %d\n", n3, n1, n2);
    else if (n3 < n2)
      printf("A ordem crescente: %d %d %d\n", n1, n3, n2);
  
  return 0;
}

/* 
 * SOLUCAO 3. Igual a solucao 2 com alguns parenteses superfluos que 
 *    devem ajudar a leitura do programa (evitar ambiguida).
 *
 */

#include <stdio.h>

int main() 
{
  int n1, n2, n3;       /* dados de entrada */
  
  printf("Digite tres numeros: ");
  scanf("%d", &n1);
  scanf("%d", &n2);
  scanf("%d", &n3);
  
  if (n3 > n1)
    {
      if (n1 > n2)
	{
	  printf("A ordem crescente: %d %d %d\n", n2, n1, n3);
	}
      else 
	{
	  if (n2 < n3)
	    {
	      printf("A ordem crescente: %d %d %d\n", n1, n2, n3);
	    }
	}
    }
  
  if (n1 > n2)
    {
      if (n2 > n3)
	{
	  printf("A ordem crescente: %d %d %d\n", n3, n2, n1);
	}
      else 
	{
	  if (n3 < n1)
	    {
	      printf("A ordem crescente: %d %d %d\n", n2, n3, n1);
	    }
	}
    }
  
  if (n1 < n2)
    {
      if (n3 < n1)
	{
	  printf("A ordem crescente: %d %d %d\n", n3, n1, n2);
	}
      else 
	{
	  if (n3 < n2)
	    {
	      printf("A ordem crescente: %d %d %d\n", n1, n3, n2);
	    }
	}
    }
  return 0;
}

/* 
 * SOLUCAO 4. Parecida com a solucao 1. Usa condicoes simples, 
 *           ou seja, sem && e ||.
 *
 */

#include <stdio.h>

int main() 
{
  int n1, n2, n3;       /* dados de entrada */
  
  printf("Digite tres numeros: ");
  scanf("%d %d %d", &n1, &n2, &n3);
  
  /* Existem 6 possiveis ordens para imprimior os numeros lidos */
  if (n1 <= n2)
    { /* n1 <= n2 */
      if (n2 <= n3) 
	{ /* n1 <= n2 e n2 <= n3 */
	  printf("A ordem crescente: %d %d %d\n", n1, n2, n3);
	}
      else 
	{ /* n1 <= n2 e n3 < n2 */
          if (n1 <= n3) 
	    { /* n1 <= n3 e n3 < n2 */
	      printf("A ordem crescente: %d %d %d\n", n1, n3, n2);
	    }
	  else
	    { /* n3 < n1 e n1 <= n2 */
	      printf("A ordem crescente: %d %d %d\n", n3, n1, n2);
	    }
	}
    }
  else 
    { /* n2 < n1 */
      if (n1 <= n3) 
	{ /* n2 < n1 e n1 <= n3 */
	  printf("A ordem crescente: %d %d %d\n", n2, n1, n3);
	}
      else
        { /* n2 < n1 e n3 < n1 */
	  if (n2 <= n3) 
	    { /* n2 <= n3 e n3 < n1 */
	      printf("A ordem crescente: %d %d %d\n", n2, n3, n1);
	    }
	  else
	    { /* n3 < n2 e n2 < n1 */
	      printf("A ordem crescente: %d %d %d\n", n3, n2, n1);
	    }
	}
    }

  return 0;
}

/* 
 * SOLUCAO 5. Variante da solucao 4. Usa condicoes simples, 
 *           ou seja, sem && e ||.
 *
 */

#include <stdio.h>

int main() 
{
  int n1, n2, n3;       /* dados de entrada */
  int aux;              /* auxiliar para troca de conteudod e variveis */
  printf("Digite tres numeros: ");
  scanf("%d %d %d", &n1, &n2, &n3);
  
  /* Forca que n1 <= n2 */

  if (n1 > n2) 
    { 
      /* troca o conteudo das variaveis n1 e n2 */ 
      aux = n1;
      n1  = n2; 
      n2  = aux;
    }

  /* Neste ponto do programa vale que n1 <= n2 */
  if (n2 <= n3) 
    { /* n1 <= n2 e n2 <= n3 */
      printf("A ordem crescente: %d %d %d\n", n1, n2, n3);
    }
  else 
    { /* n1 <= n2 e n3 < n2 */
      if (n1 <= n3) 
	{ /* n1 <= n3 e n3 < n2 */
	  printf("A ordem crescente: %d %d %d\n", n1, n3, n2);
	}
      else
	{ /* n3 < n1 e n1 <= n2 */
	  printf("A ordem crescente: %d %d %d\n", n3, n1, n2);
	}
    }
  return 0;
}



Lista de Problemas

História da Computação | Listas de Exercícios | Problemas Resolvidos | macmulti@ime.usp.br