Arrumando as coisas para começar a falar de algoritmos#
O que você saberá se você ler todo este capítulo?#
Você irá trabalhar em uma empresa ou em um mestrado/doutorado para resolver problemas usando Python, e não somente para apertar botões e comandos. Por isso, você precisará saber trabalhar com algoritmos (usando Python ou qualquer outra linguagem).
Algoritmo não é sinônimo de inteligência artificial, e você pode pensar em casos da vida real em forma de algoritmos.
Algoritmos podem conter dados.
Dados que não mudam são armazenados em constantes.
Dados que mudam são armazenados em variáveis.
Dados são manipulados com operadores (ex.: adição, subtração, divisão, comparação).
Dados podem ser números, textos ou variáveis lógicas (verdadeiro/falso), dentre outros.
Todo algoritmo é organizado da seguinte forma:
Entrada: são os pré-requisitos que um algoritmo tem para que possa funcionar, ou seja, os dados ou informações necessárias para realizar a tarefa.
Processamento: é a sequência de passos ou instruções que serão executados para processar a entrada e produzir uma saída.
Saída: é o resultado final que o algoritmo produz, que pode ser uma resposta, um valor ou uma ação.
Algoritmos servem para resolver problemas de um jeito estruturado e organizado seguindo uma sequência lógica: não importa o computador/pessoa que execute aquele algoritmo - devemos esperar o mesmo resultado.
Exemplo: não importa o modelo de celular, a cidade ou o restaurante - o aplicativo de delivery de comida deve funcionar da mesma forma para todas estas combinações possíveis.
O algoritmo precisa ser claro, conciso e eficiente na solução do problema proposto.
Ah, antes de começar: veja o vídeo abaixo (ele possui legendas traduzidas para o português, se quiser). É um exemplo do que acontece quando você faz um algoritmo sem pensar direito na sua organização. No caso, Josh Darnit pediu para que os seus filhos fizessem um algoritmo (um passo-a-passo) para fazer um sanduíche de manteiga de amendoim e geleia. E ele seguiu as instruções ao pé da letra, como um computador seguirá ao pé da letra um algoritmo que você irá desenvolver no futuro.

Os algoritmos e a sua vida#
Vamos supor que você quer preparar um bolo. Você sabe que para preparar um bolo, você precisa seguir uma receita passo a passo. Essa receita é um conjunto de instruções que você segue para chegar ao resultado desejado.
Assim como na receita de bolo, um algoritmo é um conjunto de instruções que segue uma sequência lógica de passos para resolver um problema específico. Esses passos podem ser executados em ordem (ou seja: primeiro fazemos as instruções do passo 1, depois o passo 2, depois o passo 3 e assim sucessivamente) ou podem ter condições que definem qual passo deve ser executado em seguida.
Exemplo 1: Fazendo um bolo#
Vejamos por exemplo uma receita de bolo de chocolate. Perceba principalmente no exemplo abaixo a organização sequencial da receita e como ela é preparada em uma sequência lógica (afinal, não faria sentido lhe dar o modo de preparo sem passar primeiro os ingredientes, não é?).

