Logo Passei Direto
Buscar

apostila de algoritmos (3)

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

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

Prévia do material em texto

Índice 
 
 
1. Introdução _____________________________________________________________________ 3 
1.1 Conceito de Algoritmo_________________________________________________________ 3 
1.2 Fases de um Algoritmos _______________________________________________________ 3 
1.3 Visão Geral _________________________________________________________________ 4 
2. Formas de Representação de Algoritmos ____________________________________________ 5 
2.1 Descrição Narrativa __________________________________________________________ 5 
2.2 Fluxograma Convencional _____________________________________________________ 6 
2.3 Pseudocódigo _______________________________________________________________ 7 
2.4 Síntese _____________________________________________________________________ 8 
3. Tipos de Dados_________________________________________________________________ 10 
3.1 Dados Numéricos ___________________________________________________________ 10 
3.2 Dados Literais. _____________________________________________________________ 11 
3.3 Dados Lógicos______________________________________________________________ 12 
3.4 Síntese ____________________________________________________________________ 12 
4. Variáveis______________________________________________________________________ 15 
4.1 Arquitetura de Memória ______________________________________________________ 15 
4.2 Tipos de Dados _____________________________________________________________ 16 
4.3 Armazenamento de Dados na Memória __________________________________________ 16 
4.4 Conceito e Utilidade de Variáveis_______________________________________________ 19 
4.5 Definição de Variáveis em Algoritmos ___________________________________________ 20 
4.6 Definição de Variáveis em Pascal_______________________________________________ 20 
4.7 Mapeamento de Variáveis na Memória __________________________________________ 21 
4.8 Tipos de Dados em Pascal ____________________________________________________ 22 
4.9 Síntese ____________________________________________________________________ 22 
5. Expressões ____________________________________________________________________ 24 
5.1 Operadores ________________________________________________________________ 24 
5.2 Tipos de Expressões _________________________________________________________ 25 
5.3 Avaliação de Expressões ______________________________________________________ 29 
5.4 Síntese ____________________________________________________________________ 29 
5.5 Exercício Resolvido__________________________________________________________ 30 
6. Instruções Primitivas ___________________________________________________________ 32 
6.1 Instrução Primitiva de Atribuição_______________________________________________ 32 
6.2 Instrução Primitiva de Saída de Dados____________________________________________ 0 
6.3 Instrução Primitiva de Entrada de Dados_________________________________________ 37 
6.4 Síntese ____________________________________________________________________ 40 
6.5 Exercícios Resolvidos ________________________________________________________ 41 
 2
7. Controle do Fluxo de Execução ___________________________________________________ 47 
7.1 Comandos Compostos ________________________________________________________ 47 
7.2 Estrutura Seqüencial _________________________________________________________ 47 
7.3 Estruturas de decisão ________________________________________________________ 47 
7.4 Estruturas de Repetição ______________________________________________________ 56 
7.5 Aninhamentos ______________________________________________________________ 63 
7.6 Síntese ____________________________________________________________________ 64 
8. Símbolos Usados em Fluxogramas_________________________________________________ 68 
9. Funções pré-definidas do Pascal __________________________________________________ 70 
9.1 Descrição das Funções/Rotinas:________________________________________________ 70 
10. Problemas Resolvidos em Algoritmos, Pascal e C __________________________________ 79 
10.1 Algoritmo do Triangulo_______________________________________________________ 79 
10.2 Algoritmo Preco Automóvel ___________________________________________________ 80 
10.3 Algoritmo Media Valor _______________________________________________________ 81 
10.4 Algoritmo 3 Menores_________________________________________________________ 82 
10.5 Algoritmo Media Maior que 4__________________________________________________ 83 
10.6 Algoritmo Salário ___________________________________________________________ 85 
10.7 Algoritmo 50 Triangulos ______________________________________________________ 86 
10.8 Algoritmo Media Menores_____________________________________________________ 87 
 
 
 3
1. Introdução 
1.1 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 estas dispositivos mecânicos, eletrônicos (como os computadores) ou 
de natureza mista. 
 Para que a automação de uma tarefa sejam 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 seqüência em que estas fases devem ser realizadas. 
 A especificação da seqüê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. 
 Tornando ao contexto computacional, daqui em diante a atenção deste trabalho estará voltada à 
automação de tarefas utilizando computadores. 
 Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria um único 
algoritmo. Algoritmo é um caminho para a solução de um problema, e em geral, os caminhos que levam a 
uma solução são muitas. 
 O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios. 
 
 Algoritmos não se aprende: 
- Copiando Algoritmos 
- Estudando Algoritmos 
 
 Algoritmos só se aprendem: 
- Construindo Algoritmos 
- Testando Algoritmos 
 
Para que um computador possa desempenhar uma tarefa é necessário que este 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. 
1.2 Fases de um Algoritmos 
 Quando temos um problema e vamos utilizar um computador para resolve-lo inevitavelmente 
temos que passar pelas seguintes etapas: 
 
 a) Definir o problema. 
 b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) de resolver o problema. 
c) Terminada a fase de estudo, utilizar uma linguagem de programação para escrever o programa que 
deverá a princípio, resolver o problema. 
d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi encontrada, deverá ser 
retornado para a fase de estudo para descobrir onde está a falha. 
 
 4
 Estas são de forma bem geral, as etapas que um analista passa, desde a apresentação do 
problema até a sua efetiva solução. Iremos, neste curso, nos ater as etapas de estudo, também chamada de 
análise, ea etapa de programação. Mas antes vamos definir o seguinte conceito: Programar um 
computador consiste em elaborar um conjunto finito de instruções, reconhecidas pela máquina, de forma 
que o computador execute estas instruções. Estas instruções possuem regras e uma Sintaxe própria, como 
uma linguagem tipo português ou inglês, sendo isto chamadas de linguagem de computador. 
 No mundo computacional existe uma grande variedade de linguagens Pascal, C, C++, Java, 
Cobol, Fortran, etc… . 
1.3 Visão Geral 
O objetivo deste trabalho é prover ao leitor meios de organizar o raciocínio empregado na 
solução de problemas rotineiros e expressá-lo numa forma entendida (quase) diretamente pelos 
computadores. 
 A técnica apresentada é basicamente a da Programação Estruturada, onde é enfatizada a 
abordagem de problemas pelo Método de Refinamento Sucessivos. 
 5
2. 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 a idéia principal, o algoritmo, 
dificultando seu entendimento. 
 Dentre as formas de representação de algoritmos mais conhecidas sobressaltam: 
- a Descrição Narrativa; 
- o Fluxograma Convencional 
- o Pseudocódigo, também conhecido como Linguagem estruturada ou Portugol. 
2.1 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: 
 
- 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 
Retire do forno 
Deixe esfriar 
 
- Troca de um pneu furado: 
Afrouxar ligeramente 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 Banho: 
Entrar no banheiro e tirar a roupa 
Abrir a torneira do chuveiro 
Entrar na água 
Ensaboar-se 
Sair da água 
Fechar a torneira 
Enxugar-se 
Vestir-se 
- Cálculo da média de um aluno: 
 6
Obter as notas da primeira e da Segunda provas 
Calcular a média aritmética entre as duas 
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, ambigüidades e imprecisões. 
 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 de 30o no sentido anti-horário". 
2.2 Fluxograma Convencional 
E 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 idéias contidas nos 
algoritmos e justifica sua popularidade. 
Esta forma e aproximadamente intermediária a descrição narrativa e ao pseudocódigo (subitem 
seguinte), pois e 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 (Capítulos 2 e 3). 
Ha vários padrões que definem as formas geométricas das figuras que devem ser usadas para 
representar cada um dos diversos tipos de instruções; contudo, nenhum deles se sobressai com relação 
aos demais no que diz respeito a aceitação por parte dos usuários. 
Nota-se que os fluxogramas convencionais preocupam-se 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 a abordagem deste texto não está interessada em detalhes físicos da 
implementação (onde fazer), mas tão somente com o nível lógico (o que fazer e como fazer) das 
instruções do algoritmo, será adotada a notação simplificada da Figura 1 para os fluxogramas. De 
qualquer modo, o Apêndice A contém uma tabela com os símbolos mais comuns nos fluxogramas 
convencionais. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 1 - Principais formas geométricas usadas em fluxogramas 
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 de algoritmo se 
encerra. Partindo do símbolo inicial, há sempre um único caminho orientado a ser seguido, representando 
a existência de uma única seqüê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á 
= Início e final do fluxograma 
= Operação de entrada de dados 
= Operação de saída de dados 
= Operações de atribuição e chamada ou retorno de subalgoritmo 
= Decisão 
 7
sempre um único caminho saindo desta. Exceções e 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 2 mostra a representação do algoritmo de cálculo da média de um aluno sob a forma de 
um fluxograma. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2 - Exemplo de um fluxograma convencional 
2.3 Pseudocódigo 
 Antes de utilizarmos uma linguagem de computador, é necessário organizar as ações a serem 
tomadas pela máquina de forma organizada e lógica, sem nos atermos as regras rígidas da Sintaxe de uma 
linguagem. Para isto utilizaremos uma forma de escrever tais ações, conhecida como algoritmo, ou 
pseudocódigo. 
 Conceituando: Algoritmo consiste em um conjunto lógico e finito de ações ( instruções ) que 
resolvem um determinado problema. 
 Esta forma de representação de algoritmos é rica em detalhes, como a definição dos tipos das 
variáveis usadas no algoritmo e, 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 que a tradução de um 
algoritmo nela representada para uma linguagem de programação específica seja praticamente direta. 
Início 
N1, N2 
Média ← 
(N1 + N2 ) /2 
Média > 7 
.F. 
.V. "Aprovado" 
"Reprovado" 
Fim 
 8
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. 
 
Em Pascal ficaria da seguinte forma: 
 
Program <Nome_do_programa>; 
<declaração_de_variáveis> 
<subalgoritmos> 
Begin 
<Corpo_do_Programa>; 
End. 
 
Onde: 
 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-
lo 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 de uma porção opcional do pseudocódigo onde sãodefinidos os 
subalgoritmos. 
 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 3 mostra a representação do algoritmo do cálculo da média de um 
aluno, na forma de um pseudocódigo. 
 
Algoritmo Média 
Var N1, N2, Média : real 
Início 
 Leia N1, N2 
 Média ← (N1 + N2) / 2 
 Se Média > 7 
 Então 
 Escreva "Aprovado" 
 Senão 
 Escreva "Reprovado" 
 Fim_se 
Fim 
Figura 3 - Figura de um pseudocódigo 
2.4 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). 
2.4.1 Exercícios A 
Usando Descrição Narrativa, Fluxograma e Pseudocódigo desenvolva os seguintes algoritmos: 
 9
1. Elabore um algoritmo para mudar um pneu furado. Admita que estão disponíveis um macaco e outro 
pneu em boas condições. 
2. Elabore um algoritmo para fazer pipoca numa panela de fogão, usando manteiga, sal e milho de 
pipoca. 
3. Desenvolva um algoritmo para trocar um vidro quebrado de uma janela. Numa lista à parte, descreva 
todos os matérias necessários. 
4. Elabore um algoritmo que represente sua saída de casa pela manhã. Comece com o passo “dormindo 
na cama” e inclua todas as atividades matutinas normais. 
5. (a) Elabore um algoritmo para realizar uma chamada telefônica. 
 (b) Amplie a parte (a) para um algoritmo que permita realizar chamadas de longa distância. Inclua as 
possibilidades de chamadas aparelho-a-aparelho, a cobrar e de pessoa-a-pessoa. 
 
 10
3. Tipos de Dados 
Todo o trabalho realizado por um computador e 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ção do 
tipo particular de processador utilizado em sua implementação. 
- Os dados propriamente ditos, que correspondem a porção das informações a serem processadas pelo 
computador. 
 
A maior parte das pessoas não ligadas a á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 e 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. 
3.1 Dados Numéricos 
Antes de apresentar formalmente os tipos de dados numéricos, e conveniente recordar alguns 
conceitos básicos relacionados a teoria dos números e conjuntos. 
O conjunto dos números naturais e representado por N é dado por: 
N = { 1, 2, 3, 4, ... } 
 
Algumas correntes de matemáticos teóricos convencionam que o número O 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 seqüência, encontramos o conjunto dos números inteiros: 
Z = { ..., -3, -2, -1, O. 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 ma fração, isto e, 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... 
A Figura 4 sintetiza a informação apresentada até aqui. 
Existe um conjunto que contém o conjunto dos números reais, o conjunto dos números 
complexos, cujo estudo extrapola os objetivos deste texto. 
 11
Tornando ao aspecto computacional, os dados numéricos representáveis num computador são 
divididos em apenas duas classes: os inteiros e os reais. 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 4 - Representação do Universos dos conjuntos numéricos e as relações 
de pertinência entre eles. 
3.1.1 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. está 
possibilidade e interessante por permitir ma 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 exemplo de números inteiros temos: 
24 - número inteiro positivo 
0 - número inteiro 
-12 - número inteiro negativo 
3.1.2 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 nos computadores 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.0 0. - número real com zero casas decimais 
 
Observe que há uma diferença entre '0', que e um dado do tipo inteiro, e '0.' (ou '0.0') que é um 
dado do tipo real. Portanto, a simples existência do ponto decimal serve pare diferenciar um dado 
numérico do tipo inteiro de um do tipo real. 
3.2 Dados Literais. 
O tipo de dados literal e constituído por ma seqüência de caracteres contendo letras, dígitos e/ou 
símbolos especiais. Este tipo de dados e também muitas vezes chamado de alfanumérico, cadeia (ou 
cordão) de caracteres, ou 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 ("). 
N 
Z
Q
R 
 12
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 
"AbCdefC Hi" - 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 e um dado do tipo real 
3.3 Dados Lógicos 
A existência deste tipo de dado e, de certo modo, um reflexo da maneira como os computadores 
funcionam. Muitas vezes, estes tipos de dados são chamados de booleanos, devido a significativa 
contribuição de BOOLE a área da 1ógica matemática. 
O tipo de dados lógico e usado para representar dois únicosvalores 1ógicos possíveis: 
verdadeiro e falso. E 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 neste texto os valores 1ógicos serão delimitados pelo caractere 
ponto (.). 
Exemplo: 
.V. - valor 1ógico verdadeiro 
.F. - valor 1ógico falso 
3.4 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 seqüê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.) e são sempre delimitados por 
pontos (.). 
A árvore abaixo resume a classificação dos dados com relação aos tipos de dados apresentados. 
 
 
 
 
 
 
 
 
 
 
Figura 5 - Representação dos diversos tipos de dados 
 
3.4.1 Exercício B 
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. 
Tipos de Dados 
Literal Lógico Numérico 
Inteiro Real 
 13
 
( ) 0 
( ) 1 
( ) 0.0 
( ) 0. 
( ) -1 
( ) - 32 
( ) + 36 
( ) + 32. 
( ) - 0.001 
( ) + 0.05 
( ) + 3257 
( ) "a" 
( ) "+3257" 
( ) "+3257." 
( ) "-0.0" 
( ) ".F." 
( ) - 0.0 
( ) .V. 
( ) V 
( ) "abc" 
( ) F 
( ) .F. 
( ) "V" 
( ) .F. 
( ) 613.0 
( ) -613 
( ) “613” 
( ) -3.012 * 1015 
( ) 17*1012 
( ) -28.3 *10 -23 
( ) “Fim de Questão”
 
 
 15
4. 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 anteriormente. Para que 
não se "esqueça" das informações, o computador precisa guardá-las em sua memória. 
4.1 Arquitetura de Memória 
De maneira bem simplificada, a memória de um computador pode ser vista como um conjunto 
ordenado de células, cada uma identificada unicamente por um número inteiro distinto, conhecido como 
endereço (Figura 6 ). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 6 - Representação esquemática das células de memória de um computador. 
 
 Cada célula de memória é mais conhecida como byte. Como mostrado na Figura 7, um byte é 
um agrupamento de 8 bits, numerados em ordem decrescente de 7 até 0. Diz-se que o bit 7 é o mais 
significativo (do inglês, MSB - Most Significant Bit) e o Bit 0 é o menos significativo (do inglês, LSB - 
Lest Significant Bit). 
 
 
 
 
 
 
 
Figura 7 - Representação esquemática das células de memória de um computador 
 Por sua vez, cada bit é capaz de armazenar uma informação binária (0 ou 1). Como um bit possui 
dois estados possíveis, e como um byte é formado por 8 bits, então um byte possui 28 = 256 estados 
possíveis 
 Apesar dos bytes serem subdivididos em pedaços menores, os bits, a menor porção acessível de 
memória é o byte. Em outras palavras, se quisermos escrever (ou ler) algum dado da (na) memória do 
computador, teremos de fazê-lo byte a byte. 
Endereço Informação
0 
1 
2 
3 
4 
5 
6 
7 
7 6 5 4 3 2 1 0 
bit 
 16
4.2 Tipos de Dados 
 Dados - Elementos conhecidos de um problema 
 Informação - Um conjunto estruturado de dados, transmitido conhecimento 
4.3 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 par armazenar a informação representada por eles. 
Esta quantidade e função do tipo de dado considerado, do tipo de 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, mas apenas como exemplo. 
4.3.1 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 e 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 idéia de associar a cada caractere um 
número (código) diferente, variando de 0 a 255 (256 possibilidades). No princípio, cada fabricante de 
computador adotava uma convenção diferente pare 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 e representada na forma de uma tabela de mapeamento de caracteres em números. O padrão 
mais universalmente aceito e o ASCII. 
Assim, cada célula de memória (byte) pode conter um caractere, representado pelo seu código 
ASCII. 
Retornando a 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 pare cada caractere da informação. 
Exemplificando, a informação do tipo literal "banana" possui seis caracteres e, portanto, seis 
bytes são necessários pare reter a referida informação na memória. Em princípio, estes bytes podem estar 
em qualquer lugar na memória mas e conveniente que estejam juntos (posições contíguas). A primeira 
posição deste conjunto de bytes e absolutamente arbitrária e sua escolha geralmente e feita 
automaticamente pelo compilador (isto e, pelo programa que traduz um outro escrito em alguma 
linguagem de programação para outra, em geral, a linguagem de máquina do computador com que se 
trabalha). 
 
Endereço Informação 
0 b (98) 
1 a (97) 
2 n (110) 
3 a(97) 
4 n (110) 
5 a (97) 
 
Figura 8 - Armazenamento da Literal "banana" memória de um computador 
 
 A Figura 8 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 e que são guardados na memória. 
 17
4.3.1.1 Manipulação de caracteres individuais em Literais 
 Muitas vezes é necessário manipular caracteres individuais em um literal. O Pascal possui uma 
forma toda especial de permitir tal operação, através do uso de colchetes( [ ] ) logo após o Nome da 
variável do tipo literal, e o número do caracter que se deseja manipular entre os colchetes. Iremos adotar 
o mesmo procedimento para o algoritmo. 
 
Exemplo: Atribuir o primeiro caracter de um literal a uma variável do tipo literal[1] 
 
 ALGORITMO AtribuiString 
 Var 
 Letra : LITERAL[1] 
 Nome : LITERAL 
 Início 
 Nome ← "Joao" 
 Letra ← Nome[1] 
 Fim. 
 
Quando definimos uma variável como sendo do tipo literal não estamos alocando 1 posição de 
memória apenas ( uma caixa, pela analogia inicial ), mas na verdade, estamos alocando até 255 caixas, 
uma para cada caracter da literal ( lembre-se que uma literal pode ter no máximo 255 caracteres ). Ao 
utilizarmos o símbolo de colchete, estamos na verdade indicando qual o caracter ( qual a caixa ) 
desejamos manipular. 
De acordo com o Exemplo acima, teríamos na memória a seguinte situação: 
 
a) Alocamos 255 bytes ( caracteres ) na memória. A estas posições de memória é dado o Nome 
de “Nome”. Inicialmente estas posições de memória ( Caixas ) possuem o conteúdo indefinido. 
b) Alocamos 1 byte ( caracter ) na memória. A este caracter é dadoo Nome de “Letra”. 
Inicialmente esta posição de memória possuí o conteúdo indefinido. 
c) Na memória temos a seguinte situação: 
 
 Nome 
