Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

COMPUTATIONAL 
THINKING
Roberto E. B. Leminski
1ª Edição, 2022
EAD
Editora Universitária Adventista
Presidente da Divisão Sul-Americana: Stanley Arco
Diretor do Departamento de Educação para a Divisão Sul-Americana: Antônio Marcos da Silva Alves
Presidente do Instituto Adventista de Ensino (IAE), mantenedora do Unasp: Maurício Lima
Secretário do Instituto Adventista de Ensino (IAE), mantenedora do Unasp: Emmanuel Oliveira Guimaraes
Tesoureiro/CFO do Instituto Adventista de Ensino (IAE), mantenedora do Unasp: Gilnei Abreu
Reitor: Martin Kuhn 
Vice-reitor administrativo: Claudio Knoener 
Vice-reitor para educação superior e diretor do campus São Paulo: Afonso Ligório Cardoso 
Vice-reitor e diretor do campus Engenheiro Coelho: Carlos Alberto Ferri 
Vice-reitor para a educação básica e diretor do campus Hortolândia: Henrique Karru Romaneli 
Pró-Reitor Financeiro: Paulo Ricardo Monarin
Pró-reitor de graduação: Edilei Rodrigues de Lames 
Pró-reitor de pesquisa e desenvolvimento institucional: Allan Macedo de Novaes 
Pró-reitor de gestão integrada: Mauricio Guimarães Lima
Pró-reitor de pós-graduação lato sensu: Luis Henrique dos Santos 
Pró-reitor de desenvolvimento espiritual: Wendel Thomaz Lima 
Pró-reitor de educação a distância: Jonas Rafael Nikolay
Conselho editorial e artístico: Dr. Martin Kuhn; Me. Henrique Romanelli; Dr. Afonso Cardoso; Dr. Carlos Ferri; 
Me. Telson Vargas; Dr. Allan Novaes; Dr. Edilei Lames; Me. Wendel Lima; Dr. Evandro Fávero; 
Dr. Vanderlei Dorneles; Dr. Adriani Mili; Dr. Fabio Alfieri; Dra. Silvia Quadros; Esp. Regiane Cardoso de Oliveira; 
Me. Lucas Alves; Dr. Adolfo Suárez; Me. Edilson Valiante; Me. Diogo Cavalcanti
Editor-chefe: Allan Macedo de Novaes
Engenheira de Produção: Rhayane Storch
Responsável editorial pelo EAD: Regiane Cardoso de Oliveira
1ª Edição, 2022
COMPUTATIONAL 
THINKING
Editora Universitária Adventista 
Engenheiro Coelho, SP
Roberto E. Bruzetti Leminskii
Mestrado em Engenharia Elétrica, ênfase 
Microeletrônica pela EPUSP
Campagnoni, Mariana / dos Santos, Diego Henrique Moreira
Formação da identidade profissional do contador [livro eletrônico] / Mariana Campagnoni. -- 1. 
ed. -- Engenheiro Coelho, SP : Unaspress, 2020.
1 Mb ; PDF
ISBN 978-85-8463-172-8
1. Carreira profissional 2. Contabilidade 3. Contabilidade como profissão 4. Contabilidade como 
profissão - Leis e legislação 5. Formação profissional 6. Negócios I. Título.
20-33026 CDD-370.113
Dados Internacionais da Catalogação na Publicação (CIP)
(Ficha catalográfica elaborada por Hermenérico Siqueira de Morais Netto – CRB 7370)
Computational thinking
1ª edição – 2022
e-book (pdf)
OP 00123_185
Coordenação editorial: Lorena Lima Freire 
Preparação:Lorena Lima Freire 
Projeto gráfico: Ana Paula Pirani 
Capa: Jonathas Sant’Ana
Diagramação: Kenny Zukowski
Caixa Postal 88 – Reitoria Unasp
Engenheiro Coelho, SP – CEP 13448-900
Tel.: (19) 3858-5171 / 3858-5172 
www.unaspress.com.br
Editora Universitária Adventista
Validação editorial científica ad hoc:
Sandra Souza Rodrigues
Mestrado em Ciências da Computação pelo ICMC/USP
Editora associada:
Todos os direitos reservados à Unaspress - Editora Universitária Adventista. Proibida 
a reprodução por quaisquer meios, sem prévia autorização escrita da editora, salvo 
em breves citações, com indicação da fonte.
SUMÁRIO
LÓGICA E PENSAMENTO COMPUTACIONAL ........... 13
Introdução ........................................................................................14
Introdução à computação e à programação ...................................16
Bits e Bytes ..............................................................................16
Sistema binário de numeração ...............................................18
Paradigmas de programação ...........................................................22
Linguagens de baixo e alto nível ............................................24
Paradigmas de linguagens de programação ..........................25
Estrutura sequencial ........................................................................33
Algoritmos ..............................................................................33
Implementação de um algoritmo ..........................................36
Tipos de dados e variáveis ...............................................................38
Tipos de dados primitivos .......................................................40
Tipos de dados compostos .....................................................45
Tipagem de uma linguagem de programação ......................48
Entrada e saída de dados ................................................................49
Pseudocódigo ..........................................................................50
Atribuição de dados ................................................................52
Instruções de entrada e saída de dados .................................53
Exemplo de algoritmo ............................................................56
Considerações finais.........................................................................60
Referências .......................................................................................61
ALGORITMOS E LÓGICA DE PROGRAMAÇÃO ......... 65
Introdução ........................................................................................66
Definição de algoritmos e operadores ............................................67
Algoritmos e dados .................................................................67
Variáveis ..................................................................................69
Operadores ..............................................................................70
Formas de representação de um algoritmo ....................................75
Pseudocódigo ..........................................................................76
VO
CÊ
 ES
TÁ
 A
QU
I
Fluxograma .............................................................................78
Exemplo da representação de um algoritmo .........................80
Ferramentas para a construção de algoritmos ................................83
VisuAlg ....................................................................................84
Portugol WebStudio ................................................................85
Lucidchart ...............................................................................86
Pacote Office............................................................................87
Fundamentos de lógica proposicional ............................................87
Um pouco de história ..............................................................88
Proposição ..............................................................................88
Tabela verdade ........................................................................91
Operadores lógicos ..................................................................93
Precedência dos operadores lógicos .......................................98
Equivalência de expressões lógicas .......................................100
Implicação lógica e argumentos ............................................106
VO
CÊ
 ES
TÁ
 A
QU
I
Operadores lógicos e relacionais ....................................................113
Operadores lógicos em condições .........................................115
Operadores Lógicos com mais de duas condições ................117
Precedência entre diferentes operadores ..............................118
Uso de condições em estruturas de seleção ..........................120
Considerações finais........................................................................121
Referências ......................................................................................123
ESTRUTURAS CONDICIONAIS 
E DE REPETIÇÃO ....................................................125
Introdução .......................................................................................126
Estrutura condicional simples ........................................................127
Condições ...............................................................................129
Estrutura se-então .................................................................131
Estrutura se-então-senão ......................................................134
Estruturas condicionais compostas ................................................138
Resumo de operadores lógicos ..............................................139
Condições compostas ............................................................141
VO
CÊ
 ES
TÁ
 A
