Linux slogan
Visite também: BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Listeiro 037 em (última atualização em 11/06/2012)   [ 2736 hits ]

Login: Listeiro 037, 245186 pontos

Download:


Descrição

Das vezes que costumei usar sempre deu certo. :-)

Apenas um truque para não ter que escrever três, quatro laços "for" aninhados.

Pode ser modificado para uso com array criando-se instantaneamente múltiplas variáveis no loop.

Aqui no caso trata-se apenas de um contador com alguma coisa que chama a atenção para o hexadecimal.

Possivelmente improvisa-se algo com sequências em binário.


[ Download: loop001.c ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#include <stdio.h>

main (){

   unsigned int i, j, k, l;

   for (i=0,j=0,k=0,l=0;i<10;l++,k+=(l/16),j+=(k/16),i+=(j/16),l%=16,k%=16,j%=16)
      printf("%d %d %d %d\n", i, j, k, l);

}



Scripts recomendados
   Script Linux recomendado Algoritmo para detecção do sistema operacional em C
   Script Linux recomendado Pilha Encadeada
   Script Linux recomendado QuickSort - vetor de inteiro
   Script Linux recomendado Método eficiente de armazenamento utilizando containers (Vector e Map)
   Script Linux recomendado Photon Mapper

Comentários
[1] Comentário enviado por Denommus em 11/06/2012 - 11:55h:

Eu acho que um loop aninhado é tão rápido quanto e muito mais legível. Gostei da intenção (inovação é sempre bom), mas não é muito usável num software comercial.


[2] Comentário enviado por Listeiro 037 em 11/06/2012 - 12:55h:

Prá mim está bem.
O mérito é que nunca vi até agora isso em livro algum.
Nem em sites, nem alguém que falasse sobre.

Eu descobri isso por puro acidente durante uma aula há uns anos.
Eu simplestente digitei o código e apertei F9 (sim!) e compilou.
Portanto trata-se de mais uma coisa puramente escolar.
Nem acadêmico seria dito.

Por falar em software comercial, será que isso aí funciona em Java ou em C#?
Em algum dos Trẽs Ps? Ou em Javascript?
Provavelmente em C++. D ninguém conhece, então não é tão comercial assim.
Aquelas tranqueiras visuais proprietárias nem pensar...

Esse exemplo é estranho mesmo porque são quatro variáveis.
Quatro loops aninhados? Se "if/else if/else" já é horroroso, imagine quatro loops aninhados?
Se tiver mais de três aninhamentos, há algo errado, típico de se usar uma subrotina.

Não precisa ser 4x1. Pode ser 2x2 também.
Eu nem diria tanto inovação, que se abusar isso deve ser do tempo do K&R.
Devem existir outros exemplos mais obscuros, que passam por completo em desapercebido porque... bem, não importa.
A intenção mesmo foi subverter o senso comum dos "únicos três campos do 'for': arroz, feijão e zoião".
Tem outras coisas, como for(;;) = while(1)

Obs [1]: Nada que fiz aqui até agora tem valor comercial.
Obs [2]: Sem menosprezar a qualquer um que seja. Simplesmente não é.
Obs [3]: Ao menos em Perl loops "while" são muito mais rápidos que for ou foreach.
Obs [4]: Em x86 bytecode não existe for/while. Depende de como o compilador se vira prá gerar o binário.

Fiz mais um experimento:

[code]#include

main (){

unsigned int i, j, k, l;

for (i=0; i<16; i++)
for (j=0; j<16; j++)
for (k=0; k<16; k++)
for (l=0; l<16; l++)
printf("%d %d %d %d\n", i, j, k, l);

}[/code]

Compilei o código acima, que possui 196 caracteres contra o primeiro, de 183 caracteres.

Resultado:

[1]: Ambos geraram binários de mesmo tamanho em bytes.
[2]: Mesmo tamanho em bytes após serem estripados ("strip -s").

Foi apenas isto, mas existe uma probabilidade grande de o binário ser o mesmo. A velocidade idem.




Pessoalmente nenhum dos dois exemplos possui coisa alguma de elegante.


[3] Comentário enviado por Listeiro 037 em 13/04/2013 - 05:00h:


[1] Comentário enviado por Denommus em 11/06/2012 - 11:55h:

Eu acho que um loop aninhado é tão rápido quanto e muito mais legível. Gostei da intenção (inovação é sempre bom), mas não é muito usável num software comercial.


Pensando ainda no que me incomodou. Alem do 162.

Sinceramente tirando a finalidade, não sei o que seria software comercial. Existe um concurso para códigos incompreensíveis. Não é meu intuito, mas por algum motivo existe.

Se existir vinte modos de se fazer uma mesma coisa, poderei simplesmente dominar mais que os vinte. O menor não é o mais curto, talvez fosse o mais rápido. Agora percebo que pode ser o mais legível.

Mesmo que seja cópia de cópias será a primeira escolha. Não há o que criar. Apenas repassar.



Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.