Brincar com ifs e conds
; Exercicio 7 - Brincar com ifs e conds
;
; Exercício resolvido por: Rui Maia (deathseeker25@portugal-a-programar.org)
;
; 7.1. O procedimento circulo, sem parametros, principia por pedir o raio de um circulo e termina visualizando
; no ecrã a área o círculo e o respectivo perímetro. Este procedimento verifica se o utilizador fornece um
; valor numérico adequado.
(define pi 3.141592653589793)
(define area-circulo
(lambda (raio)
(* pi (* raio raio))))
(define perimetro-circulo
(lambda (raio)
(* pi raio)))
(define circulo
(lambda ()
(display "raio (indicar um valor numérico positivo): ")
(let ((raio (read)))
(if (and (number? raio) (>= raio 0))
( (display "Area do circulo e: ")
(display (area-circulo raio))
(newline)
(display "Perimetro do circulo e: ")
(display (perimetro-circulo raio))
(newline))
(display "Erro: deve indicar um valor numérico positivo.")))))
;> (circulo)
;raio (indicar um valor numérico positivo): dez
;Erro: deve indicar um valor numérico positivo.
;> (circulo)
;raio (indicar um valor numérico positivo): -10
;Erro: deve indicar um valor numérico positivo.
;> (circulo)
;raio (indicar um valor numérico positivo): 10
;Area do circulo e: 314.1592653589793
;Perimetro do circulo e: 31.41592653589793
; 7.2. O procedimento area-triangulo devolve a area do triangulo, em que os comprimentos dos 3 lados
; são fornecidos através do teclado.
;
;>(area-triangulo)
;lado1: 10
;lado2: 20
;lado3: 25
;
;(area-triangulo)
;lado1: 10
;lado2: 20
;lado3: 35
;
; Este procedimento verifica se os argumentos fornecidos são compatíveis com os comprimentos dos lados
; de um triângulo, ou seja, nenhum deles pode ser igual ou superior à soma dos outros dois. Em caso de
; incompatibilidade o resultado deverá ser 0.
; Escreva em Scheme o procedimento area-triangulo conforme a especificacao apresentada.
(define calc-area
(lambda (sp lado1 lado2 lado3)
(sqrt (* sp (* (- sp lado1) (- sp lado2) (- sp lado3))))))
(define area-triangulo
(lambda ()
(display "lado1: ")
(let ((lado1 (read)))
(display "lado2: ")
(let((lado2 (read)))
(display "lado3: ")
(let((lado3 (read)))
(let((sp (/ (+ lado1 lado2 lado3) 2)))
(if (or (< (+ lado1 lado2) lado3) (< (+ lado1 lado3) lado2) (< (+ lado2 lado3) lado1))
0
((display "Area do triangulo: ")
(display (calc-area sp lado1 lado2 lado3))))))))))
;> (area-triangulo)
;lado1: 10
;lado2: 15
;lado3: 10
;Area do triangulo: 49.607837082461074
;> (area-triangulo)
;lado1: 10
;lado2: 11
;lado3: 22
;0