Índice
Introdução
Este conteúdo, “Em 12 passos monte um algoritmo na prática”, é um material de apoio para uma aula prática de algoritmo e linguagem Python, destinada a iniciantes na área de programação. Foi concebido pensando em estudantes do primeiro ano do ensino médio, pois estou trabalhando com as turmas 101 e 102 do curso técnico “Informática para Internet”. Sendo assim, em alguns momentos, você vai notar que o texto dialoga com eles.
Este material começa com a definição do problema de negócio, a construção passo a passo de um diagrama de blocos com explicações diretas e simples da montagem do algoritmo e, por fim, o código em Python que foi escrito e explicado na página “Codificando em Python os 12 passos do algoritmo da fila do lanche“.
O Problema de Negócio
O passo 0, o início fundamental de qualquer algoritmo!
É muito comum trabalharmos com um “Problema de Negócio”. Ele deve ser claro e o mais detalhado possível; tudo deve estar bem especificado, abarcando o problema mais geral, bem como as etapas com suas entregas secundárias, ou problemas intermediários.
Veja que podemos utilizar a expressão “Problema de Negócio” para definir qualquer situação em que originará um algoritmo, mesmo que não seja um “Negócio” em si, daqueles oriundos do mundo dos negócios. É o caso do exemplo dado nessa aula, em que o “Problema de Negócio” é o controle dos alunos da educação básica, em uma escola estadual de Santa Catarina, em fila para pegarem seus lanches na hora do recreio.
Visão Geral (o problema de forma genérica)
Na hora do recreio, os estudantes formam uma fila indiana, portando suas carteirinhas e um por um vai pegar o lanche.
Sendo específico
Neste ponto, vale recordar da aula de Pensamento Computacional (PC), lembra? O PC é sustentado pelos pilares: abstração, decomposição, reconhecimento de padrões e algoritmo. Aqui [1] há uma boa explicação, mas prometo que formatarei o material de apoio da aula sobre o pensamento computacional e colocarei neste website.
Ao bater o sinal para o recreio, os alunos saem das suas classes e vão para o local do lanche. Lá, eles formam uma fila indiana, respeitando a ordem de chegada, e devem estar com suas carteirinhas. Antes de pegar o lanche, o aluno precisa entregar a carteirinha para o funcionário da escola que, por sua vez, faz a leitura da carteirinha através de um sistema em um tablet, devolve a carteirinha para o aluno que, em seguida, sai da fila para pegar o lanche.
Pode ocorrer dos alunos quererem repetir, mas só poderão caso todos na fila já tenham pego pela primeira vez. Para repetir, é preciso que ainda haja lanche e, além disso, que ainda esteja dentro do tempo do recreio. Essas condições já podem ser pensadas desde o primeiro atendimento, ou nas partes iniciais do algoritmo.
Outras Informações Relevantes
- Não se sabe com exatidão quantos estudantes vão pegar lanche.
- É obrigatório passar a carteirinha antes de pegar o lanche.
- Pode repetir caso todos já tiverem pego o lanche pela primeira vez, porém, é preciso ter lanche e tempo de recreio.
- Pode acontecer de algum aluno chegar atrasado para o lanche e, portanto, não ter lanche disponível ou nem tempo hábil de comer antes que bata o sinal.
Para ilustrar bem a importância de ser específico, no intuito de se obter um algoritmo que entregue resultados satisfatórios, veja uma cena do filme “Fenômeno – Seja Específico Bob” [2].
Diagrama de Blocos
Por que passar trabalho e montar um diagrama de blocos?
Montar um diagrama de blocos auxilia a enxergar etapas de instruções simples, processos de decisão e repetição. Na realidade, é uma ferramenta que vai ajudar muito a economizar tempo e trabalho.
Não se assuste, não fique ansioso e nem pense que é difícil ou complexo! Apenas inicie o diagrama com a primeira informação que você identificou no problema de negócio. Na grande maioria das vezes, você inicia com uma instrução simples. Comece com lógica e objetividade e não se preocupe se vai errar, pois você vai “melhorando” o algoritmo conforme vai construindo e entendendo mais. Nesse processo, tudo vai ficando mais claro e óbvio.
O que você vê de principal para começar o algoritmo?
Vamos à prática – “Algoritmando”

