Pensamento computacional
Computacional Thinking¶
Seja bem-vindo à jornada do pensamento computacional!
Hoje, o pensamento computacional é visto não apenas como uma habilidade essencial para aqueles que trabalham em campos relacionados à tecnologia, mas também como uma habilidade valiosa para a resolução de problemas em diversas áreas. A capacidade analítica de compreender problemas e propor soluções sistêmicas é aplicável em muitas áreas, desde a ciência e engenharia até as artes e ciências sociais.
Vamos jogar!¶
O jogo¶
A Torre de Hanói
é um dos mais famosos jogos de Matemática. Ele consiste de uma base contendo três pilares (hastes), em um dos quais está disposta uma torre formada por alguns discos colocados uns sobre os outros, em ordem crescente de diâmetro, de cima para baixo. O número de discos pode variar. Observe a disposição inicial de um jogo com seis discos.
Desafio¶
Transferir todos os discos de um pino para outro qualquer. Tente transferi-los de um pino para outro em apenas 31 movimentos, sendo que você poderá mover apenas um disco por vez.
Regras¶
Warning
Um disco maior nunca poderá ficar em cima de um disco menor.
Jogar¶
Desenvolva uma estratégia para conseguir solucionar com a menor quantidade de movimentos.
Se o jogo não abrir acesse o link: https://www.geogebra.org/m/s5hd5qum
Progress
Continuar...
O que é pensamento computacional?¶
O pensamento computacional é uma forma de abordar problemas e sistemas de uma maneira que um computador poderia entender. Não se trata apenas de programar, mas sim de uma mentalidade que utiliza conceitos fundamentais da ciência da computação para resolver problemas, projetar sistemas e compreender o comportamento humano. Então não relacione pensamento computacional a computador, não necessariamente são utilizados computadores nesse processo. A ideia central é trazer a forma de raciocínio que as máquinas aplicam nos problemas.
Warning
Pensamento computacional não depende computadores e nem de linguagem computacional, logo não se resume a programação ou software ou internet...
Quais são os 4 pilares do pensamento computacional?¶
Para que o pensamento computacional seja aplicado, vamos conhecer os seus 4 pilares.
1. Decomposição¶
- Definição: Dividir um problema complexo em partes menores e mais gerenciáveis.
- Por que é importante?: Ao decompor um problema, podemos focar em solucionar cada parte individualmente, tornando a tarefa global mais simples.
- Exemplo: Ao criar um website, podemos decompor o projeto em partes como design, funcionalidades, conteúdo e otimização para dispositivos móveis.
2. Abstração¶
- Definição: Focar nas informações essenciais de um problema, ignorando detalhes desnecessários.
- Por que é importante?: Ajuda a simplificar problemas complexos, permitindo que nos concentremos nos aspectos mais cruciais.
- Exemplo: Ao desenvolver um aplicativo de transporte, não precisamos saber como um carro funciona internamente, mas sim como ele se move de um ponto a outro.
3. Reconhecimento de Padrões¶
- Definição: Identificar semelhanças ou tendências em problemas ou conjuntos de dados.
- Por que é importante?: Reconhecer padrões nos permite fazer previsões e identificar soluções mais rapidamente.
- Exemplo: Ao analisar dados de vendas, podemos identificar em quais meses as vendas aumentam e planejar estratégias de marketing com base nisso.
4. Algoritmo¶
- Definição: Criar uma série de instruções passo a passo para resolver um problema ou realizar uma tarefa.
- Por que é importante?: Os algoritmos garantem que uma tarefa seja realizada de forma eficiente e correta.
- Exemplo: Ao preparar uma receita, seguimos um algoritmo para garantir que o prato seja feito corretamente.
Como desenvolver o Pensamento Computacional?¶
Desenvolver o pensamento computacional requer prática e imersão. Durante este curso, usaremos Python, uma linguagem de programação poderosa e versátil, como nossa ferramenta principal. Através de exercícios práticos, projetos e discussões em sala de aula, você será desafiado a aplicar os conceitos de pensamento computacional para resolver problemas reais. Encorajamos a colaboração, a experimentação e, acima de tudo, a curiosidade.
Progress
Continuar...
Desafios¶
Assinale o que você entende sobre Decomposição
Assinale o que você entende sobre Reconhecimento de Padrões
Assinale o que você entende sobre Abstração
Assinale o que você entende sobre Algoritmo
Podemos relacionar o mapa do metrô de SP com qual pilar do pensamento computacional?
Progress
Continuar...
Representação de algoritimos¶
Tip
Um algoritmo é, de fato, uma sequência definida de passos ou instruções para resolver um problema ou realizar uma tarefa. Ele serve como um "plano" ou "receita" para uma solução. Um algoritmo não é, por si só, um programa de computador. No entanto, um programa de computador pode ser desenvolvido com base em um ou mais algoritmos. Podemos representar algoritmos por meio de pseudocódigos ou fluxogramas.
Pseudocódigo¶
É uma descrição de alto nível de um algoritmo que usa a estrutura de um programa de computador, mas pode ser lido por humanos. Ele não é escrito em uma linguagem de programação específica, mas sim em uma forma que pode ser facilmente convertida em código real.
Algoritmo CalcularMedia
// Entrada de dados
Ler num1
Ler num2
Ler num3
// Cálculo da média
media <- (num1 + num2 + num3) / 3
// Saída de dados
Escrever "A média é: ", media
FimAlgoritmo
Fluxograma¶
É uma representação gráfica de um algoritmo. Usa símbolos padrão (como retângulos, losangos e ovais) conectados por setas para representar os passos e o fluxo de um algoritmo.
Tip
O objetivo de desenvolvidores de sistemas e profissionais de tecnologia é encontrar algoritimos mais eficientes para resolução do problema.
Question
Assinale a definição correta de um algoritmo:
- Uma linguagem de programação específica.
- Uma sequência definida de passos ou instruções para resolver um problema ou realizar uma tarefa.
- Um programa de computador.
- Uma representação gráfica de um programa.
Answer
Um algoritmo é uma sequência definida de passos ou instruções para resolver um problema ou realizar uma tarefa.
Question
O que é pseudocódigo?
- Um código escrito em uma linguagem de programação específica.
- Uma descrição de alto nível de um algoritmo que pode ser lido por humanos.
- Um tipo de fluxograma.
- Um programa de computador.
Answer
Pseudocódigo é uma descrição de alto nível de um algoritmo que pode ser lido por humanos.
Question
Qual é o objetivo dos desenvolvedores de sistemas e profissionais de tecnologia ao trabalhar com algoritmos?
- Criar fluxogramas.
- Escrever pseudocódigos.
- Encontrar algoritmos mais eficientes para a resolução do problema.
- Aumentar a complexidade do problema.
Answer
O objetivo é encontrar algoritmos mais eficientes para a resolução do problema.
Question
Imagine que você foi contratado para desenvolver um algoritmo que calcule o desconto em uma compra. O desconto é de 10% se o valor da compra for maior que R$100. Dentre os pseudocódigos abaixo, qual deles implementa corretamente essa lógica?
- DescontoA
Algoritmo DescontoA Ler valorCompra Se valorCompra > 100 Então desconto <- valorCompra * 0.10 Senão desconto <- 0 FimSe Escrever "Desconto: ", desconto FimAlgoritmo
- DescontoB
Algoritmo DescontoB Ler valorCompra Se valorCompra < 100 Então desconto <- valorCompra * 0.10 Senão desconto <- 0 FimSe Escrever "Desconto: ", desconto FimAlgoritmo
- DescontoC
Algoritmo DescontoC Ler valorCompra desconto <- valorCompra * 0.10 Escrever "Desconto: ", desconto FimAlgoritmo
- DescontoD
Algoritmo DescontoD Ler valorCompra Se valorCompra > 100 Então desconto <- 0 Senão desconto <- valorCompra * 0.10 FimSe Escrever "Desconto: ", desconto FimAlgoritmo
Answer
O pseudocódigo DescontoA implementa corretamente a lógica de dar 10% de desconto se o valor da compra for maior que R$100.
Question
Você foi solicitado a criar um algoritmo para calcular juros simples. O juro simples é calculado pela fórmula J = P * i * n, onde P é o Capital, i é a taxa de juro e n é o número de períodos. Qual dos pseudocódigos abaixo implementa corretamente essa lógica?
- JuroSimplesA
Algoritmo JuroSimplesA Ler P, i, n J <- P * i * n Escrever "Juros: ", J FimAlgoritmo
- JuroSimplesB
Algoritmo JuroSimplesB Ler P, i, n J <- P + i + n Escrever "Juros: ", J FimAlgoritmo
- JuroSimplesC
Algoritmo JuroSimplesC Ler P, i, n J <- P * i / n Escrever "Juros: ", J FimAlgoritmo
- JuroSimplesD
Algoritmo JuroSimplesD Ler P, i J <- P * i Escrever "Juros: ", J FimAlgoritmo
Answer
O pseudocódigo JuroSimplesA implementa corretamente a fórmula para calcular juros simples.
Question
Seu objetivo é desenvolver um algoritmo que verifique se um número é par. Qual dos pseudocódigos abaixo implementa corretamente essa verificação?
- ParOuImparA
Algoritmo ParOuImparA Ler num Se num / 2 = 1 Então Escrever "Par" Senão Escrever "Ímpar" FimSe FimAlgoritmo
- ParOuImparB
Algoritmo ParOuImparB Ler num Se num MOD 2 = 0 Então Escrever "Par" Senão Escrever "Ímpar" FimSe FimAlgoritmo
- ParOuImparC
Algoritmo ParOuImparC Ler num Se num MOD 2 = 1 Então Escrever "Par" Senão Escrever "Ímpar" FimSe FimAlgoritmo
- ParOuImparD
Algoritmo ParOuImparD Ler num Se num / 2 = 0 Então Escrever "Par" Senão Escrever "Ímpar" FimSe FimAlgoritmo
Answer
O pseudocódigo ParOuImparB verifica corretamente se um número é par ou ímpar.
Progress
Continuar...
O que é um computador?¶
O dicionario talvez defina o termo computador como um “dispositivo eletrônico que é capaz de receber informações (dados) de uma forma particular e de realizar uma sequência de operações [...] para produzir um resultado”. No entanto, a definição original do mesmo termo, em uso do século XVII, é ligeiramente diferente. Refere-se a alguém “que computa” ou uma “pessoa que realiza cálculos matemáticos” – da Wikipedia.
Quando usamos o termo computador
, consideramos sempre a definição mais genérica: qualquer agente processador de informação (ou seja, uma máquina ou uma pessoa agindo mecanicamente se devidamente instruído) que pode fazer cálculos e produzir alguma saída a partir de informações de entrada.
Eniac - um marco na computação.
Tip
Para saber mais sobre a história da computação:
Como um computador computa?¶
O processo de computação envolve a execução de instruções específicas em uma sequência determinada. Estas instruções são fornecidas ao computador na forma de programas. Quando um programa é executado, ele passa por várias etapas:
- Entrada: O computador recebe dados, seja por meio de um teclado, mouse, sensores ou outros dispositivos.
- Processamento: A CPU (Unidade Central de Processamento) processa os dados, executando operações aritméticas e lógicas.
- Armazenamento: Os dados processados podem ser armazenados na memória do computador ou em dispositivos de armazenamento, como discos rígidos.
- Saída: O computador exibe ou transmite os resultados do processamento, seja em um monitor, impressora ou através de sinais para outros dispositivos.
Linguagens naturais vs linguagens de programação¶
Linguagens naturais
são as línguas que as pessoas falam, como inglês, português ou mandarim. Elas evoluíram naturalmente ao longo do tempo e são ricas em nuances, ambiguidades e contextos culturais.
Linguagens de programação
, pelo contrário, são línguas de origem formal. Obrigam a regras sintáticas específicas. Tais regras evitam possíveis afirmações ambíguas, principalmente por restringir a expressividade da linguagem. Portanto, todas as sentenças em tal linguagem estão transmitindo apenas um significado possível.
Em particular, podemos distinguir três macroconjuntos de linguagens de programação:
linguagem de máquina
é um conjunto de instruções que podem ser executadas diretamente pela unidade central de processamento (CPU) de um computador eletrônico. Por exemplo, o código a seguir é o código executável binário (ou seja, uma sequência de 0 e 1) definindo uma função (ou seja, um tipo de ferramenta que recebe algumas entradas e produz algumas saídas) para calcular o n-ésimo número de Fibonacci:
100010110101010000100100000010001000001111111010000000000111011
100000110101110000000000000000000000000000000000011000011100000
111111101000000010011101110000011010111000000000010000000000000
000000000001100001101010011101110110000000100000000000000000000
000010111001000000010000000000000000000000001000110100000100000
110011000001111111010000000110111011000000111100010111101100110
001001110000010100101011101011111100010101101111000011
linguagem de baixo nivel
são linguagens que fornecem um nível de abstração acima da linguagem de máquina. Desta forma, permite escrever programas de uma forma mais inteligível para os humanos. A linguagem mais popular desse tipo é Assembly (ASM). Mesmo que introduzindo símbolos humanamente reconhecíveis, uma linha de código assembly normalmente representa uma instrução de máquina em linguagem de máquina. Por exemplo, a mesma função para calcular o n-ésimo número de Fibonacci é definida em Assembly da seguinte forma:
fib:
mov edx, [esp+8]
cmp edx, 0
ja @f
mov eax, 0
ret
@@:
cmp edx, 2
ja @f
mov eax, 1
ret
@@:
push ebx
mov ebx, 1
mov ecx, 1
@@:
lea eax, [ebx+ecx]
cmp edx, 3
jbe @f
mov ebx, ecx
mov ecx, eax
dec edx
jmp @b
@@:
pop ebx
ret
linguagem de alto nivel
são caracterizados por uma forte abstração da especificabilidade da linguagem de máquina. Em particular, pode usar palavras de linguagem natural para construções específicas para serem fáceis de usar e entender por humanos. De um modo geral, quanto mais abstração das linguagens de programação de baixo nível for fornecida, mais compreensível será a linguagem. Por exemplo, no exemplo a seguir, mostramos como usar a linguagem de programação C para implementar a mesma função de antes:
unsigned int fib(unsigned int n) {
if (n <= 0)
return 0;
else if (n <= 2)
return 1;
else {
unsigned int a,b,c;
a = 1;
b = 1;
while (1) {
c = a + b;
if (n <= 3) return c;
a = b;
b = c;
n--;
}
}
}