Buscar

Semana1_Texto-base_Pensamento_Computacional_COM100_OK_rev

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Pensamento Computacional: pilares e algoritmos do 
dia a dia 
Maria da Graça C. Pimentel (Univesp) 
 
COM100 – Pensamento Computacional – 2022.3 
 
Sumário 
1 Introdução 2 
1.1 Tarefa: aspirar o chão na presença de obstáculos ................................................................... 2 
1.2 O poder do conjunto de construções sequência-repetição-condicional............................... 6 
1.3 Colocando o robô para trabalhar: programa de computador ...........................................6 
1.4 Reflexão e objetivos.................................................................................................................... 7 
1.5 Pensamento Computacional .......................................................................................................8 
1.6 Animação da Joaninha, o robô aspirador ..............................................................................9 
2 Pensamento Computacional aplicado a tarefas rotineiras 9 
2.1 Contribuições da Ciência da Computação ........................................................................... 11 
2.2 Tarefa: Desenhar uma casa .................................................................................................... 11 
2.3 Tarefa: Realizar operação matemática divisão inteira ..................................................... 13 
2.4 Tarefa: Redigir um e-mail ...................................................................................................... 14 
2.5 Tarefa: Fazer um pudim de leite condensado de micro-ondas ........................................... 15 
3 Pensamento Computacional aplicado tarefas colaborativas 16 
3.1 Destaques sobre a definição ................................................................................................... 16 
3.2 Uma tarefa colaborativa: grupo prepara um jantar a base de pizzas ............................. 16 
3.3 Detalhamento de uma subtarefa: montar uma pizza ........................................................ 18 
 
 
 
Figura 1: Robô aspirador de pó em ação 
2 
 
 
 
 
1 Introdução 
O que faz um robô? O que faz um robô aspirador de pó de modelo básico como o ilustrado na 
Figura 1? Vamos vê-lo em ação? 
Por favor, assista ao vídeo disponível em https://icmc.usp.br/e/e0f2f. 
Assista com calma para identificar o que o robô está fazendo. Pause sempre que acontecer 
alguma coisa: sempre que o robô fizer alguma coisa diferente do que estava fazendo antes. 
Assista várias vezes. Anote o que o robô faz a cada mudança. 
Assistiu? E então, o que o robô faz? 
Podemos dizer que, de modo geral, as ações executadas pelo robô são: 
(1) O robô aspira o chão; 
(2) Enquanto aspira, o robô também varre o chão com suas duas vassourinhas; 
(3) Enquanto aspira, o robô evita obstáculos. 
Além disso, o robô repete essas duas ações até a bateria acabar (ou até alguém desligá-lo). 
Observe agora alguns pontos específicos do vídeo, destacados na Figura 2: 
(1) Robô, varrendo e aspirando, vai de encontro ao sofá; 
(2) Robô bate no sofá e desvia; 
(3) Robô continua varrendo e aspirando; 
(4) Robô bate na porta e desvia; 
(5) Robô continua varrendo e aspirando e percebe um degrau; 
(6) Robô desvia do degrau; 
(7) Robô continua varrendo e aspirando. 
É esperto o robô, não? Varre, aspira, bate no sofá, desvia do sofá, continua varrendo e aspirando, 
bate na porta, desvia da porta, encontra um degrau e desvia do degrau! E continua em sua 
missão de robô aspirador de pó! Então, será que o robô é “inteligente”? 
Para identificarmos se o robô é inteligente, vamos detalhar a tarefa que o robô está realizando. 
 
1.1 Tarefa: aspirar o chão na presença de obstáculos 
O robô tem uma tarefa para fazer. Qual é a tarefa? Ele tem que aspirar o chão na presença de 
obstáculos. Vamos detalhar o que ele faz para realizar a tarefa. 
 
Como o robô realiza a tarefa? 
Podemos dizer que a atividade que o robô realiza é exatamente a tarefa proposta: aspirar o 
chão na presença de obstáculos. Entretanto, na vida real, nem o robô nem o ser humano faz 
uma atividade como essa sem, na verdade, dividi-la em várias atividades menores. Já pensou 
nisso? Como você realizaria a tarefa? 
Toda vez que o símbolo aparecer, por favor, pare a leitura e pense na pergunta apresentada, ok? 
Tarefa: aspirar o chão na presença de obstáculos 
https://icmc.usp.br/e/e0f2f
1.1 Tarefa: aspirar o chão na presença de obstáculos 3 
 
 
 
 
 (2) 
(3) (4) 
(5) (6) 
(7) 
Figura 2: Robô aspirador de pó em ação no vídeo https://icmc.usp.br/e/e0f2f 
 
 
https://icmc.usp.br/e/e0f2f
1.1 Tarefa: aspirar o chão na presença de obstáculos 4 
 
 
Sabendo que o robô, como a gente, divide a atividade em atividades menores, vamos retomar 
a pergunta: como o robô realiza a tarefa? E vamos detalhar a resposta! Vamos detalhar com 
calma, em vários níveis, ok? 
Em um primeiro detalhamento, podemos dizer que o robô executa algumas atividades: 
• O tempo todo, até a bateria acabar: avançar e aspirar 
• De vez em quando: desviar de obstáculos 
Em um segundo detalhamento, podemos reconhecer que, de fato, o robô está o tempo repetindo 
o mesmo conjunto de atividades: avançar e aspirar, e desviar de obstáculos: 
• Repetir até a bateria acabar: 
– Avançar e aspirar 
– De vez em quando: desviar de obstáculos 
No detalhamento seguinte, podemos reconhecer que avançar e aspirar são, na verdade, duas 
atividades diferentes: 
• Repetir até a bateria acabar: 
– Avançar 
– Aspirar 
– De vez em quando: desviar de obstáculos 
A seguir, podemos reconhecer que, para desviar de obstáculos, o robô tem que testar se há 
obstáculos: 
• Repetir até a bateria acabar: 
– Avançar 
– Aspirar 
– Em caso de obstáculos: desviar de obstáculos 
Detalhando mais uma vez, podemos reconhecer que o robô enfrenta dois tipos de obstáculos: 
barreiras, como o sofá e a porta, e abismos, como no caso do degrau da porta. É possível registrar 
que são dois tipos de obstáculos diferentes porque são reconhecidos pelo robô por dois sensores 
diferentes: o sensor de batida e o sensor de abismo, como ilustrado na Figura 3. Assim, podemos 
descrever essas atividades separadamente: 
• Repetir até a bateria acabar: 
– Avançar 
– Aspirar 
– Em caso de barreira: 
* Desviar do obstáculo 
– Em caso de abismo: 
* Desviar do obstáculo 
No detalhamento acima, podemos observar um padrão: o robô realiza a mesma ação, desviar 
do obstáculo, independentemente do sensor percebido. Por isso, podemos utilizar esse padrão 
e associar a ação de desvio a um conectivo ou que reconhece os dois sensores diferentes. Desse 
modo, a gente abstrai a tarefa de desviar de um obstáculo independentemente do sensor. 
1.1 Tarefa: aspirar o chão na presença de obstáculos 5 
 
 
 
 
 
 
 
 
 
Figura 3: Sensores do robô: sensor de abismo na parte inferior, sensor de batida na parte frontal 
 
• Repetir até a bateria acabar: 
– Avançar 
– Aspirar 
– Em caso de barreira ou de abismo: 
* Desviar do obstáculo 
Agora, você reparou, no vídeo, como é que o robô realiza a atividade de desviar de um obstá- 
culo? Por favor, volte no vídeo e preste bastante atenção. Percebeu? 
Você deve ter notado que, para desviar de um obstáculo — seja ele uma barreira ou um abismo 
— o robô executa duas ações diferentes: primeiro ele dá marcha à ré e, a seguir, ele vira para 
a direita. Vamos incluir esse detalhamento na nossa próxima descrição, que chamaremos no 
restante do texto de detalhamento final: 
• Repetir até a bateria acabar: 
– Avançar 
– Aspirar 
– Em caso de barreira ou de abismo: 
* Dar marcha à ré 
* Virar para a direita 
Observemos, nesse detalhamento final, três tipos de construções diferentes: 
• O detalhamento é composto, de fato, por uma sequência de instruções, realizadas uma 
após a outra. Vamos chamar esse tipo de construção de sequência. 
• Uma das instruções permite repetir outro conjunto de instruções. Vamos chamar esse tipo 
de construção de repetição. 
• Uma das instruções permite realizar outro conjunto deinstruções condicionalmente, isto 
é, dependendo do resultado de algum teste realizado na própria instrução. Vamos chamar 
esse tipo de construção de condicional. 
Na seção 1.2 vamos discutir como esse conjunto de construções é poderoso. Mas antes vamos 
discutir porque a gente parou o processo que estávamos fazendo, o processo de descrever o que 
o robô faz, no detalhamento final. 
A gente parou porque a gente não precisa detalhar as atividades avançar, aspirar, dar marcha 
1.2 O poder do conjunto de construções sequência-repetição-condicional 6 
 
 
à ré e virar. O nosso robô aspirador nasceu, isto é, foi concebido pelos engenheiros mecânicos 
e eletrônicos, para avançar, aspirar, dar marcha à ré e virar. Por nascer sabendo, a gente quer 
dizer que essas são tarefas que fazem parte do vocabulário do robô. Isso quer dizer que, se a 
gente fosse programar o robô, poderíamos dar essas ordens e ele já saberia fazer. 
 
1.2 O poder do conjunto de construções sequência-repetição-condicional 
Pense em um programa de computador — um software — bem complexo. 
Pense em outro programa bem complexo. 
Pense em um terceiro programa bem complexo. 
Pensou? 
Que tal o seu sistema operacional favorito? Que tal o Ambiente Virtual de Aprendi- 
zagem (AVA) da Univesp? Que tal seu serviço de busca favorito? 
Sabe o que eles têm em comum? Esses programas, e todos os demais programas executados 
em um computador, são compostos por estes três tipos de construções: sequência-repetição-
condicional. 
Em outras palavras: por mais complexo que seja o programa, ele pode ser decomposto e deta- 
lhado até chegar em conjunto de instruções que são de um desses tipos. Um conjunto grande, é 
verdade, mas são todas instruções de um dos tipos sequência-repetição-condicional. 
Por conta da complexidade da tarefa, os programas são organizados em subprogramas que 
realizam subtarefas. No programa AVA da Univesp, por exemplo, há um subprograma para o 
fórum, outro subprograma para as avaliações, outro subprograma para apresentar o roteiro de 
cada semana, outro subprograma para apresentar as disciplinas de cada bimestre etc. 
Mas todos, absolutamente todos, são decompostos inúmeras vezes até serem constituídos de 
instruções dos tipos sequência-repetição-condicional. 
Poderoso esse conjunto, pense nisso! 
 
1.3 Colocando o robô para trabalhar: programa de computador 
Agora que já detalhamos o trabalho que o robô faz, vamos relembrar o que nós fizemos. De 
onde a gente partiu mesmo? E aonde chegamos? 
A gente queria detalhar a tarefa que o robô tem que realizar. A gente partiu da tarefa: aspirar 
o chão na presença de obstáculos. Nosso objetivo era detalhar as atividades que o robô executa 
para realizar a tarefa. 
Mas por que o robô tem que realizar a tarefa? Uma resposta: o robô tem que realizar a tarefa 
porque sua dona quer o chão limpo. O robô apenas obedece a ordens. Ordens de quem? 
A dona do robô quer o chão limpo. Mas... é ela quem está mandando o robô executar as ações 
presentes no nosso detalhamento final? Definitivamente: não. 
1.4 Reflexão e objetivos 7 
 
 
O caso do nosso robô não é apenas um exemplo: é caso de um robô qualquer! Em todo robô 
há um computador interno. No caso do nosso aspirador robô, é um computador simples. Todo 
robô nasce sabendo fazer alguma coisa: a tarefa para a qual ele foi concebido. O nosso robô 
aspirador nasceu sabendo aspirar: nascer sabendo, no caso do robô, é saber fazer o que ele foi 
concebido para fazer pelos engenheiros mecânicos e eletrônicos: avançar, aspirar, dar marcha 
à ré e virar. Por nascer sabendo, a gente quer dizer que essas são ordens que o robô entende: é 
só mandar, que ele faz. 
Então temos o seguinte: todo robô obedece a ordens que estão especificadas em um programa, ou 
software, que está armazenado dentro dele. Entretanto, alguém teve que escrever esse pro- 
grama. Alguém com inteligência para detalhar a tarefa (como a gente fez), algu ém com inteli- 
gência para aprender qual é o vocabulário do robô (avançar, aspirar, virar, dar marcha à ré), 
alguém com conhecimento para dar ordens para o robô usando uma linguagem que o robô en- 
tenda, ou seja, usando os tipos de instruções sequência-repetição-condicional. Com isso, o robô 
só executa o que o programa manda: o programa que alguém com inteligência para compre- ender 
o que tem que ser feito, e com o conhecimento para descrever o que tem que ser feito de modo 
que o robô obedeça, escreveu. 
Portanto o robô, como qualquer computador, não tem inteligência alguma. O comportamento 
dele é definido a partir do programa que está embutido nele. E o comportamento só parece 
inteligente porque foi um ser humano, com inteligência, que criou o programa: que programou o 
robô. 
Conclusão: o robô aspirador, como qualquer robô, não tem nada de inteligente. Inteligente é 
quem o programou. 
 