1 2 3 … 255 
 
 
 Letra 
 
 
d) Atribuímos a variável “Nome” o valor “Joao”, obtendo na memória a seguinte configuração 
 Nome 
1 2 3 4 … 255 
‘J’ ‘o’ ‘a’ ‘o’ 
 
e) Atribuímos a variável “Letra” o primeiro caracter da variável “Nome”, ou seja, o conteúdo da 
primeira posição de memória ( caixa ). Na memória teremos a seguinte configuração: 
 
 Nome 
1 2 3 4 … 255 
‘J’ ‘o’ ‘a’ ‘o’ 
 
 Letra 
‘J’ 
 
Obs.: É possível definir variáveis do tipo literal com menos de 255 caracteres. Para isto, basta 
colocar, após a palavra literal, o número de caracteres desejados entre colchetes ( [ ] ). 
 
 18
Exemplo: 
 ALGORITMO Define 
 Var 
 Nome: LITERAL[80] 
 Início 
 Fim. 
 
Desta forma, o espaço ocupado por uma variável literal passa de 255 bytes para apenas 80 bytes, na 
memória. 
4.3.2 Armazenamento de Dados do Tipo Lógico 
Uma informação do tipo lógico só possui dois valores possíveis: .V. ou .F.. Assim, em princípio, 
um único bit seria suficiente pare armazenar uma informação deste tipo. Contudo, deve-se lembrar que a 
menor porção de memória que se pode acessar e o byte. Portanto, uma informação do tipo 1ógico e 
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 mem6ria dos computadores (por 
motivos que fogem ao escopo deste texto). Alem do mais, isto não e tão relevante, uma vez que na pratica 
o número de ocorrências de dados do tipo 1ógico e bastante inferior ao de ocorrências de dados do tipo 
literal ou numérico. 
4.3.3 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 e 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: 
 
 {-128,-126, ...,-2,-1,0,1,2, ...,127,127} 
 
Esta restrição e 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 = 65536 possibilidades: 
 
{-32768,-32766, ..., -2,-1,0,1,2,...,32767,32767} 
 
Este conjunto satisfaz a 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. 
4.3.4 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. 
São muito comuns situações como as aplicações científicas em que e 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). 
 19
4.4 Conceito e Utilidade de Variáveis 
 Como visto anteriormente, informações correspondentes a diversos tipos de dados são 
armazenadas nas memórias dos computadores. Para acessar individualmente cada uma destas 
informações, em 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 e bastante ilegível e difícil 
de se trabalhar. Para contornar esta situação criou-se o conceito de variável, que e uma entidade 
destinada a guardar uma informação. 
Basicamente, uma variável possui três atributos: um nome, um tipo de dado associado a mesma 
e a informação por ela guardada. 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 9 - 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 neste texto as seguintes regras: 
 
- um nome de variável deve necessariamente começar com uma letra em maiúscula e 
seguidas por um número ou letra todas em minúscula; 
 
- um nome de variável não deve conter nenhum símbolo especial, exceto a sublinha (_). 
 
Exemplos: 
Salário - Correto 
1ano - Errado (não começou com uma letra) 
Ano1 - Correto 
A casa - Errado (contém o caractere branco) 
Sal/hora - Errado (contém o caractere "/") 
Sal_hora - Correto 
_desconto - Errado (não começou com uma letra) 
 
Obviamente é interessante adotarmos nomes de variáveis relacionadas às informações que ela 
vai armazenar em um programa. Exemplo: uma variável para armazenar o salário dos funcionários em 
uma empresa num programa de processamento de folha de pagamento, seria interessante utilizar uma 
variável chamada Salário. 
Outro atributo característico de uma variável e o tipo de dado que ela pode armazenar. Este 
atributo define a natureza das informações contidas na variável. Por último, ha o atributo informação que 
nada mais e do que a informação útil contida na variável 
Uma vez definidos, os atributos nome e tipo de dado de uma variável não podem ser alterados e 
assim permanecem durante toda a sua existência, desde que o programa que a utiliza não seja modificado. 
Por outro lado, o atributo informação esta constantemente sujeito a mudanças, de acordo com o fluxo de 
execução do programa. Por exemplo, se definirmos que uma determinada variável e chamada Salário e 
destinada a guardar números reais, e possível que seu conteúdo seja, num dado instante, igual a 1.500,00 
e posteriormente modificado para 3.152,19, de acordo com o programa executado. 
Nome 
Tipo de Dado 
Infomação 
 20
Em resumo, o conceito de variável foi criado para facilitar a vida dos programadores, permitindo 
acessar informações na memória dos computadores por meio de um nome, em vez do endereço de uma 
célula de memória. 
4.5 Definição de Variáveis em Algoritmos 
Todas as variáveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto 
se fez necessário pare permitir que o compilador reserve um espaço na memória pare as mesmas. 
Algumas linguagens de programação (como BASIC e FORTRAN) dispensam esta definição, 
uma vez que o espaço na memória e reservado a medida que novas variáveis são encontradas no decorrer 
do programa. 
Nos algoritmos apresentados neste texto 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> 
 
ou 
 
 VAR <lista_de_variáveis> : <tipo_das_variaveis> 
 
- 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 declaradasem linhas diferentes. 
 
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 e válida para a representação de algoritmos na forma de pseudocódigo. Em 
termos de fluxograma, não e usual adotar-se qualquer forma de definição de variáveis. 
 
Exemplo de definição de variáveis: 
 
 VAR Nome : literal[10] 
Idade : inteiro 
 Salário : 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 Salário, capaz de armazenar um número real; 
- a variável Tem_filhos, capaz de armazenar uma informação lógica. 
4.6 Definição de Variáveis em Pascal 
 Para definir uma ou mais variáveis, devemos utilizar, em Pascal, a palavra VAR. Para manter 
uma compatibilidade, utilizaremos a mesma nomenclatura em nossos algoritmos. Abaixo segue Exemplo 
de algumas definições de variáveis: 
 
a) ALGORITMO Teste PROGRAM Teste; 
 VAR VAR 
 21
 Palavra : Literal Palavra: String; 
 INICIO BEGIN 
 <comandos> <comandos>; 
 FIM END. 
 
b) ALGORITMO Teste PROGRAM Teste; 
 VAR VAR 
 Letra, Caracter: Literal[1] Letra, Caracter: CHAR; 
 INICIO BEGIN 
 <comandos> <comandos>; 
 FIM END. 
 
c) ALGORITMO Teste PROGRAM Teste; 
 VAR VAR 
 Letra, Caracter: Literal[1] Letra, Caracter: CHAR; 
 Número: Inteiro Número: INTEGER; 
 INICIO BEGIN 
 <comandos> <comandos>; 
 FIM END. 
Obs.: Os nomes dados as variáveis não podem ser os mesmos nomes de palavras reservadas do 
Pascal, tais como PROGRAM, BEGIN, END, VER, etc… 
4.7 Mapeamento de Variáveis na Memória 
O computador não e capaz de trabalhar diretamente com nomes simbólicos, como os nomes de 
variáveis. Pelo contrário, o computador só consegue tratar com células de memória por meio do 
conhecimento de seus endereços. 
Para intermediar esta situação, o tradutor (compilador ou interpretador) monta uma tabela de 
mapeamento dos nomes simbólicos em posições de memória. Esta tabela e denominada Tabela de 
Símbolos e esquematizada na Figura 10. 
 
Nome Simbólico Posição Inicial Tipo de Dado 
 
 
 
Figura 10 - Forma geral de uma tabela de símbolos. 
 
Dentre as informações contidas na tabela de símbolos encontram-se: 
 
- o nome simbólico de cada uma das variáveis do programa; 
- a posição inicial do conjunto de bytes contíguous de memória onde esta armazenada a 
informação da variável; 
- o tipo de dado da variável, a partir do qual e possível determinar o tamanho do espaço de 
memória consumido pela mesma. 
 
Eventualmente a informação concernente ao tipo de dado da variável pode ser complementada 
ou simplesmente substituída na tabela de Símbolos pelo tamanho da variável. 
De posse da definição das variáveis utilizadas num programa, o tradutor e capaz de montar com 
pequeno esforço a referida tabela. A cada variável do programa corresponde uma linha da tabela. 
As informações contidas na tabela são absolutamente suficientes pare localizar qualquer uma das 
variáveis definidas no programa dentro da memória do computador. 
Inicialmente, toda a memória esta disponível e, a medida que novas variáveis vão sendo 
definidas, as células de memória vão sendo reservadas, começando pela primeira posição disponível. 
Para exemplificar, a tabela de Símbolos correspondente as variáveis definidas no exemplo 
anterior e dada abaixo: 
 
 22
Nome Simbólico Posição Inicial Tipo de Dado 
Nome 0 Literal[10] 
Idade 10 Inteiro 
Salário 12 Real 
Tem_filhos 16 Lógico 
Figura 11 - Tabela de símbolos das variáveis definidas no exemplo anterior 
 
 Supondo que a primeira posição de memória disponível e o byte 0, ao encontrar a definição da 
variável Nome como um literal de 10 caracteres, o tradutor reservará os 10 bytes iniciais da memória 
(posições 0 a 9) pare a informação da referida variável. Ao encontrar a definição da variável Idade como 
um inteiro, o tradutor reservará dois bytes de memória pare a mesma, iniciando pela primeira posição 
livre de memória, ou seja, os bytes 10 e 11. Prosseguindo no mesmo raciocínio, o tradutor reservará pare 
a variável Salário as posições de memória 12 a 15 e pare a variável Tem_filhos a posição 16. 
4.8 Tipos de Dados em Pascal 
 O Pascal exige que no momento que formos trabalhar com variáveis, indiquemos o tipo de 
informação que uma variável pode conter, isto é, se uma dada posição de memória armazenará um 
número ou uma letra etc. Para isto, a linguagem Pascal possui definido alguns tipos que deverão ser 
usados quando formos trabalhar com variáveis. Alguns tipos são: 
 
Algoritmo Pascal Descrição 
a) Inteiro a) INTEGER: Representa números entre -32768 até +32767. ocupa 2 bytes na 
memória. 
b) Real b) REAL: Representa os números entre 2.9 x 10 -39 até 1.7 x 1038 . Ocupa 6 bytes na 
memória. 
c) Literal f) STRING: Conjunto de caracteres ( CHAR ). Ocupa de 1 a 255 bytes na memória. 
d) Lógica g) BOOLEAN: Valor lógico. Assuma somente dois valores: TRUE(Verdade) ou 
FALSE(Falso). ocupa 1 byte na memória. 
 e) CHAR: Representa um dos caracteres, da tabela ASCII. Ocupa 1 byte na 
memória. 
 c) WORD: Números de 0 até 65535. Ocupa 2 bytes na memória. 
 d) BYTE: Números de 0 até 255. Ocupa 1 byte na memória. 
 h) Shor Int Representa os números entre -128 até 128 . Ocupa 1 bytes na memória. 
 i) LongInt Representa os números entre - 2.147.483.648 até 2.147.483.648 . Ocupa 
4 bytes na memória. 
 j) Single Representa os números entre 1.5 x 10 -45 até 3.4 x 1038 . Ocupa 4 bytes na 
memória. 
 l) Double Representa os números entre 5 x 10 -324 até 1.7 x 10308 . Ocupa 8 bytes na 
memória. 
4.9 Síntese 
A memória dos computadores e composta por células numeradas ordenadamente denominadas 
bytes. Cada byte e constituído por 8 bits. 
Cada tipo de dado requer um número diferente de bytes pare 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 e uma entidade dotada de um nome pare diferenciá-la das demais e um tipo de 
dado que define o tipo de informação que ela e 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 
 23
variável e objeto de constante modificação durante o decorrer do programa, de acordo com o fluxo de 
execução do mesmo. 
4.9.1 Exercício C 
1. Na lista seguinte, assinale com V os nomes de variáveis válidos e com I os inválidos: 
 
( ) Abc 
( ) 123a 
( ) _ 
( ) A123 
( ) A123 
( ) Abcde 
( ) 3abc 
( ) _a 
( ) Aa 
( ) _1 
( ) _a123 
( ) Etc... 
( ) A 
( ) Acd1 
( ) 1 
( ) A0123 
( ) B312 
( ) Guarda_chuva 
 
 
2. Dadas as declarações de variáveis abaixo, monte as tabelas de símbolos correspondentes, como seria 
feito por um tradutor: 
 
( a ) VAR A, B, C : real 
 Delta : real 
 Positivo : lógico 
 Raiz1, Raiz2 : real 
 
( b ) VAR X, Y : inteiro 
 Nome, Profissão : literal[20] 
 Rua : literal[30] 
 Número : inteiro 
 Renda : real 
 
 24
5. Expressões 
O conceito de expressão em termos computacionais esta 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 operadores aritméticos compondo uma formula que, uma vez avaliada, resulta num valor. 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 12 - Triângulo de base (B) e altura (H). 
 
Por exemplo, a fórmula de cálculo da área do triângulo da Figura 12 é dadapor: 
 
Área = 0.5 x B x H 
 
Esta fórmula utiliza três variáveis: B e H. que contém as dimensões triângulo, e ÁREA onde e 
guardado o valor calculado (resultado da avaliação da expressão). Ha, 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 a computação assume uma conotação mais ampla: uma 
expressão e uma combinação de variáveis, constante operadores, e que, uma vez avaliada, resulta num 
valor. 
5.1 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 operação de adição. 
De acordo com 0 número de operandos sobre os quais os operador atuam, os últimos podem ser 
classificados em: 
- binários, quando atuam sobre dois operandos. Ex.: os operador das operações aritméticas 
básicas (soma, subtração, multiplicação divisão); 
- unários, quando atuam sobre um único operando. Ex.: o sinal de na frente de um número, cuja 
função e inverter seu sinal. 
 
Outra classificação dos operadores e feita considerando-se o tipo 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 esta diretamente relacionada com o tipo de expressão onde aparecem os 
operadores. 
Um caso especial e 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 formalmente os operadores dos diversos tipos acima 
relacionados. 
B 
H 
 25
5.2 Tipos de Expressões 
As expressões são classificadas de acordo com o tipo do valor resultante de sue avaliação. 
5.2.1 Expressões Aritméticas 
Expressões aritméticas são aquelas cujo resultado da avaliação e do tipo numérico, seja ele 
inteiro ou real. Somente o uso de operadores aritméticos e variáveis numéricas e permitido em expressões 
deste tipo. 
Os operadores aritméticos relacionados as operações aritméticas básicas estão sumarizados na 
Tabela 1. 
Tabela 1 - Operadores aritméticos e sua ordem de prioridade 
 
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 major profundidade numa seção posterior. 
O caractere (*) e adotado na maioria das linguagens de programação pare representar a operação 
de multiplicação, ao invés do caractere (x), devido a possibilidade da ocorrência do mesmo no nome de 
variáveis. Pela mesma razão, o símbolo (**) e adotado pare representar a operação de exponenciação 
Algumas linguagens de programação adotam o símbolo (A) (circunflexo) pare esta finalidade, mas isto e 
pouco freqüente. 
As variáveis usadas em expressões aritméticas podem somente ser do tipo inteiro ou real. Se 
sodas as variáveis que aparecem numa expressão são do tipo inteiro, então o valor resultante da expressão 
e 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 e 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: 
 
1) A+B*C - expressão de resultado inteiro 
2) A+B+Y - expressão de resultado real 
3) A/B - expressão de resultado inteiro 
4) X/Y - expressão de resultado real 
 
O leitor deve estranhar o fato de no terceiro exemplo ser apresentada uma expressão onde se 
dividem dois números inteiros e se obtém como resultado um valor inteiro. Obviamente, o resultado da 
divisão entre dois números inteiros não e necessariamente inteiro. Na verdade, a operação representada 
no terceiro item e a divisão inteira, onde o resto da divisão e desprezado. 
5.2.2 Expressões Lógicas 
Expressões lógicas são aquelas cujo resultado da avaliação e um valor lógico. (.V. ou .F.). 
Os operadores lógicos e sues relações de precedência são mostrados na Tabela 2. 
 
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 2. 
 
 26
Tabela 2 - Operadores lógicos e suas relações de prioridade 
 
Operador Tipo Operação Prioridade 
.OU. Binário Disjunção 3 
.E. Binário Conjunção 2 
.NÃO Unário Negação 1 
 
Para exemplificar o uso de operadores lógicos, a Tabela 5.3 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 ha 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 3 - Tabela-verdade dos operadores apresentadas na Tabela 2 
 
A B .NÃO. A .NÃO.B A .OU. B A .E. B A .OU_EXCLUSIVO. B 
.F. .F. .V. .V. .F. .F. .F. 
.F. .V. .V. .F. .V. .F. .F. 
.V. .F. .F. .V. .V. .F. .F. 
.V. .V. .F. .F. .V. .V. .V. 
 
Tabelas como a da Tabela 3 são chamadas de Tabelas-verdade. Convém salientar as seguintes 
conclusões que podem ser extraídas por observação da Tabela 3: 
 
- 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 5.2). 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 13 - Representação da operação .OU. por meio de um circuito elétrico com interruptores em 
paralelo. 
 
Neste exemplo, um interruptor fechado (e que, portanto, permite a passagem de corrente elétrica) 
representa uma variável lógica cujo valor e verdadeiro (.V.). Por outro lado, um interruptor aberto 
representa uma variável lógica com valor falso (.F.). No circuito da Figura 13, para que a lâmpada acenda 
basta que um dos interruptores esteja fechado. Analogamente, para que a operação lógica .OU. tenha 
resultado verdadeiro (.V.) basta que apenas um dos operandos possua valor lógico .V. Por outro lado, 
para que a operação lógica .OU. possua resultado .F. (para que a lâmpada esteja apagada) e necessário 
que os dois operandos possuam valor .F. (e necessário que os dois interruptores estejam abertos). 
 
- para que a operação lógica .E. tenha resultado verdadeiro e necessário que seus dois operandos 
tenham valor lógico .V. . Em termos de um circuito elétrico, uma operação lógica .E. pode ser 
representada _A_ dois interruptores ligados em série. como na Figura 5.3. 
 
 
A 
B 
Bateria Lâmpada 
A B 
B t i Lâ d
 27
 
 
 
 
 
 
 
 
 
 
Figura 14 - Representação da operação lógica .E. por meio de um circuito elétrico com 
interruptores em série. 
 
Nota-se no circuito acima que a lâmpada somente estará acessa quando os dois interruptores (A 
e B) estiverem fechados. Por outro lado, basta que um dos interruptores (A ou B) esteja aberto para que a 
lâmpada não acenda. Da mesma forma, a operação lógica E. só resulta em .V. quando A e B forem iguais 
a .V.; ainda, para que a operação lógica .E. resulte em .F. basta que um de seus operadores seja .F.. 
Nas expressões lógicas onde aparecem apenas os operadores lógicos da Tabela 2 somente 
variáveis do tipo lógico podem ser usadas. Isto parece óbvio, uma vez queos operadores lógicos somente 
atuam sobre valores (constantes ou variáveis) lógicos. 
Ha, ainda, outro tipo de operador que pode aparecer em operações lógicas os operadores 
relacionais, mostrados na Tabela 4. 
 
Tabela 4 - Operadores Relacionais 
 
Operador Comparação 
= Igual 
< > Diferente 
< Menor 
< = Menor ou igual 
> Maior 
> = Maior ou igual 
 
 Estes operadores são somente usados quando se deseja efetuar comparações. comparações só 
podem ser feitas entre objetos de mesma natureza, isto e, variáveis do mesmo tipo de dado. O resultado 
de uma comparação e 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. 
 Exemplo: sejam A e B variáveis lógicas, X e Y variáveis reais, e R. S e T variáveis literais, com 
os respectivos valores: 
 
A = .V. , B = .F., 
X = 2.5, Y = 5.0, 
R = "JOSÉ", S = "JOÃO" e T = "JOÃOZINHO" 
 
 A tabela seguinte contém algumas expressões lógicas contendo estas variáveis. 
 28
 
Tabela 5 - Exemplos de avaliações de expressões lógicas. 
 
Expressão Resultado 
A .OU. B → .V. 
A .E. B → .F. 
. NÃO. A → .F. 
X = Y → .F. 
X = (Y/2) → .V. 
R = S → .F. 
S = T → .F. 
R < > S → .V. 
R > S → .V. 
S > T → .F. 
(( A .OU. B) .OU. (XY) .OU. (ST)) → .V. 
 
Um resultado interessante de ser observado e o da expressão S > T. ou seja, "JOÃO" > 
"JOÃOZINHO", cujo resultado e falso. A primeira pergunta que surge deve ser com relação a maneira 
como e feita tal comparação. Para tal, deve-se recorrer mais uma vez ao Apêndice B. onde esta a tabela 
de códigos ASCII. Tal tabela estabelece para cada caractere um código diferente. De acordo com este 
código e possível comparar dois dados de tipo literal, comparando os caracteres dos mesmos da esquerda 
para a direita. Ao comparar os literais "JOSÉ" e "JOÃO", verificamos que seus dois primeiros caracteres 
(J e o) são iguais, mas que "S" e maior que "A", segundo a tabela ASCII. Portanto "JOSÉ" e maior que 
"JOÃO". Estes tipos de comparação são muito úteis na ordenação alfabética de variáveis literais. 
5.2.3 Expressões Literais 
Expressões literais são aquelas cujo resultado da avaliação e um valor literal Este tipo de 
expressão e bem menos freqüente 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: tome-se duas strings e acrescenta-se (concatena-se) a segunda delas ao final da 
primeira. Em algumas linguagens esta operação e representada pelo símbolo (operador) (+). Por exemplo, 
a concatenação das strings "REFRIGERA" e "DOR" e representada por "REFRIGERA" + "DOR" e o 
resultado de sue avaliação e "REFRIGERADOR". 
 
Obs.: O operador “+” caso seja usado entre variáveis do tipo literal, causará uma ação conhecida por 
concatenação, ou seja, juntar os caracteres ou literais usados na operação em uma só literal. 
 
Exemplo: 
 ALGORITMO Concatena 
 Var 
 Letra1, Letra2 : Literal[1] 
 Nome1, Nome2, Nome : Literal 
 Início 
 Letra1 ← "D" 
 Letra2 ← "a" 
 Nome1 ← "João" 
 Nome2 ← "Silva" 
 Nome ← Nome1 + Letra1 + Letra2 + Nome2 
 Fim. 
 
As instruções acima resultarão no armazenamento do Nome "João Da Silva" na variável 
rotulada de "nome". 
 
 29
5.3 Avaliação de Expressões 
Expressões que apresentam apenas um único operador podem ser avaliadas diretamente. No 
entanto, a medida que as mesmas vão-se tornando mais complexas com o aparecimento de mais de um 
operando numa mesma expressão, e necessária a avaliação da mesma passo a passo, tomando um 
operador por vez. A seqüência destes passos e definida de acordo com o formato geral da expressão, 
considerando-se a prioridade (precedência) de avaliação de seus operadores e a existência ou não de 
parênteses na mesma. 
 As seguintes regras são essenciais pare a correta avaliação de expressões: 
 
1. Deve-se observar a prioridade dos operadores, conforme mostrado nas Tabela 1 e Tabela 2: 
operadores de major prioridade devem ser avaliados primeiro. Se houver empate com relação a 
precedência, então a avaliação se fez considerando-se a expressão da esquerda pare a direita. 
2. Os parênteses usados em expressões tem o poder de "roubar" a prioridade dos demais 
operadores, forçando a avaliação da subexpressão em seu interior. 
3. Entre os quatro grupos de operadores existentes, a saber, aritmético, lógico, literal e 
relacional, ha uma certa prioridade de avaliação os aritméticos e literais devem ser avaliados 
primeiro; a seguir, são avaliadas as subexpressões com operadores relacionais e, por último, os 
operadores lógicos são avaliados. 
 
Exemplos: suponha que X, Y e Z são variáveis reais, e A e B variáveis lógicas, com os 
respectivos valores: 
 
 X = 2.0, Y = 3.0, Z = 0.5, A = .V. e B = .F. 
 
Considere as seguintes expressões e o resultado de suas avaliações: 
 
 1) X*Y-Z - 5.5 
 2) X*(Y-Z) - 5.0 
 3) X + Y * Z - 3.5 
 4)X+(Y*Z) - 3.5 
 5) (X+Y)*Z - 2.5 
 6) X ** Y - 1 - 7.0 
 7) (X**Y)-1 - 7.0 
 8) X ** (Y - 1) - 4.0 
 9) B.E.A.OU.X<>Y/2 - .V. 
 10) B.E.(A.OU.X<>Y/2) - .F. 
 
 
Das expressões do exemplo acima podemos observar que: 
 
- a aplicação da regra 2 fez com que a expressão 2) tenha um resultado diferente da expressão 1). 
O mesmo acontece com as expressões 3) e 5), 6) e 8), e 9) e 10); 
- o agrupamento de subexpressões usando parênteses, contendo operadores de prioridade major 
que a dos operadores que permaneceram fora dos parênteses, não altera a ordem de avaliação 
das expressões e, portanto, não modifica seus resultados, como acontece em 3) e 4), e 6) e 7); 
- a aplicação da regra 3 define a única seqüência correta pare se avaliar as expressões 9) e 10). 
De fato, esta regra define que a subexpressão Y / 2 deve ser avaliada antes de se comparar seu 
resultado com X ( em X <> Y / 2). De fato, se a comparação X <> Y fosse feita, seu resultado 
seria um valor lógico, que posteriormente seria dividido por 2, o que e impossível. 
5.4 Síntese 
Uma expressão e 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 
 30
tipos de dados de seus operandos e do valor resultante de sue avaliação, os operadores podem ser 
classificados em aritméticos, lógicos ou literais. 
Um tipo especial de operador e o relacional, que e usado na comparação de operandos de um 
mesmo tipo de dado e cujo resultado da avaliação e sempre um valor lógico. 
As expressões são classificadas de acordo com o valor resultante de sue 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. 
 
Ha três regras básicas que definem a seqüência correta de avaliação passo a passo de expressões: 
 
1. Operadores de major prioridade devem ser avaliados primeiro. Em caso de empate, a 
avaliação se fez da esquerda pare a direita. 
2. O uso de parênteses em subexpressões force a avaliação das mesmas com major prioridade. 
3. Os diversos tipos de operadores devem ser avaliados na seguinte seqüência dentro de uma 
expressão complexa: primeiro os aritméticos e literais; a seguir, os relacionais e, por último, os 
lógicos. 
5.5 Exercício Resolvido 
Dada a tabela-verdade correspondente a operação lógica .OU_EXCLUSIVO. 
 
A B A .OU_EXCLUSIVO. B 
.F. .F. .F. 
.F. .V. .V. 
.V. .F. .V. 
.V. .V. .F. 
 
encontre uma expressão lógica equivalente a mesma e que utilize apenas os operadores lógicos .OU., .E. 
e .NÃO..Solução: 
 Observando-se a tabela dada, nota-se que o resultado da operação lógica em questão e 
verdadeiro (.V.) somente quando A e .F. e B e .V., ou então, quando A e .V. e B e .F.. Formalmente, 
pode-se fazer: 
 
A.OU_EXCLUSIVO. B = ((.NÃO. A).E. B).OU. (A.E. (.NÃO. B)) 
5.5.1 Exercícios D 
1. Dada a declaração de variáveis 
 
VAR A, B, C : inteiro 
X, Y, Z : real 
Nome, Rua : literal[20] 
LI, L2 : lógico 
 
classifique as expressões seguintes de acordo com o tipo de dado do resultado de sue 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+B+Z 
( ) Nome + Rua 
( ) L1 .OU. L2 
( ) (Rua < > Nome) .E. (.NÃO. (A=B)) 
( ) A + B /C 
( ) A + X / Z 
( ) A + Z / A 
( )A>B 
( )A>Y 
( ) Nome > Rua 
( ) A > B = L1 
 31
( ) X + Y / Z 
( ) X + Z / A 
( ) L1 ** L2 
 
 
2. Para as mesmas variáveis declaradas no exercício 1, às quais são dados os valores seguintes 
 
A = 1 
B = 2 
C = 3 
X = 2.0 
Y = 10.0 
Z = -1.0 
L1 = .V. 
Nome = "PEDRO" 
Rua = "PEDRINHO" 
L2 = .F. 
 
Determine o resultado da avaliação das expressões abaixo: 
a) A + C / B → 
b) A + B /C → 
c) C / B / A → 
d) A ** B ** A → 
e) Z * X ** B → 
f) -X ** B → 
g) ( X ** B) → 
h) ( - X ) ** B → 
i) Nome + Rua → 
j) Nome = Rua → 
k) L1 .OU. L2 → 
l) ( L1 .E. (.NÃO. L2)) → 
m) ( L2 .E. (.NÃO. L1)) → 
n) ( L1 .E. (.NÃO. L2)) .OU. (L2 .E. (.NÃO. L1)) → 
o) X > Y .E. C < = B → 
p) ( C -3 * A) < (X +2 * Z) → 
 
3. Dada a tabela - verdade 
 
A B A .op. B 
.F. .F. .V. 
.F. .V. .F. 
.V. .F. .V. 
.V. .V. .F. 
 
Encontre uma expressão lógica equivalente à mesma e que utilize apenas os operadores lógicos 
.E., .OU. e . NÃO. . 
 
 
 32
6. Instruções Primitivas 
Como o próprio nome diz, instruções primitivas são os comandos básicos que efetuam tarefas 
essenciais pare 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 programação. De fato, um programa que 
não utilize nenhuma instrução primitiva - como as que serão definidas neste capítulo - e incapaz de se 
comunicar com o mundo exterior e, portanto não tem utilidade alguma. 
Antes de passar a descrição das instruções primitives, e necessária a definição de alguns termos 
que serão utilizados mais a frente: 
- dispositivo de entrada e 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 e 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 e 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 e considerada um 
erro sujeito a pena do não-reconhecimento do comando por parte do tradutor; 
- semântica e o significado, ou seja, o conjunto de ações que serão exercidas pelo 
computador durante a execução do referido comando. 
Daqui em diante, todos os comandos novos serão apresentados por meio de sue sintaxe e sue 
semântica, isto é, a forma como devem ser escritos e a(s) ação(ões) que executam. 
6.1 Instrução Primitiva de Atribuição 
A instrução primitiva de atribuição, ou simplesmente atribuição, e a principal maneira de se 
armazenar uma informação numa variável. Sua sintaxe e: 
 
<nome_de_variável> ← <expressão> 
 
Em termos de fluxograma, os comandos de atribuição são representados como na Figura 15. 
 
 
 
 
 
 
 
 
 
Figura 15 - Forma de representação de comandos de atribuição em fluxograma 
 
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 a variável que aparece a 
esquerda do comando. 
A expressão presente no comando de atribuição pode ser de qualquer um dos tipos descritos no 
capítulo anterior. 
Uma implicação bastante séria, pare qual a atenção deve ser dirigida, e a necessidade da 
compatibilidade entre o tipo de dado resultante da avaliação da expressão e o tipo de dado da variável, no 
 
<Variável> ← <Expressão> 
 33
sentido em que esta deve ser capaz de armazenar o resultado da expressão. Mais explicitamente, se uma 
expressão resulta num valor lógico, então a variável deve ser também do tipo lógico. O mesmo acontece 
no caso de dados literais e reais. Uma exceção, ao e o cave em que a variável e do tipo real e a expressão 
resulta num valor inteiro. Nesta situação, o resultado (dado do tipo inteiro) e convertido pare o tipo real e 
posteriormente armazenado na variável. Esta operação de conversão de tipos de dados e conhecida por 
coerção. 
A Figura 16 mostra um exemplo de algoritmo onde algumas atribuições são feitas: os valores 5.0 
e 10 são atribuídos as variáveis Preço_unit e Quant, respectivamente; posteriormente, o resultado do 
produto entre as duas anteriores e armazenado em Preço_tot. 
 
 Quando definimos uma variável é natural atribuirmos a ela uma informação. Uma das formas 
de colocar um valor dentro de uma variável, consequentemente colocado este dado na memória do 
computador, é através da atribuição direta, do valor desejado que a variável armazena. Para isto 
utilizaremos o símbolo (← (Algoritmo), : = (Pascal)), que significa: recebe, ou seja, a posição, de 
memória que uma variável representa, receberá uma informação, a qual será armazenada no interior 
desta variável. 
 