Ingredientes#
1 xícara de açúcar
¾ xícara de farinha de trigo
½ xícara de cacau em pó
½ colher de chá de bicarbonato de sódio
½ colher de chá de fermento em pó
½ colher de chá de sal
2 ovos
½ xícara de leite
¼ xícara de óleo vegetal
1 colher de chá de essência de baunilha
½ xícara de água quente
Modo de preparo#
Preaqueça o forno a 180°C. Unte uma forma redonda de 23 cm com manteiga ou óleo e enfarinhe.
Em uma tigela grande, misture o açúcar, a farinha de trigo, o cacau em pó, o bicarbonato de sódio, o fermento em pó e o sal.
Adicione os ovos, o leite, o óleo vegetal e a essência de baunilha. Bata em velocidade média por 2 minutos.
Adicione a água quente e misture até ficar homogêneo. A massa ficará bem líquida.
Se a massa estiver muito grossa, adicione mais água quente aos poucos, até que a massa atinja a consistência adequada.
Despeje a massa na forma untada.
Asse por 30 a 35 minutos ou até que um palito inserido no centro do bolo saia limpo.
Deixe esfriar completamente antes de servir.
Resultado esperado#
Um bolo de chocolate.
Perceba que no passo 5 a condição “se” verifica se a massa está muito grossa. Se a massa estiver muito grossa, adicionamos mais água quente aos poucos até que a massa atinja a consistência adequada. Essa condição ajuda a garantir que o bolo não fique muito denso ou seco e que o resultado final seja o melhor possível.
Em outras palavras, esta condição não é obrigatória: poderíamos pular do passo 4 para o passo 6 se a massa estivesse na consistência adequada. Também poderíamos repetir várias e várias vezes o passo 5 até que ela finalmente estivesse do jeito que gostaríamos.
Perceba também que cada passo naquela receita de bolo é importante para garantir que o resultado seja o melhor possível. Por exemplo, a escolha dos ingredientes corretos e as medidas precisas são etapas cruciais para evitar erros na receita. Da mesma forma, a temperatura do forno e o tempo de cozimento são passos importantes para garantir que o bolo seja assado corretamente. Não importa o dia, local, a pessoa ou a marca do forno e da farinha de trigo: quem seguir os passos acima deverá ter o mesmo resultado. No caso, o bolo de chocolate.
Exemplo 2: Pedindo comida por aplicativo#
Agora, vamos para outro exemplo de algoritmo: no caso, do pedido de comida em um aplicativo de delivery. Observe novamente a organização do algoritmo:
Pré-requisitos#
Ter um smartphone ou tablet com acesso à internet.
Ter um aplicativo de delivery instalado e configurado com as informações do usuário, incluindo endereço de entrega e forma de pagamento.
Passo-a-passo#
Abra o aplicativo de delivery.
Procure o restaurante desejado.
Escolha os itens desejados do menu.
Selecione as opções desejadas para cada item, como tamanho da porção, temperatura, ingredientes extras, etc.
Adicione os itens ao carrinho.
Verifique o carrinho para garantir que todos os itens estejam corretos e que as quantidades estejam de acordo com o desejado.
Se quiser adicionar mais itens ao pedido, repita os passos 3 a 6 até que todos os itens desejados estejam no carrinho.
Selecione a forma de pagamento desejada.
Insira o endereço de entrega correto ou confirme o endereço já cadastrado.
Se o endereço de entrega for diferente do endereço cadastrado, confirme o novo endereço de entrega.
Confirme o pedido.
Resultado esperado#
O usuário recebe a comida no endereço indicado dentro do tempo estimado.

