Você está na página 1de 117

Lógica e Programação

Aula 01 - Prof. Marcelo Cohen


• Apresentação dos conceitos iniciais para o
entendimento da Computação e
programação
O que você • Apresentação do ambiente de trabalho
vai aprender • Dividida em cinco partes
nessa aula • Introdução
• Solução Computacional de Problemas
• Algoritmos no Mundo Real
• Técnicas para Resolução de Problemas
• Introdução à Programação
• Bibliografia básica
• Livro sobre algoritmos
• Livro sobre programação em Python
O que você vai
precisar para
• Instalação da linguagem Python
acompanhar
• Instalação do Visual Studio Code
essa aula
• Google Colaboratory (ambiente online)
Introdução à Computação
Parte 1 - Introdução
Introdução
• Objetivos:
• Entender o papel de um computador na solução de problemas
• Aprender formas computacionais de pensar
Introdução
• O que um computador faz?
• Faz cálculos
• Lembra do resultado desses cálculos

• Quais cálculos?
• Operações primitivas
• Operações mais complexas
“Calcula”: Velocidade
Quão rápido é um computador?

• Supondo uma lâmpada a 30 cm de uma


mesa
• Quantas operações* um computador faz no
tempo em que a luz leva para chegar à
mesa?
“Calcula”: Velocidade
• Considerando uma CPU moderna de
alto desempenho:

• 4 bilhões de operações por segundo


• Velocidade da luz: 300.000 m/s
• Distância: 0,3 m (30 cm)
0,3
• 𝐷 = 𝑉𝑇 ⇒ 𝑇 = = 0,000001 𝑠
300000

4000 OPERAÇÕES
“Calcula”: Velocidade
Outro experimento:

• Supondo uma bola suspensa a 1 metro do


solo...
• Quantas operações um computador faz no
tempo em que a bola leva para chegar ao
solo?
• Tempo aproximado: 0,4 segundos

1,6 BILHÕES DE OPERAÇÕES


“Lembra”: Armazenamento
Bits e bytes: 1 byte pode armazenar 256 (28) valores diferentes:
0 a 255
“Lembra”: Armazenamento
Medindo o armazenamento:

• 2 sistemas
• Decimal (SI)
• Binário (IEC)
“Lembra”: Armazenamento
O que cabe em Kilobytes?

• 1 kB = 1000 bytes
• Documentos simples (300 kB)
• Planilhas (20-200 kB)
• ...

Autor desconhecido
“Lembra”: Armazenamento
O que cabe em Megabytes?

• 1 MB = 1000 kBytes
• Obra completa de William
Shakespeare (5 MB)
• Fotos digitais (2-4 MB)
• 1 CD-ROM (700 MB)

Ben Sutherland
“Lembra”: Armazenamento
O que cabe em Gigabytes?

• 1 GB = 1000 Mbytes
• 300 músicas em formato MP3 (1 GB)
• 1 disco Blu-Ray (25 GB)
• 1 filme transmitido em alta definição
(4 GB)

CdNomad (Wikimedia Commons)


“Lembra”: Armazenamento
O que cabe em Terabytes?

• 1 TB = 1000 Gbytes
• 1 disco rígido (1-2 TB)
• 500 milhões de páginas de texto (1 TB)
• Pouco mais de 300.000 fotos digitais
(3 MB por foto)
Autor desconhecido (PNGAll.com)
“Lembra”: Armazenamento
O que cabe em Petabytes e Exabytes?

• 1 PB = 1000 TB
• 2000 anos reproduzindo músicas no formato MP3
• Quase 42 mil discos Blu-ray

• 1 EB = 1000 PB
• Tráfego global mensal na Internet em 2004 (1 EB)
• Todas as palavras faladas pela humanidade (5 EB)
“Lembra”: Armazenamento
O que cabe em Zettabytes e Yottabytes?

• 1 ZB = 1000 EB
• Tráfego global mensal na Internet em 2016 (1.2 ZB)

