Você está na página 1de 26

PENSAMENTO

COMPUTACIONAL
Cursos: Sistemas de Informação e Análise e Desenvolvimento de Sistemas
Turmas: 1º período
Prof.: José Roberto Pelissari Junior
Exemplificando
um algoritmo em
linguagem natural

2
Exemplificando um algoritmo em linguagem
natural
Pode-se utilizar várias ferramentas para representar ou codificar um
algoritmo, e para isso foram desenvolvidas ao longo de décadas
diversas linguagens de programação.
É importante lembrar que para desenvolvermos o pensamento
algorítmico não é preciso aprender a programar, mas conhecer essas
estruturas podem auxiliar no seu desenvolvimento lógico-algorítmico.
Como exemplo, vamos utilizar um algoritmo sugerido por Beecher
(2017), que parte de um processo para criação de um jogo.

3
Exemplificando um algoritmo em linguagem
natural
Para exemplificarmos, será descrita em uma linguagem natural uma
estrutura informal para escrita mais próxima à fala humana, mas que
segue as convenções utilizadas nas linguagens de programação
formais.
Ou seja, a estrutura criada com pseudocódigo pode tranquilamente
ser traduzida para qualquer linguagem de programação real, apenas
substituindo as instruções informais para as respectivas da linguagem.

4
Exemplificando um algoritmo em linguagem
natural
Considere a seguinte lista de regras para o conhecido “jogo da velha".
1. iniciar o jogo
2. iniciar uma repetição:
3. pedir ao jogador para escolher um quadrado
4. se o quadrado escolhido não estiver ocupado, coloque o símbolo
do jogador naquela posição
5. verifique se após a jogada foi formada uma linha
6. se uma linha for formada, o jogador vence e o jogo encerra
7. se uma linha não foi formada e nenhum quadrado estiver
disponível, então o jogo está empatado
8. mude para outro jogador 9. encerrar repetição se o jogador estiver
ganho ou empatado
10. exibir a mensagem 'Fim de jogo'

5
Exemplificando um algoritmo em linguagem
natural
O que podemos inferir desse roteiro de instruções:
 Quando esse algoritmo é executado, o computador passa por
todas as linhas, uma de cada vez (este é um exemplo de
sequência).
 A linha 1 inicializa uma variável chamada “início", logo que o jogo
co meça, e "início" recebe o valor verdadeiro (armazenamento de
estado).
 A linha 2 configura o ponto inicial de uma repetição. Todas as
instruções que devem ser repetidas são recuadas para deixar
mais claro o que está sendo executado.
 A linha 3 solicita uma ação do jogador. A escolha é registrada.
 A linha 4 faz uma seleção com base na escolha do jogador.

6
Exemplificando um algoritmo em linguagem
natural
O que podemos inferir desse roteiro de instruções:
 As linhas 6 e 7 fazem comparações condicionais, alterando o valor
da variável do jogo sob certas condições.
 A linha 9 é o fim da repetição. É feita a escolha de iniciar ou não a
repetição novamente, dependendo da condição associada neste
ponto.

Existem duas possibilidades:


 Verifica que o jogador não conseguiu criar uma linha com três
símbolos iguais. Nesse caso, a execução volta para a linha 3.
 Em algum momento, o jogo foi ganho ou empatado. Em qualquer
dos casos, a repetição encerra e a execução continua na linha 10,
exibindo em seguida a mensagem 'Fim de jogo'.

7
Dificuldades
recorrentes com
lógica e algoritmos

8
Dificuldades recorrentes com lógica e
algoritmos
Por mais simples e rotineiro que os conceitos de pensamento lógico e
pensamento algorítmico possam parecer, nos primeiros contatos com a
estruturação da solução de um problema podem gerar alguns erros ou
até suposições incorretas.
Isso se dá em parte pela forma com que lidamos com essas soluções,
em que normalmente executamos as tarefas sem nos darmos conta.

9
Dificuldades recorrentes com lógica e
algoritmos
Segundo Beecher (2017), é possível que uma pessoa que execute a
mesma tarefa durante anos tenha dificuldade para ensinar outra pessoa
a realizar essa tarefa.
E, ao criarmos um algoritmo para ser executado por um computador,
o problema é maior ainda, pois a falta de uma simples instrução é capaz
de parar o funcionamento de um sistema complexo.