QU
I
Estruturas condicionais encadeadas...............................................145
Aplicação de condicionais encadeados .................................145
Alguns exemplos de aplicação ..............................................146
Estrutura condicional por seleção ..................................................158
Estruturas de seleção em pseudocódigo ..............................159
Exemplo de uso ......................................................................161
Estrutura condicional com repetição ..............................................163
Estrutura enquanto .........................................................................165
Exemplos de aplicação da estrutura enquanto .....................166
Considerações finais........................................................................176
Referências ......................................................................................178
ESTRUTURAS DE REPETIÇÃO, 
FUNÇÕES E VETORES............................................. 181
Introdução .......................................................................................182
Estrutura de repetição simples .......................................................184
Contadores .............................................................................184
Estrutura de repetição incondicional .....................................188
Acumuladores ........................................................................191
Estruturas de repetição encadeadas ......................................194
Teste de condição no início e no término da iteração ....................196
Estrutura Enquanto com contador .........................................197
Estrutura Repita......................................................................199
Funções e procedimentos ...............................................................202
Funções ..................................................................................205
Procedimentos .......................................................................207
Vetores ....................................................................................209
Aplicação e manipulação de vetores .....................................211
Matrizes ..................................................................................214
Funções para uso com matrizes .....................................................215
Preenchimento da matriz ......................................................216
Exibição da matriz ..................................................................217
Busca na matriz ......................................................................218
Algoritmo Bubble Sort ..........................................................219
Algoritmo com o uso das funções e procedimentos .............223
Considerações finais........................................................................225
Referências ......................................................................................227
EMENTA
Lógica de programação e pensamento 
computacional; princípios de construção 
de algoritmos e procedimentos; 
expressões lógicas e estruturas de 
decisão; estruturas de repetição.
ALGORITMOS E LÓGICA 
DE PROGRAMAÇÃO 
UNIDADE 2
66
COMPUTATIONAL THINKING
INTRODUÇÃO
O desenvolvimento de algoritmos e sua implementação 
computacional é um dos aspectos mais importantes do 
pensamento computacional. Neste livro iremos aprofundar 
o conceito de algoritmo, mostrando suas formas de 
representação e ferramentas para escrevermos e testarmos 
algoritmos sem a necessidade do conhecimento de qualquer 
linguagem de programação.
Além disso, iremos apresentar a lógica matemática, com 
ênfase no subcampo da lógica proposicional. Essa lógica é 
de enorme importância na área da ciência da computação, 
principalmente na programação estruturada, sendo, por esse 
motivo, um dos assuntos principais deste livro. Todo o conceito 
de estruturas de seleção e, em menor grau, de repetição está 
vinculado ao uso de expressões lógicas e seus operadores.
Operadores em geral para uso em algoritmos também é 
um tema que iremos aprofundar aqui, com suas respectivas 
precedências e interações. Isso servirá de prelúdio para um 
estudo futuro de conceitos mais elaborados de programação.
O objetivo desta unidade é o seguinte:Analisar problemas 
computacionais e aplicar conceitos da lógica matemática e da 
programação estruturada para a resolução deles.
67
ALgORITMOS E LógICA DE PROgRAMAçãO 
DEFINIÇÃO DE ALGORITMOS 
E OPERADORES
Neste tópico vamos revisitar rapidamente os conceitos 
de algoritmo, dado e variável para introduzir o conceito de 
operadores, que são um importante recurso empregado no 
desenvolvimento de algoritmos computacionais.
ALGORITMOS E DADOS
Relembremos que um algoritmo, no sentido computacional, 
é um conjunto finito e ordenado de instruções para resolver um 
problema ou executar uma tarefa. O primeiro algoritmo (fora 
da matemática), segundo a definição anterior, é atribuído a Ada 
Lovelace em, 1842, que criou um conjunto de instruções para a 
operação da máquina analítica de Charles Babbage (Manzano, 
2019, p. 33). Assim, um algoritmo precisa seguir uma sequência 
ordenada de cada uma das suas etapas para que a tarefa que ele 
deva executar seja realizada corretamente. Dasgupta (2011, p. 2) 
apresenta em seu prólogo a origem da palavra “algoritmo”:
O meio mais influente de transmissão acabou sendo um livro-
texto, escrito em árabe no século IX por um homem que vivia 
em Bagdá. Al Khwarizmi estabeleceu os métodos básicos para 
68
COMPUTATIONAL THINKING
adicionar, multiplicar e dividir números — até mesmo extrair 
a raiz quadrada e calcular os dígitos de π. Esses procedimentos 
eram precisos, não ambíguos, mecânicos, eficientes, corretos 
— em suma, eram algoritmos, um termo cunhado para 
homenagear o sábio homem, depois que o sistema decimal 
foi finalmente adotado na Europa, após muitos séculos. 
Um algoritmo na ciência da computação envolve o conceito 
de receber, processar e retornar dados. Um dado é a menor 
unidade de informação que contém um significado, não podendo 
ser dividido. Por exemplo, o nome de uma pessoa é um dado, pois 
embora possa ser dividido em nome e sobrenome, essa divisão irá 
retirar o significado e a capacidade do dado de identificar a pessoa 
que tem o nome em questão. A tabela na figura 1 apresenta os 
tipos de dados com os quais iremos trabalhar:
Figura 1 – Principais tipos de dados
DADO DESCRIÇÃO
Inteiro
Utilizado para representar um valor numérico inteiro, positivo ou 
negativo.
Real
Utilizado para representar um valor numérico real (com parte 
fracionária, se aplicável), positivo ou negativo. Pode também 
representar números inteiros.
Lógico Utilizado para armazenar um valor lógico (verdadeiro ou falso).
Caractere ou texto Utilizado para armazenar um único caractere ou um texto (string).
Fonte: elaborada pelo autor.
69
ALgORITMOS E LógICA DE PROgRAMAçãO 
VARIÁVEIS
Conforme bem resume Mokarzel (2008, p. 88), variáveis 
são espaços de memória reservados durante a execução de um 
programa de computador, ou algoritmo computacional para 
armazenar dados: cada variável armazena um dado apenas.Ao se criar uma variável, é necessário atribuir um nome 
a ela. Esse nome será utilizado ao longo do meu algoritmo ou 
programa para referenciar o dado que está armazenado, bem 
como para atribuir um dado à memória do computador. Não 
podemos ter mais de uma variável com o mesmo nome em 
um mesmo algoritmo. O uso de subprogramas e funções pode 
ser uma exceção a essa regra, mas os nomes eventualmente 
repetidos estarão em partes diferentes do meu algoritmo. Uma 
sugestão útil é utilizarmos os nomes das variáveis a nosso 
favor, batizando-as com algo que remeta ao dado que será 
armazenado nela, por exemplo, uma variável para armazenar 
o nome de uma pessoa pode se chamar “nome”, ou “pessoa”, 
ou algo nessa linha. Cada linguagem de programação possui 
suas regras próprias para definição de nomes para variáveis, 
mas usualmente são permitidos letras, números e alguns outros 
poucos caracteres, tais como sublinha, arroba ou cerquilha.
70
COMPUTATIONAL THINKING
Na maioria das linguagens de programação, ao criarmos 
uma variável, é necessário especificarmos o tipo de dado 
que será armazenado nela. Nas linguagens de tipagem forte, 
esse tipo não poderá ser alterado ao longo do algoritmo ou 
programa; nas linguagens de tipagem fraca, o tipo da variável 
será definido por ser conteúdo, podendo ser alterado ao longo 
da execução do programa. O processo de declaração (criação) 
de uma variável será detalhado no tópico seguinte deste livro.
Além das variáveis, algumas linguagens de programação 
também oferecem constantes. Para efeitos práticos, constantes são 
como variáveis em termos de declaração e uso durante o programa, 
com a diferença de não poderem ter seus valores alterados após a 
atribuição deles.
Para manipular variáveis, constantes e valores, as 
linguagens de programação se utilizam dos operadores, que 
serão descritos a seguir.
OPERADORES
Um operador é um elemento de linguagem de 
programação que executa alguma operação sobre uma variável 
ou dado. Essa operação pode ou não alterar um dado ou o valor 
71
ALgORITMOS E LógICA DE PROgRAMAçãO 
armazenado em uma variável. Existem quatro tipos básicos de 
operadores (MANZANO, 2019, p. 53-7):
• atribuição;
• aritméticos;
• relacionais e;
• lógicos.
Iremos detalhar os dois primeiros tipos agora. 
OPERADOR DE ATRIBUIÇÃO
O operador de atribuição, normalmente indicado pelo 
símbolo = (igual) ou pelo símbolo ← (seta para a esquerda), tem 
como função atribuir um valor a uma variável ou constante. Por 
exemplo, variável1 = 10 significa que a variável indicada recebe 
o valor numérico 10. Como reforça Torres (2019, p. 72), sempre 
será uma variável recebendo um valor do tipo adequado.
Apesar de usarmos o sinal de igual, é importante observar que 
não se trata de uma comparação ou uma equação. Esse símbolo 
não possui o mesmo significado de quando é empregado na 
matemática. Neste livro, iremos utilizar a seta (←)como operador 
72
COMPUTATIONAL THINKING
de atribuição, e o sinal de igual (=) será um operador relacional, 
que será apresentado em um tópico mais adiante.
OPERADORES ARITMÉTICOS
Os operadores aritméticos realizam as operações 
aritméticas básicas, da forma como as conhecemos. Porém, 
como em um algoritmo para aplicações computacionais temos 
que especificar cada detalhe para que o computador possa 
executar, alguns cuidados se fazem necessários quanto à 
divisão. A figura 2 apresenta os operadores relacionais com 
suas notações mais utilizadas:
Figura 2- Operadores aritméticos
OPERADOR DESCRIÇÃO
+ - Soma entre dois valores numéricos;
- operador unário de positivo.
- - Subtração entre dois operadores numéricos;
- operador unário de negativo.
* Multiplicação entre dois valores numéricos.
^ Potenciação (eleva um número a outro).
/ Divisão real entre dois valores numéricos
\ ou // Divisão inteira entre dois valores numéricos inteiros.
% ou MOD
Resto da divisão inteira entre dois valores numéricos 
inteiros.
Fonte: elaborada pelo autor.
73
ALgORITMOS E LógICA DE PROgRAMAçãO 
Os dois últimos operadores usualmente 
só podem ser utilizados entre valores 
inteiros embora algumas linguagens de 
programação possuam apenas um operador 
para divisão e o resultado da divisão seja 
definido tendo como base os tipos de dados 
envolvidos na operação. Para ilustrarmos a 
diferença entre eles, vamos supor a divisão 
de 73 por 5:
• 73 / 5 resulta em 14,6;
• 73 / 5 resulta em 14 (apenas 
a parte inteira da divisão);
• 73 MOD 5 resulta em 3 
(resto da divisão inteira).
Como na aritmética usual, temos aqui 
também uma precedência dos operadores 
(SEBESTA, 2011, p. 302).
Assim, a ordem que os operadores 
aritméticos serão executados em uma 
expressão matemática será:
PRECEDÊNCIA
Característica daquilo que vem 
antes, que tem prioridade sobre 
os demais em um grupo.
74
COMPUTATIONAL THINKING
1. operações entre parênteses;
2. potenciação;
3. positivo/negativo;
4. multiplicação, divisão e resto da divisão, na 
ordem em que aparecerem (da esquerda para 
a direita);
5. soma e subtração na ordem que aparecerem 
(da esquerda para a direita).
Vamos dar um exemplo: suponhamos três variáveis 
numéricas A, B e C. A variável A recebe o valor 12, a variável 
B recebe o valor 20 e a variável C será obtida pela fórmula 
. Como temos uma fração, tanto o denominador quanto 
o numerador precisam estar entre parênteses, pois a divisão 
(fração) será a última etapa a ser resolvida. Em algoritmos, 
utilizamos parênteses dentro de parênteses, diferentemente 
da matemática (chaves e colchetes têm outras aplicações na 
maioria das linguagens de programação), mas temos sempre 
que lembrar de fechá-los nas posições certas. Assim, esse trecho 
de algoritmo ficará:
75
ALgORITMOS E LógICA DE PROgRAMAçãO 
A <- 12
B <- 20
C <- (A * (A + 2*B) ^3) / (3* A + 5*B)
Assumimos aqui que as três variáveis foram previamente 
declaradas. Esse processo de escrevermos uma expressão 
matemática em um formato de apenas uma linha é chamado 
de linearização.
FORMAS DE REPRESENTAÇÃO 
DE UM ALGORITMO
Um algoritmo precisa ser representado de uma forma que 
possa ser entendido por quem o lê, além de que favoreça sua 
conversão para uma linguagem de programação. A descrição na 
forma de texto linear em um idioma tem como dificuldade a falta 
de clareza provocada, paradoxalmente, pela riqueza dos idiomas: 
sinônimos, homônimos e outros recursos dos idiomas podem 
gerar dúvidas e ambiguidades na compreensão do algoritmo.
A representação de um algoritmo tem que representar 
adequadamente o fluxo de execução das instruções da estrutura 
sequencial contida em um algoritmo.
76
COMPUTATIONAL THINKING
Assim, formas mais objetivas de representar um algoritmo 
se fazem necessárias. Vamos apresentar duas formas de 
representar um algoritmo:
• pseudocódigo e;
• fluxograma.
PSEUDOCÓDIGO
Como já sabemos, o pseudocódigo (ou português estruturado) 
é uma maneira de representar um algoritmo em uma forma que 
se baseia em versão restrita do idioma, que faz uso de poucas 
palavras, as quais têm um uso muito específico. O formato básico 
de um algoritmo nessa representação é o seguinte:
algoritmo “NOME DO ALGORITMO”
var
DECLARAÇÃO DAS VARIÁVEIS
início
ENTRADA, PROCESSAMENTO E SAÍDA (CORPO DO ALGORITMO)
fim_algoritmo
As principais palavras reservadas – que podem ser 
utilizadas e compreendidas no contexto do pseudocódigo – são: 
77
ALgORITMOS E LógICA DE PROgRAMAçãO 
• algoritmo: indica o início do 
algoritmo como um todo; 
• var: indica o início da declaração das variáveis 
na minha estrutura. Após o nome de cada 
variável, devemos indicar o tipo dela.
• início: marca o ponto onde se inicia a execução 
(entrada-processamento-saída) do algoritmo 
e o fim da declaração das variáveis.
• fim_algoritmo: indica o final do algoritmo 
e da parte referente à execução dele.
• leia (X): recebe um valor externo fornecido 
pelo usuário e o armazena na variável X.
• escreva ( ): escreve (exibe na tela) o que estiver 
entre parênteses, que podeser uma combinação 
de textos e variáveis, separados por vírgula. 
Além dessas palavras reservadas, existem algumas que 
são específicas para determinadas estruturas. As respectivas 
palavras reservadas serão apresentadas quando as estruturas 
forem explicadas.
78
COMPUTATIONAL THINKING
FLUXOGRAMA
O fluxograma é uma forma gráfica de representar um 
algoritmo, fazendo uso de blocos de diferentes formatos que 
representam diferentes operações e etapas dele. A ideia por 
trás de um fluxograma é permitir uma visualização mais fácil 
do algoritmo como um todo, assim renunciamos a alguns 
detalhes. As duas principais diferenças entre um fluxograma e o 
pseudocódigo são:
• No fluxograma usualmente não é apresentada a 
declaração das variáveis. Essas surgirão quando 
forem utilizadas. Isso torna mais difícil compreender 
o tipo de uma variável, bem como a eventual 
variação de seus valores ao longo da execução;
• Saídas de textos não relevantes são omitidas 
como, por exemplo, aquelas que precedem a 
leitura de dados ou que acompanham a saída 
de resultados. Obviamente, saídas de texto 
que têm relevância para o algoritmo, tais 
como mensagens para o usuário acerca do 
processamento ou de resultados, são mantidas.
79
ALgORITMOS E LógICA DE PROgRAMAçãO 
A figura 3 apresenta os elementos fundamentais para a 
construção de um fluxograma, segundo a norma ISO 5807:1985 
(E), conforme apresentado por Manzano (2019, p. 35-36):
Figura 3- Principais elementos de um fluxograma
ELEMENTO DESCRIÇÃO
 
Representa o fluxo da estrutura sequencial.
Indica o início e o término do fluxograma 
(algoritmos com ramificações podem 
ter mais de um bloco desses para indicar 
diferentes términos).
Processamento (atribuição de valores, 
operações aritméticas).
Entrada de dados (genérica).
Saída de dados (genérica).
Fonte: adaptada de Manzano (2019, p. 36).
80
COMPUTATIONAL THINKING
Dentro de cada bloco colocamos a operação 
correspondente. Existem outros blocos para representar 
outros tipos de estruturas que utilizamos, mas esses serão 
apresentados quando a respectiva estrutura for apresentada.
EXEMPLO DA REPRESENTAÇÃO DE UM ALGORITMO
Vamos mostrar um exemplo das duas formas apresentadas 
de se representar um algoritmo. Consideremos o seguinte 
problema: “fazer um algoritmo que receba duas notas de um 
estudante, com seus respectivos pesos, e calcule e apresente 
como saída a média ponderada dessas notas”. Primeiro, 
algumas considerações:
• Variáveis e tipos de dados: temos quatro valores 
numéricos como entradas e um valor que 
será calculado. Assim, precisaremos de cinco 
variáveis numéricas. Por se tratar de notas e 
médias, usaremos o tipo real para todas.
• Entradas e saídas: como visto, serão quatro 
entradas (instrução leia no pseudocódigo e o 
bloco correspondente no fluxograma) e uma 
saída (instrução escreva no pseudocódigo);
81
ALgORITMOS E LógICA DE PROgRAMAçãO 
• Processamento: o processamento será o 
cálculo da média. Lembremos de linearizar 
a equação como visto anteriormente.
Assim, nosso algoritmo ficará, em pseudocódigo, como 
demonstrado abaixo e em fluxograma, como mostrado na 
figura 4.
algoritmo “MEDIA PONDERADA”
var
 nota1, peso1, nota2, peso2, media: real;
início
 escreva (“Entre com a Nota 1: “)
 leia (nota1)
 escreva (“Entre com a Nota 2: “)
 leia (nota2)
 escreva (“Entre com o Peso 1: “)
 leia (peso1)
 escreva (“Entre com o peso 2: “)
 leia (peso2)
 media <- (nota1 * peso1 + nota2 *peso2) / (peso1 + peso2)
 escreva (“A média ponderada é: “, media)