Exemplo: 
 ALGORITMO Teste PROGRAM Teste; 
 Var VAR 
 Número: INTEIRO Número: INTEGER; 
 Início BEGIN 
 Número ← 10 Número: =10; 
 Fim. END. 
 
O Exemplo acima nos informa que: 
 
a) Foi definido uma variável, a qual demos o Nome de “Número”, e informamos que esta variável, ou 
posição de memória, só poderá aceitar dados, que sejam numéricos e que estejam entre -32768 a +32767 
( tipo INTEGER ). 
 
b) Atribuímos à variável “Número” o valor 10 
 
A memória se comportaria da seguinte forma, de acordo com os itens acima: 
 
a) Variável Conteúdo 
 Número indefinido 
 
b) Variável Conteúdo 
 Número 10 
 
6.1.1 Exercícios E 
1. Faça um algoritmo para atribuir a variáveis as seguintes informações: 
 
a) 12345.0 
b) 123456 
c) -1122 
d) 10 
e) VERDADE 
f) 12345605 
 
2. No seguinte algoritmo existe algum erro? Onde? 
 
 34
 ALGORITMO Teste 
 Var 
 Maria : LITERAL[100] 
 idade : INTEIRO 
 letra : LITERAL[1] 
 Maria : REAL 
 Início 
 idade ← 23 
 idade ← 678 
 idade ← letra 
 letra ← ABC 
 letra ← A 
 letra ← 2 
 Fim. 
 
3. Qual a diferença existente nas seguintes atribuições? 
 
a) Letra ← “A” 
 Nome ← “João” 
 
b) Letra ← A 
 Nome ← João 
 
4. É correto definir uma variável como sendo literal[1] e atribuirmos a ela o valor: “PEDRO” ? E se a 
variável fosse definida como LITERAL[100], a mesma poderia receber um valor do tipo 
LITERAL[1]? 
 
 
5. Dar o valor da variável Resultado após execução da seguinte seqüência de operações (Suponha que 
todas as variáveis seja reais): 
a) Resultado ← 3.0 * 6 
 
b) X ← 2.0 
 Y ← 3.0 
 Resultado ← X ** Y - X 
 
c) Resultado ← 4 
 X ← 2 
 Resultado ← Resultado * X 
 
6. Suponha que A, B e C sejam variáveis reais e que I, J e K sejam variáveis inteiras. Dados A = 4.0, B = 
6.0e I = 3, qual seria o valor final dos comandos seguintes? 
a) C ← A * B – I C= _______ 
b) K ← I / 4 * 6 K = _______ 
c) C ← B / A + 1.5 C = _______ 
d) K ← ( B / A + 4.7) K = _______ 
e) J ← ( A / ( 5 / I)) J = _______ 
f) K ← ( A – B) * 2 + 1 K = _______ 
 
7. Construa o algoritmo que calcule as seguintes expressões, utilize parênteses: 
a) 2 + 3 * { 23 - 12 + [ { ( 123 / 34 ) + 10 } / 2 - 1 * ( 45 - 12 ) ] / 3 } 
b) [ ( 2 * 3 ) **2 - 1 ] ** 4 
c) ( 2 + [ 2 * 3 - ( 4 / 20 ) ** 2 ] )/ (10 * { [ ( 7 * 3 ) - 2 ] ** 3 }) 
 
8. Escreva o comando de atribuição e resolva a expressão das seguintes formulas matemáticas. 
a) 1+
b
a
 
 
b) 
dc
ba
−
+
 
 
c) 
f
ed
c
ba
−
+
 
 
d) 
dc
ba −+ 
 
e) 
d
cba )( + 
 
 
f) 
F
ED
C
BA
X
−
+
= 
g) 
( )
Y
X X X
X
X
X=
− + +
+2 3
2
1
2
2 1
 
 
h) X B A F
A
= − +−
−2 4 2
3 2
3
 
 
i) ( )Y H
X
H H
H
= − − −⎡⎣⎢
⎤
⎦⎥2
45
3
4 3
2
 
 
j) X a b e f
c d g h
i
j
= − + +− + +
( ) ( )
( ) ( )
* 
6.2 Instrução Primitiva de Saída de Dados 
O algoritmo da Figura 16 não e prático, pois, apesar do computador ter calculado um 
determinado valor ou armazenado o mesmo na variável Preço_tot, este valor ficou retido na memória do 
computador e não foi mostrado ao usuário, o major interessado no mesmo. 
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, pare que o usuário posse apreciá-las. 
Ha duas sintaxes possíveis pare esta instrução: 
 
Escreva <lista_de_variáveis> 
ou 
Escreva <literal> 
 36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Algoritmo EXEMPLO_6_1 
Var Preço_unit Preço_tot : real 
Quant : inteiro 
Início 
Preço_unit ← 5.0 
Quant ← 10 
Preço_tot ← Preço_unit * Quant 
Fim. 
 
 
Program EXEMPLO_6_1; 
Var Preço_unit Preço_tot : real; 
Quant : inteiro; 
Begin 
Preço_unit := 5.0; 
Quant := 10; 
Preço_tot := Preço_unit * Quant; 
 End. 
 
 
Figura 16 - Exemplo de aplicação de comandos de atribuição: (a) Fluxograma; (b) pseudocódigo; 
(c) pascal. 
 
Daqui por diante, Escreva será considerada uma palavra reservada não mais poderá ser 
utilizada como nome de variável (ao menos nos algoritmo apresentados neste texto), 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 e um conjunto de nomes de variáveis separados por vírgulas. Um 
literal e simplesmente um dado do tipo literal delimita por aspas. 
(b) 
(a) 
Início 
Fim 
Quant ← 10
Preço Tot ← Preço Unit * Quant.
Preço Unit ← 5.0
(c) 
 37
Em termos de fluxograma, uma instrução de saída de dados e representada como na Figura 17. 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 17 - Forma de representação de uma instrução de saída de dados em fluxograma 
 
Repare que a representação no fluxograma dispense o uso da palavra reservada Escreva, uma 
vez que a mesma já esta embutida na forma geométrica da figura. 
A semântica da instrução primitiva de saída de dados e muito simples: os argumentos do 
comando são enviados pare o dispositivo de saída. No cave de uma lista de variáveis, o conteúdo de cada 
uma delas e pesquisado na posição de memória correspondente a variável e depois enviado pare o 
dispositivo de saída. No cave 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 e bastante útil e interessante: a lista e lida da esquerda pare a direita e cada 
elemento da mesma e tratado separadamente; se um nome de variável for encontrado, então a informação 
da mesma e pega da memória e colocada no dispositivo de saída; no caso de um literal, o mesmo e escrito 
diretamente no dispositivo de saída. 
O exemplo da Figura 16 torna-se muito mais interessante com a aplicação de instruções de saída 
de dados, como na Figura 17. 
6.3 Instrução Primitiva de Entrada de Dados 
O algoritmo da Figura 18 ainda carece de uma melhoria essencial. Toda vez que ele e executado, 
o mesmo valor e calculado, já que os valores das variáveis Preço_unit é 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, pare que o usuário tivesse um maior controle sobre o valor 
calculado. A instrução primitiva de entrada de dados foi criada pare suprir esta necessidade. 
<Lista_de_Variáveis> 
ou 
<Literal> 
 38
Sua sintaxe é: 
Leia <lista_de_variáveis> 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Algoritmo EXEMPLO_6_2 
Var Preço_unit, Preço_tot : real 
Quant : inteiro 
Início 
Preço_unit <- 5.0 
Quant <- 10 
Preço_tot <- Preço_unit * Quant 
Escreva Preço_tot 
Fim. 
 
 
Program EXEMPLO_6_2; 
Var Preço_unit, Preço_tot : real; 
Quant : integer; 
Begin 
Preço_unit := 5.0; 
Quant := 10; 
Preço_tot := Preço_unit * Quant; 
Write(Preço_tot); 
End. 
 
Figura 18 - Exemplo de aplicação da instrução primitiva de saída de dados: (a) fluxograma; 
(b)pseudocódigo; (c) Pascal. 
 
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 e um conjunto de 
um ou mais nomes de variáveis, separados por vírgulas A Figura 19 mostra como uma instrução de 
entrada de dados e representada em fluxogramas. Esta representação dispense o uso da palavra-reservada 
Leia, pelo fato da mesma já estar de certo modo embutida na forma geométrica da figura. 
Início 
Fim 
Quant ← 10
Preço Tot ← Preço Unit * Quant.
Preço Unit ← 5.0
Preço Tot 
(a) 
(b) 
(c) 
 39
 
 
 
 
 
 
 
 
 
 
 
Figura 19 - Forma de representação de uma instrução de entrada de dados em fluxograma 
 
A semântica da instrução de entrada (ou leitura) de dados e, de certa forma, inversa a 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 18 , modificado para que os valores das variáveis Preço_unit e Quant 
sejam lidos no dispositivo de entrada, esta na Figura 20. 
O algoritmo da Figura 20 ainda precise sofrer algumas modificações pare ficar perfeito. Em sua 
forma atual, ao Início de sue execução, ele procure ler os valores para as variáveis Preço_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 pare a qual o algoritmo foi concebido. 
<Lista_de_Variáveis> 
 40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Algoritmo EXEMPLO_6_2 
Var Preço_unit Preço_tot : real 
Quant : inteiro 
 Início 
Leia Preço_unit, Quant 
Preço_tot ← Preço_unit, * Quant 
Escreva Preço_tot 
Fim. 
 
 
Program EXEMPLO_6_2; 
Var Preço_unit Preço_tot : real; 
Quant : integer; 
 Begin 
Read(Preço_unit, Quant); 
Preço_tot : = Preço_unit, * Quant; 
Write(Preço_tot); 
End. 
 
Figura 20 - Exemplo de aplicação da instrução primitiva de entrada de dados num algoritmo: (a) 
Fluxograma; (b) pseudocódigo; (c) Pascal. 
 
Uma preocupaçãoconstante de um bom programador deve ser a de conceber um programa 
"amigo do usuário". Esta preocupação e traduzida no planejamento de uma interface com o usuário 
(meio pelo qual um programa e o usuário "conversam") bastante amigável. Em termos práticos, isto se 
resumem a 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 ante 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 é mostrado na Figura 21. 
6.4 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) 
Início 
Fim 
Preço Tot ← Preço Unit * Quant.
Preço_Unit, 
Quant 
Preço Tot 
(b) 
(c) 
 41
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 e buscado na 
memória e colocado no dispositivo de saída. No cave 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 as variáveis da lista que Ihe são passadas como 
argumento. 
6.5 Exercícios Resolvidos 
1. Escreva um algoritmo (fluxograma e pseudocódigo) pare calcular a média entre dois números 
quaisquer. 
 
solução: 
A idéia principal do algoritmo esta centrada na expressão matemática utilizada no cálculo da 
media (M) entre dois números, N1 e N2, dada por: 
 
M= (N1 +N2)/2 
 
Para que o valor de M posse ser calculado pelo algoritmo, e 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 c N2 e armazenamento dos mesmos em posições distintas de 
memória (variáveis). 
 42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Algoritmo EXEMPLO_6_2 
Var Preço_unit, Preço_tot : real 
Quant : inteiro 
Início 
Escreva "Digite o Preço unitário" 
Leia Preço_unit, 
Escreva "Digite a quantidade" 
Leia Quant 
Preço_tot <- Preço_unit * Quant 
Escreva " Preço total : ", Preço_tot 
Fim. 
 
Program EXEMPLO_6_2; 
Var Preço_unit, Preço_tot : real; 
Quant : integer; 
Begin 
Write ('Digite o Preço unitário'); 
Read (Preço_unit); 
Write ('Digite a quantidade'); 
Read (Quant); 
Preço_tot := Preço_unit * Quant; 
Write ('Preço total :' , Preço_tot); 
End. 
 
Figura 21 - Exemplo de aplicação das instruções primitivas de atribuição, entrada e saída de dados 
num algoritmo: (a) fluxograma; (b) pseudocódigo; (c) pascal. 
 
Na seqüência, o valor da media deve ser calculado por meio de uma expressão apropriada e 
atribuído a uma terceira variável (M). 
(a) 
Início 
Fim 
Preço Tot ← Preço Unit * Quant.
"Preço total :"" 
Preço Tot
Quantidade 
"Digite a quantidade" 
Preço_unit. 
"Digite o preço 
unitário" 
(b) 
(c) 
 43
Por fim, deve-se relatar ao usuário o valor calculado por meio de uma instrução primitive de 
saída de dados. 
O fluxograma do algoritmo descrito e mostrado a seguir. Note que ele esta enriquecido com 
instruções para informar sue finalidade, os dados que devem ser fornecidos ao usuário e o significado do 
valor calculado. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 variáveis utilizadas serão do tipo inteiro ou real. Como se deseja 
calcular media 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 e um número que pode ou não ter parte fracionária, então a variável 
também deve ser do tipo real. 
Início 
Fim 
M ←(N1 + N2) /2
"O Valor da média é :" 
, M 
N2 
"Digite o segundo 
número" 
N1 
" Algoritmo para calcular a 
média entre dois número" 
"Digite o primeiro 
número" 
 44
De posse dessa informação, pode-se escrever o pseudocódigo do algoritmo em questão, a partir 
de seu fluxograma. 
 
Algoritmo Média 
VAR 
N1, N2, M : real 
Início 
Escreva "Algoritmo pare calcular a média entre dois 
números" 
Escreva "Digite 0 primeiro número" 
Leia N1 
Escreva "Digite o segundo número" 
Leia N2 
M <- (N1+ N2) / 2 
Escreva "O valor da media e:", M 
Fim. 
 
2. Escreva um algoritmo pare calcular o valor de y como função de 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 
pare 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: 
Início 
Y ← 3 * X + 2
"Y = ", Y 
X 
" Algoritmo para calcular 
y = 3x + 2" 
"X = " 
Fim 
 45
 
Algoritmo Função_de_x 
VAR 
X, Y : real 
Início 
Escreva "Algoritmo pare calcular y = 3x + 2" 
Escreva "X = " 
Leia X 
y <- 3 * X + 2 
Escreva "Y = ", Y 
Fim. 
 
3. Escreva um algoritmo pare calcular o consumo médio de um automóvel (medico em Km/l), dado que 
são conhecidos a distância total percorrida e o volume de combustível consumido pare 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 pare calcular o consumo médio (CM) a partir da distância total percorrida (DIST) e do 
volume de combustível consumido (VOL), que e 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 0 valor calculado. 
O fluxograma correspondente ao algoritmo e o seguinte: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Assumindo que sodas as variáveis utilizadas (CM, DIST e VOL) são do tipo real, pode-se 
escrever o pseudocódigo seguinte pare o fluxograma anterior: 
 
"Consumo médio = ", CM, 
"Km/l " 
Início 
CM ← Dist / Vol
Dist 
" Algoritmo para calcular 
o consumo"
"Distância total percorrida 
(Km): "
Fim 
"Volume de combutível 
gasto (1) : " 
Vol 
 46
Algoritmo Consumo_médio 
VAR 
CM, DIST, VOL : real 
Início 
Escreva "Algoritmo pare calcular o consumo" 
Escreva "distância total percorrida (Km):" 
Leia DIST 
Escreva "Volume de Combustível Gasto (1):" 
Leia VOL 
CM <- DIST / VOL 
Escreva "Consumo médio = ", CM, " Km/l" 
Fim. 
6.5.1 Exercícios F 
Para cada um dos problemas propostos a seguir, expresse um algoritmoque pode ser usado em 
sua solução na forma de um fluxograma e de um pseudocódigo. 
 
1. Ler as seguintes informações de uma pessoa: Nome, Idade, Sexo, Peso, Altura, Profissão, Rua, Bairro, 
Cidade, Estado, CEP, Telefone. 
 
2. Cálculo da média de quatro números inteiros dados. 
 
3. cálculo do quadrado de um número, ou seja, o produto de um número por si mesmo. 
 
4. Cálculo da função f(x, y) = 2x + 3y2, num domínio real. 
 
5. Cálculo do preço médio do quilômetro rodado (em US$/litro) para uma dada distância percorrida (em 
Km) e um certo volume de combustível consumido (em litros). Nota: uma vez que o preço do 
combustível também pode variar, ele também deve ser fornecido como dado para o algoritmo. 
 
6. Ler as seguintes informações de um funcionário: Nome, idade cargo e o seu salário bruto considere: 
a) O salário bruto teve um reajuste de 38%. 
b) O funcionário receberá uma gratificação de 20% do salário bruto. 
c) O Salário total é descontado em 15% 
E escrever os seguintes resultados: 
• Imprimir Nome, idade e cargo. 
• Imprimir o salário bruto. 
• Imprimir o salário líquido. 
 
7. Ler a base e a altura de um triângulo. Em seguida, escreva a área do mesmo. 
Obs.: Área = ( Base * Altura ) / 2 
 
8 .Uma empresa tem para um determinado funcionário uma ficha contendo o nome, número de horas 
trabalhadas e o n0 de dependentes de um funcionário. 
 Considerando que: 
 a) A empresa paga 12 reais por hora e 40 reais por dependentes. 
 b) Sobre o salário são feito descontos de 8,5% para o INSS e 5% para IR. 
 
Leia o Nome, número de horas trabalhadas e número de dependentes de um funcionário. Após a 
leitura, escreva qual o Nome, salário bruto, os valores descontados para cada tipo de imposto e finalmente 
qual o salário líquido do funcionário. 
 
9. O preço de um automóvel é calculado pela soma do preço de fábrica com o preço dos impostos (45% 
do preço de fábrica) e a percentagem do revendedor (28% do preço de fábrica). Leia o nome do 
automóvel e o preço de fábrica e escreva o nome do automóvel e o preço final. 
 
 47
