Vous êtes sur la page 1sur 53

Notas de Aula ALGORITMOS E

LÓGICA DE PROGRAMAÇÃO
ÍNDICE
NOTAS DE AULA ALGORITMOS E L ÓGICA DE PROGRAMAÇÃO.........................................................................................1

ÍNDICE...........................................................................................................................................................................................................2

INTRODUÇÃO ...........................................................................................................................................................................................3

ALGORITMOS ...........................................................................................................................................................................................4

LÓGICA ........................................................................................................................................................................................................5

PROGRAMAÇÃO ESTRUTURADA...................................................................................................................................................5
SEQUÊNCIA SIMPLES IF-THEN-ELSE DO-WHILE.......................................................................... 6
PORQUE O PORTUGOL ?.....................................................................................................................................................................6
OUTRAS FERRAMENTAS DE REPRESENTAÇÃO DE ALGORITMOS ..................................................................................7
O PORTUGOL ..........................................................................................................................................................................................10
IDENTIFICADOR.................................................................................................................................................................................. 10
LETRA - 26 LETRAS DO ALFABETO MAIÚSCULAS ................................................................................................................................ 10
DÍGITOS - 0 A 9......................................................................................................................................................................................... 10
VARIÁVEIS............................................................................................................................................................................................ 11
TIPOS DE VARIÁVEIS......................................................................................................................................................................11
ATRIBUIÇÃO......................................................................................................................................................................................... 12
A ← 1........................................................................................................................................................................................................ 12
OPERADORES ....................................................................................................................................................................................... 13
OPERADORES SÃO SÍMBOLOS UTILIZADOS EM EXP RESSÕES QUE CONTÊM VARIÁVEIS, CONSTANTES E FUNÇÕE S. DE ACORDO
COM OS TIPOS DE DADOS DAS VARIÁVEIS E O RESULTADO DA OPERAÇÃO , OS OPERADORES DIVIDEM -SE EM TRÊS TIPOS:...... 13
ARITMÉTICOS ...................................................................................................................................................................................... 13
RELACIONAIS ...................................................................................................................................................................................... 13
LÓGICOS................................................................................................................................................................................................. 14
E.............................................................................................................................................................................................................14
NÃO ......................................................................................................................................................................................................14
DIV E MOD ............................................................................................................................................................................................. 14
PRIORIDADES...................................................................................................................................................................................14
QUALIDADES DE UM BOM ALGORITMO.................................................................................................................................. 19
BLOCOS .................................................................................................................................................................................................. 20
SEQUÊNCIA SIMPLES........................................................................................................................................................................ 20
COMANDOS DE ENTRADA E SAÍDA............................................................................................................................................ 21
FLUXOGRAMA..................................................................................................................................................................................... 23
PORTUGOL ............................................................................................................................................................................................ 23
ALTERNATIVA SIMPLES ................................................................................................................................................................. 25
ALTERNATIVA COMPOSTA............................................................................................................................................................ 26
ANINHAMENTO................................................................................................................................................................................... 27
NEGAÇÃO DOS OPERADORES...................................................................................................................................................28
MULTIPLA ESCOLHA ........................................................................................................................................................................ 30
COMANDOS DE REPETIÇÃO .......................................................................................................................................................... 37
ENQUANTO........................................................................................................................................................................................37
REPITA.................................................................................................................................................................................................39
UMA COMPARAÇÃO ENTRE OS COMANDOS ENQUANTO E REPITA............................................................................40
PARA ....................................................................................................................................................................................................45

2
INTRODUÇÃO
A arte e ciência de programar computadores é algo fascinante. Uma das melhores definições desta
atividade pode ser considerada - “programar é emprestar um pouco de nossa inteligência ao
computador”. Quando o mesmo trabalha, é como se a inteligência emprestada do programador
estivesse trabalhando.

A tecnologia de fabricação de computadores tem evoluído de maneira muito rápida nos últimos
tempos. A programação de computadores nem tanto, embora também tenha tido alguns progressos
importantes.

Existem razões para esta diferença. A construção de hardware (equipamento) é engenharia. Tudo pode
ser matematicamente provado, produzido em série, rejeitado por amostragem, e, a partir de um original,
sua cópia pode ser vendida aos milh ões. Com o software é quase tudo ao contrário. É mais arte do que
engenharia, até hoje não se pode comprovar matematicamente a correção de código, cada necessidade
demanda a construção de modelos específicos, que só se aplicam naquele momento (no espaço e no
tempo). Para nós, seres humanos, é uma vantagem. Pois, enquanto a produção de hardware é (ou pode
ser) em grande parte robotizada, a produção de software ainda exige um bom cérebro por trás.

As restrições que ainda existem sobre o hardware impedem a programação dos computadores em
linguagem natural, embora existam estudos nesta área. Hoje ainda não é possível dialogar com um
computador como se fala com uma pessoa medianamente inteligente. Os computadores ainda não
conseguem tal proeza.

Para programar computadores, portanto, precisamos aprender uma linguagem de programação. Estas
linguagens são chamadas artificiais justamente por terem sido inventadas para esta finalidade, ao
contrário das naturais que surgiram para comunicação de seres humanos. Como se destinam a serem
entendidas por máquinas, tais linguagens são bastante pobres em termos de expressões, quantidade de
termos e facilidades de construção de frases.

Entretanto, quando os primeiros computadores foram construídos a única linguagem entendida por eles
era a binária. Sequências intermináveis de uns e zeros, algo assim como
00000000001010101111110011111000101010100001111010100011. Chamou-se a isto, mais tarde,
linguagem de primeira geração.

A seguir, o primeiro melhoramento: o assembler ou montador, que era um programa capaz de entender
instruções escritas em uma linguagem um pouco mais humana, e traduzir cada uma destas instruções
em sua expressão binária correspondente. Junto com este programa criou-se a primeira linguagem: o
assembler, até hoje utilizado, ainda que muito raramente e que simboliza a segunda geração de
linguagens. Programar em assembler exige muito conhecimento e paciência, a máquina precisa ser
conhecida em inúmeros detalhes de construção, os programas são longos e difíceis, pr incipalmente sua
manutenção. Mas esta é a linguagem mais eficiente do ponto de vista dos consumos dos recursos de
máquina, isto é, ela gera programas velozes e pequenos.

Depois, vieram as linguagens de terceira geração: a primeira foi o FORTRAN, depois COBOL, PL/I,
ALGOL, PASCAL, C e outras menos votadas: BASIC, ADA, APL. Há um distanciamento do
programador em relação à máquina, e uma aproximação do mesmo em relação ao problema a resolver.

3
Estas linguagens são mais fáceis de aprender e embora gerem programas maiores e mais lentos,
aumentam em muito a produtividade humana de escrever código de programação.

As linguagens de quarta geração tem as seguintes características: facilidade para criar e gerir banco de
dados; são implementadas de forma interpretada, são consideradas amigáveis (user friendly), geram
relatórios e entrada de dados de forma automática e tem facilidade de pesquisas. Um exemplo é a
ferramenta ACCESS. Existem, também, as linguagens voltadas para objetos como VISUAL BASIC,
VISUAL C entre outras. E a evolução continua...

Antes de iniciar o estudo de programação, é necessário considerar que um computador nada mais é do
que uma ferramenta utilizada para solucionar problemas que envolvam a manipulação de informações,
sendo que estas informações classificam-se a grosso modo em dois tipos básicos: dados e instruções
(ou comandos).

Os dados são representados pelas informações a serem tratadas ou processadas por um computador As
instruções ou comandos são representadas pelo conjunto de palavras-chave (ou vocabulário) de uma
determinada linguagem de programação, que tem por finalidade comandar em um computador o seu
funcionamento e a forma como os dados armazenados deverão ser tratados.

Para se criar um programa que seja executável dentro de um computador, deve-se ter em mente três
pontos de trabalho: a entrada de dados, o seu processamento e a saída dos mesmos. Sendo assim, todo
programa estará trabalhando com estes três conceitos. Se os dados forem entrados de forma errada,
serão processados de forma errada e consequentemente, resultarão em respostas erradas. Desta forma,
dizer a alguém que foi erro do computador é ser um tanto “medíocre”, se houve algum erro, é porque
foi causado por falha humana. Realmente é impossível um computador errar por vontade própria, pois
vontade é uma coisa que os computadores não tem.

ALGORITMOS
Segundo mestre Aurélio, algoritmo é “processo de cálculo, ou de resolução de um grupo de problemas
semelhantes, em que se estipula, com generalidade e sem restrições, regras formais para a obtenção do
resultado ou da solução do problema”.

Do ponto de vista da informática, algoritmos é a regra de solução de um problema, isto é, surgida uma
necessidade buscar-se-á uma solução, ou construir-se-á um algoritmo capaz de solucionar o problema.

Já um programa de computador, segundo Wirth, “é um formulação concreta de algoritmos abstratos,


baseados em representações e estruturas específicas de dados”. Isto é:

PROGRAMA = ALGORITMOS + ESTRUTURAS DE DADOS

Outra definição de algoritmo s, esta dos autores Angelo Guimarães e Newton Lages: “algoritmo é a
descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e
finito de ações primitivas, das quais damos por certo que elas podem ser executadas.”

O conceito de algoritmo deve ser entendido, para sua correta compreensão, em seus dois aspectos, a
quem chamaremos estático e temporal. Na visão estática, um algoritmo é um conjunto de ordens,
condições, testes e verificações. No seu aspecto temporal, o algoritmo passa a ser vivo, pois atual sobre
um conjunto de dados de entrada, para gerar os correspondentes dados de saída.

4
Tais características não podem ser separadas, elas estão intrinsecamente ligadas. A dificuldade em
fazer bons algoritmos é ter em mente, enquanto se escreve o algoritmo (aspecto estático) o que ele vai
fazer com seus dados (aspecto temporal).

LÓGICA
Lógica é definida basicamente como sendo o estudo das leis do raciocínio e do modo de aplicá-las
corretamente na demonstração da verdade. Chamamos de algoritmo lógico aquele algoritmo cujas
instruções estão dispostas ordenadamente e de maneira compreensível por qualquer pessoa que possua
conhecimento básico sobre o assunto. Isto é, um algoritmo deve ser facilmente entendido, sem que seja
necessária uma grande perda de tempo para a tradução da idéia contida no mesmo. Um algoritmo
lógico deve ser, também, formado apenas pelo número mínimo de instruções necessárias para a
resolução do problema referido.

Cada pessoa analisa um problema de uma forma diferente, há uma certa tendência em complicar a sua
solução. Sendo assim, deve-se pensar muito na solução desejada, analisando todas as possibilidades, ao
invés de utilizar a primeira solução que vier à cabeça, sob pena de complicar o algoritmo de tal modo,
que quando for necessária uma modificação, gastar-se-á mais tempo tentando entendê- lo do que
criando-o novamente com as alterações desejadas. Porém, o problema da complexidade não está
presente apenas na elaboração do algoritmo, mas também na sua codificação em uma determinada
linguagem de programação.

PROGRAMAÇÃO ESTRUTURADA
O termo programação estruturada nasceu nos fins da década de 60, quando Edsger Dijkstra escreveu
um artigo publicado pela Communications of the ACM, cujo título é “O comando GOTO é prejudicial”.
Dijkstra observou que a qualidade dos programadores decai em função do número de GOTO’s usados
em seus programas. Segundo ele, “comandos GOTO’s tendem a criar caminhos de lógica confusos e
programas pouco claros”. A sua recomendação foi de que o comando em questão fosse excluído das
linguagens de programação de alto nível.

Nessa época também, (1966) dois professores italianos G. Jacopini e C. Bohm, provaram
matematicamente que qualquer lógica de programação poderia ser derivada de três tipos básicos de
procedimentos, como se vê na figura a seguir.

5
AS 3 FERRAMENTAS DA PROGRAMAÇÃO ESTRUTURADA

