Olá, caro(a) aluno(a)! Espero que esteja gostando deste incrível mundo da programação e do desenvolvimento de softwares. Na aula passada, vimos um pouco dos operadores aritméticos e lógicos que nos auxiliam a resolver problemas matemáticos em nossos algoritmos. Nesta lição, você verá mais uma categoria de operadores que são os relacionais. Estes operadores resultam em um valor lógico verdadeiro ou falso que serão utilizados na avaliação das condicionais.
Estruturas condicionais simples e compostas nos permitem alterar o fluxo de execução de um algoritmo baseado na avaliação de algum argumento lógico. Deste modo, podemos, por exemplo, criar um algoritmo que, dependendo da resposta do usuário, ele realiza uma ação diferente.
Com os conhecimentos que adquiriu até esta aula, você será capaz de criar algoritmos sequenciais, isto é, a partir de uma entrada realiza o processamento dos dados e retorna um resultado.
Em todos os algoritmos que criamos até agora, não conseguimos impor uma condição para realizar alguma instrução. Porém, muitas vezes, precisaremos adicionar uma condição em um algoritmo que permita a alteração do fluxo, dependendo da escolha do usuário. Um algoritmo é um conjunto de etapas ordenadas que levam você de um ponto de partida conhecido a um ponto final previsível. Uma condicional é um tipo de passo em um algoritmo onde uma decisão deve ser tomada. Os computadores seguem instruções lógicas e precisam saber como lidar com diferentes decisões para que os programas possam prosseguir, independentemente do resultado dessas seleções.
Pare por alguns segundos e tente pensar em algum algoritmo que seria necessário colocar condições no código. Conseguiu imaginar alguma situação? Se você parar para analisar, notará que, em diversas situações, precisamos realizar alguma verificação e, a partir desta verificação, somos capazes de escolher a melhor decisão, ou seja, temos um desvio de fluxo.
Podemos dividir as condicionais em duas categorias: as condicionais simples apresentam apenas um caminho que pode ser seguido a partir da decisão, por outro lado, nas condicionais compostas a partir de uma expressão, podemos seguir dois caminhos, um quando o resultado é verdadeiro, e outro quando o resultado é falso.
Pensando em algoritmos, podemos, por exemplo, imaginar um programa que recebe as notas de um aluno e, a partir da média, retorna se eles foram aprovados ou reprovados. Na aula passada, vimos um algoritmo que recebe três notas e retorna qual a média dele. Nesta aula, alteraremos esse algoritmo para que, após calcular a média do aluno, ele defina qual a condição do aluno, sendo elas: aprovado, reprovado.
Antes de iniciar propriamente no uso de condicionais, precisará aprender sobre os operadores relacionais, que serão utilizados dentro das estruturas condicionais para definir qual caminho seguir.
O Quadro 1 apresenta os operadores relacionais existentes no “portugol”. Esses operadores também podem ser encontrados em qualquer linguagem de programação que você utilizar.
Quadro 1 - Operadores Relacionais / Fonte: o autor.
#PraCegoVer: quadro com três colunas e sete linhas. Na primeira linha, em negrito, temos, na primeira coluna, Operação, na segunda, Operador e, na terceira, Exemplo. Na linha 2, na primeira coluna, Igual, na segunda o símbolo de ==, na terceira A == B. Na linha 3, na primeira coluna diferente, na segunda, o símbolo de !=, na terceira, A != B. Na linha 4, na primeira coluna, maior que, na segunda, o símbolo de >, na terceira, A > B. Na linha 5, na primeira coluna, menor que, na segunda, o símbolo de >=, na terceira, A < B. Na linha 6, na primeira coluna, maior ou igual a, na segunda, o símbolo de >=, na terceira, A >= B. Na linha 7, na primeira coluna, menor ou igual a, na segunda, o símbolo de <=, na terceira, A <= B.
Importante: Apesar de esses operadores serem principalmente utilizados dentro de estruturas de condicional, eles também podem ser utilizados fora delas, em alguns casos. Eles retornam um valor lógico.
O uso desses operadores é bem simples, vamos analisar alguns exemplos:
Se queremos fazer uma condição para avaliar se os valores de duas variáveis são iguais, podemos utilizar:
A == B
Neste exemplo, estamos falando que o valor armazenado em A é igual ao valor armazenado em B.
Por outro lado, se utilizarmos A != B, estamos dizendo que o valor de A é diferente do valor de B.
Agora que você já conhece os operadores, aprenderá a utilizar as estruturas condicionais. Conforme definem Ascencio e Campos (2010), a estrutura condicional permite alterar o fluxo do programa a partir da análise de uma comparação lógica. Esta estrutura pode ser dividida em simples e composta, como veremos a seguir.
O fluxo básico é: se alguma condição for verdadeira, faça isso, caso contrário, faça aquilo. Instruções condicionais compostas podem ter mais do que apenas duas opções. Como seres humanos, a maneira como tomamos decisões quando temos várias opções para escolher é muito diferente da dos computadores. Somos capazes de selecionar um item de um grupo de escolhas, porém um programa de computador deve proceder tomando decisões binárias, o que significa que ele só pode selecionar entre duas coisas de cada vez. Mesmo as declarações condicionais mais complexas se resumem a uma série de escolhas binárias.
As condicionais simples simplesmente recebem uma condição entre parênteses, e se ela for verdadeira, a condição é executada. A sintaxe da estrutura é a seguinte:
se (<condição>), então,
<instrução para o caso de a condição ser verdadeira>
fimSe
Para ficar mais simples a compreensão, veremos a aplicação desta estrutura em um algoritmo. Vamos escrever um algoritmo que recebe um número qualquer e retorna se ele é maior ou igual a 5.
VARIAVEIS
a: inteiro
INICIO
ESCREVA (“digite um número:")
LEIA (a)
se ( a >= 5), então,
ESCREVA (“ O valor digitado é maior ou igual a 5”)
fimSe
FIM
Vamos analisar este algoritmo linha a linha:
Linhas 1 e 2: temos a abertura do bloco de declaração de variáveis, onde instanciamos a variável a.
Linha 3: abertura do bloco do algoritmo.
Linhas 4 e 5: realizamos as operações de solicitação do número e guardamos o valor na variável, por meio do comando LEIA.
Linha 6: abertura da estrutura condicional, entre parênteses temos a comparação que queremos realizar, se o valor armazenado na variável a for maior ou igual a 5, então, realizaremos a instrução contida na linha 7.
Linha 7: caso seja verdadeira a comparação realizada na linha 6, retornamos o resultado com a instrução Escreva.
Linha 8: fim do bloco SE.
Linha 9: fim do algoritmo.
Se observarmos, veremos que este algoritmo, apesar de retornar se o número é maior ou igual a 5, ele está incompleto. Se o número for menor que 5, o que deve acontecer? Para isso, utilizamos as condicionais compostas. Nesta estrutura, além de analisar o caso da condição ser verdadeira, se for falso, indicamos outro fluxo ou conjunto de instruções que o algoritmo deve seguir (MANZANO; OLIVEIRA, 2002).
A sintaxe de uma estrutura condicional composta é dada por:
se (<condição>), então,
<instrução para o caso da condição ser verdadeira>
senão
<instrução para o caso da condição ser falsa>
fimSe
Veja que a estrutura dela é parecida com o se, a diferença é que o senão não tem nenhuma condição para ser testada. Ele é executado somente quando o se não é executado (ADITYA, 2017).
Agora, complementaremos o algoritmo anterior adicionando o bloco do senão para retornar alguma informação caso o número seja menor que 5.
VARIAVEIS
a: inteiro
INICIO
ESCREVA (“digite um número:")
LEIA (a)
se ( a >= 5), então,
ESCREVA (“O valor digitado é maior ou igual a 5”)
senão
ESCREVE (“O valor digitado é menor que 5”)
fimSe
FIM
Vamos analisar este algoritmo linha a linha:
Linhas 1 e 2: temos a abertura do bloco de declaração de variáveis, onde instanciamos a variável a.
Linha 3: abertura do bloco do algoritmo.
Linhas 4 e 5: realizamos as operações de solicitação do número e guardamos o valor na variável, por meio do comando LEIA.
Linha 6: abertura da estrutura condicional, entre parênteses temos a comparação que queremos realizar; se o valor armazenado na variável a for maior ou igual a 5, então, realizaremos a instrução contida na linha 7.
Linha 7: caso seja verdadeira a comparação realizada na linha 6, retornamos o resultado com a instrução Escreva.
Linha 8: início do bloco SENÃO
Linha 9: caso a condição seja falsa, o algoritmo pulará para o bloco do senão e executará o comando ESCREVA.
Linha 10: fim do bloco SE.
Linha 11: fim do algoritmo.
Note: nesta aula, vimos apenas a utilização dos operadores relacionais para a construção dos nossos blocos condicionais, entretanto também podemos utilizar os operadores lógicos para realizar as verificações e veremos este uso no decorrer das próximas lições.
Nesta lição, você aprendeu como construir algoritmos com uso de condicionais para desvio de fluxo, isto é, algoritmos em que podemos impor condições à execução para determinados casos. Estudamos as duas principais estruturas, sendo a simples e a composta. Na simples, vimos que as instruções só serão executadas se a condição for avaliada como verdadeira. Na composta, vimos que podemos declarar um caminho que deve ser seguido caso a condição seja avaliada como falsa.
Você lembra que, no case, eu comentei que com os conhecimentos da aula de hoje conseguiríamos modificar o algoritmo de notas da aula passada para definir se um aluno foi aprovado, ou não, baseado na média? Então, vamos fazer isso agora?
Vamos reescrever o algoritmo de média da aula passada para que, após calcular a nota, retorne se o aluno foi aprovado, ou não. Para esse algoritmo, consideraremos que a média para aprovação tem que ser maior ou igual a 6.
VARIAVEIS
n1, n2, n3, resultado: Real
INICIO
ESCREVA (“Entre com a primeira nota:”)
LEIA (n1)
ESCREVA (“Entre com a segunda nota:”)
LEIA (n2)
ESCREVA (“Entre com a terceira nota:”)
LEIA (n3)
resultado <- (n1 + n2 + n3)/3
se (resultado >= 6), então,
ESCREVA (“ O aluno foi APROVADO na disciplina! Sua média é: ”, resultado)
senão
ESCREVA (“ O aluno foi REPROVADO na disciplina! Sua média é: ”, resultado)
fimSe
FIM
Vamos analisar linha a linha:
Linhas 1 e 2: temos a abertura do bloco de declaração de variáveis, onde instanciamos 4 variáveis (n1, n2, n3, resultado) do tipo real que receberá as notas. Utilizamos o tipo real, pois as notas podem ser números com porção fracionária.
Linha 3: abertura do bloco do algoritmo.
Linhas 4 a 9: realizamos as operações de solicitação das notas e guardamos o valor nas variáveis, por meio do comando LEIA.
Linha 10: realizamos o cálculo da média aritmética que é dado pela soma das notas dividida pela quantidade de notas e armazenamos o resultado na variável resultado.
Linha 11: iniciamos o bloco da condicional se. Onde definimos a condição para aprovação do aluno, se a média do aluno for maior que 6, então, execute a linha 12.
Linha 12: instrução para o caso de a condicional ser verdadeira.
Linha 13: iniciamos o bloco senão que será executado caso a condição seja falsa, no caso, a média ser menor que 6.
Linha 14: será executada caso a condição seja falsa.
Linha 15: fim do bloco se.
Linha 16: fim do algoritmo.
ADITYA, B. Entendendo Algoritmos: Um guia ilustrado para programadores e outros curiosos. São Paulo: Novatec Editora, 2017.
ASCENCIO, A. F. G.; DE CAMPOS, E. A. V. Fundamentos da programação de computadores. [S. l.]: Pearson Educación, 2010.
LOPES, A.; GARCIA, G. Introdução à programação. Rio de Janeiro: Elsevier, 2002.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Estudo Dirigido de Algoritmos. São Paulo: Érica, 1997.