Você está aqui: Lisp ::: Dicas & Truques ::: Recursão (Recursividade) |
Como calcular fatorial em LISP usando uma função recursivaQuantidade de visualizações: 573 vezes |
Nesta dica mostrarei como podemos escrever uma função recursiva para calcular o fatorial de um número informado pelo usuário na linguagem Common Lisp. Veja o código completo:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; Programa que usa recursão para calcular ; o fatorial de um número informado pelo ; usuário (defun fatorial(numero) (if (= numero 0) ; caso base: retorna 1 1 ; efetua mais uma chamada recursiva (* numero (fatorial (1- numero))) ) ) ; solicita um número ao usuário e informa o ; fatorial do número informado (let((numero)(resultado)) ; vamos ler o número (princ "Informe um número inteiro: ") (force-output) (setq numero (read)) ; agora vamos calcular o fatorial do número ; informado pelo usuário (setq resultado (fatorial numero)) ; E mostramos o resultado (format t "O fatorial de ~D é ~D" numero resultado) ) Ao executar este código LISP nós teremos o seguinte resultado: Informe um número inteiro: 5 O fatorial de 5 é 120 |
![]() |
Lisp ::: LISP para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como converter Coordenadas Polares para Coordenadas Cartesianas em LISP - LISP para EngenhariaQuantidade de visualizações: 607 vezes |
Nesta nossa série de LISP e AutoLISP para Geometria Analítica e Álgebra Linear, mostrarei um código 100% funcional para fazer a conversão entre coordenadas polares e coordenadas cartesianas. Esta operação é muito frequente em computação gráfica e é parte integrante das disciplinas dos cursos de Engenharia (com maior ênfase na Engenharia Civil). Na matemática, principalmente em Geometria e Trigonometria, o Sistema de Coordenadas Polares é um sistema de coordenadas em duas dimensões no qual cada ponto no plano é determinado por sua distância a partir de um ponto de referência conhecido como raio (r) e um ângulo a partir de uma direção de referência. Este ângulo é normalmente chamado de theta (__$\theta__$). Assim, um ponto em Coordenadas Polares é conhecido por sua posição (r, __$\theta__$). Já o sistema de Coordenadas no Plano Cartesiano, ou Espaço Cartesiano, é um sistema que define cada ponto em um plano associando-o, unicamente, a um conjuntos de pontos numéricos. Dessa forma, no plano cartesiano, um ponto é representado pelas coordenadas (x, y), com o x indicando o eixo horizontal (eixo das abscissas) e o y indicando o eixo vertical (eixo das ordenadas). Quando saímos do plano (espaço 2D ou R2) para o espaço (espaço 3D ou R3), temos a inclusão do eixo z (que indica profundidade). Antes de prosseguirmos, veja uma imagem demonstrando os dois sistemas de coordenadas: ![]() A fórmula para conversão de Coordenadas Polares para Coordenadas Cartesianas é: x = raio × coseno(__$\theta__$) y = raio × seno(__$\theta__$) E aqui está o código LISP completo que recebe as coordenadas polares (r, __$\theta__$) e retorna as coordenadas cartesianas (x, y): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; programa LISP que converte Coordenadas Polares ; em Coordenadas Cartesianas (let((raio)(theta)(graus)(x)(y)) ; vamos ler o raio e o ângulo (princ "Informe o raio: ") (force-output) (setq raio (read)) (princ "Informe o theta: ") (force-output) (setq theta (read)) (princ "Theta em graus (1) ou radianos (2): ") (force-output) (setq graus (read)) ; o theta está em graus? (if(eq graus 1) (setq theta (* theta (/ pi 180.0))) ) ; fazemos a conversão para coordenadas cartesianas (setq x (* raio (cos theta))) (setq y (* raio (sin theta))) ; exibimos o resultado (format t "As Coordenadas Cartesianas são: (x = ~F, y = ~F)" x y) ) Ao executar este código LISP nós teremos o seguinte resultado: Informe o raio: 1 Informe o theta: 1.57 Theta em graus (1) ou radianos (2): 2 As Coordenadas Cartesianas são: (x = 0,00, y = 1,00) |
Lisp ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle |
Exercícios Resolvidos de LISP - Um programa que lê duas notas, calcula a média aritmética e exibe uma mensagem de reprovado, exame ou aprovadoQuantidade de visualizações: 409 vezes |
Pergunta/Tarefa: Escreva um programa LISP ou Common Lisp que leia duas notas (como double ou float), calcule e mostre a média aritmética e uma mensagem de acordo com as seguintes regras: 1) Se a média for inferior a 4,0 escreva "Reprovado"; 2) Se a média for igual ou superior a 4,0 e inferior a 7,0 escreva "Exame"; 3) Se a média for igual ou superior a 7,0 escreva "Aprovado". Sua saída deverá ser parecida com: Informe a primeira nota: 8 Informe a segunda nota: 7.4 A média obtida foi: 7.7 Aprovado Veja a resolução comentada deste exercício usando Common Lisp (a padronização da linguagem LISP): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; Algoritmo LISP para calcular a média de um aluno ; variáveis que vamos usar no programa (let ((n1)(n2)(media)) ; vamos solicitar as duas notas do aluno (princ "Informe a primeira nota: ") (force-output) (setq n1 (read)) (princ "Informe a segunda nota: ") (force-output) (setq n2 (read)) ; vamos calcular a média aritmética (setq media (/ (+ n1 n2) 2)) (format t "A média obtida foi ~F" media) ; vamos verificar se o aluno foi reprovado, está de exame ou aprovado (cond ((< media 4.0) ; reprovado (format t "~%Reprovado")) ((and (>= media 4.0)(< media 7.0)) ; exame (format t "~%Exame")) (t (format t "~%Aprovado")) ) ) |
Lisp ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular raiz quadrada em Lisp usando a função sqrtQuantidade de visualizações: 1243 vezes |
A raiz quadrada de um algarismo é dada por um número positivo n, que ao ser elevado ao quadrado (multiplicado por ele mesmo), se iguala a x. Na área da matemática, a raiz quadrada auxilia na resolução de vários problemas, entre eles as equações de segundo grau e o Teorema de Pitágoras. Relembrando que a raiz quadrada é o inverso da potenciação com expoente dois, temos que: \[\sqrt{9} = 3\] então, pela potenciação: \[3^2 = 9\] Agora veremos como calcular a raiz quadrada usando a função sqrt da linguagem Common Lisp. Veja o código completo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; Vamos definir as variáveis que vamos ; usar no programa (defvar numero) (defvar raiz) ; Este o programa principal (defun RaizQuadrada() ; Vamos ler o número (princ "Informe um número: ") ; talvez o seu compilador não precise disso (force-output) ; atribui o valor lido à variável numero (setq numero (read)) ; calcula a raiz quadrada do número informado (setq raiz (sqrt numero)) ; E mostramos o resultado (format t "A raiz quadrada de ~F é ~F" numero raiz) ) ; Auto-executa a função RaizQuadrada() (RaizQuadrada) Ao executar este código Common Lisp teremos o seguinte resultado: Informe um número: 9 A raiz quadrada é: 3 É importante observar que, se fornecermos um valor negativo para a função sqrt da Common List não teremos um erro, como em muitas outras linguagens de programação. Em vez disso, o valor retornado será em forma de um número complexo. Veja: Informe um número: -9 A raiz quadrada de -9.0 é #C(0.0 3.0) |
Veja mais Dicas e truques de Lisp |
Dicas e truques de outras linguagens |
wxWidgets - Como baixar, compilar a biblioteca e criar um projeto C++ wxWidgets usando o Visual Studio 2017 C# - Como remover um elemento em uma determinada posição de uma List<T> do C# usando a função RemoveAt() |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |