Você está na página 1de 10

Tema 4: Algoritmo

Paulo Sérgio Custódio

Introdução
Neste tema, você terá contato com as principais estruturas da lógica de programação: estruturas de seleção (se >
senão > se), laço de repetição (ou simplesmente laço) e sequência. Em seguida, apresentaremos o exemplo de um
algoritmo que determina o valor de desconto para um produto, baseado no valor da compra.
Você sabia que a fase de testes de um programa é uma das mais exaustivas? Muitas vezes, um programa é
considerado correto, mas problemas e inconsistências podem ocorrer caso ele não tenha sido testado em todas
as circunstâncias possíveis. Além disso, a determinação de todas as possibilidades de testes não é tarefa fácil,
principalmente em casos de programas complexos.
Ao final desta aula, você será capaz de:
• Aplicar conhecimentos sobre desenvolvimento de algoritmo, representando e avaliando propostas de
solução de problemas.

Algoritmos e expressões lógicas


Definição: uma expressão lógica é toda expressão que pode ser definida como sendo verdadeira ou falsa,
nunca ambas ao mesmo tempo.
Vamos analisar um exemplo de expressão lógica:
expressão: 'João tem R$20,00 na sua carteira'.
Essa expressão é uma expressão lógica, ou seja, ela pode ser verdadeira ou falsa. Para confirmarmos sua
veracidade,, basta pedir a João que abra a sua carteira e conte as notas, não é mesmo? Se encontrarmos
exatamente vinte reais, a expressão é verdadeira (V). Caso contrário, ela é falsa (F).
Mas agora você pode se perguntar: por que precisamos de expressões lógicas para a elaboração de algoritmos?
Por que elas são tão importantes?
As expressões lógicas são fundamentais na construção de programas, pois são capazes de identificar a
existência de uma condição.

-1-
FIQUE ATENTO
Quando um programa é executado, muitas vezes ele testa se determinadas condições são
verdadeiras ou falsas, baseando-se em uma parcela dos dados de entrada. Ao longo do
processamento essas condições mudam, de acordo com a alteração dos valores de algumas
variáveis. Por isso, uma condição que inicialmente é verdadeira pode se transformar em falsa
ao longo do processamento.

Mas como identificamos se uma expressão criada no software Portugol é uma expressão lógica? Primeiramente,
é preciso lembrar que as expressões lógicas envolvem operadores de comparação, ou seja: eles comparam o
valor de duas variáveis. Operadores de comparação, segundo o autor Forbellone, são os operadores relacionais.
Os operadores de comparação são os seguintes:
1) == testa se duas variáveis são iguais;
2) > testa se uma variável é maior do que outra;
3) < testa se uma variável é menor do que outra;
4) >= testa se uma variável é maior ou igual a outra;
5) <= testa se uma variável é menor ou igual a outra;
6) != teste se uma variável é diferente de outra.
Vamos analisar os seguintes exemplos de expressões em Portugol. Lembre-se de que o padrão de nomes das
variáveis envolve não utilizar acentos e caracteres especiais.
Expressão 1: numero = numero + 10
Expressão 2: numero == valor
O primeiro exemplo não é uma expressão lógica, e sim uma expressão aritmética e de atribuição, pois soma-se o
valor 10 ao conteúdo da variável numero e depois faz-se a atribuição deste novo valor à variável numero.
Note que o operador = não significa igualdade, e sim representa uma atribuição ().
O exemplo 2 é uma expressão lógica. Nesse caso, estamos testando se o valor da variável numero é igual ao valor
de outra variável, cujo nome é valor.
E por que ela é uma expressão lógica?
Porque a expressão: numero == valor pode ser verdadeira (V) ou falsa (F), dependendo apenas do conteúdo
armazenado nas variáveis desta expressão.

Estruturas de programação ou de fluxo


A Programação Estruturada leva esse nome devido à existência de estruturas que controlam o fluxo dos dados
no programa.
Essas estruturas são:
1) Desvios condicionais;
2) Laços de repetição;
3) Sequência.
Vamos estudar cada estrutura a seguir.

-2-
Estrutura condicional
Um desvio condicional é representado no software Portugol pelo comando: se ... senao (não usamos o acento 'til'
(~), pois é um comando em linguagem de programação). A sua estrutura lógica e sintaxe é a seguinte:
...
1 se(condição)
2{
3 muitas linhas de código (condição é V)
4}
5 senao
6{
7 outras linhas de código (condição é F)
8}
...
Vamos entender a estrutura em detalhes a seguir:
1) O programa encontra a instrução: se(condição) em uma linha específica;
2) A condição é testada, supondo-se que é uma expressão lógica;
3) No caso da condição ser verdadeira, o código contido no primeiro bloco { }, é executado, descrito no exemplo
como muitas linhas de código. Neste caso, fique atento: o segundo bloco, especificado como outras linhas de
código, não é executado;
4) Se a condição for falsa, o bloco de código a ser executado é o segundo: outras linhas de código. Neste cenário,
o primeiro bloco não é executado;
5) Tenha sempre em mente que temos uma situação de exclusão, ou seja, apenas um dos blocos pode ser
executado. Isso acontece porque a condição só pode ser ou verdadeira ou falsa. O primeiro bloco de código é
executado se a condição for verdadeira, e o bloco de programação escrito após o comando senao só é executado
se a condição for falsa. A seguir, veja a representação em formato UML dessa expressão.

Figura 1 - Representação de um desvio condicional


Fonte: elaborada pelo autor, 2019.

Observação: o comando senao pode ser opcional: você pode desejar apenas que o algoritmo execute um
comando caso uma condição seja verdadeira. Neste caso, escreva somente o seguinte código:
se(condição)
{
código aqui

-3-
}
A seguir, veja a representação em formato UML dessa expressão.

Figura 2 - Representação UML do se (sem senao)


Fonte: elaborada pelo autor, 2019.

Note que, se condição for falsa, o fluxo do programa segue em direção à esfera amarela representada no gráfico
e o teste termina.

FIQUE ATENTO
Caso a expressão que define a condição dentro do comando se(condição) não for do tipo
expressão lógica, a IDE acusará um erro e o seu código não será compilado até que você o
conserte! Uma expressão do tipo: se(a=90) será considerada um erro, pois a = 90 é uma
atribuição, e não uma comparação. Como corrigir esse problema? Para isso, escreva o
comando: se(a==90).

A seguir, vamos estudar os laços de repetição.

-4-
Laços de repetição
Um laço de repetição, ou simplesmente um laço, é uma estrutura que realiza um teste condicional. No entanto, se
este teste for considerado verdadeiro, o algoritmo retorna ao passo anterior. As mesmas instruções se repetem
até que a condição se torne falsa. Quando isso ocorre, o laço se encerra e o programa finaliza o processo.
Existem três tipos de laços de repetição: faca ... enquanto, enquanto e para. Neste tema, vamos discutir os dois
primeiros.
Os laços faca ... enquanto e enquanto apresentam uma pequena diferença: o primeiro realiza a tarefa dentro do
seu bloco pelo menos uma vez, mesmo que a condição seja falsa da primeira vez. Por sua vez, no laço enquanto,
se o teste condicional for falso na primeira vez, o programa sai do laço sem realizar nenhuma ação dentro do
bloco. Note que não temos cedilha na escrita do comando faca ... enquanto, mas faca tem o significado usual de
faça.
A sintaxe e estrutura do laço enquanto é:
1 enquanto(condição)
2{
3 instruções
4}
A sintaxe e estrutura do laço faca ... enquanto é:
1 faca
3{
3 instruções
4}
5 enquanto(condição)
A seguir, veja a representação em formato UML do laço enquanto demonstrado no exemplo anterior.

-5-
Figura 3 - Diagrama UML do laço enquanto
Fonte: elaborada pelo autor, 2019.

A seguir, veja a representação em formato UML do laço faca-enquanto.

-6-
Figura 4 - Diagrama UML do laço faca-enquanto
Fonte: elaborada pelo autor, 2019.

-7-
SAIBA MAIS
Para aprofundar seus conhecimentos sobre as linguagens de programação mais usadas, acesse
o link: <https://www.devmedia.com.br/top-10-linguagens-de-programacao-mais-usadas-no-
mercado/39635>.

A seguir, vamos estudar as sequências.

