Faça um programa que leia três valores inteiros e chame uma função que receba estes 3 valores de entrada e retorne eles ordenados, ou seja, o menor valor na primeira variável, o segundo menor valor na variável do meio, e o maior valor na última variável. A função deve retornar o valor 1 se os três valores forem iguais e 0 se existirem valores diferentes. Exibir os valores ordenados na tela.
Passo 1
A questão pede que a gente leia três inteiros, crie uma função que receba esses três valores por referência, ordene-os em ordem crescente e retorne 1 se todos forem iguais ou 0 caso contrário. Depois exibe os valores já ordenados.
Passo 2
Para ordenar três valores podemos usar comparações sucessivas e trocar pares que estiverem fora de ordem (técnica de “troca condicional”). Como só são três, basta fazer até três comparações: comparo a e b, depois a e c, depois b e c, trocando sempre que o anterior for maior.
Passo 3
Vamos implementar a função ordena3, que recebe ponteiros para os três inteiros. Dentro dela faremos as comparações e swaps, e ao final testamos se ficaram todos iguais para decidir o retorno 1 ou 0.
Passo 4
No main, fazemos a leitura com scanf, chamamos ordena3 passando o endereço das variáveis, e por fim imprimimos na tela os três valores, que já estarão em ordem crescente.
Resposta
#include <stdio.h>
int ordena3(int *a, int *b, int *c) {
int tmp;
// primeiro, coloca *a <= *b
if (*a > *b) {
tmp = *a; *a = *b; *b = tmp;
}
// depois, coloca *a <= *c
if (*a > *c) {
tmp = *a; *a = *c; *c = tmp;
}
// finalmente, coloca *b <= *c
if (*b > *c) {
tmp = *b; *b = *c; *c = tmp;
}
// retorna 1 se todos iguais, 0 caso contrário
return (*a == *b && *b == *c) ? 1 : 0;
}
int tmp;
// primeiro, coloca *a <= *b
if (*a > *b) {
tmp = *a; *a = *b; *b = tmp;
}
// depois, coloca *a <= *c
if (*a > *c) {
tmp = *a; *a = *c; *c = tmp;
}
// finalmente, coloca *b <= *c
if (*b > *c) {
tmp = *b; *b = *c; *c = tmp;
}
// retorna 1 se todos iguais, 0 caso contrário
return (*a == *b && *b == *c) ? 1 : 0;
}
int main() {
int x, y, z;
// lê três valores inteiros
scanf("%d %d %d", &x, &y, &z);
// chama a função que ordena
int todosIguais = ordena3(&x, &y, &z);
// exibe os valores em ordem crescente
printf("%d %d %d\n", x, y, z);
return 0;
}
int x, y, z;
// lê três valores inteiros
scanf("%d %d %d", &x, &y, &z);
// chama a função que ordena
int todosIguais = ordena3(&x, &y, &z);
// exibe os valores em ordem crescente
printf("%d %d %d\n", x, y, z);
return 0;
}