1.4 Reflexão e objetivos 
Vamos refletir sobre este trecho: todo robô obedece ordens que estão especificadas em um pro- 
grama... armazenado dentro dele [...] alguém teve que escrever esse programa. Alguém com inteli- 
gência para detalhar a tarefa [...] para aprender qual é o vocabulário do robô ... para dar ordens 
para o robô usando uma linguagem que o robô entenda... usando os tipos de instruções sequência- 
repetição-condicional [...] o programa que alguém com inteligência para compreender o que tem que 
ser feito, e com o conhecimento para descrever o que tem que ser feito de modo que o robô obedeça, 
escreveu. 
E o que foi mesmo que a gente fez na seção 1.1? Volte lá e reveja, por favor. 
Pois é: a gente, com nossa inteligência, partiu da tarefa que o robô tem que realizar e detalhou 
todas as atividades que o robô tem que fazer! É verdade que, nesse caso, a gente tinha o vídeo 
para nos apresentar o que o robô tem que fazer. Mas, se não fosse o vídeo, teríamos uma 
especificação da tarefa a ser realizada, i.e., do problema que o robô deveria resolver. 
Vamos observar que, com nossa inteligência: 
• com base na especificação do problema, a gente decompôs a tarefa em subtarefas e deta- 
lhou cada subtarefa; 
• com base na tarefa e nas subtarefas, a gente entendeu as ações que o robô deveria realizar 
e identificou padrões que se repetem (por exemplo, desviar de obstáculos segue o mesmo 
padrão, independentemente do obstáculo); 
• a identificação dos padrões permitiu que abstraíssemos a tarefa de desviar dos obstáculos 
associados aos dados percebidos pelo robô por meio de seus sensores; 
1.5 Pensamento Computacional 8 
 
 
• a partir dessas abstrações, a gente detalhou as atividades que o robô realiza até chegar 
em uma versão com uma sequência de instruções não ambíguas — que chamamos de 
algoritmo — que é composta por aquele conjunto de três tipos de construções diferentes 
(sequência-repetição-condicional) e pelas funções para as quais o robô foi concebido para 
fazer pelos engenheiros mecânicos e eletrônicos: avançar, aspirar, dar marcha à ré e virar. 
A gente fez tudo isso? 
Releia o parágrafo acima e identifique que a gente utilizou um conjunto de estratégias: 
• decomposição; 
• identificação de padrões; 
• abstração da tarefa e dos dados utilizados; 
• especificação de um algoritmo. 
Reconheceu? 
Então, saiba que, com isso, você já conhece os princípios básicos de programação e do pensa- 
mento computacional, como detalhado na seção 1.5. 
O que falta para programarmos o robô? 
Como vimos, o nosso detalhamento final é o algoritmo que mostra o que o robô tem que fazer 
para aspirar a o chão na presença de obstáculos. Para programar o robô, só precisaríamos de 
conhecimento para dar ordens usando uma linguagem que ele entenda, i.e., para descrever o 
nosso algoritmo na forma de um programa para o robô. 
Entretanto, esse não é o nosso objetivo neste curso. 
Objetivo do nosso curso 
O objetivo deste curso pode ser decomposto em um conjunto de objetivos complementares: 
• Reconhecer que as estratégias que utilizamos acima é comum a muitos problemasque 
enfrentamos no dia a dia; 
• Reconhecer que utilizamos várias dessas estratégias desde que nascemos e aprendemos a 
aprender; 
• Reconhecer que há problemas para os quais conseguimos especificar e executar uma solu - 
ção eficiente, e aprender a descrever essas soluções de modos que outros possam executá-
las; 
• Reconhecer que há problemas para os quais não é possível especificar uma solução efici -
ente, e aprender estratégias para tratá-los. 
 
1.5 Pensamento Computacional 
Adaptando a definição de Wing (2006, 2014), neste curso definimos pensamento computacio- 
nal como o processo de pensamento envolvido na formulação de um problema e na expressão 
de sua solução de tal forma que um agente, humano ou computacional, possa efetivamente 
resolvê-lo. 
O processo de pensamento computacional nos orienta a resolver problemas utilizando quatro 
estratégias para entender e detalhar o que o robô aspirador faz. Essas estratégias são conhecidas 
como os pilares do pensamento computacional: 
1.6 Animação da Joaninha, o robô aspirador 9 
 
 
(1) Decompor o problema; 
(2) Reconhecer padrões recorrentes; 
(3) Abstrair tarefas e seus dados de entrada e saída; 
(4) Explicitar algoritmo que resolve o problema; 
Finalmente, consideramos as tarefas associadas a cada um desses pilares como segue: 
(1) Decompor o problema: 
• Dividir o problema em problemas menores; 
• Construir a solução do problema combinando as soluções dos problemas menores. 
(2) Reconhecer padrões recorrentes: 
• Identificar padrões encontrados em mais que uma parte do problema; 
• Identificar padrões encontrados em outros problemas que se sabe resolver. 
(3) Abstrair tarefas e seus dados de entrada e saída: 
• Listar as tarefas necessárias para resolver o problema, os dados de entrada necessá- 
rios para cada tarefa, e os resultados produzidos por cada tarefa. 
(4) Explicitar algoritmo que resolve o problema: 
• Produzir um algoritmo como uma “sequência de instruções não ambíguas para re- 
solver um problema de forma a produzir, em um período de tempo finito, a saída 
correspondente para qualquer entrada legítima” (LEVITIN, 2008). 
 
1.6 Animação da Joaninha, o robô aspirador 
Que tal vermos nosso algoritmo em ação? Programamos uma animação da Joaninha, o robô 
aspirador, na plataforma Scratch, para isso. Veja o link na Figura 4. A Figura 4 (a) ilustra a tela 
de entrada da animação, para tocá-la, clique na bandeira verde. A animação vai começar e 
você vai ver nossa Joaninha limpando o chão, evitando as paredes e a escada. Uma das telas 
está ilustrada na Figura 4 (b). 
Quer ver o nosso algoritmo? A Figura 5 mostra o programa Scratch que corresponde a ele. 
Observe que as instruções indicadas com anotações se referem ao nosso algoritmo. As demais 
instruções são necessárias para representar a carga inicial da bateria, posicionar a Joaninha no 
centro da sala, e incluir momentos de espera para a gente poder enxergar a animação — senão 
seria rápido demais e a gente nem veria a Joaninha trabalhando. 
Acesse o link para ver animação e analisar o código de sua implementação. 
 