SEQUÊNCIA SIMPLES IF-THEN-ELSE DO-WHILE

A importância desta descoberta para o software teve tanto impacto quanto a de que qualquer forma
lógica de hardware pode ser construída pelas combinações das portas AND, OR e NOT.

A programação estruturada pode ser definida basicamente como sendo uma técnica de programação, na
qual a construção de um programa é feita com base nas estruturas simples de controle definidas acima.
A rigidez imposta por estas estruturas é um fator importante para a compreensão do programa, pois
uma vez que não existem comandos de desvios (GOTO), o programador é obrigado a utilizar uma
lógica coerente que se adapte às estruturas. Desse modo o programa torna-se inteligente, já que não é
possível criar códigos que abram margem para uma falta de ordenação na lógica, códigos absurdos,
programas poluídos e de difícil compreensão.

Com a utilização da programação estruturada um programa tem, obrigatoriamente, início, meio e fim,
pois não existem desvios, as estruturas devem ser dispostas numa ordem tal que, chegando ao final do
código, um processamento completo tenha sido executado. Como se fosse uma caixa preta, com
somente uma entrada e uma saída.

PORQUE O PORTUGOL ?
Portugol é uma técnica narrativa denominada pseudo-código, também conhecida como português
estruturado. Esta técnica de algoritmização é baseada em uma PDL – Program Design Language
(Linguagem de Projeto de Programação). A forma original de escrita é conhecida como inglês
estruturado, muito parecida com a notação da linguagem Pascal. A PDL é usada como referência
genérica para uma linguagem de projeto de programação, tendo como finalidade mostrar uma notação
para elaborações de algoritmos, os quais serão utilizados na definição, criação e desenvolvimento de
uma linguagem computacional (Pascal, C, Delphi, Visual-Objects, Clipper) e sua documentação. A

6
diferença entre uma linguagem de programação de alto nível utilizada em computação e uma PDL, é
que esta não pode ser compilada em um computador.

Existem inúmeras versões de Portugol, cada professor tem a sua, assim como cada empresa pode
definir um pseudo-código. É importante salientar que a sintaxe e a semântica da construção de Portugol
são arbitrados por alguém, segundo seus critérios, mas UMA VEZ ESTABELECIDO UM PADRÃO,
ELE PRECISA SER RELIGIOSAMENTE SEGUIDO.

Esta restrição tem duas vertentes: - há que haver um mínimo de concordância para que outras pessoas
possam ler e entender o que escrevermos.
- uma das principais características de um bom programador é a
disciplina intelectual.

O português, como qualquer outra linguagem natural, tem inúmeras desvantagens. Não é entendido
pela máquina, sua tradução é bastante complexa, é ambíguo podendo gerar interpretações errôneas, e é
muito extenso. Logo, não é um linguajar adequado para expressarmos algoritmos. Devemos lembrar
sempre que a margem de interpretação do computador é sempre ZERO.

Já um linguagem de programação, mesmo que de alto nível, como o Pascal ou o C, exigem um


conhecimento da máquina que ainda não temos. Também é importante salientar que idealmente
falando, não é uma boa política enfrentar dois problemas interligados ao mesmo tempo. Isto é, não
convém misturar dificuldades lógicas com dificuldades da linguagem de programação. Já dizia Dijkstra
“(devemos) reconhecer que temos uma cabeça pequena, e que é melhor tratar de conviver com ela e
respeitar suas limitações” e que “a regra áurea da programação estruturada é DIVIDIR PARA
REINAR.”

Nossos programas em Portugol vão deixar de lado inúmeras tarefas que são imprescindíveis para o
programa rodar em um computador, tais como: instruções de ambientação na compilação de
programas, descrições de operações de entrada/saída complexas, pouca ou nenhuma preparação de
contadores e chaves, etc.

Para tanto, existe uma disciplina anexa a esta, onde vai se aprender a linguagem de programação. Neste
momento, então, a preocupação passa a ser a máquina e não mais a lógica do algoritmo que já deve
estar consolidado.

OUTRAS FERRAMENTAS DE REPRESENTAÇÃO DE ALGORITMOS

Além do Portugol existem outras formas de representar algoritmos, podendo-se citar duas outras
linguagens: fluxogramas e diagramas de Chapin.

Os fluxogramas tem importância histórica em processamento de dados, pois foi a primeira


representação de programas. Ela foi desenvolvida pelos profissionais de análise de sistemas e por
alguns profissionais de Organização, Sistemas e Métodos. Tem como finalidade descrever fluxos,
manual ou mecânico, especificando os suportes usados para os dados e as informações. Usa símbolos
convencionais, permitindo poucas variações. Esta ferramenta perdeu sua condição de única ferramenta
em uso, entre outras razões, pelas seguintes:
- permite a construção de algoritmos não estruturados, logo não servem para o contexto da
programação estruturada;
- exigem capricho, demandando muito trabalho para serem feitos e mantidos;
- como só se escreve dentro dos quadrinhos, é necessário muito papel para definir um algoritmo
completo, além de dificultar o manuseio;

7
- mesmo com o advento de programas para trabalhar fluxograma, como Flowchart, Autoflow e outros,
eles não são muito práticos para este trabalho.

Outra possibilidade de representação é através dos diagramas de Chapin ou estructogramas que foram
desenvolvidos por Nassi e Schneiderman e ampliado por Ned Chapin, os quais resolveram substituir o
fluxograma tradicional por um diagrama de quadros que permite apresentar uma visão hierárquica e
estruturada da lógica do programa. A grande vantagem de usar este tipo de diagrama é a representação
das estruturas que tem um ponto de entrada e um ponto de saída e portanto, são compostos pelas
estruturas básicas de controle da programação estruturada. Enquanto é difícil mostrar o embutimento e
a recursividade com o fluxograma tradicional, torna -se mais simples mostrá- los com o diagrama de
Chapin, bem como, codificá- los em qualquer linguagem de programação estruturada. Porém, alguns
autores consideram esta ferramenta um pseudo-código como o Portugol, apenas escrito de maneira
diferente, assim, não será tratada esta representação aqui.

Para representar as estruturas de comando de forma completa, elas serão apresentadas no formato
Portugol e Fluxograma.

8
Exemplo: Definir um algoritmo que leia dois valores A e B e imprimia o produto entre eles se A for
par e imprima o somatório deles se A for impar.

FLUXOGRAMA DIAGRAMA DE CHAPIN PORTUGOL

inicio
leia A inicio
A,B,C : inteiro;
leia B leia (A);
leia (B);
leia A A é par ? se A mod 2 = 0
então C ← A * B;
senão C ← A + B;
V F fimse;
leia B imprima ( C );
C=A*B C=A+B
fim.
imprima C
V F
A é par

C = A* B C= A + B

imprima C

fim

9
O PORTUGOL
A seguir as principais regras de sintaxe e de construção da linguagem Portugol:

IDENTIFICADOR
O elemento básico da linguagem é o identificador. Sua construção é dada pelo diagrama a seguir:

identificador letra

letra

dígito

Considerando-se:
Letra - 26 letras do alfabeto maiúsculas
Dígitos - 0 a 9

Deve-se atentar que o branco não faz parte do rol de caracteres válidos, o que faz com que o
identificador não possa ser constituído de mais de uma palavra. Pode-se utilizar, neste caso, o separador
“_ “ , chamado sublinha ou underscore.

Exemplos válidos : NOME


SOMA_TERMOS
RAIZ1
X234
SALDO01

Exemplos não válidos : SALDO DEVEDOR


123SALDO

Regras de bom senso para batizar o identificador:


1. cada identificador deve ter seu nome o mais próximo possível de sua função;
2. o identificador não deve ser tão pequeno que fique impossível identificá-lo pelo nome, nem tão
longo que seja cansativo de escrevê- lo
3. padronizar os identificadores, em algoritmos, sempre em letras maiúsculas para facilitar a análise do
mesmo. Ainda que as linguagens de programação façam diferenciação entre letras maiúsculas e
minúsculas.

10
VARIÁVEIS
Variável é algo que pode ser alterado, isto é, não é constante. Variáveis de memória são endereços da
memória RAM (Randomic Access Memory) do comp utador, onde são armazenados temporariamente os
dados utilizados por um programa durante seu processamento, e que, como diz o próprio nome, podem
ter seus conteúdos alterados durante o processamento do programa.

Para se utilizar o conceito de variável, imagine que a memória de um computador é um grande arquivo
com várias gavetas, onde cada gaveta pode apenas armazenar um único valor por vez , seja ele inteiro,
real, caracter ou lógico. Se é um grande arquivo com várias gavetas há que se concordar que é
necessário identificar com um nome a gaveta que se pretende utilizar. O nome de uma variável é
utilizado para sua identificação e posterior uso dentro de um programa, desse modo não é necessário
saber a posição de cada byte (informação) dentro da memória do computador

Quando é feita a definição de variáveis no algoritmo, necessita-se indicar o nome que será dado a
variável (identificador) e qual o tipo de informação que ela irá conter. Dependendo do tipo de
informação será designado um espaço maior ou menor de memória onde ocorrerá o armazenamento.

TIPOS DE VARIÁVEIS
Existem quatro tipos básicos de variáveis em Portugol: INTEIRO, REAL, CARACTER E LÓGICO.
Estes tipos também são conhecidos como tipos primitivos de dados.

O tipo de dado INTEIRO é uma variável numérica que pode conter números inteiros, positivos ou
negativos.

O tipo de dado REAL é outra variável numérica que pode conter qualquer número real, isto é, inteiro,
fracionário, positivo ou negativo.

