Como buscar um valor em uma tabela??

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Como buscar um valor em uma tabela??

Jorge Eduardo
Olá, pessoal!
Em primeiro lugar eu quero agradecer a todos vocês pois solucionei muitas dúvidas aqui nesse fórum.

Eu estou com problema nesse código:
Eu quero criar uma tabela, preenchê-la com dez números aleatórios e depois iterar esta tabela, procurando por um determinado valor digitado pelo usuário.

Caso o valor seja encontrado, imprime a mensagem:

Numero X encontrado na posicao Y.

Caso o valor nao seja encontrado, imprime a mensagem:

Numero X nao encontrado!


​math.randomseed(os.time())
local tabela={}
local num
for i=1,10 do
tabela[i]=math.random(0,99)
end
print(table.concat(tabela, ","))
io.write("Digite um numero: ")
num=io.read("*num")
for _,v in pairs(tabela) do
if v==num then
print("Numero "..num.." encontrado na posicao "..k.." !")
else
print("Numero "..num.." nao encontrado!")
break
end
end

Ele não está funcionando...
Vocês podem me ajudar mais esta vez?
Grato.

--
Você está recebendo esta mensagem porque se inscreveu 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 [hidden email].
Visite este grupo em https://groups.google.com/group/lua-br.
Para obter mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Como buscar um valor em uma tabela??

Diego Nascimento
fica meio estranho, mas algo assim daria certo.
=================================================

for k, v in ipairs(tabela) do
    if v == num then
        print("Numero "..num.." encontrado na posicao "..k.." !")
        return 
    end
end

print("Numero não encontrado")

=================================================

se ele encontra ele encerra o programa.. .. se não encontra ele vai para o final e ignora o if.. isso é bom de se fazer dentro de funções, fica mais legível, menos estranho.

Em 13 de maio de 2017 00:27, Jorge Eduardo <[hidden email]> escreveu:
Olá, pessoal!
Em primeiro lugar eu quero agradecer a todos vocês pois solucionei muitas dúvidas aqui nesse fórum.

Eu estou com problema nesse código:
Eu quero criar uma tabela, preenchê-la com dez números aleatórios e depois iterar esta tabela, procurando por um determinado valor digitado pelo usuário.

Caso o valor seja encontrado, imprime a mensagem:

Numero X encontrado na posicao Y.

Caso o valor nao seja encontrado, imprime a mensagem:

Numero X nao encontrado!


​math.randomseed(os.time())
local tabela={}
local num
for i=1,10 do
tabela[i]=math.random(0,99)
end
print(table.concat(tabela, ","))
io.write("Digite um numero: ")
num=io.read("*num")
for _,v in pairs(tabela) do
if v==num then
print("Numero "..num.." encontrado na posicao "..k.." !")
else
print("Numero "..num.." nao encontrado!")
break
end
end

Ele não está funcionando...
Vocês podem me ajudar mais esta vez?
Grato.

--
Você está recebendo esta mensagem porque se inscreveu 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 [hidden email].
Visite este grupo em https://groups.google.com/group/lua-br.
Para obter mais opções, acesse https://groups.google.com/d/optout.

--
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 [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Como buscar um valor em uma tabela??

Daniel Ribeiro Filho
In reply to this post by Jorge Eduardo
Jorge,

Me parece que no primeiro teste em que sua condição não for satisfeita a execução do for terminará, devido ao break, deixando de verificar os demais números na lista.

for _,v in pairs(tabela) do
if v==num then
print("Numero "..num.." encontrado na posicao "..k.." !")
else
print("Numero "..num.." nao encontrado!")
break
end

Note que ao remover o break, para cada elemento da lista pra o qual a condição não for satisfeita, o mensagem "...não encontrado" será enviada para a saída.

Att,

Daniel Ribeiro
sent by phone

On 13 May 2017, at 00:27, Jorge Eduardo <[hidden email]> wrote:

for _,v in pairs(tabela) do
if v==num then
print("Numero "..num.." encontrado na posicao "..k.." !")
else
print("Numero "..num.." nao encontrado!")
break
end

--
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 [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Como buscar um valor em uma tabela??

Denis Dos Santos Silva
In reply to this post by Jorge Eduardo
espero que ajude

--
-- teste.lua
--

function localiza(tbl, n)
-- tbl     : tabela com numeros {1,2,3, ...}
-- n       : numero a ser encontrado
-- retorna : false | indice com a posicao 

for i=1, #tbl do
if (tbl[i] == n) then return i; end
end

return false;
end

--
--
--

sprintf = string.format;
math.randomseed(os.time()) 

local tabela={} 
local num, idx;
local debug = true;

for i=1, 10 do 
-- obs: os numeros gerados podem se repetir
tabela[i] = math.random(0, 99)
end 

if (debug) then
print('[debug] tabela:', table.concat(tabela, ", "))
end

print("\n\n");

io.write("Digite um numero: ");
num = io.read("*n");

if (not num) then
print("ops! entrada de dados invalida");
return;
end

idx = localiza(tabela, num);
if (not idx) then
print( sprintf('ops! numero %d nao encontrado', num) );
return
end

print( sprintf('Numero "%d" encontrado na posicao "%d"', num, idx ) );

print("\n\n");


--
-- <<eof>>
--



Em sábado, 13 de maio de 2017 00:27:16 UTC-3, Jorge Eduardo escreveu:
Olá, pessoal!
Em primeiro lugar eu quero agradecer a todos vocês pois solucionei muitas dúvidas aqui nesse fórum.

Eu estou com problema nesse código:
Eu quero criar uma tabela, preenchê-la com dez números aleatórios e depois iterar esta tabela, procurando por um determinado valor digitado pelo usuário.

Caso o valor seja encontrado, imprime a mensagem:

Numero X encontrado na posicao Y.

Caso o valor nao seja encontrado, imprime a mensagem:

Numero X nao encontrado!


​math.randomseed(os.time())
local tabela={}
local num
for i=1,10 do
tabela[i]=math.random(0,99)
end
print(table.concat(tabela, ","))
io.write("Digite um numero: ")
num=io.read("*num")
for _,v in pairs(tabela) do
if v==num then
print("Numero "..num.." encontrado na posicao "..k.." !")
else
print("Numero "..num.." nao encontrado!")
break
end
end

Ele não está funcionando...
Vocês podem me ajudar mais esta vez?
Grato.

--
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 [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Como buscar um valor em uma tabela??

Jorge Eduardo
In reply to this post by Jorge Eduardo
Fuincionou, legal!!
 
Muito obrigado.
 
Qual a diferença entre pairs(tabela) e ipairs(tabela) ?

--
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 [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Como buscar um valor em uma tabela??

Denis Dos Santos Silva
In reply to this post by Jorge Eduardo
J. Eduardo, dê uma olhada no manual da linguagem (link abaixo), eu recomendaria você adquirir o livro oficial, realmente, pra quem ta começando... é uma ajuda e tanto.

basicamente os dois são Iterators (auxiliam no processamento "incremental")
ipairs usa chave inteira, p.ex., tbl = {1,2,3,4 ...} - e;
pairs usa chave serve para os demais casos, p.ex., tbl = { a = {nome = "foo", idade = 99}, b = {nome = "bar", idade = 11}, c = 1, d = -2 }

ipairs (t)

Se t tem um metamétodo __ipairs, chama-o com t como argumento e retorna os primeiros três resultados da chamada.

Caso contrário, retorna três valores: uma função iteradora, a tabela t, e 0, de modo que a construção

     for i,v in ipairs(t) do corpo end

irá iterar sobre os pares (1,t[1]), (2,t[2]), ..., até a primeira chave inteira ausente da tabela.


pairs (t)

Se t tem um metamétodo __pairs, chama-o com t como argumento e retorna os primeiros três resultados da chamada.

Caso contrário, retorna três valores: a função next, a tabela t, e nil, de modo que a construção

     for k,v in pairs(t) do corpo end

irá iterar sobre todos os pares chave–valor da tabela t.

Veja a função next para os cuidados que se deve ter ao modificar a tabela durante seu percorrimento.


sobre Iterators -> https://en.wikipedia.org/wiki/Iterator
link de referência: https://www.lua.org/portugues.html
link do manual: https://www.lua.org/manual/5.2/pt/manual.html
link do livro: http://www.grupogen.com.br/programando-em-lua?code=luaorg&utm_source=luaorgutm_medium=beneficios&utm_campaign=parceria_luaorg_9788521626992





Em sábado, 13 de maio de 2017 00:27:16 UTC-3, Jorge Eduardo escreveu:
Olá, pessoal!
Em primeiro lugar eu quero agradecer a todos vocês pois solucionei muitas dúvidas aqui nesse fórum.

Eu estou com problema nesse código:
Eu quero criar uma tabela, preenchê-la com dez números aleatórios e depois iterar esta tabela, procurando por um determinado valor digitado pelo usuário.

Caso o valor seja encontrado, imprime a mensagem:

Numero X encontrado na posicao Y.

Caso o valor nao seja encontrado, imprime a mensagem:

Numero X nao encontrado!


​math.randomseed(os.time())
local tabela={}
local num
for i=1,10 do
tabela[i]=math.random(0,99)
end
print(table.concat(tabela, ","))
io.write("Digite um numero: ")
num=io.read("*num")
for _,v in pairs(tabela) do
if v==num then
print("Numero "..num.." encontrado na posicao "..k.." !")
else
print("Numero "..num.." nao encontrado!")
break
end
end

Ele não está funcionando...
Vocês podem me ajudar mais esta vez?
Grato.

--
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 [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Como buscar um valor em uma tabela??

Jorge Eduardo
Acabei de adquirir o livro no site lua.org e estou aguardando chegar.

Obrigado!

--
Você está recebendo esta mensagem porque se inscreveu 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 [hidden email].
Visite este grupo em https://groups.google.com/group/lua-br.
Para obter mais opções, acesse https://groups.google.com/d/optout.