• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

frog

[Resolvido] Outro problema com C

7 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

                           

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora