Lógica de programação com Labirintos

 

💻🧙💻

Aprendendo lógica de programação com labirintos 2D

Recentemente um amigo me pediu ajuda com suas aulas de lógica na faculdade (acredito que ele esteja fazendo tecnólogo em Analise de Sistemas ou algo nesta linha).

Esse meu amigo chama-se Vinicius, mas todos (do nosso círculo de amizades em comum) o conhecem como Vinão (se você imaginar o Vinão como uma versão nerd e introvertida do Detona Ralph,vai ser possível fazer uma boa imagem de como ele é).

Enfim, quando o Vinão me pediu ajuda, eu fiquei preocupado, porque eu nunca dei aulas de lógica ou de programação. Por outro lado, há quase vinte anos eu cheguei a dar aulas de informática básica (Windows e pacote Office) por um tempo e por isso tenho lá os meus truques para ensinar conceitos relacionados a esse vasto campo chamado T.I. (Tecnologia da Informação). Nesta época eu descobri que gosta de ensinar mais do que eu imaginava. Então é claro que eu aceitei ajudar o Vinão.

Mas, antes de começar a ajudar o meu amigo, fui investigar por onde seria melhor começar a ensinar lógica de programação e encontrei um artigo bem completo sobre isso (na minha opinião esse artigo resume os pontos principais sobre o tema). Sendo assim, não vou repetir aqui o que é dito lá (deixo o link para quem estiver interessado).

Ao invés de repetir o conteúdo que está muito bem explicado lá (e que recomendo muito), vou listar os tópicos abordados por este artigo, os quais definem como se pode dividir essa matéria chamada "Lógica de Programação". Vou resumir também o que se vê em cada tópico e por último, explicar qual estratégia vou usar para ajudar o Vinão a se exercitar na criação de algoritmos de uma forma simples.

Os pontos principais para estudar lógica de programação são:

Algoritmos: uma forma de descrever uma atividade qualquer dividindo-a em um conjunto de instruções;

Conceitos e regras básicas de programação: no caso, toda linguagem de programação possui regras e conceitos similares e, entendendo esses conceitos, é possível aprender mais facilmente qualquer linguagem de programação;

Matemática: a matemática é a base para o entendimento da lógica;

Linguagem de Programação Inicial: por fim, após compreender e treinar as áreas anteriores resolvendo exercícios que ensinam seus conceitos, é possível começar a estudar alguma linguagem de programação inicial;


Mas hoje eu não vou falar sobre todos esses itens. Irei me focar apenas no primeiro: Algoritmos.

Então, me sentindo um professor de Hogwarts ensinando uma das bases fundamentais do lado negro da força, começo a explicar para meus alunos (estes aspirantes à bruxos dos bits) que a realidade é uma ilusão, o universo é um holograma, compre ouro e fim da aula... Não! Talvez eu tenha me empolgado um pouco...

Vamos lá... Que tal assim? Toda tecnologia suficientemente avançada é indistinguível da mágica... Não, assim também não...

Bom, acho melhor eu focar no conceito em si. Algoritmos; o elemento fundamental da alquimia cibernética.

Ser capaz de criar algoritmos eficientes é importantíssimo para se tornar um bom programador (e por conseguinte, ser capaz de criar coisas legais como a SkyNet, a Matrix, programar um robo de companhia chamado Sony ou talvez Hall 9000).

Mas antes de entender o porque disso (da importância dos algoritmos), é preciso entender primeiro o que é um algoritmo e depois o que é um algoritmo eficiente.

Em primeiro lugar, no estudo da matemática chama-se algoritmo uma "Sequência finita de instruções não ambíguas utilizadas para resolver um problema ou fazer um cálculo".

Em informática (ou seja, Tecnologia da Informação ou T.I.), algoritmo é o nome que se dá para um "Conjunto de regras e operações bem definidas e não ambíguas, que, aplicadas a um conjunto de dados e num número finito de etapas, conduzem à solução de um problema".

Mas em T.I. costumamos usar como analogia para exemplificar o que é um algoritmo o bom e velho exemplo da "receita de bolo". Uma receita de bolo é um algoritmo, pois descreve um conjunto de instruções sobre como se deve fazer um bolo.

Sendo assim, podemos imaginar o cozinheiro como um robô que deve executar as operações necessárias para preparar um bolo. A receita é o algoritmo que o robô consulta para saber o que deve fazer, quando e em que ordem deve fazer. Os ingredientes para preparar o bolo são os recursos disponíveis.

Neste sentido, uma receita de bolo eficiente é aquela que permite ao cozinheiro fazer um bolo no menor tempo possível e disperdiçando a menor quantidade possível de insumos (como ingredientes, água, energia, etc) e tempo.

Para exemplificar como uma receita pode ser mais eficiente que outra, vou listar duas sequencias de instruções abaixo (uma lista chamaremos de receita A, e a outra de receita B), sendo uma mais eficiente que a outra. Além disso, sabemos que na vida real cada cozinheiro leva um tempo diferente para realizar cada uma das instruções de uma receita. Porém, para o nosso exemplo vou descrever o tempo que o nosso hipotético cozinheiro leva para realizar cada instrução (podemos imaginar o Bender, de Futurama, cozinhando algo para sua tribulação), de modo que no final saibamos o tempo total que levará para as instruções serem concluídas. Mas um alerta, os tempos devem ser somados de forma arbitrária (pois algumas tarefas podem ser realizadas paralelamente a outras).

Também é importante dizer que algumas atividades podem ser feitas paralelamente a outras, enquanto que outras só podem ser realizadas após o término de outras que dependam das atividades anteriores (parece complexo, mas para quem tem alguma familiaridade com a cozinha, a coisa é mais simples do que esse texto faz parecer).


Receita A

(tempo para concluir: 1 minuto)-> separe uma caneca com 250 mls de água;

(tempo para concluir: 1 minuto)-> Ensaboe o garfo com detergente;

(tempo para concluir: 1 minuto)-> Ensaboe o prato com detergente;

(tempo para concluir: 1 minuto)-> Enchague o prato e o garfo com a caneca com 250 ml de água ao mesmo tempo;

( tempo para concluir: 1 minuto )-> Encha uma panela com 1,5 litros de água;

( tempo para concluir: 20 segundos )-> Ligue o fogo;

( tempo para concluir: 10 minutos )-> Coloque a panela no fogo e deixe aquecendo por 10 minutos (enquanto isso, vá adiantando as próximas instruções);

( tempo para concluir: 2 minutos )-> Quebre três ovos em um prato;

( tempo para concluir: 1 minuto )-> Misture 4 colheres de farinha de trigo no prato com os ovos;

( tempo para concluir: 6 minuto )-> Bata os ovos com a farinha de trigo por 6 minutos;

( tempo para concluir: 10 segundos )-> Após 10 minutos, coloque a mistura de farinha e ovos na panela com água quente;

ETC.

TEMPO TOTAL: 15 minutos e 30 segundos.


Receita B

(tempo para concluir: 1 minuto)-> separe uma caneca com 250 mls de água;

(tempo para concluir: 1 minuto)-> Ensaboe o garfo com detergente;

(tempo para concluir: 1 minuto)-> Enchague o garfo com a caneca com 250 ml de água;

(tempo para concluir: 1 minuto)-> separe uma caneca com 250 mls de água;

(tempo para concluir: 1 minuto)-> Ensaboe o prato com detergente;

(tempo para concluir: 1 minuto)-> Enchague o prato com a caneca com 250 ml de água;

( tempo para concluir: 2 minutos )-> Quebre três ovos em um prato;

( tempo para concluir: 1 minuto )-> Misture 4 colheres de farinha de trigo no prato com os ovos;

( tempo para concluir: 6 minuto )-> Bata os ovos com a farinha de trigo por 6 minutos;

( tempo para concluir: 1 minuto )-> Encha uma panela com 1,5 litros de água;

( tempo para concluir: 20 segundos )-> Ligue o fogo;

( tempo para concluir: 10 minutos )-> Coloque a panela no fogo e deixe aquecendo por 10 minutos ;

( tempo para concluir: 10 segundos )-> Após 10 minutos, coloque a mistura de farinha e ovos na panela com água quente;

ETC.

TEMPO TOTAL: 26 minutos e 30 segundos


No caso, esses trechos de receita são inventados para este exemplo (e não possuem nenhuma serventia culinária). Mas ambos demonstram a diferença de eficiencia em instruções que se destinam a obter um mesmo resultado.

Na receita A, as instruções estão em uma ordem que permite que parte das instruções sejam realizadas enquanto a água na panela está esquentando no fogo. Isso faz com que 10 minutos sejam economizados para a conclusão dessas instruções.

Na receita B as instruções estão em uma ordem diferente, fazendo com que apenas após preparar a mistura de ovos batidos com farinho de trigo a água seja aquecida por 10 minutos. De modo que é preciso aguardar os 10 minutos para colocar a mistura de farinha com ovos na água quente.

Como é possível constatar, basta uma pequena mudança na ordem de um algoritmo para aumentar muito o tempo que o mesmo leva para ser concluído.

Tempo é um recurso valioso e o principal alvo de quem tenta escrever um algoritmo eficiente.

