Lgica de Programao
2014
Presidenta da Repblica
Dilma Vana Rousseff
Vice-presidente da Repblica
Michel Temer
Ministro da Educao
Jos Henrique Paim Fernandes
Coordenao do Curso
Joo Ferreira
Coordenao de Design Instrucional
Diogo Galvo
Reviso de Lngua Portuguesa
Letcia Garcia
Diagramao
Izabela Cavalcanti
Sumrio
INTRODUO............................................................................................................................ 3
1.COMPETNCIA 01 | CONHECER OS PRINCPIOS DE LGICA DE PROGRAMAO
ALGORTMICA ........................................................................................................................... 4
1.1 Dado e Informao ................................................................................................. 4
1.1.1 Dado .................................................................................................................... 4
1.1.2 Informao .......................................................................................................... 5
1.2 Sistema Computacional.......................................................................................... 6
1.2.1 Elementos de um S istema Computacional ........................................................ 7
1.2.1.1 Hardware .......................................................................................................... 7
1.2.1.2 Software ........................................................................................................... 7
1.3 Desenvolvimento de Software ............................................................................... 8
1.4 Codificao ............................................................................................................. 9
1.4.1 Processamento de Dados .................................................................................... 9
1.4.2 Processamento Eletrnico de Dados ................................................................ 11
1.4.3 Programa ........................................................................................................... 13
1.4.4 Programao ..................................................................................................... 13
1.4.5 Programador ..................................................................................................... 13
1.5 Lgica de Programao ........................................................................................ 13
1.5.1 Fluxograma ........................................................................................................ 14
1.5.2 Algoritmo........................................................................................................... 16
1.6 Lgica de Programao Algortmica ..................................................................... 17
1.7 Representao e Armazenamento dos Dados ..................................................... 18
1.7.1 Varivel.............................................................................................................. 18
1.7.1.1 Tipo de Varivel .............................................................................................. 19
1.7.1.2 Declarao de Varivel ................................................................................... 19
1.7.2 Constante .......................................................................................................... 22
1.8 Estrutura de um Algoritmo .................................................................................. 23
1.9 Entrada de Dados ................................................................................................. 25
1.10 Sada de Informaes ......................................................................................... 26
1.11 Atribuio de Dados ........................................................................................... 27
1.12 Ferramenta para Edio e Teste de Algoritmo .................................................. 28
1.12.1 Tela Principal ................................................................................................... 29
CONCLUSO ...........................................................................................................................76
MINICURRCULO DO PROFESSOR ...........................................................................................77
INTRODUO
Gostaria de dar-lhe as boas vindas disciplina Lgica de Programao. Os
assuntos que sero tratados nesta disciplina fazem parte de uma rea da
informtica chamada de desenvolvimento de software e envolvem a
programao do computador.
A programao permite instruir o computador para que ele realize as tarefas
que desejamos, como por exemplo: controlar o estoque de uma empresa,
simular os cenrios de um jogo, escrever e enviar uma mensagem em uma
rede social ou disponibilizar imagens em uma tela. Os computadores precisam
de programas para fazer com que seus componentes eletrnicos processem
os dados e realizem os resultados que desejamos.
A programao de computadores ocorre de forma diferente da que um ser
humano utiliza para instruir outro ser humano. Esta forma envolve a lgica de
programao e poder ser expressa de vrias maneiras. Utilizaremos a forma
algortmica, onde as instrues que o computador deve executar so
codificadas em forma de texto, com comandos escritos na lngua portuguesa.
Nesta disciplina voc aprender os princpios e as principais estruturas que
regem a programao. Realizando os exerccios adequadamente, o seu
raciocnio estar preparado para criar qualquer tipo de programa, quando em
disciplina posterior aprender uma linguagem de programao especfica para
computao.
Tenho certeza de que voc no vai querer ficar fora desta oportunidade.
Como programao uma rea muito abrangente, voc precisar
complementar seus estudos atravs de outros materiais de estudos que
estaremos propondo neste caderno e em outros que voc, sem dvida, ir
pesquisar.
Vamos nessa?
Aldo Moura
Lgica de Programao
Competncia 01
1.COMPETNCIA 01 | CONHECER OS PRINCPIOS DE LGICA DE
PROGRAMAO ALGORTMICA
Iniciaremos nossos estudos conhecendo os princpios da lgica de
programao, mas primeiramente precisamos compreender alguns conceitos
da rea da informtica.
1.1 Dado e Informao
So dois conceitos elementares da informtica.
1.1.1 Dado
Um dado representa um fato bsico que pode sofrer manipulao.
Pode ser de diversos tipos, como:
Numrico: Composto apenas por nmeros que normalmente utilizamos
em operaes aritmticas.
Exemplos: 2, 20.3, 25
Alfanumrico ou texto: Composto por letras, smbolos e/ou nmeros que
normalmente no sero usados em operaes aritmticas.
Exemplos: Antonio, 2, maria@gmail.com, 2, F#, casa
Tcnico em Informtica
Competncia 01
1.1.2 Informao
Quando atravs de proces samento ou interpretao, de acordo com um
contexto, um significado atribudo a um ou vrios dados temos uma
informao.
Este significado d um valor adicional ao dado, alm do valor do fato
representado.
Exemplos 1: Nestes exemplos, para cada dado foi atribudo um significado,
que foram respectivamente: dias, anos, smbolo monetrio do real e telefone.
53 dias
53 anos
R$ 53,00
Telefone 9999-0101
Lgica de Programao
Competncia 01
Afonso
Beatriz
Afonso
Alusio
Betnia
Alusio
Antonio
Marta
Antonio
Beatriz
Mrcia
Cssio
Betnia
Rute
Celso
Cssio
Vnia
Ccero
Celso
Vernica
Paulo
Ccero
Zlia
Pedro
Marta
Renato
Mrcia
Paulo
Pedro
Renato
Rute
Vnia
Vernica
Zlia
Tcnico em Informtica
Competncia 01
1.2.1 Elementos de um S istema Computacional
Um sistema computacional composto pelos elementos representados na
figura 1.
Lgica de Programao
Competncia 01
estoque.
Este m dulo trata essencialmente sobre o desenvolvimento de software
1.3 Desenvolvimento de Software
A cincia que trata do desenvolvimento de software conhecida como
Engenharia de Software. Ela prev que para se desenvolver um software deve
haver um processo de software definido.
O processo de software mais tradicional conhecido como Modelo Cascata,
representado na figura 2.
Os outros elementos
de um sistema
computacional:
Pessoas: Todos que
gerenciam, usam,
programam e
mantm o sistema
computacional.
Banco de dados:
Coleo de dados e
informaes
acessadas pelo
software que
integram o sistema.
Telecomunicaes:
Transmisso
eletrnica de sinais
para comunicaes
que permitem as
organizaes
executarem seus
processos e tarefas
por meio de redes de
computadores.
Procedimentos:
Estratgias, polticas,
mtodos e regras que
definem o uso dos
elementos do
sistema.
Processo de
Software:
Conjunto de
atividades
relacionadas que
levam produo
de um software.
Tcnico em Informtica
Competncia 01
Codifica o: Construo do programa, traduzindo-se o projeto das
funcionalidades em um conjunto de instrues.
Teste: Verificao para saber se as funcionalidades implantadas atendem
aos requisitos especificados.
Implantao: O software instalado e colocado em uso.
Manuteno: O software sofre alteraes para correo, adaptao ou
acrscimo de funcionalidades.
Normalmente a etapa de Codificao executada por profissionais de nvel
tcnico um programador.
Na execuo desta etapa, dois fatores so relevantes:
Para conhecer
outros modelos,
pesquise sobre
Modelo de
Processo de
Software. Alm do
modelo cascata
descrito acima,
voc dever
encontrar vrios
outros modelos,
como: Modelo
Incremental,
Prototipagem e
Espiral.
Lgica de Programao
Competncia 01
As etapas de um processamento de dados so:
Entrada
Processamento
Sada
10
Tcnico em Informtica
Competncia 01
Entrada: Notas
Processamento: Clculo
Sada: Mdia
Como os dados de sada so mais qualificados, esses dados so denominados
de informaes.
Estas trs fases tambm esto presentes no mecanismo de um sistema,
considerado como um conjunto de elementos que interagem para atingir
objetivos.
Exemplos de processamento de dados:
Sistema digestivo
Sistema sanguneo
Sistema de transporte
Sistema hidrulico
Sistema eltrico
Sistema de sade
11
Lgica de Programao
Competncia 01
atividade pode variar de uma a centenas a milhares de instrues.
Exemplo 1: Para encontramos o maior nmero entre dois nmeros
iniciais, precisamos basicamente de cinco instrues:
1.
2.
3.
4.
5.
Obter o 1 nmero;
Obter o 2 nmero;
Comparar o 1 nmero com o 2 nmero;
Memorizar o maior nmero comparado;
Exibir o nmero memorizado.
Obter o 1 nmero;
Obter o 2 nmero;
Obter o 3 nmero;
Comparar o 1 nmero com o 2 nmero;
Memorizar o maior nmero comparado;
Comparar o 3 nmero com o maior nmero memorizado;
Memorizar o maior nmero na nova comparao;
Exibir o nmero memorizado.
12
Tcnico em Informtica
Competncia 01
vender a prazo, fazer os lanamentos da contabilidade, calcular a comisso do
vendedor, etc.
No processamento eletrnico de dados, um roteiro com as instrues para
processamento denominado de programa.
1.4.3 Programa
Conjunto de instrues que um computador interpreta para executar uma
tarefa especfica.
Sendo uma mquina eletrnica, o computador est submetido s regras da
eletrnica digital. Com isso, as diversas regras das linguagens naturais
(portugus, ingls, japons, etc.) no so entendidas pelo computador. Ento,
foram criadas linguagens de programao com regras prprias, indicando
como as instrues devero ser codificadas.
1.4.4 Programao
a atividade de elaborar um programa para o computador.
1.4.5 Programador
O profissional responsvel pela elaborao do programa.
1.5 Lgica de Programao
Como uma linguagem de programao tem regras prprias, as instrues de
um programa devero ser escritas em uma sequencia lgica, para que a tarefa
seja de fato executada. Esta sequencia lgica o que chamamos de lgica de
programao.
Linguagem de
programao:
um conjunto de
comandos (texto e
smbolos) com
sentido
predeterminado e
regras de sintaxe
prpria que
permite a
construo de
instrues que um
computador pode
executar.
Codificao:
Termo utilizado
para substituir a
programao, j
que o ato de
programar envolve
escrever um
programa nos
cdigos especficos
de uma linguagem
de programao.
13
Lgica de Programao
Competncia 01
uma representao abstrata, sem muitos detalhes, da ideia (lgica) que temos
para resolver o problema para o qual o programa est sendo criado. Os
arquitetos ou engenheiros civis normalmente fazem algo parecido. Quando
um cliente solicita que eles elaborem um projeto para a construo de um
imvel, antes de desenhar a planta arquitetnica eles primeiro fazem um
rascunho (croqui) para entender melhor o desejo do cliente e verificar se a
proposta desenhada no croqui atende ao que o cliente quer. Quando
verificado que realmente atende, a planta finalmente elaborada com todos
os detalhes necessrios, de acordo com as regras da engenharia civil.
No caso da programao, as duas formas bsicas para representar a lgica de
programao so fluxograma e algoritmo.
1.5.1 Fluxograma
uma forma de representao grfica da lgica de programao, que utiliza
smbolos como comandos para o computador. O programador deve conhecer
os smbolos predefinidos que pode utilizar e o que cada smbolo representa,
como, por exemplo, os smbolos relacionados na figura 4.
14
Tcnico em Informtica
Competncia 01
A partir dos exemplos de smbolos da figura 4 j podemos representar a lgica
de programao por fluxograma para somar dois nmeros (veja Figura 5).
15
Lgica de Programao
Competncia 01
1.5.2 Algoritmo
uma forma de representao textual da lgica de programao, que utiliza
palavras como comandos para o computador. O programador deve conhecer
as palavras predeterminadas da linguagem algortmica que pode utilizar e o
que cada palavra representa. Dizemos que as palavras da linguagem
algortmica so palavras reservadas, como as palavras relacionadas na figura
6.
16
Tcnico em Informtica
Competncia 01
Creio que voc um bom observador e deve ter percebido alguns detalhes
como: algumas palavras reservadas esto sublinhadas, os dados a serem lidos
nos comandos leia e o dado a ser exibido no comando escreva esto entre
parnteses. Estes e alguns outros detalhes de um algoritmo voc aprender
no decorrer da disciplina.
1.6 Lgica de Programao Algortmica
Conforme j explicado no subtpico anterior, a lgica de programao
algortmica a forma de representar a lgica (ideia) de programao que
temos para resolver um determinado problema em forma de algoritmo.
Esta forma utiliza uma linguagem prpria linguagem algortmica, com regras
prprias.
No existe apenas uma maneira de resolver um problema. Cada programador
pode desenvolver ideias diferentes e ambos conseguirem resolver o mesmo
problema. O que vai caracterizar que o algoritmo est correto a
conformidade do resultado que ele gera em relao aos dados de entrada.
Uma linguagem de programao algortmica uma linguagem didtica, ou
seja, utilizada para ensinar lgica de programao, no sendo usada em
programao real de computadores. Por ser uma linguagem apenas didtica,
cada escola pode desenvolver suas prprias palavras reservadas e suas
prprias regras de sintaxe. Aps o algoritmo ser testado, e comprovado que a
lgica est correta, o programador precisa codificar o programa em uma
17
Lgica de Programao
Competncia 01
linguagem de programao.
1.7 Representao e Armazenamento dos Dados
Na programao podemos representar e armazenar os dados de duas
maneiras: varivel ou constante, conforme veremos a seguir:
1.7.1 Varivel
Um programa pode ser executado diversas vezes, com a vantagem de que em
cada execuo forneamos dados de entrada diferentes. Na codificao do
programa, o dado precisa ser representado, mas o valor dele s ser
fornecido quando o programa for executado. Como pode ser fornecido
qualquer valor, esta representao do dado chamada de varivel. No
algoritmo da figura 8 podemos observar em destaque as variveis numero1,
numero2 e soma. Elas representam quaisquer valores. Se em uma execuo
do programa forem fornecidos os valores 10 e 20 respectivamente para as
variveis numero 1 e numero 2, o valor da varivel soma ser 30. Se em outra
execuo forem fornecidos os valores 5 e 7, o valor da varivel soma ser 12.
No fcil?
18
Tcnico em Informtica
Competncia 01
1.7.1.1 Tipo de Varivel
Os tipos de variveis que iremos utilizar so:
Caracter ou literal: armazena dado textual, que normalmente no usado
em operaes matemticas. Os dados literais so descritos entre aspas.
Exemplos: Carlos, jose@gmail.com, Sala B2
A partir de agora
iremos apresentar
formalmente os
comandos da
linguagem de
programao
algortmica. Sempre
que um novo
comando for
apresentado,
informaremos a
sintaxe (forma
correta) de sua
utilizao.
O formato da sintaxe
: nome_comando
parmetro
Onde:
nome_comando:
o nome do comando
em estudo.
parmetro:
complemento que
pode ser acrescido
ao comando para
que a instruo
possa ser executada
pelo computador.
Obs.: Se o parmetro
estiver entre
parnteses
angulares <> o
parmetro
obrigatrio, se o
parmetro estive
entre colchetes []
o parmetro
opcional.
19
Lgica de Programao
Competncia 01
etc. Deve ser um nome sugestivo em relao ao dado que vai armazenar.
tipo = Indica o tipo de dados que a varivel pode armazenar.
Exemplo:
var
numero1: real
Note que o nome da varivel e o tipo so parmetros obrigatrios, pois esto
entre parnteses angulares <>.
Em um comando de declarao var devero ser declaradas todas as variveis
do algoritmo, como no exemplo a seguir:
var
numero1: real
numero2: real
nome: literal
As variveis do mesmo tipo podem ser agrupadas em uma linha, separando-as
por vrgula, com apenas uma especificao do tipo, conforme o seguinte
exemplo:
var
numero1, numero2: real
nome: literal
Veja como fica o algoritmo da figura 7 com o comando de declarao das
variveis na figura 9 a seguir:
20
Tcnico em Informtica
Competncia 01
Voc tambm deve ter observado que as variveis foram colocadas na linha
seguinte ao comando var e no se encontram alinhadas na mesma margem
esquerda que o comando. Isso para permitir uma melhor organizao do
cdigo. Nada impede que todas as variveis estejam na mesma margem
esquerda do comando var, ou mesmo que a primeira varivel esteja na
mesma linha do comando var, como no exemplo da figura 10.
21
Lgica de Programao
Competncia 01
deslocadas em relao margem esquerda do comando superior. um
recurso profissionalmente exigido para melhorar a compreenso do cdigo,
principalmente em futuras modificaes do algoritmo. Veja como o cdigo da
figura 11 mais legvel que o cdigo da figura 10.
22
Tcnico em Informtica
Competncia 01
Algumas linguagens
de programao
algortmica utilizam
declarao de
constantes da
seguinte forma:
CONSTANTE
PI = 3.14
Onde PI o nome
da constante e 3.14
o valor atribudo
mesma.
algoritmo "nome_algoritmo"
// Seo de Declaraes
var
inicio
// Seo de Comandos
fimalgoritmo
Um algoritmo inicia com o comando algoritmo e finaliza com o comando
fimalgoritmo.
A sintaxe do comando algoritmo :
23
Lgica de Programao
Competncia 01
algoritmo <nome_algoritmo>
Onde:
nome_algoritmo = um nome, entre aspas, que obrigatoriamente deve ser
dado ao algoritmo.
Exemplos:
algoritmo
algoritmo
algoritmo
algoritmo
soma
media
Calcular mdia de 2 notas
## calcular rea ##
24
Tcnico em Informtica
Competncia 01
Os comentrios so
utilizados em
algoritmos e tambm
em programas. O
objetivo servir de
orientao para o
programador, no
tendo nenhuma
influncia na
execuo do
programa. Em
pequenos programas,
comentrios podem
ser desnecessrios,
mas em grandes
programas, que
podem conter
milhares de linhas,
eles so muito
importantes e at
indispensveis.
Um comentrio pode
ser utilizado para
qualquer propsito
como: justificar
porque determinada
instruo foi utilizada,
para informar sobre
uma modificao
(quem solicitou, a
data da solicitao ou
se est baseada em
alguma legislao).
25
Lgica de Programao
Competncia 01
Onde nome_varivel o nome da varivel que armazenar o dado a ser
recebido.
Exemplos:
leia (nome)
leia (numero)
Este comando pressupe que o dado vir de alguma fonte, que em nosso caso
ser do teclado. Quando o programa for executado ocorrer uma pausa para
que o usurio digite o dado que ele deseja introduzir. O dado introduzido
dever ser do mesmo tipo declarado para a varivel que receber o dado.
1.10 Sada de Informaes
Aps o processamento, normalmente, informaes so exibidas. Dizemos que
esta exibio a sada do processamento. A sada de informao ocorre
atravs do comando escreva.
Tudo que foi escrito no algoritmo, como a declarao das variveis, por
exemplo, no visualizado pelo usurio durante a sua execuo. Apenas o
que tiver determinado pelo comando escreva. Este comando a forma que
o algoritmo tem para se comunicar com o usurio do algoritmo. Ele
pressupe que a informao ser exibida na tela.
A sintaxe do comando escreva :
escreva ([texto , ] [nome_varivel])
Onde:
texto = texto opcional, pois se encontra entre colchete. Pode ser um texto
para descrever a informao que ser exibida. Caso tenha optado em colocar
esse texto, deve-se colocar uma vrgula para separar do nome da varivel.
26
Tcnico em Informtica
Competncia 01
nome_varivel = varivel que contm o dado que se deseja exibir.
Exemplos:
escreva (numero)
escreva (Nome do aluno:, nome)
1.11 Atribuio de Dados
Um dos processamentos mais bsicos o de atribuir o resultado de uma
operao aritmtica a uma varivel. Na prxima competncia estudaremos
vrios aspectos das operaes aritmticas. Por enquanto vamos apenas nos
preocupar como o resultado que guardado para ser posteriormente
utilizado em uma sada de informaes, por exemplo.
A atribuio a ao de guardar um dado em uma varivel. J sabemos que o
comando leia recebe um dado e guarda-o em uma varivel, mas na atribuio
o dado no recebido da digitao de um usurio via teclado, mas sim
conforme a instruo fornecida pelo programador.
A atribuio ocorre atravs do comando := (dois ponto e igual sem espao
entre eles) ou <- (maior que e hfen sem espao entre os smbolos). Quando
encontramos este comando l-se Recebe.
Os comandos := / <- tem a seguinte sintaxe:
<nome_varivel> := / <- <expresso>
Onde:
nome_varivel = varivel que armazenar o dado resultante da expresso.
expresso = constante, varivel ou expresso cujo resultado ser armazenado
na varivel que recebe a atribuio.
Voc deve usar um dos comandos por instruo, ou seja, usar := ou <- por
27
Lgica de Programao
Competncia 01
cada instruo de atribuio. No algoritmo, voc pode usar os dois comandos,
desde que em linhas diferentes.
Exemplos:
numero := 124
nome := jose
resposta := numero1 + numero2
No primeiro exemplo o programador determinou que a varivel numero
receba por atribuio a constante inteira 124.
No segundo exemplo o programador determinou que a varivel nome receba
por atribuio a constante literal jose.
No terceiro exemplo o programador determinou que a varivel resposta
receba por atribuio o resultado da operao aritmtica de adio dos
valores armazenados nas variveis numero1 e numero2.
1.12 Ferramenta para Edio e Teste de Algoritmo
Como o algoritmo um pseudocdigo, no h como execut-lo para testar se
ele est correto. Tradicionalmente o teste simulado seguindo as instrues e
verificando se h erros. Esse tipo de teste chamado teste de mesa.
Atualmente j existem diversas ferramentas que permitem escrever e testar o
algoritmo. Usaremos a ferramenta chamada Visualg. Voc ir precisar desta
ferramenta para realizar exerccios e test-los. Voc dever baix-lo no
endereo (http://ultradownloads.com.br/download/Visualg/) e fazer sua
instalao.
Iniciaremos mostrando a tela do Visualg e algumas de suas funcionalidades.
Posteriormente, nas prximas competncias, mostraremos outras
funcionalidades.
28
Tcnico em Informtica
Competncia 01
1.12.1 Tela Principal
Sempre que executamos o Visualg a tela abaixo aparece. um ambiente que
segue os padres do sistema operacional Windows e outros programas da
Microsoft (Veja a figura 15).
29
Lgica de Programao
Competncia 01
rpido. Dependendo da forma como a sua tela esteja configurada, esta barra
poder ser exibida em uma ou em mais linhas.
30
Tcnico em Informtica
Competncia 01
Na parte inferior direita temos a janela em branco, que a janela de
simulao, onde simulada a execuo do algoritmo.
Finalmente temos a barra de status com informaes sobre o nmero da linha
e da coluna em que o cursor est posicionado, o estado do algoritmo (em
branco ou modificado, se houve alguma modificao no cdigo do algoritmo
depois da ltima vez em que ele foi salvo) e informao para acessar os
comandos predefinidos do visualg (figura 20).
Para dominar
melhor as
funcionalidades do
Visualg,
recomendamos que
voc leia a apostila
encontrada no
endereo:
www.slideshare.net/
regispires/apostilasobre-o-visualgpresentation.
Assista ao vdeo
postado no link
http://youtu.be/zQt
Tpt76IqI para que
voc possa
compreender e
praticar o que est
sendo ensinado no
item a seguir.
31
Lgica de Programao
Competncia 01
// seo de comandos
inicio
leia (numero1)
leia (numero2)
soma := numero1 + numero2
escreva (soma)
fimalgoritmo
Revise com ateno para ter certeza de ter digitado tudo certinho, pois agora
iremos mostrar como testar o algoritmo.
Na barra de ferramenta clique no cone executar, em destaque na figura 21.
A execuo inicia e como voc pode conferir na figura 22, uma janela com
fundo preto aparecer sobre a janela do Visualg. Para entender melhor a
execuo do algoritmo, arraste esta janela de modo que voc possa enxergar
a janela de variveis e a janela de simulao.
32
Tcnico em Informtica
Competncia 01
Observe que a janela de variveis exibe as trs variveis declaradas, seu tipo (I
indicando inteiro) e seus respectivos valores, que at o presente momento 0
(zero).
A janela de simulao informa que houve o incio da execuo do algoritmo.
Neste momento a execuo est parada aguardando a digitao do primeiro
nmero para ser armazenado na varivel 1, j que a primeira instruo da
seo de comandos possui a funo de ler um dado de entrada. O
computador est aguardando este dado de entrada. Digite um nmero, por
exemplo: 2, e tecle ENTER. Observe que na janela de variveis o valor da
varivel nmero1 mudou e na janela de simulao o valor digitado aparece
abaixo da mensagem de incio da execuo. Pronto! Voc j sabe como
acompanhar a execuo do algoritmo. Esteja atendo a estas duas janelas.
Automaticamente a segunda instruo foi executada. Como tambm uma
33
Lgica de Programao
Competncia 01
instruo para ler um dado de entrada, nova pausa ocorreu, aguardando que
o usurio digite novo dado de entrada. Digite um nmero, por exemplo: 5, e
tecle ENTER. Observe novamente os valores das variveis na janela de
variveis. Observando a janela de simulao voc verifica que a execuo do
algoritmo j chegou ao final, com o valor da varivel so
ma sendo exibida.
No houve pausa para executar os comandos de atribuio e de escrita, pois
eles no necessitam da interveno do usurio. Eles so executados
automaticamente pelo simulador.
Assista no vdeo
postado no link
http://youtu.be/dG
8vhXiwsjE a
execuo de um
algoritmo em cada
um dos modos de
execuo disponvel
do Visualg.
34
Tcnico em Informtica
Competncia 01
escreva (Digite outro nmero inteiro)
leia (numero2)
soma := numero1 + numero2
escreva (A soma dos nmeros :, soma)
fimalgoritmo
Execute novamente o algoritmo e veja como ficou mais profissional. A partir
de agora, s voc exercer sua criatividade nos exerccios.
35
Lgica de Programao
Competncia 02
2.COMPETNCIA 02 | DESENVOLVER UM ALGORITMO PARA A
REALIZAO DE OPERAES MATEMTICAS
No captulo anterior, aprendemos os princpios de lgica de programao
algortmica, e at j elaboramos alguns algoritmos utilizando a operao
matemtica de adio. Neste captulo, aprenderemos a desenvolver
algoritmos para realizar diversas operaes matemticas, alm da adio.
2.1 Operadores Aritmticos Bsicos
Na tabela 1 esto relacionados os operadores aritmticos que so utilizados
nas operaes bsicas da aritmtica, que so: Adio, Subtrao,
Multiplicao e Diviso.
OPERADORES
+
*
/
OPERAO
Adio
Subtrao
Multiplicao
Diviso
36
Tcnico em Informtica
Competncia 02
algoritmo "Operaes Matemticas"
var
numero1: inteiro
numero2: inteiro
somar: inteiro
subtrair: inteiro
multiplicar: inteiro
dividir: real
// como uma diviso pode ocasionar um
// valor que no inteiro, a varivel
// dividir foi declarada como real.
inicio
escreva (Digite um nmero inteiro: )
leia (numero1)
escreva (Digite outro nmero inteiro: )
leia (numero2)
somar := numero1 + numero2
subtrair := numero1 - numero2
multiplicar := numero1 * numero2
dividir := numero1 / numero2
escreva (Soma: , somar)
escreva (Subtrao:, subtrair)
escreva (Multiplicacao:, multiplicar)
escreva (Diviso:, dividir)
fimalgoritmo
Sempre que houver um operador de diviso, pode ocorrer um resultado c om
nmeros decimais, portanto, a varivel que armazena o resultado da diviso
dever ser do tipo real. Caso a varivel seja declarada do tipo inteiro, ocorrer
um erro durante a simulao do algoritmo.
2.2 Prioridade dos Operadores
Seguindo a regra da matemtica, as expresses matemticas so resolvidas
dando prioridade aos operadores de multiplicao e diviso. Relembre desta
O exemplo anterior
apresenta quatro
sadas (quatro
comandos escreva).
Os resultados sero
exibidos na mesma
linha. Para uma
melhor
apresentao
podemos utilizar o
comando
ESCREVAL. Com
este comando, cada
resultado
apresentado em
uma linha.
37
Lgica de Programao
Competncia 02
regra a partir dos exemplos que seguem:
Exemplo 1: 10+20/2
Resulta em 20, pois primeiro resolvida a diviso e depois a adio.
Exemplo 2: 4*2+10/2
Resulta em 13, pois primeiro so resolvidas a multiplicao e a diviso e
depois a adio.
Para alterar as prioridades possvel utilizar parnteses. Se nos exemplos
anteriores a necessidade fosse resolver primeiro as operaes de adies,
deveramos ter envolvido a parte da expresso que requer prioridade entre
parnteses. Observe nos prximos exemplos como os parnteses mudam o
resultado da expresso:
Exemplo 1: (10+20)/2
Resulta em 15, pois os parnteses obrigam a resolver primeiro o que estiver
dentro dos parnteses, neste caso a adio. S depois a diviso resolvida.
Exemplo 2: 4*(2+10)/2
Resulta em 24, pois primeiro resolvida a adio priorizada pelos parnteses
e depois a multiplicao e diviso.
Para fixar esta regra de forma prtica, vamos analisar um algoritmo para
calcular a mdia aritmtica de duas notas.
1
2
3
4
5
6
7
38
Tcnico em Informtica
Competncia 02
8
9
10
11
12
13
leia (nota1)
escreva ("Digite a 2 nota: ")
leia (nota2)
media := (nota1 + nota2) / 2
escreva ("A mdia : ", media)
fimalgoritmo
Assista no vdeo
postado no link
http://youtu.be/Fd
ENDhbUoWg um
resumo sobre os
assuntos estudados
neste item.
OPERAO
Quociente de uma diviso inteira
Resto de uma diviso inteira
39
Lgica de Programao
Competncia 02
Considerando-se que na diviso do exemplo mostrado na figura 23 foi
utilizado o operador MOD, que pega apenas a parte inteira do quociente, o
resultado 3.
Diferentes dos operadores aritmticos bsicos que so smbolos, os
operadores apresentados na tabela 02 so palavras reservadas que
representam operadores aritmticos. Veja no algoritmo a seguir exemplos de
operaes matemticas com esses operadores. Exemplos mais significativos
com os operadores MOD e DIV sero explorados quando a prxima
competncia for abordada.
algoritmo "Operadores Aritmticos"
var
numero1, numero2, resto, quociente: inteiro
inicio
escreva ("Digite o 1 nmero: ")
leia (numero1)
escreva ("Digite o 2 nmero: ")
leia (numero2)
resto := (numero1 MOD numero2)
quociente := (numero1 DIV numero2)
escreval ("Resto da diviso: ", resto)
escreval ("Quociente da diviso: ", quociente)
fimalgoritmo
O smbolo % tambm pode ser utilizado em substituio ao operado r MOD,
como no exemplo: resto := (numero1 % numero2).
As variveis que
armazenaro os
valores de uma
operao DIV ou
MOD devero ser do
tipo inteiro.
Assista no vdeo
postado no link
http://youtu.be/LRT7
Udjn00Q
o exemplo anterior
sendo executado e
comentado.
40
Tcnico em Informtica
Competncia 02
Em linhas gerais, a sintaxe de uma funo :
Nome_funo (<lista de argumento>): tipo
Onde:
Nome_funao = a palavra reservada que representa a funo.
Lista de argumento = um ou mais dados necessrios para que a funo
possa processar o seu objetivo.
Tipo = Tipo do resultado que a funo retorna aps o processamento.
Toda funo retorna (resulta) em um valor que pode ser usado como parte de
uma expresso matemtica, armazenado ou exibido. O tipo no escrito no
algoritmo, ele apenas representa o tipo do resultado esperado.
Tomemos por exemplo a funo EXP que executa a operao de
exponenciao, operao escrita como an (a elevado a n, onde a a
base e n o expoente). Sua sintaxe especfica :
EXP (<base>,<expoente>): real
Neste caso, a lista de argumentos composta de dois elementos, o primeiro a
base e o segundo o expoente. O resultado do processamento desta funo em
um valor do tipo real:
Exemplos:
numero1 := 10
numero2 := 2
resultado:= EXP(numero1, numero2)
// resultado da exponenciao sendo
// armazenada em uma varivel
resultado:= 2 * EXP(numero1, numero2) + 10
// resultado da exponenciao sendo usada
41
Lgica de Programao
Competncia 02
// como parte de uma expresso matemtica
escreva(Resultado: , EXP(numero1, numero2))
// resultado da exponenciao sendo exibida
// diretamente
Como o resultado da funo exponenciao do tipo real, a varivel que ir
armazenar o resultado de uma exponenciao dever ser declarada do tipo
real.
Na tabela 3 informamos trs funes aritmticas que podemos utilizar em
nossos prximos exerccios:
FUNO
INT
RAIZQ
QUAD
OPERAO
Converte um valor real em valor
inteiro
Raiz quadrada
Quadrado
SINTAXE
INT(valor:real): inteiro
RAIZQ(valor:real): real
QUAD(valor:real): real
Assista ao vdeo
postado no link
http://youtu.be/nB
nalT6oG-8 onde
temos um exemplo
de um algoritmo
sendo
desenvolvido, nele
utilizada a funo
INT. No deixe de
assisti-lo.
OPERADOR / FUNO
()
Funes
* / DIV MOD
+ -
42
Tcnico em Informtica
Competncia 02
operadores de multiplicao, diviso, quociente e resto, e por fim os
operadores de adio e subtrao.
43
Lgica de Programao
Competncia 03
3.COMPETNCIA 03 | DESENVOLVER UM ALGORITMO PARA
RESOLUO DE UM PROBLEMA UTILIZANDO ESTRUTURA DE
DECISO
Nos algoritmos desenvolvidos nos captulos anteriores, todas as instrues
eram executadas sequencialmente, ou seja, todas eram executadas na ordem
em que foram codificadas. Nem todos os problemas exigem que todas as
instrues sejam executadas, como por exemplo: foi codificada uma instruo
para solicitar o estado civil de uma pessoa e outra instruo para solicitar o
nome do cnjuge (esposo ou esposa). Embora a instruo solicitando o nome
do cnjuge tenha de ser codificada no algoritmo, pois o algoritmo tem que
atender a qualquer tipo de pessoa, se a resposta ao estado civil for solteiro,
no faz sentido solicitar o nome do cnjuge. A execuo do algoritmo deve
pular esta instruo.
Este captulo ir tratar da estrutura de deciso que pode ser colocada em um
algoritmo, permitindo que haja uma tomada de deciso durante a execuo
do programa.
3.1 Operao Condicional
Para que haja uma deciso, uma operao condicional precisa ser
estabelecida, como no exemplo citado da introduo deste captulo, onde a
condio para solicitar o nome do cnjuge ser solteiro. Na programao,
uma operao condicional ocorre quando relacionamos dois elementos.
O relacionamento de dois elementos feito atravs de operadores relacionais
e sempre resulta em um valor lgico: VERDADEIRO ou FALSO. Na tabela 5
esto listados os operadores relacionais que podem ser usados em uma
operao condicional.
44
Tcnico em Informtica
Competncia 03
OPERADOR
=
<>
>
<
>=
<=
OBJETIVO
Igual
Diferente
Maior que
Menor que
Maior ou igual
Menor ou igual
RESULTADO
num1 = num2
Est sendo comparado se os dados armazenados nas
variveis num1 e num2 so iguais.
Depende dos valores armazenados em num1 e num2.
Supondo que as variveis armazenem os valores 10 cada
uma, o resultado da comparao VERDADEIRO.
Se a varivel num1 armazena o valor 10 e a varivel num2
armazena o valor 5, o resultado da comparao FALSO.
45
Lgica de Programao
Competncia 03
OPERAO
COMENTRIO
RESULTADO
OPERAO
COMENTRIO
RESULTADO
OPERAO
COMENTRIO
RESULTADO
OBSERVAO
4>6
Est sendo comparado se a constante numrica 4 maior
que outra constante numrica 6.
O resultado da comparao FALSO, pois o nmero 4 no
maior que o nmero 6.
A <> B
Como A e B esto entre aspas, no se tratam de
variveis, mas de constantes literais (texto). Est sendo
comparado se a letra A maiscula diferente da letra B
maiscula.
O resultado da comparao VERDADEIRO.
num1 <> 6
Est sendo comparado se o dado armazenado na varivel
num1 diferente da constante numrica 6.
Depende do tipo da varivel num1 e do valor armazenado
nela.
Considerando que a varivel num1 seja numrica (inteiro
ou real): se a varivel num1 armazena o valor 6, o resultado
da comparao FALSO.
Se a varivel num1 armazena qualquer outro valor
numrico, o resultado da comparao VERDADEIRO.
Considerando que a varivel num2 no seja numrica: o
resultado FALSO, pois esto sendo comparados elementos
de tipos diferentes. Varivel literal ou lgica sendo
comparado com uma constante numrica.
O correto comparamos elementos numerais com
numerais, lgico com lgico ou literal com literal.
Este exemplo apenas ilustrativo, pois a maioria das
linguagens de programao entende como erro a
comparao entre tipos diferentes.
O Visualg no est preparado para este tipo de comparao,
resultando sempre em FALSO.
46
Tcnico em Informtica
Competncia 03
OPERAO
COMENTRIO
RESULTADO
OPERAO
COMENTRIO
RESULTADO
OBSERVAO
1 = 1
O primeiro elemento da comparao o nmero 1 e o
segundo elemento o literal 1 (observe que est entre
aspas, o que caracteriza ser um literal).
O resultado da comparao FALSO, pois esto sendo
comparados elementos de tipos diferentes. Veja a
observao do exemplo anterior.
A < a
Como A e a esto entre aspas, no se tratam de
variveis, mas de constantes literais (texto). Est sendo
comparado se a letra A maiscula menor que a letra a
minscula.
O resultado da comparao VERDADEIRO.
Aqui voc pode ter achado essa comparao estranha, pode
ter pensado: -mas como eu posso afirmar que uma letra
menor ou maior que a outra?. A explicao pra isso segue
logo abaixo, no deixem de ler o texto do link.
47
Lgica de Programao
Competncia 03
sintaxe de uma operao condicional temos:
Condio 1: idade > 17
Condio 2: idade < 66
Escrevendo-as em linha temos:
(idade > 17) E (idade < 66)
Note que para uma pessoa votar deve atender as duas condies (a primeira
condio E a segunda condio). Surge ento a necessidade de conectarmos
duas condies. Nesse caso, a sintaxe da linguagem algortmica exige que
cada condio esteja entre parnteses.
A tabela 6 apresenta dois operadores lgicos de conexo que permitem a
elaborao de expresses lgicas mais complexas:
CONECTOR
E
OU
Tabela 6 - Operadores Lgicos
Fonte: O autor (2013)
RESULTADO DA 2
CONDIO
RESULTADO DA
EXPRESSO
V
V
F
F
V
F
V
F
V
F
F
F
48
Tcnico em Informtica
Competncia 03
OU
RESULTADO DA 1
CONDIO
RESULTADO DA 2
CONDIO
RESULTADO DA
EXPRESSO
V
V
F
F
V
F
V
F
V
V
V
F
49
Lgica de Programao
Competncia 03
Para exemplificarmos seu uso vamos considerar uma situao onde teremos
como entrada o tipo de ligao telefnica, que pode ser: L (local fixo), C
(celular local), E (estadual) ou I (internacional). Sempre que a ligao for do
tipo C, E ou I dever ser solicitado uma senha. A expresso condicional para
atender a este critrio pode ser assim escrita:
(Tipo=C) OU (Tipo=E) OU (Tipo=I)
O uso do operador NAO pode simplificar a expresso da seguinte forma:
NAO(Tipo=L)
A expresso lgica fica mais simples utilizando o operador de negao e
comparando apenas o nico tipo que no exige senha.
OPERADOR
NAO
E
OU
50
Tcnico em Informtica
Competncia 03
falso OU
verdadeiro E
verdadeiro OU
falso E falso
verdadeiro E
(verdadeiro OU
falso) E
51
Lgica de Programao
Competncia 03
falso OU verdadeiro E falso
Vamos resolver agora o segundo E, que resulta na expresso:
falso OU falso
E finalmente, resolvendo o operador OU que resta, chegamos ao resultado
final: falso
Para melhor fixao deste assunto, vamos observar alguns exemplos:
Exemplo 1: Considere a situao das pessoas que no so obrigadas a votar.
De acordo com a legislao eleitoral, existem dois casos onde o voto
opcional:
Caso 1: Para quem tem mais de 15 anos e menos de 18 anos, que podemos
representar com a seguinte expresso lgica:
(idade>15) E (idade<=17)
Caso 2: Para quem tem mais de 65 anos, que podemos representar com a
seguinte expresso lgica:
idade>65
Como no caso 1 OU no caso 2 o voto opcional, podemos juntar as duas
expresses atravs do operador lgico OU e quaisquer uma das seguintes
expresses podem ser escritas:
Expresso 1: idade>15 E idade<=17 OU idade>65
Expresso 2: idade>65 OU idade>15 E idade<=17
Voc deve lembrar-se de que pela tabela 7 de prioridade dos operadores
52
Tcnico em Informtica
Competncia 03
lgicos, independente da ordem em que os operadores lgicos esto
colocados na expresso, primeiro deve ser resolvido o operador E (verificando
se a idade est na faixa de 16 a 17 anos) para s depois verificar o operador
OU.
Se o valor armazenado na varivel idade for 7 anos, teremos pela primeira
expresso:
(7>15) E (7<=17) OU (7>65)
Resolvendo as condies teremos:
falso E verdadeiro OU falso
Resolvendo o operador E (pela tabela 7 - tabela verdade E), falso E verdadeiro
resulta em falso, ficando assim a expresso:
falso OU falso
Por fim, resolvendo o operador OU (pela tabela 8 tabela verdade OU), falso
OU falso resulta em falso, ou seja, falso para uma pessoa de 7 anos que o
voto opcional.
Agora faa o teste acima com as idades 16, 30 e 70 anos e verifique como o
resultado corresponde realidade em relao ao que a lei eleitoral estabelece
quanto idade para o voto opcional.
Tambm resolva a expresso 2 abaixo, com as idades 7, 16, 30 e 70 e
comprove que o resultado o mesmo da expresso 1.
Expresso 2: (idade>65) OU (idade>15) E (idade<=17)
Exemplo 2: Agora consideremos a situao onde para ser aprovado o aluno
53
Lgica de Programao
Competncia 03
tem que:
Caso 1: Ter frequentado pelo menos a 75% das aulas, que podemos
representar com a seguinte expresso lgica:
perc_freq>=75
Caso 2: Ter obtido o conceito A ou B, que podemos representar com a
seguinte expresso lgica:
(conc=A) OU (conc=B)
No exemplo 1, um dos dois casos deveria ser verdadeiro para que a pessoa
pudesse votar de forma opcional, por isso, conectamos as expresses lgicas
com o conector E. Na situao deste exemplo, os dois casos devem ser
atendidos para que o aluno seja aprovado. Logo, iremos conectar as
expresses com o conector E, que pode resultar em uma das expresses:
Expresso 1: (perc_freq>=75) E (conc=A) OU (conc=B)
Expresso 2: (conc=A) OU (conc=B) E (perc_freq>=75)
A princpio voc pode achar que as expresses esto corretas, mas h um erro
lgico, considerando-se as tabelas verdades 8 e 9.
Vamos resolver as sentenas para entendermos o erro lgico da expresso:
Se o valor armazenado na varivel perc_freq for 60 e o valor armazenado na
varivel conceito for A, teremos pela primeira expresso:
(60>=75) E (A=A) OU (A=B)
Resolvendo as condies teremos:
54
Tcnico em Informtica
Competncia 03
falso E verdadeiro OU falso
Resolvendo o operador E (pela tabela 7 - tabela verdade E), falso E verdadeiro
resulta em falso, ficando assim a expresso:
falso OU falso
Por fim, resolvendo o operador OU (pela tabela 8 tabela verdade OU), falso
OU falso resulta em falso, ou seja, falso para uma pessoa com 60% de
frequncia e conceito A que esteja aprovado.
Tambm resolva a expresso 2 com os mesmos valores e comprove que o
resultado o mesmo da expresso 1.
Expresso 2: (conc=A) OU (conc=B) E (perc_freq>=75)
Bem, a voc pergunta: No vi erro nenhum, cad o erro lgico de que voc
falou?. Realmente, para os dados colocados o erro no aparece. Mas ai que
est o segredo do que estamos estudando a lgica de programao
utilizando algoritmos. Para que um algoritmo esteja correto, ele tem que
atender corretamente a situao de todos os alunos que possamos imaginar.
Vamos colocar agora um aluno tambm com 60% de frequncia e com o
conceito B, ficando assim, pela primeira expresso:
(60>=75) E (B=A) OU (B=B)
Resolvendo as condies teremos:
falso E falso OU verdadeiro
Resolvendo o operador E (pela tabela 7 - tabela verdade E), falso E falso
resulta em falso, ficando assim a expresso:
55
Lgica de Programao
Competncia 03
falso OU verdadeiro
Resolvendo o operador OU (pela tabela 8 tabela verdade OU), falso OU
verdadeiro resulta em verdadeiro, ou seja, verdadeiro para uma pessoa
com 60% de frequncia e conceito B que esteja aprovado, o que no faz o
menor sentido, porque ele tem apenas 60% de frequncia. Mesmo se
utilizarmos a expresso 2, o resultado tambm estaria errado.
Esse tipo de erro o que chamamos de erro lgico, uma vez que a sintaxe da
expresso est correta, mas a lgica em relao ao problema que desejamos
resolver no est.
Vamos pensar mais sobre o problema?
Para ser aprovado um aluno deve atender aos dois casos seguintes:
Caso 1: perc_freq>=75
Caso 2: (conc=A) OU (conc=B)
Como temos dois casos, mas trs condies, o computador no sabe se so
trs casos ou dois casos, combinando a 1 condio com a 2 condio ou
combinando a 2 condio com a 3 condio. Nessa situao, ele obedece
regra de prioridade dos conectores lgicos. Analisando novamente as duas
condies vistas anteriormente, o computador estar resolvendo primeiro o
conector lgico E, que tem mais prioridade que o conector lgico OU,
conforme destacado nas expresses abaixo:
Expresso 1: (perc_freq>=75) E (conc=A) OU (conc=B)
Expresso 2: (conc=A) OU (conc=B) E (perc_freq>=75)
Para fazer o Caso 2 ser resolvido prioritariamente e s depois ser conectado
ao Caso 1, voc deve recorrer ao uso dos parnteses, pois ele faz com que a
expresso que est dentro dos parnteses seja resolvida primeiro, conforme
56
Tcnico em Informtica
Competncia 03
as expresses a seguir:
Expresso 1: (perc_freq>=75) E ((conc=A) OU (conc=B))
Expresso 2: ((conc=A) OU (conc=B)) E (perc_freq>=75)
Vamos resolver agora expresso 1 com os mesmos valores que serviram para
identificarmos o erro lgico: 60% de frequncia e conceito B, ficando assim,
a soluo:
(60>=75) E ((B=A) OU (B=B))
Resolvendo as condies teremos:
falso E (falso OU verdadeiro)
Resolvendo primeiro o operador OU por causa dos parnteses (pela tabela 8 tabela verdade OU), falso OU verdadeiro resulta em verdadeiro, ficando
assim a expresso:
falso E verdadeiro
Resolvendo o operador E (pela tabela 7 tabela verdade E), falso E
verdadeiro resulta em falso, ou seja, falso para uma pessoa com 60% de
frequncia e conceito B que esteja aprovado.
Dominar a elaborao e a resoluo de expresses lgicas uma habilidade
fundamental para a competncia que estamos estudando e para poder
desenvolver algoritmos com a estrutura de deciso que estudaremos no
prximo item.
3.4 Estrutura de Deciso
Durante todos os tpicos anteriores, estivemos fundamentando os conceitos
57
Lgica de Programao
Competncia 03
que envolvem a tomada de deciso por parte do computador, via linguagem
de programao algortmica. Agora chegou a hora de conhecermos o que ir
suportar a tomada de deciso e alterar o fluxo do programa. Denominamos
de estrutura, porque no uma simples instruo de uma linha, mas no
mnimo duas linhas que formaro um bloco de instrues.
3.4.1 Estrutura de Deciso Simples
Esta estrutura utilizada em situaes onde uma mudana da sequncia
normal de execuo das instrues deve ocorrer apenas se a condio
avaliada resultar em um valor lgico VERDADEIRO.
Se o resultado da condio avaliada for um valor lgico FALSO, no haver
mudana da sequncia e a execuo segue seu fluxo normal.
A representao grfica da figura 23faz uma comparao com uma avenida.
Se em um trecho houver uma obstruo, voc pode tomar um desvio e
retomar a avenida em um ponto mais a frente, aps a obstruo.
58
Tcnico em Informtica
Competncia 03
FIMSE
Denominamos de estrutura, porque no uma simples instruo de uma
linha, mas uma estrutura iniciada com o comando SE e finalizado como o
comando FIMSE. Entre estes dois comandos podemos colocar diversas
instrues, tantas quanto forem necessrias para resolver o problema. A
expresso condicional deve atender aos conceitos estudados nos itens
anteriores deste captulo.
Consideremos uma situao onde dever ser concedido um desconto quando
a venda de um produto for maior que quatro unidades. Desenvolvemos o
seguinte algoritmo para resolver este problema.
algoritmo "Estrutura de Deciso Simples"
var
preco_unit: real
quantidade: inteiro
perc_desconto: real
valor_desconto: real
preco_total: real
inicio
escreva("Digite o preo unitrio: ")
leia(preco_unit)
escreva("Digite a quantidade vendida: ")
leia(quantidade)
// calculando o preo total (sem desconto)
preco_total := preco_unit * quantidade
// Tomando deciso sobre desconto
se (quantidade>4) entao
escreva("Digite o % de desconto: ")
leia(perc_desconto)
// Calculando o desconto
valor_desconto := preco_total*perc_desconto/100
59
Lgica de Programao
Competncia 03
// retirando o desconto do preco total
preco_total := preco_total - valor_desconto
fimse
escreva("Preo Total: ", preco_total)
fimalgoritmo
As instrues colocadas entre os comandos se e fimse s sero executadas se
a expresso lgica do comando se resultar em verdadeiro. Nesse caso, ser
solicitado o percentual do desconto, calculado o valor do desconto e
recalculado o preo total. Note que o preo total, sem desconto, j foi
calculado antes da estrutura se. Dentro da estrutura se o preo total apenas
est sendo recalculado, abatendo-se o valor do desconto.
3.4.2 Estrutura de Deciso Composta
Esta estrutura utilizada em situaes onde duas mudanas de sequncia so
previstas. Uma mudana de sequncia executada se o resultado da condio
avaliada for um valor lgico VERDADEIRO e a outra mudana de sequncia
ser executada se o resultado da condio avaliada for um valor lgico FALSO.
Caro aluno, vamos comparar novamente com uma avenida? Observe na figura
24, onde em certo ponto da avenida no d para seguir em frente, mas se
deve tomar uma deciso entre duas alternativas possveis.
60
Tcnico em Informtica
Competncia 03
A sintaxe da estrutura condicional que permite este tipo de desvio :
SE <expresso_condicional> ENTAO
<bloco_de_instrues_1>
SENAO
<bloco_de_instrues_2>
FIMSE
Esta estrutura permite a definio de dois blocos de comandos. O
bloco_de_instruo_1 a ser executado se o teste da condio resultar em
VERDADEIRO. Se no for VERDADEIRO, isto , for FALSO, o
bloco_de_instruo_2 ser executado, tendo incio a partir do comando
SENAO.
Como aplicao prtica desta estrutura, vamos elaborar um algoritmo que
receba duas notas, calcule e mostre a mdia. Considerando que a mdia para
aprovao seja 6, mostre tambm se o aluno foi aprovado ou reprovado.
algoritmo "Calcula Media"
var
nota1, nota2, media: real
inicio
escreva ("Digite a 1 nota: ")
leia (nota1)
escreva ("Digite a 2 nota: ")
leia (nota2)
media := (nota1 + nota2) / 2
escreva ("A mdia : ", media)
// Tomando deciso sobre aprovao
se (media < 6) entao
escreval ("Aluno Reprovado")
senao
61
Lgica de Programao
Competncia 03
escreval ("Aluno Aprovado")
fimse
fimalgoritmo
Entendeu? Aps calcular e mostrar a mdia preciso informar uma das
alternativas: aprovado ou reprovado. Como so duas alternativas colocamos
uma estrutura de deciso composta testando se a mdia inferior a 6. Se
resultar em verdadeiro, ser mostrado Aluno Reprovado, se no resultar em
verdadeiro s pode resultar em falso, neste caso ser mostrado Aluno
Aprovado. No legal? assim que o computador toma decises.
Agora, vamos desenvolver um algoritmo para informar se um nmero inteiro
par ou mpar. Voc j pode imaginar que uma estrutura de deciso
composta deve ser utilizada porque dois caminhos so possveis: um caminho
se o nmero for par e outro caminho se o nmero no for par, ou seja, for
mpar. E como saber se um nmero par? Bem, todo nmero par quando
dividido por 2, resta 0. Opa! Lembrou-se do operador MOD, estudado na
competncia anterior, que mostra o resto de uma diviso inteira? Ento,
vamos combinar uma estrutura condicional e uma expresso utilizando o
operador MOD para resolver o problema.
algoritmo "Par ou Impar"
var
numero: inteiro
inicio
escreva ("Digite um nmero inteiro: ")
leia (numero)
se numero MOD 2 = 0 entao
escreva (O nmero par)
senao
escreva (O nmero impar)
fimse
fimalgoritmo
62
Tcnico em Informtica
Competncia 03
Muito simples, no foi? Digite este algoritmo no Visualg e faa o teste para
conferir.
3.4.3 Estrutura de Deciso Encadeada
Um bloco de comando de uma estrutura condicional pode conter qualquer
instruo, inclusive outras estruturas condicionais. Quando isto necessrio,
temos uma srie de estruturas condicionais, ao qual denominamos de
estrutura encadeada ou estrutura aninhada.
Esta estrutura utilizada em situaes onde mais de duas mudanas de
sequncia so previstas. Uma mudana de sequncia executada se o
resultado da condio avaliada for um valor lgico VERDADEIRO e a outra
mudana de sequncia ser executada se o resultado da condio avaliada for
um valor lgico FALSO, mas dentro de cada uma das duas sequncias pode
haver outras mudanas.
Para exemplificar esta estrutura, consideremos uma situao onde o aluno
pode estar aprovado, em recuperao ou reprovado, conforme as condies a
seguir:
Condio para aprovao: Mdia igual ou superior a 6.
Condio para recuperao: Mdia inferior a 6 at 3.
Condio para reprovao: Mdia menor que 3.
algoritmo "Calcula Media"
var
nota1, nota2, media: real
inicio
escreva ("Digite a 1 nota: ")
leia (nota1)
63
Lgica de Programao
Competncia 03
escreva ("Digite a 2 nota: ")
leia (nota2)
media := (nota1 + nota2) / 2
escreval ("A mdia : ", media)
se (media < 3) entao
escreval ("Reprovado")
senao
se (media < 6) entao
escreval ("Recuperao")
senao
escreval ("Aprovado")
fimse
fimse
fimalgoritmo
64
Tcnico em Informtica
Competncia 03
Obs.: Estudante paga 50% do valor normal do ingresso.
3. Escreva um algoritmo para ler o preo do ingresso de um show, a
quantidade de ingressos vendidos do tipo inteiro e a quantidade de ingressos
vendidos do tipo meia-entrada. Calcule e mostre o valor total arrecadado,
considerando que o ingresso do tipo meia-entrada custa metade do ingresso
do tipo inteiro.
4. Escreva um algoritmo para ler dois nmeros e mostrar o maior dos
nmeros ou, se os nmeros forem iguais, mostrar o texto Nmeros iguais.
5. Escreva um algoritmo para ler o valor de uma conta de restaurante, a
quantidade de homens, a quantidade de mulheres e a quantidade de crianas
que participaram da refeio. Calcule e mostre o valor que cada um dos
participantes deve pagar, considerando que mulheres e crianas pagam a
metade do valor que os homens devem pagar.
65
Lgica de Programao
Competncia 04
4.COMPETNCIA 04 | DESENVOLVER UM ALGORITMO PARA
RESOLUO DE UM PROBLEMA UTILIZANDO ESTRUTURA DE
REPETIO
Alm das estruturas estudadas no captulo anterior, que permitem diversas
sequencias de instrues em um algoritmo, existem vrias estruturas que
permitem a repetio de uma sequencia de instrues. Esses tipos de
estruturas so teis em diversas situaes, como por exemplo: crtica de
dados, onde uma instruo de entrada de dados repetida, at que um valor
vlido seja digitado. Nesta competncia sero estudados trs tipos de
estruturas de repetio e voc entender quando utilizar cada uma delas.
4.1 Estrutura de Repetio Indefinida, com uma Repetio Obrigatria
Em situaes onde no sabemos quantas vezes uma sequncia de instrues
deve ser repetida, voc deve utilizar uma estrutura de repetio indefinida.
Existem duas estruturas de repetio indefinida. Uma em que o bloco de
repetio ocorre pelo menos uma vez e outra em que o bloco de repetio
pode no ocorrer nenhuma vez.
Para repetir pelo menos uma vez, podemos utilizar a estrutura REPITA, cuja
sintaxe a seguinte:
REPITA
<bloco_de_instrues>
ATE <expresso_condicional>
Quando a execuo do algoritmo atinge o comando REPITA, ele entende que
comeou um bloco de instrues que pode se repetir. Esse bloco estende-se
at o comando ATE. O bloco executado pela primeira vez, ou seja, ocorre a
primeira repetio. Ao atingir o comando ATE, a expresso condicional
contida neste comando avaliada. Se o resultado da expresso condicional
66
Tcnico em Informtica
Competncia 04
for FALSO ocorrer nova repetio do bloco de instruo. A cada final de
repetio a expresso condicional avaliada. Quando acontecer do resultado
da expresso condicional ser VERDADEIRO, a repetio para e a execuo do
algoritmo continua sequencialmente.
Para compreender melhor o conceito desta repetio, observe o seguinte
pseudocdigo:
Instruo_1
Instruo_2
Instruo_3
REPITA
Instruo_4
Instruo_5
ATE condio
Instruo_6
Instruo_7
As instrues 1, 2 e 3 sero executadas sequencialmente no incio da
execuo do algoritmo.
As instrues 4 e 5, que fazem parte de um bloco de repetio, sero
executadas uma vez. Como a repetio definida pelo comando REPITA, cuja
condio de repetio codificada no final do bloco, no comando ATE, a
possibilidade de repetio depende da avaliao desta condio. Se o
resultado for FALSO, as instrues 4 e 5 sero executadas novamente, ou seja,
ocorrer nova repetio destes comandos. Quando o resultado da condio
for VERDADEIRO, a repetio termina e sero executados os comandos 6 e 7.
Vamos considerar o algoritmo que calcula a mdia aritmtica entre duas
notas. O valor mximo de cada nota s pode ser 10. Caso o usurio digite um
valor maior que 10, o valor no deve ser aceito e a instruo de entrada deve
se repetir at que um valor menor ou igual a 10 seja digitado. Nosso algoritmo
67
Lgica de Programao
Competncia 04
deve ficar da seguinte forma:
algoritmo "Calcula Media"
var
nota1, nota2, media: real
inicio
repita
escreva ("Digite a 1 nota: ")
leia (nota1)
ate (nota1<=10)
repita
escreva ("Digite a 2 nota: ")
leia (nota2)
ate (nota2<=10)
media := (nota1 + nota2) / 2
escreva ("A mdia : ", media)
fimalgoritmo
Assista ao vdeo
postado no link
http://youtu.be/9x
CtVeIJWXk
e veja como
melhorar ainda
mais a interao do
algoritmo com o
usurio.
4.2 Contador
Com o uso de estrutura de repetio surge a necessidade de realizarmos
algumas contagens como, por exemplo:
A quantidade de vezes que a repetio ocorreu;
Se a repetio foi por erro, quantas vezes o usurio errou;
Se no bloco de repetio foi solicitado o sexo de uma pessoa, quantas so
do sexo masculino e quantas so do sexo feminino.
Um contador uma varivel que, a partir de um valor inicial, a cada repetio
pode ter o seu valor aumentado ou diminudo de um valor constante.
A sintaxe de um contador :
<contador> := <contador> + / - <constante_numerica>
68
Tcnico em Informtica
Competncia 04
Vamos desenvolver um algoritmo para receber o sexo de vrias pessoas.
Dever ser digitado M para masculino e F para feminino. Para finalizar o
algoritmo dever ser digitado o sexo X. Ao final da execuo o algoritmo
dever exibir a quantidade de pessoas do sexo masculino e a quantidade de
pessoas do sexo feminino.
algoritmo "Contador"
var
sexo: literal
masculino, feminino: inteiro
inicio
// Iniciando o valor dos contadores com zero
masculino := 0
feminino := 0
repita
escreva ("Digite o sexo (M/F): ")
leia (sexo)
se sexo=M entao
masculino := masculino + 1
senao
se sexo=F entao
feminino := feminino + 1
fimse
fimse
ate (sexo=X)
escreval ("Masculino(s): ", masculino)
escreval ("Feminino(s): ", feminino)
fimalgoritmo
Como a contagem realizada a partir de um valor inicial, inicializamos as
variveis contadoras masculino e feminino com o valor zero no incio da
seo de comandos.
Nesse algoritmo, toda vez que digitado a letra M para uma leitura de um
69
Lgica de Programao
Competncia 04
sexo, adicionado o valor da constante numrica 1 a varivel contadora
masculino. E toda vez que digitado a letra F para uma leitura de um
sexo, adicionado o valor da constante numrica 1 a varivel contadora
feminino.
Observe a condio colocada no comando ATE. Esta condio (sexo = X) que
determina at quando a repetio ocorrer.
4.3 Acumulador
O conceito de acumulador muito parecido com o conceito de contador,
sendo que o acumulador, a partir de um valor inicial, pode aumentar ou
diminuir um valor varivel a cada repetio, cuja sintaxe a seguinte:
<acumulador> := <acumulador> + / - <varivel_numerica>
Vamos desenvolver um algoritmo para receber o preo de vrios produtos.
Para finalizar o algoritmo dever ser digitado o preo 0 (zero). No final ser
exibido o valor total dos produtos.
algoritmo "Acumulador"
var
preco, total: real
inicio
// Iniciando o valor do acumulador com zero
total := 0
repita
escreva ("Digite o preo: ")
leia (preco)
total := total + preco
ate (preco=0)
escreval ("Valor total: ", total)
fimalgoritmo
70
Tcnico em Informtica
Competncia 04
Neste algoritmo, o valor do preo digitado a cada repetio adicionado ao
acumulador total, at que seja digitado um preo 0.
Como o acumulo realizado a partir de um valor inicial, inicializamos a
varivel acumuladora total com o valor zero no incio da seo de
comandos.
4.4 Estrutura de Repetio Indefinida, com Repetio Opcional
Para situao onde a repetio de um bloco de comando, ainda que seja a
primeira repetio, depende de uma condio inicial, voc deve utilizar a
estrutura ENQUANTO, cuja condio fica no incio da estrutura e tem a
seguinte sintaxe:
ENQUANTO <expresso_condicional> FACA
<bloco_de_instrues>
FIMENQUANTO
Voc notou a diferena entre a estrutura REPITA e a estrutura ENQUANTO? A
expresso condicional nesta estrutura colocada no incio do bloco que se
deseja repetir.
Quando a execuo do algoritmo encontra a condio contida no comando
ENQUANTO, a condio avaliada. Se o resultado for VERDADEIRO, o bloco
de comando entre o comando ENQUANTO e o comando FIMENQUANTO
executado e a execuo retorna ao comando ENQUANTO que testa a
condio novamente. Se o resultado da condio for FALSO, o algoritmo
pula o bloco de comando e segue executando os comandos aps o
comando FIMENQUANTO.
Vamos utilizar o mesmo pseudocdigo utilizado na estrutura de repetio
anterior para compreender melhor o conceito desta repetio.
71
Lgica de Programao
Competncia 04
Instruo_1
Instruo_2
Instruo_3
ENQUANTO condio FACA
Instruo_4
Instruo_5
FIMENQUANTO
Instruo_6
Instruo_7
As instrues 1, 2 e 3 sero executadas sequencialmente no incio da
execuo do algoritmo.
Ao atingir o comando ENQUANTO a condio avaliada. Se o resultado for
FALSO, a execuo continua nas instrues 6 e 7. Se o resultado for
VERDADEIRO, as instrues 4 e 5 so executadas, o fluxo de execuo retorna
ao comando ENQUANTO para avaliar a condio novamente e julgar se ir
repetir as instrues 4 e 5 mais uma vez ou encerrar a repetio e executar os
comandos 5 e 6.
Vamos elaborar um algoritmo para solicitar a quantidade de filhos de um
casal. Para cada filho dever ser solicitada a idade. No final do algoritmo
dever ser mostrada a mdia de idades dos filhos do casal.
algoritmo "Repetio"
var
quant_filhos, idade: inteiro
contador, acumulador: inteiro
media: real
inicio
escreva(Digite a quantidade de filhos: )
leia (quant_filhos)
// Iniciando contador e acumulador com zero
contador := 0
72
Tcnico em Informtica
Competncia 04
acumulador := 0
enquanto contador<quant_filhos faca
contador := contador + 1
escreva (Idade do ,contador, filho: )
leia (idade)
acumulador := acumulador + idade
fimenquanto
media:=0
se quant_filhos <> 0 entao
media:= acumulador / quant_filhos
fimse
escreva (Mdia das idades: , media)
fimalgoritmo
Assista no vdeo
postado no
link http://youtu.b
e/SE7Tu1UE3vQ
a execuo
comentada deste
algoritmo.
73
Lgica de Programao
Competncia 04
dia da semana. No final do algoritmo dever ser mostrada a temperatura
mdia da semana.
algoritmo "Repetio"
var
dia: inteiro
temp_dia, temp_semana, media: real
inicio
// inicializado o acumulador com zero
temp_semana :=0
para dia de 1 ate 7 faca
escreva (Temperatura do ,dia, dia: )
leia (temp_dia)
temp_semana := temp_semana + temp_dia
fimpara
media:= temp_semana / 7
escreva (Temp. mdia da semana: , media)
fimalgoritmo
A execuo deste
algoritmo
comentada, voc
pode assistir no
link http://youtu.be
/YWdrW9xQ8Ec
74
Tcnico em Informtica
Competncia 04
f como entrada para a leitura do sexo. No final o algoritmo deve mostrar se
houve mais participantes do sexo masculino, mais participantes do sexo
feminino ou se a quantidade de participantes do sexo masculino e do sexo
feminino foram iguais.
3.Escreva um algoritmo para ler o nome, o estado civil e a quantidade de
dependentes de quatro funcionrios. Se houver dependentes, para cada
dependente dever ser lida a idade e o tipo de dependente que pode ser:
C para cnjuge ou
X para outro tipo de dependente
O algoritmo dever mostrar o valor total do benefcio que cada funcionrio
deve receber, considerando-se que:
a) Para o funcionrio pago um valor de R$ 40,00.
b) Para o cnjuge de funcionrio casado pago um valor de R$ 20,00.
c) Para outro tipo de dependente com idade de at 17 anos pago o valor de
R$ 15,00.
75
Lgica de Programao
CONCLUSO
Prezado aluno, finalmente conclumos as quatro competncias previstas para
esta disciplina, onde tivemos a oportunidade de aprender como programar
um computador.
Iniciamos pelos princpios da lgica de programao algortmica, conhecendo
sobre dados e informaes, linguagem de programao, como ocorre a
entrada dos dados, como os dados processados so atribudos a variveis e
como as informaes geradas so exibidas aos usurios. Foi nesta primeira
etapa que tivemos contato com o Visualg ferramenta para edio e
execuo de algoritmo.
Consolidados os princpios da lgica de programao algortmica, partimos
para uma etapa onde tivemos conhecimento sobre vrios operadores e
funes que muito nos ajudam a desenvolver algoritmos para realizao de
operaes matemtica.
Etapa a etapa, formos aprimorando nosso conhecimento e tivemos contato
com as estruturas de deciso, lembram? Estrutura de deciso simples,
composta e encadeada? Agora sim, nossos algoritmos podem fazer
comparaes e decidir por qual caminho seguir.
Finalizamos esta disciplina estudando as estruturas de repetio, onde foi
possvel desenvolver algoritmos mais elaborados utilizando contadores e
acumuladores.
Espero que voc tenha aprendido bem todas as etapas, pois so fundamentais
para as disciplinas Linguagem de programao para Web, Orientao a
objetos e Projeto de desenvolvimento de software. importante que voc
busque aprofundar e complementar seus conhecimentos, para que possa se
tornar um profissional bem qualificado e consequentemente bem sucedido.
76
Tcnico em Informtica
MINICURRCULO DO PROFESSOR
77
Lgica de Programao