Tipo de dado CARACTER é uma variável que pode armazenar em seu conteúdo todas as letras do
alfabeto, todos os algarismos e todos os caracteres especiais (& # @ ? *, etc). Uma variável do tipo
caracter não pode ser utilizada em expressões aritméticas, mesmo que contenha apenas algarismos.

São caracterizados como tipos LÓGICOS os dados com valores VERDADEIRO e FALSO sendo que
este tipo de dado poderá representar apenas um dos dois valores por vez. Ele é chamado por alguns de
tipo booleano, devido à contribuição do filósofo e matemático George Boole na área da lógica
matemática.

O tipo caracter traz consigo uma pequena dificuldade, que é a necessidade de estabelecer qual o seu
tamanho máximo, em número de caracteres. Esta atitude é necessária para informar a quem lê o
algoritmo quanto de espaço reservar para conter esta variável. Os outros tipos de variáveis tem tamanho
pré-determinados e fixos.

11
Uma variável quando é definida ganha um tipo de dado, e posterior referências de valor a esta variável
deverão respeitar seu tipo de dado original.

A forma de definir variáveis dentro de um algoritmo é:

identificador : ;
inteiro

real

caracter

lógico

ATRIBUIÇÃO
O comando de atribuição é aquele que permite colocar valores nas variáveis ou alterar seu conteúdo,
obedecendo o tipo de dado definido para ela. Para tanto usaremos o símbolo ← . Sua sintaxe é:

identificador ç expressão ;

O novo valor atribuído à variável é feito durante o processamento do programa utilizado e pode ser
uma constante, o resultado de uma expressão ou o valor de outra variável.

Exemplo:
A←1
B← 1+2

É importante notar que:


- a expressão que se encontra do lado direito da atribuição deve ser compatível com o tipo de dado
definido para a variável;
- na atribuição de variável inteira, a expressão deverá ser uma expressão inteira, isto é, sem parte
fracionária;

12
- na atribuição de variáveis do tipo real, a expressão deverá ser numérica, sem nenhuma outra restrição;
- na atribuição de variáveis caracter o valor deverá estar envolvido por aspas “. Ele nunca poderá ter
um tamanho maior do que aquele estabelecido para a variável. Se isto acontecer, o valor será truncado.
- na atribuição de variáveis lógicas deveremos usar as palavras VERDADEIRO e FALSO, ou quando
não houver risco de confusão, podemos usar as abreviaturas V e F.

Exemplo:
A ← “1 “ ; inteiro ou caracter
B ← “V” ; caracter ou lógico

OPERADORES

Operadores são símbolos utilizados em expressões que contêm variáveis, constantes e funções. De
acordo com os tipos de dados das variáveis e o resultado da operação, os operadores dividem-se em três
tipos:
- aritméticos
- relacionais
- lógicos

ARITMÉTICOS
São aqueles que atuam apenas sobre constantes, variáveis e funções numéricas, gerando um resultado
numérico em uma expressão. São eles:

+ adição
- subtração binária
* multiplicação
/ divisão
** exponenciação
- menos unário

Pode-se também utilizar as funções matemáticas usuais e as conhecidas da linguagem de programação,


como:
sen(x), cos(x), abs(x), int(x), frac(x), log(x), sqrt(x)

RELACIONAIS
São aqueles que realizam uma comparação entre duas expressões e geram resultados lógicos, isto é
Verdadeiro ou Falso, são eles:

= igual
<> ou ≠ diferente
> maior que
< menor que
>= ou ≥ maior ou igual
<= ou ≤ menor ou igual

13
LÓGICOS
São aqueles que geram resultados lógicos através da comparação entre duas expressões lógicas, são
três:

conjunção E é aquele que exige que todos os termos da expressão sejam


verdadeiros para que a expressão inteira seja verdadeira.
disjunção OU é aquele que exige que apenas um dos termos da expressão
seja verdadeiro para que a expressão inteira seja veradeira.
negação NÃO é aquele que inverte ou nega o valor lógico de um elemento.

Os operadores lógicos tem seu resultado baseado na Tabela Verdade, eles operam sobre variáveis
lógicas (V ou F) e tem como resultado valores lógicos (V ou F).

OU V F E V F NÃO V F
V V V V V F F V
F V F F F F

DIV E MOD
São duas importantes funções matemáticas que atuam sobre números inteiros e dão como resultado
também números inteiros.
Div - resultado inteiro de uma divisão inteira
Mod - resto inteiro de uma divisão inteira

PRIORIDADES
Na execução de um comando complexo, podemos encontrar duas ou mais operações numéricas uma ao
lado da outra, e neste caso devemos seguir regras de prioridades de operadores para sabermos qual será
executado primeiro. No Portugol as prioridades são:

PRIORIDADE COMANDO
1ª parênteses
2ª funções
3ª menos unário
4ª **
5ª *e/
6ª +e-
7ª relacionais
8ª lógicos NÃO
9ª E
10ª OU

Se houverem duas operações de mesma prioridade, as mesmas, serão realizadas da esquerda para a
direita, como na matemática.

14
SUGESTÕES PARA MAIOR CLAREZA DAS EXPRESSÕES
1. Definir linhas pequenas gerando maior clareza e auto-documentação;
2. Quebrar um comando complexo em diversos mais simples;
3. Usar e abusar de parênteses, mesmo que redundantes, assim não precisamos decorar as regras de
prioridade.

15
RESUMO
Identificador (nome de variável) Operadores aritméticos OU : F somente quando ambos os operandos
- Sempre maiúsculo forem F
- Começa com letra + adição
- Continua com letra / dígitos - subtração V OU V e’ V
- Tamanho ilimitado * multiplicação F OU V e’ V
Ex.: MEDIA, SALD34, SAL_CONT / divisão fracionária V OU F e’ V
- unário: oposto F OU F e’ F
Tipos de variáveis sen (x): seno de x radianos
cos (x): cosseno de x radianos NÃO : é a negação
Inteiro: números inteiros, positivos / abs (x): valor absoluto x NÃO V é F
negativos int (x): parte inteira de x NÃO F é V
Real: números inteiros / fracionários, frac (x): parte fracionária de x
positivos/ negativos de qualquer magnitude log (x): logaritmo de x Prioridade das Operações
Caracter: sequência de caracteres 1. Parênteses
Lógico: VERDADEIRO ou FALSO n div m: quociente da divisão inteira de n por 2. Funções
m 3. Menos unário (oposto)
Definição: 4. Potenciação
Ident[ , ident]: inteiro; n mod m: resto inteiro da divisão inteira de n 5. Multiplicação e divisão
: real; por m 6. Adição e subtração
: caracter [tam]; 7. Comparações
: lógico; Operadores Lógicos > Maior
< Menor
Comando de atribuição E : V somente quando ambos os operandos são V = Igual
≥ Maior ou igual
ident ← expressão; V E VéV ≤ Menor ou igual
V E FéF <> Diferente
Expressão pode ser somente valor. F E VéF 8. Operadores lógicos
Deve ser compatível com o tipo da variável. F E FéF E
Se tipo for caracter deve ser entre aspas e OU
com tamanho compatível. NÃO
Se for tipo lógico somente V ou F. 9. Operações de mesma prioridade são
resolvidas da direita para a esquerda.

16
EXERCÍCIOS

1. Informe o valor esperado para a variável VAR1

VAR1 ← (1 + (2 * (3 + 1) / 2 )) - 2
VAR1 ← 3 ** 3
VAR1 ← 2 * int(1,999)
VAR1 ← abs( - (3 - 4))
VAR1 ← int (1,5) - frac(1,.5)
VAR1 ← 2 / (2 * 3)

2. Quanto é 400 MOD 51

a. 30 MOD 7
b. (5 MOD 4) + (22 DIV 10) + (3 MOD 2)
c. 4376 MOD 10
d. 4376 MOD 100
e. 4376 MOD 1000
f. 4376 MOD 10000

3. Informe qual o valor da variável VAR2

VAR2 ← VERDADEIRO
VAR2 ← NAO FALSO
VAR2 ← NAO NAO VERDADEIRO
VAR2 ← FALSO OU FALSO
VAR2 ← VERDADEIRO E (NAO VERDADEIRO)
VAR2 ← (NAO FALSO) OU (NAO VERDADEIRO)
VAR2 ← (FALSO OU VERDADEIRO) E (NAO VERDADEIRO)
VAR2 ← FALSO E FALSO
VAR2 ← VERDADEIRO E VERDADEIRO

4. Informe qual o valor final para VAR3

VAR3 ← (3 ≥ 2) OU (1 = 3)
VAR3 ← (1 + 1) = (3 - 1)
VAR3 ← (int (1,5 * 4) > 6) E (1 <> 2)

5. Informe qual o valor para VAR4

VAR4 ← ( frac(0,999) - 1) > 0


VAR4 ← 1=2
VAR4 ← 1+2=2
VAR4 ← 0.5 ≥ 2.5 - int(2,900)
VAR4 ← 3>1+1
VAR4 ← 1+3*4
VAR4 ← 2 ** 3 * 2 + 1
VAR4 ← 1*2*3*4*0+1
VAR4 ← 33 > (32 + int(2,45) - frac(0,5))
VAR4 ← (4 ** (2 / 2 ** 2) ≥ 3,5) E ( 1 = 3 ** 0)

6. Assinalar com um X os identificadores válidos:

17
( ) VALOR ( ) NOMEMP ( ) MARIA
( ) "NOTA" ( ) SALA215 ( ) B248
( ) X2 ( ) AH! ( ) KM/H
( ) SAL_LIQ ( ) M{A} ( ) XYZ
( )3X4 ( ) A1B2C3 ( ) NOTA*DO*ALUNO
( ) "NOME"

7. Considerando P = 3; Q = 4; R = 12 e S = 45; NOME = "MIRIAM"; PROFISSAO = "MEDICO", qual o


valor de RESP em cada uma das expressões abaixo:

a. RESP ← 100 * (Q div P ) + R


b. RES P ← (P + 1 >= SQRT(Q)) e NOME <> "ANA" e PROFISSAO = "MEDICO"
c. RESP ← P * ( R mod 5) - Q / 2
d. RESP ← (S mod (P + 1)) - Q * R
e. RESP ← PROFISSAO = "MEDICO" ou (Q mod P) = 0

8. Sendo: SOMA, NUM, X variáveis numéricas


NOME, COR, DIA variáveis caracter e
TESTE, COD, TUDO variáveis lógicas,
assinalar os comandos considerados inválidos:

( ) NOME ← 5; ( ) X ← NOME >= COD;


( ) SOMA ← NUM + 2 * X; ( ) SOMA + 2 ← X ** 2 - SQRT( NUM);
( ) TESTE ← COD ou X ** 2 <> SOMA; ( ) DIA ← "SEGUNDA";
( ) TUDO ← SOMA; ( ) NUM ← "*ABC*";
( ) COR ← "PRETO" - SQRT(X) ( ) X←X + 1

9. Considerando: A = 3; B = 16, NOME = "ANA", PROFISSAO = "ADVOGADO", TESTE= F


avaliar as expressões abaixo e dar sua resposta:

a. SOL ← A + 1 >= SQRT(B) ou NOME <> "ANA";


b. SOL ← não TESTE = V e (A + 5 = B) ou não PROFISSAO = "MEDICO";
c. SOL ← PROFISSAO = "MEDICO" ou TESTE = F;
d. SOL ← A mod 2 + 25 div B;
e. SOL ← A + B * 2 > 10

10. Informar o valor da variável R, em cada item, após a execução da seguinte sequência de operações:
a) R ← 3,0 * 6;
b) X ← 2,0;
Y ← 3,0;
R ← X ** Y – X;
c) R ← 4;
X ← 2;
R ← R * X;

RESPOSTA a) b) c)

11. Informar o valor da variável R, em cada item, após a execução da seguinte sequência de operações:
a) R ← 1 * 1,78 / 3;
b) B ← 2;
A ← 40 – B ** 2;
R ← int (3,1416) + A * 5;
c) R ← 9 – 18;
R ← abs ( -6 + int(3,4)) – R;

18
QUALIDADES DE UM BOM ALGORITMO

1. Clareza – o algoritmo é uma ferramenta de entendimento e solução de um problema,


deve portanto, ser o mais claro possível. O autor deve preocupar-se constantemente se o
que está pensando está visível no que está escrevendo;

2. Impessoalidade - não usar macetes, regras pessoais e nomes que só tem sentido para o
autor, muitas vezes quem vai examinar, depurar, corrigir, alterar o algoritmo não é seu
próprio autor. Neste ponto os CPD’s bem organizados definem um conjunto de normas de
codificação e de elaboração de algoritmos;

3. Simplicidade – o algoritmo deve ter por princípio a simplicidade, logo transformar algo
complicado em soluções simples, parece ser a diferença entre programadores comuns e
grandes programadores;

4. Não reinvenção da roda – fazer uso do conceito de biblioteca de algoritmos. O


programador não deve esquecer de que um algoritmo novo custa caro para ser feito, e muito
mais caro ainda para ser depurado, então, caso exista um pronto este deve ser utilizado;

5. Capricho – a principal função de um algoritmo é transmitir a solução de um problema


para outra pessoa. Desta forma a letra clara, uso de endentação, nomes bem atribuídos,
papel limpo e sem borrões deve ser de uso constante;

6. Documentação – nem sempre o Portugol é bastante claro, além do que ele informa o que
é feito e não porque é feito. Assim deve-se lançar mão de comentários sempre que
necessário. O símbolo de comentário em algoritmo é { }, isto é, tudo que estiver entre as
chaves é um comentário.

19
BLOCOS
Um bloco é um conjunto completo de comandos para resolver um determinado problema.
Graficamente falando um bloco sempre começa pela palavra INICIO e termina pela
palavra FIM. Entre estes dois limites existem duas partes:
definição de variáveis – que serve para definir as variáveis que serão utilizadas no
bloco;
comandos – que define quais os comandos que fazem parte deste bloco.

FLUXOGRAMA PORTUGOL

inicio

variáveis INICIO
<declaração das variáveis>;
<comandos>;
FIM.
comandos

fim