Passo 1 – Veja o exemplo abaixo:

Passo 2 – Pense, você é o primeiro na fila e há um funcionário ali, com um tablet, que lhe atende pegando sua carteirinha, fazendo a leitura, devolvendo-lhe a carteirinha e você parte para pegar o lanche. Assim será até que algo diferente ocorra… Por exemplo, alguém pode estar sem a carteirinha e, portanto, haverá uma instrução de verificação. Veja baixo:

Passo 3 – Seguindo o fluxo, caso o aluno tenha a carteirinha, é preciso pensar que o ele já pode estar repetindo a merenda e, além disso, que possa não haver mais lanche ou que o recreio já esteja para acabar ou acabado. Vamos lá:

Você pode estar dizendo aí, na sua cabeça, “Mas acabou de iniciar o recreio e a pessoa que atende, acabou de começar a atender e já sabe que ninguém está repetindo e que ainda há lanche! Então, para que essas perguntas?”
Livro relevante!
Eu lhe digo, você pode estar certo. Contudo, já nos primeiros 5 minutos de recreio a pessoa que atende pode ser substituída, ou o lanche pode ser tão bom que já tenha gente repetindo (ou guardou o primeiro e voltou correndo para pegar mais), e o lanche pode acabar por ter sido insuficiente, etc. Logo, tratar dessas condições no começo do algoritmo pode ser interessante. Todavia, sinta-se à vontade e faça do seu modo. Sugira alterações que possam deixar tudo mais eficiente.
Continuando, até aqui, viu que está sendo fácil?
Passo 4 – Seguindo o raciocínio, caso tenha sido respondido sim para todas as instruções de verificação, o que você acha que será a próxima instrução? Isso mesmo! Fazer a leitura da carteirinha. Depois, devolver a carteirinha ao estudante, liberá-lo para pegar o lanche e, finalmente, o aluno deverá se alimentar (se gostar, claro :-P). Vejamos:

Passo 5 – Nesse momento, podemos pensar que, após comer o lanche, a pessoa poderá querer repetir. Então, adicionamos mais uma instrução de condição, com a pergunta “Deseja repetir?”. Bom, se o aluno passou por todas as etapas, conforme vimos até agora, e não quer repetir, logo, resta aguardar o término do recreio e voltar para a sala de aula. Assim, incrementando o diagrama, poderemos ter o seguinte:

Note algo bem relevante até aqui! Instrução simples é instrução simples! Não se deixe levar pela pressa ou pela “economia” de tempo e trabalho, transformando uma instrução simples em algo composto, com duas ou mais instruções. Certamente, em algum ponto isso vai gerar confusão ou problema. Por exemplo:

Quais consequências podem surgir dessa “instrução composta”? Assim como está, não parece que são duas tarefas em paralelo? Consegue se ver aguardando o recreio terminar e, ao mesmo tempo, indo para a sala de aula? O significado do código seria curioso:

Passo 6 – A partir daqui, deveremos voltar ao início do diagrama para tratar da segunda opção de cada uma das instruções de verificação (losangos).
Relendo do início, teremos as instruções: “Alunos em fila indiana” → “Atender o primeiro da fila” → “Possui carteirinha?”. Essa última é a instrução de verificação que inicialmente foi tratada com a resposta “sim”. Agora, pensamos nela com a resposta “não”, fazendo-nos gerar outras instruções: “Providenciar a carteirinha” → “Voltar para a fila”, como abaixo ilustrado:

Com isso, “matamos” as duas etapas da primeira instrução de verificação. O diagrama com essa parte, e tudo o que já vimos antes, fica assim:

Passo 7 – Nossa próxima instrução de verificação é: “É a primeira vez hoje?”→ “não”, então, devemos cuidar para o caso de ainda ter gente na fila que ainda não pegou o lanche pela primeira vez. Desse modo, teremos uma outra instrução de verificação: “Há alguém na fila que ainda não pegou lanche?”. Caso não tenha, ou seja, caso todos já tenham pego lanche pela primeira vez, aqueles que querem repetir podem seguir o fluxo novamente. Com isso, temos o seguinte:

Passo 8 – Dando continuidade à condição de verificação “Há alguém, na fila, que ainda não pegou lanche?” → “sim”, teremos uma situação em que não seria justo alguém que já comeu, repetir o lanche e, talvez, não sobrar alimento para aqueles que ainda não tenham comido nada e que estejam na fila. Portanto, quem desejar repetir, deverá voltar para a fila até que todos tenham pego lanche pela primeira vez. Assim sendo, teremos:

Uma pequena observação nesse ponto. Na realidade não sei como fazem na prática, mas seria o caso de iniciarem uma segunda fila de espera, para os repetentes. Essa suposição não foi colocada no atual algoritmo.
Vamos relembrar o que temos do diagrama até o momento:

Passo 9 – É hora de irmos para a nossa quarta instrução de verificação: “Ainda tem lanche?” → “não”. O que se faz caso não haja mais nada para comer? Isso aí, lamenta e aguarda bater o sinal do fim do recreio. Neste ponto, temos o seguinte:

Passo 10 – Ora, só será possível se alimentar se ainda houver tempo para isso. Desse modo, vamos para a quinta instrução de verificação: “Ainda é recreio?” → “não”, então, entramos na instrução de “Vá para a aula”. O diagrama, então, é:

Passo 11 – Finalmente, chegamos ao tratamento da sexta é última instrução de verificação: “Deseja repetir?” → “sim”. Veja o diagrama:

Algumas considerações antes de codificar em Python
Livro relevante!
Problemas de negócios mais complexos podem dar origem a uma grande variedade de algoritmos, dependendo de fatores como a experiência do programador, se há mais de um desenvolvedor que o está analisando, se foi descrito com detalhamento mais ou menos abrangente, se foi revisado por outros programadores, etc.
O algoritmo que vimos nesse material é um bom exemplo disso. Certamente, você vai encontrar outras formas de construí-lo. Por outro lado, problemas de negócios mais simples tendem a originar algoritmos muito parecidos ou, até, iguais, mesmo que criados por programadores diferentes. Para exemplificar, imagine o seguinte problema: “multar bicicletas que passem a mais de 15km por hora por um determinado ponto de uma ciclovia.” Veja um possível exemplo do diagrama de blocos:

Com efeito, independente de como ficou o algoritmo, é totalmente possível que alguma coisa seja alterada durante a codificação em linguagem de programação. Contudo, será preciso avaliar se tal mudança, de fato, trará melhorias e não apenas um modo diferente de se fazer a mesma coisa.
Você pode acessar a segunda parte desse material de apoio em “Codificando em Python os 12 passos do algoritmo da fila do lanche”.
Referências
1. Fundação Telefônica Vivo. Pensamento computacional em sala de aula: muito além da programação. Fundação Telefônica Vivo, 28 de nov. de 2019. Disponível em: <https://www.fundacaotelefonicavivo.org.br/noticias/pensamento-computacional-pilares-programacao/#:~:text=O%20pensamento%20computacional%20se%20apoia,utilizou%20em%20problemas%20parecidos)%20e>. Acesso em: 18 de junho de 2024.
2. DGR1. Cena do filme Fenômeno – Seja específico. Youtube, 06 de jul. de 2022. Disponível em: <https://www.youtube.com/watch?v=S7QFt15ruSA>. Acesso em 21 de junho de 2024.
3. Rosales, Krizjohn. Grupo de Homens Formando uma Libe. Pexels, 29 de dezembro de 2017. Disponível em: <Foto de Krizjohn Rosales: https://www.pexels.com/pt-br/foto/grupo-de-homens-formando-uma-libe-761295/>. Acesso em: julho de 2024.