Mas não é o único. As primeiras instruções da Receita A permitem economizar 2 minutos e 250 ml de água se compararmos com a Receita B, pois a ordem que o enxague é feito, permite que a mesma água seja usada para tirar o sabão do garfo e do prato (estamos supondo que 250 ml de água são suficientes para enchaguar ambos os utensílios do exemplo).

Ainda assim, mesmo a Receita A poderia ser melhorada, iniciando as instruções para lavagem e enxague dos utensílios após a panela ser levada ao fogo. Mas como esse é apenas um exemplo, achei melhor deixar como está para poder exemplificar não apenas o que é um algoritmo, mas como podemos analisá-lo em busca de eficiência para economizar recursos.

E já que estamos usando como exemplo de algoritmo uma receita de bolo hipotética (que só existe para esse exemplo), podemos dizer também que um livro de culinária com receitas é um lirvo de algoritmos, visto que ele reune vários conjuntos de instruções que se destinam a cumprir objetivos determinados (que seria a realização de vários pratos culinários).

Em resumo, podemos dizer que tudo o que fazemos pode ser descrito como um algoritmo, uma vez que tudo o que fazemos pode ser descrito na forma de uma lista de instruções.

Como o mundo 3D é mais complexo e perigoso (com fogões, utensílios de cozinha pontiagudos e afiados e coisas imprevistas), resolvi levar o meu amigo para dimensão 2D, onde a beleza da simplicidade linear permite manter as variáveis do nosso estudo dentro de uma margem de conforto e segurança.

Com isso pensei em criar labirintos impressos e desafiar meu amigo a sair de um ponto inicial desses labirintos e ir para um ponto final específico usando algoritmos. Chamei isso de Algoritmos Vs Labirintos.

O exercício consiste em apresentar um labirinto 2D na forma de um tabuleiro impresso em uma folha A4 com um ponto inicial e um ponto final pré-definidos (ambos representados respectivamente por um △ e um ※), um conjunto de instruções limitados (como virar à direita, avançar N casas) e uma lista numerada em branco em que as instruções devem ser escritas com caneta (de modo que não possam ser apagadas).

O desafio parece simples: afinal, basta ir preenchendo a lista com comandos até chegar ao ponto final. Porém, o difícil mesmo não é preencher a lista, e sim preencher a lista de modo a construir um algoritmo o mais eficiente possível. Ou seja, quanto menor a quantidade de linhas necessárias para chegar ao ponto final no labirinto, mais eficiente é o conjunto de instruções.

Como a lista deve ser preenchida a caneta, caso seja usado um comando que leve para o lado errado do labirinto, não será possível apagar e começar de novo. Deve-se completar a tarefa e depois recomeçar do zero (em uma folha nova), com a intenção de fazer um trajeto mais curto do que o anterior.

Aqui está um exemplo de como ficou a folha do exercício (e mais duas variações):

versão 1


versão 2

versão 3

A versão 3 é praticamente um mini-game baseado em lógica. Ainda vou melhorar a ideia. Mas por hora esse já é um exercício bem legal para lógica (e abstração: acho que abstração é fundamental para o desenvolvimento da lógica).

Repito que esta pode parecer uma atividade simples e de fato ela é simples. Mas é nesta simplicidade que está o seu poder de ensinar a prática de elaborar algoritmos eficientes.

Claro que eu irei melhorar este exercício, adicionando mais complexidade, funções utilitárias, comandos e recursos que devem ser usados (e economizados) para que o desafio seja completado.

Talvez o meu eterno apreço por jogos é que tenha me induzido a uma solução desse tipo para ensinar essa matéria.



Comentários

Minha foto
Éder S.P.V. Gonçalves
Osasco, SP, Brazil
É um ficcionista trevoso; escreve poema, romance e também conto. Mescla tom sério com humor ao falar sobre fantasia, mistério e terror. Mantém um blog onde posta textos por vezes sombrios e temperados com ácido humor.

Postagens mais visitadas deste blog

Yokais: as criaturas sobrenaturais do folclore japonês e sua história

O Tigre, de William Blake

Filtrando pelo campo TSK_STATUS

Carmilla: a vampira de Karnstein

Nomes de gatos pretos: inspirações da literatura fantástica

Drácula: é capaz de controlar os lobos?

Ticê: a feiticeira que se tornou a deusa do submundo

A lenda do Mapinguari: tudo o que você precisa saber sobre o monstro da Amazônia

Hajime no Ippo e o Espírito de Desafiante

Katana Zero

📮 Formulário de contato

Nome

E-mail *

Mensagem *

👁‍🗨 MARCADORES