10
Necessidade de clareza e meticulosidade

Clareza é uma palavra-chave no momento de descrever um algoritmo,


pois esta é uma tarefa que exige que o autor seja muito criterioso na
descrição e ordenação das ações.
A falta de uma simples regra pode ocasionar graves problemas de
execução ou respostas erradas após o processamento (MOKARZEL;
SOMA, 2008).
Uma máquina não racionaliza as tarefas que está recebendo, apenas
executa o que foi descrito e da forma que foi descrita.

11
Necessidade de clareza e meticulosidade

Imagine que você esteja explicando para um autômato (um robô, por
exemplo) que pegue um objeto dentro de uma caixa e, caso ela esteja
fechada e o desenvolvedor não tenha explicitado que "se a caixa estiver
fechada, abra a caixa", ele poderá não saber o que fazer e ficará
parado.
Afinal, ele não pensa, apenas executa o que foi instruído.
Também não é possível exigir que ele tenha bom senso, nem que
tente interpretar o que o autor estava tentando explicar, mesmo que a
solução seja óbvia.

12
Necessidade de clareza e meticulosidade

Resumidamente, qualquer instrução que não esteja explícita ou


ambígua não será executada.
Da mesma forma, caso ele receba um comando que irá gerar erro,
como tentar atravessar uma parede, ele tentará fazê-lo de qualquer
forma.
Esta é uma das principais dificuldades para quem começa a
desenvolver seu pensamento computacional e, quanto mais
desenvolvermos a estruturação do raciocínio, cada vez menos esses
erros acontecem.

13
Uso incorreto de operadores lógicos

O uso incorreto de operadores lógicos é bem comum no cotidiano, e


algo aparentemente tão simples como o uso das palavras "e", "ou",
"não" e "então" pode nos surpreender, como, por exemplo, a instrução
"Todos os alunos que nasceram em março e abril podem realizar suas
matrículas no semestre".
Lembre-se que o computador não usará o bom senso e, mesmo que
pareça lógico, o computador irá gerar um erro e não permitirá que
nenhum aluno se matricule.

14
Uso incorreto de operadores lógicos

Mas por quê? Na linguagem natural, ou seja, na forma em que


falamos, pode-se vez ou outra utilizar incorretamente os conectivos "e"
e "ou", e mesmo assim a outra pessoa irá interpretar o que estávamos
tentando dizer. Mas lembre-se que o computador não interpreta, apenas
executa (MADEIRA, 2020).
O operador "e" exige que ambas as condições sejam verdadeiras
para que a ação possa ser executada, considerando como primeira
condição "ter nascido em março", como segunda condição ❝ter nascido
em abril" e como ação a ser executada "realizar a matrícula".

15
Uso incorreto de operadores lógicos

Na forma em que está escrito, o aluno precisaria ter nascido ao


mesmo tempo em março e em abril (ambas necessitam ser
verdadeiras).
Para um humano isso é intuitivo, mas a máquina não saberá o que
fazer e irá falhar. Então, para corrigir o teste, visto que se quer permitir
a matrícula apenas para os alunos nascidos em março e abril, deve-se
substituir o operador "e" pelo operador "ou", e então qualquer aluno
nascido no mês de março ou no mês de abril poderia se matricular
(MOKARZEL; SOMA, 2008).

16
Operadores lógicos são utilizados na avaliação entre duas ou
mais expressões booleanas (lógicas), em que o resultado dessa
avaliação retorna verdadeiro (TRUE) ou falso (FALSE). Os
operadores
Para o booleanos
condicionalmais utilizados
expr1 são:
and expr2:
E (em programação AND):
Apenas quando todas as expressões testadas são
verdadeiras, o resultado será verdadeiro.

17
OU(em programação OR):
Quando ao menos uma das expressões testadas for
verdadeira, o resultado será verdadeiro.

Essas comparações
Para utilizando
o condicional expr1 oroperadores
expr2: lógicos são
frequentemente utilizadas em estruturas condicionais,
indicando que algo deva ser realizado caso a condição seja
satisfeita. A estrutura Se-Então é um exemplo claro dessa
aplicação, e somente Se algo acontecer (aluno ter nascido em
março ou em abril) a instrução pode ser realizada (podem
realizar a matrícula).