Exemplo:
calcular a área de um retângulo

inicio
A, B, AREA : real;
AREA ← A * B;
fim.

SEQUÊNCIA SIMPLES
Trata-se de um conjunto de comandos simples, que seguem um ao outro e que são
executados na ordem em que aparecem. Exemplo:

A ← 10;
B ← A + 5;
X ← 1 + 2;

20
Cada comando simples é escrito em uma linha e sempre termina por um ponto e vírgula ( ;
), o que é considerado uma instrução sequencial. Dentro de uma sequência simples de
comandos a entrada é sempre pelo primeiro comando e a saída sempre pelo último
comando.

FLUXOGRAMA PORTUGOL

.....

comando 1 < comando 1 >;

< comando 2 >;

........
comando2

< comando n >;

comando n
....

Exemplo:
calcular a área de um triângulo:

inicio
B, H, AREA : real;
leia (B); {base}
leia (H); {altura}
AREA ← ( B * H ) /2; {calcula a área}
imprima (AREA);
fim.

COMANDOS DE ENTRADA E SAÍDA


A maioria dos algoritmos que escrevemos necessita receber dados externos, e em algum
momento necessitará comunicar respostas, para tanto usamos os comandos de entrada e
saída. Para resolver estes dois problemas existem os chamados comandos de entrada/saída
(E/S).

Desprezando as complexidades inerentes a um processo de transferência de dados em um


computador real, uma vez que cada linguagem trata os dispositivos de E/S de forma

21
diferenciada e o algoritmo deve ser capaz de ser traduzido para qualquer linguagem de
programação, os comandos que serão usados são dois: leia e imprima.

O comando LEIA significa uma entrada de dados, realizada através de um dispositivo


externos de entrada de dados, para o algoritmo, isto é, o valor não é gerado por um
comando ou expressão do algoritmo utilizado. O dispositivo de entrada utilizado, isto é, se
os dados entrarão via teclado, mouse, leitura de disco ou linha telefônica, não irá interferir
no algoritmo.

Da mesma forma, para a saída dos dados usaremos o comando IMPRIMA, e também não
importa, à nível de algoritmo, para qual dispositivo externo de saída de dados os mesmos
serão enviados: terminal de vídeo, impressora, plotter, gravado em disco ou linha
telefônica. A saída de dados consiste na exibição do conteúdo de uma variável ou
constante, do resultado de uma expressão ou de uma mensagem.

A sintaxe destes comandos é:


Entrada de dados:
leia (<identificador 1>, <identificador 2>, ..., <identificador n>) ;

Saída de dados:
imprima (<identificador 1>, <identificador 2>, ..., <identificador n>);
{conteúdo do identificador}
imprima (<expressão numérica>); {resultado da expressão numérica}
imprima( “cadeia de caracteres”); {caracteres existentes entre os aspas}

Obs: - em geral, dados que serão lidos não precisam ser inicializados;
- os valores a serem impressos devem ser inicializados e/ou calculados antes da
impressão.

Exemplo:
inicio
VALOR1, VALOR2 : inteiro;
leia (VALOR1);
VALOR2 ← VALOR1 * 2;
imprima (“o valor primeiro é “, VALOR1);
imprima (“o valor segundo é”, VALOR2);
imprima (“a soma dos dois é “, VALOR1 + VALOR2);
fim.

22
FLUXOGRAMA PORTUGOL

LEIA (var 1, ..., var n);


leia var1, ...,
var n

IMPRIMA (var 1, ... , var n);

ou
imprima var
1, ... var n
IMPRIMA (“mensagem”, var );

EXERCÍCIOS

1. Fazer um algoritmo que calcule o volume de uma esfera em função do raio R.


V = 4 /3 π R**3

2. Criar algoritmos em Portugol para fazer as seguintes conversões:


a) Ler uma temperatura dada na escala Celsius e imprimir a equivalente em Fahrenheit
(F = 9/5 * C + 32)
b) Ler uma quantidade de chuva em polegadas e imprimir a equivalente em milímetros
(25,4 mm = 1 polegada)
c) Ler um valor referente ao resultado de salto em altura, relatado em metros, e converter para pés e
polegadas (1 pé = 12 polegadas e 1 metro = 39,37 polegadas)
d) Ler um tempo para uma corrida de 100 metros e calcular seu tempo para 100 jardas, supor que o atleta
corra a uma velocidade constante ( jarda = 0,9144 metros)

3. O custo ao consumidor de um carro novo é a soma do custo de fábrica com a percentagem do distribuidor e
dos impostos (aplicados ao custo da fábrica). Supondo que a percentagem do distribuidor seja de 12% e os
impostos de 45%, preparar um algoritmo portugol para ler o custo de fábrica do carro e imprimir o custo ao
consumidor.

4. O cardápio de uma casa de hamburger é dado abaixo. Preparar um algoritmo portugol para ler a quantidade
de cada item comprado e calcular a conta ao final.

Mona’s Burgers

Hamburger (R$ 2,50)


Cheeseburger (R$ 3,30)
Batata Frita (R$ 1,50)
Refrigerante (R$ 0,60)
Milkshake (R$ 1,70)

O algoritmo deve ter uma variável para cada item para ler a quantidade e multiplicar pelo preço do respectivo
item, somando tudo ao final, incluindo, também, os 10% dos serviços.

5. Preparar um algoritmo portugol para ler o comprimento dos 3 lados de um triângulo (S1, S2 e S3) e
calcular a área do triângulo de acordo com a fórmula.

23
3
Area = √ T ( T - S1) ( T - S2) ( T - S3)

onde T = ( S1 + S2 + S3) / 2

6. Preparar um algoritmo que leia os valores referentes aos 2 catetos de um triângulo retângulo e calcular o
valor de sua hipotenusa.

7. Preparar um algoritmo que leia o tempo e distância percorridos por um veículo e calcule sua velocidade
média.

8. Preparar um algoritmo que leia as 4 notas bimestrais de um aluno e calcule sua média anual.

9. Preparar um algoritmo que leia o mês e ano de nascimento de um indivíduo e calcule sua idade em meses
com base na data atual.

10. Preparar um algoritmo que leia a hora e minuto de início de uma aula e imprima a hora e minuto de
término desta aula, sabendo que a aula é de 50 minutos.

11. Preparar um algoritmo que leia 5 valores e imprima a média aritmética entre eles.

12. Dado um número inteiro de 3 algarismos, inverter a ordem de seus algarismos. Os três algarismos do
número dado são diferentes de zero.

13. Dado um número de 3 algarismos construir outro número de 4 algarismos de acordo com a seguinte regra:
a) os 3 primeiros algarismo, contados da esquerda para a direita são iguais aos do número dado;
b) o quarto algarismo é um dígito de controle calculado da seguinte forma: primeiro algarismo + segundo
algarismo * 3 + terceiro algarismo * 5; o dígito de controle é igual ao resto da divisão dessa soma por 7.

14. Dadas duas frações ordinárias a/b e c/d, determinar a sua soma e o seu produto.

15. Dado um número inteiro que representa um número binário de cinco dígitos, determinar o seu
equivalente decimal.

16. Dados o primeiro termo e a razão de uma progressão aritmética, determinar a soma de seus primeiros
cinco termos.

17. Dado um número inteiro de segundos determinar o seu valor equivalente em graus, minutos e segundos.
Se a quantidade de segundos for insuficiente para dar o valor em graus, o valor e m graus deve ser zero. A
mesma observação continua válida em relação a minutos e segundos. Por exemplo: 3600 segundos = 1
grau, 0 minutos, 0 segundos; 3500 segundos = 0 graus, 58 minutos, 20 segundos.

18. Fazer um algoritmo que leia a hora e o minuto de início de uma aula e imprima a hora e o minuta de
término desta aula, sabendo que a aula é de 50 minutos.

24
ALTERNATIVA SIMPLES

Existem oportunidades em que determinados comandos dentro de um algoritmo devem ser


executados caso certas condições o permitirem, em outras condições nada se executa. Por
exemplo: na solução de uma equação do segundo grau, no momento de extrair a raiz
quadrada de Delta, só pode-se fazer caso Delta seja positivo. Se Delta for menor do que
zero, a raiz não pode ser extraída, e convé m executar outros comandos.

O comando Portugol que identifica uma ação condicional é o Se, que tem a seguinte
sintaxe :

Se <condição>
então <ação>;
fimse;

A condição é uma expressão cujo resultado final é do tipo lógico (V ou F).


A ação pode ser um comando simples ou uma sequência de comandos.

Semântica - se o resultado da condição que acompanha o SE for V, os comandos internos


ao ENTÃO devem ser executados;
caso contrário, se o resultado da condição que acompanha o SE for F, todos os
comandos internos ao ENTÃO devem ser desprezados até encontrar o FIMSE
correspondente.

Exemplo:
se DELTA < 0
então imprima (“não é possível extrair a raíz”);
fimse;

Para facilitar a compreensão e a visualização do início e do final de cada estrutura, utiliza-


se o artifício de deslocá-las à direita, de forma que uma estrutura fique dentro da outra,
também conhecida como endentação. Costuma-se endentar os comandos subordinados a
uma condição SE, isto é, comandos internos ao ENTÃO. E a margem deve ser trazida ao
que era antes do comando SE, apenas quando for escrita a palavra FIMSE correspondente.

25
FLUXOGRAMA PORTUGOL

condição
SE <condição >

ENTÃO < comando 1>;


< comando 2>;
comando 1 .....
F
<comando n>;

FIMSE;

comando n

Cada SE deve ter um FIMSE correspondente. Ao percorrer o fluxo de controle do


algoritmo, encontrando-se um FIMSE este sempre refere-se ao último SE aberto.

ALTERNATIVA COMPOSTA
É uma extensão da alternativa simples, neste caso temos determinar o que fazer se a
condição for verdadeira, e o que fazer se a condição for falsa. O formato deste comando é:

Sintaxe : Se <condição>
então <ação 1>;
senão <ação 2>;
fimse;

Semântica : se a condição contida no comando SE for verdadeira são executados os


comandos internos ao ENTÃO, e os comandos internos ao SENÃO são desprezados até
encontrar o FIMSE correspondente;
caso contrário, se a condição contida no comando SE for falsa, os comandos
internos ao ENTÃO são desprezados e os comandos internos ao SENÃO são executados
até encontrar o FIMSE correspondente.

Neste caso a endentação também é importante, os comandos SE e FIMSE começam na


margem corrente, os comandos internos ao ENTÃO e ao SENÃO ficam endentados.

26
Exemplo:
DELTA ← 4 * A * C - B ** 2;
se DELTA < 0
então imprima (“raízes imaginárias”);
senão X ← DELTA ** 0.5;
fimse;

FLUXOGRAMA PORTUGOL

F V
condição
SE <condição >

ENTÃO < comando 1>;


< comando 2>;
comando 11 comando 1 .....
<comando n>;

SENÃO < comando 11>;


< comando 22>;
comando nn comando n .....
< comando nn>;

FIMSE;

ANINHAMENTO
Os algoritmos podem ser formados por diversas estruturas, cada uma com uma função
específica. Existem casos em que uma estrutura poderá estar dentro de outra, e a isto dá-se
o nome de aninhamento. Nada impede que exista uma condição dentro de outra, e isto
também poderá ocorrer com as próximas estruturas de comando.

Não existe um limite para o número de estruturas que podem ser colocadas dentro de uma
outra estrutura qualquer, mas se o número for muito grande, a compreensão e a visualização
serão prejudicadas. Para facilitar a compreensão e a visualização do início e do final de
cada estrutura, utiliza-se o artifício da endentação.

Nos casos em que são necessárias muitas estruturas internas, a solução é a utilização do
processo de modularização do algoritmo, assunto que será tratado mais para frente.

27
Exemplo:
SEM IDENTAÇÃO COM IDENTAÇÃO

