frog Posted July 3, 2006 at 11:27 PM Report #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
maiden Posted July 3, 2006 at 11:53 PM Report #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,
Rui Carlos Posted July 4, 2006 at 12:10 AM Report #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
Warrior Posted July 4, 2006 at 06:30 AM Report #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.
frog Posted July 4, 2006 at 08:57 AM Author Report #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?
Solution Warrior Posted July 4, 2006 at 06:06 PM Solution Report #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");
frog Posted July 4, 2006 at 06:46 PM Author Report #36216 Posted July 4, 2006 at 06:46 PM Obrigado, pela resposta fiquei muito escalrecido! Cumps
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