Post on 15-Nov-2018
APOSTILA DE LÓGICA DE PROGRAMAÇÃO I
Índice1. Índice....................................................................................................................22. Introdução.............................................................................................................43. Cronograma de aulas...........................................................................................54. Introdução ao Algoritmo........................................................................................6
4.1. Descrição Narrativa.......................................................................................64.2. Fluxograma Convencional.............................................................................64.3. Pseudocódigo................................................................................................7
5. Dados...................................................................................................................85.1. Numéricos.....................................................................................................85.2. Dados Lógicos...............................................................................................95.3. Dados literais.................................................................................................95.4. Dados caracter............................................................................................105.5. Exercícios....................................................................................................10
6. Variáveis.............................................................................................................126.1. Exercícios....................................................................................................13
7. Expressões.........................................................................................................147.1. Expressões aritméticas...............................................................................147.2. Expressões Lógicas....................................................................................157.3. Expressões Literais.....................................................................................187.4. Exercícios....................................................................................................18
8. Estrutura de um algoritmo..................................................................................218.1. Nome do algoritmo......................................................................................218.2. Declarando variáveis...................................................................................21
Nome da variável: Tipo.......................................................................................218.3. Corpo do algoritmo......................................................................................21
9. Instruções Primitivas...........................................................................................229.1. Instrução Primitiva de Atribuição.................................................................229.2. Instrução Primitiva de Saída de Dados.......................................................229.3. Instrução Primitiva de Entrada de Dados....................................................249.4. Exercícios....................................................................................................25
10. Exemplos........................................................................................................2610.1. Exercícios................................................................................................29
11. Armazenado literais........................................................................................3211.1. Exercícios................................................................................................32
12. Estruturas de decisão.....................................................................................3312.1. Estruturas de decisão do Tipo Se............................................................3312.1.1. Exemplos..............................................................................................3412.1.2. Exercícios.............................................................................................3612.2. Estruturas de decisão do Tipo Escolha....................................................3812.2.1. Exemplos..............................................................................................4012.2.2. Exercícios.............................................................................................40
13. Estruturas de Repetição..................................................................................4213.1. Laços Contados.......................................................................................4213.1.1. Exemplos..............................................................................................4313.1.2. Exercícios.............................................................................................4513.2. Laços Condicionais..................................................................................4713.2.1. Enquanto..............................................................................................4713.2.2. Exemplos..............................................................................................47
2
13.2.3. Exercícios.............................................................................................4913.3. Repita.......................................................................................................5013.3.1. Exemplos..............................................................................................5013.3.2. Exercícios.............................................................................................51
14. Cartão Bandeira..............................................................................................5214.1. Exercícios................................................................................................53
15. Trabalhando com literais.................................................................................5415.1.1. Exemplos..............................................................................................5415.2. Exercícios................................................................................................55
Apêndice A................................................................................................................56
3
1. Introdução
4
2. Cronograma de aulas
5
3. Introdução ao Algoritmo
Um algoritmo pode ser definido como sendo uma seqüência de passos,
logicamente colocados, que resolvem um problema.
Existem várias formas de se representar um algoritmo:
3.1. Descrição Narrativa
Nesta forma de representação os algoritmos são expressos diretamente em
linguagem natural. Como exemplo, tem-se o algoritmo seguinte:
Receita de Bolo:
Misture os Ingredientes
Unte a forma com manteiga
Despeje a mistura na forma
Se houver coco ralado
Então despeje sobre a mistura
Leve a forma ao forno
Enquanto não corar
Deixe a forma no forno
Retire do forno
Deixe esfriar
3.2. Fluxograma Convencional
É uma representação gráfica de algoritmos onde formas geométricas diferentes
implicam ações (instruções, comandos) distintos. Tal propriedade facilita o
entendimento das idéias contidas nos algoritmos e justifica sua popularidade.
Esta forma é aproximadamente intermediária a descrição narrativa e ao
pseudocódigo, pois é menos imprecisa que a primeira e, no entanto, não se
preocupa com detalhes de implementação do programa, como o tipo das variáveis
usadas.
6
Ha vários padrões que definem as formas geométricas das figuras que devem
ser usadas para representar cada um dos diversos tipos de instruções; contudo,
nenhum deles se sobressai com relação aos demais no que diz respeito à aceitação
por parte dos usuários.
Nota-se que os fluxogramas convencionais preocupam-se com detalhes de
nível físico da implementação do algoritmo. Por exemplo, figuras geométricas
diferentes são adotadas para representar operações de saída de dados realizadas
em dispositivos distintos, como uma fita magnética ou um monitor de vídeo.
3.3. Pseudocódigo
Antes de utilizarmos uma linguagem de computador, é necessário organizar as
ações a serem tomadas pela máquina de forma organizada e lógica, sem nos
atermos às regras rígidas da Sintaxe de uma linguagem. Para isto utilizaremos uma
forma de escrever tais ações, conhecida como algoritmo, ou pseudocódigo.
Esta forma de representação de algoritmos é rica em detalhes, como a
definição dos tipos das variáveis usadas no algoritmo e, por assemelhar-se bastante
à forma em que os programas são escritos, encontra muita aceitação.
Na verdade, esta representação é suficientemente geral para permitir que a
tradução de um algoritmo nela representada para uma linguagem de programação
específica seja praticamente direta.
7
4. Dados
Semelhante ao que acontece em uma calculadora, por exemplo, um sistema de
computador manipula informações, como os números que digitamos na calculadora.
Em um sistema de computador estas informações são classificadas em tipos
dependendo da forma que são formadas, a essas informações passaremos a
chamá-las de DADOS. Devemos fazer essa distinção pelo motivo de a memória do
computador trabalhar de forma diferente com dados diferentes.
Os tipos de dados existentes são:
4.1. Numéricos
Inteiros: São aos valores numéricos (positivos ou negativos) que não possuem
casas decimais. São dados do tipo inteiro:
Idade de uma pessoa (não podemos dizer que alguém tenha 20,3 anos);
Dia (não existe o dia 15,2);
Exemplos:
24 número inteiro positivo;0 número inteiro;-12 número inteiro negativo;
Reais: São aos valores numéricos (positivos ou negativos) que poderão possuir
casas decimais. São dados do tipo real:
Peso de uma pessoa (alguém pode ter tranqüilamente ter 53,2 kg);
Comprimento de um terreno (uma área pode ter 74,2 m);
Exemplos:
24.01 número real positivo com duas casas decimais;
144.0 número real positivo com uma casa decimal;
-13.3 número real negativo com uma casa decimal;
0.0 número real com uma casa decimal;
Como forma de melhor representarmos os números reais, os trabalharemos
sempre com as casas decimais, independente de ser um valor zero.
Por exemplo:8
1,2 – Valor real;
2,0 – Valor real;
2 – Valor inteiro;
4.2. Dados Lógicos
A existência deste tipo de dado é, de certo modo, um reflexo da maneira como
os computadores funcionam. Muitas vezes, estes tipos de dados são chamados de
booleanos.
O tipo de dados lógico e usado para representar dois únicos valores lógicos
possíveis: verdadeiro e falso. E comum encontrar-se em outras referências outros
tipos de pares de valores lógicos como sim/não, 1/0, true/false.
Nos algoritmos apresentados neste texto os valores lógicos serão
representados conforme abaixo, inclusive com os pontos:
.V. - valor lógico verdadeiro;
.F. - valor lógico falso;
4.3. Dados literais ou caracter
São caracterizadas como tipo literal às seqüências contendo letras, números e
símbolos especiais. Uma seqüência de caracteres deve ser indicada entre aspas
duplas (“”). Este tipo de dado também pode ser conhecido como alfanumérico, string
ou cadeia.
Exemplos:
"QUAL ?" - literal de comprimento 6;
" " - literal de comprimento 1;
"qUaL ?!$" - literal de comprimento 8;
"AbCdefC Hi" - literal de comprimento 10;
"1-2+3=" - literal de comprimento 6;
"0" - literal de comprimento 1 ;
Note que, por exemplo, "1.2" representa um dado do tipo literal de comprimento 3, constituído pelos caracteres "1","." e "2", diferindo de 1.2 que e um dado do tipo real.
9
4.4. Dados caracter
São dados semelhantes aos literais diferindo que este aceita apenas um único
caractere. Um dado do tipo caracter deve ser indicado entre aspas simples (‘’)
Exemplo:
Para representar o sexo de uma pessoa podemos utilizar apenas uma
letra (‘M’ ou ‘F’);
4.5. Exercícios
1) Classifique os dados a seguir conforme o seu tipo.
I - Inteiros
R - Reais
L - Literais
B - Lógicos (ou Booleanos)
N - Aqueles que a principio não podemos definir o tipo
C - Caracter
a) ( ) 0b) ( ) 1c) ( ) 0.0d) ( ) -1e) ( ) -32f) ( ) "Fim de Questão"g) ( ) -0.001h) ( ) +0.05i) ( ) .V.j) ( ) 'a'k) ( ) “abc”l) ( ) Vm) ( )”+3257”n) ( ) Fo) ( ) '+3257.”p) ( ).Fq) ( ) +36r) ( ) “-0.0”s) ( ) 'V't) ( ) '.F.'u) ( ).F.
2) Classifique os dados a seguir conforme o seu tipo.
I - Inteiros10
R - ReaisL - LiteraisB - Lógicos (ou Booleanos)C - Caracter
a) ( ) Nome b) ( ) Idadec) ( ) Sexod) ( ) Pesoe) ( ) Dataf) ( ) CPFg) ( ) Altura
11
5. Variáveis
Vimos no capitulo anterior que em um algoritmo trabalhamos dados de vários
tipos, agora precisamos saber como iremos trabalhar com ela.
Quando algum dado é processado pelo computador ele será armazenado na
memória, mas não podemos colocar lá de qualquer forma, pois corremos o perigo de
quando precisar dela não a encontrar. Imaginamos uma grande estante com muitas
gavetas onde guardamos nossas coisas. Quando precisarmos de algo será
complicado de acharmos, mas se de alguma forma identificarmos cada gaveta (com
uma etiqueta, por exemplo) tudo fica mais fácil, pois poderemos ir direto no local
correto sem precisar procurar por tudo. Com a memória funciona de forma
semelhante, daremos nomes para áreas onde iremos guardar as informações e
quando precisarmos saberemos onde ela se encontra. A essa área da memória
damos o nome de Variável.
Para utilizarmos essas variáveis devemos definir que tipo de dado será
armazenado nela (inteiro, real, literal, caracter ou lógico), pois uma variável do tipo
inteiro não pode, por exemplo, armazenar um valor lógico.
Devemos também dar um nome para essa variável, nome esse que possui
algumas regras para ser formado:
a) Começar com uma letra;
b) Os demais caracteres podem ser letras, números ou ‘_’;
c) Não podemos colocar como nome variáveis palavras utilizadas pelo algoritmo
como comandos como escreva, leia, var, etc..
d) Procure dar nomes “sugestivos” para suas variáveis, fica muito mais fácil
saber o que guardamos na variável chamada Idade, já em uma variável
chamada PARALELEPIPEDO fica complicado.
Exemplos:
Salário Correto
1ano Errado (não começou com uma letra)
Ano1 Correto
A casa Errado (contém o caractere branco)
12
Sal/hora Errado (contém o caractere "/")
Sal_hora Correto
_desconto Errado (não começou com uma letra)
5.1. Exercícios
1) Na lista a seguir, assinale com V os nomes de variáveis válidos e com I os inválidos.
a) ( ) ABCb) ( ) 123Ac) ( ) _d) ( ) A123e) ( ) ABCDEf) ( ) 3ABCg) ( ) _Ah) ( ) Aai) ( ) _1j) ( ) _a123k) ( ) Etc...l) ( ) Am) ( ) Acd1n) ( ) 1o) ( ) A0123p) ( ) B312q) ( ) Variavel
13
6. ExpressõesO conceito de expressão em termos computacionais esta intimamente ligado
ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis e
constantes numéricas relacionam-se, por meio de operadores, compondo uma
formula que, uma vez avaliada, resulta num valor.
Dependendo desse valor resultante, definimos 3 tipos de expressões:
Aritméticas;
Literais;
Lógicas;
6.1. Expressões aritméticas
Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo
numérico, seja inteiro ou real. Somente o uso de operadores aritméticos e variáveis
numéricas é permitido em expressões deste tipo.
Os operadores aritméticos relacionados às operações aritméticas básicas estão
sumarizados na tabela.
Operador Operação+ Adição- Subtração* Multiplicação/ Divisão+ Manutenção de sinal- Inversão de sinal
Div Parte inteira da divisãoResto Resto da divisão
As variáveis usadas em expressões aritméticas podem somente ser do tipo
inteiro ou real.
Resultados de expressões aritméticas:
Inteiro+-*
Inteiro = Inteiro
Inteiro+-*
Real = Real
Real + Inteiro = Real14
-*
Real +-*
Real = Real
InteiroInteiroRealReal
/
InteiroRealInteiroReal
= Real
Inteiro DIV Inteiro = InteiroInteiro RESTO Inteiro = Inteiro
Repare pela tabela acima que sempre que tivermos um valor real na
expressão, o resultado será real, e em uma divisão o resultado sempre será real.
6.2. Expressões Lógicas
Expressões lógicas são aquelas cujo resultado da avaliação e um valor lógico.
(.V. ou .F.).
Os operadores lógicos são mostrados na tabela.
Operador Prioridade.OU. 3.E. 2
.NÃO 1
Para exemplificar o uso de operadores lógicos, a tabela verdade a seguir
apresenta duas variáveis lógicas A e B. Uma vez que cada variável lógica possui
somente dois valores possíveis, então há exatamente quatro combinações para
estes valores, razão pela qual a tabela tem quatro linhas. As diversas colunas
contêm os resultados das operações lógicas sobre as combinações possíveis dos
valores das variáveis A e B.
A B .NÃO. A .NÃO.B A .OU. B A .E. B.F. .F. .V. .V. .F. .F..F. .V. .V. .F. .V. .F..V. .F. .F. .V. .V. .F..V. .V. .F. .F. .V. .V.
- O operador lógico .NÃO. sempre inverte o valor de seu operando.
Ex.: .NÃO..V. =.F. e .NÃO. .F. = .V.;
- Para que a operação lógica .OU. tenha resultado verdadeiro basta que um de
seus operandos seja verdadeiro; Para melhor visualizar este efeito, podemos
15
imaginar que as variáveis lógicas A e B são como dois interruptores ligados em
paralelo num circuito de acionamento de uma lâmpada.
Neste exemplo, um interruptor fechado (e que, portanto, permite a passagem
de corrente elétrica) representa uma variável lógica cujo valor é verdadeiro (.V.). Por
outro lado, um interruptor aberto representa uma variável lógica com valor falso (.F.).
No circuito, para que a lâmpada acenda basta que um dos interruptores esteja
fechado. Analogamente, para que a operação lógica .OU. tenha resultado verdadeiro
(.V.) basta que apenas um dos operandos possua valor lógico .V. Por outro lado,
para que a operação lógica .OU. possua resultado .F. (para que a lâmpada esteja
apagada) e necessário que os dois operandos possuam valor .F. (e necessário que
os dois interruptores estejam abertos).
Para que a operação lógica .E. tenha resultado verdadeiro é necessário que
seus dois operandos tenham valor lógico .V.. Em termos de um circuito elétrico, uma
operação lógica .E. pode ser representada por dois interruptores ligados em série.
Nota-se no circuito acima que a lâmpada somente estará acessa quando os
dois interruptores (A e B) estiverem fechados. Por outro lado, basta que um dos
interruptores (A ou B) esteja aberto para que a lâmpada não acenda. Da mesma
forma, a operação lógica .E. só resulta em .V. quando A e B forem iguais a .V.,
ainda, para que a operação lógica .E. resulte em .F. basta que um de seus
16
operadores seja .F..
Ha, ainda, outro tipo de operador que pode aparecer em operações lógicas os
operadores relacionais, mostrados na tabela.
Operador Comparação= Igual
< > Diferente< Menor
< = Menor ou igual> Maior
> = Maior ou igual
Estes operadores são somente usados quando se deseja efetuar
comparações. Comparações só podem ser feitas entre objetos de mesma natureza,
isto e, variáveis do mesmo tipo de dado. O resultado de uma comparação é sempre
um valor lógico.
O uso de operadores relacionais possibilita o aparecimento em expressões
lógicas de variáveis de outros tipos de dados que não o lógico.
Exemplo: sejam A e B variáveis lógicas, X e Y variáveis reais, e R. S e T variáveis literais, com os respectivos valores:
A = .V. , B = .F.,X = 2.5, Y = 5.0,R = "JOSÉ", S = "JOÃO" e T = "JOÃOZINHO"
A tabela seguinte contém algumas expressões lógicas contendo estas
variáveis.
Expressão ResultadoA .OU. B .V.A .E. B .F.
. NÃO. A .F.X = Y .F.
X = (Y/2) .V.R = S .F.S = T .F.
R < > S .V.R > S .V.S > T .F.
(( A .OU. B) .OU. (XY) .OU. (ST))
.V.
17
Um resultado interessante de ser observado e o da expressão S > T. ou seja,
"JOÃO" > "JOÃOZINHO", cujo resultado é falso. A primeira pergunta que surge deve
ser com relação à maneira como é feita tal comparação. Para tal, deve-se recorrer à
tabela de códigos ASCII. Tal tabela estabelece para cada caractere um código
diferente. De acordo com este código e possível comparar dois dados de tipo literal,
comparando os caracteres dos mesmos da esquerda para a direita. Ao comparar os
literais "JOSÉ" e "JOÃO", verificamos que seus dois primeiros caracteres (J e o) são
iguais, mas que "S" é maior que "A", segundo a tabela ASCII. Portanto "JOSÉ" e
maior que "JOÃO". Estes tipos de comparação são muito úteis na ordenação
alfabética de variáveis literais. Outra forma é imaginar as duas palavras em um
dicionário, a primeira viria primeiro que a segunda, então a segunda é maior.
6.3. Expressões Literais
Expressões literais são aquelas cujo resultado da avaliação é um valor literal.
Este tipo de expressão é bem menos freqüente que os anteriores. Os tipos de
operadores existentes variam de uma linguagem de programação para outra, não
havendo uma padronização.
Para que o assunto não passe em branco, considere-se como exemplo a
operação de concatenação de strings: tome-se duas strings e acrescenta-se
(concatena-se) a segunda delas ao final da primeira. Em algumas linguagens esta
operação é representada pelo símbolo (operador) (+). Por exemplo, a concatenação
das strings "REFRIGERA" e "DOR" e representada por "REFRIGERA" + "DOR" e o
resultado de sue avaliação e "REFRIGERADOR".
6.4. Exercícios
1) Dada a declaração de variáveis
VAR A, B, C : inteiro
X, Y, Z : real
NOME, RUA : literal
L1, L2 : lógico
Classifique as expressões seguintes de acordo com o tipo de dado do
resultado de sua avaliação:
I - Inteiros18
R - Reais
L - Literais
B - Lógicos (ou Booleanos)
N - Aqueles que a principio não podemos definir o tipo
a) ( ) A + B + C
b) ( ) A + B + Z
c) ( ) A > Y
d) ( ) NOME > RUA
e) ( ) NOME + RUA
f) ( ) L1.OU. L2
g) ( ) A > B = L1
h) ( ) X + Y / Z
i) ( ) (RUA <> NOME) .E. (. NÃO. (A = B))
j) ( ) A + B / C
k) ( ) X + Z / A
l) ( ) A + X / Z
m) ( ) A + Z / A
n) ( ) A > B
2) Para as mesmas variáveis declaradas no exercício anterior, às quais são dados os valores seguintes:
A = 1 X = 2.0 NOME = “X”
B = 2 Y = 10.0 RUA = “Y”
C = 3 Z = -1.0 L1 = .V.
L2 = .F.
Determine o resultado da avaliação das expressões abaixo:
a) A + C / B
b) A + B / C
c) C / B / A
d) X * B
e) NOME + RUA
f) NOME = RUA
g) L1 .OU. L2
19
h) (L1 .E. (.NÃO. L2))
i) (L2 .E. (.NÃO. L1))
j) (L1 .E. (.NÃO. L2)) .OU. (L2 .E. (.NÃO. L1))
k) X > Y .E. C <= B
l) (C - 3 * A) < (X + 2 * Z)
3) Indique o resultado das seguintes expressões:
a) 5/2
b) 5 DIV 2
c) 5 RESTO 2
d) (200 DIV 10) RESTO 4
e) 5 > 7
f) (7<8) .OU. (9<8)
g) (((10 DIV 2) RESTO 6)>5) .E. (3<(2 RESTO 2)) .E. (.NÃO.(2<3))
4) Crie tabelas verdade para as expressões lógicas a seguir:
a) (A .OU. B).E.(.NÃO. A)
b) (A .OU. B).E.(.NÃO. (A .OU. B))
c) (A .E. (NÃO .B.))
20
7. Estrutura de um algoritmo
Como comentado anteriormente, na construção de um algoritmo devemos
seguir regras, além disso, devemos seguir a estrutura dele.
Algoritmo <nomedoalgoritmo>
Var
<Variáveis>
inicio
<comandos>
fim.
7.1. Nome do algoritmo
Na estrutura acima temos na primeira linha o nome do algoritmo. Para darmos
esse nome devemos utilizar as mesmas regras utilizadas para nomes de variáveis.
7.2. Declarando variáveis
Na declaração Var devemos declarar as variáveis (aquelas áreas de memória,
lembram?).
Para declararmos deveremos utilizar a seguinte sintaxe:
Nome da variável: Tipo
Exemplos:
var
Nome: Literal
Idade: inteiro
Peso, altura: Real
Rua: Literal
Reparem que no terceiro exemplo foram declaradas duas variáveis de uma
única vez, isso pode ser feito com várias variáveis desde que elas sejam do mesmo
tipo.
7.3. Corpo do algoritmo
Entre os comando Inicio e Fim será desenvolvido nosso algoritmo. Nele todo a
seqüência lógica para a resolução do problema.
21
8. Instruções PrimitivasComo o próprio nome diz, instruções primitivas são os comandos básicos
que efetuam tarefas essenciais para a operação dos computadores, como entrada e
saída de dados (comunicação com o usuário e com os dispositivos periféricos), e
movimentação dos mesmos na memória. Estes tipos de instrução estão presentes
na absoluta maioria das linguagens de programação. De fato, um programa que não
utilize nenhuma instrução primitiva - como as que serão definidas neste capítulo - é
incapaz de se comunicar com o mundo exterior e, portanto não tem utilidade
alguma.
8.1. Instrução Primitiva de Atribuição
A instrução primitiva de atribuição, ou simplesmente atribuição, é a principal
maneira de se armazenar uma informação numa variável. Sua sintaxe é:
<nome_de_variável> <expressão>
Exemplo:ALGORITMO TesteVar
Número: INTEIROInício
Número 10Fim.
O Exemplo acima nos informa que:
a) Foi definida uma variável, a qual demos o Nome de “Número”, e informamos
que esta variável, ou posição de memória, só poderá aceitar dados que sejam
inteiros.
b) Atribuímos à variável “Número” o valor 10
8.2. Instrução Primitiva de Saída de Dados
O algoritmo anterior não é prático, pois, apesar do computador ter calculado
um determinado valor ou armazenado o mesmo na variável Número, este valor ficou
retido na memória do computador e não foi mostrado ao usuário, o maior
interessado no mesmo.
As instruções primitivas de saída de dados são o meio pela qual
22
informações contidas na memória dos computadores são colocadas nos dispositivos
de saída, pare que o usuário posse apreciá-las.
Ha duas sintaxes possíveis pare esta instrução:
Escreva <lista_de_variáveis> ouEscreva <literal>
Algoritmo EXEMPLOVar
Preço_unit Preço_tot : realQuant : inteiro
InícioPreço_unit 5.0Quant 10Preço_tot Preço_unit * QuantEscreva Preço_tot
Fim.
Algoritmo EXEMPLOVar
Preço_unit Preço_tot : realQuant : inteiro
InícioPreço_unit 5.0Quant 10Preço_tot Preço_unit * QuantEscreva “Resultado ”, Preço_tot
Fim.
Algoritmo EXEMPLOVar
Preço_unit Preço_tot : realQuant : inteiro
InícioPreço_unit 5.0Quant 10Preço_tot Preço_unit * QuantEscreva “Resposta”Escreva Preço_tot
Fim.
Daqui por diante, Escreva será considerada uma palavra reservada não mais
poderá ser utilizada como nome de variável, de modo que toda vez que for
encontrada em algoritmos será identificada como um comando de saída de dados.
Uma lista_de_variáveis é um conjunto de nomes de variáveis separados por
vírgulas. Um literal é simplesmente um dado do tipo literal delimita por aspas, e
23
aparecerá exatamente como foi escrito.
8.3. Instrução Primitiva de Entrada de Dados
O algoritmo anterior ainda carece de uma melhoria essencial. Toda vez que ele
é executado, o mesmo valor é calculado, já que os valores das variáveis Preço_unit e Quant permanecem inalterados. Seria interessante que estes valores pudessem
ser fornecidos ao computador pelo usuário do programa toda vez que o programa
fosse executado, pare que o usuário tivesse um maior controle sobre o valor
calculado. A instrução primitiva de entrada de dados foi criada para suprir esta
necessidade.
Sua sintaxe é:
Leia <lista_de_variáveis>
1 Algoritmo EXEMPLO2 Var3 Preço_unit Preço_tot : real4 Quant : inteiro5 Início6 Escreva “Informe valor unitário: ”7 Leia Preço_unit8 Escreva “Quantidade: ”9 Leia Quant10 Preço_tot Preço_unit * Quant11 Escreva Preço_tot12 Fim.
Neste exemplo as linhas foram numeradas para um melhor entendimento.
A execução do algoritmo acima é inicializado pela declaração das variáveis
(linhas 2 á 4), onde elas serão criadas em memória. Depois disso é que a execução
propriamente dita irá iniciar.
Linha 6 - Uma mensagem é enviada para o vídeo.
Linha 7 – Neste momento a execução é parada esperando uma resposta do
usuário, já que o comando leia pede que seja digitado algo e pressionado enter a
seguir o dado informado será armazenado na variável Preço_unit.
Linha 10 – Um calculo é realizado e atribuído a variável Preço_tot.
Linha 11 – É mostrado o valor armazenado da Preço_tot.
Um erro que muitos tem na construção de algoritmos é associar os comandos
Escreva e Leia, ou seja, acham que toda vez que tivermos um comando Escreva
temos que ter um Leia, e vice-versa. Cuidado ambos os comandos são
24
independentes um do outro.
8.4. Exercícios
1) Faça um algoritmo/programa para atribuir a variáveis as seguintes informações:
a) 12345.0
b) 123456
c) -1122
d) 10
e) .V.
f) 12345605
2) No seguinte algoritmo existem erros, encontre e comente-os.
Algoritmo teste
var
Maria: Literal
Idade: Inteiro
Letra: Literal
Maria: Real
Inicio
Idade 23
Idade 678
Idade letra
Letra ABC
Letra A
Letra 2
Fim.
3) Qual a diferença entre as seguintes atribuições?
a) Letra 'A'
Nome “João”
b) Letra ANome João
25
9. Exemplos
Neste capitulo serão mostrados alguns exemplos para melhor continuidade do
conteúdo.
Antes de tentar resolver qualquer algoritmo você deve:
Ler o enunciado e tentar entende-lo;
Procurar descobrir quais as informações que o usuário possui e quais
ele quer receber como resposta.
Além disso, não adianta saber todos os comandos do algoritmo ou de uma
linguagem se não sabemos como usa-lo.
a) Faça um algoritmo que leia o código e o nome de uma pessoa
Algoritmo um
VarCod: inteiroNome: Literal
InicioEscreva “Código: ”
Leia Cod
Escreva “Informe nome: ”
Leia Nome
Fim
b) Faça um algoritmo que leia um numero e multiplique pelo numero seguinte a
ele.
Algoritmo dois
VarN1, N2, N3: Real
InicioEscreva “Informe Número”
Leia N1
N2N1+1
N3N2 * N1
26
Escreva “Resultado: ”, N3
FimO exemplo acima também pode ser resolvido da seguinte maneira.
Algoritmo dois
VarN1, N3: Real
InicioEscreva “Informe Número”
Leia N1
N3(N1+1) * N1
Escreva “Resultado: ”, N3
FimRepare nos parênteses, caso eles não existissem a multiplicação seria feita
primeiro, tornando a resposta incorreta.
c) Um cliente comprou em uma loja dois produtos (A e B). O usuário deverá
entrar com o preço unitário e quantidade dos produtos. Ao final, mostrar o
valor a ser pago e o valor do desconto dado (17% de desconto).
Algoritmo tres
VarP1, P2, Q1, Q2, T1, T2: Real
InicioEscreva “Primeiro preço: ”
Leia P1
Escreva “Segundo preço: ”
Leia P2
Escreva “Primeira qtde: ”
Leia Q1
Escreva “Segunda qtde: ”
Leia Q2
T1 P1 * Q1 + P2 * Q2
T2 T1 * 0.17
Escreva “Total: ”, T1
Escreva “Total do desconto: ”, T2
27
Fim
d) Faça um algoritmo para calcular a comissão do vendedor de dois produtos. O
usuário entra com o preço unitário, quantidade dos produtos e comissão. Ao
final, mostrar o total das vendas e a comissão que o vendedor ganhou.
Algoritmo quatro
VarP1, P2, Q1, Q2, T1, T2, C: Real
InicioEscreva “Primeiro preço: ”
Leia P1
Escreva “Segundo preço: ”
Leia P2
Escreva “Primeira qtde: ”
Leia Q1
Escreva “Segunda qtde: ”
Leia Q2
Escreva “Comissão: ”
Leia C
T1 P1 * Q1 + P2 * Q2
T2 T1 * (C/100)
Escreva “Total: ”, T1
Escreva “Total da comissão: ”, T2
FimNote que não podemos trabalhar diretamente com as percentagens em um
algoritmo. Para realizarmos deveremos imaginar como faríamos um calculo desse
tipo caso não haja a tecla “%” na mesma. Exemplos:
a) Temos um valor A e queremos adicionar 10%;
X A * 1.1
b) Temos um valor A e queremos adicionar uma percentagem B;
X A * (1+B/100)
c) Temos um valor A e queremos retirar 10%;
X A * 0.9
d) Temos um valor A e queremos retirar uma percentagem B;
28
X A * (1-B/100)
Para entender esses exemplos apresentados poderemos utilizar uma
regra de 3 da matemática
Para o exemplo A seria a seguinte:
100% – 1
110% – X
100 X=110
x=1.1
Para o exemplo C seria a seguinte:
100% – 1
100% - B% – X
100X = 100 – B
X=1-B/100
9.1. Exercícios
1) Faça um algoritmo/programa para ler as seguintes informações de uma pessoa: Nome, Idade, Sexo, Peso, Telefone.
2) Faça um algoritmo/programa para fazer o cálculo do quadrado de um número, ou seja, o produto de um número por si mesmo.
3) Escreva um algoritmo/programa para calcular a média entre dois números quaisquer.
4) Escreva um algoritmo/programa pare calcular o valor de y na seguinte função y= 3x + 2.
5) Faça um algoritmo/programa para ler a base e a altura de um triângulo. Em seguida, escreva a área do mesmo.
Obs.: Área = ( Base * Altura ) / 2
6) Dado um valor em graus Fahrenheit transforme-o para graus Celsius (lembre-se que a fórmula para transformar um valor dado em graus Celsius para graus Fahrenheit é a seguinte):
7) Dado um valor de hora, minuto e segundo, faça um algoritmo/programa que transforme em segundos todas estas informações e mostre este resultado no vídeo.
8) Escreva um algoritmo/programa pare calcular o consumo médio de um automóvel (media em Km/l), dado que são conhecidos a distância total percorrida e o volume de combustível consumido pare percorrê-la.
29
9) Dado nome e três (3) notas de um aluno, onde as notas têm os respectivos pesos: 1, 2 e 3, faça um algoritmo/programa que mostre o nome e a média do aluno. Lembre-se que a fórmula para calcular a média é:
10)Dado nome, as três (3) notas de um aluno, e o peso de cada uma das notas, faça um algoritmo/programa que mostre o nome e a média do aluno.
11)Dado nome, preço de compra e o preço de venda de uma mercadoria, faça um algoritmo/programa que mostre o nome e o lucro obtido com a venda da mesma.
12)Dado nome do vendedor, quantidade de produtos que o mesmo vendeu durante o mês e o preço unitário do produto, faça um algoritmo/programa que mostre nome do vendedor e o valor total obtido com as vendas.
13)Dado nome do vendedor, quantidade de produtos que o mesmo vendeu durante o mês, preço unitário do produto e o percentual de comissão pago para o vendedor, faça um algoritmo/programa que mostre nome do vendedor, o total obtido com as vendas e o valor de comissão a ser pago.
14)Um caixa eletrônico possui apenas notas de 1, 10 e 100. Um cliente digita um determinado valor neste caixa eletrônico e espera receber uma determinada quantidade de notas. Faça o algoritmo/programa para calcular a quantidade de notas de cada um dos tipos acima citados que o cliente deverá receber (você poderá facilmente resolver este exercício se usar os operadores DIV e RESTO).
Exemplo: Valor digitado: 348
Notas de 100 : 3
Notas de 10 : 4
Notas de 1 : 8
15)Ler as seguintes informações de um funcionário: Nome, idade cargo e o seu salário bruto. Considere:
a) O salário bruto teve um reajuste de 38%.
b) O Salário total é descontado em 15%
E escrever os seguintes resultados:
Escreva nome, idade e cargo.
Escreva o salário bruto.
Escreva o salário líquido.
16)Uma empresa tem para um determinado funcionário uma ficha contendo o nome, número de horas trabalhadas e o n0 de dependentes de um funcionário.
Considerando que:
a) A empresa paga 12 reais por hora e 40 reais por dependentes.
b) Sobre o salário são feito descontos de 8,5% para o INSS e 5% para IR.
30
Leia o Nome, número de horas trabalhadas e número de dependentes de um funcionário. Após a leitura, escreva o nome, salário bruto, os valores descontados para cada tipo de imposto e finalmente qual o salário líquido do funcionário.
17)O preço de um automóvel é calculado pela soma do preço de fábrica com o preço dos impostos (45% do preço de fábrica) e a percentagem do revendedor (28% do preço de fábrica). Leia o nome do automóvel e o preço de fábrica e escreva o nome do automóvel e o preço final.
18)Peça para o usuário digitar: Nome, salário bruto e o percentual de desconto de um funcionário qualquer. Após, imprima no vídeo o nome digitado, salário bruto e o salário líquido.
19)Peça para o usuário digitar: Nome, salário bruto e o percentual de acréscimo de um funcionário qualquer. Após, imprima no vídeo o nome digitado, salário bruto e o salário líquido.
20)Peça para o usuário digitar: Nome, quantidade de horas trabalhadas, o valor pago pôr hora de trabalho e o percentual de desconto de um funcionário qualquer. Após, imprima no vídeo o nome digitado, salário bruto e o salário líquido.
21)Em uma fábrica trabalham uma quantidade X de homens e uma quantidade Y de mulheres. Peça para o usuário digitar estas quantidades, e após a entrada destes dados imprima: Total de pessoas que trabalham nesta fábrica, o percentual de homens e o percentual de mulheres com relação ao total de funcionários.
31
10. Armazenado literaisUma informação do tipo literal nada mais é do que um conjunto de caracteres
que podem ser letras, dígitos ou símbolos especiais.Exemplificando, a informação do tipo literal "BANANA" possui seis caracteres
e, portanto, seis posições são utilizadas. Estes caracteres terão suas posições numeradas de forma continua e partir de 0.
Posição Informação0 B1 A2 N3 A4 N5 A
A figura mostra o caso em que se armazena a literal "BANANA". Tendo isso em mente, poderemos acessar quaisquer um dos elementos. Para isso utilizaremos:
nome da variável + [ +posição desejada + ]
Algoritmo um
VarP1: LiteralP2: Inteiro
InicioEscreva “Informe Palavra: ”
Leia P1
Escreva “Informe posição: ”
Leia P2
Escreva “Caracter: ”, P1[P2]
Fim
10.1. Exercícios
1) Ler um LITERAL em forma de data. Exemplo: “26/09/95” e escrever o dia, mês e ano desta data todos em separados.
2) Faça um programa que solicite ao usuário a data do dia na forma DD/MM/AA. Imprima a data na tela no seguinte formato: AA/MM/DD.
32
11. Estruturas de decisãoNeste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em
função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica.
A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas pare que se decide qual o caminho a ser seguido. Segundo esta classificação temos dois tipos de estruturas de decisão:
Se Escolha
11.1. Estruturas de decisão do Tipo Se
Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro (.V.), então um determinado conjunto de instruções (comando composto) é executado.
Caso contrário, ou seja, quando resultado da avaliação for falso (.F.), um comando diferente é executado. A execução do algoritmo prosseguirá necessariamente por um deles. Esta escolha e feita em função do resultado da expressão: um dos caminhos é rotulado com (.V.) e será seguido quando a condição for verdadeira o outro e rotulado com (.F.) e será seguido quando a condição for falsa.
Se <Condição> Então<Comando_Composto_1>
Senão<Comando_Composto_1>
Fimse
A semântica desta construção é a seguinte: a condição é avaliada, se o resultado for verdadeiro, então o comando_composto_1 é executado. Ao término de sua execução o fluxo do algoritmo prossegue pela instrução seguinte a construção, ou seja, o primeiro comando após o Fimse. Nos casos em que a condição e avaliada como falsa, o comando_composto_2 é executado e, ao
33
término do mesmo, o fluxo de execução prossegue pela primeira instrução seguinte ao Fimse.
Há casos particulares e muito comuns desta construção, onde o comando_composto_2 e um conjunto vazio de instruções. Neste caso, a porção relativa ao Senão pode ser omitida, resumindo a sintaxe da construção forma mostrada a seguir.
Se <Condição> Então <Comando_Composto_1>Fimse
A semântica desta construção e a seguinte: no caso da condição seja verdadeira, o comando_composto_1 é executado e, após seu término, o fluxo de execução prossegue pela próxima instrução após o Fimse. Quando a condição e falso, o fluxo de execução prossegue normalmente pela primeira instrução após o Fimse.
11.1.1. Exemplos
a) Faça um algoritmo onde o usuário irá digitar a idade de uma pessoa, após de uma mensagem informando se a mesma é maior ou menor de idade.
Algoritmo umVar
Idade: inteiroInício
Escreva “Informe idade: ”Leia IdadeSe Idade >= 18 Então
Escreva "Maior de idade"Senão
Escreva "Menor de idade"Fimse
34
Fim.
b) Em uma loja de CDs, cada item possui um estoque e também um estoque mínimo (caso o estoque estiver abaixo deverá ser reposto o estoque). Faça um algoritmo que leia o estoque e o estoque mínimo de um determinado CD após mostre no vídeo se existe ou não a necessidade de reposição, no case de sim, deverá avisar a quantidade necessária para regularizar o estoque.
Algoritmo doisVar
E1, E2, QN: RealInício
Escreva “Estoque: ”Leia E1Escreva “Estoque mínimo: ”Leia E2Se E1>= E2 Então
Escreva "Não existe necessidade de reposição"Senão
QNE1-E2Escreva “São necessários ”,QN,” CDs para regularizar o estoque”
FimseFim.
c) Uma papelaria faz cópias de documentos (xerox) pelos seguintes valores:a. De 1 a 10 cópias, R$ 0.10;b. De 11 a 50 cópias, R$ 0.08;c. De 51 a 100 cópias, R$ 0.06;d. Acima de 100 cópias, R$ 0.05;
Sendo que o usuário informará a quantidade de cópias e o valor da encadernação (todas cópias irão ser encadernadas juntas), mostre no vídeo o valor a receber pela papelaria.
Algoritmo TresVar
Qc: inteiroE, V :Real
InícioEscreva “Qtde de cópias: ”Leia QCEscreva “Valor encadernação: ”Leia ESe QC <=10 Então
VQC * 0.1 + ESenão
Se QC<= 50 EntãoVQC * 0.08 + E
SenãoSe QC<= 100 Então
35
VQC * 0.06 + ESenão
VQC * 0.05 + EFimSe
FimSeFimSeEscreva “O valor a ser pago é :”,V
Fim.
11.1.2. Exercícios
1) Dado o preço de uma mercadoria, dê um desconto de 10% se este preço for superior a R$10,00.
2) Escreva um algoritmo/programa para determinar o maior entre dois números reais dados.
3) Faça um algoritmo/programa que leia os valores A, B, C, e diga se a soma de A + B é menor que C.
4) Faça um algoritmo/programa que leia dois valores inteiros A e B, e se os valores forem iguais deverá se somar os dois, caso contrário multiplique A por B.
5) Faça um algoritmo/programa que leia o nome e as três notas de uma disciplina de um aluno e ao final escreva o nome do aluno, sua média e se ele foi aprovado a média é 8.
6) Escreva um algoritmo/programa para determinar se uma pessoa é maior ou menor de idade.
7) Dado a quantidade de homens e mulheres em uma fábrica, mostre no vídeo qual destes dois grupos possui a maior quantidade de representantes. Imagine que as quantidades sejam diferentes.
8) Dado o nome e a média de dois alunos, imprima no vídeo o nome e a média do aluno que possui a maior média (considere que as médias sejam diferentes).
9) Dado um número qualquer, imprimir uma mensagem no vídeo informando se o mesmo é positivo ou negativo. Imagine que o número seja diferente de zero.
10)Dado um número inteiro positivo, imprimir uma mensagem no vídeo informando se o mesmo é par ou ímpar (utilize o operador RESTO para resolver esta questão).
11)Uma empresa decide dar um aumento de 30% aos funcionários cujo salário é inferior a 5.000. Escreva um algoritmo/programa que possa ser utilizado para efetuar o cálculo do salário reajustado de um funcionário.
12)Faça um algoritmo/programa que leia 3 números inteiros e escreva o menor deles.
13)Faça um algoritmo/programa que leia 3 números inteiros e escreva o maior deles.
36
14)Dado nome e idade de uma pessoa, mostre no vídeo o seu nome e a seguinte mensagem:
a. Criança, se a idade for até 12 anos.
b. Adolescente se a idade estiver entre 12 e 20 anos
c. Adulta se a idade for igual ou superior a 20 anos
15)Dado o nome e a média de três alunos, imprima no vídeo o nome e a média do aluno que possui a maior média (considere que as médias sejam diferentes).
16)Uma empresa decide dar um reajuste a seus funcionários de acordo com os critérios seguintes, faça um algoritmo que leia o salário e mostre a novo valor:
a. 50% para aqueles que ganham menos de 3.000;
b. 20% para aqueles que ganham entre 3.000 e 10.000;
c. 15% para os demais.
17)Dados três valores distintos, fazer um algoritmo/programa que, após a leitura destes dados coloque-os na tela em ordem crescente.
18)Dados três valores distintos, fazer um algoritmo/programa que, após a leitura destes dados coloque-os na tela em ordem decrescente.
19)Dado o preço de uma mercadoria e a sua categoria (A ou B) dê um desconto em seu preço de acordo com a seguinte regra:
d. 5%: se for da categoria A e o preço for superior ou igual a $100,00
e. 8%: se for da categoria A e o preço for inferior a $100,00
f. 10%: se for da categoria B e o preço for superior ou igual a $50,00
g. 12%: se for da categoria B e o preço for inferior a $50,00
20)Dados três valores X, Y, Z, verificar se eles podem ser os comprimentos dos lados de um triângulo, e se forem, verificar se é um triângulo eqüilátero, isósceles ou escaleno. Se eles não formarem um triângulo, escrever uma mensagem.
Antes da elaboração do algoritmo/programa, torna-se necessária à revisão de algumas propriedades e definições.
h. O comprimento de cada lado de um triângulo é menor do que a soma dos comprimentos dos outros dois lados.
i. Chama-se triângulo eqüilátero aquele que tem os comprimentos dos três lados iguais,
j. Chama-se triângulo isósceles aquele que tem os comprimentos de dois lados iguais.
k. Chama-se triângulo escaleno aquele que tem os comprimentos dos três lados diferentes.
21)Uma locadora de filmes possui três categorias:
A – romance,
37
B – Drama,
C – Terror,
Cada uma destas categorias, têm uma determinada quantidade de filmes em catálogo. Sabe-se que a locadora adquiriu uma determinada quantidade de filmes, todos de uma mesma categoria. Para isto tem-se: A quantidade comprada e a categoria (A,B ou C) a qual estes filmes se enquadram. Mostre no vídeo as quantidades de filmes que ficarão em catálogo, de cada categoria, após a compra ter sido feita.
22)Uma loja dividiu suas mercadorias dentro de categorias indicadas pôr cores: Azul, Verde e Vermelho. As cores têm pôr finalidade indicar um determinado desconto especial que o cliente irá pagar. Tais descontos são os seguintes:
Azul, a mercadoria tem 50% de desconto sobre o preço de venda.
Verde, a mercadoria tem 30% de desconto sobre o preço de venda.
Vermelho, a mercadoria tem 20% de desconto sobre o preço de venda.
Para enquadrar uma mercadoria dentro de uma das categorias acima, a loja utiliza a seguinte fórmula:
Onde PC = Preço de compra e PV = preço de venda
A relação de enquadramento é dada pela seguinte regra:
Grupo azul, se X for menor que 10.
Grupo verde, se X for de 10 até 25.
Grupo vermelho se X for maior que 25
Dado Nome da mercadoria, preço de compra e o preço de venda, imprima no vídeo o nome da mercadoria, grupo a qual ela pertence e o preço que o cliente deverá pagar, já com o desconto.
23)Para cada funcionário de uma loja sabe-se: número de horas trabalhadas, valor pago pela loja pôr hora de trabalho, nome do funcionário e o seu tempo de serviço. A loja irá dar um abono para os funcionários de acordo com o seguinte critério:
Abono de 5% se o tempo de serviço for inferior a cinco anos.
Abono de 10% se o tempo de serviço for de 5 a 10 anos.
Abono de 15% se o tempo de serviço for superior a 10 anos.Mostre no vídeo o nome de cada funcionário, salário bruto, tempo de serviço e
o salário líquido (com o abono).
11.2. Estruturas de decisão do Tipo Escolha
Este tipo de estrutura é uma generalização da estrutura Se, onde somente uma condição era avaliada e dois caminhos podiam ser seguidos. Na estrutura de decisão do tipo Escolha pode haver uma ou mais condições a serem testadas e um comando composto diferente associado a cada uma destas.
38
EscolhaCaso <Condição_1>
<Comando_composto_1>Caso <Condição_2>
<Comando_composto_2>...
Caso <Condição_n><Comando_composto_n>
Senão<Comando_composto_s>
Fimescolha
Seu funcionamento é o seguinte: ao entrar-se numa construção do tipo Escolha, a Condição_1 é testada: se for verdadeira, o comando_composto_1 e executado e, após seu término, o fluxo de execução prossegue pela primeira
39
instrução após o final da construção (Fimescolha); se a Condição 1 for falso, a condição_2 é testada: se esta for verdadeira, o comando_composto_2 e executado e, ao seu término, a execução prossegue normalmente pela instrução seguinte ao Fim escolha. O mesmo raciocínio e estendido a todas as condições da construção. No caso em que todas as condições são avaliadas como falsas, o Comando_composto_s (correspondente ao Senão da construção) e executado.
O teste a ser realizado deverá ser sempre de igualdade, utilizando apenas variáveis do tipo Caracter ou Inteiro e em todos os testes a serem apenas uma variável será usada.
11.2.1. Exemplos
Algoritmo Exemplo2Var
Salário, Sal_reaj: realCategoria: inteiro
InícioEscreva “Salário”Leia SalárioEscreva “Categoria”Leia CategoriaEscolha
Caso Categoria = 1Sal_reaj 1.5 * Salário
Caso Categoria = 2Sal_reaj 1.3 * Salário
SenãoSal_reaj 1.1 * Salário
FimescolhaEscreva “Salário Reajustado = ", Sal_reaj
Fim.
Um caso particular desta construção e aquele em que o comando_composto_s não contém nenhuma instrução. Isto ocorre nas situações em que não se deseja efetuar nenhuma ação quando todas as condições testadas são falsas. Assim, pode-se dispensar o uso do Senão na construção como acontece também na construção Se.
11.2.2. Exercícios
1) Faça um algoritmo/programa que leia um número que represente um determinado mês do ano. Após a leitura escreva por extenso qual o mês lido. Caso o número digitado não esteja na faixa de 1..12 escreva uma mensagem informando o usuário do erro da digitação.
2) Uma empresa irá dar um aumento de salário aos seus funcionários de acordo com a categoria de cada empregado. O aumento seguirá a seguinte regra:
a) Funcionários das categorias A ganharão 10% de aumento sobre o salário.
40
b) Funcionários das categorias B ganharão 15% de aumento sobre o salário.
c) Funcionários das categorias C ganharão 25% de aumento sobre o salário
d) Funcionários das categorias D ganharão 35% de aumento sobre o salário.
e) Funcionários das categorias demais ganharão 50% de aumento sobre o salário.
Faça um algoritmo/programa que escreva Nome, categoria e salário reajustado de cada Empregado.
3) Faça um algoritmo/programa que leia 2 números reais, e peça a operação a ser realizada com eles : 1-Soma, 2- Subtração, 3- Multiplicação, 4- Divisão.
41
12. Estruturas de RepetiçãoSão muito comuns as situações em que se deseja repetir um determinado
trecho de um programa um certo número de vezes. Por exemplo, pode-se citar o caso em que se deseja realizar um mesmo processamento para conjuntos de dados diferentes. Exemplo: processamento de folha de pagamentos de uma empresa, em que o mesmo cálculo e efetuado pare cada um dos funcionários.
As estruturas de repetição são muitas vezes chamadas de Laços ou, também, de Loops.
A classificação das estruturas de repetição e feita de acordo com o conhecimento prévio do número de vezes que o conjunto de comandos será executado. Assim, os laços dividem-se em:
laços contados, quando se conhece previamente quantas vezes o comando composto no interior da construção será executado;
laços condicionais, quando não se conhece de antemão o número de vezes que o conjunto de comandos no interior do laço será repetido, pelo fato de o mesmo estar amarrado a uma condição sujeita a modificação pelas instruções do interior do laço.
12.1. Laços Contados
Os laços contados são úteis quando se conhece previamente o número de vezes que se deseja executar um determinado conjunto de comandos, então, este tipo de laço nada mais e que uma estrutura dotada de mecanismos para contar o número de vezes que o corpo do laço (ou seja, o comando composto em seu interior) e executado.
Para <var> de <Início> até <final> incr <inc> faça <Comando_composto>Fimpara
A semântica do laço contado é a seguinte: no Início da execução da construção o valor <Início> é atribuído a variável <var>. A seguir, o valor variável <var> é comparado com o valor <final>. Se <var> for maior que <final>, então o comando composto não é executado e a execução do algoritmo prossegue pelo primeiro comando seguinte ao Fimpara. Por outro lado, se valor de <var> for menor ou igual a <final>, então o comando composto interior da construção e executado e, ao final do mesmo, o valor e adicionada variável <var>. Feito isso, retorna-se a comparação entre <var> e <final> repete-se o processo até que <var> tenha um valor maior que <final>, quando o laço é finalizado e a execução do algoritmo prossegue pela instrução imediatamente seguinte ao Fimpara.
Algumas observações interessantes devem ser feitas: <var> é necessariamente uma variável do tipo inteiro, uma vez que
seu valor é alterado a cada iteração (volta do laço); <Início>, <fim> e <inc> podem ser constantes ou variáveis. <inc> é o valor que é adicionado a variável <var> ao final de cada
iteração do laço. Há linguagens de programação que permitem que seja atribuído um valor negativo, de modo que o valor da variável <var> diminui a cada iteração. Neste caso, deve-se atentar à necessidade de inversão do sinal da comparação (de > para <) que e feito cada volta do laço, pare seu correto funcionamento.
42
Na grande maioria dos casos <inc> tem o valor 1 (incremento unitário). Portanto, admite-se a omissão do trecho incr de <inc> da sintaxe do comando Para e, quando isto ocorre, assume-se um incremento de 1.
12.1.1. Exemplos
1) Ler um valor e listar os números a partir de um.
Algoritmo UmVar
A, I : InteiroInicio
Escreva “Digite um valor”Leia APara i de 1 até A faça
Escreva IFimPara
Fim.
2) Somar os números de um até um limite informado pelo usuário.
Algoritmo DoisVar
A, I, Soma : InteiroInicio
Escreva ”Digite um valor”Leia ASoma0Para I de 1 até A faça
Soma soma + IFimParaEscreva Soma
Fim.
3) Somar uma quantidade de números, informada pelo usuário, lidos pelo teclado.
Algoritmo TresVar
A, I, Soma : InteiroInicio
Soma0Para I de 1 até 10 faça
Escreva ”Digite um valor”Leia ASoma soma + A
FimParaEscreva Soma
Fim.
43
4) Ler 10 números e somar os que são pares.
Algoritmo QuatroVar
A, I, Soma : InteiroInicio
Soma0Para I de 1 até 10 faça
Escreva ”Digite um valor”Leia ASe (A resto 2 ) = 0 então
Soma soma + AFimSe
FimParaEscreva Soma
Fim.
5) Ler um valor N e calcular:
Algoritmo CincoVar
N, I, Soma : InteiroInicio
Soma0Escreva ”Digite um valor”Leia NPara I de 1 até N faça
Soma soma + ( 1 / I )FimParaEscreva Soma
Fim.
6) Ler um valor N e calcular
Algoritmo SeisVar
N, I, Soma : InteiroInicio
Soma0Escreva ”Digite um valor”Leia NPara I de 1 até N faça
Se (I Resto 2) = 0 então Soma soma - ( 1 / I )
Senão Soma soma + ( 1 / I )
FimSeFimPara
44
Escreva SomaFim.
7) Ler nome e idade de 10 pessoas e informar o mais velho deles.
Algoritmo SeteVar
I, Idade, Maior : InteiroNome, NomeMaior: Literal
InicioMaior0Para I de 1 até 10 faça
Escreva ”Digite o nome”Leia NomeEscreva ”Digite a idade”Leia IdadeSe Idade > Maior então
NomeMaior NomeMaior Idade
FimSeFimParaEscreva ”Mais Velho ”, NomeMaiorEscreva ”Idade mais velho ”,Maior
Fim.
12.1.2. Exercícios
1) Faça um algoritmo/programa que calcule: Y = 1 + 2 + 3 + 4 + 5 + ... + 1000.
2) Faça um algoritmo/programa que calcule: Y = 1 + 3 + 5 + 7 + 9 + ...+ 999.
3) Peça para o usuário digitar um número inteiro positivo qualquer, digamos N. Após calcule N!.
4) Peça para o usuário digitar dois valores inteiros positivos, digamos A e B. Após calcule “A elevado ao expoente B”.
5) Calcule Y na formula abaixo.
Y = 2 - 4 + 6 - 8 + ...± N
6) Um cliente comprou em uma loja N mercadorias, das quais é conhecido: Preço e categoria. A categoria possibilita um desconto especial de acordo com a seguinte tabela:
a) Categoria A: desconto de 5% no preço da mercadoria
b) Categoria B: desconto de 10% no preço da mercadoria
c) Categoria C: desconto de 15% no preço da mercadoria
Faça um algoritmo que mostre ao final o valor total desta compra.
7) Uma empresa possui N vendedores que ganham por comissão sobre cada produto vendido. Cada vendedor em um determinado mês vendeu X
45
produtos, onde cada produto tem preço e quantidade. A empresa deseja obter um relatório com o Nome, o total de vendas e o valor a ser pago a cada vendedor. A comissão paga pela empresa é de 30% sobre o valor de cada produto vendido.
8) Dado um número indeterminado de palavras, sendo que cada palavra possui um tamanho indeterminado, o qual deverá ser lido pelo teclado, faça um algoritmo/programa que mostre a palavra informa de forma inversa.
9) Uma sala de aula possui N alunos, dos quais é conhecido: Nome, cidade onde mora e idade. Faça um algoritmo/programa que imprima:
a) A quantidade de alunos que residem em TUBARÃO
b) A quantidade de alunos que residem em CRICIUMA
c) A quantidade de alunos que possuem idade inferior a 17 anos
d) O nome dos alunos que morem em JAGUARUNA e que tenha idade entre 10 e 15 anos
10)Uma empresa possui N funcionários dos quais são conhecidos seus nomes e idades. Faça um algoritmo/programa que imprima o nome e a idade da pessoa mais idosa e a mais nova. Considere que não existem pessoas com idades iguais.
11)Uma empresa possui uma série de N funcionários, dos quais é conhecido: Nome, Idade e Sexo. Faça um algoritmo/programa que imprima:
a) O nome e idade do homem mais jovem;
b) O nome e idade da mulher mais idosa;
c) O percentual de homens, em relação ao total de funcionários, existentes na fábrica.
d) O percentual de mulheres, em relação ao total de funcionários, existentes na fábrica.
12)Faça um algoritmo/programa para cada formula a seguir:
a)
b)
c)
d) Y = 1 + (2 – 3) + 4 + (5 – 6) + 7 + (8 – 9) + ...
e)
46
12.2. Laços Condicionais
Laços condicionais são aqueles cujo conjunto de comandos em seu interior e executado ate que uma determinada condição seja satisfeita. Ao contrário do que acontece nos laços contados, nos laços condicionais não se sabe de antemão quantas vezes o corpo do laço será executado.
As construções que implementam laços condicionais mais comuns nas linguagens de programação modernas são:
Enquanto Repita
12.2.1. Enquanto
Sua semântica é a seguinte: ao Início da construção Enquanto a condição é testada. Se seu resultado for falso, então o comando composto no seu interior não e executado e a execução prossegue normalmente pela instrução seguinte ao Fimenquanto.
Se a condição for verdadeira o comando composto é executado e ao seu término retorna-se ao teste da condição. Assim, o processo acima será repetido enquanto a condição testada for verdadeira. Quando for falsa, o fluxo de execução prosseguirá normalmente pelas instruções posteriores ao Fimenquanto.
Enquanto <condição> Faça<comando composto>
Fimenquanto
Uma vez dentro do corpo do laço, a execução somente abandonará o mesmo quando a condição for falsa. O usuário deste tipo de construção deve estar atento a necessidade de que em algum momento a condição deverá ser avaliada como falsa. Caso contrário, o programa permanecerá indefinidamente no interior do laço, o que e conhecido como Laço infinito ou Looping.
12.2.2. Exemplos
1) Ler uma quantidade indeterminada de números e ao final mostrar o somatório.
Algoritmo umVar
op: literalnum, soma: real
InicioSoma 0Op “s”Enquanto (op = “S”) .ou. (op = “s”) faça
Escreva “informe o numero para calculo”Leia numSoma soma + numEscreva “deseja continuar? (s/n) “Leia op
Fimenquanto
47
Escreva somafim
2) Ler vários números para calcular o fatorial.
Algoritmo doisVar
op: literalI, tot: inteiro
InicioOp“s”Enquanto (op = “S”) .ou. (op = “s”) faça
Escreva “informe o numero para calculo”Leia numTot1Para i de 1 até num faça
Tot tot * iFimparaEscreva totEscreva “deseja continuar? (s/n)”Leia op
FimenquantoFim
3) Calcular a área de 50 triângulos de tamanhos diferentes.
Algoritmo tresVar
base, altura, area: realQuant: inteiro
InicioQuant 1Enquanto quant < 50 faça
Escreva “leia a base”Leia baseEscreva “leia a altura”Leia alturaÁrea base * alturaEscreva quant,”º triângulo “,áreaQuant quant + 1
FimenquantoFim
4) Calcular uma quantidade de números seqüenciais iniciados por 1 até que o somatório seja igual ou superior a 200.
48
Algoritmo quatroVar
Soma, num: inteiroInicio
Soma 0Num 1Enquanto soma < 200 faça
Soma soma + numNum num + 1
FimenquantoEscreva somaEscreva num
Fim
5) Calcular o total de uma compra de uma quantidade indeterminada de produtos.
Algoritmo cincoVar
Op: literalValor, quant, tot: real
InicioOp “s”Tot 0Enquanto (op = “S”) .ou. (op = “s”) faça
Escreva “valor produto”Leia valorEscreva “quant produto”Leia quantTot tot + valor * quantEscreva “deseja continuar? (s/n) “Leia op
FimenquantoEscreva tot
Fim
12.2.3. Exercícios
1) Faça um algoritmo/programa para ler o Nome, idade e sexo de um número indeterminado de alunos. Ao final escreva o total de alunos lidos.
2) Faça um algoritmo/programa para somar os restos da divisão por 3 de 200 números.
3) Faça um algoritmo/programa para calcular a área de N quadriláteros. Fórmula: Área = Lado * Lado.
4) Faça um algoritmo/programa para calcular a área de N Círculos. Fórmula: Área = * raio * 2, sendo = 3,141592.
5) Faça um algoritmo/programa para ler N números inteiros e ao final escrever sua média.
49
6) Uma empresa que possui X funcionários precisa saber a média de seus salários. Faça um algoritmo/programa para ler a quantidade de funcionários e o salário de cada um e escrever a média dos salários.
7) Faça um algoritmo/programa para:
a. Leia um valor X e um valor N.
b. Calcular: Y = 2X - 4X + 6X - 8X + 10X - … NX.
8) Faça um algoritmo/programa para ler um valor X e um Valor N. Após, calcule a seguinte expressão:
9) Fazer um algoritmo/programa que calcule escreva o valor de S onde:
10)Fazer um algoritmo/programa que calcule escreva o valor de S onde:
12.3. Repita
A estrutura de repetição Repita funciona semelhante à estrutura Enquanto, a diferença entre elas é a posição do teste lógico na estrutura, na estrutura Enquanto o teste lógico era logo no inicio, onde dependendo da situação o conteúdo do laço poderia não ser executado. Já na estrutura Repita o teste é realizado no final do laço, sendo que pelo menos uma vez o conteúdo será executado.
Repita <comando composto>
Enquanto <condição>
12.3.1. Exemplos
1) Ler uma quantidade indeterminada de números e ao final mostrar o somatório.
Algoritmo umVar
op: literalnum, soma: real
InicioSoma 0Repita
Escreva “informe o numero para calculo”Leia numSoma soma + numEscreva “deseja continuar? (s/n) “
50
Leia opEnquanto (op = “S”) .ou. (op = “s”)Escreva soma
Fim
2) Ler vários números para calcular o fatorial.
Algoritmo doisVar
op: literalI, tot: inteiro
InicioRepita
Escreva “informe o numero para calculo”Leia numTot1Para i de 1 até num faça
Tot tot * iFimparaEscreva totEscreva “deseja continuar? (s/n)”Leia op
Enquanto (op = “S”) .ou. (op = “s”)Fim
3) Calcular a área de 50 triângulos de tamanhos diferentes.
Algoritmo tresVar
base, altura, area: realQuant: inteiro
InicioQuant 0Repita
Escreva “leia a base”Leia baseEscreva “leia a altura”Leia alturaÁrea base * alturaEscreva quant,”º triângulo “,áreaQuant quant + 1
Enquanto quant < 50 façaFim
12.3.2. Exercícios
Como forma de exercitar a estrutura de repetição Repita resolva novamente a lista de exercícios anterior (estrutura Enquanto).
51
13. Cartão BandeiraPara melhor compreensão desta técnica mostramos primeiro o exemplo a
seguir já mostrado em capítulos anteriores:
Algoritmo cincoVar
Op: literalValor, quant, tot: real
InicioOp “s”Tot 0Enquanto (op = “S”) .ou. (op = “s”) faça
Escreva “valor produto”Leia valorEscreva “quant produto”Leia quantTot tot + valor * quantEscreva “deseja continuar? (s/n) “Leia op
FimenquantoEscreva tot
Fim
Nesta forma de trabalho além das informações pedidas pelo sistema (valor e quantidade) é necessária uma outra, a opção do usuário. Na utilização do cartão bandeira essa terceira não é necessária, mas sim uma das informações do sistema será trabalhado em um teste lógico. Para refazermos novamente o exemplo acima, primeiro devemos saber em que ordem os dados serão pedidos pelo usuário, no nosso caso primeiro valor depois quantidade, assim utilizaremos o valor no cartão bandeira. Sendo assim, o exemplo passara ficara da seguinte forma:
Algoritmo cincoVar
Op: literalValor, quant, tot: real
InicioTot 0Escreva “valor produto”Leia valorEnquanto (valor>=0) faça
Escreva “quant produto”Leia quantTot tot + valor * quantEscreva “valor produto”Leia valor
FimenquantoEscreva tot
Fim
52
Na execução do algoritmo acima a informação “valor do produto” é pedida ao usuário por duas vezes, pois no momento que for digitado um valor negativo para a variável é sinal de que não existe mais nenhuma informação a ser digitada.
13.1. Exercícios
1) Dado um número indeterminado de funcionários, onde são fornecidos o Nome, número de dependentes e o número de horas trabalhadas. Pede-se que seja impresso, para cada funcionário, o seu Nome, salário bruto, salário líquido e o valor descontado. A empresa, paga R$ 25,00 por hora de trabalho, e R$ 125,55 por dependente, e ainda faz um desconto de 12% sobre o salário bruto. Pede-se ainda que seja impresso o total de funcionários da empresa, o total gasto com salários, e o total descontado. Utilize cartão bandeira.
2) Escreva um algoritmo/programa para calcular o reajuste salarial de uma empresa que possui vários funcionários (Utilize cartão bandeira), de acordo com os seguintes critérios:
Os funcionários com salário inferior a 1.000,00 devem ter um reajuste de 40%;
Os funcionários com salário entre 1.000,00 (inclusive) e 3.000,00 (inclusive) devem ter um reajuste de 30%;
Os funcionários com salário superior a 3.000,00 devem ter um reajuste de 20%.
3) Dado uma relação de N alunos (Utilize cartão bandeira), cada um possuindo a mesma quantidade Q de notas, faça um algoritmo/programa que mostre:
a) Nome e média dos alunos
b) Quantidade de alunos aprovados (média para aprovação: >= 7.0)
c) Quantidade de alunos reprovados (média para reprovação: <= 2.0)
d) Quantidade de alunos em recuperação (média de recuperação: 2 < média < 7.0)
4) Uma empresa possui uma série de N funcionários (Utilize cartão bandeira), dos quais é conhecido: Nome, Idade e Sexo. Faça um algoritmo/programa que imprima:
a) A média da idade dos homens;
b) A média da idade das mulheres;
c) A média da idade das pessoas com mais de 18 anos;
53
14. Trabalhando com literaisEm algoritmo não temos nenhum comando que nos informe a quantidade de
caracteres existentes em um literal, o que pode tornar alguns problemas sem uma possível solução. Para a resolução deste problema utilizamos um método que ajuda bastante, que é a colocação de um “$” ao final deste literal, assim poderemos fazer a análise caracter a caractere e quando for encontrado o “$” é porque chegamos ao final.
14.1.1. Exemplos
1) Dado uma seqüência de caracteres qualquer (digitada pelo usuário) terminada pelo caractere “$”, faça um algoritmo que retire qualquer ocorrência de vogais.
Algoritmo umVar
P, P1: literalQ: Inteiro
InicioEscreva “Palavra: ”Leia PPP+’$’P1””Q0Enquanto (P[Q]<>’$’) faça
Se P[Q] <>’A’ .e. P[Q] <>’E’ .e. P[Q] <>’I’ .e. P[Q] <>’O’ .e. P[Q] <>’U’ .e. P[Q] <>’a’ .e. P[Q] <>’e’ .e. P[Q] <>’i’ .e. P[Q] <>’o’ .e. P[Q] <>’u’ então
P1P1+P[Q]FimSeQQ +1
FimenquantoEscreva P1
Fim2) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$”
(imagine que o usuário digitou este caractere), faça um algoritmo/programa que imprima no vídeo a quantidade de caracteres existentes, excetuando-se o caracter “$”.
Algoritmo umVar
P: literalQ: Inteiro
InicioEscreva “Palavra: ”Leia PPP+’$’Q0Enquanto (P[Q]<>’$’) faça
54
QQ +1FimenquantoEscreva P1
Fim
14.2. Exercícios
1) Dado uma quantidade indeterminada de palavras, sendo que as mesmas sempre terminam com o caractere “$”, escreva o tamanho de cada uma das mesmas (o sinal de “$” não deve ser considerado na contagem).
2) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caracter), faça um algoritmo/programa que copie uma determinada quantidade Q de caracteres desta seqüência de caracteres. Imagine que a cópia inicie pelo 1º caracter da seqüência de caracteres.
3) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caractere), faça um algoritmo/programa que transforme todos os caracteres da seqüência de caracteres para maiúsculo.
4) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caractere), faça um algoritmo/programa que mostre no vídeo uma mensagem informando ao usuário se a palavra digitada é palíndrome ou não. Obs; uma palavra é palíndrome quando lida de trás para frente fica igual a original, exemplos: ASA, MIRIM.
5) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caracter), faça um algoritmo/programa que imprima no vídeo a quantidade de vogais existentes.
6) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caracter), faça um algoritmo/programa que retire qualquer ocorrência do caracter espaço em branco.
55
Apêndice AApós construirmos, como poderemos garantir que ele está correto? Isso é
muito difícil de termos certeza, pois ainda não existe (pelo menos nunca ouvi falar) de uma espécie de “compilador” de algoritmos. Mas para termos uma idéia, o que podemos fazer é uma técnica chamada de Teste de Mesa.
O Teste de Mesa consiste em listarmos, em forma de uma tabela, todas as variáveis existentes no algoritmo uma ao lado da outra e abaixo dela irmos colocando os valores delas durante a execução “imaginária” do algoritmo. Ai pergunta-se: e as informações que são pedidas ao usuário? Para essas informações deveremos simular valores que foram digitados para o usuário.
Vamos a um exemplo simples:
1 Algoritmo EXEMPLO2 Var3 Preço_unit Preço_tot : real4 Quant : inteiro5 Início6 Escreva “Informe valor unitário: ”7 Leia Preço_unit8 Escreva “Quantidade: ”9 Leia Quant10 Preço_tot Preço_unit * Quant11 Escreva Preço_tot12 Fim.
Neste exemplo temos 3 variáveis que estão listadas a seguir:
Preço_unit Preço_tot Quant5 15 3
Na execução imaginaria que fizemos o seguinte:1- Aparece na tela a mensagem da linha 6;2- O usuário digita um valor pedido na linha 7, simulamos que o
valor tenha sido 5 conforme no exemplo;3- Aparece na tela a mensagem da linha 8;4- O usuário digita um valor pedido na linha 9, simulamos que o
valor tenha sido 3 conforme no exemplo;5- É feito o calculo da expressão da linha 10 com os valores
“informados” pelo usuário, onde o resultado é armazenado na variável indicada.
6- A parece a mensagem da linha 11 com a resposta, no nosso caso, pelos valores simulados, a resposta deverá ser 15.
Este exemplo apresentado é bem simples, vamos a um mais complexo:
1 Algoritmo cinco2 Var3 Valor, quant, tot: real4 Inicio
56
5 Tot 06 Escreva “valor produto”7 Leia valor8 Enquanto (valor>=0) faça9 Escreva “quant produto”10 Leia quant11 Tot tot + valor * quant12 Escreva “valor produto”13 Leia valor14 Fimenquanto15 Escreva tot16 Fim
Valor quant Tot5 3 02 2 153 1 19-1 22
Como neste exemplo as variáveis trocam de valores constantementes, os novos valores são colocado sempre abaixo e os outros deixam de existir. Lembrando que os valores das variáveis Valor e Quant são imaginariamente informadas pelo usuário nos dando como resposta o valor 22. Agora pense: em uma ação real onde façamos uma compra de 3 produtos com os preços e quantidades como acima, teremos um valor 22? Se a resposta for não, então seu algoritmo esta errado, caso contrario ele estará correto.
Outro detalhe que devemos considerar é que quando realizamos um Teste de Mesa aprendemos mais ainda a lógica de programação.
Portanto faça Teste de Mesa em seus algoritmos, além de poder ter mais certeza se ele esta correto você estará aprendendo mais ainda.
57