Ir ao conteúdo
  • Cadastre-se

Ajuda com if


mjfrancobru

Posts recomendados

Boa tarde GAlera...tenho que fazer um programa em C que leia o premio e divida conforme formula, leia os nomes de três pessoas e depois leia os pontos para classificá-los e depois mostrar a premiação: o problema é que ou ele não mostra nada depois de ler os valores, ou ele faz os dois "if"...Será que poderiam me ajudar???

o código:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
float premio,pr1=0,pr2=0,pr3=0;
int pt1=0,pt2=0,pt3=0;
char n1[30],n2[30],n3[30];
printf("Digite o valor do premio: ");
scanf("%f", &premio);
pr1 = (premio*0.50);
pr2 = (premio*0.30);
pr3 = (premio*0.20);
printf("\nO premio para os participantes e:\n1 colocado 50%\n2 colocado 30%\n3 colocado 20%\n\n");
printf("\nDigite o nome de A: ");
scanf ("%s", &n1);
printf("\nDigite o nome de B: ");
scanf ("%s", &n2);
printf("\nDigite o nome de C: ");
scanf ("%s", &n3);
printf("\nDigite pontuacao de A: ");
scanf ("%d", &pt1);
printf("\nDigite pontuacao de B: ");
scanf ("%d", &pt2);
printf("\nDigite pontuacao de C: ");
scanf ("%d", &pt3);