7. Controle do Fluxo de Execução 
 
Até o momento os algoritmos estudados utilizam apenas instruções primitive de atribuição, e de 
entrada e saída de dados. Qualquer conjunto de dada fornecido a um algoritmo destes será submetido ao 
mesmo conjunto de instruções, executadas sempre na mesma seqüência. 
No entanto, na prática muitas vezes e 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 seqüência em que instruções são executadas num algoritmo) em função dos 
dados fornecidos com entrada ao mesmo. 
Neste capítulo serão estudadas as estruturas básicas de controle de fluxo de instruções de um 
algoritmo. De acordo com o modo como este controle é feito, estas estruturas são classificadas em: 
- estruturas seqüenciais; 
- estruturas de decisão; 
- estruturas de repetição. 
7.1 Comandos Compostos 
Um comando composto é um conjunto de zero ou mais comandos (ou instruções) simples, 
como atribuições e instruções primitives de entrada ou saída de dados, ou alguma das construções 
apresentadas neste capítulo. 
Este conceito e bastante simples e será útil e conveniente nos itens seguintes, na definição das 
estruturas básicas de controle de execução. 
7.2 Estrutura Seqüencial 
Na estrutura seqüencial os comandos de um algoritmo são executados numa seqüência pré-
estabelecida. Cada comando e executado somente após o término do comando anterior. 
A Figura 22 exemplifica um trecho seqüencial de um algoritmo. 
Em termos de fluxogramas, a estrutura seqüencial e caracterizada por um único fluxo de 
execução (um único caminho orientado) no diagrama. Em pseudocódigos, a estrutura seqüencial 
caracteriza-se por um conjunto de comandos dispostos ordenadamente. Como exemplos de aplicação 
desta estrutura de controle tem-se os algoritmos do capitulo anterior, onde não ha estruturas de decisão ou 
de repetição. 
7.3 Estruturas de decisão 
Neste tipo de estrutura o fluxo de instruções a ser seguido e escolhido em função do resultado da 
avaliação de uma ou mais condições. Uma condição e uma expressão lógica. 
A classificação das estruturas de decisão e feita de acordo com o número de condições que 
devem ser testadas pare que se decide qual o caminho a ser seguido. Segundo esta classificação tem-se 
dois tipos de estruturas de decisão: 
 
 
 
 
 
 48
 
- Se 
- Escolha 
 
 
 
 
 
 
 
 
 
 
 
 
 
... 
<Comando 1> 
<Comando 2> 
<Comando 3> 
... 
 
Figura 22 - Trecho seqüencial de um algoritmo: (a) fluxograma; (b) pseudocódigo. 
7.3.1 Estruturas de decisão do Tipo Se 
Nesta estrutura uma única condição (expressão lógica) e avaliada. Se o resultado desta avaliação 
for verdadeiro (.V.), então um determinado conjunto de instruções (comando composto) e executado. 
Caso contrário, ou seja, quando resultado da avaliação for falso (.F.), um comando diferente e 
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 (Figure 7.2 (a)). A execução do algoritmo 
prosseguirá necessariamente por um deles. Esta escolha e feita em função do resultado da expressão: um 
dos caminhos e rotulado com (.V.) e será seguido quando a condição for verdadeira o outro e rotulado 
com (.F.) e será seguido quando a condição for falsa. 
A sintaxe da estrutura de decisão do tipo SE e mostrada na Figura 23. 
 
<Comando 1> 
<Comando 2> 
<Comando 1> (a) 
(b) 
 49
 
 
 
 
 
 
 
 
 
 
 
 
Se <Condição> 
 
Então 
 <Comando_Composto_1> 
Senão 
 <Comando_Composto_1> 
Fim_se 
 
 
 If <Condição> 
 Then Begin 
 <Comandos>; 
 End 
 Else Begin 
 <Comandos>; 
 End; 
 
 
Figura 23 - Sintaxe da estrutura de decisão Se-Então-Senão-Fim_se: (a) fluxograma; (b) 
pseudocódigo e (c) pascal. 
 
Note-se o aparecimento de novas palavras-reservadas Se, Então, Senão e Fim_se. 
A semântica desta construção e a seguinte: a condição e avaliada. Se o resultado for verdadeiro, 
então o comando_composto_1 e executado. Ao término de sue execução o fluxo do algoritmo prossegue 
pela instrução seguinte a construção, ou seja, o primeiro comando após o Fim_se. Nos casos em que a 
condição e avaliada como false, o comando_composto_2 e 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 e um 
conjunto vazio de instruções. Neste caso, a porção relativo ao Senão pode ser omitida, resumindo a 
sintaxe da construção forma mostrada na Figura 24. 
<Condição> 
<Comando 
Composto 2>
<Comando 
Composto 1>
.F..V. 
(b) 
(a) 
(c) 
 50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Se <Condição> 
 
Então 
 <Comando_Composto_1> 
Fim_se 
 
 
If <Condição> 
 
Then 
 <Comando_Composto_1>; 
 
Figura 24 - Sintaxe da estrutura de decisão Se-Então-Fim_se: (a) Fluxograma; (b) pseudocódigo; 
(c) pascal. 
 
A semântica desta construção e a seguinte: no caso da condição seja 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 e false, o fluxo de execução prossegue normalmente pela 
primeira instrução após o Fim_se. 
A Figura 25 exemplifica 0 uso da construção Se-Então-Senão Fim_se num algoritmo para 
determinar se uma pessoa é maior ou menor de idade 
(a) 
<Condição> 
<ComandoComposto 1>
.F.
.V.
(b) 
(c) 
 51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Algoritmo Exemplo_7_1 
Var Idade : inteiro 
Início 
 Leia Idade 
 Se Idade >= 18 
Então 
 Escreva "Maior de idade" 
Senão 
 Escreva "Menor de idade" 
 Fim_se 
 Fim. 
 
 
Program Exemplo_7_1; 
Var Idade : integer; 
Begin 
 Read(Idade); 
 If Idade >= 18 
Then 
 Write ('Maior de idade') 
Else 
 Write ('Menor de idade'); 
 End. 
 
 
Figura 25 - Exemplo de aplicação da estrutura de decisão Se-Então-Senão-Fim_se. 
7.3.2 Exercícios G 
 
1. Faça um algoritmo que leia os valores A, B, C, e diga se a soma de A + B é menor que C. 
 
2. Faça um algoritmo que leia dois valores inteiros A e B, e se os valores forem iguais deverá se somar os 
dois, caso contrário multiplique A por B ao final do calculo atribuir o valor para uma variável C. 
 
Início 
Idade 
"Menor de Idade" "Maior de Idade" 
Fim 
 
Idade > = 18 
.F. .V. 
 52
3. Faça um algoritmo que leia o nome e as três notas de uma disciplina de uma aluno e ao final escreva o 
nome do aluno, sua média e se ele foi aprovado a média é 8. 
 
4. Faça um algoritmo que leia 2 números inteiros e escreva o menor deles. 
 
5. Faça um algoritmo que leia 3 números inteiros e escreva o menor deles. 
 
6. Faça um algoritmo que leia 4 números inteiros e escreva o menor deles. 
 
7. Dados três valores distintos, fazer um algoritmo que, após a leitura destes dados coloque-os em ordem 
crescente. 
 
8. Dado três valores X, Y, Z, verificar se eles podem ser os comprimentos dos lados de um triângulo, e se 
forem, verificar se é um triângulo equilátero, isósceles ou escaleno. Se eles não formarem um triângulo, 
escrever uma mensagem. 
 Antes da elaboração do algoritmo, torna-se necessária a revisão de algumas propriedades e 
definições. 
Propriedade - O comprimento de cada lado de um triângulo é menor do que a soma dos comprimentos 
dos outros dois lados. 
Definição 1 - Chama-se triângulo equilátero os que tem os comprimentos dos três lados iguais, 
Definição 2 - Chama-se triângulo isósceles ao triângulo que tem os comprimentos de dois lados iguais. 
Definição 3 - Chama-se triângulo escaleno ao triângulo que tem os comprimentos dos três lados 
diferentes. 
 
9. Uma empresa decide dar um aumento de 30% aos funcionários cujo salário é inferior a R$ 5.000,00 . 
Escreva um algoritmo que possa ser utilizado para o calculo de reajuste do salário de um funcionário. 
 
10. Uma empresa decide dar um aumento de 25,5 % aos funcionários cujo o salário é inferior a R$ 
2.000,00 e tenha mais de 2 dependentes e 15% para os que ganham acima de R$ 2.000,00 e tenha um 
dependente e 7,5% para os que acima e não tenham dependente. 
 
 
 53
 
7.3.3 Estruturas de decisão do Tipo Escolha 
Este tipo de estrutura e 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. 
A sintaxe da construção de Escolha e mostrada na Figura 26: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Escolha 
Caso <Condição_1> 
 <Comando_composto 1> 
Caso <Condição_2> 
 <Comando_composto_2> 
... 
 
Caso <Condição_n> 
 <Comando_composto_n> 
Senão 
 <Comando_composto_s> 
Fim_escolha 
 
(a) 
(b) 
<Condição_1> <Comando 
Composto 1>
.F.
.V.
<Condição_2> <Comando 
Composto 2> 
.F.
.V.
<Condição_N> <Comando 
Composto N> 
.F.
.V.
<Comando 
Composto S>
 54
 
Case <Variável> Of 
 <Condição_1> : Begin 
 <Comandos_compos_1>; 
 End; 
 <Condição_2> : Begin 
 <Comandos_compos_2>; 
 End; 
 ... 
 
 <Condição_n> : Begin 
 <Comandos_compos_s>; 
 End; 
 Else 
 Begin 
 <Comandos>; 
 End; 
 End; 
 
 
Figura 26 - Sintaxe usada em (a) fluxogramas; (b) pseudocódigo e (c) pascal para a construção 
Escolha. 
 
Seu funcionamento e o seguinte: ao entrar-se numa construção do tipo Escolha, a Condição_1 é 
testada: se for verdadeira, o comando_composto_1 e 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 falso, a 
condição_2 é testada: se esta for verdadeira, o comando_composto_2 e executado e, ao seu término, a 
execução prossegue normalmente pela instrução seguinte ao Fim escolha. O mesmo raciocínio e 
estendido a sodas as condições da construção. No cave em que sodas as condições são avaliadas como 
falsas, o comando composto_s (correspondente ao Senão da construção) e executado. 
Um exemplo de aplicação desta construção e mostrado na Figura 27, baseado num algoritmo de 
reajuste salarial variável em função da profissão. 
 55
 
Algoritmo Exemplo_7_2 
Var Salário, Sal_reaj : real 
 Prof : literal[20] 
Início 
 Leia Salário, Prof 
 Escolha 
 Caso Prof = "Técnico" 
 Sal_reaj <- 1.5 * Salário 
 Caso PROF = "Gerente" 
 Sal_reaj <- 1.3 * Salário 
 Senão 
 Sal_reaj <- 1.1 * Salário 
 Fim_escolha 
 Escreva SALÁRIO Reajustado = ", Sal_reaj 
Fim. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 27 - Exemplo de aplicação da construção Escolha. 
 
Um caso particular desta construção e 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 sodas as 
condição testadas são falsas. Assim, pode-se dispensar o uso do Senão na construção como acontece 
também na construção Se. 
 
Prof.= "Técnico Sal.Reaj ← 1.5 * 
Salário
.F.
.V.
Prof.="Gerente" Sal.Reaj ← 1.3 * 
Salário 
.V.
Sal.Reaj ← 1.1 * 
Salário
Início 
Salário, Prof. 
"Salário Reajustado 
=", Reaj 
Fim 
.F.
 56
7.3.4 Exercícios H 
1. Faça um algoritmo que leia um número que represente um determinado mês do ano. Após a leitura 
escreva por extenso qual o mês lido. Caso o número digitado não esteja na faixa de 1..12 escreva uma 
mensagem informando o usuário do erro da digitação. 
 
2. Faça um algoritmo que leia um número qualquer. Caso o número seja par menor que 10, escreva 
‘Número par menor que Dez’, caso o número digitado seja ímpar menor que 10 escreva ‘Número Ímpar 
menor que Dez’, caso contrário Escreva ‘Número fora do Intervalo’. 
 
3. Uma empresa irá dar um aumento de salário aos seus funcionários de acordo com a categoria de cada 
empregado. O aumento seguirá a seguinte regra: 
a) Funcionários das categorias A, C, F, e H ganharão 10% de aumento sobre o salário 
b) Funcionários das categorias B, D, E, I, J e T ganharão 15% de aumento sobre o salário 
c) Funcionários das categorias K e R ganharão 25% de aumento sobre o salário 
d) Funcionários das categorias L, M, N, O, P, Q e S ganharão 35% de aumento sobre o salário 
e) Funcionários das categorias U, V, X, Y, W e Z ganharão 50% de aumento sobre o salário 
Faça um algoritmo que Escreva Nome, categoria e salário reajustado de cada Empregado. 
7.4 Estruturas de Repetição 
São muito comuns as situações em que se deseja repetir um determinado trecho de um programa 
um 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 e efetuado pare 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 e 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 a modificação pelas instruções do interior do laço. 
7.4.1 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 e 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) e executado. A sintaxe usada em pseudocódigos para os laços contados e mostrada na 
Figura 28. 
 
Para <var> de <Início> até <final> incr de <inc> faça 
 <Comando_composto> 
Fim_para 
 
 
 For <Variável > : = <INICIO> TO <FIM> DO 
 Begin 
 <Comando>; 
 End; 
 
Figura 28 - Sintaxe usada em laços contados: (a) pseudocódigo e (b) pascal. 
 
(a) 
(b) 
 57
Em termos de fluxograma, há varias representações possíveis e, ate o momento, não há um 
consenso quanto a forma mais conveniente. A Figura 29 apresenta duas formas bastante usadas, sendo 
que aquela mostrada na Figura 29 (a) será a adotada neste texto. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 29 - Duas formas possíveis de representação de laços contados em algoritmos. 
 
A semântica do laço contado e a seguinte: no Início da execução construção o valor <Início> e 
atribuído a variável <var>. A seguir, o valor variável <var> e comparado com o valor <final>. Se <var> 
for maior <final>, então o comando composto não e executado e a execução do algoritmo prossegue pelo 
primeiro comando seguinte ao Fim_para. Por outro lado, se valor de <var> for menor ou igual a 
<final>, então o comando composto interior da construção e executado e, ao final do mesmo, o valor e 
adicionada variável <var>. Feito isso, retorna-se a comparação entre <var> e <final> repete-se o 
processo até que <var> tenha um valor maior que <final>, quando o laço e finalizado e a execução do 
algoritmo prossegue pela instrução imediamente 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. segundo cave (variáveis), algumas 
linguagens de programa proíbem que seus valores sejam modificados durante a execução do laço; 
- <inc> e 0 valor que e adicionado a variável <var> ao final de cada iteração do laço. Há linguagens 
de programação que permitem que Ihe 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 e feito cada volta do laço, pare seu correto funcionamento. 
Contudo, e texto assumirá que <inc> possui um valor sempre positivo, o que não cause 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. 
 
7.4.1.1 Exercícios I 
1. Faça um algoritmo para ler base e altura de 50 triângulos e escreva a sua área. 
 
2. Faça um algoritmo para calcular N!. 
 
3. Faça um algoritmo para calcular um valor A elevado a um expoente B. Os valores A e B deverão ser 
lidos. Não usar A** B. 
 
4. Faça um algoritmo para: 
a) Ler um valor x qualquer 
b) Calcular Y = ( x+1)+(x+2)+(x+3)+(x+4)+(x+5)+…(x+100). 
 
(a) 
<Var>=<Início> 
<Fim>, <Inc> 
<Comando 
Composto> 
<Var>← 
<Início> 
<Comando 
Composto> 
<Var> ← 
<Var>+<Inc> 
 
<Var> 
> 
<Fim> 
.V. 
.F. 
(b) 
 58
5. Faça um algoritmo para somar os números pares positivos < 1000 e ao final imprimir o resultado. 
 
6. Faça um algoritmo para gerar os termos da seguinte P.G.: 3,9,27,81,…,calcule o 100º termo. 
 
7. Ampliando o exercício acima, faça um algoritmo para calcular a soma dos termos da P.G.. 
 
8. Faça um algoritmo para calcular a série Fibonacci até 0 N-ésimo termo. A série tem a seguinte forma: 
1,1,2,3,5,8,13,21,34,… 
 
9. Faça um algoritmo para ler um valor X e calcular Y = X+2X+3X+4X+5X+…+20X 
 
10. Para cada nota de compra , tem-se o Nome do produto comprado, o valor e o imposto. Faça um 
algoritmo que escreva o valor total bruto, o imposto total cobrado e o valor total líquido de todas as notas. 
Considere 500 notas 
 
11. Faça um algoritmo que calcule a hipotenusa de 10 triângulos. 
 hipotenusa2 = cateto12 + cateto22 
 
12. Faça um algoritmo para calcular a área de N quadriláteros. Fórmula: Área = Lado * Lado 
 
13. Faça um algoritmo para calcular a área de N Círculos . Fórmula : Área = π raio 2 π = 3,141592. 
 
14. Fazer um algoritmo que calcule escreva a soma dos 50 primeiros termos das seguinte série: 
 
1000
1
997
2
994
3
991
4
− + − +... 
15. Faça um algoritmo para ler N números inteiros e ao final escrever sua média. 
 