Veja mais uma vez que a organização é parecida com o exemplo do bolo: temos uma lista de pré-requisitos (que antes eram os ingredientes), a sequência de instruções e, finalmente, o resultado esperado. De novo: não importa o que você está pedindo, o modelo do celular ou a sua cidade: o funcionamento deve ser o mesmo e o resultado esperado também deve ser o mesmo, beleza?
Eu queria trazer estes exemplos para você para que ficasse claro que, ainda que sejam frequentemente associados à inteligência artificial e ao processamento de dados em computadores, os algoritmos podem ser encontrados em muitos outros contextos na vida real.
Se você está começando a estudar desenvolvimento de software, este seria um bom exercício: começar a pensar em outros exemplos no seu cotidiano que poderiam ser descritos em formato de algoritmos. Alguns exemplos de exercícios que você pode fazer em um pedaço de papel ou em um documento do Word seriam:
Limpar um cômodo da casa;
Atendimento de um cliente em uma loja;
Compra de um carro;
Organização de um churrasco de fim de semana;
Planejamento de uma viagem.
Por isso, veja que os algoritmos podem ser executados em outras plataformas que não são computadores. Por exemplo, os algoritmos são usados em jogos de tabuleiro como xadrez e damas, onde as jogadas dos jogadores seguem uma sequência de instruções definidas. Os algoritmos também podem ser usados em processos industriais, como a produção de alimentos ou de produtos químicos, para garantir que as etapas de produção sejam realizadas com precisão e eficiência.
Assim como na receita de bolo, um algoritmo é uma sequência de instruções que um computador segue para realizar uma tarefa específica. Os algoritmos são usados em uma ampla variedade de tarefas, desde buscas na internet até o processamento de imagens médicas e a previsão do tempo.
Os algoritmos e os computadores#
Neste momento você já deve saber que algoritmos não são limitados somente a computadores. Agora, o próximo passo é ficar claro o que são computadores para podermos (finalmente) colocar a mão na massa. Primeiro: os computadores não se limitam somente aos notebooks e desktops que as pessoas usam para mandar e-mails, ler este conteúdo, jogar Counter-Strike ou ficar mexendo na internet. Também não são somente os celulares e tablets. Logo, computadores também incluem coisas como os elevadores, microondas e máquinas de lavar roupa.
Na verdade, a maioria dos dispositivos que usamos hoje em dia possui algum tipo de computador interno. Esses computadores são responsáveis por executar diversas tarefas que fazem com que esses dispositivos funcionem corretamente.
Por exemplo, pensemos em um elevador. Ele não é apenas uma caixa que se move para cima e para baixo, mas também inclui um sistema de controle que é executado por um computador interno. Esse computador é responsável por garantir que o elevador se mova corretamente, pare no andar correto e abra as portas de forma segura.
Da mesma forma, um microondas também inclui um computador interno que controla o tempo de cozimento e a intensidade das ondas de calor. Esse computador permite que o microondas aqueça sua comida de maneira uniforme e segura.
Por fim, até mesmo uma máquina de lavar roupa pode incluir um computador interno. Esse computador é responsável por controlar o ciclo de lavagem, a temperatura da água e a duração do ciclo. Isso garante que suas roupas sejam lavadas corretamente e sem danos.
O que eu queria trazer a você com estes pontos é que um algoritmo escrito para computador não incluem somente isso:
Algoritmos de busca em sites de busca como Google e Bing.
Algoritmos de recomendação em serviços de streaming de vídeo como Netflix e YouTube.
Algoritmos de filtragem de spam em serviços de e-mail como Gmail e Outlook.
Algoritmos de classificação de produtos em sites de comércio eletrônico como Amazon e Mercado Livre.
Algoritmos de previsão do clima em institutos de meteorologia.
Algoritmos de análise de dados em empresas de análise financeira.
Algoritmos de criptografia em sistemas de segurança de dados.
Algoritmos de compressão de dados em serviços de armazenamento em nuvem como Google Drive e Dropbox.
Algoritmos de reconhecimento de voz em assistentes pessoais como Siri e Alexa.
Algoritmos de reconhecimento facial em sistemas de segurança.
Algoritmos de diagnóstico em sistemas de saúde e medicina.
Algoritmos de recomendação em plataformas de música como Spotify e Apple Music.
Mas incluem também isso:
Algoritmos de controle de velocidade em esteiras de academia para manter o usuário na velocidade e ritmo adequados.
Algoritmos de controle de temperatura em microondas para garantir que a comida seja aquecida uniformemente.
Algoritmos de controle de força em motores de elevadores para garantir que ele suba e desça de forma segura e eficiente.
Algoritmos de processamento de dados em smartwatches para monitorar a atividade física, frequência cardíaca e sono do usuário.
Algoritmos de análise de imagem em sistemas médicos para detecção de doenças e anomalias em imagens de raio-X, ressonância magnética e tomografia.
Pseudocódigo#
Agora, você sabe como pensar em algoritmos. Você sabe como fazer um algoritmo considerando os exemplos da vida real que comentei acima. Por isso, vamos avançar mais um passo com o pseudocódigo.
O pseudocódigo é uma ferramenta essencial para quem está aprendendo a programar, pois ele permite que o desenvolvedor planeje e organize seu código de forma mais clara e estruturada. Ao escrever o pseudocódigo, o desenvolvedor pode visualizar o fluxo de execução do programa de forma mais clara e identificar possíveis problemas antes mesmo de começar a escrever o código propriamente dito. Além disso, o pseudocódigo também ajuda o desenvolvedor a entender melhor a lógica por trás do algoritmo que está sendo produzido, permitindo que ele faça ajustes e melhorias de forma mais eficiente.
Outro benefício do pseudocódigo é que ele pode ser facilmente compartilhado e discutido com outros desenvolvedores, o que pode ajudar no processo de aprendizado. Ao mostrar o pseudocódigo para outros desenvolvedores, é possível receber feedback e sugestões de melhorias, o que pode ajudar a aprimorar a lógica do algoritmo e tornar o código final mais eficiente e robusto.
A ideia é que, ao escrever um algoritmo em pseudocódigo, possamos identificar erros, antecipar problemas e entender melhor o fluxo de execução do programa. Isso torna o processo de codificação mais eficiente e menos suscetível a erros. Um exemplo simples de pseudocódigo pode ser um algoritmo para calcular a soma de dois números inteiros. Em pseudocódigo, ele seria assim:
Um exemplo de pseudocódigo#
1. Início
2. Inteiro: num1, num2, soma
3.
4. Escreva("Digite o primeiro número: ")
5. Leia(num1)
6.
7. Escreva("Digite o segundo número: ")
8. Leia(num2)
9.
10. soma = num1 + num2
11. Escreva("O resultado da soma é: ", soma)
12. Fim
Todo algoritmo possui um início e fim. Isso era verdade com o exemplo do bolo (começamos tendo nada nas mãos e terminamos com um bolo), com o delivery (começamos com fome e acabamos com a comida entregue) e também é verdade aqui. No exemplo acima, o pseudocódigo começa com o passo Início
na linha 1, que é uma convenção para indicar o início do algoritmo. Da mesma forma, o algoritmo termina com o passo Fim
na linha 12, que indica o final do código.
Dentro deste bloco (ou seja: entre o Início
e Fim
) temos duas variáveis que foram declaradas logo de cara para armazenar os números: num1
e num2
, ambas na linha 2. Estas variáveis poderiam ter qualquer outro nome como, por exemplo, numero1
e numero2
; primeiro_numero
e segundo_numero
ou banana
e abacaxi
. Dito isso, é recomendável que você use nomes claros e descritivos para variáveis e funções, a fim de tornar o código mais fácil de ler e entender. Além disso, é importante usar uma indentação adequada (isto é: o espaçamento antes de iniciar cada uma das linhas) para separar os blocos de instruções e tornar o código mais legível.
Também definimos na linha 2 uma variável para armazenar o resultado da soma. Convenientemente, o nome desta variável é soma
. Todas estas variáveis devem armazenar somente valores inteiros (isto é: sem casas decimais). isto também é definido pela linha 2.
O próximo passo (linhas 4 a 8) é solicitar ao usuário que digite os dois números, utilizando a função Escreva
para exibir uma mensagem na tela (ou seja: fazer com que o computador escreva uma mensagem na tela para o usuário) e a função Leia
para ler o que o usuário digitou com o teclado e armazenar isto nas variáveis correspondentes.
Depois disso, é feito o cálculo da soma na linha 10, utilizando a equação num1 + num2
. O resultado é armazenado na variável soma
.
Por fim, é exibido na tela o resultado da soma, utilizando novamente a função Escreva
na linha 11, que exibe a mensagem “A soma dos dois números é: “ seguida do valor da variável soma
.
Onde usar/como trabalhar com pseudocódigos?#
Os pseudocódigos são uma ferramenta útil para os desenvolvedores em diversos momentos, como na fase de planejamento e concepção de algoritmos e também para documentar um código já desenvolvido. Eles são uma espécie de “rascunho” que descreve, de forma abstrata e sem se preocupar com a sintaxe de uma linguagem de programação específica, as etapas e a lógica de um algoritmo.
Para você, serve para praticar. Isso ajuda demais na hora de começar a trabalhar com Python ou qualquer outra linguagem de programação para organizar as suas ideias. Você verá que funções como o Leia
e Escreva
possuirão nomes e formas de usar bem parecidas em Python.
Como exercício, tente escrever em um bloco de notas, folha de papel ou qualquer outro lugar algo que seja do seu dia-a-dia em um formato de algoritmo. Coloque início e fim pré-definidos e todos os passos de forma sequencial. Lembra do vídeo no início deste capítulo e da receita de bolo? Pois bem, o que acha de fazer algo parecido?
Quase lá para começar#
Ok, estamos quaaase prontos para começar com o Python. Antes disso, valem reforçar alguns conceitos:
Dados#
Dados são informações que são armazenadas e processadas por computadores. Um algoritmo irá processar dados para te dar algum resultado no final das contas. Da mesma forma que um algoritmo para fazer o bolo de chocolate processa os ingredientes para te entregar um bolo, um algoritmo de delivery também irá processar o seu pedido (e os dados do seu cartão de crédito) para lhe entregar a comida.
Do mesmo jeito, um algoritmo de computadores irá processar números, textos e outros tipos de dados para lhe entregar algo no final das contas: isto pode ser uma transferência bancária, um sinal de alerta do microondas, uma mensagem de e-mail redirecionada à caixa de spam ou uma nova notificação no seu celular.
Tipos de dados#
Em um algoritmo, existem vários tipos de dados que podem ser usados para armazenar informações e realizar cálculos. Desses, os mais básicos são:
Numéricos: armazenam valores numéricos, como inteiros e reais. Elas podem ser usadas em operações matemáticas, como adição, subtração, multiplicação e divisão. Exemplos de variáveis numéricas em um pseudocódigo são “idade”, “peso” e “preço”.
Números inteiros: usados para representar valores inteiros (sem casas decimais). Exemplos: -1000, -5, 0, 20, 49, 2023.
Números reais: usados para representar valores com casas decimais. Exemplos: 3.1415, 1.72, 77.4, 0.001, -2.54.
Lógicos/booleanos: representam valores lógicos, como verdadeiro (True) ou falso (False). Exemplo: uma variável chamada “possui_passaporte” poderia indicar se uma pessoa tem ou não tem passaporte.
Alfanuméricos: armazenam valores de texto, como nomes, endereços, palavras e frases. Elas podem ser usadas em operações de concatenação, que unem duas ou mais strings em uma única string. Exemplos de variáveis alfanuméricas em um pseudocódigo são “nome”, “sobrenome” e “endereço”. Strings são sequências de caracteres (letras, números, espaços em branco, etc.) que representam textos.
Constantes e variáveis#
Além disso, estes tipos de dados podem ser tratados de formas diferentes pelos algoritmos. Assim, temos:
Constante: um valor que não pode ser alterado durante a execução do programa.
Variável: é um espaço na memória do computador que pode armazenar diferentes valores ao longo da execução do programa.
Por exemplo, em uma receita de bolo, a quantidade de açúcar que deve ser adicionada é uma constante, pois não varia de acordo com a situação ou contexto. É uma informação fixa e predefinida na receita. Por outro lado, a quantidade de farinha que deve ser adicionada pode variar de acordo com a quantidade de ovos que serão utilizados, ou de acordo com o tamanho da forma utilizada. É uma informação que pode mudar e, portanto, poderiam ser variáveis na receita.
Pensando em computadores, as constantes são utilizadas quando há um valor que é conhecido previamente e que deve permanecer inalterado durante a execução do algoritmo ou programa. Por exemplo, pode-se utilizar uma constante para representar o valor da velocidade da luz, que é uma grandeza conhecida e que não muda durante a execução do programa.
As variáveis, por outro lado, são usadas para armazenar valores que podem mudar durante a execução do programa. Por exemplo, em um programa de cálculo de notas de alunos, uma variável pode ser utilizada para armazenar a nota de cada aluno, e essa nota pode mudar à medida que o usuário insere novas informações no programa.
Em resumo, as constantes e as variáveis são importantes conceitos em algoritmos e programação, e são utilizadas para armazenar e manipular diferentes tipos de dados. As constantes são usadas para valores que não mudam durante a execução do programa, enquanto as variáveis são usadas para valores que podem mudar.
Operadores#
Lembra na receita do modelo onde tinha um passo escrito “misture o açúcar, a farinha de trigo, o cacau em pó, o bicarbonato de sódio, o fermento em pó e o sal”? E outro chamado “adicione os ovos, o leite, o óleo vegetal e a essência de baunilha”? Como isso funcionaria na prática? Ora: você deve imaginar alguém pegando os ingredientes e misturando todos eles na tigela. Misturar, neste caso, significa mexer todos eles até que você não saiba mais o que é leite, o que é ovo e o que seriam os outros ingredientes: é mexer até que tudo vire uma coisa só.
Em algoritmos de computador, não temos tigelas e nem ferramentas para manipular estes ingredientes. No lugar, temos operadores para manipular números, textos e booleanos. São eles:
Aritméticos: realizam operações matemáticas como adição (
+
), subtração (-
), multiplicação (*
), divisão (/
, módulo (resto de uma divisão, caracterizado nos algoritmos pelo símbolo%
) e exponenciação (caracterizado dentro dos algoritmos pelo**
).Relacionais: comparam dois valores e retornam um resultado booleano (verdadeiro ou falso), como igualdade (
==
), desigualdade (!=
), maior que (>
), menor que (<
), maior ou igual a (>=
) e menor ou igual a (<=
).Lógicos: combinam resultados booleanos para obter um resultado final, como “e” (
and
), “ou” (or
) e “não” (not
).Atribuição: atribuem valores a uma variável, como o sinal de igual (
=
). No pseudocódigo da soma dos dois números observe que a linha 10 tinha o códigosoma = num1 + num2
. Isto é lido como: “A variávelsoma
recebe o resultado denum1
maisnum2
”.
Indentação#
Você viu no exemplo do pseudocódigo alguns espaços à esquerda nas linhas 2 a 11? Aquilo são indentações. A indentação é uma técnica usada para organizar o código em um programa de computador. É como uma espécie de espaçamento (recuo) que ajuda a identificar quais linhas de código estão dentro de outras linhas. É como se fosse um “encaixe” do código, onde cada bloco está dentro do outro.
Pense que você tem um conjunto de instruções para seguir. Algumas dessas instruções precisam ser executadas dentro de outras instruções. Para que você não se perca na sequência, você pode separar essas instruções com espaços, deixando mais claro quais instruções pertencem a qual conjunto. Na programação, isso é chamado de indentação. Como uma comparação simplista, imagine uma estrutura de tópicos e subtópicos de uma apresentação no PowerPoint ou, ainda, uma biblioteca em que cada livro é classificado e organizado por categorias e subcategorias que estão umas dentro das outras.
Na prática, a indentação é feita com a adição de espaços ou tabulações (tecla Tab
do teclado) no início de cada linha de código, criando um recuo que ajuda a identificar a hierarquia dos blocos de código. É uma prática importante porque torna o código mais legível e fácil de entender, e ajuda a evitar erros de sintaxe. Veremos mais sobre isso adiante.
Próximos passos#
Agora você sabe o que são algoritmos, como eles funcionam e como construímos um na prática. Também sabe alguns conceitos adicionais que são necessários para a construção de algoritmos como, por exemplo, dados (tipos, variáveis e constantes), operadores e indentações.
Também conheceu os pseudocódigos: eles serão necessários para que possamos trabalhar com alguns exemplos e convertê-los em Python, que será o foco a partir de agora. Vamos lá?
Referências bibliográficas#
ALALWAN, A. A. Mobile food ordering apps: An empirical study of the factors affecting customer e-satisfaction and continued intention to reuse. International Journal of Information Management, v. 50, p. 28-44, 2020.
BRYANT, R. E.; O.’HALLARON, D. R. Computer systems: a programmer’s perspective. Upper Saddle River: Prentice Hall, 2003.
CHOI, J-C. User familiarity and satisfaction with food delivery mobile apps. Sage Open, v. 10, n. 4, 2020.
CHOO, C. W. The knowing organization: How organizations use information to construct meaning, create knowledge and make decisions. International journal of information management, v. 16, n. 5, p. 329-340, 1996.
CORMEN, T. H. et al. Introduction to algorithms. 3rd ed. MIT Press, 2009.
DOWNEY, A. B. Think Python: How to Think Like a Computer Scientist (2ª ed.). O’Reilly Media, 2015.
FARRELL, J. Programming Logic and Design, Comprehensive. Cengage Learning, 2014.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F. Lógica de programação: a construção de algoritmos e estruturas de dados. 2005.
GRAHAM, R. L. et al. Concrete mathematics: a foundation for computer science. Computers in Physics, v. 3, n. 5, p. 106-107, 1989.
HARRIS, S.; ROSS, J. Beginning algorithms. John Wiley & Sons, 2005.
KELLEHER, J. D.; TIERNEY, B. Data science: An introduction. MIT Press, 2018.
KELTON, W. D. et al. Simulation with ARENA. 6th ed. McGraw-Hill, 2014.
KNUTH, D. E. The Art of Computer Programming, Volume 1: Fundamental Algorithms. 3rd ed. Addison-Wesley, 1997.
LOUDON, K. Mastering algorithms with C. O’Reilly Media, 1999.
PRESSMAN, R. S.; MAXIM, B. R.; MAXIM, J. R. Engenharia de software: uma abordagem profissional. McGraw-Hill, 2016.
PUGA, S.; RISSETTI, G. Lógica de programação e estruturas de dados, com aplicações em Java. Pearson Educación, 2008.
SANTOS, R. L. Lógica de programação e estruturas de dados: com aplicações em Java. Editora Novatec, 2015.
SEDGEWICK, R.; WAYNE, K. Algorithms. 4th ed. Addison-Wesley, 2011.
TANENBAUM, A. S.; WOODHULL, A. S. Operating Systems: Design and Implementation. 3rd ed. Pearson, 2015.
TASTY. Classic Chocolate Cake. Disponível em: https://tasty.co/recipe/classic-chocolate-cake. Acesso em: 03 mar. 2023.
TURBAN, E.; SHARDA, R.; DELEN, D. Decision support and business intelligence systems. Pearson, 2019.