Curiosidades Leituras crônicas de escritor crônicas de um autor independente O Conde de Monte Cristo Alexandre Dumas Livros filosofia espada e feitiçaria Entretenimento Fantasia Sombria Poemas folclore Memorandos a rua dos anhangás histórias de mistério histórias de terror vampiros Contos literatura gótica Caravana Sombria diário halloween dicas Os Demônios de Ergatan histórias de fantasma lobisomens Bram Stoker Oitocentos Aromas de Devaneio PODCASTS escrita games histórias de aventura sagas Drácula O Governador das Masmorras O Leão de Aeris Psicotrápolas lendas lendas urbanas mitologia Atividade Física Conan o Bárbaro Histórias Sobrenaturais de Rudyard Kipling Rudyard Kipling Via Sombria conan exiles critica social kettlebell lua cheia micro contos natal paganismo resenha sociedade séries Exercícios de Criatividade O Ventre de Pedra arqueologia feriado girevoy sport gyria inteligência artificial krampus krampusnacht masmorras papai noel séries de tv xbox Robert Ervin Howard cultura pagã estrela negra folclore guarani ia liberdade melkor morte quadrinhos Capas Desenvolvimento de Jogos Ilustrações Os Segredos dos Suna Mandís Passeios Space Punkers era hiboriana game designer harpia histórias de horror histórias góticas hq humanidade indicação de séries mangá netflix personagens poema gótico política prisão As Aventuras do Caça-Feitiço Conto Diana Haruki Murakami História J.R.R.Tolkien Joseph Delaney O DIÁRIO DE IZZI O Homem Sem Memória Romancista como vocação Sandman V de Vingança Vampiros na literatura Wana anhangás animes aranhas arquivo umbra arte bruxas chatgpt criação de histórias cultura gótica cultura japonesa cães estações do ano facismo fanfic fantasia fantasmas festividades gatos pretos godot jogos jurupari mitologia brasileira outono paródia protheus sexta-feira 13 superstições totvs vida vingança A Fênix na Espada Café Holístico Carmilla: a vampira de Karnstein Cristianismo Joseph Conrad Joseph Sheridan Le Fanu O Chamado Selvagem O Coração das Trevas O Mentalista Terry Pratchett age of war anime animes de esporte anotações bokken bruxaria cadernos capa castlevania ceticismo conto de terror cotia crenças criatividade criaturas fantásticas culto aos mortos demônios dia de todos os santos diabo drama educação engines espada espada de madeira espiritualidade evernote família farmer walk ficção ciêntifica ficção fantástica folclore indígena folclore japonês fotografias funcom hajime no ippo horror cósmico inverno leitores listas literatura lobos lua azul magia matrix megafauna mitologia indígena monstros natureza notion objetos amaldiçoados opinião palácio da memória podcast ratos reforma sea of thieves seres fantásticos sinopse série de terror templo zu lai tigre tutoriais utilidades viagem no tempo vila do mirante vlad tepes wicca xamanismo youkais Áudio-Drama A Arte da Guerra A Balada dos Dogmas Ancestrais A Cidade dos Sete Planetas A Cidadela Escarlate A Enciclopédia de Bars A Ilha do Tesouro A Sede do Viajante A Voz no Broche Age Of Sorcery Akira Toryama Anne Rice Arthur C. Clarke As Mil e Uma Noites As Sombras do Mal Aventura Bad and Crazy Barad-dûr Berkely BlackSails Blog Breve encontro com Dracooh de Beltraam Bushido Caninos Brancos Canto Mordaz Carta Para um Sábio Engenheiro Cartas Chuck Hogan Clássicos Japoneses Sobrenaturais Daniel Handler Direitos Iguais Rituais Iguais Discworld Divulgação Doctor Who Dragon Ball Eiji Yoshikawa Elizabeth Kostova Elric de Melniboné Entrevista com o Vampiro Fantasia Épica Full Metal Alchemist Gaston Leroux Genghis Khan Grande A'Tuin Guillermo Del Toro Hoje é Sexta-Feira 13 e a Lua está Cheia Jack London Johann Wolfgang von Goethe Jornada de Autodescoberta Joseph Smith Katana Zero Lemony Snicket Lestat de Lioncourt Lord Byron Lord Ruthven Louis de Pointe du Lac Mapinguari Michael Moorcock Michelly Mordor Musashi Na Casa de Suddhoo Na toca dos ratos letrados Nergal Novela O Escrínio de Pooree O Fabuloso Maurício e seus Roedores Letrados O Feiticeiro de Terramar O Historiador O Hobbit O Jirinquixá Fantasma O Lobo O Lobo das Planícies O Mar O Mundo de Sofia O Ogro Montês O Primeiro Rato Letrado O Rei de Amarelo O Senhor dos Anéis O Sexo Invisível O Sonho de Duncan Parrennes O Tigre O Tigre e o Pescador Obras das minhas filhas October Faction Olga Soffer Os Incautos Os Livros da Selva Os Ratos Letrados Outono o Gênioso Oz Oz City Pedra do Teletransporte Pituxa Polo Noel Atan Red John Rei Ladrão & Lâmina Randômica Richard Gordon Smith Robert E. Howard Robert Louis Stevenson Robert William Chambers Rotbranch Safira Samhain Sarcosuchusimperator Simbad Sobre a Escrita Sociedade Blake Stephen King Stranger From Hell TI Tevildo Thomas Alva Edison Tik Tak Tomas Ward Ursula K. Le Guin Vida e Morte Vó Mais Velha Wassily Wassilyevich Kandinsky William Blake Wyna daqui a três estrelas Yoshihiro Togashi Yu Yu Hakusho absinto aho aho akemi aleijadinho algoritmos alienígenas aluguel amazônia amor anagramas andarilhos animais de estimação animação ano novo aranha marrom aranha suprema arquétipo artesanato astronomia atalho atitudes autopublicação aves míticas azar balabolka baladas banho frio banho gelado bicicleta bienal do livro biografia blogger bokuto boxe bugs caderno de lugar comum calçados militares caminhos escuros carlos ruas carnaval carta do chefe Seatle casa nova casas mal assombradas castelos castelos medievais categorias cavaleiro da lua celebrações pagãs chalupa chonchu chrome cidadania cientista civilização ciência condessa G condomínio configuração consciência conto epistolar coragem cordilheira dos andes crianças criaturas lupinas crimes cultura brasileira cultura otaku cárcere dark rider dark side democracia deusa da lua e da caça dia das crianças dia de finados dia do saci dia dos mortos distopias diy doramas eclipse eclipse do sol eclipse solar ecologia el niño ema encantos esboços escultura escuridão espírito de luta espíritos exoplanetas falta de energia elétrica faça você mesmo feiticeiras feitiçaria feitiços felicidade felipe ferri fome fonte tipográfica fonógrafo fortuna fundação japão game pass gratidão greve gênero harpias hitória hobby homenagem homens humor husky hábitos saudáveis ia para geração de imagens idealismo identidade igualdade de gênero imaginação imaterialismo inquisição jaci jaterê japão japão feudal jogos 2d jogos de plataforma jornada kami katana kendo kraken kraken tinto labirintos labirintos 2D lealdade leitor cabuloso lenda guarani lendas antigas leste leviathan licantropia linguagem de programação literatura aventuresca literatura fantástica literatura inglesa live action livros infanto juvenis loop lua de morango lugares mal assombrados lógica de programação malaquias mandalas mangaká matemática mawé mazolata mboi-tui meio ambiente melancolia memorização mercado de trabalho meu rh microsoft midjourney mitologia grega mitologia japonesa mitologia árabe mitra miyamoto musashi mizu moccoletto mochila modelo de linguagem modo escuro molossus monograma montanha morgoth morpheus moto motoqueiro mudança mudanças climáticas mulheres mundos método wim hof músicas neil gaiman noite eterna nomes de gatos pretos nona arte nostalgia o que é vida objetos mágicos ogros oração os sete monstros osamu tezuka patriarcado pena pensamentos perpétuos pesadelos pescador piedade piratas pluto pod cast poderes povo nômade povos aborígenes predadores prefácio primavera primeiras impressões problemas profecia pterossauro publicação independente qualidade de vida quarta parede reclamação reflorestamento religião religião de zath rio Pinheiros rio Tietê ritual robôs roc roca roda do ano roma antiga romantismo cósmico romênia roque sacerdotisas de zath samurai de olhos azuis sarcosuchus Imperator saturnalia saturnália saúde segredos serpente-papagaio sexo frágil sintetizador de voz smilodon sobrenatural sobrevivencialismo solstício solstício de inverno solstício de verão sonhar sophia perennis sorte suna mandís sustentabilidade série tau e kerana teclado telhado telhas de pvc templo de hachiman tempo teoria das cores terror texto em fala ticê tigre dente de sabre totvs carol transilvânia travessão treinameno treinamento treino trevas trickster tumba de gallaman tv título um sábado qualquer universidades van helsing varacolaci vendaval verão vida em condomínio vigília da nevasca windows wombo art xintoísmo ymir yokai yokais youkai yule zath zoonoses águia ódio
Mostrar mais