2 Pensamento Computacional aplicado a tarefas rotineiras 
Lembremos que, adaptando a definição de Wing (2006, 2014), neste curso definimos pensa- 
mento computacional como o processo de pensamento envolvido na formulação de um pro- 
blema e na expressão de sua solução de tal forma que um agente, humano ou computacional, 
possa efetivamente resolvê-lo. 
Lembremos também que o processo de pensamento computacional nos orienta a resolver pro- 
blemas utilizando os quatro pilares do pensamento computacional: 
(1) Decompor o problema; 
(2) Reconhecer padrões recorrentes; 
(3) Abstrair tarefas e seus dados de entrada e saída; 
(4) Explicitar algoritmo que resolve o problema. 
10 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 4: Animação da Joaninha, o robô aspirador, programada em Scratch: https://scratch.mit. 
edu/projects/714894474. (a) tela de entrada. (b) uma tela da animação 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 5: Animação da Joaninha, o robô aspirador, programada em Scratch: https://scratch.mit. 
edu/projects/714894474. (a) tela de entrada. (b) uma tela da animação 
https://scratch.mit.edu/projects/714894474
https://scratch.mit.edu/projects/714894474
https://scratch.mit.edu/projects/714894474
https://scratch.mit.edu/projects/714894474
2.1 Contribuições da Ciência da Computação 11 
 
 
 
 
Nesta seção vamos discutir o processo de Pensamento Computacional no contexto de tarefas 
do dia a dia. Primeiro, vamos discutir um aspecto de como a computação pode contribuir para 
problemas de modo geral. Depois, vamos comentar como o processo de Pensamento 
Computacional pode ser aplicado a um conjunto de tarefas: desenhar uma casa, realizar operação 
matemática divisão inteira, redigir um e-mail, e fazer um pudim. 
 
2.1 Contribuições da Ciência da Computação 
A área da Ciência de Computação é nova quando comparada a tantas outras. Entretanto, ela 
é fundamentada em princípios bem estabelecidos de áreas como Matemática e Lógica, como 
observou Wing. 
Uma das principais metas de cientistas de computação é, dado um problema, responder a duas 
perguntas: 
• O quão difícil é resolver o problema? 
• Qual é a melhor forma de resolvê-lo? 
Cientistas da área desenvolveram fundamentos teóricos e técnicas sólidas para oferecer res- 
postas a essas perguntas com precisão. Conhecer alguns desses conceitos permite transformar, 
por exemplo, por redução, transformação ou simulação, um problema aparentemente difícil em 
um que se saiba como resolver. 
 
2.2 Tarefa: Desenhar uma casa 
Consideremos a tarefa de desenhar uma casa com poucos traços, como a ilustrada na Figura 6. 
Vamos supor que temos que ensinar um robô a desenhar a casa. 
Vamos resolver a tarefa utilizando os quatro pilares do pensamento computacional: 
(1) Decompor o problema; 
(2) Reconhecer padrões recorrentes; 
(3) Abstrair tarefas e seus dados de entrada e saída; 
(4) Explicitar algoritmo que resolve o problema.
 
 
 
 
 
 
 
 
 
2.2 Tarefa: Desenhar uma casa 12 
 
 
 
 
Em um primeiro detalhamento, podemos decompor a tarefa toda com conjunto de desenhos, 
cada um correspondendo a uma das porções da casa: 
• Desenhar a parede; 
• Desenhar o telhado; 
• Desenhar a porta; 
• Desenhar a janela. 
Em um segundo detalhamento, podemos decompor o detalhamento da janela: 
• Desenhar o retângulo externo; 
• Desenhar uma linha vertical no meio da largura; 
• Desenhar uma linha horizontal no meio da altura. 
• Desenhar a parede; 
• Desenhar o telhado; 
• Desenhar a porta; 
• Desenhar a janela. 
– Desenhar o retângulo externo; 
– Desenhar uma linha vertical no meio da largura; 
– Desenhar uma linha horizontal no meio da altura. 
A tarefa é simples, e podemos assumir que o nosso robô sabe desenhar um segmento de linha, 
dadas as coordenadas de início e final de um segmento. Com isso, nossa solução está pronta. 
Uma implementação dessa solução, em Scratch, está ilustrada na Figura 7. O desenho está ilus- 
trado na porção Figura 7 (a) e as chamadas para desenhar cada segmento de linha, na Figura 7 (b). 
Acesse o link para ver animação e analisar o código de sua implementação. 
Para desenhar cada forma geométrica em Scratch, temos que desenhar explicitamente cada 
segmento. Você pode verificar como cada parte é desenhada analisando o código na plataforma 
Scratch. Como ilustração, a Figura 8 apresenta o componente que desenha a janela. 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 7: Desenho de uma casa: implementação Scratch https://scratch.mit.edu/projects/ 
716321918 
https://scratch.mit.edu/projects/716321918
https://scratch.mit.edu/projects/716321918
2.3 Tarefa: Realizar operação matemática divisão inteira 13 
 
 
 
 
2.3 Tarefa: Realizar operação matemática divisão inteira 
Consideremos a tarefa de realizar a operação matemática divisão inteira, na qual o quociente 
é calculado apenas em sua parte inteira. O resultado da operação é composto pelosvalores obtidos 
para o quociente e o resto, como ilustrado nas Figura 9. 
Vamos supor que temos que ensinar um robô fazer essa operação. 
Ao decompor a tarefa utilizando os quatro pilares do pensamento computacional, uma primeira 
tentativa de solução seria: 
(1) Obter dividendo; 
(2) Obter divisor; 
(3) Obter maior valor inteiro que, multiplicado pelo divisor, seja menor ou igual ao dividendo 
e atribuir ao quociente; 
(4) Subtrair do dividendo a multiplicação do divisor pelo quociente e atribuir o resultado ao 
resto. 
Essa versão é suficiente para realizar a operação indicada na Figura 9 (a). Entretanto, ela não 
prevê o caso em que um prefixo do dividendo já é suficiente para iniciar a operação, como é o 
caso da Figura 9 (b). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 8: Desenho da Janela: implementação Scratch 
2.4 Tarefa: Redigir um e-mail 14 
 
÷ ÷ 
 
 
 
Assim, uma nova versão se faz necessária: 
(1) Obter dividendo; 
(2) Obter divisor; 
(3) Extrair menor prefixo que seja maior que o divisor; 
(4) Obter número maior inteiro que, multiplicado pelo divisor, seja menor ou igual ao divi- 
dendo e atribuir ao quociente; 
(5) Subtrair do dividendo a multiplicação do divisor pelo quociente e atribuir o resultado ao 
resto. 
Em nossa última versão, o que acontece quando o dividendo é um número muito maior do que 
o divisor? Por exemplo, 54321 43 ou 486 2? Teríamos que incluir, em nossa última versão, uma 
operação do tipo repetição, certo? Fica de exercício alterar nossa última versão para incluir 
essa operação. 
 
2.4 Tarefa: Redigir um e-mail 
Consideremos a tarefa de desenhar um e-mail. Como sempre, vamos desenvolver uma solução 
utilizando os quatro pilares do pensamento computacional. 
Eis nosso primeiro detalhamento: 
• preencher campo destinatário; 
• preencher campo assunto; 
• redigir o conteúdo. 
Um próximo detalhamento seria detalhar o componente de conteúdo: 
• preencher campo destinatário; 
• preencher campo assunto; 
• redigir o conteúdo. 
– escrever saudação; 
– redigir conteúdo; 
– finalizar. 
Um próximo detalhamento pode ser: 
• preencher campo destinatário; 
 
 
 
 
 
 
 
 
 
2.5 Tarefa: Fazer um pudim de leite condensado de micro-ondas 15 
 
 
• preencher campo assunto; 
• redigir o conteúdo. 
– escrever saudação; 
– redigir conteúdo. 
* redigir início; 
* redigir meio; 
* redigir final. 
– finalizar. 
* escrever despedida; 
* escrever assinatura. 
Sabemos que essa é uma tarefa complexa mesmo para nós humanos. Devemos, sim, continuar 
decompondo as tarefas de redigir conteúdo em redigir parágrafos, decompor parágrafos em 
períodos, períodos em orações, e orações em seus componentes de sujeito e predicado. Na re- 
alidade, nós normalmente não realizamos essa tarefa dessa maneira. Esse exercício teve como 
objetivo ilustrar como o processo de decomposição é natural e necessário. 
 
2.5 Tarefa: Fazer um pudim de leite condensado de micro-ondas 
Pudim de leite condensado é uma sobremesa comum em muitos lares brasileiros. Nesta versão, 
faremos um pudim sem calda de caramelo, e vamos assá-lo no micro-ondas. Vamos desenvolver 
uma receita utilizando os quatro pilares do pensamento computacional. 
Eis nosso primeiro detalhamento: 
• Pegar os ingredientes; 
• Colocar os ingredientes no liquidificador; 
• Ligar o liquidificador; 
• Colocar na forma de pudim; 
• Assar no forno de micro-ondas. 
Poderíamos, em um próximo detalhamento, mostrar cada um dos passos: 
• Pegar. 
– Ingredientes; 
– Utensílios. 
• Colocar os ingredientes no liquidificador. 
– o conteúdo de uma lata de leite condensado; 
– duas lata-medida de leite; 
– três ovos. 
• Ligar o liquidificador. 
– tampar o liquidificador; 
– ligar; 
– aguardar estar misturado. 
• Colocar na forma. 
– untar a forma; 
– colocar o conteúdo do liquidificador na forma; 
– fechar a forma com filme plástico. 
• Assar no forno de micro-ondas. 
– colocar a forma no micro-ondas; 
– configurar timer;
16 
 
 
– ligar o micro-ondas. 
Vamos fazer dois exercícios a partir desta última versão? 
Propomos, como primeiro exercício, identificar oportunidades de utilizarmos repetições. 
Propomos, como segundo exercício, alterar os detalhamentos para permitir pudim de outros 
sabores. Por exemplo: 
• Para fazer pudim de café, incluir 2 colheres de sopa de café instantâneo; 
• Para fazer pudim de cacau, incluir 2 colheres de sopa de cacau em pó. 
 
