read_more
Campus Virtual Fiocruz

Introdução à Análise de Dados para pesquisa no SUS

Módulo 1 | Aula 1
Introdução à Lógica de Programação

Tópico 4

Operadores relacionais, lógicos e estrutura de controle

Por meio de processamento lógico, os computadores são capazes de executar diferentes instruções com base em condições. Portanto, é preciso entender o que são uma condição e uma decisão. Condição é uma obrigação que se impõe se aceita, enquanto decisão é o ato de decidir, ou seja, tomar uma decisão. O ato de decidir está baseado no fato de haver uma condição.

Computacionalmente, uma condição é uma expressão booleana, sendo seu resultado um valor lógico verdadeiro ou falso. Dessa forma, a expressão booleana é alcançada a partir da relação lógica entre dois elementos e um operador relacional. Existem os seguintes operadores relacionais conforme a tabela a seguir.

Operador Operação Símbolo matemático
== igualdade =
> maior que >
< menor que <
!= diferente
>= maior ou igual
<= menor ou igual
Fonte: Menezes (2014. p. 53).

Operadores relacionais

Utilizando-se esses operadores é possível criar condições, tal como comparar se duas notas são iguais, verificar se uma nota é maior ou igual à outra, ou se é menor ou igual a outra variável. Confira a seguir exemplos do uso dos operadores relacionais e suas respostas.

Sintaxe
										
											// Operadores de comparação
											a = 1
											b = 2

											a == b  // a é igual a b? FALSO
											a > b   // a é maior que b? FALSO
											b > a   // b é maior que a? VERDADEIRO
											a != b  // a é diferente de b? VERDADEIRO
										
									

Podemos adicionar comentários no código utilizando símbolos como # ou //, dependendo da linguagem de programação. Comentários são trechos de texto que não são executados, servindo para explicar partes do código e torná-lo mais fácil de entender.

Um algoritmo pode ou não executar todas as linhas de seu código, dependendo das condições específicas que precisamos. Muitas vezes, é necessário controlar vários cenários diferentes, como executar um bloco de código quando uma condição é verdadeira e outro bloco quando a condição é falsa.

Para gerenciar essas situações, usamos estrutura de controle. Uma das estruturas mais básicas e importantes é a estrutura condicional que chamamos de SE, conhecida em inglês como IF.

Essa estrutura permite ao algoritmo tomar decisões com base em condições específicas. A estrutura básica do comando SE é a seguinte:

Sintaxe
										
											SE (condição) {
											   bloco de código A
											}
											   restante do código
										
									

Caso a condição seja falsa, o bloco de códigos A dentro das chaves não seria executado pelo computador e o algoritmo seguiria normalmente para o restante dos códigos fora do SE.

Vamos pensar agora em um caso prático: nosso código deve verificar se o resultado do teste de covid-19 foi positivo ou negativo, de modo que usaremos aqui uma variável chamada resultado, que tem as seguintes categorias: 1 para positivo, 3 para negativo.

Veja o exemplo:

Exemplo de aplicação
										
											// Verificar resultado do teste de COVID-19
											// resultado: 1 = positivo, 3 = negativo

											SE (resultado == 1) {
											   "positivo"
											}
											SE (resultado == 3) {
											   "negativo"
											}
										
									

Podemos deixar esse bloco de códigos acima mais simples, utilizando a condição chamada de SENÃO ou, em inglês ELSE, que pode ser usada quando na lógica do nosso código queremos que execute uma tarefa; caso o resultado do SE seja falso, a condição SENÃO não pode ser usada sozinha, somente junto com a condição SE.

Veja agora como fica o exemplo do código anterior com o uso do SENÃO. Observe que o SENÃO não precisa de uma condição, ele é executado diretamente caso a condicional SE resulte em falso. Logo, no nosso exemplo, se não é positivo, o resultado seria diretamente negativo.

Exemplo de aplicação
										
											// Usando SE-SENÃO para garantir exclusividade
											SE (resultado == 1) {
											   "positivo"
											}
											SENÃO {
											   "negativo"
											}
										
									

Algumas linguagens de programação tratam de forma mais adequada quando precisamos utilizar múltiplos SE para tratar uma lógica. Vamos ver alguns exemplos.