fim_algoritmo
82
COMPUTATIONAL THINKING
Figura 4- Fluxograma do algoritmo de exemplo
Início
nota 1, nota 2,
nota 3, nota 4
media <- (nota 1 * paso 1 + nota 2 * peso 2) / (peso 1 + peso 2)
Média
Fim
Fonte: elaborada pelo autor.
Podemos observar que as diversas saídas de texto 
(as instruções escreva do pseudocódigo) foram omitidas 
no fluxograma. Porém, podemos enxergar a estrutura do 
algoritmo no fluxograma sem a necessidade de lermos cada 
linha, apenas pela observação dos blocos presentes e de 
como eles se conectam.
83
ALgORITMOS E LógICA DE PROgRAMAçãO 
FERRAMENTAS PARA 
A CONSTRUÇÃO DE 
ALGORITMOS
Nas décadas anteriores, a 
representação de algoritmos, seja em 
pseudocódigo ou em fluxograma, era 
realizada no papel. Existiam inclusive 
gabaritos com os blocos para se desenhar 
os fluxogramas.
Atualmente existem diversos recursos 
computacionais que permitem uma 
representação mais fácil e visualmente 
mais elegante e limpa de algoritmos. 
Neste tópico vamos apresentar algumas 
dessas ferramentas. A escolha dos 
recursos aqui apresentados reflete as 
experiências e preferências do autor, 
que não recebeu nenhum patrocínio ou 
bônus pela indicação das ferramentas a 
seguir. Os links e páginas apresentados 
se referem à disponibilidade no momento 
da elaboração deste livro, podendo 
Um fluxograma 
sacrifica 
detalhes na 
representação 
do algoritmo 
para permitir 
uma visão 
mais clara do 
conjunto.
84
COMPUTATIONAL THINKING
estar sujeitos a alterações ou mesmo vir a se tornarem 
indisponíveis no futuro. No entanto, sempre haverá uma 
grande disponibilidade de diferentes ferramentas gratuitas para 
a construção e simulação de algoritmos. 
VISUALG
O VisuAlg é uma ferramenta gratuita para a elaboração 
de pseudocódigo em português, que pode ser instalada em 
qualquer computador com sistema operacional Windows. O 
programa apresenta uma interface muito semelhante a uma 
IDE (Integrated Development Environment, ou ambiente de 
programação integrado), um programa de computador que 
possui um conjunto de ferramentas e recursos para a criação de 
programas de computador em uma linguagem de programação 
mais antiga, e possui um compilador embutido (ferramenta que 
verifica a correção da sintaxe do pseudocódigo).
O VisuAlg é uma ferramenta didática e apresenta várias 
restrições em relação ao uso de estruturas de dados mais 
elaboradas, porém é extremamente útil para a elaboração 
e testes de algoritmos estruturados. A figura 5 apresenta a 
interface típica do VisuAlg:
85
ALgORITMOS E LógICA DE PROgRAMAçãO 
Figura 5 - Interface do VisuAlg
Fonte: elaborada pelo autor.
PORTUGOL WEBSTUDIO
O Portugol WebStudio é uma ferramenta online gratuita 
para escrever em pseudocódigo. Assim, podemos utilizar 
apenas um navegador web para escrever e executar nosso 
algoritmo. Diferente do VisuAlg, que inclui um passo a 
passo dos estados das variáveis, aqui, a janela do navegador 
é dividida apenas entre o pseudocódigo escrito e a saída do 
algoritmo sendo executado.
Uma desvantagem dessa ferramenta é que ela utiliza 
uma variante do pseudocódigo que remete muito à sintaxe da 
86
COMPUTATIONAL THINKING
linguagem C (FEOFILOFF, 2009, p. 130), o que pode causar 
certa dificuldade em um primeiro contato. Porém, os exemplos 
disponíveis que podem ser acessados rapidamente esclarecem 
as características do pseudocódigo utilizado pela ferramenta. 
Você pode acessar em: https://portugol-webstudio.cubos.io/. 
Acesso em: 05 maio 2022.
LUCIDCHART
Lucidchart é uma ferramenta online para a criação de 
fluxogramas. Exige um cadastro e possui uma versão gratuita 
e versões pagas; a diferença está no tamanho dos fluxogramas 
que podem ser elaborados e no espaço de armazenamento 
disponível no site para os fluxogramas elaborados.
Essa ferramenta não possibilita a execução do fluxograma, 
apenas sua elaboração. A interface do tipo “selecione-e-arraste” 
é extremamente intuitiva e fácil de ser utilizada. Fluxogramas 
desenhados nela podem ser exportados em diferentes formatos, 
tais como .pdf e .jpg. Você pode acessar em: https://www.
lucidchart.com/. Acesso em: 05 maio 2022.
https://portugol-webstudio.cubos.io/
https://www.lucidchart.com/
https://www.lucidchart.com/
87
ALgORITMOS E LógICA DE PROgRAMAçãO 
PACOTE OFFICE
O pacote Office, mais especificamente o Microsoft Word e o 
Microsoft PowerPoint, permitem desenhar fluxogramas e integrá-
los em documentos e apresentações. O formato das páginas tornaum pouco difícil elaborar estruturas muito grandes, mas o formato 
“selecione-e-arraste” torna o desenho bastante simples. Para 
desenhar, selecione o menu Inserir > Formas, em que haverá uma 
caixa com os blocos característicos dos fluxogramas.
As versões mais recentes apresentam grades durante o 
posicionamento dos blocos, o que gera um bom alinhamento 
dos blocos e um conjunto visualmente agradável.
FUNDAMENTOS DE 
LÓGICA PROPOSICIONAL
A lógica matemática desempenha um importante papel na 
ciência da computação. Além de termos um próprio paradigma 
de programação, que é a programação lógica (baseado na lógica 
de predicados, e que tem como principais linguagens o Prolog 
e o Planner), temos o uso de expressões lógicas como elemento 
fundamental das estruturas de seleção na programação 
estruturada. Vamos compreender os fundamentos da lógica 
88
COMPUTATIONAL THINKING
proposicional, que é um dos ramos da lógica matemática e sua 
aplicação no pensamento computacional.
UM POUCO DE HISTÓRIA
Como descreve Bispo (2013) em sua introdução, as origens 
da lógica remontam à Grécia Antiga, mais especificamente 
a Aristóteles (384 a.C. – 322 a.C.), que criou os conceitos de 
termo e proposição. Esta Lógica, chamada de lógica clássica, 
era um ramo da filosofia e da retórica e permaneceu quase sem 
alterações até o século 19.
A conexão da lógica clássica com a matemática foi estabelecida 
por George Boole (1815 – 1864) e Augustus De Morgan (1806 
-1871). Um fundamento da lógica clássica que permaneceu 
inalterado na nova lógica, tanto da aristotélica quanto da lógica 
matemática (que também é chamada de lógica boolena ou álgebra 
de Boole, por causa de seu autor) foi o conceito de proposição.
PROPOSIÇÃO 
 Da Silva (2008, p. 3) define incialmente proposição 