3 Pensamento Computacional aplicando tarefas colaborativas 
Lembremos que, adaptando a definição de Wing (2006, 2014), neste curso definimos pensa- 
mento computacional como o processo de pensamento envolvido na formulação de um pro- 
blema e na expressão de sua solução de tal forma que um agente, humano ou computacional, 
possa efetivamente resolvê-lo. 
 
3.1 Destaques sobre a definição 
Nesta oportunidade, vamos destacar três aspectos dessa definição, destaques esses 
observados por Wing (2006). 
Primeiro, quando dizemos que pensamento computacional é um processo de pensamento, dize- 
mos que é, de fato, um conjunto de atividades mentais. Como vimos na definição dos pilares que 
o fundamentam, são atividades complexas que envolvem decompor o problema, reconhecer 
padrões recorrentes, abstrair tarefas e seus dados de entrada e saída, e explicitar um algoritmo 
que resolve o problema. Vimos vários exemplos nas seções anteriores. 
Outro destaque necessário em relação à definição diz respeito à expressão da solução. Com 
isso, queremos dizer que o processo envolver chegar a uma representação linguística que pos- 
sibilite a comunicação da solução a outros agentes. Vimos, por exemplo, o caso do robô 
aspirador e sua versão Scratch. Vimos também, entre outros, o caso da receita de pudim de leite 
condensado. Esperamos que, da forma que expressamos aquela receita, uma pessoa sem 
experiência em fazer pudins possa preparar, com sucesso, um pudim de leite condensado de 
micro-ondas de vários sabores diferentes. 
O terceiro aspecto a ser destacado diz respeito ao fato de que a solução possa ser obtida de 
modo efetivo. Por efetivo, dizemos que tem que ser ao mesmo tempo eficiente e eficaz. Eficaz, 
por sua vez, implica atingir, sim, o objetivo almejado. Eficiente, por sua vez, implica realizar a 
tarefa com qualidade e sem erros. Portanto, não basta qualquer solução. E não basta realizar 
um trabalho bem feito, mas não chegar a uma solução. 
 