18
Testes condicionais incompletos oucom
lacunas não tratadas
Voltando ao último exemplo, pode-se considerar que todos os alunos
nascidos em março ou em abril podem iniciar seu processo de
matrícula, o que está correto em parte.
Mas o que acontece com o restante dos alunos que não nasceram
nestes meses?
É claro que eles devem aguardar o período de acordo com seu mês
de nascimento para a matrícula, mas lembre-se que a máquina não
possui bom senso.

19
Testes condicionais incompletos oucom
lacunas não tratadas
Assim como a ação que deve ser realizada quando o teste lógico
resultar verdadeiro (o aluno que nasceu em março ou abril), também
deve ser descrito o que deve ser feito quando o teste resultar em falso
(para todos os demais meses).
Neste caso, poderia ser apresentada uma mensagem informando ao
aluno que ele deve aguardar, por exemplo. Pode-se completar nossa
estrutura condicional "se-então" incluindo uma cláusula "senão", em que
esta seria executada somente quando a condição testada for falsa
(MOKARZEL; SOMA, 2008).

20
Exemplos de algoritmo em linguagem
natural
Algoritmo EncontrarMaiorNumero
Passo 1: Inicialize uma variável chamada "maior" com o primeiro número da lista.
Passo 2: Para cada número na lista, faça o seguinte:
- Se o número atual for maior que o valor armazenado na variável "maior",
atualize "maior" para ser o número atual.
Passo 3: Após percorrer toda a lista, o valor armazenado na variável "maior" será o
maior número da lista.
Passo 4: Retorne o valor armazenado na variável "maior".

Fim do Algoritmo

21
Exemplos de algoritmo em linguagem
natural
Algoritmo CalcularMediaAritmetica
Passo 1: Inicialize uma variável chamada "soma" com o valor zero.
Passo 2: Inicialize uma variável chamada "contador" com o valor zero.
Passo 3: Para cada número na lista, faça o seguinte:
- Adicione o número à variável "soma".
- Incremente o valor da variável "contador" em 1.
Passo 4: Após percorrer toda a lista, divida o valor da variável "soma" pelo valor da
variável "contador" para calcular a média.
Passo 5: Retorne o valor da média calculada.

Fim do Algoritmo

22
Exemplos de algoritmo em linguagem
natural
• Nos próximos slides temos dois (2) exercícios.
• Entregou os 2 exercícios = 1,0 ponto;
• Entregou 1 exercício = 0,5 pontos;
• Só serão aceitos arquivos recebidos no e-mail até as 20h40min
(09/04/2024) e de alunos que responderam a chamada (presença).
• Poderá ser entregue em formato digital (word, pdf);
• ATENÇÃO: Os algoritmos deverão ser entendíveis.
• Enviar para o e-mail:
jpelissarijunior@prof.unipar.br

23
Exemplos de algoritmo em linguagem
natural
Exercício: Verificação de Palíndromo
1. Desenvolva um algoritmo que verifique se uma palavra inserida
pelo usuário é um palíndromo. Um palíndromo é uma palavra que é
lida da mesma forma de trás para frente, ignorando espaços e
diferenciação entre maiúsculas e minúsculas. Por exemplo, "radar",
"arara" e "Ana" são palíndromos.

24
Exemplos de algoritmo em linguagem
natural
Exercício: Ordenação de Lista
2. Escreva um algoritmo que ordene uma lista de números em ordem
crescente ou decrescente, dependendo da escolha do usuário. O
algoritmo deve solicitar ao usuário que insira uma lista de números
e depois perguntar se deseja ordená-los em ordem crescente ou
decrescente. Em seguida, o algoritmo deve exibir a lista ordenada
de acordo com a escolha do usuário.

25
Referência bibliográfica
SEBRAE. Por dentro do pensamento computacional. Disponível em: https://materiais.cer.sebrae.com.br/por-dentro-
pensamento-computacional. Acesso em: 03 fev. 2024.

SANTOS, Marcelo da Silva dos; MASCHIETTO, Luis Gustavo; SILVA, Fernanda Rosa da; SOARES, Juliane Adélia;
MACHADO, Victor de Andrade; ROSA, Gabriel Augusto; MACEDO, Ricardo Tombesi. Pensamento Computacional.
Porto Alegre: Sagah Educação, 2021. 270 p.

26

Você também pode gostar