Jump to content
jonhhy

Ciclo switch

Recommended Posts

jonhhy

Boa tarde,

o tema da minha dúvida é fazer um exercício utilizando o switch. Em que utilize a vertente dos case sem necessitar de utilizar o break.

Mas para constantes diferentes os resultados também são diferentes.

Problema:

Enunciado: escreve 1 programa que calcule o imposto pago pelas mulheres e por homens, as mulheres pagam 10% e os homens pagam mais 5% do que as mulheres.

tentativa de programas para solucionarem o problema, mas ao executar não funcionam de maneira eficaz

#include <stdio.h>
main()
{    float salario, taxa=0.10;
   char genero;
   puts("escreva a primeira letra do seu género\n");
   /*scanf("%c"&genero);*/genero=getchar();
   puts("introduza o montante de seu ordenado");
   scanf("%f",&salario);
   switch(genero)
   {
       case 'h':taxa= taxa * 1.5;
       case 'H':
       case 'm': taxa;
       case 'M':
       ;
   }
   printf("o imposto pago pelo usuário é de:%f  \n", salario*taxa);
}

erro: da maneira elaborada por mim a variável taxa não é alterada para os 0.15 ou 15% no caso de ser do sexo masculino o utilizador. o que tenho de alterar?

outra forma adaptada da original:

#include <stdio.h>
main()
{  
   float salario, taxa=0.10;
   char genero;


   puts("introduza o montante de seu ordenado");
   scanf("%f",&salario);

   puts("escreva a primeira letra do seu género\n");
   genero=getchar();


   switch(genero)
   {
       case 'm':
       case 'M':taxa=taxa+0.05;
       case 'f':
       case 'F':taxa= taxa+0.10;
   }
   printf("o imposto pago pelo usuário é de:%.2f  \n", salario*taxa);
}

erro: não deixa ler a variável do género.

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
pikax

tens que meter um break depois dos cases:

switch(genero)
{
 case 'm':
 case 'M':taxa=taxa+0.05;
   break;
 case 'f':
 case 'F':taxa= taxa+0.10;
   break;
}


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens que meter um break depois dos cases:

o uso dos break's não é obrigatória além de ser um objectivo do enunciado:

Boa tarde,

o tema da minha dúvida é fazer um exercício utilizando o switch. Em que utilize a vertente dos case sem necessitar de utilizar o break.

Mas para constantes diferentes os resultados também são diferentes.

Problema:

Enunciado: escreve 1 programa que calcule o imposto pago pelas mulheres e por homens, as mulheres pagam 10% e os homens pagam mais 5% do que as mulheres.

o segundo código parece teóricamente correcto, tirando os problemas normais de quem está a começar a programar

- função main sem valor de retorno

- nenhum tratamento dos dados de entrada e do seu respectivo buffer (e sim, o "erro" que dizes acontecer, é refente e este ponto)

- identação inexistente

- uso do float em vez do double

este seria o código correcto

#include <stdio.h>

#define CLEAR_INPUT while(getchar() != '\n') /* void */

int main(void)
{  
 double salario, taxa;
 char genero;
 int ok;

 do {
   printf("introduza o montante de seu ordenado : ");
   fflush(stdout);
   ok = scanf("%lf", &salario);
   CLEAR_INPUT;
 } while (!ok);

 do {
     printf("escreva a primeira letra do seu género : ");
     fflush(stdout);
     genero = getchar();
     CLEAR_INPUT;
 } while (genero != 'm' && genero != 'M' && genero != 'f' && genero != 'F');

 switch(genero)
 {
   case 'm':
   case 'M':
     taxa=taxa+0.05;
   case 'f':
   case 'F':
     taxa= taxa+0.10;
 }

 printf("o imposto pago pelo usuário é de: %.2lf\n", salario * taxa);

 return 0;
}

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
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

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