Você está na página 1de 60

Algoritmo & Lógica de Programação

0
Algoritmo & Lógica de Programação

Lógica de Programação
LCA Sistemas Corporativos. Vilar dos Teles, RJ.
Contato: luizctec@lca.net.br – (21) 98463-7679 WhatsApp.
Copyright © 2023. Luiz Albuquerque.
Esta apostila foi preparada para iniciantes em desenvolvimento de sistemas.
1. Algoritmos, 2. Fluxogramas, 3. Lógica de Programação, 4. Estrutura de Dados

Edição: Luiz Albuquerque


Revisão: Claudia Albuquerque.
Capa: Luiz Albuquerque.

Informática Básica

Lógica de Programação
Algoritmos, Fluxogramas e Pseudocódigos

1
Algoritmo & Lógica de Programação

Sumário
Introdução...................................................................... 4
Conceito de Algoritmo ................................................ 4
Algumas Definições de Algoritmo................................ 5
Introdução a Lógica de Programação ............................. 5
Conceitos Básicos ........................................................ 5
Exercícios Práticos ....................................................... 7
Introdução aos Algoritmos ............................................. 9
O que é um ALGORITMO? ........................................... 9
Algumas Definições de Algoritmo.............................. 10
Formas de Representação de Algoritmos .................. 10
Descrição Narrativa ................................................ 10
Fluxograma Convencional ...................................... 12
Pseudocódigo ......................................................... 14
Síntese ................................................................... 15
Tipos de Dados .......................................................... 16
Dados Numéricos ................................................... 16
Dados Literais ......................................................... 18
Dados Lógicos ........................................................ 19
Síntese ................................................................... 19
Exercício Proposto .................................................. 20
Variáveis.................................................................... 20
Armazenamento de Dados na Memória ................. 21
Conceito e Utilidade de Variáveis ........................... 24
Definição de Variáveis em Algoritmos .................... 25
Síntese ................................................................... 26
Exercícios Propostos ............................................... 27
Expressões ................................................................ 27
Conceito ................................................................. 27

2
Algoritmo & Lógica de Programação

Operadores ............................................................. 28
Tipos de Expressões ................................................ 29
Síntese .................................................................... 32
Exercícios Propostos ............................................... 33
Instruções Primitivas.................................................. 12
Instrução Primitiva de Atribuição............................ 13
Instrução Primitiva de Saída de Dados ....................... 14
Instrução Primitiva de Entrada de Dados ................... 16
Síntese .................................................................... 19
Exercícios Resolvidos .............................................. 19
Exercícios Propostos ............................................... 23
Controle de Fluxo de Execução .................................. 24
Comandos Compostos ............................................ 25
Estrutura Sequencial ............................................... 25
Estruturas de Decisão ............................................. 26
Estruturas de Repetição .......................................... 30
Aninhamentos ........................................................ 33
Síntese .................................................................... 34
Bibliografia .................................................................... 35

3
Algoritmo & Lógica de Programação

Introdução
Conceito de Algoritmo

A automação é o processo em que uma tarefa deixa de ser


desempenhada pelo homem e passa a ser realizada por máquinas, sejam
estes dispositivos mecânicos, eletrônicos (como os computadores) ou de
natureza mista.
Para que a automação de uma tarefa seja bem-sucedida é necessário que
a máquina que passará a realizá-la seja capaz de desempenhar cada uma
das etapas constituintes do processo a ser automatizado com eficiência,
de modo a garantir a repetibilidade do mesmo. Assim, é necessário que
seja especificado com clareza e exatidão o que deve ser realizado em cada
uma das fases do processo a ser automatizado, bem como a sequência
em que estas fases devem ser realizadas.
À especificação da sequência ordenada de passos que deve ser seguida
para a realização de uma tarefa, garantindo a sua repetibilidade, dá-se o
nome de algoritmo.
Ao contrário do que se pode pensar, o conceito de algoritmo não foi
criado para satisfazer às necessidades da computação. Pelo contrário, a
programação de computadores é apenas um dos campos de aplicação
dos algoritmos. Na verdade, há inúmeros casos que podem exemplificar
o uso (involuntário ou não) de algoritmos para a padronização do
exercício de tarefas rotineiras (vide exemplos da Seção 2.1). No entanto,
daqui adiante a atenção desta apostila estará voltada à automação de
tarefas utilizando computadores.
Para que um computador possa desempenhar uma tarefa é necessário
que esta seja detalhada passo-a-passo, numa forma compreensível pela
máquina, utilizando aquilo que se chama de programa. Neste sentido, um
programa de computador nada mais é que um algoritmo escrito numa
forma compreensível pelo computador (linguagem de programação).

4
Algoritmo & Lógica de Programação

Algumas Definições de Algoritmo

"Serve como modelo para programas, pois sua linguagem é intermediária


à linguagem humana e às linguagens de programação, sendo então, uma
boa ferramenta na validação da lógica de tarefas a serem automatizadas."
“Os algoritmos, servem para representar a solução de qualquer
problema, mas no caso do Processamento de Dados, eles devem seguir
as regras básicas de programação para que sejam compatíveis com as
linguagens de programação.”

Introdução a Lógica de Programação


Conceitos Básicos

Nesta disciplina, iniciaremos nossos estudos sobre Lógica de


Programação. Mas, antes de começarmos, seria útil uma reflexão sobre o
significado da palavra “Lógica”. Assim, o que é Lógica?
Lógica trata da correção do pensamento. Como filosofia, ela procura
saber por que pensamos assim e não de outro jeito. Com arte ou técnica,
ela nos ensina a usar corretamente as leis do pensamento.
O filósofo grego Aristóteles é considerado o criador da lógica, em sua
época denominava-se razão, depois que a palavra lógica começou a ser
utilizada, esta tem origem do grego logos que significa linguagem
racional.
Poderíamos dizer também que a Lógica é a arte de pensar corretamente
e, visto que a forma mais complexa do pensamento é o raciocínio, a
Lógica estuda ou tem em vista a correção do raciocínio.
Podemos ainda dizer que a lógica tem em vista a ordem da razão. Isto dá
a entender que a nossa razão pode funcionar desordenadamente, pode
pôr as coisas de pernas para o ar. Por isso a Lógica ensina a colocar Ordem
no Pensamento.
Desordem: “E se eu escolher aquilo?” ou “É, mas eu não tinha pensado
nisso”.
Enfim, lógica é ciência que coloca a cabeça para funcionar corretamente.

5
Algoritmo & Lógica de Programação

Para chegarmos à conclusão de algo utilizamos as premissas que são


conhecimentos prévios, desta forma organizamos o pensamento, com a
organização do mesmo é que concluímos se algo é verdadeiro ou falso.
Utilizamos a lógica de forma natural em nosso dia a dia. Por exemplo:
a) - Sei que o livro está no armário.
- Sei que o armário está fechado
- Logo, concluo que tenho de abrir o armário para pegar o livro.
Vamos observar neste exemplo as premissas1 e os pontos os quais levam
a conclusão deste fato.
1º. (premissa) Sei que o A está no B.
2º. (premissa) Sei que o B está fechado.
3º. (conclusão) Logo, concluo que tenho de abrir o armário para
pegar o livro.
Sendo A o livro ou qualquer outra coisa que tenho que pegar em B
(armário), tenho o conhecimento prévio de que o que quero pegar está
no armário e o mesmo encontra-se fechado.
Neste exemplo do dia a dia tenho duas premissas que através delas chego
a uma conclusão.
b) - Sei que sou mais velho que João. (premissa)
- Sei que João é mais velho que José. (premissa)
- Então, concluo que eu sou mais velho que José. (conclusão)
Neste exemplo só consigo chegar a uma conclusão de que sou mais velho
que alguém se existirem as duas premissas, só com apenas uma não
conseguiria chegar a uma conclusão.
c) Sejam os seguintes fatos:
- Todos os filhos de José são mais altos do que Maria.
- Antônio é filho de José.
- Então, o que podemos concluir logicamente?
- Responda: ___________________________________________.

1
Ideia inicial de um raciocínio: 1 princípio, ideia, fato, pressuposto, circunstância, condição,
antecedente, axioma.

6
Algoritmo & Lógica de Programação

d) Considere os fatos abaixo:


- Pedro é aluno da LCA.
- Para ser aprovado, um aluno da LCA precisa obter nota maior ou
igual a 6,0 e comparecer a mais de 75% das aulas.
- Pedro compareceu a todas as aulas e obteve nota igual a 8,0.
- Então podemos concluir, que:
- Responda: ____________________________________________.

Exercícios Práticos

1 Através das premissas a seguir, assinale as sentenças que


correspondem à conclusão correta.

1.1 Se o semáforo com a luz vermelha é para o motorista parar e o


verde para seguir, estando eu a pé para atravessar a rua então
concluo que:
a) ( ) Posso atravessar a rua com a luz vermelha.
b) ( ) O semáforo tem duas luzes.
c) ( ) Só devo atravessar a rua com a luz verde.

1.2 Patos são animais. Patos têm duas patas. Logo:


a) ( ) Todo o animal tem duas patas.
b) ( ) Patos têm duas patas.
c) ( ) Patos tem bico.

1.3 Desafio dos nove pontos o objetivo é traçar quatro linhas retas
passando por todos os nove pontos, sem tirar o lápis/caneta do
papel. Para facilitar o raciocínio e a resolução, marque os nove
pontos em uma folha de papel e tente resolver.

7
Algoritmo & Lógica de Programação

1.4 A mãe de Maria tem 5 filhas: Lalá, Lelé, Lili e Loló. Qual é o nome
da quinta filha?
Resposta: _____________________________________________.
Maria (A mãe de Maria tem cinco filhas.)

1.5 Uma sala tem quatro cantos, cada canto tem um gato. Cada gato
vê três gatos. Quantos são os gatos?

Resposta: _____________________________________________. Quatro gatos

