Ir para conteúdo

  • Entrar usando o Facebook Entrar usando o Twitter Entrar usando o Windows Live Login com Steam Login com Google      Entrar   
  • Cadastre-se

Ícone Classificados

Adicionar um Anúncio

Redes Sociais

Membros mais bem avaliados

Membros VIP mais recentes


Foto
- - - - -

problema com if na linguagem C

linguagem c

  • Por favor, faça o login para responder
12 respostas neste tópico

#1 Rogerio_xD

Rogerio_xD
  • Membros Plenos
  • 26 posts
  • Membro desde 17/09/2009
0
Neutra
  • Uberaba

Postado 27 de março de 2012 - 14h27min

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 !


#2 danielpcl

danielpcl
  • Membros Plenos
  • 89 posts
  • Membro desde 14/11/2011
1
Neutra
  • São Paulo

Postado 27 de março de 2012 - 14h33min

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


#3 Rogerio_xD

Rogerio_xD
  • Membros Plenos
  • 26 posts
  • Membro desde 17/09/2009
0
Neutra
  • Uberaba

Postado 27 de março de 2012 - 14h36min

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 !


#4 danielpcl

danielpcl
  • Membros Plenos
  • 89 posts
  • Membro desde 14/11/2011
1
Neutra
  • São Paulo

Postado 27 de março de 2012 - 14h50min

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


#5 Listeiro 037

Listeiro 037
  • Membros Plenos
  • 227 posts
  • Membro desde 18/03/2012
7
Neutra
  • Twelveth House

Postado 27 de março de 2012 - 15h05min

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.

A programmer is just a tool which converts caffeine into code.
BIOS Warning: Keyboard not found. Press <F1> to HELP.

#6 Dani0liveira

Dani0liveira
  • Membros Plenos
  • 204 posts
  • Membro desde 27/11/2011
20
Muito Boa
  • Cariacica, ES

Postado 27 de março de 2012 - 15h08min

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


#7 Deadrools

Deadrools
  • Membros Plenos
  • 313 posts
  • Membro desde 05/04/2009
38
Excelente
  • Vitória-ES

Postado 27 de março de 2012 - 15h10min

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

if (x>10)
{
printf("X é maior q 10");
return 0;
}



#8 Rogerio_xD

Rogerio_xD
  • Membros Plenos
  • 26 posts
  • Membro desde 17/09/2009
0
Neutra
  • Uberaba

Postado 27 de março de 2012 - 15h29min

vou refazer aqui pessoal, valeu pela dica !


#9 Rogerio_xD

Rogerio_xD
  • Membros Plenos
  • 26 posts
  • Membro desde 17/09/2009
0
Neutra
  • Uberaba

Postado 28 de março de 2012 - 09h36min

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 !


#10 Listeiro 037

Listeiro 037
  • Membros Plenos
  • 227 posts
  • Membro desde 18/03/2012
7
Neutra
  • Twelveth House

Postado 28 de março de 2012 - 17h38min

É você colocou ; na frente do if (...).
Mas precisa de seis printf(...)?

A programmer is just a tool which converts caffeine into code.
BIOS Warning: Keyboard not found. Press <F1> to HELP.

#11 Dani0liveira

Dani0liveira
  • Membros Plenos
  • 204 posts
  • Membro desde 27/11/2011
20
Muito Boa
  • Cariacica, ES

Postado 28 de março de 2012 - 23h24min

É 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", &b);
     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 > b) soma = a + c;
    if (a < c && a < b) 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, 28 de março de 2012 - 23h26min.


#12 WhiteDog

WhiteDog
  • Cadastro Cancelado
  • 215 posts
  • Membro desde 29/01/2012
43
Excelente
  • Fortaleza,CE

Postado 29 de março de 2012 - 04h35min

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'


#13 Rogerio_xD

Rogerio_xD
  • Membros Plenos
  • 26 posts
  • Membro desde 17/09/2009
0
Neutra
  • Uberaba

Postado 29 de março de 2012 - 09h24min

Pow galera valeu pelas dicas ae !

WhiteDog testei a sua logica, deu certin cara !
Pow tu simplifico minha logica demais... curti :D






0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos