Duvida de ordenação

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Duvida de ordenação

augustoreal.santos
vetor = {12,3,14,16,7,4,2,18}
i = 0
j = #vetor

while(i<=j) do

if(vetor[i] > vetor[j]) then
aux = vetor[j]
vetor[j] = vetor[i]
vetor[i] = aux
elseif(vetor[j] < vetor[i]) then
aux = vetor[i]
vetor[i] = vetor[j]
vetor[j] = vetor[i]
end


end

for j=1,8 do
print(vetor[i])

end




lua: teste.lua:7: attempt to compare number with nil



pq fica dando esse erro???

--
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].
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/lua-br/1fe25cc0-2a46-47d5-898f-7ceca60adb1a%40googlegroups.com.
Reply | Threaded
Open this post in threaded view
|

Re: Duvida de ordenação

Luiz Henrique de Figueiredo
On Fri, May 29, 2020 at 4:33 PM José Augusto
<[hidden email]> wrote:
>
> vetor = {12,3,14,16,7,4,2,18}
> i = 0
...
> if(vetor[i] > vetor[j]) then

Os arrays em Lua começam de 1, não de 0.

--
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].
Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/lua-br/CAD55k3qqR2rUN%3DFqnmp9jmTpaTCbb_FQeUD_0s3MsM4Gfp_uvw%40mail.gmail.com.
Reply | Threaded
Open this post in threaded view
|

Re: Duvida de ordenação

Tomás Guisasola
Oi José

Além do que o Luiz falou, vale a pena você olhar com cuidado o seu
algoritmo, porque ele tem alguns probleminhas.  No loop while() você
não altera os valores de i nem de j, então vai ser um loop infinito.
E no corpo desse loop você faz duas vezes o mesmo teste (se vetor[i] >
vetor[j] e se vetor[j] < vetor[i]).

Sugiro você usar a construção for mesmo para fazer a ordenação
(supondo que você não quer usar table.sort para isso) e outra dica
seria escrever:

vetor[i], vetor[j] = vetor[j], vetor[i]

Isso vai trocar os dois valores sem precisar de uma variável auxiliar ;-)

Abraços,
Tomás

Em sex., 29 de mai. de 2020 às 16:43, Luiz Henrique de Figueiredo
<[hidden email]> escreveu:

>
> On Fri, May 29, 2020 at 4:33 PM José Augusto
> <[hidden email]> wrote:
> >
> > vetor = {12,3,14,16,7,4,2,18}
> > i = 0
> ...
> > if(vetor[i] > vetor[j]) then
>
> Os arrays em Lua começam de 1, não de 0.
>
> --
> 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].
> Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/lua-br/CAD55k3qqR2rUN%3DFqnmp9jmTpaTCbb_FQeUD_0s3MsM4Gfp_uvw%40mail.gmail.com.

--
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].
Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/lua-br/CAJarVn0aOzCma7SQGyukpKn_%3DD8W101d1qdOdigpgJtC6FEwdQ%40mail.gmail.com.
Reply | Threaded
Open this post in threaded view
|

Re: Duvida de ordenação

augustoreal.santos
Muito obrigado, agradeço de coração a todos vocês.


Em sex., 29 de mai. de 2020 às 18:01, Tomás Guisasola <[hidden email]> escreveu:
Oi José

Além do que o Luiz falou, vale a pena você olhar com cuidado o seu
algoritmo, porque ele tem alguns probleminhas.  No loop while() você
não altera os valores de i nem de j, então vai ser um loop infinito.
E no corpo desse loop você faz duas vezes o mesmo teste (se vetor[i] >
vetor[j] e se vetor[j] < vetor[i]).

Sugiro você usar a construção for mesmo para fazer a ordenação
(supondo que você não quer usar table.sort para isso) e outra dica
seria escrever:

vetor[i], vetor[j] = vetor[j], vetor[i]

Isso vai trocar os dois valores sem precisar de uma variável auxiliar ;-)

Abraços,
Tomás

Em sex., 29 de mai. de 2020 às 16:43, Luiz Henrique de Figueiredo
<[hidden email]> escreveu:
>
> On Fri, May 29, 2020 at 4:33 PM José Augusto
> <[hidden email]> wrote:
> >
> > vetor = {12,3,14,16,7,4,2,18}
> > i = 0
> ...
> > if(vetor[i] > vetor[j]) then
>
> Os arrays em Lua começam de 1, não de 0.
>
> --
> 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].
> Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/lua-br/CAD55k3qqR2rUN%3DFqnmp9jmTpaTCbb_FQeUD_0s3MsM4Gfp_uvw%40mail.gmail.com.

--
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].
Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/lua-br/CAJarVn0aOzCma7SQGyukpKn_%3DD8W101d1qdOdigpgJtC6FEwdQ%40mail.gmail.com.

--
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].
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/lua-br/CAFnd1vno_0t3fmAsTTycq1yWq8MbXVgQBrxcEC9nXJkXUufmMQ%40mail.gmail.com.