“um enunciado ao qual podemos atribuir um valor verdade 
89
ALgORITMOS E LógICA DE PROgRAMAçãO 
(verdadeiro ou falso).” Porém, uma 
proposição não pode ser qualquer 
enunciado que atenda apenas esse 
requisito. Uma proposição não pode 
ser autorreferenciar, por exemplo: “Esta 
proposição não é falsa” não é uma 
proposição, na verdade.
Afirmações indefinidas ou 
incompletas (sem sujeito ou definição 
de tempo ou espaço, como por exemplo 
“choveu lá”), especulações, ordens e 
perguntas também não são proposições. 
Além disso, uma proposição deve atender 
também a dois princípios:
• Princípio do terceiro excluído: 
uma proposição só pode 
ser verdadeira ou falsa, 
não havendo uma terceira 
alternativa possível.
• Princípio da não contradição: 
uma proposição não pode 
ser ao mesmo tempo 
verdadeira e falsa.
Proposição é 
um enunciado 
declarativo ao 
qual podemos 
atribuir um 
valor lógico 
verdadeiro ou 
falso.
90
COMPUTATIONAL THINKING
Isso ficará mais claro com alguns exemplos. São 
proposições:
• A lua é uma estrela. (valor lógico falso)
• 23 = 6. (valor lógico falso)
• O ano 2000 foi bissexto. (valor lógico verdadeiro)
• O estado de Goiás fica na região Centro-
Oeste do Brasil. (valor lógico verdadeiro)
Pelos mesmos princípios, não são proposições:
• Dois mais três mais quatro. (incompleto)
• Estude para a prova! (imperativo)
• Lá faz calor. (indefinido)
• Acho que vou ganhar o sorteio. (especulação)
• Você está bem? (pergunta)
91
ALgORITMOS E LógICA DE PROgRAMAçãO 
IMPORTANTE
A forma mais simples de definir se alguma frase ou afirmação é uma propo-
sição é nos perguntar: “podemos atribuir um valor lógico a essa expressão?”. 
Algumas proposições podem mudar de valor lógico em determinados 
momentos, mas nunca violarão os princípios citados. Por exemplo, o valor 
lógico da proposição “João está em casa neste momento” pode ser verdadeiro 
ou falso em diferentes momentos, mas nunca poderá ser ambos ao mesmo 
tempo ou admitir uma terceira possibilidade, ou ele está, ou não está.
Na lógica matemática, usualmente utilizamos uma letra 
para indicar uma proposição e não precisarmos escrevê-la 
por extenso durante o desenvolvimento e operações com uma 
expressão lógica. Esse ramo da lógica matemática, envolvendo 
apenas proposições como elementos básicos e as operações que 
podemos realizar sobre elas é denominado lógica proposicional.
Considerando que uma proposição possui duas possibilidades 
de valores lógicos, quando agrupamos duas ou mais proposições 
passamos a ter um conjunto maior de combinações. Para 
organizarmos essas combinações, utilizamos a tabela verdade.
TABELA VERDADE
A tabela verdade é uma tabela em que são listadas, para 
um conjunto de proposições, todas suas possíveis combinações 
92
COMPUTATIONAL THINKING
de valores lógicos (verdadeiro ou falso). Usualmente se usam 
as abreviações V para verdadeiro e F para falso. Em outras 
aplicações, como, por exemplo, circuitos digitais, utilizam-se 
respectivamente, 1 e 0 para representar estes valores lógicos.
Cada linha da tabela verdade representa uma diferente 
combinação entre as proposições. O número de linhas de 
uma tabela verdade será 2 elevado ao número de proposições 
presentes na tabela, que é o número de possíveis combinações 
de valores lógicos entre as proposições. A figura 6 mostra 
alguns exemplos de tabelas verdade, para duas e três 
proposições, cobrindo todas as possíveis combinações de 
valores lógicos entre as proposições:
Figura 6 - Exemplos de tabelas verdade (P, Q e R são proposições)
P Q P Q R
F F F F F
F V F F V
V F F V F
V V F V V
V F F
V F V
V V F
V V V
Fonte: elaborada pelo autor
93
ALgORITMOS E LógICA DE PROgRAMAçãO 
Uma expressão lógica é um conjunto de proposições que 
possui um valor lógico único para cada combinação de entradas 
das proposições desse conjunto. As operações lógicas serão 
descritas a seguir.
OPERADORES LÓGICOS
Com vimos anteriormente, um operador é um elemento 
que atua sobre uma entidade (aqui serão as proposições), 
seguindo regras definidas. Na lógica matemática existem 
diversas operações, mas vamos apresentar apenas as mais 
básicas da lógica proposicional, com a definição da operação 
e sua respectiva tabela verdade. Ainda, na lógica matemática, 
existem diversas simbologias para cada operador. Desse modo, 
para simplificar o entendimento, utilizaremos apenas um 
símbolo para cada um deles ao longo de todo o livro. Também 
será fornecida apenas uma explicação muito direta, sem 
maiores detalhes, sobre o funcionamento de cada operador, por 
motivos de concisão. 
NEGAÇÃO
A negação inverte o valor lógico de uma proposição ou 
expressão lógica: verdadeiro se torna falso e vice-versa. A 
simbologia é preceder a proposição ou expressão por um 
94
COMPUTATIONAL THINKING
til (~). A tabela verdade na figura7 ilustra o funcionamento 
desse operador.
Figura 7 - Tabela verdade do operador da negação
P ~P
F V
V F
Fonte: elaborada pelo autor
CONJUNÇÃO (E)
A operação lógica da conjunção, também chamado de E, 
associa duas proposições ou mais entradas na forma p ∧ q (lê-se 
“p e q”). Essa operação somente terá valor lógico verdadeiro 
quando todas as proposições forem verdadeiras. A tabela 
verdade na figura 14 ilustra o funcionamento deste operador.
DISJUNÇÃO (OU)
A operação lógica da disjunção, também chamado de OU, 
associa duas proposições ou mais entradas na forma p ∨ q (lê-se 
“p ou q”). Essa operação somente terá valor lógico falso quando 
todas as proposições forem falsas, sendo verdadeira quando ao 
menos uma das proposições for verdadeira. A tabela verdade 
na figura 8 também ilustra o funcionamento deste operador.
95
ALgORITMOS E LógICA DE PROgRAMAçãO 
DISJUNÇÃO EXCLUSIVA (OU EXCLUSIVO)
A operação lógica da disjunção exclusiva, também 
chamado de OU exclusivo, associa duas proposições ou mais 
entradas na forma p (+) q (lê-se “p ou exclusivo q”). Essa 
operação somente terá valor lógico verdadeira quando todas 
as proposições possuírem valores lógicos diferentes, quando 
apenas uma delas for verdadeira, sendo falsa quando as 
proposições possuírem valores lógicos iguais. A tabela verdade 
na figura 8 também ilustra o funcionamento desse operador.
Figura8 - Tabela verdade dos operadores E, OU e OU exclusivo
P Q P ∧ Q P ∨ Q P (+) Q
F F F F F
F V F V V
V F F V V
V V V V F
Fonte: elaborada pelo autor.
IMPLICAÇÃO (SE... ENTÃO)
A operação lógica da implicação, também chamado de Se... 
Então, associa duas proposições ou mais entradas na forma p 
→ q (lê-se “se p, então q”). Esse formato pode passar a falsa 
impressão de que a proposição q é consequência da proposição 
p, porém não é esse o funcionamento desse operador. O real 
significado é que a ocorrência da proposição q é condição 
96
COMPUTATIONAL THINKING
necessária para a ocorrência da proposição p. Ou seja, p não 
pode ocorrer (ser verdadeiro) se q não ocorrer (também ser 
verdadeiro). Isso é contraintuitivo, sendo diferente de como 
usamos a expressões “se” e “então” tanto no nosso idioma 
quanto em linguagens de programação. Um exemplo: na 
lógica matemática, a frase “se está chovendo, então assisto TV” 
significa “se eu estiver assistindo TV, pode estar chovendo”; 
assim, não pode estar chovendo se eu não estiver assistindo TV.
Essa operação somente terá valor lógico falso se a primeira 
proposição for verdadeira e a segunda proposição for falsa, 
sendo verdadeira nos demais casos. É importante observar 
que é o único dos operadores lógicos que não é comutativo. 
A tabela verdade na figura 9 ilustra o funcionamento desse 
operador. Percebam a presença de duas colunas, com o mesmo 
operador e os operadores em ordem diferente para ilustrar a 
não-comutatividade do operador.
DUPLA IMPLICAÇÃO (SE-E-SOMENTE-SE)
A operação lógica da dupla implicação, também chamado 
de equivalência ou Se-e-seomente-se, associa duas proposições 
ou mais entradas na forma p ↔ q (lê-se “p se e somente se 
q” ou “p equivale a q”). Nesse operador, estabelece-se uma 
relação de condição necessária e suficiente entre as duas 
proposições: a ocorrência de uma delas (ser verdadeira) 
97
ALgORITMOS E LógICA DE PROgRAMAçãO 
implica automaticamente na ocorrência da outra (também ser 
verdadeira). Assim, essa operação somente terá valor lógico 
verdadeira quando ambas as proposições possuírem valores 
lógicos iguais (ambas verdadeiras ou ambas falsas), sendo falsa 
quando as proposições possuírem valores lógicos diferentes 
(uma verdadeira e outra falsa). A tabela verdade na figura 9 
também ilustra o funcionamento desse operador. É importante 
observar que esse operador é o inverso do operador Ou 
Exclusivo: (p (+) q) = ~( p ↔ q).
Figura 15 - Tabela verdade dos operadores Se... Então e Se-e-somente-se
P Q P → Q Q → P P ↔ Q
F F V V V
F V V F F
V F F V F
V V V V V
Fonte: elaborada pelo autor.
NA PRÁTICA
Os operadores lógicos são também utilizados na eletrônica. Em circuitos 
lógicos digitais, temos as portas lógicas, que são componentes que executam 
exatamente as operações lógicas dos operadores da negação, conjunção, 
disjunção e disjunção exclusiva, e as negações desses três últimos. Essas 
sete portas lógicas, quando combinadas, possibilitam a construção de quase 
qualquer circuito eletrônico para executar operações lógicas. 
98
COMPUTATIONAL THINKING
PRECEDÊNCIA DOS OPERADORES LÓGICOS
Assim como ocorre com os operadores aritméticos, também 
existe uma precedência para os operadores lógicos. Quando 
houver uma expressão lógica com diversos operadores, a ordem 
de resolução deles será a seguinte:
1. operações entre parênteses, se houver;
2. negação;
3. e;
4. ou e ou exclusivo, na ordem (da esquerda 
para a direita);
5. se... então;
6. ee-e-somente-se.
Vamos dar um exemplo: considere a expressão lógica S = 
~a ↔ b ∨ c. A ordem de resolução, pelas regras de precedência, 
será:
1. negação de a;
99
ALgORITMOS E LógICA DE PROgRAMAçãO 
2. b ou c;
3. não-a se, e somente se, b ou c.
A tabela verdade para essa expressão está na figura 10 a 
seguir:
Figura 10- Tabela verdade para a expressão S = ~a ↔ b ∨ c
a b c ~a b ∨ c ~a ↔ b ∨ c
F F F V F F
F F V V V V
F V F V V V
F V V V V V
V F F F F V
V F V F V F
V V F F V F
V V V F V F
Fonte: elaborada pelo autor.
100
COMPUTATIONAL THINKING
Ou seja, a expressão lógica S será 
verdadeira para apenas quatro das oito 
combinações possíveis das entradas a, b e 
c.
EQUIVALÊNCIA DE EXPRESSÕES 
LÓGICAS
Duas expressões lógicas são 
equivalentes se apresentam as mesmas 
proposições e têm como resultado o 
mesmo valor lógico para cada uma das 
possíveis combinações das proposições 
que as compõem.
Tendo em vista que a dificuldade de 
resolução (construção da tabela verdade) 
de uma expressão lógica é proporcional 
ao número de operadores presentes, 
é interessante, sempre que possível, 
substituir uma expressão lógica mais 
complexa por uma mais simples (com 
menor quantidade de operadores).
Qualquer 
expressão 
lógica possuirá 
infinitas outras 
expressões 
lógicas 
equivalentes.
101
ALgORITMOS E LógICA DE PROgRAMAçãO 
Existe um conjunto de regras denominado leis da lógica. 
Essas regras não são exatamente leis no sentido utilizado 
na física, mas sim uma lista de equivalências mais comuns 
entre expressões lógicas: uma expressão pode ser substituída 
por outra que resultará no mesmo valor lógico de saída, 
para quaisquer combinações de entradas. Obviamente, essas 
equivalências são de mão dupla, podendo uma expressão ser 
substituída por qualquer outra equivalente.
Antes de apresentarmos as leis da lógica, precisamos 
definir duas terminologias referentes a expressões lógicas:
• • Tautologia: uma expressão lógica é chamada 
de tautologia quando todas as suas saídas 
são verdadeiras, para quaisquer combinações 
possíveis de valores lógicos das proposições que a 
compõe. Por exemplo, p  ~p é uma tautologia;
• • Contradição: uma expressão lógica é chamada 
de contradição quando todas as suas saídas são 
falsas, para quaisquer combinações possíveis de 
valores lógicos das proposições que a compõe. 
Por exemplo, p  ~p é uma contradição.
102
COMPUTATIONAL THINKING
Vamos agora listar as leis da lógica, com seus respectivos 
nomes e quais equivalências elas representam. As letras p, q 
e r representam proposições. Aqui, é interessante fazer duas 
observações: algumas leis apresentam mais de uma equivalência 
sob o mesmo nome; e o símbolo ≡ significa “equivalência”.
• Lei idempotente: p ∧ p ≡ p e p ∨ p ≡ p
• Lei da absorção: (p ∨ q) ∧ p p e (p ∧ q) ∨ p ≡ p
• Lei da negação: ~(~p) ≡ p
• Lei da implicação: p → q ≡ ~p ∨ q
• Lei da equivalência: p ↔ q ≡ (p → q) ∧ (q → p)
• Lei contrapositiva: p → q ≡ ~q → ~p 
• Lei associativa: (p ∧ q) ∧ r ≡ p ∧ (q ∧ r)
e (p ∨ q) ∨ r ≡ p ∨ (q ∨ r)
• Lei de DeMorgan: ~(p ∨ q) ≡ ~p ∧ ~q 
e ~(p ∨ q) ≡ ~p ∨ ~q
103
ALgORITMOS E LógICA DE PROgRAMAçãO 
• Lei distributiva: p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r) 
e p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r)
• Lei da identidade: p ∧ T ≡ p e p ∨ C ≡ p, 
onde T representa uma tautologia e 
C representa uma contradição.
• Equivalência do ou exclusivo: p (+) q ≡ p ↔ q 
e p (+) q ≡ (~ p ∧ q) ∨ (~ q ∧ p)
AGORA É COM VOCÊ
Todas essas substituições podem ser demonstradas por meio da construção 
das respectivas tabelas verdade para cada uma delas. Não temos espaço neste 
livro para essa demonstração, mas sugerimos que você realize cada uma delas. 
Nesse processo de demonstração, é possível identificar outras equivalências 
entre expressões lógicas? Lembre-se que as leis listadas são apenas os casos 
mais comuns de equivalências, pois existem infinitas.
Uma observação importante: se analisarmos a equivalência 
do ou exclusivo, a lei da implicação e a combinação dessa 
última com a lei da equivalência, podemos observar que é 
possível representar qualquer expressão lógica por meio de 
apenas três operadores. 
104
COMPUTATIONAL THINKING
Vamos dar um exemplo: considere a expressão lógica ~x ∨ 
~(y ∨ z ∧ ~z). Analisemos passo a passo:
• z ∧ ~z é uma contradição. Assim, a expressão 
fica ~x ∨ ~(y ∨ C). C indica uma contradição;
• Aplicando a lei da identidade, o termo 
dentro dos parênteses é equivalente a y. 
Assim, a expressão fica ~x ∨ ~y;• Por fim, aplicamos a lei de DeMorgan, 
e a expressão se torna ~(x ∧ y).
Podemos observar que a proposição z não tem efeito na 
saída da expressão lógica. Apenas x e q influenciam a saída da 
expressão (saída é a coluna que corresponde à expressão final). A 
figura 11 apresenta as tabelas verdade para ambas as expressões, 
demonstrando a equivalência.
Figura 11 - Tabelas verdade para as expressões ~x ∨ ~(y ∧ z ∨ ~z) e ~(x ∧ y) 
x y z ~z z ∧ ~z (y ∨ z ∧ ~z) ~(y ∨ z ∧ ~z) ~x ~x ∨ ~(y ∨ 
z ∧ ~z)
F F F V F F V V V
F F V F F F V V V
F V F V F V F V V
105
ALgORITMOS E LógICA DE PROgRAMAçãO 
x y z ~z z ∧ ~z (y ∨ z ∧ ~z) ~(y ∨ z ∧ ~z) ~x ~x ∨ ~(y ∨ 
z ∧ ~z)
F V V F F V F V V
V F F V F F V F V
V F V F F F V F V
V V F V F V F F F
V V V F F V F F F
x y z x ∧ y ~(x ∧ y)
F F F F V
F F V F V
F V F F V
F V V F V
V F F F V
V F V F V
V V F V F
V V V V F
Fonte: elaborada pelo autor
Por fim, nem sempre é possível obter uma expressão 
equivalente mais simplificada para dada expressão: expressões 
com dois ou três operadores muitas vezes já são a expressão mais 
simples para uma dada saída. Sempre que não conseguirmos 
visualizar qual lei da lógica empregar para simplificar, existe a 
possibilidade de que a expressão não possa ser simplificada.
106
COMPUTATIONAL THINKING
IMPLICAÇÃO LÓGICA E ARGUMENTOS
Uma estrutura argumentativa, ou simplesmente 
argumento, envolve um conjunto de duas ou mais expressões 
lógicas no qual uma delas (e apenas uma) é dependente, 
ou consequência das demais. O objetivo de um argumento 
é que essa expressão consequente (denominada conclusão) 
seja sustentada ou provada pelas demais expressões lógicas 
(denominadas premissas) na estrutura. A intenção é que as 
premissas forneçam uma base para se possa demonstrar ou 
sustentar a conclusão do argumento (Bispo, 2013, p. 32). 
Caso as premissas sustentem a conclusão, dizemos que a 
conclusão é uma implicação lógica das premissas (Lipschutz, 
2013, p. 75). Uma conclusão será consequência de um conjunto 
das premissas se, para todos os casos em que todas as premissas 
forem verdadeiras, a conclusão também é. Nesse caso, dizemos 
que o argumento é válido; caso contrário, o argumento é 
inválido, o que também é chamado de falácia.
Quando um argumento é apresentado na forma de texto, 
usualmente a conclusão está evidenciada por meio de alguma 
expressão que indique a ideia de consequência: portanto, 
consequentemente, assim sendo etc. A resolução de um 
107
ALgORITMOS E LógICA DE PROgRAMAçãO 
argumento consiste em verificar a validade dele, de acordo com 
as seguintes etapas:
1. identificar as premissas e a conclusão;
2. identificar as proposições que compõem as 
expressões lógicas identificadas no passo 
anterior;
3. construir as expressões lógicas em notação 
formal (com o uso dos operadores lógicos);
4. montar uma tabela verdade contendo as pre-
missas e a conclusão;
5. se em todas as linhas da tabela em que todas 
as premissas forem verdadeiras a conclu-
são também for verdadeira, o argumento é 
válido. No caso de não haver nenhuma linha 
da tabela verdade para a qual todas as pre-
missas sejam verdadeiras, o argumento será 
automaticamente falso, independetemente 
dos valores lógicos da conclusão.
108
COMPUTATIONAL THINKING
Vamos a um exemplo. Consideremos o argumento: “Se o 
destinatário não estava em casa, a encomenda não foi entregue. 
O destinatário estava em casa. Assim sendo, a encomenda foi 
entregue.” Podemos observar com facilidade que temos duas 
premissas (“se o destinatário não estava em casa, a encomenda 
não foi entregue” e “O destinatário estava em casa”) e a 
conclusão (“a encomenda foi entregue”).
A etapa seguinte é identificar as proposições. Temos duas 
proposições:
E: a encomenda foi entregue.
D: o destinatário estava em casa.
Agora montemos as expressões lógicas, utilizando os 
operadores lógicos. O símbolo ∴ significa “consequentemente”, 
e é colocado antes da conclusão, para identificá-la:
D → E
D
∴ E
Agora montamos a tabele verdade, sendo interessante, 
para facilitar a visualização, agrupar as premissas no final, 
mesmo que elas sejam uma das proposições básicas (nesse caso, 
109
ALgORITMOS E LógICA DE PROgRAMAçãO 
simplesmente copiamos a coluna correspondente), conforme 
mostrado na figura 12:
Figura 12 - Tabelas verdade para o argumento
PREMISSAS CONCLUSÃO
Linha D E D → E D E
1 F F V F F
2 F V V F V
3 V F F V F
4 V V V V V
Fonte: elaborada pelo autor
Buscamos na tabela verdade todas as linhas nas quais todas 
as premissas são verdadeiras: no caso do exemplo, apenas a 
linha 4. Se a conclusão for verdadeira em todas essas linhas, o 
argumento será válido. Assim, o argumento apresentado no 
exemplo é válido.
SILOGISMOS
Um caso particular de argumento recebe o nome de 
silogismo. Para que um argumento seja um silogismo, ele deve 
apresentar as seguintes características:
• um silogismo terá sempre duas premissas;
110
COMPUTATIONAL THINKING
• deve haver três proposições, cada uma delas 
presente duas vezes nas três expressões que 
compõem o argumento (uma mesma proposição 
não pode aparecer duas vezes na mesma expressão, 
seja em uma premissa ou na conclusão).
Esse tipo de estrutura argumentativa remete à lógica 
clássica, que era um ramo da filosofia e da retórica. O conceito 
de silogismo era um dos fundamentos da lógica postulada por 
Aristóteles (384 a.C. — 322 a.C.) que, como vimos no início 
deste tópico, era a única forma de lógica até o século 19.
Um exemplo de silogismo: “se o regulamento está 
incompleto, então ele será atualizado. O regulamento não 
pode ser atualizado sem convocar uma assembleia. Assim, 
uma assembleia será convocada se e somente se o regulamento 
estiver incompleto”. Identificamos as duas premissas (“se o 
regulamento está incompleto, então ele será atualizado” e 
“o regulamento não pode ser atualizado sem convocar uma 
assembleia”) e a conclusão (“uma assembleia será convocada 
se e somente se o regulamento estiver incompleto”). A próxima 
etapa é identificar as proposições. Se o argumento estiver na 
forma de texto, muitas vezes precisaremos adequar os tempos 
verbais, mas sem comprometer a ideia de cada expressão lógica:
111
ALgORITMOS E LógICA DE PROgRAMAçãO 
I : o regulamento está incorreto
A : o regulamento é atualizado
C : uma assembleia é convocada
Recomenda-se, para maior flexibilidade, colocar os verbos 
das proposições no presente do indicativo.
Assim, o argumento ficará:
I → A
~A ∧ ~C
∴ C ↔ I
Podemos observar que esse argumento satisfaz todas as 
condições para ser um silogismo. A resolução de um silogismo 
se dá da mesma forma que a de um outro argumento. A figura 
13 mostra a tabela verdade correspondente a esse argumento:
Figura 13 - Tabelas verdade para o silogismo
PREMISSAS CONCLUSÃO
Linha I A C I → A ~A ∧ ~C C↔ A
F F F V V V
F F V V F F
F V F V F F
F V V V F V
V F F F V V
112
COMPUTATIONAL THINKING
PREMISSAS CONCLUSÃO
Linha I A C I → A ~A ∧ ~C C↔ A
V F V F F F
V V F V F F
V V V V F V
Fonte: elaborada pelo autor
Podemos ver que as duas premissas do silogismo são 
verdadeiras apenas na linha 1 da tabela verdade. Como a 
conclusão também é verdadeira nessa linha, concluímos que o 
silogismo é válido.
SAIBA MAIS
Existem, além da lógica matemática clássica que esta-
mos apresentando aqui, diversas outras lógicas que sur-
giram no século 20, que são chamadas de lógicas não 
clássicas. Duas delas merecem ser mencionadas por 
possuírem grande importância na ciência da computa-
ção: a lógica Fuzzy (ou lógica nebulosa) e a lógica para-
consistente. De forma muito resumida, na lógica Fuzzy, 
uma proposição não está restrita a verdadeiro (1) e falso 
(0), podendo assumir diferentes valores nesse intervalo 
(por exemplo, 0,5 ou 0,8); e a lógica paraconsistente pos-
sui um terceiro estado lógico além desses dois, que é a 
indefinição ou desconhecido.
113
ALgORITMOS E LógICA DE PROgRAMAçãO 
OPERADORES LÓGICOS E RELACIONAIS
Uma coisa muito importante emlógica de programação é o 
conceito de condição. Condições são comparações entre conjuntos 
de valores ou variáveis que retorna um valor lógico. Essas 
condições são elementos-chave de estruturas condicionais, que são 
um dos pilares da programação estruturada.
Para estabelecer uma condição, utilizamos os operadores 
relacionais.
OPERADORES RELACIONAIS
Os operadores relacionais comparam matematicamente 
um par de valores (ou o resultado de um par de operações) e 
retornam um valor lógico. Essa comparação precisa ser feita entre 
dados de um mesmo tipo (algumas linguagens de programação, 
por exemplo, não permitem a comparação entre valores inteiros 
e reais, apesar de ambos serem dados numéricos). Existem seis 
operadores relacionais, apresentados na tabela da figura 14 A 
notação apresentada é a utilizada no pseudocódigo.
Figura 14 - Operadores relacionais
OPERADOR DESCRIÇÃO
= É igual a
<> É diferente de
114
COMPUTATIONAL THINKING
OPERADOR DESCRIÇÃO
> É maior que
>= É maior ou igual a
< É menor que
<= É menor ou igual a
Fonte: elaborada pelo autor
Alguns exemplos:
• 123 <> 123 irá retornar o valor lógico falso;
• 123 = “123” irá apresentar um erro (estamos 
comparando valor numérico com caractere);
• “batata” > “banana” irá retornar o valor lógico 
verdadeiro (na comparação de caracteres, 
a maioria das linguagens de programação 
a faz utilizando a ordem alfabética).
Um cuidado que temos que tomar é com as diferenças entre 
maior e maior ou igual (e com menor e menor ou igual). Precisa 
estar bem claro qual o valor envolvido na comparação, pois o 
uso do operador incorreto irá produzir uma resposta errada:
• 100 > 100 irá retornar o valor falso;
115
ALgORITMOS E LógICA DE PROgRAMAçãO 
• 100 >= 100 irá retornar o valor lógico verdadeiro;
• 100 < 100 irá retornar o valor falso;
• 100 <= 100 irá retornar o valor lógico verdadeiro.
Na maioria das linguagens de programação, esses 
operadores podem ser utilizados para estabelecer uma relação 
entre apenas dois elementos (algumas apresentam exceções, 
como, por exemplo, o Python, que permite definir um intervalo 
numérico). Dessa forma, comparações que envolvam três ou 
mais elementos não podem ser realizadas diretamente por meio 
destes operadores apenas.
OPERADORES LÓGICOS 
EM CONDIÇÕES
Uma situação interessante no desenvolvimento de 
algoritmos é a necessidade de verificar se um valor numérico 
pertence ou não a um intervalo pré-definido. Todo intervalo 
possui, obviamente, um limite superior e inferior. Assim, como 
fazer para comparar três valores (o número a ser testados e os 
dois limites do intervalo) utilizando os operadores relacionais? 
116
COMPUTATIONAL THINKING
Uma forma de resolver esse problema é dividindo a condição 
em duas ou mais condições nas quais se comparam apenas dois 
elementos em cada e conectá-las por meios dos operadores lógicos. 
Dos seis operadores lógicos apresentados anteriormente neste 
livro, quatro estão universalmente presentes nas linguagens de 
programação: Negação, E, Ou e Ou Exclusivo.
Assim, suponhamos que queremos testar se a varivel01 
(numérica) está no intervalo delimitado por X e Y, ou seja X 
< variavel01 < Y. Nesse caso, dividimos essa condição em 
duas: (X < variavel01) e (variavel01 < Y), uma para testar se 
variável está acima do limite inferior X e a outra para testar se 
a variável está abaixo do limite superior Y. Precisamos que a 
associação dessas duas condições resulte em verdadeira apenas 
quando ambas forem verdadeiras. Consultando as tabelas 
verdade dos operadores lógicos no tópico “operadores lógicos”, 
verificamos que o operador lógico que satisfaz essa necessidade 
é o operador E. Assim, a condição composta que definirá o 
intervalo será (X < variavel01) E (variavel01 < Y).
O operador lógico Ou é utilizado usualmente quando temos 
duas condições distintas e queremos verificar se ao menos uma 
delas é verdadeira. Por exemplo, para verificarmos, no caso de um 
algoritmo que peça uma senha, se a senha correta já foi digitada ou 
117
ALgORITMOS E LógICA DE PROgRAMAçãO 
se o número máximo de tentativas foi atingido: (senha = “senha 
correta”) OU (tentativas <= “máximo de tentativas”).
Por fim, o operador lógico da negação permite que 
façamos a substituição de uma condição por outra equivalente 
“invertendo” o operador relacional. Por exemplo, as condições 
(A > 2000) e não(A <= 2000) são equivalentes.
OPERADORES LÓGICOS 
COM MAIS DE DUAS CONDIÇÕES
Muitas vezes, precisamos conectar mais do que duas 
condições por meio de operadores lógicos. Considerando 
apenas os operadores lógicos utilizados usualmente 
na programação, podemos expandir suas regras de 
funcionamento da seguinte forma:
• Negação: não se altera, pois atua como um operador 
unário (apenas sobre um único elemento).
• E: a regra continua a mesma quando extrapolada 
para uma quantidade maior de proposições ou 
condições: só será verdadeiro quando todas as 
proposições forem verdadeiras, independente de 
118
COMPUTATIONAL THINKING
quantas sejam; assim, basta que uma das proposições 
associadas seja falsa para que a associação seja falsa.
• Ou: também podemos extrapolar a regra, a 
associação só será falsa quando todas as proposições 
associadas forem falsas, sendo essa verdadeira se 
ao menos uma das proposições for verdadeira.
• Ou Exclusivo: a extrapolação pode ser obtida 
por meio da associatividade (A (+) (B (+) C), 
por exemplo). Uma regra prática: a associação 
será verdadeira quando a quantidade de 
proposições verdadeiras for ímpar. 
PRECEDÊNCIA ENTRE DIFERENTES OPERADORES
Ao escrevermos um algoritmo ou programa de 
computador, é comum termos que lidar com situações em que 
diferentes tipos de operadores interagem na mesma instrução 
ou linha de código. Vimos as precedências dentro de um 
mesmo tipo de operador, agora precisamos saber quais as 
regras de precedência entre os diferentes tipos. Essa ordem de 
resolução de expressões é a seguinte:
1. operações entre parênteses, se houver;
2. operadores aritméticos;
119
ALgORITMOS E LógICA DE PROgRAMAçãO 
3. operadores relacionais;
4. operadores lógicos;
5. operador de atribuição. 
Vamos dar um exemplo: considere o seguinte trecho de um 
algoritmo:
A <- 12
B <-25
C <- 10
D <- (A + B < C * B) E (A + B * C = C + A**2)
Primeiro resolveremos os operadores aritméticos, em 
seguida os operadores lógicos e depois os relacionais. O 
operador de atribuição por fim irá atribuir à variável D um 
valor lógico resultante das operações anteriores. Fazendo 
passo a passo:
D <- (12 + 25 < 10 * 25) E (12 + 25 * 10 = 10 + 12**2)
D <- (12 + 25 < 250) E (12 + 250 = 10 + 144)
D <- (37 < 250) E (262 = 154)
D <- (VERDADEIRO) E (FALSO)
D <- FALSO
120
COMPUTATIONAL THINKING
USO DE CONDIÇÕES EM ESTRUTURAS DE SELEÇÃO
As condições apresentadas neste tópico estão vinculadas 
a um dos pilares da programação estruturada, que são as 
estruturas de seleção (ou estruturas condicionais). Não vamos 
detalhar essa estrutura aqui, apenas faremos uma rápida 
apresentação para demonstrar a aplicação prática dos conceitos 
vistos neste estudo.
Uma estrutura de seleção cria uma ramificação no fluxo de 
um algoritmo baseado no resultado de uma condição: se uma 
condição for verdadeira, um conjunto de instruções será realizado; 
senão um outro conjunto de instruções (diferente) será realizado. 
Em resumo, (em uma versão aproximada de pseudocódigo):
SE (CONDIÇÃO FOR VERDADEIRA)
ENTÃO FAÇA
 (CONJUNTO DE INSTRUÇÕES 1)