16. Uma turma possui N alunos, e para cada aluno tem-se uma média para cada disciplina. O 
professor de Matemática precisa saber a média geral de sua disciplina em um turma. Faça um 
algoritmo para auxiliar a encontrar este valor. 
 
17. Faça um algoritmo para calcular: 
 
a) 2
1
50
N
N −
∑ 
 
b) N
N
2
1
50
−
∑ 
 
c) 
1
1
50
NN −
∑ 
 
d) 
1
21
50
NN −
∑ 
 
e) 
1
2
1
50
NN −
∑ 
 
18. Uma empresa possui 100 vendedores que ganham por comissão sobre cada produto vendido. Cada 
vendedor em um determinado mês vendeu X produtos, onde cada produto pode ou não ter preços iguais. 
A empresa deseja obter um relatório com o Nome, o total de vendas e o valor a ser pago a cada vendedor. 
A comissão paga pela empresa é de 30% sobre o valor de cada produto vendido. 
 
 59
19. Dado uma relação de 1000 números em graus Célcius, faça um algoritmo que imprima o seguinte 
relatório: 
 
Graus Fahrenheit Graus Célcius 
xxxxxx xxxxxx 
Obs.: 
 
 º ºF C= +9
5
32 
 
20. Escrever um programa para gerar e escrever uma tabela com os valores de seno de um Angulo A em 
radianos, utilizando a série de Mac-Laurin Truncada apresentada a seguir: 
SenA A A A A= − + −
3 5 7
6 120 5040
 
Condições: os valores dos ângulos devem variar de 0.0 a 6.3, inclusive, de 0.1 em 0.1 
 
7.4.2 Laços Condicionais 
Laços condicionais são aqueles cujo conjunto de comandos em seu interior e executado ate 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 
7.4.2.1 Construção Enquanto 
Sua sintaxe e mostrada na Figura 30. 
Sua semântica e a seguinte: ao Início da construção Enquanto a condição e testada. Se seu 
resultado for falso, então o comando composto no seu interior não e executado e a execução prossegue 
normalmente pela instrução seguinte ao Fim_enquanto. 
Se a condição for verdadeira o comando composto e 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 false, o fluxo de execução prosseguirá normalmente pelas instruções posteriores ao 
Fim_enquanto. 
 
 
 
 
 
 
 
 
 
 
 
 
Enquanto <condicão> Faça 
<comandocomposto> 
Fim_enquanto 
 
 
 PROGRAM ExEnquanto; 
 WHILE <Condição for verdadeira> DO 
 BEGIN 
 <Comandos>; 
(a) 
<Condição> <Comando 
Composto>
.F.
.V.
(b) 
(c) 
 60
 END. 
 
 
Figura 30 - Sintaxe da Enquanto para laços condicionais, sendo (a) fluxograma; (b) pseudocódigo e 
(c) Pascal 
Uma vez dentro do corpo do laço, a execução somente abandonará mesmo quando a condição 
for falsa. O usuário deste tipo de construção deve estar atento a necessidade de que em algum momento a 
condição deverá que avaliada como falsa. Caso contrário, o programa permanecerá indefinidamente no 
interior do laço, o que e conhecido como Laço infinito. 
7.4.2.1.1 Exercícios J 
1. Faça um algoritmo para ler base e altura de 50 triângulos e escreva a sua área. 
 
2. Faça um algoritmo para calcular N!. 
 
3. Faça um algoritmo para calcular um valor A elevado a um expoente B. Os valores A e B deverão ser 
lidos. Não usar A** B. 
 
4. Faça um algoritmo para: 
a) Ler um valor x qualquer 
b) Calcular Y = ( x+1)+(x+2)+(x+3)+(x+4)+(x+5)+…(x+100). 
 
5. Faça um algoritmo para somar os números pares positivos < 1000 e ao final imprimir o resultado. 
 
6. Faça um algoritmo para gerar os termos da seguinte P.G.: 3,9,27,81,…,calcule o 100º termo. 
 
7. Ampliando o exercício acima, faça um algoritmo para calcular a soma dos termos da P.G.. 
 
8. Faça um algoritmo para calcular a série Fibonacci até 0 N-ésimo termo. A série tem a seguinte forma: 
1,1,2,3,5,8,13,21,34,… 
 
9. Faça um algoritmo para ler um valor X e calcular Y = X+2X+3X+4X+5X+…+20X 
 
10. Faça um algoritmo para ler e escrever o Nome, idade e sexo de um número indeterminado de alunos. 
Ao final escreva o total de alunos lidos. 
 
11. Para cada nota de compra , tem-se o Nome do produto comprado, o valor e o imposto. Faça um 
algoritmo que escreva o valor total bruto, o imposto total cobrado e o valor total líquido de todas as notas. 
Considere 500 notas 
 
12. O valor aproximado de PI pode ser calculado usando-se a série 
S = + + + + +1
1
1
3
1
5
1
7
1
93 3 3 3 3
... 
sendo Π = ∗S 323 
fazer um algoritmo para calcular e escrever o valor de PI com 51 termos 
 
13. Faça um algoritmo para ler um valor X e um valor n. Após, calcule a seguinte expressão: ( ) ( ) ( ) ( )
Y
X X X X N
N
= + + + + + + + +1
1
2
2
3
3! ! !
. . .
!
 
 
14. Faça um algoritmo para somar os restos da divisão por 3 de 200 números. 
 
15. Faça um algoritmo que calcule a hipotenusa de 10 triângulos. 
 hipotenusa2 = cateto12 + cateto22 
 
16. Faça um algoritmo para calcular a área de N quadriláteros. Fórmula: Área = Lado * Lado 
 61
 
17. Faça um algoritmo para calcular a área de N Círculos . Fórmula : Área = π raio 2 π = 3,141592. 
 
18. Fazer um algoritmo que calcule escreva a soma dos 50 primeiros termos das seguinte série: 
 
1000
1
997
2
994
3
991
4
− + − +... 
19. Faça um algoritmo para ler N números inteiros e ao final escrever sua média. 
 
20. Uma turma possui N alunos, e para cada aluno tem-se uma média para cada disciplina. O 
professor de Matemática precisa saber a média geral de sua disciplina em um turma. Faça um 
algoritmo para auxiliar a encontrar este valor. 
 
21. Uma empresa com X funcionários precisa saber a média de seus salários. Faça um 
algoritmo para ler a quantidade de funcionários e o salário de cada um e escrever a média dos 
salários. 
 
22. Faça um algoritmo que calcule e escreva o valor de S onde: 
1
99...
46
7
48
5
49
3
50
1 +++++=S 
 
23. Uma empresa possui um conjunto indeterminado de funcionários e precisa saber a média de seus 
salários e a quantidade de funcionários. 
 
24. Uma turma possui um conjunto indeterminado de alunos e para cada aluno tem-se uma média para 
cada disciplina. Os professores de matemática e português desejam saber a média geral de sua disciplina 
nesta turma. 
 
25. Dado um conjunto indeterminado de alunos sendo que para cada aluno tem-se uma ficha contendo 
Nome e Idade. Escreva o nome do aluno mais velho e mais novo. 
 
 
 62
 
7.4.2.2 Construção Repita 
Sua sintaxe e mostrada na Figura 31. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Repita 
<comando composto> 
até que <condição> 
 
 
 REPEAT 
 <Comandos> 
 UNTIL <Condição for verdadeira>; 
 
Figura 31 - Sintaxe da construção Repita pare laços condicionais, sendo (a) fluxograma; (b) 
pseudocódigo e (c) Pascal. 
 
Seu funcionamento e bastante parecido ao da construção Enquanto. O comando e executado 
uma vez. A seguir, a condição e testada: se ela for false, o comando composto e executado novamente e 
este processo e repetido ate que a condição seja verdadeira, quando então a execução prossegue pelo 
comando imediatamente seguinte ao final da construção. 
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 Enquanto o comando composto e 
executado zero ou mais vezes (possivelmente nenhuma). Isto acontece porque na construção Repita o 
teste da condição e feito ao final da construção, ao contrário do que acontece na construção Enquanto, 
onde o teste da condição e feito no Início da mesma. 
7.4.2.2.1 Exercícios L 
 
1. Faça um algoritmo para ler base e altura de 50 triângulos e escreva a sua área. 
 
2. Faça um algoritmo para calcular N!. 
 
3. Faça um algoritmo para calcular um valor A elevado a um expoente B. Os valores A e B deverão ser 
lidos. Não usar A** B. 
 
4. Faça um algoritmo para: 
a) Ler um valor x qualquer 
b) Calcular Y = ( x+1)+(x+2)+(x+3)+(x+4)+(x+5)+…(x+100). 
 
5. Faça um algoritmo para somar os números pares positivos < 1000 e ao final imprimir o resultado. 
 
<Condição> 
<Comando 
Composto> 
.V.
.F.
(a) 
(b) 
(c) 
 63
6. Faça um algoritmo para gerar os termos da seguinte P.G.: 3,9,27,81,…,calcule o 100º termo. 
 
7. Ampliando o exercício acima, faça um algoritmo para calcular a soma dos termos da P.G.. 
 
8. Faça um algoritmo para calcular a série Fibonacci até 0 N-ésimo termo. A série tem a seguinte forma: 
1,1,2,3,5,8,13,21,34,… 
 
9. Faça um algoritmo para ler um valor X e calcular Y = X+2X+3X+4X+5X+…+20X 
 
10. Leia 20 valores reais e escreva o seu somatório. 
 
11. Dado um número indeterminado de funcionários, onde é fornecido o Nome, número de dependentes e 
o número de horas trabalhadas. Pede-se que seja impresso, para cada funcionário, o seu Nome, salário 
bruto, salário líquido e o valor descontado. A empresa, paga R$ 2.250,00 por hora de trabalho, e R$ 
125,55 por dependente, e ainda faz um desconto de 12% sobre o salário bruto. Pede-se ainda que seja 
impresso o total de funcionários da empresa, o total gasto com salários, e o total descontado. 
 
12. Faça um algoritmo para: 
a) Leia um valor X e um valor N. 
b) Calcular: Y = X - 2X + 4X - 6X + 8X - 10X + … NX. 
 
13. Faça um algoritmo para ler um valor X e um Valor N. Após, calcule a seguinte expressão: ( ) ( ) ( ) ( )
Y
X X X X N
N
= + + + + + + + +1
1
2
2
3
3! ! !
. . .
!
 
 
14. Faça um algoritmo que calcule a hipotenusa de 10 triângulos. 
 hipotenusa2 = cateto2 + cateto2 
 
15. Faça um algoritmo para calcular a área de N quadriláteros. Fórmula: Área = Lado * Lado 
 
16. Faça um algoritmo para calcular a área de N Círculos . Fórmula : Área = π raio 2 π = 3,141592. 
 
17. Fazer um algoritmo que calcule escreva o valor de S onde: 
S = + + + + +1
1
3
2
5
3
7
4
99
50
... 
 
18. Fazer um algoritmo que calcule escreva o valor de S onde: 
S = − + − + −1
1
2
4
3
9
4
16
5
25
10
100
... 
 
19. Dado um conjunto indeterminado de alunos sendo que para cada aluno tem-se uma ficha contendo 
Nome e Idade. Escreva o nome do aluno mais velho e mais novo.7.5 Aninhamentos 
Um aninhamento ou embutimento e 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 e necessário que a construção interna esteja completamente 
embutida na construção externa. 
A Figura 7.11 ilustra aninhamentos válidos e inválidos. 
 
 
 
 64
 
 
 
 
 
 
 
 
 
 
 
 
Figura 32 - Exemplos de aninhamentos (a) válidos e (b) inválidos 
7.6 Síntese 
As estruturas de controle do fluxo de execução são essenciais pare que se pode alterar a 
seqüência de execução dos comandos de um programa em função dados do mesmo. 
Um comando composto e um conjunto de zero ou mais comandos simples, sejam eles 
instruções primitives ou construções como as estuda neste capítulo. 
Uma estrutura Seqüencial e aquela em que os comandos vão se executados numa seqüência 
pré-estabelecida, um após o outro. 
As estruturas de decisão permitem escolher qual o caminho a seguido num algoritmo em 
função de uma ou mais condições. A construção utilize 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 trecho de um algoritmo 
(comando composto). Quando o número de vezes que trecho será repetido e conhecido diz-se que o laço 
e do tipo contado (construção Para). Quando este número não é conhecido, mas e 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, 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 execute 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. 
7.6.1 Exercícios M 
 
1. Dado um conjunto de n registros cada registro contendo um valor real, faça um algoritmo que calcule a 
média dos valores maiores que 4. 
 
2. Dado uma relação de 100 carros escreva quantos são da cor azul. Sendo para cada carro tem-se uma 
ficha contento o nome e a cor. 
 
3. Dado uma série de 20 valores reais, faça uma algoritmo que calcule e escreva a média aritmética 
destes valores, entretanto se a média obtida for maior que 8 deverá ser atribuída 10 para a média. 
 
4. Faça um algoritmo para somar os números pares < 1000 e ao final escreva o resultado. 
 
5. Dado um conjunto de 20 valores reais, faça um algoritmo que: 
 a) Imprima os valores que não são negativos. 
 b) Calcule e imprima a média dos valores < 0. 
 
(a) 
(b) 
 65
6. Suponha que para cada aluno de sua sala exista uma ficha contendo o nome e a idade do aluno. 
Supondo que exista 50 alunos, faça uma algoritmo que determine quantos alunos tem idade maior que 30. 
 
7. Dado modelo, ano de fabricação, cor e placa de 1000 carros, faça um algoritmo que: 
a) Imprima quantos são, da cor verde e o percentual em relação ao total. 
b) Imprima quantos foram fabricados antes de 1990 e o percentual em relação ao total. 
c) Imprima quantos são FIAT UNO e o percentual em relação ao total. 
d) Imprima quantos carros tem na placa o digito 5 e o percentual em relação ao total. Considere 
placas com seguinte formato “AANNNN”. 
 
8. Dado Nome e notas ( total de 6 ) de n alunos, faça um algoritmo que: 
a) Imprima Nome e média dos alunos aprovados. Média > = 7.0. 
b) Imprima Nome e média dos alunos em recuperação. 5.0 >= Média <7.0. 
c) Imprima Nome e média dos alunos reprovados. Média <5.0. 
 
9. Faça um algoritmo que simule um cronometro com horas, minutos e segundos. A simulação deverá 
mostrar no vídeo o cronometro no seguinte formato HH: MM: SS. Inicialmente o cronometro será zerado 
( 00: 00: 00 ), sendo que os segundos começarão a ser incrementados, depois os minutos e depois as 
horas. Lembre-se que a cada 60 segundos os minutos deverão ser incrementados, depois os minutos 
voltarão a zero. Quando as horas estiverem prestes a chegar em 25, o cronometro deverá voltar a zero ( 
00: 00: 00 ). 
 
10. Dado Nome e salário de um número indeterminado de funcionários, escreva o Nome e o salário de 
quem tem o maior salário, bem como o Nome e o salário que possui o menor salário. 
 
11. Um hotel cobra R$ 300,00 por diária e mais uma taxa adicional de serviços. Se a diária for menor que 
15 a taxa e de R$ 20,00. Se o número de diárias for igual a 15 a taxa é de R$ 14,00 e se o número for 
maior que 15 a taxa é de R$ 12,00. Considerando-se que se tenha 200 pessoas e para cada pessoa tenha-
se um registro contendo seu nome e o número de diárias. 
Faça um algoritmo que imprima o nome e o total a pagar de cada pessoa e imprimir também o total ganho 
pelo hotel e o número total de diárias. 
 
12. Dado que cada pessoa tenha o seu nome e a sua idade e o seu peso em uma ficha, faça uma algoritmo 
que: 
a) Imprimir o nome da pessoa cujo a idade esta na faixa de 20 a 30 anos inclusive os extremos; 
b) Calcule a idade média das pessoas com peso maior que 80 Kg, considere que exista N pessoas. 
 
13. Faça um algoritmo que calcule o salário e o imposto de renda de um grupo de pessoas, considerando: 
a) Para cada pessoa tem-se: Nome, Número de Dependentes, Renda Bruta Anual; 
b) O imposto é calculado segundo a tabela abaixo: 
 Renda Liquida % 
 até R$ 10.000,00 isento 
 > R$ 10.000,00 até R$ 30.000,00 5% 
 > R$ 30.000,00 até R$ 60.000,00 10% 
 > R$ 60.000,00 15% 
c) Há um desconto de R$ 600,00 para cada dependente. 
d) Sendo que a renda liquida é igual a renda bruta menos o abatimento de cada dependente. 
 
14. O Departamento de transito do estado anotou dados de acidentes de transito no último ano. Para cada 
motorista envolvido no acidente, tem-se as seguintes informações: 
 
- Ano de nascimento; 
- Sexo (M - Masculino, F - Feminino) 
- Procedência ( 0 - Capital, 1 - Interior, 2 - Outro estado); 
Faça um algoritmo que : 
a) Calcule a porcentagem de motoristas com menos de 21 anos; 
b) Calcule quantas mulheres são da capital; 
c) Calcule quantos motoristas do interior do estado tem idade maior que 60 anos; 
d) Verifique se existe alguma mulher com idade maior que 60 anos; 
 66
R. 
 
15 . Suponha que para cada tipo de computador fabricado, a SEI, tem os seguintes informações: 
- Nome do computador; 
- O nome do fabricante; 
- e a sua capacidade de armazenamento; 
Faça um algoritmo que: 
a) Determine qual o valor da maior capacidade de memória; 
b) Determine quantos computadores diferentes a IBM fabrica; 
c) Verifique se tem algum computador chamado PS/1. Se tiver qual o seu fabricante; 
 
