Jump to content

[Resolvido] Outro problema com C


frog
 Share

Recommended Posts

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:

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

-Quando passo a fase seguinte de perguntar quanto e que custa o produto, depois de eu por um numero, diz ....IVA e: 0

-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

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.