Se A <> 0 Se A <> 0
então B ← 0; então B ← 0;
se C <> 0 se C <> 0
então D ← 0; então D ← 0;
F ← 3; F ← 3;
fimse; fimse;
G ← 77; G ← 77;
fimse; fimse;

Uma regra importante que deve ser sempre seguida, é a de que o início e o final da estrutura
mais interna devem ser sempre dentro da estrutura imediata que a contém.

VÁLIDO INVÁLIDO

2 2
1
4

1
3
4
3

NEGAÇÃO DOS OPERADORES

Relembrando as operações lógicas, elas tem como operadores os valores Verdadeiro e


Falso e as operações E, OU e NÃO. Usando tais operações em conjunto com os comandos
SE simples ou composto, além dos operadores relacionais, pode-se criar trechos de
algoritmos muito ricos.

Exemplos:
a) Definir se um valor esta compreendido entre 10 e 35:
se VALOR > 9 e VALOR < 3
então imprima (“Valor OK”);
senão imprima (“Valor errado”);
fimse;

28
b) Definir se um valor numérico representativo de um mês está correto
se MÊS > 0 e MÊS < 13
então imprima (“mês correto”);
senão imprima (“mês incorreto”);
fimse;

c) Um certo código pode assumir os seguintes valores: 10, 15, 17, 18 e 30. Testar se ele está
ou não correto
se COD = 10 ou COD = 15 ou COD = 17 ou COD = 18 ou COD = 30
então imprima (“código correto”);
senão imprima (“código incorreto’);
fimse;

Muitas vezes é mais fácil organizar a saída correta da condição através do SENÃO e não
através do ENTÃO, o que inverte o comando.

d) Um indicador estará errado se assumir os valores: 1, 4, 5, 6, 7 ou 9. Organizar o


comando:

CONDIÇÃO PELO ENTÃO CONDIÇÃO PELO SENÃO - INVERTIDA

se IND = 1 ou IND = 4 ou IND =5 ou IND =6 ou se IND <> 1 e IND <> 4 e IND <> 5 e IND <> 6 e
IND =7 ou IND = 9 IND <> 7 e IND <> 9
então imprima (“indicador ERRADO”); então imprima (“identificador CORRETO”):
senão imprima (“indicador CORRETO”); senão imprima (“identificador ERRADO”);
fimse; fimse;

outra maneira de representar a mesma condição:

CONDIÇÃO PELO ENTÃO CONDIÇÃO PELO SENÃO - INVERTIDA

se IND = 1 ou ( IND > 3 e IND < 8 ) ou IND = 9 se IND <> 1 e ( IND <= 3 ou IND >= 8 ) e IND
então imprima (“indicador ERRADO”); <> 9
senão imprima (“indicador CORRETO”); então imprima (“identificador CORRETO”):
fimse; senão imprima (“identificador ERRADO”);
fimse;

29
Quando não se deseja inverter as saídas necessitamos negar as condições, abaixo segue um
resumo da negação dos comandos:

RESUMO RELAÇÀO NEGAÇÃO


= <> ou ≠
<> ou ≠ =
> <= ou ≤
< >= ou ≥
>= ou ≥ <
<= ou ≤ >
E OU
OU E

MULTIPLA ESCOLHA
Nos casos em que há múltiplas saídas para um determinado teste, pode-se fazer uso das
estruturas de alternativa simples e composta devidamente encadeadas. Tal uso, conforme os
professores italianos em 1966, sempre é suficiente para a solução de qualquer problema.
Entretanto para simplificar a solução inúmeras linguagens tem o comando teste múltiplo.
Seu formato em Portugol é:

Sintaxe :
caso <expressão>
valor1 : <comando1>;
valor 2 :< comando2>;
...
valor n : <comando n>;
senão: <comando n+1>;
fimcaso;

onde o comando do lado direito do dois pontos ( : ) pode ser um comando simples ou um
conjunto de comandos.

Semântica : a expressão do CASO é avaliada, e deve gerar um resultado determinado;


este resultado é comparado com os valores indicados colocados do lado
esquerdo do dois pontos ( : );
quando um valor igual for encontrado, o comando colocado ao lado direito do
dois pontos ( : ) será executado, retornando ao FIMCASO correspondente, sem executar
mais nenhuma comparação, onde prossegue o fluxo normal do algoritmo;
caso nenhum valor seja igual ao resultado obtido na expressão do CASO o
comando existente do lado direito do dois pontos ( : ) do SENÃO será executado,
retornando ao FIMCASO onde prossegue o fluxo normal do algoritmo.

Exemplo:

30
Resolver o seguinte problema usando o comando CASO. Numa organização, o número de
dependentes limita a quantidade de dias que um funcionário pode faltar anualmente. Assim,
empregados com menos de 3 dependentes podem faltar 5 dias quem tem 4, 5 ou 6
dependentes pode faltar 8 dias, quem tem mais de 6 dependentes pode faltar 11 dias
Escrever um alg que leia o número de dependentes e imprima a quantidade de dias que
podem ser fruídos anualmente para cada caso.

RESUMO
BLOCO
-Conjunto de descrição ALTERNATIVA SIMPLES
de variáveis e -Comandos executados
comandos para ENTRADA somente se a condição for
realizar uma Transfere dados verdadeira.
determinada tarefa externos para o algoritmo
SE < condição > ENTÃO
INÍCIO LEIA (var1, … var n); comando 1;
definição de variáveis …
comandos comando n;
FIM FIMSE;
SAÍDA
SEQÜÊNCIA SIMPLES Transfere dados do
-Comandos simples algoritmo para o meio ALTERNATIVA COMPOSTA
seguidos externo
-Começa no primeiro e - Existem dois caminhos;
termina no último IMPRIMA (var1, … var n); a condição determina
-Separados por “;” qual deve ser seguido.

comando 1; SE < condição > ENTÃO


comando 2; comando 1;
comando n; …
comando n;
SENÃO
comando 11,

comando nn,
FIMSE;

31
EXERCÍCIOS

1. Considerando A, B e C variáveis numéricas, contendo os valores, 1, 4.5 e 8 respectivamente; NOME e


COR variáveis literais contendo “Tania” e “Branco” e TESTE variável lógica contendo o valor V, determinar
os resultados obtidos da avaliação das seguintes expressões lógicas:

a. A = 1 e TESTE
b. NOME = “PEDRO” ou COR <> “Branco”
c. não TESTE ou B mod 2 = 0.5
d. C < 10 ou TESTE e COR = “preto”
e. A**2 + sqrt(C) = 3 e (A + trunc(B + C) > 13 ou NOME = “Ana”
f. TESTE e não TESTE

2. Determinar os resultados que estarão em cada uma das variáveis definidas nos algoritmos abaixo:

a. inicio
NUM, D1, D2, D3, D4 : inteiro;
NUM ← 1352;
D4 ← NUM mod 10;
D3 ← (NUM div 10) mod 10;
D2 ← (NUM div 100) mod 10;
D1 ← (NUM div 1000) mod 10;
fim.

b. inicio
QUALE: caracter [15];
NUM: inteiro;
NUM ← 10:
se NUM > 0
então QUALE ← “numero positivo”;
senão se NUM < 0
então QUALE ← “numero negativo”;
senão QUALE ← “zero”;
fimse;
fimse;
fim.

c. executar o algoritmo B trocando 10 por 0 e depois por -4

d. inicio
A, B, C: logico;
X, Y: real;
V, L: inteiro;
A ← F;
B ← V;
C ← F;
X ← 1.5;
Y ← 3.2;
X ← X + 1;
se C ou (( X + Y > 5) ou ( não A e B))
então L ← 0;
senão L ← 1;
fimse;
fim.

32
3. O que está errado no algoritmo abaixo:

inicio
N, PAR, X : inteiro;
leia (N);
X ← N mod 2;
se X=0
então PAR ← V;
senão PAR ← F;
fimse;
fim.

4. Um código está correto se for maior que 100, ou igual a 50. Escrever um algoritmo portugol que teste este
valor e some 1 no código se ele estiver errado.

5. Uma data vem acompanhada de um campo chamado DIASEM, cujo valor é 1-domingo,2-
segunda,....Escrever um algoritmo portugol que verifique se o DIASEM é um dia útil - semana inglesa.

6. Escrever um algoritmo que teste 3 valores numéricos e devolva a informação “OK” se:
(A deve ser maior do que 10 e menor do que 100) ou (B deve ser diferente de C e C deve ser maior do que
50)

7. Criar algoritmos para solucionar os itens abaixo:


a) fazer um a lgoritmo portugol que leia um número e determine se o valor é par ou impar.
b) fazer um algoritmo portugol que leia um valor referente ao ano e verifique se ele é bissexto ou
não.

8. Uma agência de casamento possuí um cadastro contendo os seguintes dados de pessoas inscritas:
nome, sexo, cor de olhos, altura, cor de cabelo e ano de nascimento.
a. um americano contatou a agência e pediu uma moça de até 25 anos com 1.60 de altura, loura ou ruiva de
olhos azuis;
b. uma alemã pretende jantar esta noite com um senhor de mais de 50 anos, com altura entre 1.75 e 1.80,
moreno de olhos pretos
Criar um algoritmo portugol que leia os dados das pessoas inscritas e imprima o nome das pessoas que
atendem ao item a e b.

9. Dados 3 valores X, Y, Z verificar se ele s podem ser os comprimentos dos lados de um triângulo e, se
forem, verificar se é triângulo equilátero, isósceles ou escaleno.
Propriedades - o comprimento de cada lado de um triângulo é menor do que a soma dos outros 2 lados
Equilátero - 3 lados iguais
Isósceles - 2 lados iguais
Escaleno - 3 lados diferentes

10. Criar um algoritmo portugol que calcule a média final das notas de um aluno. O algoritmo deve ler:
o nome do aluno,
nota do 1o bimestre,
nota do 2o b imestre,
nota do 3o bimestre e
nota do 4o bimestre.
Calcular a média aritmética das notas e imprimir o nome do aluno e a mensagem:
‘aprovado’ - média de 100 até 70;
‘exame final’ - média abaixo de 70 até 40;
‘reprovado’ - média abaixo de 40.

11. Criar um algoritmo portugol que verifique se uma data está correta ou não - utilizar valores lógicos:

33
Mês - entre 1 e 12
Dia - 1 a 28 - mês 2 e ano não bissexto
1 a 29 - mês 2 e ano bissexto
1 a 30 - meses 4, 6, 9, 11
1 a 31 - meses restantes

12. O Depto de Meio Ambiente mantém 3 listas de indústrias conhecidas por serem altamente poluentes da
atmosfera. Os resultados de várias medidas são combinados para formar o que é chamado de índice de
poluição. Isto é controlado regularmente. Normalmente os valores caem entre 0.05 e 0.25. Se o valor
atingir 0.30 as indústrias da lista A serão chamadas a suspender as operações até os valores retornarem ao
intervalo normal. Se o índice atingir 0.40 as indústrias da lista B serão notificadas também. Se o índice
exceder 0.50 indústrias de todas as 3 listas serão avisadas. Preparar um algoritmo portugol para ler o
índice de poluição e indicar as notações apropriadas.

13. Criar um algoritmo portugol que leia o nome, sexo e idade de candidatos a seleção brasileira de voleibol.
Caso o participante seja do sexo feminino com idade entre 7 e 10 anos imprimir o nome e a frase "seleção
feminina juvenil", caso seja do sexo masculino com idade entre 8 e 12 anos imprimir o nome e a frase
"seleção masculina juvenil".

14. Criar um algoritmo em portugol que leia o nome, idade e altura de moças pretendentes a manequim
profissional e imprimir o nome da pretendente e a frase “aprovada”, caso ela tenha idade entre 15 e 20
anos inclusive, e tenha altura de 1.70 a 1.80 inclusive. Em qualquer outro caso, imprimir o nome e a frase
"reprovada".