Quando temos que tratar, por exemplo, uma variável chamada tipo, que é o tipo de teste de covid-19 de um dado que tem as seguintes categorias segundo o dicionário de dados 1- PCR/ 2 – Antígeno, e queremos em nosso dado criar os nomes e não os números conforme vêm no dado original, então podemos utilizar SE e SENÃO como vimos anteriormente, ou podemos usar a condição SENÃO SE.

Exemplo de aplicação
										
											// SE aninhado (com indentação excessiva)
											// tipo: 1 = PCR, 2 = Antígeno

											SE (tipo == 1) {
											   "PCR"
											}
											SENÃO {
											   SE (tipo == 2) {
												   "Antígeno"
											   }
											   SENÃO {
												   ""
											   }
											}
										
									

Entretanto, podemos utilizar uma solução mais interessante para esse problema, SENÃO SE. Essa condicional permite utilizar um SENÃO em conjunto com o SE, evitando criar mais níveis de deslocamento desnecessários à direita. Observe que o código a seguir tem o mesmo resultado do anterior, porém tem uma escrita mais simples.

Exemplo de aplicação
										
											// SENÃO SE (código mais limpo e legível)
											// tipo: 1 = PCR, 2 = Antígeno

											SE (tipo == 1) {
											   "PCR"
											}
											SENÃO SE (tipo == 2) {
											   "Antígeno"
											}
											SENÃO {
											   ""
											}
										
									

Operadores lógicos

Até agora utilizamos apenas condicionais simples, com uma única condição. No entanto, é comum que nossos algoritmos se tornem mais sofisticados, exigindo duas ou mais condições. Para isso, precisamos agrupar as operações lógicas, e é aí que entram os operadores lógicos. Vamos explorar os seguintes operadores:

Operador Operação
& E (AND)
| OU (OR)
! NÃO (NOT)

Os operadores lógicos seguem regras baseadas nas tabelas-Verdade.

Nesse contexto, temos operadores unários, como o operador de negação (NOT, "Não" em português), que utiliza apenas um operando. Já os operadores binários, como | (OR, "Ou" em português) e & (AND, "E" em português), utilizam dois operandos.

Tabela-verdade do operador NÃO (NOT), este operador inverte o valor lógico..

Entrada Operador Saída
V NOT F
F NOT V

O operador OU (OR) possui a seguinte tabela-verdade, lembrando que ele é um operador binário. Esse operador retorna VERDADEIRO se pelo menos um dos valores for verdadeiro.

Entrada A Operador Entrada B Saída
V OR V V
V OR F V
F OR V V
F OR F F

O operador E (AND) possui a seguinte tabela-verdade, lembrando que ele é um operador binário. Esse operador retorna VERDADEIRO somente se ambos os valores de entrada forem verdadeiros.

Entrada A Operador Entrada B Saída
V AND V V
V AND F F
F AND V F
F AND F F
Exemplo de aplicação
										
											// Operador E (AND) - todas as condições devem ser verdadeiras
											média = 7
											falta = 4

											SE (média >= 7 & falta <= 3) {
											   Aprovado
											}
											SENÃO {
											   Reprovado
											}
											// Resultado: Reprovado (falta não atende)
										
									

No exemplo anterior utilizamos operadores relacionais e operadores lógicos. Usamos duas condições: uma verifica se a média é maior ou igual a um valor, e a outra verifica se as faltas são menores ou iguais a três. Observe que, para ser aprovado, ao usar o operador "&" (E), ambas as condições devem ser VERDADEIRAS, conforme a tabela-verdade.

Exemplo de aplicação
										
											// Operador OU (OR) - pelo menos uma condição deve ser verdadeira
											média = 7
											falta = 4

											SE (média >= 7 | falta <= 3) {
											   Aprovado
											}
											SENÃO {
											   Reprovado
											}
											// Resultado: Aprovado (média atende)
										
									

Já nesse novo exemplo, usando-se o operador OU "|", conforme a tabela-verdade, basta que uma das condições seja VERDADEIRA para o resultado ser VERDADEIRO. Assim, se o aluno tiver média maior ou igual a 7 OU 3 ou menos faltas, ele será aprovado.