• 1 YB = 1000 ZB
• Mais de 45 trilhões de discos Blu-ray
A Internet em um minuto
• Por que precisamos de unidades de
medida tão grandes?
• Volume de dados produzido pela
humanidade é cada vez maior
• Observe o que acontece em um
minuto na Internet (2022)

Autor desconhecido (LocalIQ.com)


Para Saber Mais

• O que a maioria das escolas não ensina (Code.org)


• Calculadora de base 2
• Conversor de unidades de armazenamento
• Representando números e letras com binário (Crash Course
Computer Science)
• Computadores modernos são muito rápidos
• Preocupação com o armazenamento dos
dados, como, por exemplo o resultado de
Resumo do cálculos
que vimos • Questão cada vez mais relevante
até agora • Grande volume de dados produzido,
armazenado e transmitido todos os dias na
Internet
Introdução à Computação
Parte 2 – Solução Computacional de Problemas
• Computadores modernos são muito rápidos
• Preocupação com o armazenamento dos
dados, como, por exemplo o resultado de
cálculos
Relembrando
o conteúdo do • Questão cada vez mais relevante
vídeo anterior • Grande volume de dados produzido,
armazenado e transmitido todos os dias na
Internet
Conceito

• O que é Computação?
• O que é Conhecimento?
Conceito

• Conhecimento declarativo
• Fatos conhecidos

• Conhecimento imperativo
• “Receitas”, como fazer

• Um exemplo de conhecimento declarativo: afirmação de o que é


necessário para fazer um bolo
Exemplo

• Conhecimento declarativo - “Para fazer um bolo, é preciso


misturar açúcar, farinha, margarina, ovos, leite e fermento”

• É possível usar apenas esse conhecimento para fazer o bolo?


Exemplo

• Conhecimento imperativo - receita para fazer o bolo:


• Bata as claras em neve e reserve
• Misture as gemas, a margarina e o açúcar até obter uma massa
homogênea
• Acrescente o leite e a farinha de trigo aos poucos, sem parar de bater
• Por último, adicione as claras em neve e o fermento
• Despeje a massa em uma forma grande de furo central untada e
enfarinhada
• Asse em forno médio (180° C), pré-aquecido, por 40 minutos
Exemplo

• Conhecimento declarativo (2) - A raiz quadrada de um número x


qualquer é um número y, tal que

𝑦 ∙ 𝑦 = 𝑥2

• É possível usar esse conhecimento para calcular a raiz quadrada?


Exemplo

• Conhecimento imperativo (2) - “receita” para calcular uma raiz


quadrada, atribuída a Heron de Alexandria (Século I):

1. Comece com um “chute”, n


2. Se 𝑛 ∙ 𝑛 é próximo de x, pare e considere que a resposta é n
𝑥
3. Senão, o próximo “chute” será a media entre n e
𝑛
4. Usando esse novo valor, repita o processo a partir do passo 2 até
conseguir um resultado suficientemente próximo

Link para planilha:


Conceito

• Uma receita é o que chamamos de...

ALGORITMO

• É um conjunto de passos para a solução de um problema


• Sequência lógica de instruções
• Instruções devem ser claras e não ambíguas
• Algoritmo deve ser finito
Para Saber Mais

• O que são os algoritmos e como eles aprendem com você


• Conhecimento
• Declarativo x Imperativo

Resumo do • Solução computacional de problemas


que vimos • Baseada em conhecimento imperativo
até agora • Receitas, processos, sequência de ações

• Receita é um algoritmo
• Passos para a solução de um problema
• Sem ambiguidade
• Finito
Introdução à Computação
Parte 3 – Algoritmos no Mundo Real
• Conhecimento
• Declarativo x Imperativo

• Solução computacional de problemas


Relembrando • Baseada em conhecimento imperativo
o conteúdo do • Receitas, processos, sequência de ações
vídeo anterior
• Receita é um algoritmo
• Passos para a solução de um problema
• Sem ambiguidade
• Finito
Exemplo

• Análise de Links

• Algoritmo de “recomendação”
• Amazon, Facebook, NetFlix,
YouTube, …
• Sugere recomendações com
base em interesses comuns dos
usuários