Sequência
A sequência nada mais é do que a execução sequencial, uma após outra, de instruções de qualquer natureza.
Leve em consideração a seguinte expressão. Nela, temos três instruções realizadas uma após outra,
determinando uma sequência.
conta = conta + 1
conta = conta*(1 + 10)
escreva(conta)
Agora vamos a um exemplo prático, usando a condicional SE:

EXEMPLO
Digamos que um programador deseja construir um algoritmo que implementa a seguinte
regra: se uma compra for maior ou igual a R$500,00, iremos presentear o cliente com desconto
de 15%. Caso contrário, aplicaremos um desconto menor, de 10%. Tente implementar esse
desafio em Portugol Studio.

A figura a seguir traz o código que resolve o exemplo anterior.

-8-
Figura 5 - Solução do exemplo prático
Fonte: elaborada pelo autor, 2019.

A seguir, vamos entender quais são os importantes paradigmas da programação.

Paradigmas de programação
As linguagens de programação são divididas em paradigmas, que representam uma filosofia de classificação de
acordo com determinadas propriedades. O consenso a respeito deles não é definitivo, mas Tucker (2008) nos
apresenta um resumo da principal classificação aceita:
1. Programação orientada a objetos: um programa é uma coleção de objetos que interagem entre si, passando
mensagens que transformam seu estado.
2. Programação funcional: modela um problema computacional, como uma coleção de funções matemáticas,
cada uma trazendo um domínio e um resultado. As funções interagem entre si por meio de composição
funcional, condições e recursão.
3. Programação lógica: modela um problema apenas declarando o resultado desejado, sem especificar um
processo de resolução. Nesse caso, as linguagens de programação fundamentam-se em regras.
4. Programação orientada a eventos: utiliza sensores que detectam a execução de eventos e determinados
comportamentos do usuário. Por exemplo, cliques de mouse e digitação em uma caixa de texto podem engatilhar
ações.
5. Programação imperativa: paradigma antigo, no qual o programa e suas variáveis são armazenados juntos. O
programa aloca espaços para variáveis e executa ações por meio de comandos.
6. Programação orientada a aspectos: separa o código de acordo com a sua importância na aplicação.
7. Programação concorrente: este paradigma associa-se à programação orientada a objetos, sendo funcional,
lógica e imperativa. Caracteriza-se pela concorrência de acesso a elementos que compartilham informação em
intervalos de tempo.

8. Programação reflexiva: trata-se da capacidade de um programa para criar e executar comandos em tempo

-9-
8. Programação reflexiva: trata-se da capacidade de um programa para criar e executar comandos em tempo
de execução. Conhecida também como meta programação.
Esses paradigmas determinam a abordagem aplicada pelas linguagens, mas vale notar que um programa real
pode ser composto por muitos paradigmas ao mesmo tempo, ou seja, eles não são mutualmente exclusivos.

Fechamento
Esta importante unidade temática apresentou ao aluno os conceitos essenciais para o entendimento do que são
as estruturas de programação, as expressões condicionais e a representação UML de algumas delas. Exercitamos
os tópicos com exemplos práticos e finalizamos enfatizando os diferentes tipos de paradigmas de linguagens de
programação.

Referências
CARPINELLI, J. D. Computer systems organization and architecture. Addison Wesley: Boston, 2011, p. 47.
DEVMEDIA, 2018. Top 10 linguagens de programação mais usadas no mercado. Disponível em: <https://www.
devmedia.com.br/top-10-linguagens-de-programacao-mais-usadas-no-mercado/39635>. Acesso em: 20 jan.
2019.
nd
Mano, M.; Charles K., Logic and Computer Design Fundamentals. 2 ed. Englewood Cliffs, NJ: Prentice Hall,
2011.
PRESSMAN, R. Engenharia de Software. 6ª. ed. Rio de Janeiro: McGraw-Hill. 2006.
PRESSMAN, R. Engenharia de Software. 5ª. ed. Rio de Janeiro: McGraw-Hill, 2002, 843p.
STALLINGS, W. Arquitetura e organização de computadores. 8ª ed. Prentice Hall, 2010.
TANEMBAUM, A.S. Organização estruturada de computadores. 5ª ed. São Paulo: Pearson Prentice Hall, 2007.
TUCKER, A. B; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2ª ed. São Paulo: McGraw-
Hill, 2008.

- 10 -

Você também pode gostar