frog Posted July 3, 2006 at 11:27 PM Report Share #36057 Posted July 3, 2006 at 11:27 PM Ola, bem como voces ajudaram-me imenso no outro topico, eu gostaria que me voltasem a ajudar...lol... vou vos dar o codigo que não está como eu queria nao sei porque, eu digo tudo a seguir ao codigo. #include <stdio.h> int main () { float a; int iva,custo_total; printf("Escolha:\n[1] para produtos comerciais\n[2] para roupa, e artigos para o lar\n[3] para comida\n\n>>"); scanf("%f" , &a); if (a==1) iva = 100 / custo_total * 21; if (a==2) iva = 100 / custo_total * 12; if (a==3) iva = 100 / custo_total* 5; printf("Quanto custa o produto?\n\n>> "); scanf("%d" , &custo_total); printf(" O IVA do produto e: %d" , iva); getch(); } Tenho varios problemas: 1º-Eu queria um else, para quando nao fosse nem 1,2,3 dissesse numero incorrecto, mas eu criei um else, e quando eu punha 1 ou 2 dava numero incorrecto. 2º-Quando passo a fase seguinte de perguntar quanto e que custa o produto, depois de eu por um numero, diz ....IVA e: 0 3º-este e de burro, como e que se calcula a percentagem de um numero? Ficava muito agradecido se me respondessem, esforcei-me ao maximo para tentar corrigiros erros, mas nao consigo! Cumps Link to comment Share on other sites More sharing options...
maiden Posted July 3, 2006 at 11:53 PM Report Share #36060 Posted July 3, 2006 at 11:53 PM Boas, Quanto ao caso do else, estás a fazer a estrutura dos ifs mal. Devias fazer algo como: if (a==1) iva = 100 / custo_total * 21; else if (a==2) iva = 100 / custo_total * 12; else if (a==3) iva = 100 / custo_total* 5; else printf("A opcao introduzida e invalida"); Agora quanto ao 2º problema... O valor do iva é 0, porque a variavel custo_total está sempre a 0, o pedaço de código no qual fazes a introdução de um valor para esta variável encontra-se fora do devido bloco. Teria de ficar algo do género: if (a==1) printf("Quanto custa o produto?\n\n>> "); scanf("%d" , &custo_total); iva = 100 / custo_total * 21; printf(" O IVA do produto e: %d" , iva); else if (a==2) ... else if (a==3) ... Espero ter ajudado. Cumps, Link to comment Share on other sites More sharing options...
Rui Carlos Posted July 4, 2006 at 12:10 AM Report Share #36066 Posted July 4, 2006 at 12:10 AM se calhar era melhor meter a parte de perguntar o preço e de mostrar o iva fora do if (para não ter que repetir 3 vezes a mesma coisa...) Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Warrior Posted July 4, 2006 at 06:30 AM Report Share #36074 Posted July 4, 2006 at 06:30 AM 1º a não deve ser float, mas sim inteiro (int) 2º sempre que existirem várias opções, usa o switch case. Vais ver que se te habituares a fazer isto no futuro agradeces. 3º o custo total deve ser mesmo perguntado antes de calcular o IVA. Tal como fizeste, desconheces o seu valor quando vais a calcular o iva. (Não é 0 porque em C as variáveis não ficam necessariamente a 0 quando não lhes atribuis nenhum valor.) Julgo que o que pretedes fazer é isto: #include <stdio.h> int main() { int a,iva; float custo_total; printf("Escolha:\n[1] para produtos comerciais\n[2] para roupa, e artigos para o lar\n[3] para comida\n\n>>"); scanf("%d",&a); printf("Quanto custa o produto?\n\n>> "); scanf("%f",&custo_total); iva=(a==1?21:(a==2?12:(a==3?5:0))); if (iva==0) printf("Opção inválida\n"); else { printf("O IVA do produto e: %d%%\n",iva); printf("O custo final do produto e: %.2f\n",custo_total+(custo_total*iva/100)); } system("PAUSE"); return 0; } O a é um inteiro, uma vez que só obtem valores inteiros ao longo da execução do programa. O mesmo acontece com o IVA. O custo_total é float, uma vez que pode obter valores decimais. A linha provavelmente mais dificil de entender iva=(a==1?21:(a==2?12:(a==3?5:0))); é um caso típico do operador ternário em C. Ele começa por teste se a==1, se isto for verdade, executa o que está entre o ? e o :, se for falso executa o que está após o :. Julgo que o resto do programa se explica por sim mesmo. Link to comment Share on other sites More sharing options...
frog Posted July 4, 2006 at 08:57 AM Author Report Share #36081 Posted July 4, 2006 at 08:57 AM Obrigado a todos. Não percebi uma coisa, na "novo codigo" , nesta linha iva=(a==1?21:(a==2?12:(a==3?5:0))); nao percebi aquele zero no fim. Outra coisa,o que eu queria no programa era por um preço e ele dizer quanto era o IVA, por exemplo punho o produto custa 100 euros, e o pregrama dizia que o IVA era 21 euros. Obrigado pela ajuda Outra coisa: O que e que eu tinha mal no programa? Eu sei que tem haver com os IF's, mas era onde concretamente? Link to comment Share on other sites More sharing options...
Warrior Posted July 4, 2006 at 06:06 PM Report Share #36202 Posted July 4, 2006 at 06:06 PM Na linha do IVA, quando ele compara se a é ou não igual a 3, ele já sabe que a não é igual a 1 nem a 2. Ou seja, se o resultado for falso, a não é nem 1, nem 2, nem 3, logo é um valor inválido. Na linha seguinte, ele verifica. Se o iva for igual a 0, diz que a opção escolhida é inválida. Quanto ao teu programa: Ele verifica se a==1. Verifica se a==2. Verifica se a==3. Se colocares o else só depois deste ponto, como vai ele processar? Se a==3 => iva = 100 / custo_total* 5; senão (ou seja, se a for diferente de 3) => imprime a mensagem de opção inválida Ora, não é isto que tu pretendes. Aliás, tu sabes mais. Sabes que se a for igual a 1, não vai ser igual a 2 nem a 3, logo verificar constantemente é inutil Vê se com esta identação percebes melhor. if (a==1) iva = 100 / custo_total * 21; else if (a==2) iva = 100 / custo_total * 12; else if (a==3) iva = 100 / custo_total* 5; else printf("A opcao introduzida e invalida"); Link to comment Share on other sites More sharing options...
frog Posted July 4, 2006 at 06:46 PM Author Report Share #36216 Posted July 4, 2006 at 06:46 PM Obrigado, pela resposta fiquei muito escalrecido! Cumps Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now