Skip to content

Instantly share code, notes, and snippets.

@reinaldo
Last active March 6, 2021 04:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reinaldo/a022e8ae78db30b696d4c95444be1d50 to your computer and use it in GitHub Desktop.
Save reinaldo/a022e8ae78db30b696d4c95444be1d50 to your computer and use it in GitHub Desktop.
Entrada e Saída de Dados. Formatações.
--[[
Esse programa apresenta uma mensagem introdutória para o usuário
e faz uma pergunta para que ele insira um valor e este valor
será automaticamente multiplicado por 20,
resultando uma resposta na tela.
]]
print('Digite a quantidade de cloro por 1 litro de agua: ')
print('A quantidade de cloro em 20 litros de solução, será de '.. io.read() * 20)
--[[
Programa que pede que o usuário entre o nome e a idade
e que serão armazenados respectivamente na variável nome e idade,
por fim serão apresentadas mensagens.
]]
io.write("Entre com seu nome: ")
nome = io.read()
io.write("Entre com sua idade: ")
idade = io.read()
print("Olá, " .. nome)
print("Você tem " .. idade .. " anos!")
print("Em 10 anos, você terá " .. idade + 10 .. " anos!")
-- Simples exemplo de formatação que captura a hora do sistema
-- operacional em UTC format (timestamp) e imprime para usuário
print( os.time() ) -- recebendo dados do sistema operacional.
--[[ Comumente o formato timestamp UTC é pouco compreendido
então o que vou fazer é receber o valor que foi obtido
da função os.time acima e inserir no exemplo abaixo
para decodificá-la
]]
local timestamp = 906000490
local t = os.date("*t", timestamp)
-- Produz a seguinte tabela, t:
print(
t.year , " ",
t.month , " ",
t.day , " ",
t.yday , " ",
t.wday , " ",
t.hour , " ",
t.min , " ",
t.sec)
-- O uso de tabelas será abordado na Lua 8.
-- Simples exemplo de formatação
--[[
Substituição de valores pelas especificadores,
aqui substitui o valor 11.25017 pelo %6.2f,
Logo temos uma formatação para seis caracteres à esquerda e
dois caracteres a direita fracionários.
]]
string.format( "Carlos ganhou R$%6.2f vendendo seu computador.", 11.25017 )
--[[
Exemplo que insere o valor oito
para representar a idade em anos, na mensagem.
]]
print(("Eu tenho %d ano(s) de idade."):format(8))

Entrada e Saída de Dados

Aqui, abordo a entrada (recepção dos dados), e saída (impressão em tela).

Impressão em tela

Para tal terermos, a função print() e a função io.write()

print
io.write

Recebe dados

Com a função io.read() podemos entrar com dados para alimentar uma expressão matemática, por exemplo, ou obter dados de sensores.

sensor = io.read()

Vale lembrar que io.read() retorna string.

Veja o exemplo:

x = io.read()
if x ~= '0' then
    print (x .. ' diferente do 0')
end
if x == '1' then
    print (x .. ' igual a 1')
end

Adiante estudaremos if em Lua 6.

--[[
Programa que armazenam valor neperiano e o seu nome em duas
variáveis distintas. Aqui se eu te usa string.format
para substituição dentro da mensagem, de valores por
especificadores. Agora fazemos atalho com sf.
]]
neper_e = 2.7182818284590452353602874
neper_nome = "Neper"
sf = string.format -- sim, isto pode :))
print(sf("O valor de %s é %d, e não é uma substituição legal?",neper_nome, neper_e))
--[[
Esse programa apresenta uma mensagem e automaticamente
já acha a resposta para a expressão matemática,
inserindo-a dentro da própria mensagem na tela.
]]
print('Uma lampada estipulada para 2200 horas de uso terah uma vida de ' .. (2200/6/365) .. ' ano(s).')
--[[
Esse programa apresenta uma mensagem e automaticamente
já acha a resposta para a expressão matemática,
inserindo-a dentro da própria mensagem na tela.
Este exemplo utiliza-se o format e a interpolação.
Repare que dois valores são apresentados.
O primeiro valor valor está em decimal e substituído por %d,
para o outro valor fracionaldo, será respectivamente
substituído por %.1f, e que teremos uma casa depois da ,
]]
print(('Uma lampada estipulada para %d horas de uso terah uma vida de %.1f ano(s)'):format(2200, 2200/6/365))
--[[Programa que mostra uma mensagem pedindo para usuário
digitar o nome e esse nome será armazenado na variável nome,
logo em seguida, aparecerá uma mensagem olá e o nome inserido.
]]
print ("Por favor entre com seu nome:")
nome = io.read() -- apos digitar, sempre tecle enter
print ("Olá " .. nome)
--[[
Programa que armazenam valor neperiano e o seu nome em duas
variáveis distintas. Aqui se eu te usa string.format
para substituição dentro da mensagem, de valores por especificadores
]]
neper_e = 2.7182818284590452353602874
neper_nome = "Neper"
print(string.format("O valor de %s é %d",neper_nome, neper_e))
--[[
Programa que armazenam valor neperiano e o seu nome em duas
variáveis distintas; contudo somente o nome é mostrado.
Mas o valor da variável neper se mantem armazenada na memória
Embora não seja mostrada.
]]
local neper_e = 2.7182818284590452353602874
local neper_nome = "Neper"
io.write(neper_e)
-- Especificações adicionais para io.read
-- Exemplo 1
s = io.read(7) -- lê 7 caracteres. Limita a entrada de caracteres.
-->> 1234567890 -- entrada 1234567890 pelo teclado
print(s)
-->> 1234567 -- saída 1234567 formatada na tela, limitando a 7caracteres
-- Exemplo 2
x,y = io.read(7,12) -- lê 7 e 12 caracteres e os atribui para x e y
-- Exemplo 3
print('Informe quantos quilos terá o resíduo urbano: ')
peso = tonumber(io.read())
print('O resíduo urbano tem '..peso..'kg.')
-- Exemplo 4
io.write("Lua é", "muito fácil!")
io.write("Não é?", "\n") -- Lembre-se que \n é quebra de linha
--Programa: pergunte o nome do usuário e depois imprima a resposta
sf=string.format
local resposta
io.write("Qual é o seu nome? ")
resposta = io.read()
print(sf("OK, seu nome %s foi cadastrado com sucesso.",resposta))
--ou
sf=string.format
io.write("Qual é o seu nome? ")
print(sf("OK, seu nome %s foi cadastrado com sucesso.",io.read()))
--[[Armazenamento do valor pi na variável local pi
e seu nome na variável pi_nome, depois impressao
desses valores na tela diferenciando
os seguintes comandos io.write e print
]]
local pi = 3.14159
local pi_nome = "PI"
io.write("O valor de ")
io.write(pi_nome)
io.write(" é ")
io.write(pi)
print(", e isso não é legal?")
--[[
Revisão de concatenação de literais e quebra de linha com \n
]]
print("Olá amigos! " .. "Estou mostrando esta frase!")
io.write("Olá amigos!");
io.write("Estou mostrando esta frase!");
io.write("Olá amigos!\n");
io.write("Estou mostrando esta frase!\n")
posicao_na_fila = 1
print("Eu sou o número #" .. posicao_na_fila .. " da fila de atendimento!")
print('', 'Strings podem estar vazias')
print("Olah, Joe!", 'Strings em dois tipos de aspas')
print("Olah, " .. 'Joe!', 'Strings concatenadas usando ..')
print("Ela sussurrou, 'Eu amo programar'", 'Aspas simples dentro de aspas duplas para enfatizar um texto na frase.')
print('a' .. 'b' .. 'c', 'Expressoes com multiplas concatenacoes')
print('a' .. ('b' .. 'c'), 'Parenteses utilizados para agrupar')
print("Eu tenho ".. 8 .." anos de idade", 'Numeros convertidos para Strings')
print(("Eu tenho %d anos de idade"):format(8), 'Strings podem ser formatadas')
print(("%d eh superior a %d"):format(5, 2), 'Strings com espacos numericos reservados')
--[[ Revisão de concatenação,
apresentando vários exemplos com literais e numéricos.
Também armazenamento de variáveis e concatenação
dessas variáveis Quem será armazenada numa terceira variável
e posteriormente a sua impressão na tela.
]]
print("1"..1)
print("1" .. "1")
nome="Francisco"
sobrenome="Reinaldo"
print(nome..sobrenome)
completo=nome .. sobrenome
print(completo)
completo2=nome .. " " .. sobrenome
print(completo2)
-[[
Programa que mostra qual é o seno de três
apresentando na tela a mensagem seno de três
e o valor de seno de três
]]
io.write("seno (3) = ", math.sin(3), "\n")

Interpolação de Sring

print("Olá " .. name .. ", o valor da chave " .. k .. " é " .. v .. "!")

Mas podemos otimizar seu uso com ...

string.format()

De acordo com os autores de Lua, a função string.format é uma ferramenta poderosa ao formatar strings, normalmente para saída. Ele retorna uma versão formatada de seu número variável de argumentos seguindo a descrição dada por seu primeiro argumento, a chamada string de formato. A string de formato tem regras semelhantes às da função printf do padrão C: é composta de texto regular e diretivas, que controlam onde e como cada argumento deve ser colocado na string formatada.

Exemplo 1:

name="Pablo"
k=5
v=33434

print("Olá " .. name .. ", o valor da chave " .. k .. " é " .. v .. "!")
-- eh equivalente a
print(string.format("Olá %s, o valor da chave %d é %d!",name,k,v))

Exemplo 2:

local pi = 3.14159
local pi_nome = "PI"
print(string.format("O valor de %s é %d, e n\ao é legal?",pi_nome, pi))

A chatice está em escrever string.format() toda vez e isto faz linhas longas. Portanto vamos encurtá-la

local pi = 3.14159
local pi_nome = "PI"
sf=string.format
print(sf("O valor de %s é %d, e n\ao é legal?",pi_nome, pi))

Você pode saber mais sobre especificadores em:

http://www.cplusplus.com/reference/cstdio/printf/

--[[
# para o comprimento
]]
variavel = "Reinaldo"
io.write("O comprimento eh ", #variavel, " e seu valor eh: \"", variavel, "\"\n")
variavel = 10
io.write("Agora seu valor eh :\"", variavel, "\"")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment