Criando ciclos - A maneira abrangente

Em um post anterior eu comentei sobre a importância do operador módulo e como ele pode, além de simplesmente dar o resto da divisão, também ajudar a criar ciclos numéricos, muito úteis quando precisamos seguir uma sequência numérica em que, ao chegar no final, a contagem reinicia. x % 5: sobe até o limite e reinicia O limite do módulo A abordagem é totalmente funcional, mas tem uma limitação na forma do ciclo: o módulo sobe em linha reta e, ao chegar no limite, cai bruscamente de volta ao zero, formando uma onda “dente de serra”. Se você precisar de algo que suba e desça suavemente, passando por valores intermediários nos dois sentidos, o módulo não resolve, pois ele nunca “volta” de forma gradual, só reinicia. ...

23 de setembro de 2026 · 8 min de leitura · Lucas Polo

Usando o operador de módulo para criar ciclos

Em alguns momento é possível que precisamos criar ciclos numéricos, por exemplo, vamos supor que desejamos contar de 0 até 5 e após isso retornar ao zero. Uma solução simples seria algo como: #include <stdio.h> int main(int argc, char* argv[]) { int i = 0; for(;;) { printf("%d\n", i++); if (i == 5) { i = 0; } } return 0; } Este tipo de código funciona muito bem e é simples de entender, porém podemos usar a nosso favor a matemática e utilizando o operador módulo, que traz o resto da divisão, conseguimos o mesmo efeito: ...

6 de dezembro de 2021 · 1 min de leitura · Lucas Polo

O poder do coletivo e o caminho das formigas

Alguns anos atrás esbarrei em um vídeo incrível do Nerdologia sobre O poder do Coletivo, que falava como a inteligência das populações poderiam chegar em resultados excelentes para diversas questões (salvo algumas exceções, como polarizações). Todo esse conceito anda lado a lado com o conceito de Big Data e inteligência artifical, onde analisando dados individuais podemos chegar a resultados ótimos pois o erro da multidão tende a se aproximar de zero: ...

21 de junho de 2021 · 2 min de leitura · Lucas Polo

Drops: Quicksort em Python

from typing import List def quicksort(l: List): """ Recebe uma lista de elementos e devolve eles ordenados """ # Caso base! Nunca se esqueça disso em funções recursivas@ if not len(l): return l # Escolhemos um pivot, removemos ele da lista! # Reduzir a entrada também é essêncial! pivot = l.pop(0) # Separamos os elementos menores lower = [e for e in l if e <= pivot] # Separamos os maiores uppper = [e for e in l if e > pivot] # Os menores ficam na esquerda do pivo # Os maiores ficam na direita # Ai acontece a magia da recursão... # Ordedamos os menores e os maiores com a mesma função. return quicksort(lower) + [pivot] + quicksort(uppper) def main(): elems = [3,2,3,6,7,4,2,-1] print(quicksort(elems)) if __name__ == '__main__': main()

3 de janeiro de 2020 · 1 min de leitura · Lucas Polo

Iterando sobre uma matriz com um único loop

Quando estamos nas aulas iniciais de programação, aprendemos a iterar sobre vetores e matrizes, sendo que no segundo caso é necessário criar um loop (for, while e etc) para cada dimensão de nossa matriz. Desta forma criamos muitas vezes um código com vários níveis de aninhamento no nosso código. Uma outra forma de lidar com isto é criando uma forma de a partir de um único índice extrair o valores dos sub-índices, uma tarefa simples se utilizarmos módulo. ...

16 de julho de 2016 · 2 min de leitura · Lucas Polo