if (pt1 < pt2 && pt1 < pt3 && pt2 < pt3)
printf("\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n3,pr3);

if (pt1 < pt2 && pt1 < pt3 && pt3 < pt2)

printf("\n\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n3,pr2);
printf("\n\nO %s ganhou R$ %f\n",n2,pr3);


system("PAUSE");
return 0;
}

obrigado

Link para o comentário
Compartilhar em outros sites

Seu código contem alguns erros. O primeiro deles é que falta as chaves de inicio e fim do if. Como cada condição tem mais de uma linha, voce tem que usar chaves pra limitar elas.

Outro erro é a falta de parenteses para separar as condições, pois o compilador pode se confundir e calcular primeiro as expressões lógicas, pra depois as comparativas. Ele pode estar fazendo por exemplo isso:

if (pt1 < (pt2 && pt1) < (pt3 && pt2) < pt3)

Ou seja, ele pode estar primeiro fazendo um &&, pra depois verificar se é maior ou menor.

Por ultimo, o ultimo erro é que voce invertou as condições de maior ou menor:

if ((pt1 < pt2) && (pt1 < pt3) && (pt2 < pt3)) //essa condição diz que n3 é campeão, pois pt3 é maior que pt2 e que pt1...

{

printf("\nO %s ganhou R$ %f\n",n1,pr1); //n1 ganha 50%, mas ele foi o pior

printf("\n\nO %s ganhou R$ %f\n",n2,pr2); //pt2 ganha 30%

printf("\n\nO %s ganhou R$ %f\n",n3,pr3); //pt3 ganha 20%, mas ele foi o vencedor e ainda ganhou menos mesmo assim...

}

Segue o código corrigido para quando n1 ganhar, agora voce cria as condições para quando n2 ou n3 ganhar:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
float premio,pr1=0,pr2=0,pr3=0;
int pt1=0,pt2=0,pt3=0;
char n1[30],n2[30],n3[30];
printf("Digite o valor do premio: ");
scanf("%f", &premio);
pr1 = (premio*0.50);
pr2 = (premio*0.30);
pr3 = (premio*0.20);
printf("\nO premio para os participantes e:\n1 colocado 50 por cento\n2 colocado 30 por cento\n3 colocado 20 por cento\n\n");
printf("\nDigite o nome de A: ");
scanf ("%s", &n1);
printf("\nDigite o nome de B: ");
scanf ("%s", &n2);
printf("\nDigite o nome de C: ");
scanf ("%s", &n3);
printf("\nDigite pontuacao de A: ");
scanf ("%d", &pt1);
printf("\nDigite pontuacao de B: ");
scanf ("%d", &pt2);
printf("\nDigite pontuacao de C: ");
scanf ("%d", &pt3);

if ((pt1 > pt2) && (pt1 > pt3) && (pt2 > pt3))
{
printf("\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n3,pr3);
}


system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Obrigado pela ajuda....mas....

Eu já tinha feito desta mesma forma, só que ele não faz a verificação de condição...o codigo do if ta ai como ja havia tentado...o que será que ta acontecendo..se tiver outra dica....valeu

if ((pt1 > pt2) && (pt1 > pt3) && (pt2 < pt3))

{

printf("\nO %s ganhou R$ %f\n",n1,pr1);

printf("\n\nO %s ganhou R$ %f\n",n2,pr2);

printf("\n\nO %s ganhou R$ %f\n",n3,pr3);

}

Obrigado

Link para o comentário
Compartilhar em outros sites

Cara, como assim não verifica a condição? Claro que verifica, eu testei o código antes de te passar e estava funcionando perfeitamente. Diz quais valores voce está colocando na entrada e diz o que voce imaginava que fosse sair.

Eu coloquei o valor de 300, coloquei 3 pessoas com as pontuações 100, 80 e 60, e mostrou claramente que a que fez 100 pontos ficou em primeiro e ganhou 150 reais, a que fez 80 ganhou 90, e a que ficou e terceiro ganhou 60.

Link para o comentário
Compartilhar em outros sites

Bom dia!!!

então, to quebrando a kbeça ainda..rsrs...ó...você num acredita eu coloquei ponto-e-virgula(;) após as condições do if dai rodou.....estranho né......depois eu fiz a segunda condição, dai ele da o mesmo problema que tava dando.....num se é o DEV-C aqui que ta dando problema...mas to aqui verificando tudo talvez tenha algo que eu ainda não esou enxergando...Ah e tem outra coisa, quando eu abro e fecho a chave no if ele num lê a condição... coloquei break; mas também le as duas condições......

cara agradeço mesmo a ajuda...vou mandar a condição de novo pra você ver... o resto ta como o código acima

if ((pt1 > pt2) && (pt1 > pt3) && (pt2 < pt3));
{
printf("\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n3,pr3);
}
system("PAUSE");
if ((pt1 > pt2) && (pt1 > pt3) && (pt3 < pt2));
{
printf("\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n3,pr2);
printf("\n\nO %s ganhou R$ %f\n",n2,pr3);
}

REpare no ponto-e-virgula....valeusss...to aqui quebrando a kbeça e monitorando as respostas....

Obrigado mesmo cara

Link para o comentário
Compartilhar em outros sites

mjfrancobru, este codigo esta compilando quase correto, se você colocar os valores como disse o ghost, o valor de 300, colocar 3 pessoas com as pontuações 100, 80 e 60, e mostrou claramente que a que fez 100 pontos ficou em primeiro e ganhou 150 reais, a que fez 80 ganhou 90, e a que ficou e terceiro ganhou 60. o problema esta se você modificar, tipo, o valor de 300, coloquei 3 pessoas com as pontuações 80, 100 e 60, ele não faz a comparação, você tem que no if fazer as comparações devidas.

tenta desta forma


if ((pt1 > pt2) && (pt1 > pt3))

{
printf("\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n3,pr3);
}

if
((pt2 > pt1 ) && (pt2> pt3 ))
{
printf("\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n3,pr3);
}
if
((pt3 > pt1 ) && (pt3> pt2 ))

{
printf("\nO %s ganhou R$ %f\n",n3,pr3);
printf("\n\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n1,pr1);
}

Link para o comentário
Compartilhar em outros sites

Pois é nexus.tecinfo, como eu falei, fiz só a primeira condição (se o candidato 1 ganhar) e falei que o resto é análogo (se o candidato 2 ganhar voce muda as comparações) e que o indivíduo que deve fazer.

A propósito nexus.tecinfo, o seu código tem um problema, ele só verifica quem ficou em primeiro lugar, ele não é capaz de dizer por exemplo quem ficou em segundo e quem ficou em terceiro pois voce não colocou verificações pra isso no if. No seu primeiro if por exemplo, voce verifica se pt1 é maior que pt2 e pt3. Mas voce não sabe quem é maior, pt2 ou pt3 (só sabe que pt1 é maior qua ambos).

Link para o comentário
Compartilhar em outros sites

Ghost e Nexus...muiiito obrigado mesmo pela ajuda....realmente estava correto, sabe de vez em quando acontece isso, eu olho olho o código e não consigo ver nenhum erro de sintaxe, mas da aulgum problema, mas deu certo o código sim...obrigado..abaixo ta o código completo, com todas as alternativas...valeussss..obriadoo!!!

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
float premio=0,pr1=0,pr2=0,pr3=0;
int pt1=0,pt2=0,pt3=0;
char n1[30],n2[30],n3[30];
printf("Digite o valor do premio: ");
scanf("%f", &premio);
pr1 = (premio*0.50);
pr2 = (premio*0.30);
pr3 = (premio*0.20);
printf("\nO premio e:\n1 colocado 50\n2 colocado 30\n3 colocado 20\n\n");
printf("\nDigite o nome de A: ");
scanf ("%s", &n1);
printf("\nDigite o nome de B: ");
scanf ("%s", &n2);
printf("\nDigite o nome de C: ");
scanf ("%s", &n3);
printf("\nDigite pontuacao de A: ");
scanf ("%d", &pt1);
printf("\nDigite pontuacao de B: ");
scanf ("%d", &pt2);
printf("\nDigite pontuacao de C: ");
scanf ("%d", &pt3);
if ((pt1 > pt2) && (pt1 > pt3) && (pt2 < pt3))
{
printf("\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n3,pr3);
}

if ((pt1 > pt2) && (pt1 > pt3) && (pt3 < pt2))
{
printf("\nO %s ganhou R$ %f\n",n1,pr1);
printf("\n\nO %s ganhou R$ %f\n",n3,pr2);
printf("\n\nO %s ganhou R$ %f\n",n2,pr3);
}
if ((pt2 > pt1) && (pt1 > pt3) && (pt2 < pt3))
{
printf("\nO %s ganhou R$ %f\n",n2,pr1);
printf("\n\nO %s ganhou R$ %f\n",n1,pr2);
printf("\n\nO %s ganhou R$ %f\n",n3,pr3);
}

if ((pt2 > pt1) && (pt3 > pt1) && (pt2 > pt3))
{
printf("\nO %s ganhou R$ %f\n",n2,pr1);
printf("\n\nO %s ganhou R$ %f\n",n3,pr2);
printf("\n\nO %s ganhou R$ %f\n",n1,pr3);
}
if ((pt3 > pt2) && (pt3 > pt1) && (pt1 > pt2))
{
printf("\nO %s ganhou R$ %f\n",n3,pr1);
printf("\n\nO %s ganhou R$ %f\n",n1,pr2);
printf("\n\nO %s ganhou R$ %f\n",n2,pr3);
}

if ((pt3 > pt2) && (pt2 > pt1) && (pt3 > pt1))
{
printf("\nO %s ganhou R$ %f\n",n3,pr1);
printf("\n\nO %s ganhou R$ %f\n",n2,pr2);
printf("\n\nO %s ganhou R$ %f\n",n1,pr3);
}

system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Se ambos fizessem a mesma pontuação, ambos ficariam empatados em segundo lugar, e o premio não teria como dar o valor de segundo lugar pros 2 pela taxa que voce colocou (senão a soma do primeiro lugar, com os 2 segundos lugares ultrapassaria o valor total. E repare que a coisa poderia ficar ainda pior, poderia ocorrer de 2 ficarem em primeiro lugar, ou até os 3 ficarem. Aí voce teria que ter 3 vezes o valor do premio. Uma forma de evitar isso é colocar nas regras do jogo/concurso ou o que for, que os participantes nunca iriam empatar, sempre ocorreria um desempate, nem que seja no par ou impar...

Se essa não for uma opção, voce teria que colocar mais condições, e verificar se se ocorreu o empate, se ocorreu, voce divide o restante do premio em partes iguais (mas isso também teria que estar no regulamento obviamente, senão o cara iria insistir que quer o valor total)...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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