Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
mjfrancobru

Ajuda com if

Recommended Posts

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

Editado por gandalfnho
Use a tag CODE

Compartilhar este post


Link para o post
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;
}

Editado por Ghost Killer
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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.

    Editado por Ghost Killer
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Editado por gandalfnho
    Use a tag CODE

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • cara....acho que tinha algum coisa estranha, ou eu ava cansado..rsrs....deu certinhu..sem o ponto e vírgula depois...IMPRESSIONANTE....

    Valeussss cara...bom dia

    Resolvido......muito obrigado a todos!!!!!

    Qqer coisa to ai...rsss.....obrigadoo

    Editado por gandalfnho
    flood

    Compartilhar este post


    Link para o post
    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);
    }

    • Curtir 1

    Compartilhar este post


    Link para o post
    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).

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    então Ghost Killer, eu fiz só um demonstrativo para ele poder continuar, não iria fazer tudo, ele tem que quebrar mais um pouco a cabeça, os primeiros passos já demos, agora terá que andar sozinho ;)...

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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;
    }

    Editado por gandalfnho
    Faça uso da tag CODE

    Compartilhar este post


    Link para o post
    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)...

    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






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×