jonhhy Posted September 11, 2013 at 01:36 PM Report #524129 Posted September 11, 2013 at 01:36 PM (edited) 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 September 11, 2013 at 02:49 PM by thoga31 Tags code + GeSHi
pikax Posted September 11, 2013 at 01:43 PM Report #524132 Posted September 11, 2013 at 01:43 PM 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."
HappyHippyHippo Posted September 11, 2013 at 02:06 PM Report #524137 Posted September 11, 2013 at 02:06 PM (edited) 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 September 11, 2013 at 02:07 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
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