From 8b41ca6426f2f6f3ccbaa45657ad5b687f150ea1 Mon Sep 17 00:00:00 2001 From: Marco A L Barbosa Date: Sat, 26 Sep 2020 12:13:07 -0300 Subject: [PATCH] funcoes: adiciona o exemplo imposto --- 03-funcoes/exemplos.rkt | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/03-funcoes/exemplos.rkt b/03-funcoes/exemplos.rkt index 7c11efc..34662d4 100644 --- a/03-funcoes/exemplos.rkt +++ b/03-funcoes/exemplos.rkt @@ -38,3 +38,35 @@ (string-length b)) a b)) + +; Cada cidadão de um país, cuja moeda chama dinheiro, +; tem que pagar imposto sobre a sua renda. +; Cidadãos que recebem até 1000 dinheiros pagam 5% de +; imposto. Cidadãos que recebem entre 1000 e 5000 +; dinheiros pagam 5% de imposto sobre 1000 dinheiros e +; 10% sobre o que passar de 1000. Cidadãos que recebem +; mais do 5000 dinheiros pagam 5% de imposto sobre 1000 +; dinheiros, 10% de imposto sobre 4000 dinheiros e 20% +; sobre o que passar de 5000. Projete uma função que +; calcule o imposto que um cidadão deve pagar dado a +; sua renda. + +;; Número -> Número +;; Calcula o imposto que um pessoa com a renda r deve +;; pagar. +(examples + ; Até 1000 (inclusive) + (check-equal? (calcula-imposto 900.0) 45.0) ; (* 900 0.05) + (check-equal? (calcula-imposto 1000.0) 50.0) ; (* 1000 0.05) + ; Entre 1000 e 5000 (inclusive) + (check-equal? (calcula-imposto 3000.0) 250.0) ; (+ 50 (* (- 3000 1000) 0.1)) + (check-equal? (calcula-imposto 5000.0) 450.0) ; (+ 50 (* (- 5000 1000) 0.1)) + ; Mais do que 5000 + (check-equal? (calcula-imposto 10000.0) 1450.0)) ; (+ 450 (* (- 10000 5000) 0.2)) + +; (define (calcula-imposto r) 0) ; esboço + +(define (calcula-imposto r) + (cond [(<= r 1000) (* r 0.05)] + [(<= r 5000) (+ 50 (* (- r 1000) 0.1))] + [else (+ 450 (* (- r 5000) 0.2))]))