SENÃO FAÇA
 (CONJUNTO DE INSTRUÇÕES 2)
Existem outros formatos de estruturas de seleção além 
deste apresentado. O uso de condições também se aplica ao 
outro pilar da programação estruturada que são as estruturas 
de repetição (nesse caso, por exemplo, um conjunto de 
121
ALgORITMOS E LógICA DE PROgRAMAçãO 
instruções será repetido enquanto uma dada condição de 
controle for verdadeira). Ou seja:
ENQUANTO (CONDIÇÃO FOR VERDADEIRA)
REPITA
 (CONJUNTO DE INSTRUÇÕES)
Finalizando, podemos concluir que todosos conteúdos 
apresentados neste livro convergem para um uso concreto na 
lógica de programação e no desenvolvimento de programas 
de computador.
CONSIDERAÇÕES FINAIS
Neste estudo, nos propusemos a desenvolver dois temas 
principais: os fundamentos da lógica de programação e sua 
aplicabilidade em algoritmos, e a lógica matemática.
Referente ao tema de lógica de programação, foi feita 
uma revisão dos conceitos fundamentais de algoritmo, dado 
e variável para, dando continuidade, apresentar o conceito 
de operadores e formas de se representar um algoritmo, com 
ênfase no pseudocódigo e em fluxogramas. Vimos também 
122
COMPUTATIONAL THINKING
diferentes ferramentas, sugeridas pelo autor, para representar, 
implementar e testar algoritmos.
A lógica matemática foi o assunto principal, ocupando 
metade deste livro. Partiu-se de uma breve introdução 
histórica, da definição do que é uma proposição, seguindo com 
a apresentação dos principais operadores lógicos da lógica 
proposicional. O conceito de expressões lógica, que é associação 
de proposições por meio dos operadores foi o tema seguinte, 
com a apresentação das leis das lógicas e algumas regras básicas 
para simplificar essas expressões, por meio da substituição 
por uma expressão equivalente com menos operadores. Além 
disso, foram também mencionados superficialmente alguns 
outros assuntos relacionados à lógica, como sua aplicação em 
circuitos digitais e outros tipos de lógicas diferentes da lógica 
matemática clássica.
O último tópico deste livro fez a ligação entre os dois 
temas, apresentando o uso de operadores relacionais e lógicos 
na construção de condições, que são elementos de algoritmos 
que retornam um valor lógico verdadeiro ou falso. Finalizando, 
fizemos uma breve introdução às estruturas de seleção, que são 
a principal aplicação das condições em algoritmos e programas 
de computador. Esse assunto por si só precisaria de uma 
quantidade de páginas igual ao que utilizamos aqui para ser 
123
ALgORITMOS E LógICA DE PROgRAMAçãO 
adequadamente tratado; assim, este tema será deixado apenas 
na apresentação.
Muito obrigado!
REFERÊNCIAS
BISPO, Carlos Alberto F.; CASTANHEIRA, L. B.; SOUZA 
FILHO O. M. Introdução à lógica matemática. São Paulo: 
Cengage Learning, 2013. 
SILVA, F. S. C.; FINGER, M.; MELO, A. C. V. D. Lógica para 
computação. 2. ed. São Paulo: Cengage Learning Brasil, 2018. 
DASGUPTA, S.; PAPADIMITRIOU C.; VAZIRANI U. 
Algoritmos. Porto Alegre, RS: AMGH, 2011.
FEOFILOFF, P. Algoritmos em linguagem C. Rio de Janeiro: 
Elsevier, 2009.
IDOETA, I. V.; CAPUANO, F. G. Elementos de eletrônica 
digital. São Paulo: Érica, 2019.
124
COMPUTATIONAL THINKING
LIPSCHUTZ, S. LIPSON, M. Matemática Discreta. Porto 
Alegre: Bookman, 2013. 
LUCIDCHART. 2022. Disponível em31 maio 2024.rt.com. 
Acesso em: 05 maio 2022.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Algoritmos: lógica 
para desenvolvimento de programação de computadores. 29. 
ed. São Paulo: Érica, 2019. 
MOKARZEL, F.; SOMA, N. Introdução à Ciência da 
Computação. Rio de Janeiro: Ed ELSEVIER, 2008.
NICOLODI, A. C. Manual do VisuAlg 3.0. 2016. Disponível em: 
https://manual.visualg3.com.br/. Acesso em: 31 maio 2024.
PORTUGOL WEBSTUDIO. 2014. Disponível em: https://
portugol-webstudio.cubos.io. Acesso em: 31 maio 2024.
SEBESTA, R. W. Conceitos de linguagens de programação. 
Porto Alegre: Bookman, 2011. 
TORRES, F. E. et al. Pensamento Computacional. Porto Alegre: 
SAGAH, 2019.VISUALG. VisuAlg 3.0. 2017. Disponível em: 
https://visualg3.com.br/. Acesso em: 31 maio 2024.
	Lógica e pensamento computacional
	Introdução
	Introdução à computação 
