Questionário Básico

55 views
Skip to first unread message

Desembargador Lucas

unread,
Sep 15, 2020, 6:38:49 PM9/15/20
to Lua BR
Estou lendo o livro "Programando em Lua", e me deparei com a primeira questão:

Execute o exemplo do fatorial. O que acontecerá com o seu programa se você inserir um número negativo? Modifique o
exemplo para evitar esse problema.

O Código é esse:
-- define uma função fatorial function fact (n)
 if n == 0 then return 1 
else 
return n * fact(n-1) 
end 
end 
print("entre com um número:")
 a = io.read("*number") -- lê um número print(fact(a))  

Eric Chiesse

unread,
Sep 15, 2020, 7:14:48 PM9/15/20
to lua...@googlegroups.com
Oi Lucas. Entendi o problema. Qual é a sua dúvida?
---
Eric Chiesse


--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/lua-br/8464e864-937a-4c9d-a738-4be1c7afb05bn%40googlegroups.com.

Armando Staib

unread,
Sep 15, 2020, 9:07:43 PM9/15/20
to lua...@googlegroups.com
Eu nunca rodei com negativo
Mas ou vc proibe a entrada do n negativo
Ou faz o valor absoluto do n na entrada

Denis Dos Santos Silva

unread,
Sep 20, 2020, 9:11:28 AM9/20/20
to Lua BR
>> O que acontecerá com o seu programa se você inserir um número negativo?
- em calculo tem algo parecido chamado função gama, mas, o propósito aqui é calcular fatorial que não permite números negativos.
- inserir um numero negativo, parece que a função iria rumo ao infinito

>>Modifique o exemplo para evitar esse problema.

--

function fact (n)
  if (n < 0) then error("numero "); end -- se for valor informado menor que zero (ou poderia ate ser menor/igual a -1)
  if n == 0 then return 1; else  return n * fact(n-1); end 
end 

print("entre com um número:");
a = io.read("*number");

a = ( tonumber( string.format("%.0f", a)) or nil); -- converte o que o usuario informou para um numero E tira as casas decimais OU retorna 'nil'
if (not a) then error("entrada de dados invalida"); end

print( fact(a) );

--
--
--
Reply all
Reply to author
Forward
0 new messages