1.6 Três homens querem atravessar um rio. O barco que possuem tem
a capacidade máxima de 150 kg. Eles pesam 50 kg, 7 5 kg e 120 kg.
Como podem atravessar o rio sem afundar o barco?
Resposta: _____________________________________________.
outro lado do rio.
barco volta com o que havia ficado. Finalmente, os de 50 e 75 kg atravessam, e os três estarão do
Os homens de 50 kg e 75 kg atravessam. Um deles volta. O que pesa 120 kg atravessa sozinho. O

1.7 Corte um bolo em formato de retângulo em 6 pedaços fazendo


apenas 3 movimentos (3 cortes).
Resposta: _____________________________________________.
Faça dois cortes verticais e um corte horizontal.

1.8 Um caracol resolve escalar a parede de um poço de 12 m. A cada


dia ele sobe 3 m e escorrega 2 m. Quantos dias ele vai demorar
para chegar ao topo do poço?
Resposta: _____________________________________________.
10 dias (Após 9 dias o caracol estará a 9 m de altura; no 10° dia ele terá chegado ao topo.)

1.9 Sabendo que A=10 e B=20. Qual o valor da soma de A + B?


Resposta: _____________________________________________. A soma de A+B=20

1.10 João tem X balas, Maria tem 9 balas e Carlos tem 5 balas. Sabendo
que João tem 3 balas a mais que a soma das balas de Maria e Carlos,
qual é o valor de X?
Resposta: _____________________________________________. X = 9 + 5 + 3; X = 17.

8
Algoritmo & Lógica de Programação

Introdução aos Algoritmos


O que é um ALGORITMO?

Um algoritmo é formalmente uma sequência finita de passos que levam


a execução de uma tarefa. Podemos pensar em algoritmo como uma
receita, uma sequência de instruções que dão cabo de uma meta
específica. Estas tarefas não podem ser redundantes nem subjetivas na
sua definição, devem ser claras e precisas.
A automação é o processo em que uma tarefa deixa de ser
desempenhada pelo homem e passa a ser realizada por máquinas, sejam
estes dispositivos mecânicos, eletrônicos (como os computadores) ou de
natureza mista.
Para que a automação de uma tarefa seja bem-sucedida é necessário que
a máquina que passará a realizá-la seja capaz de desempenhar cada uma
das etapas constituintes do processo a ser automatizado com eficiência,
de modo a garantir a repetibilidade do mesmo. Assim, é necessário que
seja especificado com clareza e exatidão o que deve ser realizado em cada
uma das fases do processo a ser automatizado, bem como a sequência
em que estas fases devem ser realizadas.
À especificação da sequência ordenada de passos que deve ser seguida
para a realização de uma tarefa, garantindo a sua repetibilidade, dá-se o
nome de algoritmo.
Ao contrário do que se pode pensar, o conceito de algoritmo não foi
criado para satisfazer às necessidades da computação. Pelo contrário, a
programação de computadores é apenas um dos campos de aplicação
dos algoritmos. Na verdade, há inúmeros casos que podem exemplificar
o uso (involuntário ou não) de algoritmos para a padronização do
exercício de tarefas rotineiras (vide exemplos da Seção 2.1). No entanto,
daqui adiante a atenção desta apostila estará voltada à automação de
tarefas utilizando computadores.
Para que um computador possa desempenhar uma tarefa é necessário
que esta seja detalhada passo-a-passo, numa forma compreensível pela
máquina, utilizando aquilo que se chama de programa. Neste sentido, um
programa de computador nada mais é que um algoritmo escrito numa
forma compreensível pelo computador (linguagem de programação).

9
Algoritmo & Lógica de Programação

Algumas Definições de Algoritmo

"Serve como modelo para programas, pois sua linguagem é intermediária


à linguagem humana e às linguagens de programação, sendo então, uma
boa ferramenta na validação da lógica de tarefas a serem automatizadas."
“Os algoritmos, servem para representar a solução de qualquer
problema, mas no caso do Processamento de Dados, eles devem seguir
as regras básicas de programação para que sejam compatíveis com as
linguagens de programação.”

Formas de Representação de Algoritmos

Existem diversas formas de representação de algoritmos, mas não há um


consenso com relação à melhor delas.
O critério usado para classificar hierarquicamente estas formas está
diretamente ligado ao nível de detalhe ou, inversamente, ao grau de
abstração oferecido.
Algumas formas de representação de algoritmos tratam os problemas
apenas em nível lógico, abstraindo-se de detalhes de implementação
muitas vezes relacionados com alguma linguagem de programação
específica. Por outro lado, existem formas de representação de
algoritmos que possuem uma maior riqueza de detalhes e muitas vezes
acabam por obscurecer as ideias principais do algoritmo, dificultando seu
entendimento.
Dentre as formas de representação de algoritmos mais conhecidas
podemos citar:
 Descrição Narrativa;
 Fluxograma Convencional;
 Pseudocódigo, também conhecido como Linguagem Estruturada ou
Portugol.

Descrição Narrativa
Nesta forma de representação os algoritmos são expressos diretamente
em linguagem natural. Como exemplo, têm-se os algoritmos seguintes:

10
Algoritmo & Lógica de Programação

 Receita de bolo:
Misture os ingredientes
Unte a forma com manteiga
Despeje a mistura na forma
Se houver coco ralado então despeje sobre a mistura
Leve a forma ao forno
Enquanto não corar deixe a forma no forno
Deixe esfriar
Retire do forno

 Troca de um pneu furado:


Afrouxar ligeiramente as porcas
Suspender o carro
Retirar as porcas e o pneu
Colocar o pneu reserva
Apertar as porcas
Abaixar o carro
Dar o aperto final nas porcas

 Tomando um banho:
Entrar no banheiro
Tirar a roupa
Abrir a torneira do chuveiro
Entrar na água
Ensaboar-se
Sair da água
Esfregar-se
Entrar na água
Enxaguar-se
Fechar a torneira
Enxugar-se
Vestir-se

 Cálculo da média de um aluno:


Obter as suas 2 notas de provas
Calcular a média aritmética
Se a média for maior que 7, o aluno foi aprovado, senão ele foi reprovado

Esta representação é pouco usada na prática porque o uso da linguagem


natural muitas vezes dá oportunidade a más interpretações,
ambiguidades e imprecisões.

11
Algoritmo & Lógica de Programação

Por exemplo, a instrução "afrouxar ligeiramente as porcas" no algoritmo


da troca de pneus está sujeita a interpretações diferentes por pessoas
distintas. Uma instrução mais precisa seria: "afrouxar a porca, girando-a
30º no sentido anti-horário".

Fluxograma Convencional
É uma representação gráfica de algoritmos onde formas geométricas
diferentes implicam ações (instruções, comandos) distintos. Tal
propriedade facilita o entendimento das ideias contidas nos algoritmos e
justifica sua popularidade.
Esta forma é aproximadamente intermediária à descrição narrativa e ao
pseudocódigo (subitem seguinte), pois é menos imprecisa que a primeira
e, no entanto, não se preocupa com detalhes de implementação do
programa, como o tipo das variáveis usadas.
Nota-se que os fluxogramas convencionais se preocupam com detalhes
de nível físico da implementação do algoritmo. Por exemplo, figuras
geométricas diferentes são adotadas para representar operações de
saída de dados realizadas em dispositivos distintos, como uma fita
magnética ou um monitor de vídeo. Como esta apostila não está
interessada em detalhes físicos da implementação, mas tão somente com
o nível lógico das instruções do algoritmo, será adotada a notação
simplificada da Figura (abaixo) para os fluxogramas.

Indica sentido do fluxo de dados

Início e final do fluxograma

Operação de entrada de dados de entrada de dados

de entrada de dados
Operação de saída de dados de entrada de dados

Operação de atribuição/Processo

Decisão

12
Algoritmo & Lógica de Programação

De modo geral, um fluxograma se resume a um único símbolo inicial por


onde a execução do algoritmo começa, e um ou mais símbolos finais, que
são pontos onde a execução do algoritmo se encerra. Partindo do símbolo
inicial, há sempre um único caminho orientado a ser seguido,
representando a existência de uma única sequência de execução das
instruções. Isto pode ser melhor visualizado pelo fato de que, apesar de
vários caminhos poderem convergir para uma mesma figura do diagrama,
há sempre um único caminho saindo desta. Exceções a esta regra são os
símbolos finais, dos quais não há nenhum fluxo saindo, e os símbolos de
decisão, de onde pode haver mais de um caminho de saída (usualmente
dois caminhos), representando uma bifurcação no fluxo. A figura a baixo)
mostra a representação do algoritmo de cálculo da média de um aluno
sob a forma de um fluxograma.

Exemplo de um fluxograma convencional.

13
Algoritmo & Lógica de Programação

Pseudocódigo
Esta forma de representação de algoritmos é rica em detalhes, como a
definição dos tipos das variáveis usadas no algoritmo. Por assemelhar-se
bastante à forma em que os programas são escritos, encontra muita
aceitação.
Na verdade, esta representação é suficientemente geral para permitir a
tradução de um algoritmo nela representado para uma linguagem de
programação específica seja praticamente direta.
A forma geral da representação de um algoritmo na forma de
pseudocódigo é a seguinte:
Algoritmo <nome_do_algoritmo>
<declaração_de_variáveis>
<subalgoritmos>
Início
<corpo do algoritmo>
Fim
Algoritmo é uma palavra que indica o início da definição de um algoritmo
em forma de pseudocódigo.
<nome_do_algoritmo> é um nome simbólico dado ao algoritmo com a
finalidade de distingui-los dos demais.
<declaração_de_variáveis> consiste em uma porção opcional onde são
declaradas as variáveis globais usadas no algoritmo principal e,
eventualmente, nos subalgoritmos.
<subalgoritmos> consiste em uma porção opcional do pseudocódigo
onde são definidos os subalgoritmos. Os subalgoritmos podem ser de dois
tipos: - as funções, que retornam um, e somente um valor ao algoritmo
chamador; - os procedimentos, que retornam vários valores, ou nenhum,
ao algoritmo chamador.
Início e Fim são respectivamente as palavras que delimitam o início e o
término do conjunto de instruções do corpo do algoritmo.
Como exemplo, a figura abaixo mostra a representação do algoritmo do
cálculo da média de um aluno, na forma de um pseudocódigo.

14
Algoritmo & Lógica de Programação

Algoritmo Calculo_Media
Var N1, N2, MEDIA: real
Início
Leia N1, N2
MEDIA ← (N1 + N2) / 2
Se MEDIA >= 7 então
Escreva “Aprovado”
Senão
Escreva “Reprovado”
Fim_se
Fim

Síntese
Há diversas formas de representação de algoritmos que diferem entre si
pela quantidade de detalhes de implementação que fornecem ou,
inversamente, pelo grau de abstração que possibilitam com relação à
implementação do algoritmo em termos de uma linguagem de
programação específica.
Dentre as principais formas de representação de algoritmos destacam-se:
a descrição narrativa, o fluxograma convencional e o pseudocódigo (ou
linguagem estruturada).

Tipos de Dados
Todo o trabalho realizado por um computador é baseado na manipulação
das informações contidas em sua memória. Grosso modo, estas
informações podem ser classificadas em dois tipos:
 As instruções, que comandam o funcionamento da máquina e
determinam a maneira como devem ser tratados os dados. As
instruções são específicas para cada modelo de computador, pois
são funções do tipo particular de processador utilizado em sua
implementação.
 Os dados propriamente ditos, que correspondem à porção das
informações a serem processadas pelo computador.
A maior parte das pessoas não ligadas à área de informática ignora o
potencial dos computadores e imagina que eles são capazes de tratar

15
Algoritmo & Lógica de Programação

apenas com dados numéricos. Na realidade, a capacidade dos mesmos se


estende a outros tipos de dados.
O objetivo deste capítulo é justamente o de classificar os dados de
acordo com o tipo de informação contida neles. A classificação
apresentada não se aplica a nenhuma linguagem de programação
específica; pelo contrário, ela sintetiza os padrões utilizados na maioria
das linguagens.

Tipos de Dados

Todo o trabalho realizado por um computador é baseado na manipulação


das informações contidas em sua memória. Grosso modo, estas
informações podem ser classificadas em dois tipos:
As instruções, que comandam o funcionamento da máquina e
determinam a maneira como devem ser tratados os dados. As instruções
são específicas para cada modelo de computador, pois são funções do
tipo particular de processador utilizado em sua implementação.
 Os dados propriamente ditos, que correspondem à porção das
informações a serem processadas pelo computador.
A maior parte das pessoas não ligadas à área de informática ignora o
potencial dos computadores e imagina que eles são capazes de tratar
apenas com dados numéricos. Na realidade, a capacidade dos mesmos se
estende a outros tipos de dados.
O objetivo deste capítulo é justamente o de classificar os dados de
acordo com o tipo de informação contida neles. A classificação
apresentada não se aplica a nenhuma linguagem de programação
específica; pelo contrário, ela sintetiza os padrões utilizados na maioria
das linguagens.

Dados Numéricos
Antes de apresentar formalmente os tipos de dados numéricos, é
conveniente recordar alguns conceitos básicos relacionados à teoria dos
números e conjuntos.
O conjunto dos números naturais é representado por N e é dado por:
N = {1, 2, 3, 4, ...}

16
Algoritmo & Lógica de Programação

Algumas correntes de matemáticos teóricos convencionam que o número


0 está contido neste conjunto; contudo, não convém perder tempo em
tais discussões filosóficas, uma vez que isto não influenciará de forma
alguma este estudo.
Na sequência, encontramos o conjunto dos números inteiros:
Z = {..., -3, -2, -1, 0, 1, 2, 3, ...}
O conjunto Z contém todos os elementos de N, bem como alguns
números que não pertencem a N (os números negativos e o zero).
Portanto, dizemos que N está contido em Z, ou então, que Z contém N.
Englobando o conjunto dos números inteiros, existe o conjunto dos
números fracionários (Q), dado pelo universo dos números que podem
ser expressos na forma de uma fração, isto é, um quociente onde o
numerador e o denominador são números inteiros. Mais formalmente:
Q = ( p/q | p, q pertencem a Z}
Por último, surge o conjunto dos números reais (R), formado pela união
do conjunto dos números fracionários Q com o conjunto dos números
que não podem ser expressos na forma de uma fração (os números
irracionais). Ex.: 2 = 1.1412... , PI = 3.14159...

Dados Numéricos Inteiros


Os números inteiros são aqueles que não possuem componentes
decimais ou fracionários, podendo ser positivos ou negativos.
Os elementos pertencentes aos conjuntos N e Z, apesar de serem
representáveis na classe dos números reais, são classificados como dados
do tipo inteiro, por não possuírem parte fracionária. Esta possibilidade é
interessante por permitir uma economia do espaço de memória, como
veremos adiante. Por sua vez, os elementos dos conjuntos Q e R, por
possuírem parte fracionária, não podem ser representados na classe
inteira, pertencendo necessariamente aos tipos de dados ditos reais.
Como exemplos de números inteiros temos:
24 - Número inteiro positivo
0 - Número inteiro
-12 - Número inteiro negativo

17
Algoritmo & Lógica de Programação

Dados Numéricos Reais


Os dados de tipo real são aqueles que podem possuir componentes
decimais ou fracionários, e podem também ser positivos ou negativos.
Como dito anteriormente, os elementos dos conjuntos de números
fracionários e reais são necessariamente representados no computador
por dados do tipo real.
Exemplos de dados do tipo real:
24.01 - Número real positivo com duas casas decimais
144. - Número real positivo com zero casas decimais
-13.3 - Número real negativo com uma casa decimal
0.0 - Número real com uma casa decimal
0. - Número real com zero casas decimais
Observe que há uma diferença entre “0”, que é um dado do tipo inteiro
“0.” (ou “0.0”) que é um dado do tipo real. Portanto, a simples existência
do ponto decimal serve para diferenciar um dado numérico do tipo
inteiro de um do tipo real.

Dados Literais
O tipo de dados literal é constituído por uma seqüência de caracteres
contendo letras, dígitos e/ou símbolos especiais. Este tipo de dados é
também muitas vezes chamado de alfanumérico, cadeia (ou cordão) de
caracteres, ainda, do inglês, string.
Usualmente, os dados literais são representados nos algoritmos pela
coleção de caracteres, delimitada em seu início e término com o caractere
aspas (").
Diz-se que o dado do tipo literal possui um comprimento dado pelo
número de caracteres nele contido.
Exemplos de dados do tipo literal:
"QUAL ?" - literal de comprimento 6
" " - literal de comprimento 1
"qUaL ?!$" - literal de comprimento 8

18
Algoritmo & Lógica de Programação

" AbCdefGHi" - literal de comprimento 9


"1-2+3=" - literal de comprimento 6
“0” - literal de comprimento 1
Note que, por exemplo, "1.2" representa um dado do tipo literal de
comprimento 3, constituído pelos caracteres "1", "." e "2", diferindo de
1.2 que é um dado do tipo real.

Dados Lógicos
A existência deste tipo de dado é, de certo modo, um reflexo da maneira
como os computadores funcionam. Muitas vezes, estes tipos de dados
são chamados de booleanos, devido à significativa contribuição de BOOLE
à área da lógica matemática.
O tipo de dados lógico é usado para representar dois únicos valores
lógicos possíveis:
verdadeiro e falso. É comum encontrar-se em outras referências outros
tipos de pares de valores lógicos como sim/não, 1/0, true/false.
Nos algoritmos apresentados nesta apostila os valores lógicos serão
delimitados pelo caractere ponto (.).
Exemplo:
.V. - valor lógico verdadeiro
.F. - valor lógico falso

Síntese
Os dados numéricos dividem-se em duas classes:
 inteiros, que não possuem parte fracionária e podem ser
positivos ou negativos;
 reais, que podem possuir parte fracionária e podem ser positivos
ou negativos.
Os dados do tipo literal podem conter sequências de letras, dígitos ou
símbolos especiais, delimitados por aspas ("). Seu comprimento é dado
pelo número de caracteres em string.
Os dados do tipo lógico só possuem dois valores possíveis (.V. e .F.).

19
Algoritmo & Lógica de Programação

A árvore abaixo resume a classificação dos dados com relação aos tipos
de dados apresentados.

Representação dos diversos tipos de dados

Exercício Proposto
1. Classifique os dados especificados abaixo de acordo com seu tipo,
assinalando com I os dados do tipo inteiro, com R os reais, com L
os literais, com B os lógicos (booleanos), e com N aqueles para os
quais não é possível definir a priori um tipo de dado.
( ) 0.21 ( ) .T. ( ) .V. ( )1
( ) +3257 ( ) .V ( )V ( ) “a”
( ) “abc” ( ) “0.” ( ) “+3257” ( )F
( ) 1% ( ) +3257. ( )C ( ) “José”
( ) “-0.0” ( ) Maria ( ) 0,35 ( ) “.F.”
( ) +36 ( ) .F. ( )±3 ( ) -0.001

Variáveis

A todo momento durante a execução de qualquer tipo de programa os


computadores estão manipulando informações representadas pelos
diferentes tipos de dados descritos no capítulo anterior. Para que não se
"esqueça" das informações, o computador precisa guardá-las em sua
memória.
Este capítulo é destinado ao estudo da forma como os computadores
armazenam e acessam informações contidas em sua memória.

20
Algoritmo & Lógica de Programação

Armazenamento de Dados na Memória


Cada um dos diversos tipos de dados apresentados no capítulo anterior
necessita de uma certa quantidade de memória para armazenar a
informação representada por eles.
Esta quantidade é função do tipo de dado considerado, do tipo da
máquina (computador) e do tipo de linguagem de programação. Por isso,
o que será exposto nos subitens seguintes não deve ser tomado como
padrão, apenas como exemplo.

Armazenamento de Dados do Tipo Literal


Devemos sempre ter em mente que um byte consegue representar 256
(28) possibilidades diferentes.
Uma informação do tipo literal nada mais é do que um conjunto de
caracteres que podem ser letras, dígitos ou símbolos especiais.
A união de todos os caracteres existentes nos computadores resulta num
conjunto com um número de elementos menor que 256. Deste resultado
surgiu a ideia de associar a cada caractere um número (código) variando
de 0 a 255 (256 possibilidades). No princípio, cada fabricante de
computador adotava uma convenção diferente para este código. Mais
recentemente, esta convenção foi padronizada a fim de facilitar a
portabilidade (migração) de programas entre máquinas diferentes. Esta
convenção é representada na forma de uma tabela de mapeamento de
caracteres em números. O padrão mais universalmente aceito é o ASCII,
cuja tabela é mostrada no site https://pt.wikipedia.org/wiki/ASCII.
Assim, cada célula de memória (byte) pode conter um caractere,
representado pelo seu código ASCII.
Retornando à questão do armazenamento de informações do tipo literal
na memória, deve-se lembrar que um dado deste tipo possui um certo
comprimento dado pelo número de caracteres nele contido. Portanto,
para guardar um dado do tipo literal devemos alocar (reservar) um
espaço contíguo de memória igual ao comprimento do mesmo,
destinando um byte para cada caractere da informação.
Exemplificando, a informação do tipo literal "banana" possui seis
caracteres e, portanto, seis bytes são necessários para reter a referida
informação na memória. A princípio, estes bytes podem estar em

21
Algoritmo & Lógica de Programação

qualquer lugar da memória, mas é conveniente que estejam juntos


(posições contíguas2). A primeira posição deste conjunto de bytes é
absolutamente arbitrária e sua escolha geralmente é feita
automaticamente pelo compilador (isto é, pelo programa que traduz um
outro escrito em alguma linguagem de programação para outra geral, a
linguagem de máquina do computador com que se trabalha).
A figura abaixo mostra o caso em que se armazena a literal "banana" no
conjunto de seis bytes contíguos de memória iniciando pela posição de
memória 0. Na verdade, ao invés dos caracteres da literal, os códigos
correspondentes aos mesmos é que são guardados na memória.

Endereço Informação
0 b (98)
1 a (97)
2 n (110)
3 a (97)
4 n (110)
5 a (97)
Armazenamento da literal “banana” na memória de um computador

Armazenamento de Dados do Tipo Lógico


Uma informação do tipo lógico só possui dois valores possíveis: .V. ou .F..
Assim, a princípio, um único bit seria suficiente para armazenar uma
informação deste tipo. Contudo, deve-se lembrar que a menor porção de
memória que se pode acessar é o byte. Portanto, uma informação do tipo
lógico é armazenada em um byte de memória. De certa forma, se por um
lado isto pode ser como um "desperdício" de memória, por outro
simplifica bastante a arquitetura de memória dos computadores (por
motivos que fogem ao contexto desta apostila). Além do mais, isto não é
tão relevante, uma vez que na prática o número de ocorrências de dados
do tipo lógico é bastante inferior ao de ocorrências de dados do tipo
literal ou numérico.

2
Contíguo é tudo aquilo que está imediatamente ao lado, sendo as áreas contíguas aquelas que
encontram-se lado a lado em determinado espaço geográfico.

22
Algoritmo & Lógica de Programação

Armazenamento de Dados do Tipo Inteiro


O conjunto dos números inteiros (Z) contém um número infinito de
elementos:

Z = { -∞, ..., -3, -2, -1, 0, 1, 2, 3, ..., +∞}

Obviamente é inviável o armazenamento de todos os números deste


conjunto num computador. Faz-se necessário realizar um estudo para
que se limite o número de elementos representáveis deste conjunto.
Se apenas um byte fosse utilizado para armazenar os dados do tipo
inteiro, existiriam apenas 256 números diferentes neste conjunto:

{-127, -126, ..., -2, -1, 0, 1, 2, ..., 127, 128)

Esta restrição é bastante forte, uma vez que boa parte das aplicações
práticas necessitam de números inteiros maiores que estes.
Se forem utilizados dois bytes para armazenar um número inteiro, o
universo de números representáveis cresce para 28 x 28 = 216 = 65.536
possibilidades:

{-32767, -32766, ..., -2, -1, 0, 1, 2, ..., 32767, 32768}

Este conjunto satisfaz à grande maioria das necessidades práticas. Assim,


em geral utilizam-se dois bytes para representar os números inteiros em
computadores. Contudo, restam algumas aplicações muito específicas
em que se precisa de um conjunto ainda maior. Para estes casos, algumas
linguagens de programação fornecem mecanismos para trabalhar
números inteiros com quatro bytes. Nestes casos os dados são ditos
inteiros longos ou estendidos.

Armazenamento de Dados do Tipo Real


O conjunto dos números reais (R) contém um número infinito de
elementos e, pelas mesmas razões que o conjunto dos números inteiros,
precisa ser limitado.
Para dados deste tipo julgou-se apropriado adotar quatro bytes para sua
representação interna nos computadores.

23
Algoritmo & Lógica de Programação

São muito comuns situações como as aplicações científicas em que é


necessária uma maior precisão de cálculo, intimamente ligada ao número
de casas decimais dos dados. Para este caso, em analogia com o que
acontece com os dados do tipo inteiro, algumas linguagens de
programação decidiram criar dados do tipo real estendido (com oito
bytes).

Conceito e Utilidade de Variáveis


Como visto anteriormente, informações correspondentes a diversos tipos
de dados são armazenadas na memória dos computadores. Para acessar
individualmente cada uma destas informações, a princípio, seria
necessário saber o tipo de dado desta informação (ou seja, o número de
bytes de memória por ela ocupados) e a posição inicial deste conjunto de
bytes na memória.
Percebe-se que esta sistemática de acesso a informações na memória é
bastante ilegível e difícil de se trabalhar. Para contornar esta situação
criou-se o conceito de variável, que é uma entidade destinada a guardar
uma informação.
Basicamente, uma variável possui três atributos: um nome, um tipo de
dado associado à mesma e a informação por ela guardada.

Atributos de uma variável.

Toda variável possui um nome que tem a função de diferenciá-la das


demais. Cada linguagem de programação estabelece suas próprias regras
de formação de nomes de variáveis. Adotaremos nesta apostila as
seguintes regras:

24
Algoritmo & Lógica de Programação

 Um nome de variável deve necessariamente começar com uma


letra;
 Um nome de variável não deve conter nenhum símbolo especial
exceto a sublinha (_).

Exemplos:
SALARIO = correto
1ANO = errado (não começou com uma letra)
ANO1 = correto
A CASA = errado (contém o caractere espaço em branco)
SAL/HORA = errado (contém o caractere "/”)
SAL_HORA = correto
_DESCONTO = errado (não começou com uma letra)

Definição de Variáveis em Algoritmos


Todas as variáveis utilizadas em algoritmos devem ser definidas antes de
serem utilizadas. Isto se faz necessário para permitir que o compilador
reserve um espaço na memória para as mesmas.
Nos algoritmos apresentados nesta apostila será adotada a seguinte
convenção:
 Todas as variáveis utilizadas em algoritmos serão definidas no
início do mesmo, por meio de um comando de uma das formas
seguintes:
VAR <nome_da_variável> : <tipo_da_variável>
VAR <lista_de_variáveis> : <tipo_das_variáveis>
 A palavra-chave VAR deverá estar presente sempre e será
utilizada uma única vez na definição de um conjunto de uma ou
mais variáveis;
 Numa mesma linha poderão ser definidas uma ou mais variáveis
do mesmo tipo. Para tal, deve-se separar os nomes das mesmas
por vírgulas;
 Variáveis de tipos diferentes devem ser declaradas em linhas
diferentes.

25
Algoritmo & Lógica de Programação

A forma de utilização deste comando ficará mais clara quando da


utilização da representação de algoritmos em linguagem estruturada
(pseudocódigo).
Esta convenção é válida para a representação de algoritmos na forma de
pseudocódigo. Em termos de fluxograma, não é usual adotar-se qualquer
forma de definição de variáveis.
Exemplo de definição de variáveis:
VAR NOME : literal[10]
IDADE : inteiro
SALARIO : real
TEM_FILHOS : lógico
No exemplo acima foram declaradas quatro variáveis:
 A variável NOME, capaz de armazenar dados literais de
comprimento 10 (dez caracteres);
 A variável IDADE, capaz de armazenar um número inteiro;
 A variável SALARIO, capaz de armazenar um número real;
 A variável TEM_FILHOS, capaz de armazenar uma informação
lógica.

Síntese
A memória dos computadores é composta por células numeradas
ordenadamente denominadas bytes. Cada byte é constituído por 8 bits.
Cada tipo de dado requer um número diferente de bytes para armazenar
a informação representada por ele na memória. Esta quantidade também
pode variar em função do tipo de computador considerado.
Uma variável é uma entidade dotada de um nome para diferenciá-la das
demais e um tipo de dado que define o tipo de informação que ela é
capaz de guardar. Uma vez definidos, o nome e o tipo de uma variável
não podem ser alterados no decorrer de um programa. Por outro lado, a
informação útil da variável é objeto de constante modificação durante o
decorrer do programa, de acordo com o fluxo de execução do mesmo.

26
Algoritmo & Lógica de Programação

Exercícios Propostos
1. Assinale com C os identificadores corretos e com I os incorretos.
Explique o que está errado nos identificadores incorretos.
( ) valor _____________________________________________
( ) _b248 ____________________________________________
( ) nota*do*aluno ____________________________________
( ) a1b2c3 ___________________________________________
( ) 3 x 4 _____________________________________________
( ) Maria____________________________________________
( ) km/h_____________________________________________
( ) xyz ______________________________________________
( ) nome empresa_____________________________________
( ) sala_215__________________________________________
( ) “nota” ___________________________________________
( ) ah! ______________________________________________
2. Supondo que as variáveis NB, NA, NMAT e SX sejam utilizadas
para armazenar a nota do aluno, o nome do aluno, o número da
matrícula e o sexo, declare-as corretamente, associando o tipo
adequado ao dado que será armazenado.
a. NB - __________________________________________
b. BA - __________________________________________
c. NMAT - _______________________________________
d. SX - __________________________________________

Expressões

Conceito
O conceito de expressão em termos computacionais está intimamente
ligado ao conceito de expressão (ou fórmula) matemática, onde um
conjunto de variáveis e constantes numéricas relacionam-se por meio de

27
Algoritmo & Lógica de Programação

operadores aritméticos compondo uma fórmula que, uma vez avaliada,


resulta num valor.

Triângulo de base (B) e altura (H).

Por exemplo, a fórmula de cálculo da área do triângulo da Figura acima é


dada por:
AREA = 0.5 x B x H
Esta fórmula utiliza três variáveis: B e H, que contêm as dimensões do
triângulo, e AREA, onde é guardado o valor calculado (resultado da
avaliação da expressão). Há, também, uma constante (0.5) e o operador
de multiplicação (x), que aparece duas vezes na expressão.
O conceito de expressão aplicado à computação assume uma conotação
mais ampla:
uma expressão é uma combinação de variáveis, constantes e operadores,
e que, uma vez avaliada, resulta num valor.

Operadores
Operadores são elementos funcionais que atuam sobre operandos e
produzem um determinado resultado. Por exemplo, a expressão 3 + 2
relaciona dois operandos (os números 3 e 2) por meio do operador (+)
que representa a operação de adição.
De acordo com o número de operandos sobre os quais os operadores
atuam, os últimos podem ser classificados em:
 Binários, quando atuam sobre dois operandos. Ex.: os operadores
das operações aritméticas básicas (soma, subtração,
multiplicação e divisão);
 Unários, quando atuam sobre um único operando. Ex.: o sinal de
(-) na frente de um número, cuja função é inverter seu sinal.

28
Algoritmo & Lógica de Programação

Outra classificação dos operadores é feita considerando-se o tipo de dado


de seus operandos e do valor resultante de sua avaliação. Segundo esta
classificação, os operadores dividem-se em aritméticos, lógicos e literais.
Esta divisão está diretamente relacionada com o tipo de expressão onde
aparecem os operadores.
Um caso especial é o dos operadores relacionais, que permitem comparar
pares de operandos de tipos de dados iguais, resultando sempre num
valor lógico.
Mais adiante serão apresentados os operadores dos diversos tipos acima
relacionados.

Tipos de Expressões
As expressões são classificadas de acordo com o tipo do valor resultante
de sua avaliação.

Expressões Aritméticas
Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo
numérico, seja ele inteiro ou real. Somente o uso de operadores
aritméticos e variáveis numéricas é permitido em expressões deste tipo.
Os operadores aritméticos relacionados às operações aritméticas básicas
estão sumarizados na tabela abaixo.

Operadores aritméticos e sua ordem de prioridade. Tabela 01


Operador Tipo Operação Prioridade
+ Binário Adição 4
- Binário Subtração 4
* Binário Multiplicação 3
/ Binário Divisão 3
** Binário Exponenciação 2
+ Unário Manutenção de sinal 1
- Unário Inversão de sinal 1

A prioridade entre operadores define a ordem em que os mesmos devem


ser avaliados dentro de uma mesma expressão. Este assunto será tratado
com maior profundidade numa seção posterior.

29
Algoritmo & Lógica de Programação

O caractere (*) é adotado na maioria das linguagens de programação para


representar a operação de multiplicação, ao invés do caractere (x), devido à
possibilidade da ocorrência do mesmo no nome de variáveis. Pela mesma
razão, o símbolo (**) é adotado para representar a operação de
exponenciação. Algumas linguagens de programação adotam o símbolo (^ -
circunflexo) para esta finalidade, mas isto é pouco frequente.
As variáveis usadas em expressões aritméticas podem somente ser do tipo
inteiro ou real. Se todas as variáveis que aparecem numa expressão são do
tipo inteiro, então o valor resultante da expressão é também do tipo inteiro.
Se ao menos uma das variáveis da expressão aritmética for do tipo real, então
o valor resultante da avaliação da expressão é necessariamente do tipo real.
Nos exemplos seguintes, assumiremos que:
 A, B e C são variáveis do tipo inteiro;
 X, Y e Z são variáveis do tipo real.
Exemplos:
A+B*C = expressão de resultado inteiro
A+B+Y = expressão de resultado real
A/B = expressão de resultado real
X/Y = expressão de resultado real

Expressões Lógicas
Expressões lógicas são aquelas cujo resultado da avaliação é um valor lógico
(.V. ou .F.).
Os operadores lógicos e suas relações de precedência são mostrados na
tabela abaixo.
Existem outros operadores lógicos, como por exemplo o OU_EXCLUSIVO,
mas suas funções podem ser exercidas por combinações dos três tipos de
operadores da tabela abaixo.
Operadores lógicos e suas relações de prioridade. Tabela 02.

Operador Tipo Operação Prioridade


.OU. Binário Disjunção 3
.E. Binário Conjunção 2
.NÃO. Unário Negação 1

30
Algoritmo & Lógica de Programação

Para exemplificar o uso de operadores lógicos, a tabela abaixo apresenta


duas variáveis lógicas A e B. Uma vez que cada variável lógica possui somente
dois valores possíveis, então há exatamente quatro combinações para estes
valores, razão pela qual a tabela tem quatro linhas. As diversas colunas
contêm os resultados das operações lógicas sobre as combinações possíveis
dos valores das variáveis A e B.
Tabela-Verdade dos operadores apresentados na Tabela 02. Tabela 03
A B .NÃO. A .NÃO. B A .OU. B A .E. B
.F. .F. .V. .V. .F. .F.
.F. .V. .V. .F. .V. .F.
.V. .F. .F. .V. .V. .F.
.V. .V. .F. .F. .V. .V.

Tabelas como a da Figura 03 são chamadas de Tabelas-Verdade. Convém


salientar as seguintes conclusões que podem ser extraídas por observação da
Tabela 03:
 O operador lógico .NÃO. sempre inverte o valor de seu operando.
Ex.: .NÃO. .V. = .F. e .NÃO. .F. = .V.;
 Para que a operação lógica .OU. tenha resultado verdadeiro basta
que um de seus operandos seja verdadeiro; Para melhor visualizar
este efeito, podemos imaginar que as variáveis lógicas A e B são
como dois interruptores ligados em paralelo num circuito de
acionamento de uma lâmpada (Figura 03).
Nas expressões lógicas onde aparecem apenas os operadores lógicos da
Tabela 03 somente variáveis do tipo lógico podem ser usadas. Isto parece
óbvio, uma vez que os operadores lógicos somente atuam sobre valores
(constantes ou variáveis) lógicos.
Há, ainda, outro tipo de operador que pode aparecer em operações lógicas:
os operadores relacionais, mostrados na Tabela 04.
Tabela 04 Operadores relacionais.
Operador Operação
= Igual
<> Diferente
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual

31
Algoritmo & Lógica de Programação

Estes operadores são somente usados quando se deseja efetuar


comparações. Comparações só podem ser feitas entre objetos de mesma
natureza, isto é, variáveis do mesmo tipo de dado. O resultado de uma
comparação é sempre um valor lógico.
O uso de operadores relacionais possibilita o aparecimento em
expressões lógicas de variáveis de outros tipos de dados que não o lógico.

Expressões Literais
Expressões literais são aquelas cujo resultado da avaliação é um valor
literal. Este tipo de expressão é bem menos frequente que os anteriores.
Os tipos de operadores existentes variam de uma linguagem de
programação para outra, não havendo uma padronização.
Para que o assunto não passe em branco, considere-se como exemplo a
operação de concatenação de strings: toma-se duas strings e acrescenta-
se (concatena-se) a segunda delas ao final da primeira. Em algumas
linguagens esta operação é representada pelo símbolo (+). Por exemplo,
a concatenação das strings "REFRIGERA" e "DOR" é representada por
"REFRIGERA" + "DOR" e o resultado de sua avaliação é "REFRIGERADOR".

Síntese
Uma expressão é uma combinação de variáveis, constantes e
operadores, que resulta num valor quando avaliada.
Operadores são elementos funcionais que atuam sobre operandos.
Segundo o número de operandos sobre os quais atua, um operador pode
ser classificado em unário ou binário. Segundo os tipos de dados de seus
operandos e do valor resultante de sua avaliação, os operadores podem
ser classificados em aritméticos, lógicos ou literais.
Um tipo especial de operador é o relacional, que é usado na comparação
de operandos de um mesmo tipo de dado e cujo resultado da avaliação é
sempre um valor lógico.
As expressões são classificadas de acordo com o valor resultante de sua
avaliação em:
 Aritméticas, que resultam num valor numérico (real ou inteiro);
 Lógicas, que resultam num valor lógico;
 Literais, que resultam num valor literal.

32
Algoritmo & Lógica de Programação

Há três regras básicas que definem a sequência correta de avaliação passo a


passo de expressões:
1. Operadores de maior prioridade devem ser avaliados primeiro. Em
caso de empate, a avaliação se faz da esquerda para a direita.
2. O uso de parênteses em subexpressões força a avaliação das
mesmas com maior prioridade.
3. Os diversos tipos d operadores devem ser avaliados na seguinte
sequência dentro de uma expressão complexa: primeiro os
aritméticos e literais; a seguir, os relacionais e, por último, os lógicos.

Exercícios Propostos
1. Dada a declaração de variáveis:
VAR A, B, C : inteiro
X, Y, Z : real
NOME, RUA : literal[20]
L1, L2 : lógico
Classifique as expressões seguintes de acordo com o tipo de dado do
resultado de sua avaliação, em I (inteiro), R (real), L (literal), B
(lógico) ou N (quando não for possível defini-lo):
( )A+B+C ( )A+X/Z
( )A+B+Z ( )A+Z/A
( ) NOME + RUA ( ) A B = L1
( )AB ( ) (A = B)
( )AY ( )X+Y/Z
( ) NOME RUA ( )X=Z/A
( ) L1 .OU. L2 ( ) L1 ** L2
( ) RUA <> NOME ( ) A + B / L2
( )A+B/C ( ) X < L1 / RUA

2. Para as mesmas variáveis declaradas no exercício 1, às quais são


dados os valores seguintes:
A=1 Y = 10.0 RUA = “PEDRINHO”
B=2 Z = -1.0 L2 = .F.
C=3 L1 = .V.
X = 2.0 NOME = “PEDRO”

33
Algoritmo & Lógica de Programação

Determine o resultado da avaliação das expressões abaixo:


A + C / B → ___________________________________________
A + B + C → ___________________________________________
C / B / A → ____________________________________________
-X ** B → ____________________________________________
- (X ** B) → ___________________________________________
(-X) ** B → ___________________________________________
NOME + RUA → _______________________________________
NOME = RUA → _______________________________________
L1 .OU. L2 → __________________________________________
(L1 .E.(.NÃO. L2)) → ____________________________________
(L2 .E. (.NÃO. L1)) → ____________________________________
(L1 .E. (.NÃO. L2)) .OU. (L2 .E. (.NÃO. L1)) → _________________
X Y .E. C = B → _________________________________________
(C - 3 * A) (X + 2 * Z) → __________________________________

Instruções Primitivas

Como o próprio nome diz, instruções primitivas são os comandos básicos


que efetuam tarefas essenciais para a operação dos computadores, como
entrada e saída de dados (comunicação com o usuário e com os
dispositivos periféricos), e movimentação dos mesmos na memória. Estes
tipos de instrução estão presentes na absoluta maioria das linguagens de

12
Algoritmo & Lógica de Programação

programação. De fato, um programa que não utiliza nenhuma instrução


primitiva - como as que serão definidas neste capítulo - é incapaz de se
comunicar com o mundo exterior e, portanto, não tem utilidade alguma.
Antes de passar à descrição das instruções primitivas, é necessária a
definição de alguns termos que serão utilizados mais à frente:
 Dispositivo de entrada é o meio pelo qual as informações (mais
especificamente os dados) são transferidas pelo usuário ou pelos
níveis secundários de memória ao computador. Os exemplos
mais comuns são: o teclado, o cartão perfurado (já obsoleto), as
fitas e os discos magnéticos, entre outros;
 Dispositivo de saída é o meio pelo qual as informações
(geralmente, os resultados da execução de um programa) são
transferidas pelo computador ao usuário ou aos níveis
secundários de memória. Exemplos: monitor de vídeo,
impressora, fitas e discos magnéticos, entre outros;
 Sintaxe é a forma como os comandos devem ser escritos, a fim
de que possam ser entendidos pelo tradutor de programas. A
violação das regras sintáticas é considerada um erro sujeito à
pena do não-reconhecimento do comando por parte do tradutor;
 Semântica é o significado, ou seja, o conjunto de ações que serão
exercidas pelo computador durante a execução do referido
comando.
Daqui por diante, todos os comandos novos serão apresentados por meio
de sua sintaxe e sua semântica, isto é, a forma como devem ser escritos
e a(s) ação(ões) que executam.

Instrução Primitiva de Atribuição


A instrução primitiva de atribuição, ou simplesmente atribuição, é a
principal maneira de se armazenar uma informação numa variável. Sua
sintaxe é:
<nome_de_variável> ← <expressão>
Em termos de fluxograma, os comandos de atribuição são representados
como na figura abaixo:

13
Algoritmo & Lógica de Programação

Forma de representação de comandos de atribuição em fluxogramas (figura 01)

O modo de funcionamento (semântica) de uma atribuição consiste 1) na


avaliação da expressão e 2) no armazenamento do valor resultante na
posição de memória correspondente à variável que aparece à esquerda
do comando.

Exemplo de aplicação de comandos de atribuição. (figura 02)

Instrução Primitiva de Saída de Dados

As instruções primitivas de saída de dados são o meio pelo qual informações


contidas na memória dos computadores são colocadas nos dispositivos de
saída, para que o usuário possa visualizá-las.
Há duas sintaxes possíveis para esta instrução:
Escreva <lista de variáveis>
ou
Escreva <literal>
14
Algoritmo & Lógica de Programação

Daqui por diante, Escreva será considerada uma palavra reservada e não
mais poderá ser utilizada como nome de variável, de modo que toda vez
que for encontrada em algoritmos será identificada como um comando
de saída de dados.
Uma lista_de_variáveis é um conjunto de nomes de variáveis separados
por vírgulas.
Um literal é simplesmente um dado do tipo literal delimitado por aspas.
Em termos de fluxograma, uma instrução de saída de dados é
representada como na figura abaixo.

Forma de representação de uma instrução de saída de dados em fluxogramas (Figura 03)

Repare que a representação no fluxograma dispensa o uso da palavra


reservada Escreva, uma vez que a mesma já está embutida na forma
geométrica da figura.
A semântica da instrução primitiva de saída de dados é muito simples: os
argumentos do comando são enviados para o dispositivo de saída. No
caso de uma lista de variáveis, o conteúdo de cada uma delas é
pesquisado na posição de memória correspondente à variável e depois
enviado para o dispositivo de saída. No caso de argumentos do tipo string,
estes são enviados diretamente ao referido dispositivo.
Há, ainda, a possibilidade de se misturar nomes de variáveis com literais
na lista de um mesmo comando. O efeito obtido é bastante útil e
interessante: a lista é lida da esquerda para a direita e cada elemento da
mesma é tratado separadamente; se um nome de variável for
encontrado, então a informação da mesma é pega da memória e colocada
no dispositivo de saída; no caso de um literal, o mesmo é escrito
diretamente no dispositivo de saída.

15
Algoritmo & Lógica de Programação

O exemplo da figura acima torna-se muito mais interessante com a


aplicação de instruções de saída de dados, como na Figura 04.

Figura 04: Exemplo de aplicação da instrução primitiva de saída de dados.

Instrução Primitiva de Entrada de Dados

O algoritmo da Figura 04 ainda necessita de uma melhoria essencial. Toda


vez que ele é executado, o mesmo valor é calculado, já que os valores das
variáveis PRECO_UNIT e QUANT permanecem inalterados. Seria
interessante que estes valores pudessem ser fornecidos ao computador
pelo usuário do programa toda vez que o programa fosse executado, para
que o usuário tivesse um maior controle sobre o valor calculado. A
instrução primitiva de entrada de dados foi criada para suprir esta
necessidade.
Sua sintaxe é:
Leia <lista_de_variáveis>
Da mesma forma que Escreva, daqui em diante Leia será tratada como
uma palavra reservada e não mais poderá ser usada como nome de
variável em algoritmos. A lista_de_variáveis é um conjunto de um ou
mais nomes de variáveis, separados por vírgulas.

16
Algoritmo & Lógica de Programação

A Figura 05 mostra como uma instrução de entrada de dados é


representada em fluxogramas. Esta representação dispensa o uso da
palavra-reservada Leia, pelo fato da mesma já estar de certo modo
embutida na forma geométrica da figura.

Figura 05. Forma de representação de uma instrução de entrada de dados em


fluxogramas.

A semântica da instrução de entrada (ou leitura) de dados é, de certa


forma, inversa à da instrução de escrita: os dados são fornecidos ao
computador por meio de um dispositivo de entrada e armazenados nas
posições de memória das variáveis cujos nomes aparecem na
lista_de_variáveis.
O algoritmo da Figura 04, modificado para que os valores das variáveis
PRECO_UNIT e QUANT sejam lidos no dispositivo de entrada, está na
Figura 06.

Figura 06. Exemplo de aplicação da instrução primitiva de entrada de dados num


algoritmo.

O algoritmo da Figura 06 ainda precisa sofrer algumas modificações para


ficar perfeito. Em sua forma atual, ao início de sua execução, ele procura

17
Algoritmo & Lógica de Programação

ler os valores para as variáveis PRECO_UNIT e QUANT. Um usuário


diferente daquele que criou o programa, a não ser que esteja bem
treinado no uso do mesmo, poderá encontrar dificuldades na interação
com o programa. Ele pode confundir a ordem em que os dados devem ser
fornecidos ou simplesmente esquecer o que o programa deseja que ele
digite. Ao término da execução o programa escreve como resultado um
número que pode não possuir nenhum significado ao usuário se este não
souber a finalidade para a qual o algoritmo foi concebido.
Uma preocupação constante de um bom programador deve ser a de
conceber um programa "amigo do usuário". Esta preocupação é traduzida
no planejamento de urna interface com o usuário (meio pelo qual um
programa e o usuário "conversam") bastante amigável. Em termos
práticos, isto se resume à aplicação de duas regras básicas:
 Toda vez que um programa estiver esperando que o usuário
forneça a ele um determinado dado (operação de leitura), ele
deve antes enviar uma mensagem dizendo ao usuário o que ele
deve digitar, por meio de uma instrução de saída de dados;
 Antes de enviar qualquer resultado ao usuário, um programa
deve escrever uma mensagem explicando o significado do
mesmo.
Estas medidas tornam o diálogo entre o usuário e o programador muito
mais fácil.
A versão final do algoritmo estudado é mostrada na Figura 07.

Figura 07. Exemplo de aplicação das instruções


primitivas de atribuição, entrada e saída de dados num algoritmo.

18
Algoritmo & Lógica de Programação

Síntese
A instrução primitiva de atribuição avalia uma expressão e armazena o
valor resultante numa variável. O valor resultante da expressão e a
variável devem ter tipos compatíveis.
A instrução primitiva de saída de dados admite como argumentos uma
lista de variáveis, um literal, ou uma mistura de ambos. No primeiro caso,
o valor de cada uma das variáveis é buscado na memória e colocado no
dispositivo de saída. No caso de literais, estes são copiados diretamente
no dispositivo de saída.
A instrução primitiva de entrada de dados busca, no dispositivo de
entrada, dados que são guardados nas posições de memória
correspondentes às variáveis da lista que lhe são passadas como
argumento.

Exercícios Resolvidos
1. Escreva um algoritmo (fluxograma e pseudocódigo) para calcular
a média entre dois números quaisquer.
Solução:
A ideia principal do algoritmo está centrada na expressão
matemática utilizada no cálculo da média (M) entre dois
números, N1 e N2, dada por: M = (N1 + N2) / 2.
Para que o valor de M possa ser calculado pelo algoritmo, é
necessário que os valores de N1 e N2 tenham sido fornecidos ao
mesmo com antecedência. Portanto, a primeira etapa do
algoritmo consiste da obtenção (leitura) dos valores de N1 e N2 e
armazenamento dos mesmos em posições distintas de memória
(variáveis).
Na sequência, o valor da média deve ser calculado por meio de
uma expressão apropriada e atribuído a uma terceira variável
(M).
Por fim, deve-se relatar ao usuário o valor calculado por meio de
uma instrução primitiva de saída de dados.
O fluxograma do algoritmo descrito é mostrado a seguir. Note
que ele está enriquecido com instruções para informar sua
finalidade, os dados que devem ser fornecidos ao usuário e o
significado do valor calculado.

19
Algoritmo & Lógica de Programação

A transformação do fluxograma em pseudocódigo exige a disponibilidade de


algumas informações adicionais concernentes ao tipo das variáveis utilizadas.
Como o algoritmo opera apenas com dados numéricos, certamente as
variáveis utilizadas serão do tipo inteiro ou real. Como se deseja calcular a
média entre dois números quaisquer, então as variáveis N1 e N2 devem ser
capazes de armazenar números com ou sem parte fracionária e, portanto, é
necessário que estas sejam do tipo real. Como o valor médio entre dois
números reais é um número que pode ou não ter parte fracionária, então a
variável M também deve ser do tipo real.
De posse dessa informação, pode-se escrever o pseudocódigo do algoritmo
em questão, a partir de seu fluxograma.

20
Algoritmo & Lógica de Programação

2. Escreva um algoritmo para calcular o valor de y como função de


x, segundo a função y(x) = 3x + 2, num domínio real.
Solução:
Essencialmente o algoritmo usado na solução deste problema
consiste na obtenção do valor de x para o qual se deseja calcular
a função, o cálculo desta propriamente dito e a mostra do
resultado obtido ao usuário:
Veja fluxograma correspondente a seguir:

Para que se possa escrever o pseudocódigo do algoritmo deve-se decidir


qual será o tipo das variáveis X e Y. Como especificado no enunciado do
problema, o algoritmo deve operar num domínio real e, portanto, as
variáveis X e Y devem ser do tipo real. Então, o pseudocódigo fica assim:

21
Algoritmo & Lógica de Programação

3. Escreva um algoritmo para calcular o consumo médio de um


automóvel (medido em Km/l), dado que são conhecidos a
distância total percorrida e o volume de combustível consumido
para percorrê-la (medido em litros).
Solução:
A principal questão a ser levantada na obtenção do algoritmo
pedido consiste na formulação da expressão usada para calcular
o consumo médio (CM) a partir da distância total percorrida
(DIST) e do volume de combustível consumido (VOL), que é dada
por:
CM = DIST / VOL
Uma vez obtida esta expressão, a formulação do algoritmo
desejado consiste em uma simples repetição daqueles
apresentados nas questões anteriores: deve-se obter o valor das
variáveis DIST e VOL, calcular o consumo pela expressão acima e,
finalmente, mostrar ao usuário o valor calculado.
O fluxograma correspondente ao algoritmo é o seguinte:

Assumindo que todas as variáveis utilizadas (CM, DIST e VOL) são do tipo
real, pode se escrever o pseudocódigo seguinte para o fluxograma
anterior:

22
Algoritmo & Lógica de Programação

Exercícios Propostos
Para cada um dos problemas propostos a seguir, expresse um algoritmo
que pode ser usado em sua solução na forma de fluxograma e
pseudocódigo.
1. Calcule a média de quatro números inteiros dados.

2. Leia uma temperatura dada na escala Celsius (C) e imprima o


equivalente em Fahrenheit (F). (Fórmula de conversão: F = 9/5 *
C + 32).

3. Leia uma quantidade de chuva dada em polegadas e imprima o


equivalente em milímetros (25,4 mm = 1 polegada).

4. 4.Calcule o quadrado de um número, ou seja, o produto de um


número por si mesmo.

5. O custo ao consumidor de um carro novo é a soma do custo de


fábrica com a porcentagem do distribuidor e dos impostos,
ambos aplicados ao custo de fábrica. Supondo que a
porcentagem do distribuidor seja de 12% e a dos impostos de
45%, prepare um algoritmo para ler o custo de fábrica do carro e
imprimir o custo ao consumidor.

6. O cardápio de uma lanchonete é dado abaixo. Prepare um


algoritmo que leia a quantidade de cada item que você consumiu
e calcule a conta final.

23
Algoritmo & Lógica de Programação

Hambúrguer................ R$ 3,00
Cheeseburger.............. R$ 2,50
Fritas............................ R$ 2,50
Refrigerante................. R$ 1,00
Milkshake..................... R$ 3,00
7. Uma companhia de carros paga a seus empregados um salário de
R$ 500,00 por mês mais uma comissão de R$ 50,00 para cada
carro vendido e mais 5% do valor da venda. Elabore um algoritmo
para calcular e imprimir o salário do vendedor num dado mês
recebendo como dados de entrada o nome do vendedor, o
número de carros vendidos e o valor total das vendas.

8. Calcule a média de um aluno na disciplina de MDS. Para isso


solicite o nome do aluno, a nota da prova e a nota qualitativa.
Sabe-se que a nota da prova tem peso 2 e a nota qualitativa peso
1 Mostre a média como resultado.

Controle de Fluxo de Execução

Até o momento os algoritmos estudados utilizam apenas instruções


primitivas de atribuição, e de entrada e saída de dados. Qualquer
conjunto de dados fornecido a um algoritmo destes será submetido ao
mesmo conjunto de instruções, executadas sempre na mesma sequência.
No entanto, na prática muitas vezes é necessário executar ações diversas
em função dos dados fornecidos ao algoritmo. Em outras palavras,
dependendo do conjunto de dados de entrada do algoritmo, deve-se
executar um conjunto diferente de instruções. Além disso, pode ser
necessário executar um mesmo conjunto de instruções um número
repetido de vezes. Em resumo, é necessário controlar o fluxo de execução
das instruções (a sequência em que as instruções são executadas num
algoritmo) em função dos dados fornecidos como entrada ao mesmo.
Neste capítulo serão estudadas as estruturas básicas de controle do fluxo
de instruções de um algoritmo. De acordo com o modo como este
controle é feito, estas estruturas são classificadas em:
 estruturas sequenciais;
 estruturas de decisão;
 estruturas de repetição.

24
Algoritmo & Lógica de Programação

Comandos Compostos
Um comando composto é um conjunto de zero ou mais comandos (ou
instruções) simples, como atribuições e instruções primitivas de entrada
ou saída de dados, ou alguma das construções apresentadas neste
capítulo.
Este conceito é bastante simples e será útil e conveniente nos itens
seguintes, na definição das estruturas básicas de controle de execução.

Estrutura Sequencial
Na estrutura sequencial os comandos de um algoritmo são executados
numa sequência pré-estabelecida. Cada comando é executado somente
após o término do comando anterior.
Em termos de fluxogramas, a estrutura sequencial é caracterizada por um
único fluxo de execução (um único caminho orientado) no diagrama. Em
pseudocódigos, a estrutura sequencial caracteriza-se por um conjunto de
comandos dispostos ordenadamente. Como exemplos de aplicação desta
estrutura de controle tem-se os algoritmos do capítulo anterior, onde não
há estruturas de decisão ou de repetição.

Figura 01 Trecho sequencial de um algoritmo

25
Algoritmo & Lógica de Programação

Estruturas de Decisão
Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em
função do resultado da avaliação de uma ou mais condições. Uma
condição é uma expressão lógica.
A classificação das estruturas de decisão é feita de acordo com o número
de condições que devem ser testadas para que se decida qual o caminho
a ser seguido. Segundo esta classificação, têm-se dois tipos de estruturas
de decisão:
 Se
 Escolha

Estruturas de Decisão do Tipo Se


Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o
resultado desta avaliação for verdadeiro (.V.), então um determinado
conjunto de instruções (comando composto) é executado. Caso
contrário, ou seja, quando o resultado da avaliação for falso (.F.), um
comando diferente é executado.
Em termos de fluxogramas, uma construção do tipo Se pode ser encarada
como uma bifurcação onde há dois caminhos que podem ser seguidos
(Figura 02). A execução do algoritmo prosseguirá necessariamente por
um deles. Esta escolha é feita em função do resultado da expressão: um
dos caminhos é rotulado com (.V.) e será seguido quando a condição for
falsa.
A sintaxe da estrutura de decisão do tipo Se é mostrada na Figura 02.

Figura 02 Sintaxe da estrutura de decisão Se-Então-Senão-Fim_se

26
Algoritmo & Lógica de Programação

Note-se o aparecimento de novas palavras-reservadas Se, Então, Senão


e Fim_se.
A semântica desta construção é a seguinte: a condição é avaliada. Se o
resultado for verdadeiro, então o comando_composto_1 é executado. Ao
término de sua execução o fluxo do algoritmo prossegue pela instrução
seguinte à construção, ou seja, o primeiro comando após o Fim_se.
Nos casos em que a condição é avaliada como falsa, o
comando_composto_2 é executado e, ao término do mesmo, o fluxo de
execução prossegue pela primeira instrução seguinte ao Fim_se.
Há casos particulares e muito comuns desta construção, onde o comando
composto 2 é um conjunto vazio de instruções. Neste caso, a porção
relativa ao Senão pode ser omitida, resumindo a sintaxe da construção à
forma mostrada na Figura 03.

Figura 03 Sintaxe da estrutura de decisão Se-Então-Fim_se.

A semântica desta construção é a seguinte: no caso de a condição ser


verdadeira, o Comando_composto_1 é executado e, após seu término, o
fluxo de execução prossegue pela próxima instrução após o Fim_se.
Quando a condição é falsa, o fluxo de execução prossegue normalmente
pela primeira instrução após o Fim_se.
A Figura 04 exemplifica o uso da construção Se-Então-Senão-Fim_se num
algoritmo para determinar se uma pessoa é maior ou menor de idade.

27
Algoritmo & Lógica de Programação

Figura 04 Exemplo de aplicação da estrutura de decisão Se-Então-Senão-Fim_se.

Estruturas de Decisão do Tipo Escolha


Este tipo de estrutura é uma generalização da estrutura Se, onde somente
uma condição era avaliada e dois caminhos podiam ser seguidos. Na
estrutura de decisão do tipo Escolha pode haver uma ou mais condições
a serem testadas e um comando composto diferente associado a cada
uma destas.

Figura 05 Sintaxe usada em fluxograma e


pseudocódigo para construção Escolha.

28
Algoritmo & Lógica de Programação

Seu funcionamento é o seguinte: ao entrar-se numa construção do tipo


Escolha, a condição_1 é testada: se for verdadeira, o
comando_composto_1 é executado e, após seu término, o fluxo de
execução prossegue pela primeira instrução após o final da construção
(Fim_escolha); se a condição_1 for falsa, a condição_2 é testada: se esta
for verdadeira, o comando_composto_2 é executado e, ao seu término,
a execução prossegue normalmente pela instrução seguinte ao
Fim_escolha. O mesmo raciocínio é estendido a todas as condições da
construção. No caso em que todas as condições são avaliadas como
falsas, o comando_composto_s (correspondente ao Senão da
construção) é executado.
Um exemplo de aplicação desta construção é mostrado na Figura 06,
baseado num algoritmo de reajuste salarial variável em função da
profissão.

Figura 06 Exemplo de aplicação da construção Escolha.

Um caso particular desta construção é aquele em que o


Comando_composto_s não contém nenhuma instrução. Isto ocorre nas
situações em que não se deseja efetuar nenhuma ação quando todas as

29
Algoritmo & Lógica de Programação

condições testadas são falsas. Assim, pode-se dispensar o uso do Senão


na construção, como acontece também na construção Se.

Estruturas de Repetição
São muito comuns as situações em que se deseja repetir um determinado
trecho de um programa certo número de vezes. Por exemplo, pode-se
citar o caso em que se deseja realizar um mesmo processamento para
conjuntos de dados diferentes. Exemplo: processamento de folha de
pagamentos de uma empresa em que o mesmo cálculo é efetuado para
cada um dos funcionários.
As estruturas de repetição são muitas vezes chamadas de Laços ou,
também, de Loops.
A classificação das estruturas de repetição é feita de acordo com o
conhecimento prévio do número de vezes que o conjunto de comandos
será executado. Assim, os laços dividem-se em:
 laços contados, quando se conhece previamente quantas vezes o
comando composto no interior da construção será executado;
 laços condicionais, quando não se conhece de antemão o número
de vezes que o conjunto de comandos no interior do laço será
repetido, pelo fato de o mesmo estar amarrado a uma condição
sujeita à modificação pelas instruções do interior do laço.

Laços Contados
Os laços contados são úteis quando se conhece previamente o número
de vezes que se deseja executar um determinado conjunto de comandos.
Então, este tipo de laço nada mais é que uma estrutura dotada de
mecanismos para contar o número de vezes que o corpo do laço (ou seja,
o comando composto em seu interior) é executado. A sintaxe usada em
pseudocódigos para os laços contados é mostrada na Figura 07.

Figura 07 Sintaxe usada para os laços contados

30
Algoritmo & Lógica de Programação

A semântica do laço contado é a seguinte: no início da execução da


construção o valor <início> é atribuído à variável <var>. A seguir, o valor
da variável <var> é comparado com o valor <final>. Se <var> for maior
que <final>, então o comando composto não é executado e a execução
do algoritmo prossegue pelo primeiro comando seguinte ao Fim_para.
Por outro lado, se o valor de <var> for menor ou igual a <final>, então o
comando composto no interior da construção é executado e, ao final do
mesmo, o valor é adicionado à variável <var>. Feito isso, retorna-se à
comparação entre <var> e <final> e repete-se o processo até que <var>
tenha um valor maior que <final>, quando o laço é finalizado e a execução
do algoritmo prossegue pela instrução imediatamente seguinte ao
Fim_para.
Algumas observações interessantes devem ser feitas:
 <var> é necessariamente uma variável, uma vez que seu valor é
alterado a cada
iteração (volta do laço);
 <início>, <fim> e <inc> podem ser constantes ou variáveis. No
segundo caso (variáveis), algumas linguagens de programação
proíbem que seus valores sejam modificados durante a execução
do laço;
 <inc> é o valor que é adicionado à variável <var> ao final de cada
iteração do laço. Há linguagens de programação que permitem
que lhe seja atribuído um valor negativo, de modo que o valor da
variável <var> diminui a cada iteração. Neste caso, deve-se
atentar à necessidade de inversão do sinal da comparação (de >
para <) que é feito a cada volta do laço, para seu correto
funcionamento. Contudo, este texto assumirá que <inc> possui
um valor sempre positivo, o que não causa perda de
generalidade, já que um resultado análogo pode ser obtido com
o uso das construções enquanto e repita, apresentadas a seguir;
 na grande maioria dos casos <inc> tem o valor 1 (incremento
unitário). Portanto, admite-se a omissão do trecho incr de <inc>
da sintaxe do comando Para e, quando isto ocorre, assume-se um
incremento de 1.

31
Algoritmo & Lógica de Programação

Laços Condicionais
Laços condicionais são aqueles cujo conjunto de comandos em seu
interior é executado até que uma determinada condição seja satisfeita.
Ao contrário do que acontece nos laços contados, nos laços condicionais
não se sabe de antemão quantas vezes o corpo do laço será executado.
As construções que implementam laços condicionais mais comuns nas
linguagens de programação modernas são:
 Enquanto
 Repita

Construção Enquanto
Sua semântica é a seguinte: ao início da construção Enquanto a condição
é testada. Se seu resultado for falso, então o comando composto no seu
interior não é executado e a execução prossegue normalmente pela
instrução seguinte ao Fim_enquanto.
Se a condição for verdadeira o comando composto é executado e ao seu
término retorna-se ao teste da condição. Assim, o processo acima será
repetido enquanto a condição testada for verdadeira. Quando esta for
falsa, o fluxo de execução prosseguirá normalmente pelas instruções
posteriores ao Fim_enquanto.

Figura 08 Sintaxe da construção Enquanto para laços condicionais.

Uma vez dentro do corpo do laço, a execução somente abandonará o


mesmo quando a condição for falsa. O usuário deste tipo de construção
deve estar atento à necessidade de que em algum momento a condição
deverá ser avaliada como falsa. Caso contrário, o programa permanecerá
indefinidamente no interior do laço, o que é conhecido como laço infinito.

32
Algoritmo & Lógica de Programação

Construção Repita
Seu funcionamento é bastante parecido ao da construção Enquanto. O
comando é executado uma vez. A seguir, a condição é testada: se ela for
falsa, o comando composto é executado novamente e este processo é
repetido até que a condição seja verdadeira, quando então a execução
prossegue pelo comando imediatamente seguinte ao final da construção.

Figura 09 Sintaxe da construção Repita para


laços condicionais.

Esta construção difere da construção Enquanto pelo fato de o comando


composto ser executado uma ou mais vezes (pelo menos uma vez), ao
passo que na construção Repita o comando composto é executado zero
ou mais vezes (possivelmente nenhuma). Isto acontece porque na
construção Repita o teste da condição é feito ao final da construção, ao
contrário do que acontece na construção Enquanto, onde o teste da
condição é feito no início da mesma.

Aninhamentos
Um aninhamento ou embutimento é o fato de se ter qualquer um dos
tipos de construção apresentados anteriormente dentro do conjunto de
comandos (comando composto) de uma outra construção.
Em qualquer tipo de embutimento é necessário que a construção interna
esteja completamente embutida na construção externa.
Em programação, uma sub-rotina aninhada (ou função aninhada) é uma
sub-rotina encapsulada noutra. O contexto da sub-rotina aninhada é
limitado à sub-rotina que a encapsula.

33
Algoritmo & Lógica de Programação

O aninhamento ocorre quando se utiliza uma estrutura dentro de uma


mesma estrutura. Por exemplo, se você utiliza a estrutura de decisão se...
então dentro de uma outra estrutura se... então, você terá um
aninhamento dessa estrutura se.

Figura 10 Exemplos de aninhamentos (a) válidos e (b) inválidos.

Síntese
As estruturas de controle do fluxo de execução são essenciais para que se
possa alterar a sequência de execução dos comandos de um programa
em função dos dados do mesmo.
Um comando composto é um conjunto de zero ou mais comandos
simples, sejam eles instruções primitivas ou construções como as
estudadas neste capítulo.
Uma estrutura sequencial é aquela em que os comandos vão sendo
executados numa sequência pré-estabelecida, um após o outro.
As estruturas de decisão permitem escolher qual o caminho a ser seguido
num algoritmo em função de uma ou mais condições. A construção Se
utiliza apenas uma condição, ao passo que a construção Escolha utiliza
uma ou mais condições.
As estruturas de repetição são usadas quando se deseja repetir um trecho
de um algoritmo (comando composto). Quando o número de vezes que o
trecho será repetido é conhecido diz-se que o laço é do tipo contado
(construção Para). Quando este número não é conhecido, mas é função
de uma determinada condição, então têm-se os laços condicionais
(construção Enquanto e Repita).
As construções Repita e Enquanto diferem uma da outra pelo fato de a
primeira efetuar o teste da condição no final da construção e, portanto,

34
Algoritmo & Lógica de Programação

executar o comando composto ao menos uma vez. Por outro lado, a


construção Enquanto efetua o teste da condição em seu início e executa
o comando composto zero ou mais vezes.
Os aninhamentos podem usar qualquer uma das construções
apresentadas neste capítulo; desde que atendam a uma regra única: a
construção mais interna deve estar inteiramente contida na construção
imediatamente mais externa.

Bibliografia
Conheça os ultrabooks. Disponível em:
• http://www.zoom.com.br/notebook/deumzoom/conheca-os-
ultrabooks?s=1&og=18000&gclid=CP6CyfXd37ICFQc4nAod1nwAJw.
Acesso em: 29 06. 2023.
• nodestudio.com.br
• https://hubify.com.br/social-media/tiktok/

35
Algoritmo & Lógica de Programação

36
Algoritmo & Lógica de Programação

37

Você também pode gostar