e à programação
	Bits e Bytes
	Sistema binário de numeração
	Paradigmas de programação
	Linguagens de baixo e alto nível
	Paradigmas de linguagens de programação
	Estrutura sequencial
	Algoritmos
	Implementação de um algoritmo
	Tipos de dados e variáveis
	Tipos de dados primitivos
	Tipos de dados compostos
	Tipagem de uma linguagem de programação
	Entrada e saída de dados 
	Pseudocódigo
	Atribuição de dados
	Instruções de entrada e saída de dados
	Exemplo de algoritmo
	Considerações finais
	Referências
	Algoritmos e lógica 
de programação 
	Introdução
	Definição de algoritmos 
e operadores
	Algoritmos e dados
	Variáveis
	Operadores
	Formas de representação 
de um algoritmo
	Pseudocódigo
	Fluxograma
	Exemplo da representação de um algoritmo
	Ferramentas para 
a construção de 
algoritmos
	VisuAlg
	Portugol WebStudio
	Lucidchart
	Pacote Office
	Fundamentos de 
lógica proposicional
	Um pouco de história
	Proposição 
	Tabela verdade
	Operadores lógicos
	Precedência dos operadores lógicos
	Equivalência de expressões lógicas
	Implicação lógica e argumentos
	Operadores lógicos e relacionais
	Operadores lógicos 