3.2 Uma tarefa colaborativa: grupo prepara um jantar a base de pizzas 
Nesta seção, vamos ampliar nossas discussões iniciais para considerar grupos de agentes en- 
volvidos na solução. Ou seja, em vez de um robô vai aspirar o chão, ou uma pessoa vai fazer 
um pudim, poderíamos ter vários robôs jogando futebol, ou várias pessoas preparando um 
jantar. 
3.2 Uma tarefa colaborativa: grupo prepara um jantar a base de pizzas 17 
 
 
O objetivo desta discussão é destacar o fato de os pilares do pensamento computacional tam- 
bém poderem ser aplicados a tarefas que realizamos em grupo. Vamos decompor a tarefa 
proposta em subtarefas, e exemplificar como funções normalmente associadas a grupos de 
pessoas se aplicam a cada uma das subtarefas. 
O exemplo que discutiremos é a seguinte tarefa colaborativa: um grupo de pessoas deve pre- parar 
um jantar a base de pizzas. Elas combinam o jantar remotamente e encontram-se para preparar 
o jantar. Discutiremos a tarefa em vários níveis, e detalharemos a montagem de uma pizza por 
um grupo de pessoas. Vamos observar as seguintes funções: interação, colaboração, 
compartilhamento, pesquisa, navegação e filtragem. 
Utilizando o pilar de decomposição, podemos decompor a tarefa de preparar o jantar: 
• Definir cardápio; 
• Obter ingredientes; 
• Reunir-se no local do jantar; 
• Montar pizzas; 
• Assar pizzas; 
• Fatiar pizzas. 
Podemos dizer que o grupo de pessoas deve interagir em todas as atividades acima. Caso não 
haja interação desde a primeira subtarefa, o jantar não será realizado de modo efetivo. De fato, 
interação é uma função necessária para colaboraçãoe compartilhamento. 
Já em relação à colaboração, ela é necessária para definir o cardápio para que se chegue a um 
conjunto de sabores de pizza aceitável para todos. Também é necessária na obtenção de 
ingredientes dado que, dividindo essa tarefa entre o grupo, espera-se que a carga fique mais leve 
para cada participante. Colaboração deve ser útil também para a reunião de todos no mesmo 
local, pois seria possível colaborar em decidir um local que seja o melhor possível para todos. 
Colaboração, com certeza, é esperada na hora de montar as pizzas. Assar pode exigir pouco 
desse aspecto, dado que normalmente há apenas um forno disponível. Finalmente, fatiar é uma 
tarefa que exige colaboração no processo, mas também na decisão sobre quantas fatias serão 
feitas em cada pizza, dependendo da demanda pelo sabor correspondente. 
No aspecto de compartilhamento, as pessoas do grupo podem compartilhar receitas e 
ingredientes, compartilhar o meio de transporte para chegar ao local da reunião, e, ainda, 
compartilhar ingredientes e utensílios enquanto montam as pizzas. 
No aspecto de pesquisa, pode-se esperar que pessoas do grupo pesquisem por novos sabores 
para o cardápio, por locais para obter os ingredientes, e melhor rota para todos chegarem ao 
local da reunião. 
Já em relação à navegação, essa função pode apoiar diretamente as atividades de pesquisa de 
modo geral e de chegada ao local da reunião de modo particular. A função de filtragem, por sua 
vez, apoia naturalmente as atividades de definição de cardápio, de obtenção de ingredientes e 
de montagem de uma pizza. Neste último caso, por exemplo, o grupo pode alocar as pessoas 
que vão montar cada pizza pelo interesse de cada uma no sabor em particular. 
3.3 Detalhamento de uma subtarefa: montar uma pizza 18 
 
 
 
 
3.3 Detalhamento de uma subtarefa: montar uma pizza 
Podemos detalhar a subtarefa de montar uma pizza como segue: 
• Pegar ingredientes de acordo com o sabor; 
• Preparar uma massa; 
• Colocar recheio; 
• Colocar cobertura; 
• Disponibilizar pizza montada. 
Esse detalhamento permite ilustrar oportunidades de colaboração e de paralelização. 
Em relação à paralelização, notemos que a atividade Pegar ingredientes de acordo com o sabor 
pode ser realizada em paralelo com Preparar uma massa. 
Relativamente à colaboração, é possível alocar as tarefas a um grupo como segue: uma pessoa 
prepara a massa, outra coloca o recheio (por exemplo, tomates), e outra coloca a cobertura 
(por exemplo, muçarela), o que também exploraria paralelização pois cada pessoa pegaria o 
ingrediente sob sua responsabilidade. 
Finalmente, é natural abstrair essa colaboração pode configurar uma linha de produção, no 
caso grupo montar várias pizzas e não apenas uma. 
Uma implementação da solução de montar uma pizza de modo colaborativo, em Scratch, está 
ilustrada na Figura 10. Acesse o link para ver animação e analisar o código de sua implementação. 
 
Referências 
LEVITIN, A. Introduction to Design and Analysis of Algorithms. 2. ed. Noida: Pearson 
Education India , 2008.
 
 
 
 
 
 
 
 
 
 
 
 
Figura 10: Montar pizza colaborativamente: implementação Scratch https://scratch.mit.edu/ 
projects/714942464 
https://scratch.mit.edu/projects/714942464
https://scratch.mit.edu/projects/714942464
REFERÊNCIAS 19 
 
 
WING, J. M. Computational Thinking. Commun. ACM, 2006. v. 49, n. 3, p. 33–35. 
Disponível em: https://doi.org/10.1145/1118178.1118215. Acesso em: 28 jul. 2022. 
WING, J. M. Computational thinking benefits society. Social Issues in Computing, 2014. 
Disponível em: http://socialissues.cs.toronto.edu/index. html%3Fp=279.html. 
Acesso em: 28 jul. 2022. 
https://doi.org/10.1145/1118178.1118215
http://socialissues.cs.toronto.edu/index.html%3Fp%3D279.html
http://socialissues.cs.toronto.edu/index.html%3Fp%3D279.html
	COM100 – Pensamento Computacional – 2022.3
	1 Introdução
	1.1 Tarefa: aspirar o chão na presença de obstáculos
	Como o robô realiza a tarefa?
	1.2 O poder do conjunto de construções sequência-repetição-condicional
	1.3 Colocando o robô para trabalhar: programa de computador
	1.4 Reflexão e objetivos
	O que falta para programarmos o robô?
	Objetivo do nosso curso
	1.5 Pensamento Computacional
	1.6 Animação da Joaninha, o robô aspirador
	2 Pensamento Computacional aplicado a tarefas rotineiras
	2.1 Contribuições da Ciência da Computação
	2.2 Tarefa: Desenhar uma casa
	2.3 Tarefa: Realizar operação matemática divisão inteira
	2.4 Tarefa: Redigir um e-mail
	2.5 Tarefa: Fazer um pudim de leite condensado de micro-ondas
	3 Pensamento Computacional aplicando tarefas colaborativas
	3.1 Destaques sobre a definição
	3.2 Uma tarefa colaborativa: grupo prepara um jantar a base de pizzas
	3.3 Detalhamento de uma subtarefa: montar uma pizza
	Referências

Continue navegando