Autor desconhecido (SocioViz.Net)


Exemplo

• Análise de Links

Kohro Shimizu (Medium.com)


Exemplo

• Análise de Links

Madasamy M (Medium.com)
Exemplo

• Compressão de Dados
• Algoritmos essenciais para o uso diário da Internet
• Serviços de streaming de vídeo, música…
• E-mail
• Mensagens instantâneas
• 2 tipos:
• Compressão sem perda (lossless): usada geralmente para arquivos de
texto
• Compressão com perda (lossy): usada geralmente com imagens e vídeos
Exemplo

• Compressão de
Dados
• Compressão de
imagens: JPEG

Anurag Jagetiya (Slideshare)


Exemplo

• Compressão de
Dados
• Compressão de
vídeo: MPEG
• Similar à
compressão de
imagens
• Utiliza o conceito
de redundância
temporal e
espacial
Anurag Jagetiya (Slideshare)
Exemplo Bob
Oi
Codifica
• Criptografia (RSA) Alice!
Chave pública
• Algoritmo essencial para garantir de Alice
a segurança de comunicações
6EB69570
• Criptografia de chave 08E03CE4
assimétrica (ou criptografia de
chave pública)
Alice
Oi
Decodifica
Alice! Chave privada
de Alice
Exemplo

• Hashing Seguro
• Certificação digital
• Utilizado em:
• Navegadores
• E-mail
• Lojas de aplicativos
• Software anti-vírus
• ...

Jeff Atwood (blog)


Exemplo

• Proporcional-Integral-Derivada (PID)
• Utilizado amplamente em controles industriais, piloto automático em
veículos, turbinas de avião…
• Qualquer aplicação que exija controle continuamente modulado