em condições
	Operadores Lógicos 
com mais de duas condições
	Precedência entre diferentes operadores
	Uso de condições em estruturas de seleção
	CONSIDERAÇÕES FINAIS
	REFERÊNCIAS
	Estruturas condicionais 
e de repetição
	Introdução
	Estrutura condicional simples
	Condições
	Estrutura se-então
	Estrutura se-então-senão
	Estruturas condicionais compostas
	Resumo de operadores lógicos
	Condições compostas
	Estruturas condicionais 
encadeadas
	Aplicação de condicionais encadeados
	Alguns exemplos de aplicação
	Estrutura condicional por seleção
	Estruturas de seleção em pseudocódigo 
	Exemplo de uso
	Estrutura condicional 
com repetição
	Estrutura enquanto
	Exemplos de aplicação 
da estrutura enquanto
	Considerações finais
	Referências
	Estruturas de repetição, funções e vetores
	Introdução
	Estrutura de repetição simples
	Contadores
	Estrutura de repetição incondicional
	Acumuladores
	Estruturas de repetição encadeadas
	Teste de condição no início 
e no término da iteração
	Estrutura Enquanto com contador
	Estrutura Repita
	Funções e 
procedimentos
	Funções
	Procedimentos
	Vetores
	Aplicação e manipulação de vetores
	Matrizes
	Funções para uso com matrizes
	Preenchimento da matriz
	Exibição da matriz
	Busca na matriz
	Algoritmo Bubble Sort 
	Algoritmo com o uso das 
funções e procedimentos
	CONSIDERAÇÕES FINAIS
	REFERÊNCIAS

Mais conteúdos dessa disciplina