16. Dado um conjunto N números inteiros escreva quantos números e ímpares existem no conjunto. 
 
17. Uma empresa possui um número indeterminado de clientes. Para cada cliente tem-se uma ficha 
contendo Nome, Estado Civil. Estado Civil é um número codificado da seguinte forma: 
1 – Solteiro, 2 – Casado, 3- Divorciado e 4 – Viúvo. 
 A empresa deseja saber a quantidade de clientes para cada estado civil. 
7.6.2 Exercícios N 
 
1. Ler um LITERAL em forma de data. Exemplo : ‘26/09/95’ e escrever o dia , mês e ano desta data 
todos em separados. 
 
2. Dado uma relação de 100 literais no formato de data ( Exemplo "10/12/95" ), imprima aquelas que 
correspondem ao mês ‘09’. 
 
3. Dado um conjunto indeterminado de palavras, sendo que cada palavra possui um tamanho 
indeterminado, sendo que as mesmas sempre terminam com o caracter “$”, o qual deverá ser lido pelo 
teclado, faça um algoritmo que imprima um relatório como é mostrado no Exemplo abaixo: Suponha 
que a palavra digitada foi “MARIA”.M A 
A I 
R R 
I A 
A M 
 
4. Dado uma frase de exatamente 80 caracteres, escreva a frase de trás para frente, um caracter por linha. 
 
5. Dado uma quantidade indeterminada de palavras, sendo que as mesmas sempre terminam com o 
caracter “$”, escreva o tamanho de cada uma das mesmas ( o sinal de “$” não deve ser considerado na 
contagem ). 
 
6. Dado uma palavra terminada com o sinal “$”, faça um algoritmo para criar uma nova literal, a ser 
formada com os caracteres da primeira palavra invertidos. 
 
7. Dado uma relação de 100 literais no formato de data ( Exemplo "10/12/95" ), imprima um relatório no 
seguinte formato: 
 
Data Por Extenso 
26/09/95 26 de setembro de 1995 
 
8. Dados uma relação de n literais, todas terminadas com o caracter “$”, faça um algoritmo que escreva a 
literais e o seu tamanho. 
 
9. Dado uma relação de n literais, todas terminadas com o caracter “$”, faça um algoritmo que imprima 
aquelas que tem tamanho par. 
 67
 
10. Dado uma relação de n literais, todas terminadas com o caracter “$”, faça um algoritmo que escreva 
as literais ímpares cujo caracter central é uma vogal. 
 
11. Dado uma relação de n literais, todas terminadas com o caracter “$”, faça um algoritmo que imprima 
aquelas que são palíndromes (Ex. ANA, ARARA, OTTO). 
 
12. Faça um algoritmo para ter uma frase terminada em $. Após a leitura identificar e escrever quantas 
letras A, E, I, O e U existem em separado. 
 
13. Dado uma literal terminada com o caracter “$” faça um algoritmo que imprima quantas vogais 
existem nesta literal. 
 
14. Dado uma literal terminada com o caracter “$” faça um algoritmo que imprima quantas 
Ocorrências de cada vogal em separado existe nesta literal. 
 
 
 
 
 
 
 68
8. Símbolos Usados em Fluxogramas 
 
 
 
 
Terminal - O ponto de início, término ou interrupção de um programa. 
 
 
 
 
Direção do Fluxo - A direção do fluxo de dados ou de processamento. 
 
 
 
 
 
 
Conexão - Uma entrada ou uma saída de ou para uma outra parte do fluxograma 
 
 
 
 
 
Processamento - Um grupo de instruções que executam uma função de processamento do programa. 
 
 
 
 
 
Cartão Perfurado - Todas as variedades de cartão perfurado. Função generalizada neste texto para indicar 
entrada de dados. 
 
 
 
 
 
Documento - Documentos relatórios de todas as variedades. Função generalizada neste texto para indicar 
saída de dados. 
 
 
 
 
 
Decisão - Indica a possibilidade de desvios para diversos outros pontos do fluxograma, de acordo com 
situações variáveis. 
 
 
 
 
 
Fita Magnética - Algum tipo de dispositivo de armazenamento seqüencial. 
 
 
 69
 
 
 
Teclado de linha - Informação fornecida ou recebida de ou por um computador utilizando um dispositivo. 
 
 
 
 
 
Entrada/Saída - Qualquer função de um dispositivo de entrada/saída, fornecendo informações para 
processamento, gravação, posicionamento da fita etc. 
 
 
 
 
 
Entrada/Saída - Qualquer tipo de documento ou dados. 
 
 
 
 
 
Fita Perfurada - Fita de papel ou plástico. 
 
 
 
 
 
 
Acesso arbitrário de disco ou de tambor. 
 
 
 
 
Exibição - Informações exibidas por dispositivos visuais. 
 
 
 
 
 
Disco magnético - Dispositivo de disco magnético para armazenamento de dados 
 
 
 
 
 
 
 70
9. Funções pré-definidas do Pascal 
 O Pascal, possui muitas funções/Rotinas pré-definidas, sendo que iremos estudar algumas das 
principais. Caso haja necessidade, o manual da linguagem Pascal pode, e deve, ser usado como fonte de 
pesquisa de outras funções. 
 Dentre as Rotinas que iremos abordar, algumas necessitam que um comando especial seja 
colocado no início do PROGRAMA. Tal comando é mostrado abaixo: 
 
 PROGRAM Teste; 
 USES CRT; 
 BEGIN 
 <Comandos>; 
 END. 
 
 