Arturo Urquizo (Wikimedia Commons


Exemplo

• Controle sem PID


• Operação manual

Lee Payne (TechBriefs.com)


Exemplo

• Controle com PID


• Operação automática

Lee Payne (TechBriefs.com)


Exemplo

• PID em ação
• Plataforma pneumática
capaz de equilibrar uma
bola

https://www.youtube.com/watch?v=j4OmVLc_oDw
Para Saber Mais

• Como os algoritmos das redes sociais funcionam?


• Encriptação Assimétrica - Explicada de forma simples
• Certificado Digital (Instituto Nacional de Tecnologia da
Informação)
• Diversos algoritmos são usados no dia-a-dia
• Exemplos:
• Análise de links
Resumo do • Criptografia
que vimos • Compressão de dados
até agora • Hashing seguro
• PID (proporcional-integral-derivada)
Introdução à Computação
Parte 4 – Técnicas para a Resolução de Problemas
• Diversos algoritmos são usados no dia-a-dia
• Exemplos:
• Análise de links
• Criptografia
Relembrando • Compressão de dados
o conteúdo do • Hashing seguro
vídeo anterior • PID (proporcional-integral-derivada)
Técnicas para Resolução de Problemas
• Problemas reais podem nos mostrar formas computacionais de
pensar – pensamento computacional
• Em outras palavras: como usar um computador para resolver
problemas?
• Trabalharemos com diversos problemas conhecidos
Exemplo

• A raposa, o bode e a cenoura


• Problema clássico de “travessia de
rio”
• Atravessar um rio com objetos e seres
vivos, respeitando regras e restrições
diversas
• Um barco transporta apenas um
fazendeiro e outro item
• A raposa e o bode não podem ficar
sozinhos
• O bode e a cenoura não podem ficar
sozinhos
Exemplo

• A raposa, o bode e a cenoura


• Pensando no problema - conhecemos as regras:
• O barco só transporta o fazendeiro e outro item
• A raposa e o bode não podem ficar sozinhos
• O bode a cenoura não podem ficar sozinhos
Exemplo

• A raposa, o bode e a cenoura


• Pensando no problema - quais são as operações possíveis para
resolvê-lo?
• Transportar a raposa para o outro lado do rio
• Transportar o bode para o outro lado do rio
• Transportar a cenoura para o outro lado do rio

• Esse parece um conjunto de operações adequado?


Exemplo

• A raposa, o bode e a cenoura


• Podemos pensar em operações mais genéricas:
• Remar o barco de um lado para o outro do rio
• Se o barco estiver vazio, colocar um item nele
• Se o barco estiver cheio, retirar um item dele

• A solução será descrita por uma sequência de operações desse tipo


Exercício

• A raposa, o bode e a cenoura

• Tente jogar e resolver o problema!


Conceito

• Lições aprendidas:

• É importante formalizar corretamente o problema


• Pensar sobre o problema pode ser tão produtivo quanto pensar sobre
a solução!
Exemplo

• Ordenação de fichas
• Suponha que desejamos ordenar
alfabeticamente 100 fichas de um
cadastro de clientes
• Como fazer?

TheeErin (Flickr.com)
Exemplo

• Ordenação de fichas
• O problema parece muito
complexo
• Mas e se dividirmos em
problemas menores?
• Por exemplo:
• Separar as fichas pela letra inicial do
nome
• Ordenar cada letra separadamente
• Juntar todas as letras no final
TheeErin (Flickr.com)
Conceito

• Lições aprendidas:

• Se um problema é complexo demais, dividi-lo em partes menores


pode nos levar à solução
• Técnica usualmente denominada divisão e conquista
Exemplo

• Sudoku
• Quebra-cabeça numérico
• Objetivo:
• Preencher a grade 9x9 com dígitos
• Cada coluna, linha e área 3x3 em
destaque não pode ter dígitos
repetidos

Sudoku (Wikipedia)
Exemplo

• Sudoku
• Quebra-cabeça numérico
• Objetivo:
• Preencher a grade 9x9 com dígitos
• Cada coluna, linha e área 3x3 em
destaque não pode ter dígitos
repetidos

Sudoku (Wikipedia)
Exemplo

• Sudoku
• Por onde começar?
Exemplo

• Sudoku
• Primeiras tentativas: escolhas mais óbvias
Conceito

• Lições aprendidas:

• Devemos procurar pela parte mais restrita do problema


• Restrições eliminam escolhas
• Sempre começar pelo que for óbvio
Exemplo

• A fechadura alienígena
• Você foi capturado por alienígenas, e a fechadura tem travas que precisam
ser deslocadas da direita para a esquerda
• Há cristais nas travas, que quando alinhados em pares, disparam um alarme
• De cada lado da fechadura há um botão que, pressionado, suprime o alarme
• Porém, há um problema: a distância do lado direito ao esquerdo é de 3
metros – você não consegue ficar pressionando o botão e mover as travas
ao mesmo tempo!
Exemplo

• A fechadura alienígena

trava
Exemplo

• A fechadura alienígena: estado de alarme


Exemplo

• A fechadura alienígena
• Há um conjunto de
combinações limitadas…
• Trava do topo e do meio
ativam o alarme
• Trava do meio e de baixo
também ativam
• Já vimos algo similar?
Exemplo

• A fechadura alienígena
Conceito

• Lições aprendidas:

• O problema parecia completamente novo


• Mas sua solução é idêntica à outro já resolvido
• É fundamental saber reconhecer analogias
Resumo: Técnicas Gerais
1. Sempre tenha um plano
2. Reveja o problema
3. Divida o problema
4. Reduza o problema
5. Procure por semelhanças
6. Comece com o que você sabe
7. Experimente!
1. Sempre tenha um plano
• Nem sempre será o plano correto ou o ideal…
• Mas é um plano (formalização)
• Sem um plano, você está contando com a sorte
• Um plano nos permite ter objetivos parciais
2. Reveja o problema
• O exemplo do jogo da raposa, bode e cenoura:
• O problema parecia difícil…
• Mas ao enxergá-lo de outra forma, a solução se tornou aparente
• Reavaliar um problema pode ser parte do plano!
3. Divida o problema
• Problemas complexos podem ser tratados mais facilmente se
conseguirmos dividi-los em partes mais simples
• Exemplo: como ordenar as 100 fichas de cadastro
4. Reduza o problema
• É possível resolver um problema mais simples,
reduzindo o escopo original ou eliminando
restrições?
• Exemplo: dada uma lista de pontos identificar
os dois que estão mais próximos entre si
• Se for numa linha (1D), ele é mais fácil de resolver?
• Se forem apenas 3 pontos, ele é mais fácil de
resolver?
• Reduzir problemas nos mostra onde ainda
temos dificuldades
5. Procure por semelhanças
• Analogias entre problemas que já resolvemos e um novo
problema
• Mesmo problema, mesma solução (travessia do rio e fechadura
alienígena)
• Problemas diferentes, mas com características similares
• É uma das habilidades mais difíceis para um programador
desenvolver, mas muito importante
6. Comece com o que você sabe
• Soluções parciais podem nos dar ideias para o resto do problema
• Enxergar um progresso real aumenta nossa confiança e
motivação
7. Experimente!
• Tentar coisas e observar os resultados
• Experimentação não é adivinhação!
• Experimentação é um processo controlado
Para Saber Mais

• Pensamento Computacional: Introdução


• Divisão e conquista
• Começar pela parte restrita
Resumo do • Analogias
que vimos • Resumo: Técnicas Gerais
• Formalização
até agora • Rever problemas
• Dividir
• Reduzir
• Analogias
• Começar com o que sabe
• Experimentação
Introdução à Computação
Parte 5 – Introdução à Programação
• Divisão e conquista
• Começar pela parte restrita
• Analogias
Relembrando • Resumo: Técnicas Gerais
o conteúdo do • Formalização
vídeo anterior • Rever problemas
• Dividir
• Reduzir
• Analogias
• Começar com o que sabe
• Experimentação
Programação
• Computador de programa fixo x de programa armazenado
Conceito

• Computador de programa
fixo
• Realiza um conjunto fixo de
tarefas
• Exemplos:
• Computador para calcular raízes
quadradas
• Calculadora
• Computador de Atanasoff e Berry
(1941) – resolvia sistemas de
equações
Britannica.com
Conceito

• Computador de programa
fixo
• Realiza um conjunto fixo de
tarefas
• Exemplos:
• “The Bombe” – Alan Turing, decáda
de 1940 (decodificação do Enigma)

Britannica.com
Conceito

• Computador de programa armazenado

• Uma máquina que armazena e manipula instruções


• Sequência de instruções é o que chamamos de programa
• Armazenada na memória do computador (e em meio externo)
• Um programa especial (interpretador) executa cada instrução em ordem
Conceito

• Programa?

• Algoritmo escrito em uma linguagem de programação


• Interpretado e executado por um computador

• Computadores têm capacidade de interpretação limitada

• Linguagens de programação têm regras e restrições bem definidas


• Interpretação rigorosa e exata
Aspectos de Linguagens de
Programação
• Construções primitivas
• Português: palavras
• Linguagem de programação: números, texto, operadores simples

• Sintaxe: as combinações de palavras ou símbolos que são


aceitas pela linguagem
• Português: “homem cachorro foi” não é sintaticamente válida
• Linguagem de programação: 3.2 + 5 é uma expressão válida (adição de
dois números)
Aspectos de Linguagens de
Programação
• Semântica estática: quais expressões sintaticamente válidas
realmente possuem um significado
• Numa linguagem de programação, “a”+“b” é semanticamente válido,
mas “abc”-3 não é

• Semântica dinâmica: o que acontece na prática ao


executarmos o programa (i.e., quando o computador interpretar
as instruções

• O que pode dar errado?


O que pode dar errado?
• Erros de sintaxe
• Comuns, mas facilmente identificados

• Erros de semântica estática


• Algumas linguagens fazem essa verificação antes, outras fazem no
momento em que executam um programa
• Se não forem detectados, o comportamento pode ser imprevisível
O que pode dar errado?
• Programa não tem erro de semântica, mas o significado (ou
comportamento) não é o esperado?

• Crash (programa pára no meio)


• Não termina (programa “trava”)
• Gera um resultado incorreto
Nosso objetivo!
• Aprender a sintaxe e semântica de uma linguagem de
programação
• Aprender como usar esses elementos para traduzir “receitas” que
resolvem um problema em uma forma que o computador possa
entender
• Formas computacionais de pensar nos permitem usar um
variedade de métodos para resolver problemas
A linguagem Python
• Por que Python?
• Criada em 1991 por Guido van Rossum
• Simples e acessível
• Muito popular
• Usada amplamente em análise de dados, bancos de dados, interfaces com
o usuário, aprendizado de máquina, redes, computação científica,
sistemas web, entre outras aplicações
O que precisamos para utilizá-la?
• Duas alternativas:
• Instalar o ambiente de desenvolvimento no seu próprio computador
• Utilizar um ambiente online
Instalação do ambiente local
• https://python.org/downloads
Ambiente de desenvolvimento
• Sugestão: Visual Studio Code
• Leve, fácil de usar
• Muito popular, extensível
• https://code.visualstudio.com
Configuração do Visual Studio Code
• Clicar em “New file “ e criar um arquivo “teste.py”
Configuração do Visual Studio Code
• Conforme sugestão, instalar a extensão para Python
• As extensões são pacotes que ampliam as funcionalidades do Visual
Studio Code
Digitando o programa de exemplo

print: função para exibir mensagens na tela (saída)


Executando o programa
• Pressione CTRL+F5 (⌘+F5 no macOS)
O que pode dar errado?
• Retire um parêntese do final da linha: erro de sintaxe
O que pode dar errado?
• Acrescente a seguinte linha: erro de execução (crash)
Alternativa: usar um ambiente online
• Há diversos ambientes que
funcionam diretamente no
navegador
• Sugestão: Google Colaboratory
Google Colaboratory
• Como usar?

• Acessar
https://colab.research.google.com/
notebooks/welcome.ipynb?hl=pt-
BR
Google Colaboratory
• Selecionar a opção “Novo
notebook”
• Você precisa estar logado em
uma conta Google, caso não
esteja clique em Fazer login:
Google Colaboratory
• Caso não tenha uma conta
Google, clique em Criar conta e
siga os passos
Google Colaboratory
• Elementos do ambiente:

Célula: onde digitamos texto ou programas


Google Colaboratory
• Elementos do ambiente:

Botões para inserir novas células de código ou texto


Google Colaboratory
• Elementos do ambiente:
Nome do arquivo (formato Jupyter Notebook)
Google Colaboratory
• Elementos do ambiente:

Botão para executar a célula


Google Colaboratory
• Exemplo: um primeiro
programa

Digite o programa acima e pressione o botão para


executar a célula
Google Colaboratory
• Exemplo: um primeiro
programa

Saída do programa (resultado da execução)


Para Saber Mais

• O Jogo da Imitação (filme sobre Alan Turing e o seu papel na


Segunda Guerra Mundial)
• Documentação da linguagem Python
• Google Colaboratory
• Programação de computadores
• Programa fixo
• Programa armazenado
Resumo do • Linguagem de programação
que vimos • Sintaxe
até agora • Semântica estática
• Semântica dinâmica
• Erros de execução
• Instalação local do ambiente Python
• Uso de ambiente online (Google
Colaboratory)
Checkpoints – Aula 1
Checkpoint 1

Considerando o conceito de algoritmo Quais estão corretas?


como solução de um problema a) I
computacional, analise as alternativas b) I e II
abaixo: c) II e III
I. Um algoritmo precisa ser finito, isto é, d) I e III
terminar em um tempo determinado. e) I, II e III
II. Há algoritmos que resolvem um problema,
mas demoram tempo demais.
III. Qualquer problema computacional pode
ser sempre resolvido através de um
algoritmo.
Checkpoint 2

Uma das técnicas mais utilizadas na resolução de problemas se baseia no


princípio de decompor um problema complexo em partes menores, que podem
ser resolvidas com mais facilidade.

Como se denomina essa técnica?


a) Experimentação
b) Analogia
c) Divisão e conquista
d) Formalização
e) Planejamento

Você também pode gostar