Universidade Federal Fluminense
Centro Tecnológico
Instituto de Computação
Departamento de Ciência da Computação
Construção de Algoritmos
Versão 2005
Prof. Leonardo Cruz da Costa
1
Capítulo I - INTRODUÇÃO
É comum seguirmos roteiros para solucionar problemas no dia a dia. Esses roteiros
descrevem ações que devem ser seguidas uma a após a outra com o objetivo de produzir o resultado
desejado. Os roteiros podem ser textuais ou gráficos.
Exemplo 1: Como fazer um pato no tucupi?
Tempere o pato com o alho, a cebola, sal e pimenta-do-reino.
Aqueça o forno em temperatura média.
Coloque o pato numa assadeira com um pouco de óleo e leve ao forno até dourar.
Numa panela, coloque o tucupi e os pedaços de pato assado.
Leve ao fogo alto até ferver.
Abaixe o fogo e cozinhe até ficar macio.
Acrescente mais tucupi, se necessário.
Junte as folhas de jambu e cozinhe até que os talos fiquem macios.
Sirva com farinha de mandioca.
Exemplo 2: Como chegar no sítio do amigo para churrasco de final de semana?
Siga pela rodovia RJ 104
No quilometro 98 virar a esquerda na primeira entrada de terra
Siga até a primeira ponte.
Atravesse a ponte e dobre à esquerda.
Procure a placa sítio Animação.
Exemplo 3: Como deve ser a instalação do sistema de aquecimento de água solar para piscinas.
1. Moto Bomba
2. Filtro
3. Registro de Esfera ou Gaveta
4. Válvula de Retenção
5. Saída de água fria para as placas
6. Retorno de água quente das placas
7. Tubulação de retorno para piscina.
2
Exemplo 4: Roteiro para trocar uma lâmpada queimada.
a) Primeira versão
1. Remover a lâmpada queimada;
2. Colocar a nova lâmpada;
Mas isto está muito abstrato. O que é remover uma lâmpada?
b) Segunda versão (um pouco mais detalhada)
1.
2.
3.
4.
5.
6.
7.
Buscar uma lâmpada nova;
Pegar uma escada
Posicionar a escada debaixo da lâmpada;
Subir na escada até que a lâmpada possa ser alcançada;
Girar a lâmpada queimada no sentido anti-horário até que se solte;
Colocar a lâmpada nova girando-a no sentido horário;
Descer da escada;
E se a lâmpada não estiver queimada?
c) Terceira versão (um pouco mais detalhada)
1. Buscar uma lâmpada nova;
2. Pegar uma escada
3. Posicionar a escada debaixo da lâmpada;
4. Acionar o interruptor;
5. Se a lâmpada não acender, então
6. Subir na escada até que a lâmpada possa ser alcançada;
7. Girar a lâmpada queimada no sentido anti-horário até que se solte;
8. Colocar a lâmpada nova girando-a no sentido horário;
9. Descer da escada;
3
Nessa versão algumas ações estão vinculadas à condição lâmpada não acender, ou seja,
somente efetua-se a troca da lâmpada caso a condição lâmpada queimada (lâmpada não acender)
for verdadeira.
Se a condição lâmpada não acender for falsa, nada mais será realizado.
Apesar do algoritmo estar correto, ele pode ser melhorado uma vez que somente seria necessário
pegar a escada, caso a condição lâmpada não acender seja verdadeira:
d) Quarta versão (um pouco mais detalhada)
1. Acionar o interruptor;
2. Se a lâmpada não acender, então
2.1 Buscar uma lâmpada nova;
2.2 Pegar uma escada
2.3 Posicionar a escada debaixo da lâmpada;
2.4 Subir na escada até que a lâmpada possa ser alcançada;
2.5 Girar a lâmpada queimada no sentido anti-horário até que se solte;
2.6 Colocar a lâmpada nova girando-a no sentido horário;
2.7 Descer da escada;
Exercícios
1. Elaborar um algoritmo que mostre os passos necessários para trocar um pneu furado.
2. Um homem precisa atravessar um rio com um barco que possui capacidade apenas para
carregar ele mesmo e mais uma de suas três cargas, que são: um lobo, um bode e um maço de
alfafa. O que o homem deve fazer para conseguir atravessar o rio sem permite que fiquem em
uma margem, o lobo e a cabra, a cabra e a alfafa? Escreva um algoritmo mostrando a resposta,
ou seja, indicando todas as ações necessárias para efetuar a travessia segura.
I.1 – ALGORITMOS
Computadores muitas vezes chamados erroneamente de cérebro eletrônico, não têm, pelo
menos até agora, a capacidade de resolver por conta própria problemas. Assim, como outras
máquinas, eles precisam ser instruídos, para que através de um conjunto de ações possam
solucionar o problema.
Para resolvermos problemas, através de computador, é necessário que uma seqüência de
operações seja criada, semelhante aos roteiros apresentados anteriormente. A solução é obtida
através de duas etapas:
•
•
A criação de uma seqüência de operações que, quando executada, produz o resultado do
problema (a esta seqüência se dá o nome de algoritmo).
A execução, propriamente dita, da seqüência de operações.
“Um 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, as quais damos por certo que podem ser
executadas” (Guimarães e Lages).
4
Um algoritmo pode ser definido também como: “uma seqüência ordenada, sem
ambigüidade, de passos que levam à solução de um dado problema” (Tremblay e Bunt [5]).
As definições acima mostram que um algoritmo precisa:
•
•
•
Ter inicio e fim;
Ser descritas em termos de ações não ambíguas e bem definida;
Que as ações sigam uma seqüência ordenada.
Essas três características são entendidas de maneira fáceis, pois:
1. Ter inicio e fim: um computador não pode ficar infinitamente buscando uma solução
para o problema;
2. Ações não ambíguas e bem definidas: não poder haver dúvidas da ação a ser tomada.
Observe o passo no exemplo 1 - Coloque o pato numa assadeira com um pouco de óleo e
leve ao forno até dourar. O que significa um pouco de óleo: 1 ml., 2 ml, 10 litros, etc.
3. Seqüência ordenada: as ações devem seguir sempre a mesma ordem de execução, pois se
A ordem fosse aleatória não se pode garantir a solução adequada para o problema.
I.2 REPRESENTAÇÃO DE ALGORITMOS
O processo de resolução de um problema através de computador começa no entendimento
de forma clara do problema, para qual é projetado um algoritmo, que futuramente será codificado
em uma linguagem de programação, transformando-se dessa forma em um programa.
Fase de resolução do Problema
Fase de Implementação
(utilização de uma linguagem de Programação)
Assim, um algoritmo é representado de duas maneiras diferentes (mas equivalentes):
A primeira representação deve ser fácil para as pessoas, construir, modificar e testar as
ações (usada na construção em si).
A segunda deve ser entendida por computadores – é usada na fase de execução, quando da
transformação (codificação) em programa (tradução de um algoritmo em linguagem de
programação).
Situações semelhantes ocorrem em outras áreas do conhecimento. Na Arquitetura e na
Engenharia, os profissionais elaboram várias plantas (baixa, corte, situação, etc.) da mesma
5
edificação para diferentes fins. A edificação é a solução projetada e cada planta, embora diferente, é
a representação da mesma edificação.
1) A primeira representação: usadas pelas pessoas
A linguagem natural (português, inglês): utilizada nas receitas, instruções, etc.. Para
solução de problemas em computação apresenta um inconveniente: a ambigüidade de alguns
termos. Assim, restrições são impostas à linguagem natural, objetivando a redução de ambigüidade,
criando uma pseudolinguagem (ou, ainda, pseudocódigo, Portugol).
Representações gráficas: são bastante recomendáveis já que um desenho muitas vezes
substitui, com vantagem, mil palavras.
a) fluxograma
b) diagramas de Nassi-Shneidermam
c) método de Jackson
d) diagramas de Warnier-Or
2) A segunda representação: usada pelo computador
Utiliza-se uma linguagem de programação (Pascal, Cobol, C, Java, C# etc.), para representar
algoritmos, transformando-os em programas.
6
Capítulo II - CONSTRUÇÃO DE ALGORITMOS
Como vimos anteriormente quando queremos resolver um problema utilizando um
computador, devemos construir uma seqüência de passos (algoritmo) que conduz à solução do
problema. Uma das vantagens de utilizar algoritmos é que a partir dele o programador pode
codificá-lo em qualquer linguagem de programação.
OS PASSOS DE UM ALGORITMO
Um algoritmo é uma seqüência de passos, onde cada passo é de uma das três naturezas seguintes:
a) uma operação elementar;
b) uma operação de controle especificando uma seleção entre seqüências de passos;
c) uma operação de controle especificando a repetição de uma seqüência de passos;
A) OPERAÇÕES ELEMENTARES
A principal motivação para o desenvolvimento e uso dos computadores foi a necessidade de
manipular com eficiência grandes quantidade de dados. Os dados podem ser de diversos tipos:
primitivos, agregados homogêneos, agregados heterogêneos, registros, arquivos de registros, etc..
O conjunto dos tipos primitivos que compõe uma linguagem de programação pode mudar
dependendo da linguagem de programação. A seguir apresentamos os tipos primitivos que
normalmente são usados na construção de algoritmos.
Inteiro: denota todo o conjunto de valores numéricos que pertencem ao conjunto dos
números inteiros (negativos, positivos ou nulos)
Ex:
Quantidade de alunos: 50
Quantidade de professores de um curso: 35
Real: denota todo o conjunto de valores numéricos que pertença ao conjunto dos números
reais (negativos, positivos ou nulos)
Ex:
Média de um aluno: 8.5
Salário de uma pessoa: R$ 300.00
Caractere: denota todo o conjunto de valores que pertença ao conjunto dos caracteres
(Alfabéticos: A-Z, a-z; numéricos: 0-9; e especiais: ?, @," ~, etc.)
Ex:
Nome do aluno: "João Antônio"
Orientação: "usar somente caneta preta no preenchimento"
7
Lógico: denota duas situações (biestável: verdadeiro - falso, 0-1)
Ex:
Questão: Certa
Situação: Reprovado
1. Determinar qual o tipo de dado presente nas sentenças abaixo:
a) Há na porta do banheiro uma placa ‘HOMENS’.
b) O salário de Maria é de R$ 1030,98.
c) Uma maneira econômica de representar o sexo de uma pessoa é através de ‘F’ ou ‘M’.
d) A sala de aula fica no segundo andar.
e) O planeta Terra tem a forma quadrada.
Entende-se por operações elementares todos os cálculos com um resultado produzido,
entrada e saída de dados; movimentação de dados.
A.1) ATRIBUIÇÃO
A memória permite o armazenamento de dados (valores), que podem ser obtidos pelos
dispositivos de entrada e saída, ou calculados em operações no programa e posteriormente
colocados à disposição do usuário. Para que a memória possa armazenar os dados, uma área é
reservada na memória e associada a identificadores (nomes) usados no programa. A esta área se dá
o nome de Tabela de Símbolos (TS).
Exemplo:
Suponha que desejamos utilizar os valores numéricos 1 e 15. Para que esses possam
permanecer na memória e posteriormente serem utilizados para algum tipo de processamento, são
criados dois nomes SOMA e RESULTADO. Cada linha na Tabela de Símbolo (TS), representa uma
área na memória que guardará os valores e será manipulada (referenciada, identificada) pelo nome
dado (SOMA e RESULTADO), como representado a seguir:
Tabela de Símbolos
NOME
TIPO
SOMA
Inteiro
RESULTADO
Inteiro
VALOR
1
15
Quando necessitarmos de manipular o valor 15 devemos utilizar o nome Resultado e para o
valor 1, Soma.
A esses nomes criados pelo programador, são chamados de identificadores. Pois,
identificam o local (área de memória) onde o valor está armazenado.
8
A criação de nomes é livre?
Não, o programador deve seguir uma regra para construir os identificador, ou em outras
palavras os nomes utilizados no algoritmo.
Regra para Construção de Identificadores
Onde: LETRA = A ... Z
DÌGITO = 0 ... 9
Observações:
a) O primeiro caractere do nome sempre será uma letra;
b) Não existe uma restrição a quantidade de letras ou dígitos que formam o nome;
d) O nome não pode possuir espaço em branco ou símbolos especiais, tais como: ( ) # $ %
&*‘“=+[^ ´`;
e) Não poderão ser usados outros caracteres a não ser letras e números;
f) As letras sempre serão maiúsculas;
g) Não há acentuação dos nomes;
h) Não poderá ser um nome uma palavra reservada a uma instrução. Isto é, os nomes
devem ser diferentes de: inteiro, real, caractere, lógico, enquanto, faça, fimenquanto, declare, repetir, leia, escreva, etc..
1. Assinale os identificadores válidos:
a) (X),
f)KM/L
b) x
g)UYT
c) ah!
h) AB*C
d) "aluno"
i) CEP
e) #55
h) dia/mes/ano
Como especificamos cada linha da tabela de símbolos?
A associação do identificador ao local que receberá o dado na tabela de símbolo (definição
de cada linha da tabela) é chamada de declaração (é a compilação da declaração que produz uma
TS correspondente a um programa).
9
Em pseudocódigo as declarações podem ser representadas como:
DECLARE <identificador1, identificador2, ...> COMO <tipo>
Onde tipo define as características dos dados a serem manipulados, pode ser: inteiro, real, caracter,
lógico, entre outros.
Assim, para definirmos que SOMA e RESULTADO, são os nomes utilizados no algoritmo e
que ambos representarão números inteiros, é necessário utilizarmos a declaração:
DECLARE SOMA, RESULTADO COMO INTEIRO
Essa declaração produzirá a seguinte tabela:
NOME
SOMA
RESULTADO
TIPO
Inteiro
Inteiro
VALOR
Outros exemplos:
DECLARE X, Y, Z, TOTAL COMO REAL
NOME
X
Y
Z
TIPO
Real
Real
Real
VALOR
DECLARE T COMO LOGICO
NOME
T
TIPO
LÓGICO
VALOR
DECLARE A, B, TOTALH, TOTALM COMO INTEIRO
DECLARE X, K COMO REAL
DECLARE S COMO CARATER
NOME
A
B
TOTALH
TOTALM
X
K
S
TIPO
INTEIRO
INTEIRO
INTEIRO
INTEIRO
REAL
REAL
CARATER
VALOR
Observe que a declaração irá produzir uma tabela com os nomes definidos, porém os valores
não aparecem, não estão especificados.
10
Como os valores serão colocados na tabela?
A associação de um valor a um nome (declarado) se dá através da atribuição.
ATRIBUIÇÃO: associa um identificador a uma expressão (valor).
forma geral:
Identificador ← <Expressão>
O símbolo ← deve ser lido como “recebe o valor de”
Exemplo:
A ← 14
VALOR ← 10.5
SOMA ← 5
RESULTADO ← SOMA
Simulação do Funcionamento das Atribuições
NOME
ATRIBUTOS
Inteiro, variável
Real, variável
Inteiro, variável
Inteiro, variável
A
Valor
Soma
Resultado
VALOR
14
10.5
5
5
Analisando a forma geral da atribuição: Identificador ← <Expressão> percebe-se que é
possível construir expressões e atribuir a um nome. Por exemplo: A ← 14 + 10
Como essa instrução é executada?
A ← 14 + 10
Avalia-se, em primeiro lugar, a “expressão” à direita do sinal de atribuição (←)
14
10
+
A←
24
e em segundo lugar, o valor computado da expressão é atribuído ao identificador na TS.
Como o valor associado ao nome pode mudar durante a “execução” do algoritmo (ou
programa), usamos o termo variável.
11
Expressão pode ser: aritméticas, relacionais e lógicas.
A.1.1) EXPRESSÕES ARITMÉTICAS
São aquelas, que quando avaliadas, produzem resultados numéricos. Constituem na
aplicação de operadores aritméticos a operandos que têm valores numéricos.
Operadores Aritméticos:
+
*
/
(soma)
(subtração)
(multiplicação)
(divisão com resultado decimal)
Os operadores * / têm maior prioridade e os parênteses podem ser usados para alterar a
prioridade. As Expressões Aritméticas podem ser definidas como:
1. Os números são expressões aritméticas;
2. Variáveis numéricas com valor atribuído são expressões aritméticas;
3. Se X e Y são expressões aritméticas, e se não há conflito de tipos, então:
(X)
X*Y
X/Y
X+Y
X - Y são também expressões aritméticas.
4. Funções aritméticas são expressões aritméticas.
Exercícios
1. Para o algoritmo abaixo, crie a tabela de símbolos e mostre os valores para cada variável.
DECLARE S, R, T COMO INTEIRO
S ← 10
R ←1
T←R+S
S←T
R←S
2. Para o algoritmo abaixo, crie a tabela de símbolos e mostre os valores para cada variável.
DECLARE S, R, T COMO INTEIRO
S ← 10
R ←1
R←R+1
12
R←R+1
R←R+1
R←R+1
R←R+1
R←R+1
R←S
S ← R
3. Escreva algoritmos que resolvam as expressões matemáticas a seguir usando apenas
operações de adição e subtração.
a) 10 X 3
b) 25 X 7
c) 10 / 2
d) 15 / 5
A.1.2) EXPRESSÕES RELACIONAIS
Expressões Relacionais são na verdade comparações; quando avaliadas produzem resultado
Verdadeiro ou Falso. Como o resultado de uma expressão relacional é um valor lógico, logo ela é
uma expressão lógica (como definida anteriormente).
Operadores Relacionais:
>
>=
<
<=
=
<>
( maior que )
( maior ou igual)
( menor que)
( menor ou igual)
( igual a )
( não igual )
Expressões Relacionais podem ser definidas como:
1. Sendo A e B expressões aritméticas, então:
A>B
A >= B
A<B
A <= B
A=B
A <> B
(A maior que B)
(A maior ou igual a B)
(A menor que B)
(A menor ou igual a B)
(A igual a B)
(A não igual a B), são expressões relacionais.
Atenção: Pela definição apresentada acima, onde os operandos de uma expressão relacional,
são sempre expressões aritméticas, a expressão 5 > X > 1, não é válida !
A.1.3) EXPRESSÕES LÓGICAS (CONDIÇÕES)
Expressões lógicas (ou condições) são composições de operandos e operadores lógicos.
Operadores Lógicos: and
( e), or (ou), not (não)
13
Expressões Lógicas podem ser definidas como:
1. Variáveis lógicas com valor atribuído e constante lógica (verdade ou falso) são expressões
lógicas;
2. Expressões Relacionais são expressões lógicas;
3. Sendo A e B expressões lógicas, então:
(A)
A and B
A or B
not A, são expressões lógicas.
Resultado das operações Lógicas
verdade
Verdade verdade
Falso
falso
AND
falso
falso
falso
verdade
verdade verdade
falso
verdade
OR
falso
verdade
falso
NOT
verdade
falso
falso
verdade
A.1.3.1) NOÇÕES DE LÓGICA MATEMÁTICA
CONCEITO DE PROPOSIÇÃO
Proposição: sentenças declarativas afirmativas (expressão de uma linguagem) da qual tenha sentido
afirmar que seja verdadeira ou que seja falsa.
¾ A lua é quadrada.
¾ A neve é branca
¾ Matemática é uma ciência.
Não são objetos de estudo as sentenças interrogativas ou exclamativas.
OS SÍMBOLOS DA LING. DO CÁLCULO PROPOSICIONAL
Variáveis Proposicionais
letras latinas minúsculas p, q, r, s, .... para indicar as proposições (fórmulas atômicas) .
Exemplos:
A lua é quadrada : p
A neve é branca : q
Matemática é uma ciência: r
Conectivos Lógicos: As fórmulas atômicas podem ser combinadas entre si e, para representar tais
combinações usaremos os conectivos lógicos: e , ou , não
14
Exemplos:
A lua é quadrada e a neve é branca. : p e q
A lua é quadrada ou a neve é branca. : p ou q
A lua não é quadrada. : não p
Obtendo o valor lógico
7+5>7 OU 2=1 Î Verdadeiro
V
F
OU
V
7+5>7 E
V
2=1 Î Falso
F
NÃO( 2 = 1)Î Verdadeiro
F
E
NÃO
F
V
15
A.1.4 ) PRIORIDADE ENTRE OS OPERADORES
PRIORIDADE
0
1
2
3
4
5
6
7
8
OPERADORES
Parênteses e Funções
+ e – (operadores unários)
Potenciação
*e/
+ e – (soma e subtração)
Operadores relacionais
Não
And
Or
A.1.5 ) EXERCÍCIOS RESOLVIDOS
1. Sendo p = verdade, q = falso, r = verdade, avalie as expressões abaixo:
a)
b)
c)
d)
e)
f)
g)
h)
i)
peq
p ou r
p ou q
r ou (p e q) ou p
(r ou r) e (p ou p)
(p e r) ou (q e r)
não (p e q)
(não (p e r) ou (q e r))
(não p e não r) ou q
2. Suponha que A, B e C, I, J, K sejam variáveis. Dados A = 4.0, B = 6.0 e I = 3, qual seria o valor
final dos comandos seguintes?
a) C ← A * B – I
b) K ← I / 4 * 2
c) C ← B / A + 1
C= _______
K = _______
C = _______
d) K ← ( B / A + 2)
e) J ← ( A / ( 5 / I ))
K = _______
J = _______
3. Escreva o comando de atribuição para as expressões abaixo:
a)
a
+1
b
b
c
c)
e
d−
f
b)
a+b
c−d
a+
d) a +
b
c−d
16
4. Encontre os erros dos seguintes comandos de atribuição.
DECLARE A COMO LÓGICO
DECLARE B, C COMO REAL
DECLARE D COMO INTEIRO
A←B=C
D←B
C+1←B+C
C e B ← 3,5
5. Para o algoritmo abaixo monte a TS e indique que valores a variáveis assumirão:
DECLARE A, B, C COMO INTEIRO
A←0
B ← A + 10
C←B–1
A←1
B ← A + 10
C←B–1
6. Em quais dos seguintes pares é importante à ordem dos comandos? Em outras palavras, quando
se muda a ordem dos comandos, os resultados finais se alteram? ( Supor X # Y # Z)
a) X ← Y
Y←Z
Fazendo X ← Y e depois Y ← Z é o mesmo que Y ← Z e depois X ← Y ?
Resolvendo: 1º caso: X ← Y e depois Y ← Z
suponha X=1 Y =2 Z= 3
NOME
X
Y
Z
TIPO
Inteiro
Inteiro
Inteiro
VALOR
1
2
3
17
Fazendo X ← Y
NOME
X
Y
Z
TIPO
Inteiro
Inteiro
Inteiro
VALOR
2
2
3
TIPO
Inteiro
Inteiro
Inteiro
VALOR
2
3
3
Fazendo Y ← Z
NOME
X
Y
Z
Supondo X=1 Y =2 Z= 3 e fazendo X ← Y e depois Y ← Z, temos X=2, Y=3 e Z=3
2º caso : Y ← Z e depois X ← Y
Supondo X=1 Y =2 Z= 3, porém invertendo os comandos (fazendo Y ← Z e depois X ← Y )
Resolvendo: suponha X=1 Y =2 Z= 3
NOME
X
Y
Z
TIPO
Inteiro
Inteiro
Inteiro
VALOR
1
2
3
TIPO
Inteiro
Inteiro
Inteiro
VALOR
1
3
3
TIPO
Inteiro
Inteiro
Inteiro
VALOR
3
3
3
Fazendo Y ← Z
NOME
X
Y
Z
Fazendo X ← Y
NOME
X
Y
Z
Supondo X=1 Y =2 Z= 3 e fazendo Y ← Z e depois X ← Y, temos X= Y= Z=3
Concluindo: mudar a ordem desses comandos produzirá resultado diferente.
Faça os itens b, c, d
18
b) X ← Z
X←Y
c) X ← Y
Z←X
d) X ← Y
Z←Y
7. Uma conta telefônica é composta dos seguintes custos:
assinatura:
R$ 32,00
impulsos:
R$ 0,09 por impulso que exceder a 90
chamadas p/ celular: R$0,35 por impulso
Monte a fórmula para calcular o valor da conta para 254 impulsos e 23 chamadas para celular.
Elabore um algoritmo que calcula o valor total.
8. Um eletricista precisa comprar fio que irá passar, pelo telhado, por toda a diagonal de uma casa
de formato retangular. Como ele não tem condições de medir a diagonal com precisão, a solução
alternativa que ele encontrou foi medir os lados da casa, sabendo que a diagonal pode ser calculada
com base nos lados pelo Teorema de Pitágoras (a2 = b2 + c2). Considerando que a casa mede 11,5 x
6,3 metros, faça um algoritmo que calcule a quantidade mínima necessária de fio a ser comprada.
9. Um professor atribui pesos de 1 a 4 para as notas de quatro avaliações. A nota é calculada por
meio da média ponderada (N1 + N2*2 + N3*3 + N4*4)/10, onde N1 é a nota da primeira avaliação,
N2 a da segunda, etc..Um aluno tirou as seguintes notas: 8 - 7,5 - 10 - 9. Faça um algoritmo que
calcula a média deste aluno.
19
A.2) OPERAÇÕES DE ENTRADA E SAÍDA DE DADOS
As unidades de entrada e saída de dados são dispositivos que possibilitam a comunicação
entre o usuário e o computador. Através delas, o usuário consegue fornecer dados (entrada de
dados) para que a máquina possa processar, assim como, obtém resultados (saída de dados) do
processamento. As operações de entrada e saída permitem escrever algoritmos mais genéricos.
A utilização dessas unidades é representada nos algoritmos pelos passos de leitura e escrita.
A.2.1) LEITURA
Forma Geral:
LEIA <lista de variáveis>
Exemplo 1:
LEIA A
Simulação do Funcionamento da Leitura
Obtém do meio externo, a informação disponível para a leitura.
A forma como é feita a leitura depende de como os dados estão organizados.
ENTRADA DE DADOS:
32
LEIA A
e armazena na(s) variável(eis) definida.
NOME
A
TIPO
INTEIRO
VALOR
32
A leitura é uma atribuição cujos valores estão externos ao algoritmo.
Exemplo 2:
20
ENTRADA DE DADOS:
32
45
60
LEIA A,
B,
C
Resultado da leitura:
Valores lidos (32, 45, e 60) armazenados nas variáveis A, B, C (na TS) respectivamente.
NOME
ATRIBUTOS
Inteiro
Inteiro
Inteiro
A
B
C
VALOR
32
45
60
Exemplo 3 :
ENTRADA DE DADOS:
32
60
45
LEIA A,
LEIA C
B
Resultado da leitura:
Valores lidos (32, 45, e 60) armazenados nas variáveis A, B, C (na TS) respectivamente.
Exemplo 4 :
ENTRADA DE DADOS: 32
45
60
LEIA A
LEIA B
LEIA C
Valores lidos (32, 45, e 60) armazenados nas variáveis A, B, C (na TS) respectivamente.
21
Exemplo 5 :
ENTRADA DE DADOS: 32
60
45
LEIA A
LEIA B
LEIA C
Resultado da leitura:
Valores lidos (32, 60, e 45) armazenados nas variáveis A, B, C (na TS) respectivamente
Exemplo 6 :
ENTRADA DE DADOS:
32
60
LEIA A
LEIA B
LEIA C (não há definição de dado p/ C)
Resultado da leitura:
Valores lidos (32, 60) armazenados nas variáveis A, B respectivamente, porém como não há
especificação de dado para C, um erro de leitura de dados ocorre.
22
A.2.2) ESCRITA
Forma Geral:
ESCREVA <lista de variáveis>
Imprime no dispositivo de saída (vídeo, impressora, etc.) o conteúdo da(s) variável(eis)
especificadas. Textos explicativos podem também ser impressos e intercalados com as variáveis.
Exemplo:
ESCREVA A,B,C
NOME
A
B
C
ATRIBUTOS
Inteiro
Inteiro
Inteiro
Lista de variáveis
VALOR
32
45
60
32 45 60
Resultado da Escrita: Os valores contidos em A, B, C (na TS) são exibidos (vídeo,
impressora, etc.) na mesma linha.
ESCREVA A
ESCREVA B
ESCREVA C
NOME
A
B
C
ATRIBUTOS
Inteiro
Inteiro
Inteiro
VALOR
32
45
60
32
45
60
Resultado da Escrita: Os valores contidos em A, B, C (na TS) são exibidos (vídeo,
impressora, etc.), porém cada instrução ESCREVA produz uma linha na saída.
23
É possível utilizar mensagens no comando ESCREVA.
ESCREVA ‘VALOR =’, A
NOME
A
B
C
ATRIBUTOS
Inteiro
Inteiro
Inteiro
VALOR
32
45
60
VALOR = 32
Resultado da Escrita: O valor contido em A (na TS) é exibido (vídeo, impressora, etc.),
juntamente com a mensagem “VALOR =” .
ESCREVA ‘A =’, A
NOME
A
B
C
ATRIBUTOS
Inteiro
Inteiro
Inteiro
VALOR
32
45
60
A = 32
Resultado da Escrita: O valor contido em A (na TS) é exibido (vídeo, impressora, etc.),
juntamente com a mensagem “A =” .
ESCREVA ‘A =’, A, ‘B =’,B
NOME
A
B
C
ATRIBUTOS
Inteiro
Inteiro
Inteiro
VALOR
32
45
60
A = 32 B= 45
Resultado da Escrita: O valor contido em A e B (na TS) são exibidos (vídeo, impressora,
etc.), juntamente com a mensagem “A =” e ‘B=’ respectivamente, na mesma linha.
ESCREVA ‘A =’, A, ‘B =’, B
ESCREVA ‘C =’, C
24
NOME
A
B
C
ATRIBUTOS
Inteiro
Inteiro
Inteiro
VALOR
32
45
60
A = 32 B= 45
C = 60
Resultado da Escrita: O valor contido em A e B (na TS) são exibidos (vídeo, impressora,
etc.), juntamente com a mensagem “A =” e ‘B=’ respectivamente, na mesma linha e o valor de C é
apresentado em uma nova linha juntamente com sua mensagem.
ESCREVA ‘A =’, A
ESCREVA ‘B =’, B
ESCREVA ‘C =’, C
NOME
A
B
C
ATRIBUTOS
Inteiro
Inteiro
Inteiro
VALOR
32
45
60
A = 32
B = 45
C = 60
Resultado da Escrita: O valor contido em A, B e C (na TS) são exibidos (vídeo, impressora,
etc.), juntamente com as suas respectivas mensagens cada um em sua linha.
A instrução escreva pode ser usada para escrever mensagens, sem a utilização de variáveis.
ESCREVA ‘DADOS INVALIDOS’
DADOS INVALIDOS’
25
A.3) EXEMPLOS DE ALGORITMOS
1) Leia um valor inteiro e escreva um algoritmo para escrevê-lo.
Cria a área que
armazenará o valor a
ser lido
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
Escreve
o
valor
lido,
acompanhado de uma mensagem
Lê da entrada de
dados o valor
Simulação do algoritmo
DECLARE A COMO INTEIRO
NOME
A
TIPO
INTEIRO
VALOR
LEIA A
Lê um valor da entrada de dados. Para testar o algoritmo é válido utilizar valores numéricos
aleatórios, porém, o algoritmo deve funcionar para qualquer valor.
entrada de dados:
80
LEIA
A
e armazena na variável definida.
NOME
TIPO
INTEIRO
A
VALOR
80
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
A
ATRIBUTOS
Inteiro
VALOR
80
O VALOR LIDO = 80
26
2) Leia dois valores e escreva um algoritmo para escrevê-los.
Cria as variáveis que
armazenarão os valores
lidos
DECLARE A, B COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA B
ESCREVA ‘O VALOR LIDO = ‘, B
Lê da entrada de dados o
primeiro valor
Escreve o primeiro valor lido,
acompanhado de uma mensagem
Lê da entrada de dados
o segundo valor
Escreve o segundo valor lido,
acompanhado de uma mensagem
Simulação do algoritmo
DECLARE A, B COMO INTEIRO
NOME
A
B
TIPO
INTEIRO
INTEIRO
VALOR
LEIA A
Lê um valor da entrada de dados. Para testar o algoritmo é válido utilizar valores numéricos
aleatórios, porém, o algoritmo deve funcionar para qualquer valor inteiro lido. Observe que dois
valores são colocados na entrada de dados ( 78 e 65 ), um em cada linha.
entrada de dados:
78
65
LEIA
A
e armazena na variável definida.
NOME
A
B
TIPO
INTEIRO
INTEIRO
VALOR
78
27
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
A
B
TIPO
INTEIRO
INTEIRO
VALOR
78
O VALOR LIDO = 78
LEIA B
Lê um valor da entrada de dados. Observe que o segundo valor será lido, o primeiro já foi utilizado
pela primeira leitura.
entrada de dados:
65
LEIA
B
e armazena na variável definida.
NOME
A
B
TIPO
INTEIRO
INTEIRO
VALOR
78
65
ESCREVA ‘O VALOR LIDO = ‘, B
NOME
A
B
TIPO
INTEIRO
INTEIRO
VALOR
78
65
O VALOR LIDO = 78
O VALOR LIDO = 65
28
3) Leia dois valores e escreva um algoritmo para escrevê-los (variação da solução do exercício
anterior).
A modificação aqui apresentada está na utilização de apenas uma variável que armazenará os
valores lidos. Anteriormente os dois valores eram lidos através de duas variáveis ( A e B ). Isso
pode ser feito pelo seguinte motivo: após a escrita do valor contido em A, não há necessidade de
conservar esse valor em A, podendo ser substituído por outro.
Cria a variável que
armazenará os valores
lidos
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
Lê da entrada de dados o
primeiro valor
Escreve o primeiro valor lido,
acompanhado de uma mensagem
Lê da entrada de dados
o segundo valor
Escreve o segundo valor lido,
acompanhado de uma mensagem
Simulação do algoritmo
DECLARE A COMO INTEIRO
NOME
A
TIPO
INTEIRO
VALOR
LEIA A
Lê um valor da entrada de dados. Observe que dois valores são colocados na entrada de dados ( 78
e 65 )
entrada de dados:
78
65
LEIA
A
e armazena na variável definida.
NOME
A
TIPO
INTEIRO
VALOR
78
29
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
A
TIPO
INTEIRO
VALOR
78
O VALOR LIDO = 78
LEIA A
Lê um valor da entrada de dados. Observe que o segundo valor será lido, o primeiro já foi utilizado
pela primeira leitura.
entrada de dados:
65
LEIA
A
e armazena na variável definida. Observe que o valor armazenado em A ( 78 ) é “perdido”,
substituído pelo novo valor obtido através da leitura.
NOME
A
TIPO
INTEIRO
VALOR
65
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
A
TIPO
INTEIRO
VALOR
65
O VALOR LIDO = 78
O VALOR LIDO = 65
30
4) Leia dois valores inteiros e calcule a soma.
Cria as áreas (V1, V2) que
armazenarão os valores a serem lidos.
E a área que armazenará a soma
(RESULTADO)
Lê da entrada de dados os
valores que serão somados
DECLARE V1, V2, RESULTADO COMO INTEIRO
LEIA V1, V2
RESULTADO ← V1 + V2
ESCREVA ‘ VALORES LIDOS =’, V1, V2
ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO
Cria a atribuição, onde a expressão é
justamente a soma entre os dois valores
lidos, representados por V1 e V2 e
quando avaliada a expressão o valor
resultante
será
armazenado
em
RESULTADO
Escreve
os
valores
lidos,
acompanhados de uma mensagem
Escreve a soma (RESULTADO)
calculada
Simulação do algoritmo
DECLARE V1, V2, RESULTADO COMO INTEIRO
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
LEIA V1, V2
Lê dois valores da entrada de dados. Para testar o algoritmo utilizamos dois valores numéricos
aleatórios, porém, o algoritmo deve funcionar para qualquer valor.
entrada de dados:
3
5
LEIA V1,
V2
e armazena na variável definida.
31
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
3
5
RESULTADO ← V1 + V2
Avalia-se, em primeiro lugar, a “expressão” à direita do sinal de atribuição (←);
V1
V2
3
5
+
RESULTADO ←
8
e em segundo lugar, o valor computado da expressão é atribuído ao identificador.
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
3
5
8
ESCREVA ‘ VALORES LIDOS =’, V1, V2
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
3
5
8
VALORES LIDOS = 3 5
32
ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
3
5
8
VALORES LIDOS = 3 5
A SOMA DOS VALORES = 8
5) Leia dois valores inteiros e calcule a soma (variação da solução do exercício anterior).
DECLARE V1, V2, RESULTADO COMO INTEIRO
LEIA V1
LEIA V2
RESULTADO ← V1 + V2
ESCREVA ‘ VALORES LIDOS =’, V1, V2
ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO
A modificação aqui apresentada está na maneira como os valores são agora lidos.
Anteriormente os dois valores eram lidos através de uma única leitura ( LEIA V1, V2 ). Nessa
versão cada valor é lido através de uma leitura, isso provoca alteração na maneira de organizar os
dados na entrada de dados.
ANTES: os dados eram colocados na mesma linha ( uma leitura )
Entrada de dados:
3
5
LEIA V1, V2
AGORA: cada dado é colocado em uma linha ( duas leituras → duas linhas )
Entrada de dados:
3
5
33
Entrada de dados:
3
LEIA V1
5
LEIA V2
6) Leia dois valores inteiros e calcule a soma (variação da solução do exercício anterior).
DECLARE V1, V2, RESULTADO COMO INTEIRO
LEIA V1
LEIA V2
RESULTADO ← V1 + V2
ESCREVA ‘ PRIMEIRO VALOR LIDO =’, V1
ESCREVA ‘ SEGUNDO VALOR LIDO =’, V2
ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO
A modificação aqui apresentada está na maneira como os valores são agora escritos.
Anteriormente os dois valores eram escritos através de uma única escrita (ESCREVA ‘ VALORES
LIDOS =’, V1, V2). Nessa versão cada valor é apresentado através de uma escrita, isso provoca
alteração na maneira de apresentar os dados na saída.
ANTES
ESCREVA ‘ VALORES LIDOS =’, V1, V2
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
3
5
8
VALORES LIDOS = 3 5
34
AGORA
ESCREVA ‘ PRIMEIRO VALOR LIDO =’, V1
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
3
5
8
PRIMEIRO VALOR LIDO = 3
ESCREVA ‘ SEGUNDO VALOR LIDO =’, V2
NOME
V1
V2
RESULTADO
TIPO
INTEIRO
INTEIRO
INTEIRO
VALOR
3
5
8
PRIMEIRO VALOR LIDO = 3
SEGUNDO VALOR LIDO = 8
7) Escreva um algoritmo para calcular a área de um círculo, onde o valor do raio é lido.
Etapas para construção do algoritmo:
1- criar as variáveis;
2- calcular a área utilizando a fórmula: área = π * raio2, onde π = 3.1415
3- apresentar a área calculada.
Solução:
DECLARE RAIO, AREA COMO REAIS
LEIA RAIO
AREA ← 3.1415 * RAIO * RAIO
ESCREVA AREA
Variação da Solução
A solução acima pode ser alterada criando um nome ( PI ) que conterá o valor de π.
DECLARE RAIO, AREA, PI COMO REAIS
35
LEIA RAIO
PI ← 3.1415
AREA ← PI * RAIO * RAIO
ESCREVA AREA
A.4) EXERCÍCIOS PROPOSTOS
1. Como deveria estar organizados os dados, na entrada de dados, se no algoritmo as leituras
fossem:
a) LEIA K, MM, T
LEIA Y, I
b) LEIA J
LEIA T, O
c) LEIA NOME, SEXO, SALARIO
d) LEIA A
LEIA A
e) LEIA A, B
LEIA C
LEIA A,B
2. Como seriam impressos os dados, na saída de dados, se no algoritmo as impressões fossem:
a) ESCREVA A
ESCREVA B
b) ESCREVA ‘NAO SEI’
c) ESCREVA A, B, C
3. Com base nos dados abaixo, qual o valor final de cada variável:
a) LEIA K, MM, T
LEIA Y, I
ENTRADA DE DADOS: 1 2 3 4
56
b) LEIA J
LEIA T, O, R
ENTRADA DE DADOS: 1 2 3 4
567
c) LEIA NOME, SEXO, SALARIO
ENTRADA DE DADOS: 1 2 3 4 5
d) LEIA A
LEIA A
ENTRADA DE DADOS: 1 2 3 4
f) LEIA A
ENTRADA DE DADOS: 1
36
LEIA A
LEIA A, B
2
3 4
g) LEIA A, B
LEIA A
LEIA A, B
LEIA A,B
ENTRADA DE DADOS: 1 5
2
3 4
1 5
4. Simular a execução do seguinte algoritmo, como os valores de entrada apresentados abaixo:
DECLARE A, B, C COMO INTEIROS
DECLARE MEDIA COMO REAL
LEIA A, B, C
ESCREVA A, B, C
MEDIA ← ( A + B + C ) /3
ESCREVA MEDIA
LEIA A, B, C
ESCREVA A, B, C
MEDIA ← ( A + B + C ) /3
ESCREVA MEDIA
ENTRADA
4 2 6
10 6 0
7 8 7
5. Escreva um algoritmo que leia uma temperatura em graus Celsius e converta para graus
Fahrenheit, cuja fórmula de conversão é: ( 9 * graus Celsius + 160 ) /5.
6. Escreva um algoritmo que leia uma temperatura em graus Fahrenheit e converta para graus
Celsius, cuja fórmula de conversão é: ( graus Fahrenheit – 32) * (5/9).
7. Escreva um algoritmo que leia três valores, representando o comprimento, largura e altura
de uma caixa retangular e calcule o seu volume, cuja fórmula é: VOLUME =
COMPRIMENTO * LARGURA * ALTURA
8. Escreva um algoritmo que leia dois valores A e B, e efetue a troca dos valores de forma que
A passe a possuir o valor de B e B passa a possuir o valor de A. Apresente os valores antes e
depois da troca.
9. Escreva um algoritmo que leia dois valores PRESTAÇÂO e TAXA, representando o valor
de uma prestação e a taxa de juros cobrada pelo atraso. Calcule a prestação atrasada pela
fórmula: ATRASO = PRESTAÇÂO + ( PRESTAÇÂO * TAXA /100).
10. Escreva um algoritmo que leia dois valores, representando o raio e altura de uma lata e
calcule o seu volume, cuja fórmula é: VOLUME = 3.1415 * RAIO2 * ALTURA
11. Escreva um algoritmo para ler, calcular e escrever a média aritmética entre quatro números.
12. Escrever um algoritmo que lê 3 valores a, b, c que são lados de um triângulo e calcule a
área deste triângulo.
s( s − a )( s − b )( s − c ) , onde S = (A+B+C)/2
37
13. 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 de fábrica). Supondo que a percentagem
do distribuidor seja de 12% e os impostos de 45%, escrever um algoritmo para ler o custo de
fábrica do carro e escrever o custo ao consumidor.
14. Num curso, a nota final de um estudante é calculada a partir de seu desempenho em três
aspectos. Existe um exame que vale 30% da nota final, nota de trabalho que vale 20% da
nota final e o exame final que vale 50% da nota final. Escreva um algoritmo que leia as três
notas de um aluno e calcule sua nota final.
15. Escreva um algoritmo que calcule o valor da conversão em dólar de um valor lido em real.
O algoritmo deverá ler o valor da cotação do dólar e a quantidade de reais.
16. Escreva um algoritmo que dados os litros gastos, os quilômetros percorridos por um
automóvel e o valor do litro de combustível, calcule os gastos de combustível em Reais/km.
17. Escreva um algoritmo para ler o número de eleitores de um município, o número de votos
brancos, nulos e válidos. Calcular e escrever o percentual que cada um representa em
relação ao total de eleitores.
18. Escreva um algoritmo para ler o salário mensal de um funcionário e o percentual de reajuste.
Calcular e escrever o valor do novo salário.
19. Uma revendedora de carros usados, paga a seus funcionários vendedores, um salário fixo
por mês, mais uma comissão também fixa para cada carro vendido e mais 5% do valor das
vendas por ele efetuadas. Escrever um algoritmo que leia o número de carros por ele
vendidos, o valor total de suas vendas, o salário fixo e a comissão que recebe por carro
vendido. Escreva um algoritmo que calcule e escreva o salário mensal do vendedor.
20. Escreva um algoritmo que leia dois lados de um triângulo retângulo e calcula a hipotenusa.
21. Uma criança quer saber qual é a soma de todas as idades que ela já teve. Elaborar algoritmo
que lê uma idade qualquer e responde rapidamente a essa pergunta [fórmula para calcular a
soma dos N primeiros números inteiros: N (N+1)/2].
22. Uma conta telefônica é composta dos seguintes custos:
assinatura:
R$ 21,40
impulsos:
R$ 0,03 por impulso que exceder a 90
interurbanos
chamadas p/ celular: R$0,40 por impulso
elabore um algoritmo que lê os impulsos excedentes, valor de interurbanos e quantidade de
chamadas para celular e calcula o valor da conta.
B) SELEÇÃO
Também chamada de estrutura de decisão, a seleção é utilizada quando a execução de uma
seqüência de passos depende do valor de uma condição (trechos alternativos que são ou não
processados de acordo com o resultado da condição). A seleção pode ser de um ramo ou de dois
ramos.
38
B.1) SELEÇÃO DE UM RAMO
É utilizada quando uma seqüência de passos depender de uma condição verdadeira, e não há
seqüência a executar ser executada quando a condição for falsa. Forma geral:
SE <condição> ENTÃO
<seqüência de passos>
FIM-SE
Esquema de Funcionamento da Seleção de um Ramo
Exemplo:
1) Escreva um algoritmo que leia um valor e escreva-o caso seja maior que 10.
DECLARE A COMO INTEIRO
LEIA A
SE A > 10 ENTÃO
ESCREVA A
FIM-SE
A > 10 ?
SIM
ESCREVA A
NÃO
Simulação do algoritmo
DECLARE A COMO INTEIRO
NOME
A
TIPO
INTEIRO
VALOR
39
LEIA A
Lê um valor da entrada de dados.
entrada de dados:
78
LEIA
A
e armazena na variável definida.
NOME
A
TIPO
INTEIRO
VALOR
78
SE A > 10 ENTÃO
verifica se o valor contido em A é maior que 10, caso seja verdadeiro executa os comandos contidos
na seleção, neste caso: ESCREVA A. Caso contrário ignora os comandos contidos na seleção.
B.2) SELEÇÃO DE DOIS RAMOS
Utiliza-se quando se deseja executar uma seqüência de passos se uma condição é verdadeira,
e se executa uma outra seqüência se a condição é falsa.
Forma geral:
SE <condição> ENTÃO
<seqüência de passos1>
SENÃO
<seqüência de passos2>
FIM-SE
Esquema de Funcionamento da Seleção de dois Ramos
40
Exemplo:
1) Escreva um algoritmo que leia um valor e escreva-o indicando se ele é maior ou igual a 10 e
menor que 10.
DECLARE A COMO INTEIRO
LEIA A
SE A >= 10 ENTÃO
ESCREVA 'VALOR MAIOR OU IGUAL A 10' , A
SENÃO
ESCREVA 'VALOR MENOR QUE 10' , A
FIM-SE
NÃO
A >= 10 ?
ESCREVA 'VALOR
MENOR QUE 10' , A
SIM
ESCREVA 'VALOR
MAIOR OU IGUAL
A 10', A
41
B.3) EXEMPLOS DE ALGORITMOS
1) Faça um algoritmo que leia um numero inteiro e o imprima se ele for menor que 5.
DECLARE NUMERO COMO INTEIRO
LEIA NUMERO
SE (NUMERO < 5 ) ENTÃO
ESCREVA NUMERO
FIM-SE
2) Elaborar um algoritmo que lê uma nota e indique a situação do aluno. Se a nota obtida for de 6 a
10, aprovado; caso contrário, reprovado.
DECLARE NOTA COMO INTEIRO
LEIA NOTA
SE (NOTA < 6 ) ENTÃO
ESCREVA ‘ALUNO REPROVADO’
SENÂO
ESCREVA ‘ALUNO APROVADO’
FIM-SE
3) Elaborar um algoritmo que lê uma nota e indique a situação do aluno. Se a nota obtida for de 6 a
10, aprovado; se 4 ou 5.9 vs e menor que 4 reprovado.
DECLARE NOTA COMO INTEIRO
LEIA NOTA
SE (NOTA > 6 ) ENTÃO
ESCREVA ‘ALUNO APROVADO’
SENÂO
SE ( ( NOTA < 6 ) E ( NOTA >= 4) ENTÃO
ESCREVA ‘ALUNO EM VS’
SENÂO
ESCREVA ‘ALUNO REPROVADO’
FIM_SE
FIM-SE
4) Faça um algoritmo que leia dois números inteiros e descubra o maior.
DECLARE VALOR1, VALOR2 COMO INTEIRO
LEIA VALOR1, VALOR2
SE VALOR1> VALOR2 ENTÃO
ESCREVA VALOR1
SENÃO
ESCREVA VALOR2
FIM-SE
42
Variação da solução
DECLARE VALOR1, VALOR2, MAIOR COMO INTEIRO
LEIA VALOR1, VALOR2
SE VALOR1> VALOR2 ENTÃO
MAIOR← VALOR1
SENÃO
MAIOR← VALOR2
FIM-SE
ESCREVA MAIOR
5) Faça um algoritmo que obtenha três números reais e informe o maior deles.
DECLARE NUMA, NUMB, NUMC, MAIOR COMO REAL
LEIA (NUMA, NUMB, NUMC
SE NUMA > NUMB ENTÃO
MAIOR ← NUMA
SENÃO
MAIOR ← NUMB
FIM-SE
SE NUNC > MAIOR ENTÃO
MAIOR ←NUMC
FIM-SE
ESCREVA MAIOR
Variação da solução
DECLARE NUMA, NUMB, NUMC, MAIOR COMO REAL
LEIA NUMA, NUMB, NUMC
SE ((NUMA > NUMB) and (NUMA > NUMC)) ENTÃO
MAIOR ← NUMA
SENÃO
SE ((NUMB > NUMA) and (NUMB > NUMC)) ENTÃO
MAIOR ← NUMB
SENÃO
MAIOR ← NUMC
FIM-SE
FIM-SE
ESCREVA MAIOR
43
Aninhamentos
Um aninhamento é o fato de se ter qualquer uma seleção dentro de outra seleção. Para que
o aninhamento esteja correto é necessário que a construção interna esteja completamente
embutida na construção externa. Exemplo:
Aninhamento correto
SE < condição 1 > ENTÃO
SE < condição 2 > ENTÃO
SE < condição 3 > ENTÃO
<seqüência de passos 3 >
SENÃO
<seqüência de passos 4 >
FIM-SE
SENÃO
SE < condição 4 > ENTÃO
<seqüência de passos 5 >
SENÃO
SE < condição 5 > ENTÃO
<seqüência de passos 6 >
SENÃO
<seqüência de passos 7 >
FIM-SE
FIM-SE
FIM-SE
SENÃO
SE < condição 6 > ENTÃO
<seqüência de passos 8 >
SENÃO
SE < condição 7 > ENTÃO
<seqüência de passos 9 >
SENÃO
SE < condição 8 > ENTÃO
<seqüência de passos 10 >
SENÃO
<seqüência de passos 11 >
FIM-SE
FIM-SE
FIM-SE
FIM-SE
44
Aninhamento incorreto
SE < condição 1 > ENTÃO
SE < condição 2 > ENTÃO
SE < condição 3 > ENTÃO
< seqüência de passos 3 >
SENÃO
<seqüência de passos 4 >
SENÃO
SE < condição 4 > ENTÃO
<seqüência de passos 5 >
SENÃO
SE < condição 5 > ENTÃO
Aninhamento
<seqüência de passos 6 >
errado.
SENÃO
Observe as
<seqüência de passos 7 >
linhas se
FIM-SE
cruzando
FIM-SE
FIM-SE
FIM-SE
FIM-SE
O FIM-SE que deveria
estar nessa posição e foi
colocado erradamente em
outra posição
1) Fazer um algoritmo que leia três valores inteiros, distintos entre si, determine e imprima o menor
deles:
DECLARE A,B,C, MENOR COMO INTEIRO
LEIA A, B,C
determine o menor número
ESCREVA MENOR
SE A<B e A<C ENTÃO
MENOR ←A
SENÃO
determine o menor dentre B e C
FIM-SE
SE B < C ENTÃO
MENOR ← B
SENÃO
MENOR ←C
FIM-SE
45
2) Dados três valores inteiros X,Y,Z, verificar se eles podem ser os comprimentos dos lados de um
triângulo e, se forem , verificar se é um triângulo eqüilátero, isósceles ou escalenos. Se eles não
formarem um triângulo, escrever uma mensagem. Sabe-se que o comprimento de cada lado de um
triângulo é menor do que a soma dos comprimentos dos outros dois lados.
DECLARE X,Y,Z COMO INTEIRO
LEIA X,Y,Z
SE ((X<Y+Z) e (Y <X+Z) e (Z<X+Y)) ENTÃO
verifique o tipo do triângulo
SENÃO
Escreva ‘Não Existe Triângulo’
FIM-SE
SE X=Y E X = Z ENTÃO
ESCREVA ‘TRIANG. QUILATERO’
SENÃO
Verifique se ele é escaleno ou isóscele
FIM-SE
SE X=Y OU X = Z OU Y = Z ENTÃO
ESCREVA ‘TRIANG. ISOSCELES’
SENÃO
ESCREVA ‘TRIANG. ISCALENO’
FIM-SE
3) Dados três valores distintos, coloca-los em ordem crescente:
DECLARE L, M, N, AUXILIAR COMO INTEIRO
LEIA L, M, N
Armazene em L o menor valor
Armazene em M o valor intermediário e em N o maior valor
ESCREVA L,M,N
SE M > N ENTÃO
AUXILIAR – M
M←N
N ← AUXILIAR
FIM-SE
AUXILIAR ← L
L←M
M ←AUXILIAR
AUXILIAR ← L
L←N
N ← AUXILIAR
SE L > M ou L > N ENTÃO
SE M < N ENTÃO
troque L com M
SENÃO
troque L com N
FIM-SE
FIM-SE
46
B.4) EXERCÍCIOS PROPOSTOS
1. Escreva um algoritmo que leia um valor verifique se ele se encontra no intervalo entre (5 ,20].
2. Elaborar um algoritmo que leia uma letra que pode ser ‘F’ ou ‘J’ e mostra a mensagem “pessoa
física”, “pessoa jurídica” ou "tipo de pessoa inválido", conforme o caso.
3. Elaborar um algoritmo que lê 2 valores a e b e os escreve com a mensagem: ‘São múltiplos’ ou
‘Não são múltiplos’.
4. Tendo como dados de entrada a altura e o sexo de uma pessoa (‘M’ masculino e ‘F’ feminino),
construa um algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas:
- para homens: (72.7*h)-58
- para mulheres: (62.1*h)-44.7
5. Um banco concederá um crédito especial aos seus clientes, variável com o saldo médio no
último ano. Faça um algoritmo que leia o saldo médio de um cliente e calcule o valor do crédito
de acordo com a tabela abaixo. Mostre uma mensagem informando o saldo médio e o valor do
crédito.
Saldo médio Percentual
de 0 a 500 nenhum crédito
de 501 a 1000 20% do valor do saldo médio
de 1001 a 1600 30% do valor do saldo médio
acima de 1601 40% do valor do saldo médio
6. Elabore um algoritmo que lê um número que representa uma senha, verifica se a senha está
correta ou não, comparando-a com a senha 34567, e informa "Acesso autorizado" ou "Acesso
negado", conforme o caso.
7. O departamento que controla o índice de poluição do meio ambiente mantém 3 grupos de
indústrias que são altamente poluentes do meio ambiente. O índice de poluição aceitável varia de
0,05 até 0,25. Se o índice sobe para 0,3 as indústrias do 1o grupo são intimadas a suspenderem
suas atividades, se o índice cresce para 0,4 as do 1o e 2o grupo são intimadas a suspenderem
suas atividades e se o índice atingir 0,5 todos os 3 grupos devem ser notificados a paralisarem
suas atividades. Escrever um algoritmo que lê o índice de poluição medido e emite a notificação
adequada aos diferentes grupos de empresas.
8. Um sistema de equações lineares da forma :
Ax + By = C
Dx + Ey = F
pode ser resolvido utilizando-se as seguintes fórmulas.
EC - BF
X = -----------------AE - BD
e
AF - CD
Y = --------------------------AE - BD
47
Escreva um algoritmo para ler o conjunto de coeficientes (A, B, C, D, E, F) e imprimir a solução,
ou seja, X e Y. Verifique as situações onde X e Y não podem ser determinados.
9. Elaborar um algoritmo que lê uma altura e mostra uma mensagem conforme a faixa de altura:
menos que 1,60
de 1,60 a 1,85
mais que 1,85
“baixa estatura”
“estatura normal”
“alta estatura”
10.Uma faculdade atribui menções aos alunos conforme a faixa de notas que tenha atingido:
9,0 a 10:
SS (superior)
7,0 a 8,9:
MS (médio superior)
5, 0 a 6,9:
MM (médio)
3,0 a 4,9:
MI (médio inferior)
0,1 a 2,9:
II (inferior)
0:
SR (sem rendimento).
Faça um algoritmo que lê a nota e informa a menção.
11.Um imposto é calculado com base na seguinte tabela:
Até 1.200,00
de 1.201,00 a 2.500,00
de 2.501,00 a 5.000,00
acima de 5.000,00
isento
10%
15%
20%.
Escreva um algoritmo que leia o valor base e calcule o imposto a pagar.
12.Faça um algoritmo que leia as 3 notas de um aluno e calcule a média final deste aluno.
Considerar que a média é ponderada e que o peso das notas é: 2,3 e 5, respectivamente. Se a nota
obtida for de 6 a 10, aprovado; se 4 ou 5.9, vs e menor que 4 reprovado.
13.Um ano é bissexto se for divisível por 4 exceto os séculos, que são bissextos se forem múltiplos
de 400. Escreva um algoritmo que determina se um ano é bissexto.
14.Escrever um algoritmo que lê três valores representado o dia, mês e ano de uma data e verifica
se ela está correta. Supor que o mês de fevereiro tem 29 dias.
15.Escrever um algoritmo que lê um valor em reais e calcula qual o menor número possível de
notas de 100, 50, 10, 5 e 1 em que o valor lido pode ser decomposto. Escrever o valor lido e a
relação de notas necessárias.
16.Dadas 8 bolas tendo uma deles peso diferente das demais. Dizer qual é essa bola e se ela é mais
pesada ou mais leve que as outras e qual o seu peso. Imprimir também o peso de todas as bolas.
48
C) OPERAÇÕES DE REPETIÇÃO
1) Leia 5 valores e escreva um algoritmo para escrevê-los.
O algoritmo é construído criando apenas uma variável cujos valores são lidos, escritos e
descartados pela leitura do próximo valor.
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
ENTRADA DE DADOS
17
34
1
23
78
O problema com a solução anterior, é que se a quantidade de valores a serem lidos crescer, o
número de passos do algoritmo também crescerá. Por exemplo: Leia 10 valores e escreva um
algoritmo para escrevê-los.
DECLARE A COMO INTEIRO
ENTRADA DE DADOS
LEIA A
17
ESCREVA ‘O VALOR LIDO = ‘, A
34
LEIA A
1
ESCREVA ‘O VALOR LIDO = ‘, A
23
LEIA A
78
ESCREVA ‘O VALOR LIDO = ‘, A
90
LEIA A
2
ESCREVA ‘O VALOR LIDO = ‘, A
5
LEIA A
8
ESCREVA ‘O VALOR LIDO = ‘, A
15
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
Observe no algoritmo anterior que um conjunto de passos se repete várias vezes:
49
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
Quando isso acontecer, isso é, uma seqüência de passos repetida, podemos utilizar as
estruturas de repetição, que podem ser de 2 tipos: Número conhecido de repetição e número não
conhecido de repetição.
C.2) NÚMERO CONHECIDO DE REPETIÇÕES
Essa estrutura de repetição é utilizada quando se conhece exatamente o número de vezes que
a seqüência será repetida. Forma geral:
REPETIR <especificação de vezes>
<seqüência de passos a ser repetida >
FIM-REPETIR
No exemplo anterior, colocamos a seqüência de passos a ser repetida dentro da repetição:
DECLARE A COMO INTEIRO
REPETIR <especificação de vezes>
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
CORPO DA REPETIÇÃO
FIM-REPETIR
e especificamos o número de vezes que a seqüência deverá ser repetida:
<especificação de vezes>
<incremento>
<variável>
=
<
valor
inicial
>,
<valor
final>,
50
< variável > é um identificador ( nome ) que deve ser criado pelo programador. Essa variável
também é chamada de controle de repetição.
< valor inicial > é um valor inteiro. É o primeiro valor que a variável de controle de repetição
assumirá.
< valor final > é um valor inteiro. É o valor limite que a variável de controle de repetição assumirá.
<incremento> é um valor inteiro. É valor que será adicionado ao valor variável de controle de
repetição.
Exemplos:
a)
I = 1, 10, 1
valores de I = 1 2 3 4 5 6 7 8 9 10
Quantidade de valores de I ( 10 valores ), logo uma repetição seria executada 10 vezes.
b) I = 10, 20, 1
valores de I = 10 11 12 13 14 15 16 17 18 19 20
Quantidade de valores de I ( 11 valores ), logo uma repetição seria executada 11 vezes.
c) I = 11, 20, 1
valores de I = 11 12 13 14 15 16 17 18 19 20
Quantidade de valores de I ( 10 valores ), logo uma repetição seria executada 10 vezes.
d) K = 1, 10, 2
valores de K = 1 3 5 7 9
Quantidade de valores de K ( 5 valores ), logo uma repetição seria executada 5 vezes.
e) JL = 1, 3, 1
valores de JL = 1 2 3
Quantidade de valores de JL ( 3 valores ), logo uma repetição seria executada 3 vezes.
f) JL = 1011, 1013, 1
valores de JL = 1011 1012 1013
Quantidade de valores de JL ( 3 valores ), logo uma repetição seria executada 3 vezes.
g) JL = 100, 102, 1
valores de JL = 100 101 102
Quantidade de valores de JL ( 3 valores ), logo uma repetição seria executada 3 vezes.
h) P = N, J, K
A especificação dos valores de P e consequentemente o número de
repetições dependerá de:
1. É necessário que todas as variáveis (N, J, K) estejam declaradas como inteiras;
2. Que tenham valores inteiros na TS.
Obs.: O número de repetição está em função do número de valores que a variável de controle
assumir.
51
No exemplo do algoritmo anterior:
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
EQUIVALE
AO
ALGORITMO
DECLARE A, I COMO INTEIRO
REPETIR I = 1, 10, 1
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
FIM-REPETIR
Esquema de Funcionamento da Repetição Repetir
52
A partir do esquema de funcionamento anterior podemos simular o algoritmo abaixo:
DECLARE A, I COMO INTEIRO
REPETIR I = 1 ,10, 1
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
FIM-REPETIR
REPETIR I = 1 ,
10, 1
Inicializa a variável de controle
I←1
Executa a seqüência de passos
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
REPETIR I = 1 , 10, 1
Incrementa a variável de controle
I←I+ 1
Verifica se o novo valor da variável
de controle ultrapassou o valor
do limite
Sim
Sair da Repetição
Simulação do algoritmo
DECLARE A, I COMO INTEIRO
NOME
A
I
TIPO
INTEIRO
INTEIRO
VALOR
53
REPETIR I = 1 ,10, 1
Inicializa variável de controle ( passo vindo do esquema de func. da repetição), com valor inicial
I = 1, 10, 1
NOME
A
I
TIPO
INTEIRO
INTEIRO
I←1
VALOR
1
LEIA A
Lê um valor da entrada de dados. Observe que os dez valores são colocados na entrada de dados (
17 34 1 23 78 90 2 5 8 15 )
entrada de dados:
NOME
A
I
17
34
1
23
78
90
2
5
8
15
TIPO
INTEIRO
INTEIRO
LEIA
A
VALOR
17
1
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
A
TIPO
INTEIRO
VALOR
78
O VALOR LIDO = 17
54
FIM-REPETIR retorna ao passo REPETIR I = 1 ,10, 1
REPETIR I = 1 ,10, 1
incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de
incremento.
I←I+1
NOME
A
I
TIPO
INTEIRO
INTEIRO
I←1+1
2
VALOR
17
2
Verifica se o novo valor de I ( 2 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse para a
repetição, caso negativo continue executando a repetição, no primeiro passo dentro da repetição.
LEIA A
entrada de dados:
NOME
A
I
34
1
23
78
90
2
5
8
15
TIPO
INTEIRO
INTEIRO
LEIA
A
VALOR
34
2
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
A
I
TIPO
INTEIRO
INTEIRO
VALOR
34
2
O VALOR LIDO = 17
O VALOR LIDO = 34
FIM-REPETIR retorna ao passo REPETIR I = 1 ,10, 1
55
REPETIR I = 1 ,10, 1
incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de
incremento.
I←I+1
NOME
A
I
I←2+1
TIPO
INTEIRO
INTEIRO
3
VALOR
17
3
Verifica se o novo valor de I ( 3 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse, parar a
repetição, caso negativo continue executando a repetição, no primeiro passo dentro da repetição
(LEIA A).
Assim, a repetição será executada ...
Pularemos os passos intermediários e apresentamos a finalização da repetição ( I está com o valor 9,
penúltima repetição e já foram lidos os 9 valores da entrada).
REPETIR I = 1 ,10, 1
incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de
incremento.
I←I+1
NOME
A
I
TIPO
INTEIRO
INTEIRO
I←9+1
10
VALOR
8
10
Verifica se o novo valor de I ( 10 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse, parar
a repetição, caso negativo continue executando a repetição, no primeiro passo dentro da repetição.
LEIA A
(último valor a ser lido, observe que todos os valores da entrada de dados foram utilizados, lidos
através das leituras )
entrada de dados:
NOME
A
I
15
TIPO
INTEIRO
INTEIRO
LEIA
A
VALOR
15
10
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
A
TIPO
INTEIRO
VALOR
15
56
I
INTEIRO
10
O VALOR LIDO = 17
O VALOR LIDO = 34
O VALOR LIDO = 1
O VALOR LIDO = 23
O VALOR LIDO = 78
O VALOR LIDO = 90
O VALOR LIDO = 2
O VALOR LIDO = 5
O VALOR LIDO = 8
O VALOR LIDO = 15
FIM-REPETIR retorna ao passo REPETIR I = 1 ,10, 1
REPETIR I = 1 ,10, 1
incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de
incremento.
NOME
A
I
I←I+1
TIPO
INTEIRO
INTEIRO
I ← 10 + 1
VALOR
11
17
11
Verifica se o novo valor de I ( 11 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse para a
repetição, caso negativo continue executando a repetição. Como ultrapassa encerra a repetição e
continua executando o algoritmo no próximo passo. Como este não existe passo após a repetição, o
algoritmo é encerrado.
C.2.1) LEITURA DE DADOS X REPETIÇÂO
57
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
ENTRADA DE DADOS
17
( 1ª leitura )
34
( 2ª leitura )
1
( 3ª leitura )
23
( 4ª leitura)
78
( 5ª leitura )
90
( 6ª leitura)
2
( 7ª leitura )
5
( 8ª leitura )
8
( 9ª leitura )
15
( 10ª leitura )
DECLARE A, I COMO INTEIRO
REPETIR I = 1 ,10, 1
LEIA A
REPETIÇÃO
VALOR DO I
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
1 2 3 4 5 6 7 8 9 10
ESCREVA ‘O VALOR LIDO = ‘, A
FIM-REPETIR
58
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
ENTRADA DE DADOS
17
( 1ª leitura )
34
( 2ª leitura )
1
( 3ª leitura )
23
( 4ª leitura)
78
( 5ª leitura )
90
( 6ª leitura)
2
( 7ª leitura )
5
( 8ª leitura )
8
( 9ª leitura )
15
( 10ª leitura )
DECLARE A, I COMO INTEIRO
REPETIR I = 11 ,20, 1
LEIA A
REPETIÇÃO
VALOR DO I
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
11 12 13 14 15 16 17 18 19 20
ESCREVA ‘O VALOR LIDO = ‘, A
FIM-REPETIR
Observe que o valor do I não influência no valor que será lido.
O primeiro valor lido será obtido pela primeira leitura (no primeiro algoritmo ) que é também
obtido através da leitura quando a repetição executa pela primeira vez (segundo algoritmo) .
59
C.2.2) Exercícios Resolvidos
1. Faça um algoritmo que obtenha 15 números inteiros e calcule o somatório.
DECLARE VALOR, SOMA COMO INTEIRO
SOMA ← 0
REPETIR J = 1, 15 , 1
LEIA VALOR
SOMA ← SOMA + VALOR
FIM-REPETIR
ESCREVA SOMA
2. Faça um algoritmo que leia 25 números inteiros e calcule o somatório dos números pares.
DECLARE VALOR, SOMA COMO INTEIRO
SOMA ← 0
REPETIR J = 1, 25 , 1
LEIA VALOR
SE ( MOD( VALOR , 2) = 0 ENTÃO
SOMA ← SOMA + VALOR
FIM-SE
FIM-REPETIR
ESCREVA SOMA
3. Faça um algoritmo que obtenha 5 números inteiros e informe o maior deles.
DECLARE VALOR, MAIOR COMO INTEIRO
LEIA VALOR
MAIOR ← VALOR
REPETIR J = 1,4, 1
LEIA VALOR
SE VALOR > MAIOR ENTÃO
MAIOR ← VALOR
FIM-SE
FIM-REPETIR
ESCREVA MAIOR
60
C.2.3) EXERCÍCIOS PROPOSTOS
1. Dizer quantas repetições são especificadas e que valores as variáveis de controle de repetição
assumirão, pelos seguintes comandos:
a)
b)
c)
d)
e)
REPETIR I = 8, 10, 2
REPETIR J = 1, 2, 100
REPETIR K = 2, 2, 2
REPETIR A = 15, 11, 1
REPETIR O = 1, 12, 3
2. Para os algoritmos a seguir :
DECLARE I, V1, V2, V3 COMO INTEIROS
LEIA V1
LEIA V2, V3
REPETIR I = 1, 5, 2
LEIA V1, V2 , V3
ESCREVA V1, V2, V3
FIM-REPETIR
DECLARE I, V1, V2 COMO INTEIROS
REPETIR I = 1, 5, 1
LEIA V1, V2
ESCREVA V1, V2
FIM-REPETIR
DECLARE I, V1, V2 COMO INTEIROS
LEIA V1
REPETIR I = 2, 1, 1
LEIA V1, V2
ESCREVA V1, V2
FIM-REPETIR
DECLARE I, V1, V2 COMO INTEIROS
LEIA V1
REPETIR I = 2, 4, 1
LEIA V1, V2
FIM-REPETIR
ESCREVA V1, V2
DECLARE I, V1, V2 COMO INTEIROS
LEIA V1, V2
ESCREVA V1, V2
REPETIR I = 1, 4, 1
LEIA V1, V2
ESCREVA V1, V2
FIM-REPETIR
ESCREVA V1, V2
61
Responda
a)
b)
c)
d)
e)
Quantos valores são lidos para V1 ?
Qual o total de valores lidos ?
Quantas linhas são impressas ?
Que valores I possuirá ?
Qual deve ser a organização dos dados de entrada ?
3. Considerando os algoritmos do exercício anterior e com a seguinte organização de entrada:
ENTRADA DE DADOS
1
2
2
4
5
6
7
8
8
10
Responda:
a) Quais os valores são lidos para V1, V2, V3 ?
b) Quais os valores impressos ?
c) Verificar a validade das situações seguintes
c.1)
TS
V1
INTEIRO 3
V2
INTEIRO 4
I
INTEIRO 2
1
3
2
4
c.2)
TS
V1
V2
I
INTEIRO
INTEIRO
INTEIRO
9
10
6
1 2
3 4
5 6
7 8
62
4. Para o algoritmo abaixo e a entrada de a complete as informações:
DECLARE I, V1, V2 COMO INTEIROS
REPETIR I = 1, 5, 1
LEIA V1, V2
ESCREVA V1, V2
FIM-REPETIR
ENTRADA DE DADOS
1
2
3
4
5
6
7
8
9
10
TS
V1
V2
I
INTEIRO
INTEIRO
INTEIRO
1
3
5
?
?
2
4
5. Escreva um algoritmo que leia cinco temperaturas em graus Celsius e converta cada uma para
grau Fahrenheit, cuja fórmula de conversão é: ( 9 * graus Celsius + 160 ) /5.
6. Escreva um algoritmo que leia três temperaturas em grau Fahrenheit e converta cada uma para
graus Celsius, cuja fórmula de conversão é: ( graus Fahrenheit – 32) * (5/9).
7. Escreva um algoritmo que leia seis conjuntos de três valores, representando o comprimento,
largura e altura de caixas retangulares e calcule o volume de cada uma, cuja fórmula é:
VOLUME = COMPRIMENTO * LARGURA * ALTURA
8. Escreva um algoritmo que leia oito conjuntos de dois valores A e B, e efetue a troca dos valores
de forma que A passe a possuir o valor de B e B passa a possuir o valor de A. Apresente os
valores antes e depois da troca, para cada conjunto.
9. Escreva um algoritmo que leia quinze conjuntos de dois valores PRESTAÇÂO e TAXA,
representando o valor de uma prestação e a taxa de juros cobrada pelo atraso. Calcule cada
prestação atrasada pela fórmula: ATRASO = PRESTAÇÂO + ( PRESTAÇÂO* TAXA /100)
10. Escreva um algoritmo que leia cem conjuntos de dois valores, representando o raio e altura de
cem latas e calcule cada volume, cuja fórmula é: VOLUME = 3.1415 * RAIO2 * ALTURA
63
11. Escreva um algoritmo que leia 32 conjuntos de três valores, representando as duas bases e a
altura de 32 trapézios e calcule cada área, cuja fórmula é: ÁREA = (BASE1 + BASE2) /2 *
ALTURA
12. Escreva um algoritmo para ler 40 valores lidos dois a dois, calcular e escrever a média
aritmética entre cada par de números.
13. Escrever um algoritmo que lê 3 valores a, b, c que são lados de um triângulo e calcule a área
deste triângulo. O total de triângulos é igual 55.
s( s − a )( s − b )( s − c )
onde s = semiperímetro
14. Para A e B inteiros e maiores que zero, fazer um algoritmo para o cálculo de A elevado à
potência de B usando multiplicações sucessivas.
C.3) OUTRA UTILIZAÇÃO DA INSTRUÇÂO REPETIR
Além de utilizar a instrução REPETIR para produzir repetições de conjuntos de passos é
possível utilizá-la para outros fins, graças a uma característica bastante interessante; ao definir uma
repetição o programador deve especificar o número de repetições (por exemplo: I = 1,3,1). A partir
dessa especificação a instrução produz os valores automaticamente. Essa característica pode ser
utilizada para resolver certos tipos de problema.
Exemplo 1: Escrever um algoritmo que gere e imprima os números de 1 até 10.
DECLARE I COMO INTEIRO
REPETIR I = 1 ,10, 1
ESCREVA ‘O VALOR I = ‘, I
FIM-REPETIR
O VALOR I =
O VALOR I =
O VALOR I =
O VALOR I =
O VALOR I =
O VALOR I =
O VALOR I =
O VALOR I =
O VALOR I =
O VALOR I =
1
2
3
4
5
6
7
8
9
10
Observe que não há leitura de dados
Exemplo 2: Escrever um algoritmo que gere e imprima os números pares de 1 até 10.
64
DECLARE I COMO INTEIRO
REPETIR I = 2 ,10, 2
ESCREVA ‘O VALOR I = ‘, I
FIM-REPETIR
Valores de I que serão impressos
2 4 6 8 10
Exemplo 3: Escrever um algoritmo que gere e imprima os números impares de 1 até 10.
DECLARE I COMO INTEIRO
REPETIR I = 1 ,10, 2
ESCREVA ‘O VALOR I = ‘, I
FIM-REPETIR
Valores de I que serão impressos
1 3 5 7 9
Exemplo 4: Escrever um algoritmo que gere e imprima o somatório de 1 até 10.
DECLARE I , S COMO INTEIRO
S ←0
REPETIR I = 1 ,10, 1
S←S+I
FIM-REPETIR
ESCREVA S
REPETIÇÃO
I
S
0
1ª
1
1
2ª
2
3
3ª
3
6
Valor de S que será impresso
4ª
4
10
5ª
5
15
6ª
6
21
7ª
7
28
8ª
8
36
9ª
9
45
10ª
10
55
55
Exemplo 5: Escrever um algoritmo que gere e imprima o fatorial de 5.
DECLARE I , S COMO INTEIRO
S ←1
REPETIR I = 1 , 5 , 1
S←S*I
FIM-REPETIR
ESCREVA S
REPETIÇÃO
I
S
1
1ª
1
1
Valor de S que será impresso
2ª
2
2
3ª
3
6
4ª
4
24
5ª
5
120
120
Exemplo 6: Escrever um algoritmo que gere e imprima o fatorial de N (considere N > 1).
65
DECLARE I , S, N COMO INTEIRO
LEIA N
S ←1
ENTRADA DE DADOS
REPETIR I = 1 , N , 1
5
S←S*I
FIM-REPETIR
Observe: que o valor de N está sendo lido e usado como limite
ESCREVA S
da repetição
REPETIÇÃO
I
S
N
1
5
1ª
1
1
Valor de S que será impresso
2ª
2
2
3ª
3
6
4ª
4
24
5ª
5
120
120
C.3.1) EXERCÍCIOS PROPOSTOS
1. Para o algoritmo e a entrada de dados a seguir :
DECLARE I, SI, SV, V COMO INTEIROS
SI ←0
SV ← 0
REPETIR I = 1,10,1
LEIA V
SI ← SI + I
SV ← SV + V
FIM-REPETIR
ESCREVA SI
ESCREVA SV
ENTRADA DE DADOS
10
9
8
7
6
5
4
3
2
1
Responda:
a) Quantos valores são lidos para V ?
b) Em que momentos é verdadeira a igualdade SI = SV
c) Para que valores de I é verdade que SV é múltiplo SI ?
2. Escrever um algoritmo que escreve os números pares entre 100 e 200.
3. Escrever um algoritmo que escreve a soma dos números pares entre 0 e 100.
4. Escrever um algoritmo que escreve a soma dos números que não são múltiplos de 13 entre 100 e
200.
66
5. Escrever um algoritmo que escreve a soma dos números múltiplos de 7 entre 100 e 200.
6. Escrever um algoritmo que gera os números de 1000 a 1999 e escreve aqueles que divididos por
11 dão um resto igual a 5.
7. Escrever um algoritmo que lê 10 valores para n, um de cada vez, todos inteiros e positivos, e
para cada n lido, escreva a tabuada de 1 até n de n.
1 x n = n
2 x n = 2n
...
n x n = n2
8. Escrever um algoritmo que lê 5 valores para a, um de cada vez, e conta quantos destes valores
são negativos, escrevendo esta informação.
9. Escrever um algoritmo que lê 150 valores, um de cada vez, e conta quantos deles estão em cada
um dos intervalos [0, 25], (25, [50] , (50, 75], (75, 100].
10. Escrever um algoritmo semelhante ao anterior que calcula as médias aritméticas de cada
intervalo e as escreve, juntamente com o número de valores de cada intervalo.
11. Escrever um algoritmo que lê um número não determinado de valores, todos inteiros e
positivos, um de cada vez, e calcule e escreva a média aritmética dos valores lidos, a quantidade
de valores pares, a quantidade de valores impares, a percentagem de valores pares e a
percentagem de valores ímpares.
12. Escrever um algoritmo que lê 5 conjuntos de 3 valores a, b, c, um conjunto por vez e os escreve
assim como foram lidos. Em seguida, ordene-os em ordem decrescente e escreva-os novamente.
13. Escreva um algoritmo para calcular o valor de S, onde os valores de N e P são lidos e S é
calculada pela formula :
S
N!
----------------------P! ( N - P) !
=
14. Escreva um algoritmo para calcular o valor de X, onde X é calculado da seguinte forma :
X = N!
+ (N-1)! / 2 + (N-2)!/ 3 + (N-3)!/4 + ... + 1 / N
15. Calcular e imprimir a série
S =
37 X 38
1
+
36 X 37
2
+
35 X 36
3
+. . . +
1X 2
37
16. Escrever um algoritmo que lê um valor N e calcula e escreve os 20 primeiros termos da série:
67
1 + 1/x2 + 1/x3 + 1/x4 + ...
17. Dada a série:
2 3 4 9 16 29
54
99 ….
Escreva um algoritmo para calcular o n-ésimo termo da série
18. Dada a série:
-2 0 6 8 14 16
22
24
30
32 ….
Escreva um algoritmo para calcular o n-ésimo termo da série.
19. Escreva um algoritmo para calcular o valor de Sen x, obtido pela série de Mac-Laurin.
Sen x = x - x3 / 6 + x5 / 120 - x7/5040 + … + xn / n!
20. Fazer um algoritmo que leia um número real X e calcule o seguinte somatório :
S=
X
------- +
1!
X -
X
--------2!
-
X
--------- + ...
3!
, usando os 20 primeiros termos da série.
21. Calcular a série :
S =
1
1
−
4
2
+
9
3
−
16
4
+. . . −
100
10
22. Calcular e imprimir a série :
P =
1!
1
−
2!
3
+
3!
7
−
4!
15
+
5!
31
−. . .
, usando os 20 primeiros termos da série.
23. Escrever um algoritmo para calcular, para N lido, o valor de S, dado por:
S=
1
2
3
N− 1 N
+
+
+ ...+
+ +
N N− 1 N− 2
2
1
68
24. Um número perfeito é aquele que é igual a soma dos seus divisores. (Ex.: 6 = l + 2 + 3; 28 = 1 +
2 + 4 + 7 + 14 etc..). Escreva um algoritmo para ler um valor e verificar se ele é um número
perfeito.
B.3) NÚMERO NÃO CONHECIDO DE REPETIÇÕES
Suponha que se deseja escrever um algoritmo para ler valores e escrevê-los.
Quantos valores serão lidos ? Existe algum valor para processar ?
DECLARE A COMO INTEIRO
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
ESCREVA ‘O VALOR LIDO = ‘, A
.
.
.
ENTRADA DE DADOS
17
34
1
23
78
.
.
finito
.
Isso não pode ser feito (um algoritmo deve possuir um número finito de passos)
É necessária uma estrutura de repetição quando não conhece precisamente o número de
vezes que a seqüência de passos deve ser repetida. Forma geral:
ENQUANTO <condição> FAÇA
<seqüência de passos>
FIM-ENQUANTO
A estrutura de repetição enquanto-faça é utilizada quando um conjunto de passos deve ser
executado repetidamente, enquanto uma determinada condição (expressão lógica) permanecer
verdadeira.
Dependendo do resultado do teste da condição, o conjunto de comandos poderá não ser
executado nem uma vez ( se for falsa no primeiro teste), ou será executado varias vezes (enquanto
for verdadeira). Chama-se a isso um laço (“loop”).
Ao criar estruturas de repetição enquanto:
•
•
inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo;
modificar a(s) variável(eis) que controla(m) o loop dentro dele (seja por leitura ou
por atribuição), pois se isto não for feito cairemos no que chamamos um loop infinito.
69
Essa estrutura resolve o problema de ter um número finito de passos no algoritmo. Como
resolver o problema de garantir que o conjunto de dados é finito (conjunto de dado infinito = leitura
infinita = algoritmo infinito), sem contá-los ?
Como o número de dados depositados na entrada de dados é ignorado, utilizamos um
expediente para contornar essa situação. Adicionamos um dado especial ( flag ) que indicará o final
dos dados. Embora a quantidade de dados seja ignorada, podemos agora afirmar que o último é o
flag. O flag é um dado que não será processado, ele só indica que os dados terminaram. O flag
normalmente é constituído de valores inconsistentes ou valores assumidos por decisão do
programador. Por exemplo:
1. Se o dado a ser lido: idade - escolheria um valor negativo para ser o flag, pois não há
idade negativa;
2. Se o dado a ser lido: sexo - escolheria um caracter diferente ‘M’ ou ‘F’ (‘M’ ou ‘F’ são
os caracteres que normalmente representam os sexos masculino e feminino respectivamente);
3. Se o dado a ser lido: salário - escolheria um valor negativo para ser o flag, pois
normalmente salário é positivo ou zero;
4. Se o dado a ser lido: nome - escolheria uma seqüência de caracteres que não representasse
o nome de uma pessoa, por exemplo ‘ZZZZZZZZ’ ou ‘AAAAAAAA’;
5. Se o dado a ser lido: números inteiros - escolheria um valor (por exemplo zero) para ser o
flag;
6. Se o dado a ser lido: coeficientes da equação do 2º grau – escolheria os valores 0 0 0 (
pois não existe equação do 2º grau com coeficientes 0 0 0 );
7. Se o dado a ser lido: nome, sexo, salário, idade – escolheria os valores ‘ZZZ’ ‘Z’ –1 –1
ENTRADA DE DADOS
17
34
1
23
78
.
.
.
0
FLAG
Observe que se o programador erradamente colocar entre os valores que devem ser
processados o valor zero ( 0 ), nem todos os valores colocados na entrada de dados serão
processados.
ENTRADA DE DADOS
17
34
1
0
23
78
.
.
.
Apenas os valores 17, 34 e 1 serão processados
Valor
colocado
erradamente
FLAG
70
0
Vimos anteriormente que para criar estruturas de repetição enquanto, o programador deve
ter sua atenção voltada para os seguintes aspectos:
•
•
inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo;
modificar a(s) variável(eis) que controla(m) o loop dentro dele (seja por leitura ou
por atribuição), pois se isto não for feito cairemos no que chamamos um loop infinito.
Isso é devido a forma como a repetição funciona.
Retornando ao problema: escrever um algoritmo para ler valores e escrevê-los.
Etapas para construção do algoritmo:
1. criar a variável;
2. inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo
3. escrever a condição de repetição de acordo com o flag definido
4. escrever o valor lido
5. modificar a(s) variável(eis) que controla(m) o loop dentro dele
DECLARE A COMO INTEIRO
LEIA A
ENQUANTO A # 0 FAÇA
ESCREVA ‘O VALOR LIDO = ‘, A
LEIA A
inicializar a variável que controla o
loop antes de iniciá-lo. Isso será
realizado por leitura
71
FIM-ENQUANTO
Modificar o valor da variável
que controla a repetição dentro
dele. Isso será feito através da
leitura do próximo valor que
poderá ser o valor flag ou não.
A condição A # 0, pois o flag
escolhido é zero, então a repetição
deve ser feita enquanto o valor lido
seja diferente de zero
Simulação do algoritmo
DECLARE A COMO INTEIRO
NOME
A
TIPO
INTEIRO
VALOR
LEIA A
Lê um (primeiro) valor da entrada de dados. Essa leitura tem por objetivo inicializar a variável de
controle da repetição ( A )
entrada de dados:
NOME
A
17
34
1
23
78
.
.
.
42
0
TIPO
INTEIRO
LEIA
A
VALOR
17
ENQUANTO A # 0 FAÇA
Verifica a condição de repetição A # 0 ( A possui o valor 17 que é diferente de 0) logo a condição é
verdadeira
Observe que se o valor lido anteriormente fosse zero ( 0), a condição seria falsa, logo não entraria
na repetição (nenhuma repetição seria realizada).
ESCREVA ‘O VALOR LIDO = ‘, A
NOME
TIPO
VALOR
72
A
INTEIRO
78
O VALOR LIDO = 17
LEIA A
Lê um novo valor da entrada de dados. ( Modificar a(s) variável(eis) que controla(m) o loop dentro
dele, se isso não fosse feito A estaria com o valor 17 e a próxima repetição processaria novamente o
valor 17 )
entrada de dados:
NOME
A
34
1
23
78
.
.
.
42
0
TIPO
INTEIRO
LEIA
A
VALOR
34
FIM-ENQUANTO retorna ao passo ENQUANTO A # 0 FAÇA
Verifica a condição de repetição A # 0 ( A possui o valor 34 que é diferente de 0) logo a condição é
verdadeira. O valor 34 foi lido, ainda não processado, isso acontecerá quando a execução começar
no início do corpo da repetição.
Observe, se o valor lido anteriormente fosse zero ( 0), a condição seria falsa, logo não entraria na
repetição (repetição seria finalizada).
ESCREVA ‘O VALOR LIDO = ‘, A (processamento do valor lido, que sabemos ser diferente de
zero)
NOME
A
TIPO
INTEIRO
VALOR
34
73
O VALOR LIDO = 17
O VALOR LIDO = 34
Assim, a repetição será executada ...
Pularemos os passos intermediários e apresentamos a finalização da repetição ( A está com o valor
42, penúltimo valor lido).
FIM-ENQUANTO retorna ao passo ENQUANTO A # 0 FAÇA
Verifica a condição de repetição A # 0 ( A possui o valor 42 que é diferente de 0) logo a condição é
verdadeira. O valor 42 foi lido, ainda não processado, isso acontecerá, quando a execução começar
no início do corpo da repetição.
Observe, se o valor lido anteriormente fosse zero ( 0), a condição seria falsa, logo não entraria na
repetição (repetição seria finalizada).
ESCREVA ‘O VALOR LIDO = ‘, A (processamento do valor lido, que sabemos ser diferente de
zero)
NOME
A
TIPO
INTEIRO
VALOR
42
O VALOR LIDO =
O VALOR LIDO =
O VALOR LIDO =
O VALOR LIDO =
17
34
1
23
.
O VALOR LIDO = 42
LEIA A
Lê um novo valor da entrada de dados. ( Modificar a(s) variável(eis) que controla(m) o loop dentro
dele)
74
entrada de dados:
0
LEIA
A
FIM-ENQUANTO retorna ao passo ENQUANTO A # 0 FAÇA
Verifica a condição de repetição A # 0 ( A possui o valor 0 que é igual a 0) logo a condição é falsa.
A repetição é finalizada.
B.3.1) Exercícios Propostos
1) Para o algoritmo e a entrada de dados abaixo, responda as questões:
DECLARE S, A COMO INTEIROS
S←0
LEIA A
ENQUANTO ( A # -1 ) FAÇA
S← S+A
LEIA A
FIM-ENQUANTO
ESCREVA S
a)
b)
c)
d)
ENTRADA DE DADOS
1
3
0
4
2
-1
Quais os valores lidos ?
Que valor seria impresso ?
Quantas repetições seriam realizadas ?
O que aconteceria se a condição de controle fosse A # 0 ?
2) Refazer os exercícios de 5 até 15 da seção B.2.2, considerando a existência de vários valores na
entrada de dados.
3) Um vendedor necessita de um algoritmo que calcule o preço total devido por um cliente. O
algoritmo deve ler o código de um produto, a quantidade comprada, valor unitário e calcular o
preço total de cada produto e o débito total. Considere o último produto com o código igual a
zero.
75
B.4) REPETIR X ENQUANTO
Como vimos, a estrutura de repetição enquanto-faça é usada quando não conhece
precisamente o número de vezes que a seqüência de passos deve ser repetida. Podemos então
afirmar que a estrutura enquanto-faça é mais genérica que a estrutura repetir. É possível dessa
forma simular a estrutura repetir usando a estrutura enquanto-faça. Verifique o exemplo abaixo:
Escrever um algoritmo que gere e imprima o somatório dos números impares 1 até 10.
DECLARE I , S COMO INTEIRO
S ←0
REPETIR I = 1 ,10, 2
S←S+I
FIM-REPETIR
ESCREVA S
Analisando a repetição do algoritmo anterior :
Pelo esquema de funcionamento do REPETIR apresentado na seção B.2, a variável de controle ( I )
é iniciada com o valor inicial ( 1 ), em seguida o corpo da repetição é executado ( seqüência de
passos definida dentro da repetição ), ao terminar de executar os passos do corpo da repetição, o
valor da variável de controle é adicionado do valor do incremento ( 2 ) e logo em seguida é testado
se o novo valor da variável de controle ainda é menor ou igual que o limite (10), caso afirmativo
continua a executar o corpo da repetição, caso negativo para a repetição.
Assim a repetição REPETIR I = 1 ,10, 2 pode ser interpretada como:
começando em 1 e enquanto o valor a variável de controle for menor ou igual que 10 execute o
corpo da repetição e em seguida incremente de 2 a variável de controle.
DECLARE I , S COMO INTEIRO
S ←0
REPETIR I = 1 ,10, 2
algoritmo
S←S+I
FIM-REPETIR
equivalente
ESCREVA S
DECLARE I , S COMO INTEIRO
S ←0
I ←1
ENQUANTO ( I < 10 OR I = 10 ) FAÇA
S←S+I
I ←I+2
FIM-ENQUANTO
ESCREVA S
OBS.: o algoritmo anterior, utilizando enquanto, não faz uso de flag,
pois não há leitura de dados. Porém, a regra apresentada
anteriormente:
•
•
inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo;
modificar a(s) variável(eis) que controla(m) o loop dentro dele (seja por leitura ou por
atribuição), pois se isto não for feito cairemos no que chamamos um loop infinito.
76
é respeitada.
DECLARE I, S COMO INTEIRO
S ←0
I ←1
ENQUANTO ( I < 10 OR I = 10 ) FAÇA
S←S+I
I ←I+2
FIM-ENQUANTO
ESCREVA S
Modificar o valor da variável
que controla a repetição dentro
dele. Isso será feito através do
incremento da variável I de
duas unidades
inicializar a variável que controla o
loop antes de iniciá-lo. Isso será
realizado pela atribuição do valor 1
(valor inicial da repetição REPETIR I =
1 ,10, 2 ) a variável I (variável de
controle da repetição)
A condição ( I < 10 OR I = 10 ), pois
o limite estabelecido é o valor 10, na
repetição REPETIR I = 1 ,10, 2
B.4) EXERCÍCIOS PROPOSTOS
1. Para A e B inteiros e maiores que zero, fazer um algoritmo para o cálculo A dividido por B
usando subtrações sucessivas.
2. Considerando a igualdade
Soma = 13 + 23 + 33 + ...+ N3
Fazer um algoritmo para ler um valor X inteiro, positivo e maior que zero e obter o menor valor de
N que satisfaça a relação SOMA > X.
3. Chico tem 1,50 metro e cresce 2 centímetros por ano, enquanto Zé tem 1,10 metro e cresce 3
centímetros por ano. Construa um algoritmo que calcule e imprima quantos anos serão
necessários para que Zé seja maior que Chico.
77
Capítulo III - ARQUIVOS
Quando se deseja manter e/ou obter informações sobre objetos de raciocínio pode-se chamar
estes objetos de classes de entidade, como por exemplo: Alunos, Professores, equipes de futebol,
peças de um estoque, empregados de uma fábrica, etc.. A seleção de um elemento de uma classe de
entidade constitui uma entidade. As características que interessam no contexto constitui os
atributos da classe de entidade.
Exemplo: Aluno
Nome
Filiação
Endereço
Matrícula
As características de uma classe de entidade podem assumir valores que denominamos de
valor de atributo.
Exemplo: Aluno
Nome - Maria
Filiação - Pedro e Ana
Endereço - Rua Pres. Vargas, 15
Matrícula - 1509
Considerando a classe de entidade empregados de uma empresa pode-se visualizar o
seguinte:
Empregados = { João, Carlos, Maria, Pedro, Ana, ... }
Empregado = { Carlos }
Atributos = { Nome, Departamento, Idade, Cargo, Tempo de Serviço }
Valores de Atributo = { Carlos, Computação, 30, Programador, 5 }
A perfeita individualização de uma entidade é feita pela justaposição de um conjunto de
pares < atributos - valores de atributo > que recebe o nome de registro.
Registro = {{nome, Carlos}, {Departamento,
{Cargo,Programação}, {Tempo de Serviço, 5}}
Computação},
{Idade,
30},
Certamente um registro pode ser constituído tornando-se implícita a existência dos atributos
e trabalhando apenas com os valores de atributo: { Carlos, Computação, 30, Programador, 5 }. Em
termos computacionais (jargão técnico) os atributos são também chamados de campos do registro.
Um conjunto de registros que caracterizam uma classe de entidade é chamado de arquivo.
78
III.1) EXERCÍCIOS RESOLVIDOS
1. Escreva um algoritmo que leia o nome, sexo, idade de uma pessoa e escreva os dados lidos.
DECLARE NOME, SEXO CARACTER
DECLARE IDADE COMO INTEIRO
LEIA NOME, SEXO, IDADE
ESCREVA NOME, SEXO, IDADE
2. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e
escreva os dados lidos. O total de registro é igual a 100.
DECLARE NOME, SEXO CARACTER
DECLARE IDADE COMO INTEIRO
REPETIR I = 1 , 100, 1
LEIA NOME, SEXO, IDADE
ESCREVA NOME, SEXO, IDADE
FIM-REPETIR
3. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e
escreva os dados lidos.
DECLARE NOME, SEXO CARACTER
DECLARE IDADE COMO INTEIRO
LEIA NOME, SEXO, IDADE
ENQUANTO IDADE # -1 FAÇA
ESCREVA NOME, SEXO, IDADE
LEIA NOME, SEXO, IDADE
FIM-ENQUANTO
4. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e
escreva os dados lidos das pessoas de sexo feminino.
DECLARE NOME, SEXO CARACTER
DECLARE IDADE COMO INTEIRO
LEIA NOME, SEXO, IDADE
ENQUANTO IDADE # -1 FAÇA
SE SEXO = 'F' ENTÃO
ESCREVA NOME, SEXO, IDADE
FIM-SE
LEIA NOME, SEXO, IDADE
FIM-ENQUANTO
79
5. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e
escreva o total de mulheres.
DECLARE NOME, SEXO CARACTER
DECLARE IDADE, TOTALMULHER COMO INTEIRO
LEIA NOME, SEXO, IDADE
TOTALMULHER ← 0
ENQUANTO NOME # 'ZZZ' FAÇA
SE SEXO = 'F' ENTÃO
TOTALMULHER ← TOTALMULHER + 1
FIM-SE
LEIA NOME, SEXO, IDADE
FIM-ENQUANTO
ESCREVA 'TOTAL DE MULHERES =', TOTALMULHER
6. Escrever um algoritmo que leia um arquivo contendo o nome, sexo, idade e o total de horas
trabalhadas de várias pessoas. Considerando que a hora de trabalho custa R$ 3,45 calcule e
escreva o salário bruto de cada pessoa.
DECLARE NOME, SEXO CARACTER
DECLARE IDADE, TOTALMULHER COMO INTEIRO
DECLARE TOTALH, SALBRUTO COMO REAL
LEIA NOME, SEXO, IDADE
ENQUANTO IDADE # -1 FAÇA
SALBRUTO ←TOTH * 3.45
ESCREVA SALBRUTO
LEIA NOME, SEXO, IDADE
FIM-ENQUANTO
7. Fazer um algoritmo que leia o sexo e a idade de várias pessoas. Escreva o total de homens
menor de idade e o total de mulheres maior de idade.
DECLARE SEXO CARACTER
DECLARE IDADE, HMENOR, MMAIOR INTEIRO
HMENOR ← -1
MMAIOR ← -1
LEIA SEXO, IDADE
ENQUANTO IDADE # -1 FAÇA
SE SEXO = 'M' E IDADE < 18 ENTÃO
HMENOR ← HMENOR + 1
FIM-SE
SE SEXO = 'F' E IDADE ³ 18 ENTÃO
MMAIOR ← MMAIOR + 1
FIM-SE
LEIA SEXO, IDADE
FIM-ENQUANTO
ESCREVA HMENOR
ESCREVA MMAIOR
80
8) Escrever um algoritmo que leia o sexo e o peso de pessoas, calcule e escreva a média dos pesos
dos homens e o total de mulheres com mais de 50 kg.
DECLARE SEXO CARACTER
DECLARE PESO, MÉDIA, SOMA, TOTALHOM, TOTALMULH INTEIRO
TOTAL_HOM ← 0
SOMA ← 0
TOTALMULH ← 0
LEIA SEXO, PESO
ENQUANTO SEXO # 'Z' FAÇA
SE SEXO = 'M' ENTÃO
TOTALHOM ← TOTALHOM + 1
SOMA ← SOMA + PESO
FIM-SE
SE SEXO = 'F' E PESO > 50 ENTÃO
TOTALMULH ← TOTALMULH + 1
FIM-SE
LEIA SEXO, PESO
FIM-ENQUANTO
MÉDIA ← SOMA / TOTALHOM
ESCREVA MÉDIA
ESCREVA TOTALMULH
III.2 – EXERCÍCIOS PROPOSTOS
1. Escreva um algoritmo que leia uma seqüência de valores inteiros positivos e :
a) imprima todos os números;
b) imprima o maior e o menor valor;
c) imprima os valores primos, pares e impares;
2. Escreva um algoritmo que leia uma seqüência de dados (nome, sexo, idade,salário)
a) imprima todos os nomes dos funcionários;
b) imprima o total de homens;
c) imprima o total de mulheres com salário maior que R$ 500,00;
d) imprima a média salarial.
3. Dado uma seqüência de dados (nome, salário, idade, sexo) dos funcionários de uma firma,
escreva um algoritmo para:
a) imprimir os nomes das pessoas;
b) imprimir o total de homens e o total de mulheres;
c) imprimir o maior salário;
d) imprimir a menor idade;
e) para os salários menores que R$ 5.000,00 imprima esses salários acrescidos de 20%.
81
4. Escrever um algoritmo que lê o número de um vendedor, o seu salário-fixo, o tota1 de vendas
por ele efetuadas e o percentual que ganha sobre o total de vendas. Calcular o salário tota1 do
vendedor. Escrever número do vendedor e o salário total.
5. Escrever um algoritmo que lê um número não determinado de conjuntos de valores, cada um
formado pelo número de um aluno e suas 3 notas. Calcular, para cada aluno, a média ponderada
com pesos respectivos de 4 para a maior nota e 3 paras as outras duas. Escrever o número do
aluno, suas 3 notas, a média calculada e uma mensagem "aprovado" se nota >= 5 ou
"reprovado" para nota < 5.
6. Escrever um algoritmo que lê o número de um funcionário, seu número de horas trabalhadas, o
valor que recebe por hora, e o número de filhos com idade menor do que 14 anos, o valor do
salário família por filho e calcula o salário deste funcionário.
7. Uma revendedora de carros usados, paga a seus funcionários vendedores, um salário fixo por
mês, mais uma comissão também fixa para cada carro vendido e mais 5% do valor das vendas
por ele efetuadas. Escrever um algoritmo que lê o número do vendedor, o número de carros por
ele vendidos, o valor tota1 de suas vendas, o salário fixo e o valor que recebe por carro
vendido e calcula o salário mensal do vendedor, escrevendo-o juntamente com o seu número de
identificação.
8. Escrever um algoritmo que lê o número de um vendedor de uma empresa, seu salário fixo e o
total de vendas por ele efetuadas. Cada vendedor recebe um salário fixo, mais uma comissão
proporcional às vendas por ele efetuadas. A comissão é de 3% sobre o total de vendas até $
1.000,00 e 5% sobre o que ultrapassa este valor. Escrever o número do vendedor, o total de
suas vendas, seu salário fixo e seu salário total.
9. Escrever um algoritmo que lê 5 conjuntos de 2 valores, o primeiro representando o número de
um aluno e o segundo representando a sua altura em centímetros. Encontrar o aluno mais alto e
o mais baixo e escrever seus números, suas alturas e uma mensagem dizendo se é o mais alto ou
o mais baixo.
10. Fazer um programa que leia um conjunto de dados contendo a matrícula, as três notas e a
freqüência de do aluno e calcule e imprima:
a nota final de cada aluno;
a maior e a menor nota final da turma (supor não haver empate);
a nota média da turma;
o total dos alunos reprovados;
a porcentagem dos alunos reprovados por freqüência.
para cada aluno: a matrícula, a freqüência, as três notas, a nota final e o aproveitamento
(A/R); Imprimir a matrícula quando for pertinente.
11. Uma universidade deseja fazer um levantamento a respeito de seu concurso vestibular. Para
cada curso, é fornecido o seguinte conjunto de valores :
82
- código do curso;
- número de vagas;
- número de candidatos do sexo masculino;
- número de candidatos do sexo feminino.
12. Considere o código do curso sendo zero para indicar o flag de entrada. Fazer um programa
que:
- calcule e imprima, para cada curso, o número de candidatos por vaga e a
porcentagem de candidatos do sexo feminino e o código do curso;
- determine e imprima o maior número de candidatos por vaga juntamente com o
código do curso (supor que não haverá empate);
- calcule e imprima o total de candidatos.
13. Numa fábrica trabalham homens e mulheres divididos em três classes :
A - os que fazem até trinta 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 programa que :
Leia um conjunto de dados com :
o número de operários;
o número de peças fabricadas por mês;
o sexo do operário;
Considere o número de operários sendo zero como flag de entrada.
Calcular e imprimir :
o número e o salário de cada operário;
o total da folha de pagamento mensal;
o número total de peças fabricadas por mês;
a média de peças fabricadas pelos homens em cada classe;
a média de peças fabricadas pelas mulheres em cada classe;
o número do operário(a) de maior salário (supor não haver empate).
14. Existem 3 candidatos a uma vaga no Senado. Feita a eleição os votos são colocados em um
arquivo, formando uma seqüência de valores. O voto de cada eleitor foi codificado da seguinte
forma :
1 - voto para o candidato 1
2 - voto para o candidato 2
3 - voto para o candidato 3
4 - voto em branco
5 - voto nulo.
Deseja-se saber :
a) o candidato vencedor;
b) o número de votos em branco;
83
c) e o número de eleitores
15. Leia 3 valores DD , MM, AA representando respectivamente (dia, mês e ano). Escreva um
algoritmo para verificar a validade da data. Considere ano bissexto (um ano é bissexto
(fevereiro com 29 dias) quando o ano é múltiplo de 4 ) e que as datas (DD MM AA) estão no
intervalo de 01 01 93 até 31 12 95.
16. Escrever um algoritmo que lê 3 comprimentos de lados a, b, c e os ordena em ordem
decrescente, de modo que o a represente o maior dos 3 lados lidos.
Determine, a seguir, o tipo de triângulo que estes 3 lados formam, com base nos seguintes casos
escrevendo sempre os valores lidos e uma mensagem adequada:
Se a > b + c não formam triângulo algum.
Se a2 = b2 + c2 formam um triângulo retângulo.
Se a2 > b2 + c2 formam um triângulo obtusângulo.
Se a2 < b2 + c2 formam um triângulo acutângulo.
Se forem todos iguais formam um triângulo eqüilátero.
Se a = b ou b = c ou a = c então formam um triângulo isóscele
17. Escrever um algoritmo que lê a hora de início de um jogo e a hora do final do jogo
(considerando apenas horas inteiras) e calcula a duração do jogo em horas, sabendo-se que o
tempo máximo de duração do jogo é de 24 horas e que o jogo pode iniciar em um dia e terminar
no dia seguinte.
18. Escrever um algoritmo que lê o número de um funcionário, o número de horas por ele
trabalhadas, o valor que recebe por hora, o número de filhos com idade inferior a 14 anos, a
idade, o tempo de serviço do funcionário e o valor do salário família por filho.
Calcular o salário bruto, o desconto do INSS (8,5% do salário bruto) e o salário família.
Calcular o IR (Imposto de Renda) como segue:
Se Salário Bruto > 1.500,00 então IR = 15% do SB
Se Salário Bruto > 500,00 e SB <= 1.500,00 então IR = 8% do SB
Se salário Bruto <= 500,00 então IR = 0
Calcular o adicional conforme especificado:
Se idade superior a 40 anos ADIC = 2% do SB
Se tempo de serviço superior a 15 anos ADIC = 3.5% do SB
Se tempo de serviço < 15 anos, mas superior a 5 anos e idade maior do que 30 anos então
ADIC = 1,5% do SB.
Calcular o salário líquido. Escrever o número do funcionário, salário bruta, total dos descontos,
adicional e salário líquido.
19. Escrever um algoritmo que lê o número de identificação e as 3 notas obtidas por um aluno nas 3
verificações e a média dos exercícios que fazem parte da avaliação.
Para cada aluno, calcular a média de aproveitamento, usando a fórmula:
84
MA = Nl + N2 x 2 + N3 x 3 + ME
7
A atribuição de conceitos obedece à tabela abaixo:
Média de Aproveitamento
>= 9.0
>= 7.5 e < 9.0
>= 6.0 e < 7.5
>= 4.0 e < 6.0
< 4.0
Conceito
A
B
C
D
E
O algoritmo deve escrever o número do aluno, suas notas, a média dos exercícios, a média de
aproveitamento, o conceito correspondente e a mensagem: "APROVADO" se o conceito for A, B,
ou C e "REPROVADO" se conceito for D ou E.
20. Uma empresa decidiu conceder um aumento de salários a seus funcionários de acordo com a
tabela abaixo:
Salário Atual
0 - 400,00
400,01 - 700,00
700,01 - 1.000,00
1.000,01 - 1.800,00
1.800,01 - 2.500,00
acima de 2.500,00
Índice De Aumento
15%
12%
10%
7%
4%
sem aumento
Escrever um algoritmo que lê, para cada funcionário, o seu número e o seu salário atual e escreve o
numero do funcionário, seu salário atua1, o percentual de seu aumento e o valor do salário
corrigido.
21. Escrever um algoritmo que lê, para cada vendedor de uma empresa, o seu número de
identificação, seu salário fixo e o total de vendas em reais por ele efetuadas. Cada vendedor
recebe um salário fixo e uma comissão proporcional às vendas por ele efetuadas. A comissão é
de 3% sobre o total de vendas até $ 1.000,00 e 5% sobre o que ultrapassa este valor. Escrever,
para cada vendedor, o seu número de identificação, o tota1 de suas vendas, seu salário fixo e seu
salário total.
85
Capítulo IV - VETOR
Os algoritmos desenvolvidos até agora apresentam, em relação aos dados de
entrada, uma característica comum que é o fato de que o dado lido independe dos outros.
Além disso, cada variável apresentada até agoras têm a capacidade de armazenar
apenas um valor a cada vez. O vetor ou agregado homogêneo é uma estrutura de dados,
capaz de armazenar vários valores ao mesmo tempo e de mesmo tipo. Os vetores podem
ser unidimensionais ou multidimensionais (matrizes, tabelas.).
IV.1) DECLARAÇÃO DE VETORES
Em pseudocódigo as declarações podem ser representadas como:
DECLARE <nome>(<tamanho>) COMO <tipo>
Onde tipo pode ser: inteiro, real, caráter, lógico.
<nome> = nome do identificador
<tamanho> = define quantos valores serão armazenados.
Exemplo: DECLARE A(10) COMO INTEIRO
NOME
A
TIPO
VETOR
INTEIRO
VALOR
10
IV.2) COLOCANDO VALORES NOS VETORES
Para a colocação de valores nos vetores é necessário indicar que posição o valor
será alocado. Para isso, é necessário utilizar um índice. Um índice é um valor inteiro
deve ser maior ou igual a 1 e menor ou igual que a quantidade declarada, colocada
entre os parênteses. O comando de atribuição, já estudado, pode ser utilizado para a
atribuição de valores no vetor.
Por exemplo:
Vetor
Índice
Valor
A(3) ← 12 ( o valor três indica a posição no vetor e o valor 12, o valor a ser
alocado)
86
NOME
A
TIPO
VETOR
INTEIRO
VALOR
10
12
A(10) ← 55 ( o valor dez indica a posição no vetor e o valor 55, o valor a ser
alocado)
NOME
A
TIPO
VETOR
INTEIRO
VALOR
10
12
55
OBS. CADA A(I) DEVE SER TRATADO COMO UMA VARIÁVEL INTEIRA "COMUM", ISTO É, PODESE REALIZAR OPERAÇÕES ARITMÉTICAS, RELACIONAIS, ETC.. OBSERVE QUE AO COLOCAR O VALOR NO
COMPONENTE, ELE PODE SER MANIPULADO DIRETAMENTE, ISTO É, PARA APANHAR O VALOR QUE ESTÁ
NO VETOR NÃO É NECESSÁRIO LER O VALOR, BASTA ACESSÁ-LO DIRETAMENTE.
Exemplo:
A(10)
← A(10)
+ 1
( o valor de A(10) passou para 56)
A(1) ← A(10) - A(3) ( o valor de A(1) que estava indefinido passou a ter o valor 44)
Caso seja escrito uma operação com componentes indefinida, será considerada
uma operação errada, por exemplo:
A(4) ← A(5) - 32
incorreta)
( o componente A(5) não possui valor logo a operação está
A(6) ← A(15) - 32 ( o componente A(15) não existe logo a operação está incorreta)
IV.2.1) Colocando valores no vetor através de leitura
Além da atribuição é possível colocar os valores no vetor através da operação de
leitura.
ENTRADA DE DADOS:
NOME
TIPO
32
LEIA
A(15)
VALOR
87
A
VETOR
INTEIRO
10
32
IV.2.2) Colocando todos os valores no vetor através de leitura
A) Um valor por linha
DECLARE A(5), I COMO INTEIRO
LEIA A(1)
LEIA A(2)
LEIA A(3)
LEIA A(4)
LEIA A(5)
ENTRADA DE DADOS
12
20
15
1
4
OU
DECLARE A(5), I COMO INTEIRO
REPETIR I = 1,10,1
LEIA A(I)
FIM-REPETIR
NOME
A
TIPO
VETOR
INTEIRO
VALOR
5
12
20
15 1
4
B) Todos os valores na mesma linha
DECLARE A(5), I COMO INTEIRO
LEIA A(1), A(2), A(3), A(4), A(5)
ENTRADA DE DADOS
12 20 15 1 4
OU
DECLARE A(5), I COMO INTEIRO
LEIA A(I), I = 1,10,1
NOME
A
TIPO
VETOR
INTEIRO
VALOR
5
12
20
15 1
4
IV.3) IMPRIMINDO O VETOR
88
A) Um valor por linha
ESCREVA
ESCREVA
ESCREVA
ESCREVA
ESCREVA
NOME
A
A(1)
A(2)
A(3)
A(4)
A(5)
REPETIR I = 1,10,1
ESCREVA A(I)
FIM-REPETIR
OU
TIPO
VETOR
INTEIRO
VALOR
5
12
20
15 1
4
12
20
15
1
4
B) Todos os valores na mesma linha
ESCREVA A(1), A(2), A(3), A(4), A(5)
OU
ESCREVA A(I), I = 1,10,1
NOME
A
TIPO
VETOR
INTEIRO
12 20 15 1
VALOR
5
12
20
15 1
4
4
89
IV.4) Exercícios Resolvidos
1. Escreva um algoritmo para ler 50 valores inteiros e imprimi-los acompanhados de sua
média aritmética.
DECLARE A(50), I, SOMA COMO INTEIRO
DECLARE MEDIA COMO REAL
LEIA A(I), I = 1,50,1
SOMA ← 0
REPETIR I = 1,50,1
SOMA ← SOMA + A(I)
FIM-REPETIR
MEDIA ← SOMA / 50
REPETIR I = 1,50,1
ESCREVA A(I), MEDIA
FIM-REPETIR
2. Escreva um algoritmo que leia um vetor de 100 posições de números inteiros e mostre
somente os de valores positivos e sua posição do vetor.
DECLARE VET(100), I COMO INTEIRO
LEIA VET(I), I = 1,100,1
REPETIR I = 1,100,1
SE ( VET(I) > 0 ) THEN
ESCREVA ‘VALOR = ’, VET(I), ‘NA POSICAO =’, I
FIM-SE
FIM-REPETIR
3. Escreva um algoritmo que leia um vetor de 80 elementos inteiros. Encontre e mostre o
menor elemento e sua posição no vetor.
DECLARE VET(80), I COMO INTEIRO
LEIA VET(I), I = 1,80,1
MENOR ← VET(1)
POSICAOMENOR ← 1
REPETIR I = 1,79,1
SE ( VET(I) < MENOR ) THEN
MENOR ← VET(I)
POSICAOMENOR ← I
FIM-SE
FIM-REPETIR
ESCREVA ‘MENOR = ’, MENOR, ‘NA POSICAO =’, POSICAOMENOR
90
4.Escreva um algoritmo que leia um vetor inteiro de 30 posições e crie um segundo vetor,
substituindo os valores 0 por 1. Mostre os 2 vetores.
DECLARE A(30), B(30), I COMO INTEIRO
LEIA A(I), I = 1,30,1
ESCREVA A(I), I = 1,30,1
REPETIR I = 1,30,1
SE ( A(I) = 0 ) THEN
B(I) ← 1
SENÃO
B(I) ← A(I)
FIM-SE
FIM-REPETIR
ESCREVA B(I), I = 1,30,1
5.Escreva um algoritmo que leia um vetor inteiro de 30 posições e crie um segundo vetor,
com apenas os valores diferentes de 0. Mostre os 2 vetores.
DECLARE A(30), B(30), I, K COMO INTEIRO
LEIA A(I), I = 1,30,1
ESCREVA A(I), I = 1,30,1
K←0
REPETIR I = 1,30,1
SE ( A(I) # 0 ) THEN
K←K+1
B(K) ← A(I)
FIM-SE
FIM-REPETIR
ESCREVA B(I), I = 1,K,1
IV.5) EXERCÍCIOS
1. Sendo o vetor V com 10 componentes de números inteiros.
2
6
8
3
10
9
1
21
33
14
e as variáveis X = 2 e Y = 4, escreva o valor correspondente a solicitação:
a) V[ X + 1]
e) V[ X * 1]
i) V[ X - Y]
b) V[X + 2]
f) V[ X * 2]
c) V[ X + 3]
g) V[ X * 3]
d) V[ X * 4]
h) V[ X + Y] ]
2. Escreva um algoritmo que leia um arquivo de números inteiros e apresente o
somatório dos valores
3. Escreva um algoritmo que depois de ler um arquivo de inteiros, apresente os seguintes
resultados: máximo, mínimo, somatório, a média e a quantidade de números superiores a
média.
91
4. Escreva um algoritmo que leia um arquivo com 10 números, e os mostre em ordem
inversa.
5. Elaborar um algoritmo que lê um conjunto de 30 valores e os coloca em 2 vetores
conforme forem pares ou ímpares. O tamanho do vetor é de 5 posições. Se algum vetor
estiver cheio, escrevê-lo. Terminada a leitura escrever o conteúdo dos dois vetores. Cada
vetor pode ser preenchido tantas vezes quantos forem necessários.
6. Escreva um algoritmo que leia dois vetores de 10 posições e faça a multiplicação dos
elementos de mesmo índice, colocando o resultado em um terceiro vetor. Mostre o vetor
resultante.
7. Escreva um algoritmo que leia e mostre um vetor de 20 elementos inteiros. a seguir,
conte quantos valores pares existem no vetor.
8. Escreva um algoritmo que leia um vetor de 20 posições e mostre-o. Em seguida, troque
o primeiro elemento com o último, o segundo com o penúltimo, o terceiro com o
antepenúltimo, e assim sucessivamente. Mostre o novo vetor depois da troca.
9. Escrever um algoritmo que gera os 10 primeiros números primos acima de 100 e os
armazena em um vetor de X(10) escrevendo, no final, o vetor X.
10. Escrever um algoritmo que lê 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um
vetor Z que seja a união de X com Y.
11. Escrever um algoritmo que lê 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um
vetor Z que seja a soma entre X e Y.
12. Escrever um algoritmo que lê 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um
vetor Z que seja o produto entre X e Y.
13. Faça um algoritmo que leia um vetor (A) de 100 posições. Em seguida, compacte o
vetor, retirando os valores nulos e negativos. Coloque o resultado no vetor B.
14. Faça um algoritmo que leia um vetor de 500 posições de números reais e divida todos
os seus elementos pelo maior valor do vetor. Mostre o vetor após os cálculos.
15. Uma locadora de vídeos tem guardado, em um vetor de 500 posições, a quantidade
de filmes retirados por seus clientes durante o ano. Agora, esta locadora está fazendo
uma promoção e, para cada 10 filmes retirados, o cliente tem direito a uma locação grátis.
Faça um algoritmo que crie um outro vetor contendo a quantidade de locações gratuitas a
que cada cliente tem direito.
92
Capítulo V - MATRIZES
Matrizes, conjuntos, tabelas ou vetores multidimensionais são estruturas de dados
similares ao vetor, com a diferença que podem ter várias dimensões. Cada célula
(componente) de uma matriz será identificada por seu nome e pelos índices que
representarão suas dimensões. Trabalharemos com matrizes de duas ou três dimensões.
V.1) DECLARAÇÃO DE MATRIZES
Em pseudocódigo as declarações podem ser representadas como:
DECLARE <nome>(<tamanho da primeira dimensão, tamanho da segunda
dimensão, ... >) COMO <tipo>
Onde tipo pode ser: inteiro, real, caractere, lógico.
<nome>
=
nome
do
identificador
< tamanho da primeira dimensão > = define tamanho da primeira dimensão.
< tamanho da segunda dimensão > = define tamanho da segunda dimensão, etc.
Exemplo: DECLARE A(3,10) COMO INTEIRO
NOME
A
TIPO
VETOR
INTEIRO
VALOR
10
Posição 2,5
Posição 1,1
Posição 2,1
Posição 1,2
Posição 1,10
Posição 3,10
93
V.2) COLOCANDO VALORES NAS MATRIZES
Para a colocação de valores nos matrizes é necessário indicar que posição o valor será
alocado. Para isso, é necessário utilizar índices (o numero de índices corresponderá a número de
dimensões da matriz, uma matriz de duas dimensões necessitará de dois índices, uma matriz de três
dimensões necessitará de três índices). Um índice é um valor inteiro deve ser maior ou igual a 1
e menor ou igual que a quantidade declarada, colocada entre os parênteses. O comando de
atribuição, já estudado, pode ser utilizado para a atribuição de valores no vetor.
Por exemplo:
DECLARE A(3,10) COMO INTEIRO
Matriz
Índice referente a linha da matriz
Valor
A(1,3) ← 12 ( o valor 1 indica a posição linha na matriz e valor 3 posição coluna
e o valor 12, o valor a ser alocado)
Índice referente a coluna da matriz
NOME
A
TIPO
VETOR
INTEIRO
VALOR
10
12
Obs. Cada A(I,J) deve ser tratado como uma variável inteira "comum", isto é, pode-se
realizar operações aritméticas, relacionais, etc. . Observe que ao colocar o valor no componente, ele
pode ser manipulado diretamente, isto é, para apanhar o valor que está na matriz não é necessário
ler o valor, basta acessá-lo diretamente.
94
Exemplo:
A(3,10) ← A(3,10) + 1
A(1,1) ← A(3,10) - A(2,1)
Caso seja escrito uma operação com componentes indefinida, será considerada
uma operação errada, por exemplo:
A(6,1)
incorreta)
← A(1,5) - 32 ( o componente A(6,1) não existe logo a operação está
V.2.1) Colocando valores no vetor através de leitura
Além da atribuição é possível colocar os valores na matriz através da operação de leitura.
DECLARE A(3,3) COMO INTEIRO
ENTRADA DE DADOS:
NOME
A
32
TIPO
VETOR
INTEIRO
LEIA
A(2,2)
VALOR
10
32
95
V.2.2) Colocando todos os valores no vetor através de leitura
A) Um valor por linha (os dados na entrada não tem a forma de uma matriz)
DECLARE A(3,3) COMO INTEIRO
LEIA A(1,1)
LEIA A(1,2)
LEIA A(1,3)
LEIA A(2,1)
LEIA A(2,2)
LEIA A(2,3)
LEIA A(3,1)
LEIA A(3,2)
LEIA A(3,3)
ENTRADA DE DADOS
12
20
15
1
4
3
5
8
2
OU
NOME
DECLARE A(3,3) COMO INTEIRO
REPETIR I = 1,3,1
REPETIR J = 1,3,1
LEIA A(I,J)
FIM-REPETIR
FIM-REPETIR
A
TIPO
VALOR
VETOR
12 20 15
10
INTEIRO
1
4
3
5
8
2
B) Os valores organizados por linha (Forma Matricial: Forma Recomendada)
DECLARE A(3,3) COMO INTEIRO
LEIA A(1,1), A(1,2), A(1,3)
LEIA A(2,1), A(2,2), A(2,3)
LEIA A(3,1), A(3,2), A(3,3)
ENTRADA DE DADOS
12 20 15
1 4 3
5 8 2
OU
DECLARE A(3,3) COMO INTEIRO
REPETIR I = 1,3,1
LEIA A(I,1), A(1,2), A(I,3)
FIM-REPETIR
OU
DECLARE A(3,3) COMO INTEIRO
REPETIR I = 1,3,1
LEIA A(I,J), J=1,3,1
FIM-REPETIR
NOME
A
TIPO
VALOR
VETOR
12 20 15
10
INTEIRO
1
4
3
5
8
2
96
V.3) IMPRIMINDO A MATRIZ
A) Um valor por linha
ESCREVA
ESCREVA
ESCREVA
ESCREVA
ESCREVA
ESCREVA
ESCREVA
ESCREVA
ESCREVA
A(1,1)
A(1,2)
A(1,3)
A(2,1)
A(2,2)
A(2,3)
A(3,1)
A(3,2)
A(3,3)
REPETIR I = 1,3,1
REPETIR J = 1,3,1
ESCREVA A(I,J)
FIM-REPETIR
FIM-REPETIR
12
20
15
1
4
3
5
8
2
B) Os valores organizados por linha (Forma Matricial: Forma Recomendada)
ESCREVA
ESCREVA
ESCREVA
A(1,1), A(1,2), A(1,3)
A(2,1), A(2,2), A(2,3)
A(3,1), A(3,2), A(3,3)
OU
DECLARE A(3,3) COMO INTEIRO
REPETIR I = 1,3,1
ESCREVA A(I,1), A(1,2), A(I,3)
FIM-REPETIR
NOME
A
TIPO
VALOR
VETOR
12 20 15
10
INTEIRO
OU
DECLARE A(3,3) COMO INTEIRO
REPETIR I = 1,3,1
ESCREVA A(I,J), J=1,3,1
FIM-REPETIR
1
4
3
5
8
2
12 20 15
1 4 3
5 8
2
97
V.4) Exercícios Resolvidos
1. Escreva um algoritmo para ler uma matriz (5,5) de números inteiros e imprimi-los acompanhados
de sua média aritmética.
DECLARE A(5,5), I, SOMA, J COMO INTEIRO
DECLARE MEDIA COMO REAL
REPETIR I = 1,5,1
LEIA A(I,J), J = 1,5,1
ESCREVA A(I,J), J = 1,5,1
FIM-REPETIR
SOMA ← 0
REPETIR I = 1,5,1
REPETIR J = 1,5,1
SOMA ← SOMA + A(I,J)
FIM-REPETIR
FIM-REPETIR
MEDIA ← SOMA / 25
ESCREVA A(I), MEDIA
2. Escreva um algoritmo para ler uma matriz (3,3) de números inteiros e imprimi-los e imprimir os
valores pares indicando a linha, coluna da matriz.
DECLARE A(3,3), I, J COMO INTEIRO
REPETIR I = 1,3,1
LEIA A(I,J), J = 1,3,1
ESCREVA A(I,J), J = 1,3,1
FIM-REPETIR
REPETIR I = 1,3,1
REPETIR J = 1,3,1
SE ( MOD( A(I,J), 2) = 0 ) THEN
ESCREVA A(I,J), ‘ E PAR E ESTA NA POSICAO LINHA= ’,I, ‘E COLUNA =’, J
FIM-SE
FIM-REPETIR
FIM-REPETIR
98
3. Escreva um algoritmo para ler uma matriz (3,3) de números inteiros e imprimi-los e crie um vetor
com os valores impares e imprima o vetor.
DECLARE A(3,3), I, J, B(9), K COMO INTEIRO
REPETIR I = 1,3,1
LEIA A(I,J), J = 1,3,1
ESCREVA A(I,J), J = 1,3,1
FIM-REPETIR
K←0
REPETIR I = 1,3,1
REPETIR J = 1,3,1
SE ( MOD( A(I,J), 2) # 0 ) THEN
K← K+1
B(K) ← A(I,J)
FIM-SE
FIM-REPETIR
FIM-REPETIR
REPETIR I = 1,K,1
ESCREVA B(K)
FIM-REPETIR
4. Escreva um algoritmo que leia duas matrizes M(3,4) e N(4,2) e cria uma matriz que seja o
produto matricial de M por N;.
Nota: A(3,4) X B(4,2) = C(3,2), em geral A(M,N) X B(N,K) = C(M,K), onde cada
elemento de C é definido como:
n
c(r , s ) = ∑ arixbis
i =1
O elemento de C na posição r,s é obtido considerando-se a linha r da primeira matriz e a coluna s da
segunda matriz e somando-se os produtos de elementos correspondentes da linha r e coluna s.
DECLARE A(3,4), B(4,2) , C(3,2) R,S, SOMA, I COMO INTEIRO
REPETIR I = 1,3,1
LEIA A(I,J), J = 1,4,1
ESCREVA A(I,J), J = 1,3,1
FIM-REPETIR
99
REPETIR I = 1,4,1
LEIA B(I,J), J = 1,2,1
ESCREVA B(I,J), J = 1,3,1
FIM-REPETIR
REPETIR R = 1,3,1 (fixa a linha da primeira matriz)
REPETIR S = 1,2,1 (fixa a coluna da segunda matriz)
SOMA ← 0
REPETIR I = 1,4,1 (varia os elementos para multiplicação)
SOMA ← SOMA + A(R,I) * B(I,S)
FIM- REPETIR
C(R,S) ← SOMA
FIM-REPETIR
FIM-REPETIR
REPETIR I = 1,3,1
ESCREVA C(I,S), S = 1,2,1
FIM-REPETIR
V.5) EXERCÍCIOS PROPOSTOS
1. Faça um algoritmo que leia uma matriz 15 X 15 de reais e calcule a soma dos elementos da
diagonal secundária.
2. Escreva um algoritmo que leia um número inteiro A e uma matriz V 30x30 de inteiros. Conte
quantos valores iguais a A estão na matriz..
3. Escreva um algoritmo que lê uma matriz M(5,5) e calcula as somas:
a) da linha 4 de M
b) da coluna 2 de M
c) da diagonal principal
d) da diagonal secundária
e) de todos os elementos da matriz M
Escrever essas somas e a matriz.
4. Elaborar um algoritmo que lê duas matrizes M(4,6) e N(6,4) e cria uma matriz que seja:
b) a soma de M com N;
c) a diferença de M com N;
Escrever as matrizes lidas e as calculadas.
100
4. Elaborar um algoritmo que lê uma matriz M(6,6) e um valor A e multiplica a matriz M pelo
valor A e coloca os valores da matriz multiplicados por A em um vetor de V(36) e escreve no
final o vetor V.
6. Escrever um algoritmo que lê uma matriz M(10,10) e a escreve. Troque, a seguir:
a) a linha 2 com a linha 8
b) a coluna 4 com a coluna 10
c) a diagonal principal com a diagonal secundária
d) a linha 5 com a coluna 10.
Escreva a matriz assim modificada.
7. Faça um algoritmo que leia uma matriz 20x15 de inteiros. Calcule e mostre a soma das linhas
pares da matriz.
8. Faça um algoritmo que leia uma matriz 20x20 de reais e some cada uma das linhas,
armazenando o resultado da soma em um vetor. A seguir, multiplique cada elemento pela soma
da sua linha. Mostre a matriz resultante.
9. Faça um algoritmo que leia uma matriz 50x50 de números reais e encontre o maior valor da
matriz.
10. Faça um algoritmo que leia uma matriz 50x50 de números reais e encontre o maior valor da
matriz. A seguir, multiplique cada elemento da diagonal principal pelo maior valor. Mostre a matriz
após as multiplicações
101
Download

A LINGUAGEM PASCAL - Instituto de Computação