15. Criar um algoritmo portugol que leia o CÓDIGO DO PRODUTO, DESCRIÇÃO DO PRODUTO,
QUANTIDADE EM ESTOQUE e QUANTIDADE MÍNIMA, caso a quantidade em estoque seja menor
ou igual a quantidade mínima imprimir a descrição do produto e a mensagem “estoque baixo”; caso a
quantidade em estoque seja maior do que a quantidade mínima imprimir o código do produto e a
diferença entre o estoque e a quantidade mínima em estoque.

16. Criar um algoritmo em portugol que leia o NOME DO PRODUTO, QUANTIDADE EM ESTOQUE,
PREÇO UNITÁRIO, caso o preço unitário seja menor ou igual a R$ 1,99 imprimir o nome do produto e
o valor a ser acrescido ao preço unitário para chegar em R$ 1,99; caso o preço seja maior do que R$ 1,99
imprimir o nome do produto e a mensagem “preço maior”.

17. Escreva um algoritmo Portugol que leia a idade de um nadador e classifique-o:


IDADE CLASSIFICAÇÃO
≤6 pré-mirim
7 a 10 mirim
11 a 14 infantil
15 a 18 juvenil
≥ 19 adulto
imprimindo ao final a idade e sua classificação

18. Criar um algoritmo Portugol que leia a altura e o sexo de uma pessoa, calcule e imprima seu peso ideal.
Utilizando as seguintes fórmulas:
- para homens : 72,7 * h – 58
- para mulheres : 62,1 * h – 44,7

19. Escreva um algoritmo em Portugol que leia 4 números e imprima o maior deles.

34
20. Exercícios de teste de mesa:

inicio inicio
a, b, x, y : real; a, b, i, m : real;
leia (a, b); leia (m);
se a=b se m <> 0
então x ← 1,5; então i ← trunc (m/12);
y ← 2,5; a ← m / 12;
senão x ← -1,5; b ← round (m/12);
y ← - 2,5; se m mod 12 >= 6
fimse; então i ← i + 1;
imprima (x, y); fimse;
fim. imprima (a, b, i);
fimse;
fim.
Quais valores serão impressos se forem lidos 30; 19; 27;
60 e 0?
inicio inicio
aux, l, m, n : real; X, Y, Z : inteiro;
leia (l, m, n); X ← 2;
se l > m ou l > n Y ← 5;
então se m < n Z ← 3;
então aux ← l; se X < Y
l ← m; então X ← X + 2 + Y * 4;
m ← aux; imprima ( X );
senão aux ← l; senão Y ← Y + 5;
l ← n; Z ← Z + Y;
n ← aux; imprima ( Y, Z);
fimse; fimse;
fimse; imprima (Y, Z);
se m > n fim.
então aux ← m;
m ← n;
n ← aux;
fimse;
imprima (l, m, n);
fim.
inicio
A, B, C : inteiro;
A ← 4;
B ← -5;
C ← 3;
se C < B
então A ← A + 6 + B * 5;
imprima ( A );
senão B ← B + 10;
C ← C + B;
imprima ( B, C);
fimse;
imprima (B, C);
fim.

35
21. Em uma classe são feitos 5 exames (A, B, C, D e E). Fazer um algoritmo que leia as
notas destes exames e imprima a classificação do aluno, sabendo que a média é 70.
Classificação: A – passou em todos os exames;
B – passou em A, B e D, mas não em C ou E;
C – passou em A e B, C ou D, mas não em E.

22. Uma Cia de pulverização utiliza avião para pulverizar lavouras. Os custos de
pulverização dependem do tipo de praga e da área a ser contratada conforme a tabela:
Tipo 1 – ervas daninhas R$ 50,00 por acre;
Tipo 2 – gafanhotos R$ 100,00 por acre;
Tipo 3 – broca R$ 150,00 por acre;
Tipo 4 – todos acima R$ 250,00 por acre.
Se a área a ser pulverizada for superior a 1000 acres, o fazendeiro tem um desconto de
5%. Em adição, qualquer fazendeiro cujo custo for maior do que R$ 750,00 tem um
desconto de 10% sobre o valor que ultrapassar os R$ 750,00. Caso ambos os descontos
se aplicam o da área é calculado antes. Fazer um algoritmo que leia: nome do
fazendeiro, tipo de pulverização (1 a 4) e área a ser pulverizada; e imprima o nome do
fazendeiro e o valor a ser pago.

23. Muitos times de esportes profissionais utilizam o computador para auxiliar na análise de
seus jogadores. Suponha que um time de Hockey tenha um sistema deste tipo. Para cada
jogador existem os seguintes dados: nome do jogador, idade, altura, peso, gols no
último campeonato, presenças no último campeonato, penalidades em minutos no
último campeonato, fator da confederação.
Fazer um algoritmo que leia os dados do jogador e imprima sua avaliação utilizando a
fórmula: (gols + presença + (pena lidades /4) + (altura + peso)/5 – idade) * fator.

24. A Cia Pascoalina Ltda decidiu dar a seus funcionários uma gratificação de Páscoa. A
gratificação é baseada em dois critérios: o número de horas extras trabalhadas e o
número de horas que o empregado faltou ao trabalho. Para todos os funcionários
coletou-se os dados: nome do funcionário, nº de horas extra e nº de horas de faltas. A
empresa decidiu utilizar a seguinte fórmula para calcular o prêmio: subtrair dois terços
das horas que ele faltou de suas horas extras, e distribuir o prêmio de acordo com a
tabela:
RESULTADO DA FÓRMULA VALOR DO PRÊMIO
> 40 horas R$ 500,00
> 30 mas <= 40 horas R$ 400,00
> 20 mas <= 30 horas R$ 300,00
> 10 mas <= 20 horas R$ 200,00
<= 10 horas R$ 100,00
Fazer um algoritmo que leia os dados do funcionário e imprima seu nome e seu prêmio.

36
COMANDOS DE REPETIÇÃO

Parece lógico que um algoritmo deva ser criado para a execução de um único conjunto de
valores fornecidos como entrada. Por exemplo, ao escrever o algoritmo de aprovação de
alunos da disciplina de Lógica, precisa-se somente preocupar-se com um único aluno, pois
a regra de um vale para todos. Não teria sentido descrever os mesmos procedimentos para
todos os alunos da turma, pois isto seria interminável, além de deixar o algoritmo específico
para um determinado número de alunos.
Da mesma forma, ao escrever um programa de computador que calcule o salário de um
empregado, deve-se imaginar apenas um funcionário e não os milhares que o computador
ira processar.

A solução para este problema está no reapreoveitamento de instruções do algoritmo. Em


outras palavras, uma vez escrito o caminho principal do algoritmo, todos os outros dados
(alunos ou funcionários) irão passar pelo mesmo caminho. Os comandos existentes para
este fim são os chamados comandos de repetição, entre eles podemos citar: ENQUANTO,
REPITA e PARA.

ENQUANTO

Semântica - a condição contida no ENQUANTO é avaliada, se ela for falsa todos os


comandos internos ao ENQUANTO serão desprezados até encontrar o FIMENQUANTO
correspondente,
caso contrário, se a condição contida no ENQUANTO for verdadeira, os
comandos internos ao ENQUANTO serão executados até encontrar o FIMENQUANTO
correspondente, neste momento existe um desvio para o próprio comando ENQUANTO. A
condição contida no ENQUANTO é novamente avaliada e o processo reinicia.

Sintaxe : enquanto <condição> faça


<comando 1>;
<comando 2>;
.....
<comando n>;

fimenquanto;

Exemplo:
Calcular a soma dos número inteiros até 100.

inicio
SOMA,NUM: inteiro;
SOMA ← 0;
NUM ← 0;

37
enquanto NUM <= 100 faça
SOMA ← SOMA + NUM;
NUM ← NUM + 1;
fimenquanto;
imprima (SOMA);
fim.

Se a condição contida no ENQUANTO for uma “verdade eterna”, isto é, como 1 = 1, tem-
se um laço infinito (looping), pois os comandos nunca deixarão de serem executados. Por
outro lado, se a condição for sempre falsa (tautologia) então os comandos internos ao
ENQUANTO nunca serão executados.

FLUXOGRAMA PORTUGOL

F ENQUANTO <condição > FAÇA


condição
< comando 1>;
< comando 2>;
.....
V <comando n>;

FIMENQUANTO;
comando 1

comando n

38
REPITA

O comando REPITA, assim como o ENQUANTO, é uma outra forma de repetir partes de
um algoritmo. A rigor, com uma única estrutura pode-se resolver todos os problemas, como
demonstrado pelos professores italianos em 1966. Entretanto, criar um programa nem
sempre é um exercício acadêmico. Nos meios acadêmicos o rigor cientifico é o mais
importante, e para tanto não existe pressa. Na vida prática o rigor é importante na medida
em que garante a qualidade do processo, porém não é um fim em si mesmo. Portanto,
visando facilitar, acelerar e simplificar surgiram dois novos comandos de repetição: o
REPITA e o PARA.

Sintaxe : repita
<comando 1>;
< comando 2>;
...
< comando N>;
até <condiçao>;

Semântica : os comandos internos ao REPITA são executados até encontrar a condição


contida no ATÉ correspondente;
a condição contida no ATÉ correspondente é testada e sendo falsa existe um
desvio para o comando REPITA correspondente, e os comandos internos a ele são
novamente executados reiniciando o processo;
caso contrário, quando a condição contida no ATË for verdadeira o processo
de repetição pára e prossegue o fluxo normal do algoritmo

Exemplo:
Somar os 100 primeiros números inteiros positivos.

inicio
NUM, SOMA: inteiro;
NUM ← 1;
SOMA ← 0;
repita
SOMA ← SOMA + NUM;
NUM ← NUM + 1;
ate NUM > 100;
imprima (SOMA);
fim.

39
FLUXOGRAMA PORTUGOL

REPITA
comando 1

< comando 1>;


< comando 2>;
.....
<comando n>;
comando n
ATÉ <condição >;

F
condição

UMA COMPARAÇÃO ENTRE OS COMANDOS ENQUANTO E REPITA

ENQUANTO REPITA
1. os comandos internos ao enquanto podem nunca 1. os comandos internos ao repita são executados
serem executados; pelo menos uma vez;
2. o laço do enquanto é executado quando a 2. o laço do repita é realizado quando a condição
condição for verdadeira; for falsa;
3. a estrutura enquanto testa e faz. 3. a estrutura repita faz e testa.

Em geral tudo o que se fizer com um dos comandos, pode-se fazer com outro. A vantagem
é que para determinadas situações um ou outro pode ser mais indicado, isto é, pode
solucionar o problema com menos lógica adicional (overhead), tais como contadores,
chaves, testes, inicializações, etc.

EXERCÍCIOS

1. Fazer um algoritmo que leia uma lista de números terminada pelo número 0 e mostre cada número lido
(não imprimir o 0).

2. Faça um algoritmo que leia um número N, e a seguir solicite N números e mostre a soma dos N números.

40
3. Escreva um algoritmo que leia um número inteiro positivo N. Calcule e mostre o maior quadrado menor ou
igual a N. Por exemplo, se N for igual a 38, o menor quadrado é 36 (quadrado de 6).

4. Escreva um algoritmo que leia um número N, calcule e mostre os N primeiros termos da sequência (1, 3, 6,
10, 15, ...)

5. Escreva um algoritmo que leia um número N em base 10 e imprima o número base 2 correspondente.

6. Faça um algoritmo que leia um número e, a seguir, leia uma lista de número até encontrar um igual ao
primeiro número lido. Mostre todos os números lidos.

7. Escreva um algoritmo que leia um número N, some todos os números inteiros entre 1 e N e mostre o
resultado obtido.

8. Faça um algoritmo que leia uma lista de números terminada pelo número 0 e mostre cada número lido. Ao
final, o algoritmo deve mostrar a média aritmética de todos os números da lista.

