Rogerio_xD

problema com if na linguagem C

13 posts neste tópico

Escreva um programa em C para ler 3 valores (considere que não serão informados valores iguais) e

escrever a soma dos 2 maiores.

void main()

{

int a, b, c, soma;

printf("Digite o primeiro valor: ");

scanf("%d", &a);

printf("Digite o segundo valor: ");

scanf("%d", &B);

printf("Digite o terceito valor: ");

scanf("%d", &c);

if (a > c < B)

soma = a + b;

printf("Soma e: %d", soma);

if (a > b < c)

soma = a + c;

printf("Soma e: %d", soma);

if (b > c < a)

soma = b + a;

printf("Soma e: %d", soma);

if (b > a < c)

soma = b + c;

printf("Soma e: %d", soma);

if (c > b < a)

soma = c + a;

printf("Soma e: %d", soma);

if (c > a < B)

soma = c + b;

printf("Soma e: %d", soma);

return 0;

}

Compilei desse jeito, ele ate faz certo as somas mais ele mostra os 6 jeitos de somas ¬¬. Alguem pode da uma dica ae... talvez eu esteja usando o IF de forma errada. OBRIGADO !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deveria ter um else entre cada um dos ifs?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim mais quando eu coloquei o else, deu erro na compilação !

Se puder dar um exemplo em alguma linha, só pra mim ver como faz, eu ficaria grato !

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, eu tentei e aqui deu erro de sintaxe... já tentou fazer isso com um switch?

Também sou novo na area e não se se daria certo, mas não custa tentar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se os três valores são a, b, c e a soma é s, então:

#define MAX2(M1,M2) ((M1)>(M2))?(M1):(M2))
#define MAX3(N1,N2,N3) MAX2((MAX2((N1),(N2))),(MAX2((N2),(N3))))

s = MAX3(a+b,a+c,b+c);

Por favor, confiram.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro está no if, dá pra ver de cara

um operador relacional não pode ser sobrecarregado,

if(a>c<B) // errado!

sobrecarregar um operador é você utilizá-lo várias vezes em uma expressão, um operador relacional(<, >, >=, <=, ==, !=) não pode ser sobrecarregado.

você pode usar && (E), || (OU), ! (NÃO), operadores lógicos

escreveria os ifs assim,

if(a>c && c<B) // certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você coloca mais de um comando no if, você deve usar chaves {}

if (x>10)

{

printf("X é maior q 10");

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou refazer aqui pessoal, valeu pela dica !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu 6 respostas novamente :( . Quero que aparece só uma resposta ...

void main()

{

int a, b, c, soma;

printf("Digite o primeiro valor: ");

scanf("%d", &a);

printf("Digite o segundo valor: ");

scanf("%d", &B);

printf("Digite o terceito valor: ");

scanf("%d", &c);

if (a > b && b > c);

soma = a + b;

printf("Soma e: %d", soma);

if (a > b && b < c);

soma = a + c;

printf("Soma e: %d", soma);

if (a < b && a > c);

soma = b + a;

printf("Soma e: %d", soma);

if (a < b && a < c);

soma = b + c;

printf("Soma e: %d", soma);

if (a < c && a > B);

soma = a + c;

printf("Soma e: %d", soma);

if (a < c && a < B);

soma = c + b;

printf("Soma e: %d", soma);

return 0;

}

Vocês não vão acreditar porque o programa estava mostrando os 6 resultados... era por causa do (;) tpo aqui ou:

if (a < b && a > c); --- > esse (;) erra o problema oO.

soma = b + a;

printf("Soma e: %d", soma);

Descobri na raça, na cagada, na força de vontade, nunca mais vou esquecer disso Putz !

Compartilhar este post


Link para o post
Compartilhar em outros sites

É você colocou ; na frente do if (...).

Mas precisa de seis printf(...)?

Compartilhar este post


Link para o post
Compartilhar em outros sites
É você colocou ; na frente do if (...).

Mas precisa de seis printf(...)?

como Listeiro 037 disse, podia ser escrito assim:


void main()
{
int a, b, c, soma;

printf("Digite o primeiro valor: ");
scanf("%d", &a);
printf("Digite o segundo valor: ");
scanf("%d", &;
printf("Digite o terceito valor: ");
scanf("%d", &c);

if (a > b && b > c) soma = a + b;
if (a > b && b < c) soma = a + c;
if (a < b && a > c) soma = b + a;
if (a < b && a < c) soma = b + c;
if (a < c && a > soma = a + c;
if (a < c && a < soma = c + b;

printf("Soma e: %d", soma);
return 0;
}

você pode simplificar esses ifs, é só usar um pouco de lógica

Editado por Dani0liveira

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em vez de procurar os dois maiores, procure o menor.


if(a<b && a<c) soma=b+c;
else
if(b<a && b<c) soma=a+c;
else soma=a+b;

Primeiro ele testa se 'a' é o menor.

Se não for, ele teste se é o 'b' o menor.

Ora, se não for 'a' nem o 'b', é o 'c'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pow galera valeu pelas dicas ae !

WhiteDog testei a sua logica, deu certin cara !

Pow tu simplifico minha logica demais... curti :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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