Obs.: As funções que necessitarem o comando especial mostrado acima terão colocados ao lado a 
palavra CRT. 
9.1 Descrição das Funções/Rotinas: 
Rotina : ABS() 
Função : Retorna o valor absoluto de um valor numérico. 
Sintaxe : Resultado: =ABS(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 X1 : REAL; 
 X2 : INTEGER; 
 BEGIN 
 X1: =ABS( -2.3 ); ( 2.3 ) 
 X2: =ABS( -157 ); ( 157 ) 
 END. 
 
 
Rotina : CHR() 
Função : Retorna um caracter da tabela ASCII de acordo com um determinado valor numérico 
Sintaxe : Resultado: =CHR(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 X1 : CHAR; 
 BEGIN 
 X1: =CHR( 65 ); ( ‘A’ ) 
 END. 
 
 71
Rotina : CLRSCR 
Função : Limpa a tela de vídeo 
Sintaxe : CLRSCR 
Exemplo: 
 PROGRAM Teste; 
 USES CRT; 
 BEGIN 
 CLRSCR; 
 END. 
 
 
Rotina : CONCAT() 
Função : Concatena ( Junta ) uma seqüência de STRING’s 
Sintaxe : Resultado: =CONCAT( s1,s2,…,sn) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 s1,s2 : STRING; 
 BEGIN 
 s1: =CONCAT(‘João’,’Mineiro’); (‘João Mineiro’ ) 
 s2: = CONCAT(‘ABC’,’DEFG’,’HIJ’); (‘ABCDEFGHIJ’) 
 END. 
 
 
Rotina : COPY() 
Função : Copia n caracteres de uma STRING a partir de uma posição específica 
Sintaxe : Resultado: =COPY(s1, posição , quantidade) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 s1 :STRING; 
 BEGIN 
 s1: =COPY(‘ABCDEFGH’,2,3); (‘BCD’) 
 END. 
 
 
Rotina : COS() 
Função : Retorna o cosseno de um valor numérico 
Sintaxe : Resultado: = COS(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : REAL; 
 BEGIN 
 x: =COS(10); 
 END. 
 
 72
Rotina : DEC() 
Função : Decrementa uma variável numérica 
Sintaxe : DEC(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : INTEGER; 
 BEGIN 
 x: =10; 
 DEC(x) ; ( 9 ) 
 END. 
 
 
Rotina : DELAY() ( CRT ) 
Função : Interrompe o processamento por um número especificado de milisegundos 
Sintaxe : DELAY(Tempo) 
Exemplo: 
 PROGRAM Teste; 
 USES CRT; 
 BEGIN 
 DELAY(200); 
 END. 
 
 
Rotina : DELETE() 
Função : Deleta n caracteres de uma STRING, a partir de uma posição inicial 
Sintaxe : DELETE(s ,posição, quantidade) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 s : STRING; 
 BEGIN 
 s: =‘João da Silva’; 
 DELETE (s,5,3); (‘João Silva’) 
 END. 
 
 
Rotina : EXP() 
Função : Retorna “e” elevado a um determinado valor numérico 
Sintaxe : Resultado: =EXP(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : REAL; 
 BEGIN 
 x: : =EXP(10); 
 END. 
 
 73
Rotina : FRAC() 
Função : Retorna a parte fracionária de um valor numérico 
Sintaxe : Resultado: =FRAC(Valor) 
Exemplo: 
 PROGRAM Teste 
 VAR 
 x: REAL 
 BEGIN 
 x: =FRAC(2.345) ( 345 ) 
 END 
 
Rotina : GOTOXY() ( CRT ) 
Função : Posiciona o cursor no vídeo em uma determinada coluna ( x ) e linha ( y ) 
Sintaxe : GOTOXY( coluna, linha ) 
Exemplo: 
 PROGRAM Teste; 
 USES CRT; 
 BEGIN 
 GOTOXY(10,20); 
 END. 
 
Rotina : INC() 
Função : Incrementa uma variável numérica 
Sintaxe : INC(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : INTEGER; 
 BEGIN 
 x: =10; 
 INC(x); (11) 
 END. 
 
Rotina : INSERT() 
Função : Insere uma STRING dentro de outra STRING a partir de uma determinada posição 
Sintaxe : INSERT(STRING_Fonte, STRING_Destino, posição) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 s : STRING; 
 BEGIN 
 s: =‘João Silva’; 
 INSERT(‘Da ’,s,6); (‘João Da Silva’) 
 END. 
 
 74
Rotina : INT() 
Função : Retorna a parte inteira de um valor numérico 
Sintaxe : REsultado: =INT(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : REAL; 
 BEGIN 
 x: =INT(2.345); (2) 
 END. 
 
 
Rotina : KEYPRESSED ( CRT ) 
Função : Retorna TRUE se uma tecla foi pressionada, FALSE caso contrário 
Sintaxe : KEYPRESSED 
Exemplo: 
 PROGRAM Teste; 
 USES CRT; 
 BEGIN 
 REPEAT UNTIL KEYPRESSED; 
 END. 
 
 
Rotina : LENGTH() 
Função : Retorna o número de caracteres de uma STRING 
Sintaxe : Resultado:= LENGTH(s) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : INTEGER; 
 BEGIN 
 x: = LENGTH(‘João’); ( 4 ) 
 END. 
 
 
Rotina : LN() 
Função : Retorna o logaritmo natural de um determinado valor numérico 
Sintaxe : Resultado: =LN(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : REAL; 
 BEGIN 
 x: =EXP(LN(2)*3); (* 2**3 ( 8 ) *) 
 END. 
 
 75
Rotina : ODD() 
Função : Retorna TRUE se uma determinado valor numérico FOR impar, FALSE caso contrário 
Sintaxe : 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : Boolean; 
 BEGIN 
 c: =odd(65); ( TRUE ) 
 END. 
 
 
Rotina : ORD() 
Função : Retorna qual o número na tabela ASCII de um determinado caracter 
Sintaxe : Resultado: =ORD(Caracter) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : INTEGER; 
 BEGIN 
 x: =ORD(‘A’); ( 65 ) 
 END. 
 
 
Rotina : PI 
Função : Retorna o valor de PI 
Sintaxe : Resultado: =PI 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : REAL; 
 BEGIN 
 x: =PI; ( 3.1415926535…) 
 END. 
 
 
Rotina : POS() 
Função : Retorna a posição da primeira ocorrência dos caracteres de uma STRING dentro de outra 
STRING 
Sintaxe : Resultado: =POS(Caracteres,STRING_A_SER_PROCURADA) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : INTEGER; 
 BEGIN 
 x: =POS(‘ABC’,’DEABCDFG’); ( 3 ) 
 END. 
 
 76
Rotina : READKEY ( CRT ) 
Função : Faz a leitura de um caracter do teclado, não sendo necessário pressionar ENTER 
Sintaxe : Resultado: =READKEY 
Exemplo: 
 PROGRAM Teste; 
 USES CRT; 
 VAR 
 tecla: CHAR; 
 BEGIN 
 tecla: =READKEY; 
 END. 
 
 
Rotina : SIN() 
Função : Retorna o seno de um valor numérico 
Sintaxe : Resultado: =SIN(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : REAL; 
 BEGIN 
 x : = SIN(10); 
 END. 
 
 
Rotina : SQR() 
Função : Retorna um valor numérico elevado ao quadrado 
Sintaxe : Resultado: =SQR(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : INTEGER; 
 BEGIN 
 x: =SQR(3); ( 9 ) 
 END. 
 
 
Rotina : SQRT() 
Função : Retorna a raiz quadrada de um valor numérico 
Sintaxe : Resultado: =str(Valor) 
Exemplo: 
 PROGRAM Teste 
 VAR 
 x: INTEGER 
 BEGIN 
 x: =SQRT(9) ( 3 ) 
 END 
 
 77
Rotina : STR() 
Função : Converte um valor numérico para a sua representação em STRING 
Sintaxe : STR(Valor, STRING_Resultante) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 s : STRING; 
 BEGIN 
 STR(2.345,s); 
 END. 
 
 
Rotina : TEXTBACKGROUND() ( CRT ) 
Função : Altera a cor de fundo nas operações de E/S 
Sintaxe : TEXTBACKGROUND(Cor) 
Exemplo: 
 PROGRAM Teste; 
 USES CRT; 
 BEGIN 
 TEXTBACKGROUND(0); (Preto) 
 TEXTBACKGROUND(1); (Azul) 
 TEXTBACKGROUND(2); (Verde) 
 TEXTBACKGROUND(3); (Ciano) 
 TEXTBACKGROUND(4); (Vermelho) 
 TEXTBACKGROUND(5); (Mangenta) 
 TEXTBACKGROUND(6); (Marrom) 
 TEXTBACKGROUND(7); (Cinza) 
 END. 
 
 
Rotina : TEXTCOLOR() ( CRT ) 
Função : Altera a cor das letras nas operações de E/S 
Sintaxe : TEXTCOLOR(Cor) 
Exemplo: 
 PROGRAM Teste; 
 USES CRT; 
 BEGIN 
 TEXTCOLOR (0); (Preto) 
 TEXTCOLOR(1); (Azul) 
 TEXTCOLOR (2); (Verde) 
 TEXTCOLOR(3); (Ciano) 
 TEXTCOLOR(4); (Vermelho) 
 TEXTCOLOR(5); (Mangenta) 
 TEXTCOLOR(6); (Marrom) 
 TEXTCOLOR(7); (Cinza) 
 END. 
 
 78
Rotina : TRUNC() 
Função : Trunca um valor REAL para um valor Inteiro 
Sintaxe : Resultado: =TRUNC(Valor) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : INTEGER; 
 BEGIN 
 x: =TRUNC(2.345); ( 2 ) 
 END 
 
 
 
Rotina : UPCASE() 
Função : Converte um caracter minúsculo para maiúsculo 
Sintaxe : Resultado: =UPCASE(Caracter) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x : CHAR; 
 BEGIN 
 x: =UPCASE(‘a’); ( ‘A’ ) 
 END. 
 
 
Rotina : VAL() 
Função : Converte uma STRING para a sua representação numérica 
Sintaxe : VAL(STRING_ORIGEM,VALOR_RESPOSTA,CODIGO_ERRO) 
Exemplo: 
 PROGRAM Teste; 
 VAR 
 x, e : INTEGER; 
 BEGIN 
 VAL(‘12345’,x,e); ( 12345 ) 
 END. 
 
 79
10. Problemas Resolvidos em Algoritmos, Pascal e C 
 Alguns Exemplos de problemas resolvidos em Algoritmos, Pascal e C. 
10.1 Algoritmo do Triangulo 
 Faça um algoritmo para ler a base e a altura de um triângulo. Em seguida, escreva a área do mesmo. 
Obs: Área = ( Base * Altura ) / 2 
 
Em Algoritmo: 
 
Algoritmo Triangulo 
Var 
 base, altura, area : real; 
Inicio 
 Leia(Base) 
 Leia(Altura) 
 Area ← (Base * Altura)/2 
 Escreva (Area) 
Fim 
 
 
Em Pascal: 
 
program triangulo; 
var 
 area, base, altura: real; 
begin 
 { Entrada } 
 write ('Digite a base: '); 
 readln (base); 
 write ('Digite a altura: '); 
 readln (altura); 
 
 { Calculos } 
 area:= (base*altura)/2; 
 
 { Saida} 
 writeln ('A area do triangulo e: ',area:10:2); 
end. 
 
Em C: 
 
#include <stdio.h> 
 
 main () 
 { 
 /* declaracao de variaveis */ 
 float area,base,altura; 
 /* Entrada de dados */ 
 printf ("Digite base: "); 
 scanf ("%f", &base) ; 
 printf ("Digite altura: "); 
 scanf ("%f", &altura); 
 /* Calculos */ 
 area = (base*altura)/2; 
 80
 
 /* Resultados */ 
 printf ("A area do triangulo e: %10.2f\n", area); 
 } 
 
10.2 Algoritmo Preco Automóvel 
O preço de um automóvel é calculado pela soma do preço de fábrica com o preço dos impostos 
(45% do preço de fábrica) e a percentagem do revendedor (28% do preço de fábrica). Faça um algoritmo 
que leia o nome do automóvel e o preço de fábrica e imprima o nome do automóvel e o preço final. 
 
Em Algoritmo: 
 
Algoritmo automovel 
Var 
 Nome : literal 
 Precofabrica, Precofinal, Imposto : real 
Inicio 
 Leia (Nome, Precofabrica) 
 Imposto ← Precofabrica * (0,45 + 0,28) 
 Precofinal ← Precofabrica + Imposto 
 Escreva (Nome, Precofinal) 
Fim. 
 
Em Pascal: 
 
program preco; 
var 
 nome: string; 
 Precofabrica, PrecoFinal, imposto : real; 
begin 
 write ('Digite nome: '); 
 readln (nome); 
 write ('Digite preco de fabrica: '); 
 readln (Precofabrica); 
 Imposto := Precofabrica * (0.45 + 0.28); 
 PrecoFinal := PrecoFabrica + imposto; 
 writeln ('Automovel:', nome); 
 writeln ('Preco de venda:', PrecoFinal:10:2); 
end. 
 
 
Em C: 
 
#include <stdio.h> 
 
 main () 
 { 
 /* declaracao de variaveis */ 
 char nome[60] ; 
 float precofabrica, precofinal, imposto ; 
 
 /* Entrada de dados */ 
 printf ("Digite nome: "); 
 scanf ("%s", &nome) ; 
 printf ("Digite preco de fabrica: "); 
 scanf ("%f", &precofabrica); 
 
 /* Calculos */ 
 imposto = precofabrica *(0.45 + 0.28); 
 precofinal = precofabrica + imposto; 
 81
 
 /* Resultados */ 
 printf ("Automovel: %s\n", nome); 
 printf ("Preco de venda: %10.2f\n", precofinal); 
 } 
 
10.3 Algoritmo Media Valor 
Dado uma série de 20 valores reais, faça uma algoritmo que calcule e escreva a média aritmética 
destes valores, entretanto se a média obtida for maior que 8 deverá ser atribuída 10 para a média. 
 
R. 
Algoritmo Serie 
Var 
 Contador: Inteiro 
 N,Soma, Media :Real 
Inicio 
 Contador ← 0 
 Soma ← 0 
 Enquanto Contador < 20 faca 
 Leia (N) 
 Soma ← Soma + N 
 Contador ← Contador + 1 
 Fim Enquanto 
 Media ← Soma / 20 
 Se Media > 8 Entao 
 Media ← 10 
 Fim Se 
 Escreva (Media) 
Fim. 
 
Em Pascal: 
 
Program MEDIA_20; 
Uses crt; 
var 
 conta:integer; 
 media,num,soma:real; 
Begin 
 Clrscr; 
 conta := 0; 
 soma := 0; 
 Writeln ('Digite 20 números'); 
 While conta < 20 do 
 Begin 
 read (num); 
 soma := soma + num; 
 conta := conta + 1; 
 End; 
 media := (soma / 20); 
 if media > 8 thenWriteln ('media =10'); 
 else 
 Writeln ('A media ‚'); 
 Writeln (media); 
End. 
 
Em C: 
 
#include<stdio.h> 
 82
#include<conio.h> 
main() 
 { 
 float media,num,soma; 
 int cont; 
 soma=0; 
 cont=0; 
 clrscr(); 
 printf("\nDigite 20 números\n"); 
 while (cont<20) 
 { 
 scanf("%f",&num); 
 soma=soma+num; 
 num=soma; 
 cont++; 
 } 
 media=num/20; 
 if (media > 8) 
 { 
 printf("Media ‚ igual a 10"); 
 } 
 else 
 { 
 printf("Media ‚ igual a: %2.2f\n",media); 
 { 
 } 
 } 
 return(0); 
 } 
10.4 Algoritmo 3 Menores 
Faça um algoritmo que leia 3 números inteiros e imprima o menor deles. 
 
Em Algoritimo: 
 
Algoritmo Menor 
Var 
 A, B, C, Menor : Inteiro 
Inicio 
 Leia ( A,B,C) 
 Se (A < B) E (A <C) Entao 
 Menor ← A 
 Senao 
 Se B < C Entao 
 Menor ← B 
 Senao 
 Menor ← C 
 Fim se 
 Fim se 
 Escreva (Menor) 
Fim. 
 
Em Pascal: 
 
Program MENOR_N; 
Uses crt; 
var 
 n1,n2,n3,menor:integer; 
Begin 
Clrscr; 
 83
Writeln ('Digite 3 valores'); 
Read (N1,N2,N3); 
If (N1<N2) And (N1<N3) Then 
 menor:=N1 
Else 
 If (N2<N1) And (N2<N3) Then 
 menor:=N2 
 Else 
 menor:=N3 
Writeln ('O menor valor ‚'); 
Writeln (menor); 
End. 
 
Em C: 
 
#include<stdio.h> 
#include<conio.h> 
main() 
 { 
 int n1,n2,n3; 
 clrscr(); 
 printf("\nDigite 3 valores\n"); 
 scanf("%d",&n1); 
 scanf("%d",&n2); 
 scanf("%d",&n3); 
 if ((n1<n2) && (n1<n3)) 
 { 
 printf("\nO menor número ‚ :%d\n",n1); 
 } 
 else 
 { 
 if ((n2<n1) && (n2<n3)) 
 { 
 printf("\nO menor número ‚ :%d\n",n2); 
 } 
 else 
 { 
 printf("\nO menor número ‚ :%d\n",n3); 
 } 
 } 
 return(0); 
} 
 
10.5 Algoritmo Media Maior que 4 
Dado um conjunto de n registros cada registro contendo um valor real, faça um algoritmo que 
calcule a média dos valores maiores que 4. 
 
Em Algoritmo: 
 
Algoritmo Media 
Var 
 N, Conta, Maior4 : Inteiro 
 Soma, Media, Número :Real 
Inicio 
 Conta ← 1 
 Maior4 ← 0 
 Soma ← 0 
 Leia (N) 
 Enquanto Conta < N Faça 
 Leia (Número) 
 84
 Se Número > 4 Entao 
 Soma ← Soma + Número 
 Maior4 ← Maior4 + 1 
 Fim Se 
 Conta ← Conta + 1 
 Fim Enquanto 
 Media ← Soma / Maior4 
 Escreva (Media) 
Fim. 
 
Em Pascal: 
 
 program maior4; 
 uses 
 CRT; 
 var 
 n, aux: integer; 
 soma, media, número: real; 
 begin 
 Clrscr; 
 write ('Digite valores diferentes de 999'); 
 writeln; 
 aux := 0; 
 soma := 0; 
 read (número); 
 while número <> 999 do 
 begin 
 if número > 4 then 
 begin 
 soma:= soma + número; 
 aux := aux + 1; 
 end; 
 read (número); 
 end; 
 media := (soma/aux); 
 write ('MEDIA='); 
 write (media); 
 end. 
 
Em C: 
 
#include <iostream.h> 
#include <conio.h> 
main () 
{ 
 clrscr(); 
 int n; 
 float soma,media,número,aux; 
 cout <<"digite valores diferentes de 999 -> "; 
 cin >> número; 
 aux =1; 
 soma =0; 
 while (número != 999) 
 { 
 if (número > 4) 
 { 
 soma = soma + número; 
 aux =aux+1; } 
 media = (soma/aux); 
 cout << "\nEntre com o proximo ->"; 
 cin >> número; 
 } 
 cout << media; 
 return 0; 
 85
} 
10.6 Algoritmo Salário 
Uma empresa tem para um determinado funcionário uma ficha contendo o nome, número de horas 
trabalhadas e o n0 de dependentes de um funcionário. 
 Considerando que: 
 a) A empresa paga 12 reais por hora e 40 reais por dependentes. 
Sobre o salário são feito descontos de 8,5% para o INSS e 5% para IR. 
Faça um algoritmo para ler o Nome, número de horas trabalhadas e número de dependentes de um 
funcionário. Após a leitura, escreva qual o Nome, salário bruto, os valores descontados para cada tipo de 
imposto e finalmente qual o salário líquido do funcionário. 
 
Em Algoritmo: 
 
Algoritmo salario 
var 
 nome : literal 
 dependente : inteiro 
 horas, salariol, salariob, DescontoI, DescontoR : real; 
Inicio 
 Leia(nome,horas, dependente) 
 salariob ← (12 * horas) + (40 * dependente) 
 DescontoI ← (salariob*0,085) 
 DescontoR ← (salariob*0,05) 
 salariol ← (salariob - DescontoI, DescontoR) 
 Escreva(nome,salarioB, DescontoI, DescontoR, salarioL) 
Fim. 
 
Em Pascal: 
 
Program Salario; 
Uses 
 Crt; 
Var 
 Nome:String; 
 Numhora, Salbruto, Salliq:Real; 
 Numdep:Integer; 
Begin 
 Clrscr; 
 Write ('Digite O Nome Do Funcionario:'); 
 Read (Nome); 
 Writeln; 
 Write ('Número De Horas Trabalhadas:'); 
 Read (Numhora); 
 Writeln; 
 Write ('E Número De Dependentes:'); 
 Read (Numdep); 
 Writeln; 
 Salbruto:=(12*Numhora)+(40*Numdep); 
 Salliq:=Salbruto-((Salbruto*0.085)+(Salbruto*0.05)); 
 Write ('Nome Do Funcionario:'); 
 Write (Nome); 
 Writeln; 
 Write ('Salario Liquido:'); 
 Write (Salliq); 
End. 
 
Em C: 
 
 86
#include <iostream.h> 
#include <conio.h> 
#include <stdio.h> 
 
main () 
{ 
 clrscr(); 
 int numdep; 
 float numhora,salbruto,salliq; 
 
 char nome[20]; 
 cout << "Digite o nome do funcionario -> "; 
 scanf ("%s", &nome); 
 cout << "Número de horas trabalhadas -> "; 
 scanf ("%f", &numhora); 
 cout << "Número de dependentes -> "; 
 scanf ("%f", &numdep); 
 
 salbruto = (12*numhora)+(40*numdep); 
 salliq = salbruto -((salbruto*0.085)+(salbruto*0.05)); 
 
 cout << "\nNome do Funcionario: "<< nome; 
 cout << "\nSalario Liquido: " << salliq; 
 return 0; 
} 
 
10.7 Algoritmo 50 Triangulos 
1) Faça um algoritmo para ler base e altura de 50 triângulos e imprimir a sua área. 
 
Em Algoritmo: 
 
Algoritmo Triangulo 
Var 
 Contador: Inteiro 
 Base, Haltura, Area :Real 
Inicio 
 Contador ← 1 
 Enquanto Contador < 51 faca 
 Leia (Base 
 Leia (Haltura) 
 Area ← (Base * Haltura)/2 
 Escreva( Area) 
 Contador ← Contador + 1 
 Fim Enquanto 
Fim. 
 
 
Em Pascal: 
 
program triangulo; 
uses crt; 
var 
 base,altura,area:real; 
 contador:integer; 
begin 
 clrscr; 
 contador:=1; 
 while contador < 51 do 
 begin 
 87
 writeln('Digite a Base'); 
 read(base); 
 writeln('Digite a Altura'); 
 read(altura); 
 area:=(base*altura)/2; 
 write('Esta e a area do triangulo '); 
 writeln (area); 
 contador:=contador+1; 
 end; 
 repeat until keypressed; 
end. 
 
Em C: 
 
/*program triangulo*/ 
#include <stdio.h> 
 
main () 
{ 
 float base,altura,area; 
 int contador = 1; 
 
 while (contador < 51) { 
 printf ("\nDigite a Base\n"); 
 scanf ("%f",&base); 
 printf ("\nDigite a Altura\n"); 
 scanf ("%f",&altura); 
 area=(base*altura)/2; 
 printf ("\nA area do triangulo de número %d eh %f",area); 
 contador++; 
 } 
 return (0); 
} 
 
10.8 Algoritmo Media Menores 
Dado um conjunto de 20 valores reais, faça um algoritmo que: 
 a) Imprima os valores que não são negativos. 
 b) Calcule e imprima a média dos valores < 0. 
 
Em Algoritmo: 
 
Algoritmo Conjunto20 
Var 
 N, SomaMenor, MediaMenor : Real 
 ContaMenor, Contador : Inteiro 
Inicio 
 Contador ← 0 
 ContaMenor ← 0 
 SomaMenor ← 0 
 Enquanto Contador < 20 faca 
 Leia(N) 
 Se N >= 0 Entao 
 Escreva (N) 
 Senao 
 SomaMenor ← SomaMenor + N 
 ContaMenor ← ContaMenor + 1 
 Fim Se 
 Contador ← Contador + 1 
 88
 Fim Enquanto 
 MediaMenor ← SomaMenor / ContaMenor 
Fim. 
 
Em Pascal: 
 
program números; 
uses crt; 
var 
 valor,media,soma:real; 
 cont,contpos:integer; 
begin 
 clrscr;cont:=1; 
 while cont < 21 do 
 begin 
 writeln('Digite um valor real'); 
 read(valor); 
 if valor < 0 then 
 begin 
 media:=media+valor; 
 contpos:=contpos+1; 
 end 
 else 
 begin 
 write (valor); 
 writeln (' e um valor maior que Zero'); 
 end; 
 cont:=cont+1; 
 end; 
 media:=media/contpos; 
 write ('O número de valores menores que Zero sao '); 
 writeln (contpos); 
 write ('A media do valores menores que Zero e '); 
 writeln (media); 
 repeat until keypressed; 
end. 
 
Em C: 
 
/* números */ 
#include <stdio.h> 
 
main() 
{ 
 float valor ,media; 
 int cont = 1, 
 contpos= 0; 
 
 while (cont < 21) { 
 printf ("\nDigite um valor real\n"); 
 scanf ("%f", &valor); 
 if (valor < 0) { 
 media=media+valor; 
 contpos++; 
 } 
 else 
 { 
 printf ("\n %f",valor); 
 printf (" e um valor maior que Zero"); 
 } 
 cont++; 
 } 
 media = media / contpos; 
 89
 printf ("\nO número de valores menores que Zero eh %d",contpos); 
 printf ("\nA media dos valores menores que Zero e %f",media); 
 return (0); 
} 
 
	1. Introdução
	1.1 Conceito de Algoritmo
	1.2 Fases de um Algoritmos
	1.3 Visão Geral
	2. Formas de Representação de Algoritmos
	2.1 Descrição Narrativa
	2.2 Fluxograma Convencional
	2.3 Pseudocódigo
	2.4 Síntese
	2.4.1 Exercícios A
	3. Tipos de Dados
	3.1 Dados Numéricos
	3.1.1 Dados Numéricos Inteiros
	3.1.2 Dados Numéricos Reais
	3.2 Dados Literais. 
	3.3 Dados Lógicos
	3.4 Síntese
	3.4.1 Exercício B
	4. Variáveis
	4.1 Arquitetura de Memória
	4.2 Tipos de Dados
	4.3 Armazenamento de Dados na Memória
	4.3.1 Armazenamento de Dados do Tipo Literal
	4.3.1.1 Manipulação de caracteres individuais em Literais
	4.3.2 Armazenamento de Dados do Tipo Lógico
	4.3.3 Armazenamento de Dados do Tipo Inteiro
	4.3.4 Armazenamento de Dados do Tipo Real
	4.4 Conceito e Utilidade de Variáveis
	4.5 Definição de Variáveis em Algoritmos
	4.6 Definição de Variáveis em Pascal
	4.7 Mapeamento de Variáveis na Memória
	4.8 Tipos de Dados em Pascal
	4.9 Síntese
	4.9.1 Exercício C
	5. Expressões
	5.1 Operadores
	5.2 Tipos de Expressões
	5.2.1 Expressões Aritméticas
	5.2.2 Expressões Lógicas
	5.2.3 Expressões Literais
	5.3 Avaliação de Expressões
	5.4 Síntese
	5.5 Exercício Resolvido
	5.5.1 Exercícios D
	6. Instruções Primitivas
	6.1 Instrução Primitiva de Atribuição
	6.1.1 Exercícios E
	6.2 Instrução Primitiva de Saída de Dados
	6.3 Instrução Primitiva de Entrada de Dados
	6.4 Síntese
	6.5 Exercícios Resolvidos
	6.5.1 Exercícios F
	7. Controle do Fluxo de Execução
	7.1 Comandos Compostos
	7.2 Estrutura Seqüencial
	7.3 Estruturas de decisão
	7.3.1 Estruturas de decisão do Tipo Se
	7.3.2 Exercícios G 
	7.3.3 Estruturas de decisão do Tipo Escolha
	7.3.4 Exercícios H
	7.4 Estruturas de Repetição
	7.4.1 Laços Contados
	7.4.1.1 Exercícios I 
	7.4.2 Laços Condicionais
	7.4.2.1 Construção Enquanto
	7.4.2.1.1 Exercícios J
	7.4.2.2 Construção Repita
	7.4.2.2.1 Exercícios L
	7.5 Aninhamentos
	7.6 Síntese
	7.6.1 Exercícios M
	7.6.2 Exercícios N
	8. Símbolos Usados em Fluxogramas
	9. Funções pré-definidas do Pascal
	9.1 Descrição das Funções/Rotinas: 
	10. Problemas Resolvidos em Algoritmos, Pascal e C
	10.1 Algoritmo do Triangulo
	10.2 Algoritmo Preco Automóvel
	10.3 Algoritmo Media Valor
	10.4 Algoritmo 3 Menores
	10.5 Algoritmo Media Maior que 4
	10.6 Algoritmo Salário
	10.7 Algoritmo 50 Triangulos
	10.8 Algoritmo Media Menores

Mais conteúdos dessa disciplina