9. Escreva um algoritmo que leia um número N, calcule seu fatorial e mostre o resultado obtido.

10. Escreva um algoritmo que leia um número N, calcule todos os números primos no intervalo entre 0 e N e
mostre o resultado obtido.

11. Escreva um algoritmo que leia um número, calcule uma relação de seus divisores e mostre o resultado
obtido.

12. Escreva um algoritmo que leia uma lista de números terminada pelo número 0 e que, para cada número
lido, mostre o próprio número e uma relação de seus divisores.

13. Faça um algoritmo que leia dois valores (limite inferior e limite superior) e mostre todos os números pares
entre os dois limites lidos.

14. Faça um algoritmo que leia três valores (N, limite inferior, limite superior) e mostre todos os números
inteiros múltiplos de N entre os dois limites lidos.

15. Trocar os comandos enquanto por repita:

A ← 0; Z ← 10; K ← 5;
enqto ( A <> 3) faca enqto Z > 0 faca enqto K < 10 faca
A ← A +1; Z ← Z -3; K ← K + 1.5;
imprima (A); imprima (Z); imprima (K):
fimeqto; fimenqto; fimenqto;

16. Transforme repita em enquanto:

A ← 10; GH ← 5; T ← 0;
repita repita repita
A ← A + 1; imprima (ABC); T ← T + 0.5;
ate A >10; ate GH <> 5; imprima ( T * 2);
ate T > 10;

17. Quais valores serão impressos executando o algoritmo abaixo:

inicio
A, Q, TERMO: real;
A ß 1;

41
Q ß 3;
TERMO ß A;
repita
imprima (TERMO);
TERMO ß TERMOS * Q;
até TERMO >= 2000;
FIM.

18. Dado o algoritmo abaixo, que valores seriam impressos se fossem lidos os valores 30; 19; 27; 60 e 0.

Inicio
A, B, I , M : inteiro;
leia (M);
se M <> 0
então I ß trunc (M/12);
A ß M /12;
B ß arred (M/12);
se M mod 12 >= 6
então I ß I +1;
fimse;
imprima (A, B, I);
fimse;
FIM.

19. Dado o algoritmo abaixo, informar o valor impresso caso sejam lidos os valores 3; 6; 8; 1.

Inicio
FAT, N, MULT : real;
leia (N);
FAT ß 1;
MULT ß N;
repita
FAT ß FAT * MULT;
MULT ß MULT - 1;
até MULT < 1;
imprima (FAT);
FIM.

20. Fazer um algoritmo que leia dois valores (X e Y) e imprima XY , sem utilizar o operador de potência (**).

21. Calcular a soma dos 100 primeiros números pares.

22. Totalize um conjunto de valores lidos, sendo todos positivos. O fim dos dados será indicado por um
número negativo que não deve ser somado.

23. Ler um conjunto de números inteiros, caso ele seja par deve ser somado, caso seja impar deve ser
multiplicado. O conjunto termina quando for lido 0.

24. Criar um algoritmo portugol que leia: matrícula, nome, nota 1o bimestre, nota 2o bimestre, nota 3o
bimestre e nota 4o bimestre. O algoritmo deve calcular a média aritmética final do aluno e imprimir o nome
do alu no e a mensagem: “aprovado”- média entre 100 até 70
“exame final “- média abaixo de 70 até 40
“reprovado”- média abaixo de 40

25. Fazer um algoritmo para calcular e imprimir a soma dos cubos dos números pares compreendidos entre B
e A . Suponha que os valores de B e A (B > A) sejam lidos no início do algoritmo.

42
26. Fazer um algoritmo que leia 100 números inteiros positivos, calcule e imprima os que são números
perfeitos. Número perfeito é aquele cuja soma de seus divisores, exceto ele próprio, é igual ao número.
Exemplo: 6 é perfeito porque 1 + 2 + 3 = 6.

27. Tem-se uma estrada ligando várias cidades. Cada cidade tem seu marco quilométrico. Fazer um
algoritmo que:
a) leia vários pares de dados, contendo cada par os valores dos marcos quilométricos em ordem crescente,
de duas cidades. O último par contém estes dois valores iguais;
b) calcule o tempo decorrido para percorrer a distância entre estas duas cidades, com as seguintes
velocidades: 40, 60 e 80 km/h, sabendo-se que:
T = D / V, onde T = tempo; D = distância e V = velocidade.

28. Executando o algoritmo abaixo, que valores serão impressos?

Inicio Os valores lidos são: CAPITAL = 50,00; TAXA = 0,10; X = 1


N, QUAD : inteiro; inicio
N ß 5; CAPITAL, MONTANTE, N, TAXA, RENDIMENTO,
enquanto N > 1 faça TRIMESTRE, X: real;
QUAD ß N ** 2; leia (CAPITAL, TAXA, X);
se QUAD mod 2 = 0 MONTANTE ← CAPITAL;
então imprima (QUAD); TRIMESTRE ← 1;
senão imprima (N); N ← 4 * X;
fimse; enquanto TRIMESTRE <> N faça
N ß N - 1; RENDIMENTO ← TAXA * MONTANTE;
fimenquanto; MONTANTE ← CAPITAL * (( 1 + TAXA) ** TRIMESTRE);
fim. Imprima ( RENDIMENTO, MONTANTE);
TRIMESTRE ← TRIMESTRE + 1;
fimenquanto;
fim.

29. O depto pessoal de uma empresa solicitou o desenvolvimento de um programa de computador capaz de
calcular o desconto devido para o INSS. Assim, escreva um algoritmo capaz de calcular este desconto:
. inicialmente deve ser lido o valor do salário de referencia;
. depois deve-se ler uma série de dados compostos de: Rg e salário bruto;
. a série termina quando for lido Rg 0;
. tabela de desconto:
salário bruto % desconto
até 10 SR 8
de 10,01 a 20 SR 9
acima de 20 SR 10
. imprimir para cada funcionário o RG, salário bruto e desconto.

30. Definir um algoritmo portugol que receba uma série de pares de números, e para cada par calcule a média
aritmética, imprimindo o resultado. A série termina quando for lido o par 0,0.

31. Melancias custam R$ 4,50 cada, se compradas até 5 unidades inclusive. R$ 4,20 se compradas até 20
unidades inclusive e R$ 4,00 se compradas até 100 unidades. Além deste valor, deve ser dado um desconto de
10% no valor total da compra.
Escrever um algoritmo portugol que receba o número de melancias compradas e devolva a quantidade de
reais a pagar. O programa deve rodar até receber o número zero melancias, que indica fim.

32. Uma empresa decidiu fazer um levantamento em relação aos candidatos que se apresentaram para
preenchimento de vagas no seu quadro de funcionários. Fazer um algoritmo portugol que:

leia um conjunto de dados contendo:

43
. número de inscrição do candidato;
. idade;
. sexo (F/M);
. experiência no serviço (S/N);
. o último cartão contém o número de inscrição = 0.

calcule:
. o número de candidatos femininos;
. o número de candidatos masculinos;
. idade média dos homens que já tem experiência no serviço;
. porcentagem dos homens com mais de 45 anos entre total de homens;
. número de mulheres que tem idade inferior a 35 anos e com experiência no serviço.
imprima
. o que foi calculado.

33. Defina um algoritmo capaz de somar os primeiros 50 números múltiplos de 4, começando no 4 ( 4, 8, 12,
..., 400). O algoritmo deve imprimir o resultado ao final.

34. Dada uma série indeterminada de números, escrever um algoritmo portugol que calcule e imprima:
a. quantos números foram fornecidos;
b. quantos eram maiores que 100;
c. quantos eram pares;
d. quantos eram positivos;
e. qual o maior valor.
A série termina quando for digitado o valor 0, utilizar o comando de repetição repita.

35. Numa fábrica trabalham homens e mulheres divididos em 3 classes:


A - os que fazem até 30 peças por mês;
B - os que fazem de 31 a 35 peças por mês;
C - os que fazem mais de 35 peças por mês.

A classe A recebe salário mínimo. A classe B recebe salário mínimo e mais 3% do salário mínimo por peça
acima das 30 iniciais. A classe C recebe salário mínimo e mais 5% do salário mínimo por peça acima das 30
iniciais.
Fazer um algoritmo que:
a. leia um conjunto de dados contendo cada um: número do operário, número de peças fabricadas no mês e
sexo;
b. calcule e imprima:
. salário de cada operário;
. total da folha mensal de pagamento;
. número total de peças fabricadas no mês;
. média das peças fabricadas pelos homens em cada classe;
. média de pecas fabricadas pelas mulheres em cada classe;
. número do operário ou operária de maior salário ( não existe empate).
O último dado a ser lido terá número de operário = 0.

36. Foi feita uma pesquisa de audiência de canal de TV em várias casas de uma certa cidade, num
determinado dia. Para cada casa visitada foi criado um conjunto de dados contendo: número do canal (4, 5,
7,12) e o número de pessoas que estavam assistindo naquela casa. Se a televisão estivesse desligada nada seria
digitado. Fazer um algoritmo que:
. leia um número indeterminado de dados, sendo que o final seria canal =0;
. calcule e imprima a percentagem de audiência para cada emissora e o respectivo canal.

37. O governo das Ilhas Oba Oba instituiu um controle de preços e salários logo após sua eleição. O Primeiro
Ministro recebeu de seus conselheiros econômicos uma previsão, baseada nas tendências atuais, de que os
salários continuarão a aumentar anualmente de 5%, o custo de vida e de serviços de 10%, e os impostos de

44
15%. Seus conselheiros políticos informam que, se os impostos mais o custo de vida e de serviços
consumirem mais do que 75% do salário anual para um número significativo de cidadãos, ele terá problemas
nas próximas eleições e que, se isto atingir 80%, ele se verá realmente em apuros. O Primeiro Ministro tem
coletados os seguintes dados: salário anual, os impostos e o custo de vida e serviços para uma amostra tomada
de seus eleitores. Preparar um algoritmo para determinar o número e a percentagem dos cidadãos estudados
que caem nas categorias de 75% e 80% já descritas. O número de pessoas da amostra é desconhecido. O
número de entrevistados termina quando for lido o salário anual 0.

PARA

O próximo comando disponível para controlar “loops” atende pelo nome de PARA,
também conhecido como estrutura de repetição finita. O comando PARA permite que
várias instruções sejam executadas repetidamente um número predeterminado de vezes,
mediante o uso de uma variável de controle que irá controlar o início e o final da repetição,
servindo como acumulador.

Sintaxe : para <identificador> de <valor inicio> até <valor fnal> passo <incremento> faça
<comando 1>;
< comando 2>;
...
< comando n>:
fimpara;

onde o identificador é a variável de controle do laço.

Semântica :
1. antes de começar o trecho incluído no PARA, o identificador de controle é inicializado
pelo valor de inicio;
2. se o valor do identificador de controle for menor ou igual ao valor final o trecho interno
ao PARA é executado,
caso contrário, se o valor do identificador de controle for maior do que o valor final o
processo de repetição termina e o algoritmo prossegue seu curso no comando
imediatamente após o FIMPARA correspondente;
3. ao chegar ao FIMPARA correspondente o identificador de controle é incrementado do
valor do incremento;
4. há um desvio para a linha do comando PARA, e o processo reinicia a partir do passo 2
acima, com idênticas saídas.

Observações sobre o comando:


- dentro dos comandos internos ao PARA o identificador de controle do laço não
pode ser alterado;
- os valores de inicio, final e incremento podem ser números, variáveis ou
expressões, as quais também não podem ser alteradas pelos comandos internos ao PARA;

45
- quando o valor do incremento for 1, este pode ser omitido;
- o valor do incremento pode ser negativo, neste caso o valor inicio do identificador
de controle deve ser maior do que seu valor final.

FLUXOGRAMA PORTUGOL

para <var > de PARA <variável> DE <inicio> ATÉ <final> PASSO


<inicio> até <incremento> FAÇA
<fim> passo
<valor> <comando 1>;
< comando 2>;
...
< comando n>;
comando 1
FIMPARA;

comando n

Exemplo:

USANDO O COMANDO PARA USANDO O COMANDO ENQUANTO

para I de 1 até 10 passo 2 faça I ← 1;


imprima (I); enquanto I <= 10 faça
fimpara; imprima (I):
I ← I + 2;
fimenquanto;

46
para I de 1 até 20 passo 1 faça para I de 1 até 20 faça
SOMA ← SOMA + I; OU SOMA ← SOMA + I:
fimpara; fimpara;

EXERCÍCIOS

1. Substituir Para por Enquanto:

para J de 1 até 20 faça


X ← J /3;
imprima (X):
fimpara;

para SEMENTE de 0 até 100 passo 2 faça


SEM1 ← SEMENTE * 2;
SEM2 ← SEMENTE + 1.5 * ABC;
MEDIA ← (SEM1 + SEM2) /2;
imprima (MEDIA);
fimpara;

2. Escreva um algoritmo portugol que imprima uma tabela de angulos, seus senos e cossenos, para todos os
angulos de 0 a 90 graus.
Exemplo:
Angulo Seno Cosseno
0 0 1
1 ... ...

3.Definir um algoritmo que informe o valor de H, sendo N lido no início do algoritmo:

1 1 1 1 1
H = ------- + -------- + --------- + --------- + .... + --------
1 2 3 4 N

4. Fazer um algoritmo portugol que calcule e imprima a seguinte soma:

1 3 5 7 99
S = ----- + ----- + ----- + ----- + ... + ------
1 2 3 4 50

5. Defina um algoritmo portugol que calcule e imprima o somatório expresso pela seguinte série:

500 480 460 20


S = ----- + ----- + ----- + ... + ------
2 3 4 26

6. Fazer um algoritmo que escreva a soma dos 50 primeiros termos da seguinte série:

1000 997 994 991


-------- - ------- + ------- - ------- + .....
1 2 3 4

47
7. Fazer um algoritmo para calcular e escrever a seguinte soma:

37 * 38 36 * 37 35 * 36 1*2
S = ---------- + --------- + ---------- + ..... + ------
1 2 3 37

8. Fazer um algoritmo que calcule e imprima a seguinte soma:

21 22 23 250
S = ----- + ---- + ----- + ..... + ------
50 49 48 1

9. Definir um algoritmo para calcular o valor da seguinte soma, sendo N lido no início do algoritmo:
1 1 1 1 1
S = ------- + -------- + --------- + --------- + .... + --------
1! 2! 3! 4! N!

10. Fazer um algoritmo que calcule o valor do co-seno de X através de 20 termos da série abaixo;

X2 X4 X6 X8
cosen(x) = 1 - ------ + ------ - ------ + ------ - ....
2! 4! 6! 8!

11. O valor aproximado de π pode ser calculado usando-se a série

1 1 1 1 1
S = ----- - ---- + ---- - ---- + ---- - ....
13 33 53 73 93

3
sendo π = √ ( S * 32) . Fazer um algoritmo para calcular e imprimir o valor de π com 51 termos.

48
RESUMO

REPETIÇÃO

A- ENQUANTO B- REPITA C- PARA


Enquanto a condição -Os comandos Pressupõe a existência de uma variável
for internos a ele são que controla o início e o fim
VERDADEIRA, o executados ao menos
conjunto uma vez, Sempre pode ser convertido num
de comandos é independente da ENQUANTO
executado. condição(“faz e testa” )
- O laço REPITA é PARA variável DE valor1ATÉ valor2 PASSO valor3 FAÇA
Se a condição é realizado se a comando 1
FALSA o condição for FALSA …
comando n
conjunto NÃO é
FIMPARA;
executado REPITA
(“testa e faz”) comando 1

ENQUANTO < condição > FAÇA comando n
comando 1; ATÉ <condição>;
comando n;
FIMENQUANTO;

49
EXERCÍCIOS

1. Escreva um algoritmo Portugol que leia uma série de números inteiros e positivos e ao final do
processamento imprima qual o maior deles. O processamento se encerra quando for lido qualquer número
negativo que não deve ser considerado para efeito de comparação.

2. Existe um conjunto de muitos números inteiros e positivos, agrupados 3 a 3. Deve-se escrever um


algoritmo portugol capaz de:
a. ler os 3 números;
b. identificar o maior deles, e re jeitá-lo;
c. calcular a média entre os 2 números restantes;
d. imprimir os 2 números e a média.
A pesquisa termina quando o primeiro número dos 3 lidos for negativo.

3. Escrever um algoritmo portugol que receba conjuntos de 2 números inteiros e positivos, e para cada par
calcule o MDC ( máximo divisor comum) de acordo com o Algoritmo Euclidiano para o MDC, cuja descrição
é:
1. entram 2 valores N1 e N2;
2. N1 recebe o valor absoluto de N1 e N2 recebe o valor absoluto de N2;
3. calcula -se X que é N1 menos ( N2 vezes ( inteiro de N1/N2));
4. se X for zero, o MDC é N2;
5. se não for, N1 recebe N2 e N2 recebe X, voltando-se ao passo 2.
O programa termina quando for lido o par 0,0, que não deve ser processado.

4. A comissão organizadora de um rallye automobilístico decidiu apurar os resultados da competição através


de um processo informatizado. Um dos algoritmos necessários para a classificação das equipes concorrentes é
o que emite uma listagem geral do desempenho das equipes, atribuindo pontos segundo determinadas normas.
O algoritmo deverá:
. ler : a. um campo contendo os tempos padrão (em minutos decimais) para as 3 fases de competição;
b. um conjunto de dados contendo cada um o número de inscrição da equipe e os temp os (em minutos
decimais) que as mesmas despenderam ao cumprir as 3 diferentes etapas. O último dado do conjunto contém
o número 9999 como número de inscrição.
. calcular: a. os pontos de cada equipe em cada uma das etapas, seguindo o seguinte critério:
seja ∆ o valor absoluto da diferença entre o tempo padrão e o tempo despendido pela
equipe numa etapa:
∆ < 3 minutos - atribuir 100 pontos a etapa
3 <= ∆ <= 5 minutos - atribuir 80 pontos a etapa
∆ > 5 minutos - atribuir 80 – (∆ - 5) pontos a etapa

b. o total de pontos de cada equipe nas 3 etapas;


c. a equipe vencedora.
. imprimir: para cada equipe, o número de inscrição, os pontos obtidos em cada etapa e o total de pontos
obtidos na prova toda.

5. Deseja-se fazer uma pesquisa a respeito do consumo mensal de energia elétrica em uma determinada
cidade. Para isso, deve ser lido os seguintes dados:
- preço do Kwh consumido;
- número do consumidor;
- quantidade de Kwh consumidos durante o mês;
- código do tipo de consumidor ( residencial, comercial, industrial).
O processo termina quando o número do consumidor for 0.

50
Fazer um algoritmo que:
1. leia os dados acima;
2. calcule:
a) para cada consumidor, o total a pagar;
b) o maior consumo verificado;
c) o menor consumo verificado;
d) o total do consumo para cada um dos 3 tipos de consumidores;
e) a média geral de consumo.
3. imprima:
a) para cada consumidor: seu número e total a pagar;
b) o que foi calculado nos itens b, c, e d acima.

6. Uma companhia de teatro planeja dar uma série de espetáculos. A direção calcula que, a R$ 5,00 o
ingresso, serão vendidos 120 ingressos, e as despesas montarão em R$ 200,00 . A diminuição de R$ 0,50 no
preço dos ingressos espera-se que haja um aumento de 26 ingressos vendidos.
Fazer um algoritmo que imprima uma tabela de valores do lucro esperado em função do preço do ingresso,
fazendo-se variar este preço de R$ 5,00 a R$ 1,00 de R$ 0,50 em R$ 0,50. Imprima, ainda, o lcuro máximo
esperado, o preço e o número de ingressos correspondentes.

7. Tem-se uma estrada ligando várias cidades. Cada cidade tem seu marco quilométrico. Fazer um algoritmo
que:
- leia vários pares de dados, contendo cada par os valores dos marcos quilométricos em ordem crescente, de
duas cidades. O último par contém estes dois valores iguais;
- calcule os tempos decorridos para percorrer a distância entre estas duas cidades, com as seguintes
velocidades: 20, 30, 40, 50, 60, 70 e 80 Km/hora, sabendo-se que:

T = E / V, onde T = tempo; E = espaço; V = velocidade;

- imprima os marcos quilométricos, a velocidade e o tempo decorrido entre as duas cidades, apenas quando
este tempo for superior a 2 horas.

8. Um comerciante deseja fazer o levantamento do lucro das mercadorias que ele comercializa. Para isto, deve
ser lido os seguintes dados, para cada mercadoria: o nome, preço de compra e preço de venda.
Fazer um algoritmo que:
- determine e imprima quantas mercadorias proporcionam:
lucro < 10%
10% <= lucro <= 20%
lucro > 20%
- determine e imprima o valor total de compra e venda de todas as mercadorias, assim como lucro total.
- O processo termina quando for final de arquivo

9. Sejam dois pontos P(x1,y1) e Q(x2,y2) no plano. Fazer um algoritmo, utilizando a fórmula abaixo, que
calcule e mostre a distância entre os dois pontos, repetidas vezes até que o usuário digite zeros para as
coordenadas x1, x2, y1, y2.

D = sqrt( (x2 – x1)2 + (y2 – y1)2 )

10. Fazer um algoritmo, usando estrutura de repetição, que calcule e imprima a soma dos 50 primeiros termos
da série:

480 475 470 465


S = ------ + ------ + ------ + ------ + ....
10 11 12 13

11. Fazer um algoritmo, usando estrutura de repetição, que calcule e imprima o somatório dos 20 primeiros
termos:

51
61 59 57
S = - 63 + ------ - ------ + ------ - ....
1! 2! 3!

12. Fazer um algoritmo que calcule e imprima os primeiros 40 termos da série:

1! 2! 3! 4! 5!
S= ---- - ---- + ---- - ---- + ---- - ...
1 3 7 15 31

13. Fazer um algoritmo que calcule e imprima o valor de S no seguinte somatório:

1 2 4 8 16384
S = ---- - ---- + ---- - ---- + ... + ----
225 196 169 144 1

14. Fazer um algoritmo para tabular a função y = f(x) + g(x), para x = 1,2,3,4,..., 10, onde:

h(x) = x2 - 16 g(x) = x2 + 16, se f(x) = 0


f(x) = h(x), se h(x) >= 0 0, se f(x) > 0
1, se h(x) <0

15. Fazer um algoritmo que tabule a seguinte função:

x2 + 3x + y 2 para x = 1, 4, 9, 16, ..., 100;


f(x,y) = --------------------- e y = 0, 1, 2,..., 5 para cada valor de x.
xy - 5y - 3x + 15

16. Exercícios de teste de mesa:

inicio inicio
a, n, seno, t : real; d, k, num, soma : real;
imprima ( “A seno A N”); leia (num);
a ← 0; soma ← num + 1;
repita k ← num div 2;
seno ← 0; d ← 2;
t ← a; repita
n ← 0; se num mod d = 0
repita então soma ← soma + d;
seno ← seno + t; fimse;
n ← n + 1; d ← d + 1;
t ← - t * (a**2 / ( 2*n*(2*n+1))); até d > k;
até abs(t) < 0,0001; imprima (soma);
imprima (a, seno, n); fim.
a ← a + 0,1; Qual valor será impresso quando for lido 30?
até a > 1,6;
fim.
inicio
a, q, termo : real;
a ← 1;
q ← 3;
termo ← a;
repita

52
imprima (termo);
termo ← termo * q;
até termo >= 2000;
fim.

53