Академический Документы
Профессиональный Документы
Культура Документы
PROGRAMAO I
Professora Me. Gislaine Camila Lapasini Leal
GRADUAO
ANLISE E DESENVOLVIMENTO DE SISTEMAS
SISTEMAS PARA INTERNET
MARING-PR
2012
Reitor: Wilson de Matos Silva
Vice-Reitor: Wilson de Matos Silva Filho
Pr-Reitor de Administrao: Wilson de Matos Silva Filho
Presidente da Mantenedora: Cludio Ferdinandi
As imagens utilizadas neste livro foram obtidas a partir dos sites PHOTOS.COM e SHUTTERSTOCK.COM.
Av. Guedner, 1610 - Jd. Aclimao - (44) 3027-6360 - CEP 87050-390 - Maring - Paran - www.cesumar.br
NEAD - Ncleo de Educao a Distncia - bl. 4 sl. 1 e 2 - (44) 3027-6363 - ead@cesumar.br - www.ead.cesumar.br
ALGORITMOS E LGICA DE
PROGRAMAO I
Viver e trabalhar em uma sociedade global um grande desafio para todos os cidados.
A busca por tecnologia, informao, conhecimento de qualidade, novas habilidades para
liderana e soluo de problemas com eficincia tornou-se uma questo de sobrevivncia no
mundo do trabalho.
Cada um de ns tem uma grande responsabilidade: as escolhas que fizermos por ns e pelos
nossos far grande diferena no futuro.
Diante disso, o Cesumar almeja ser reconhecido como uma instituio universitria de
referncia regional e nacional pela qualidade e compromisso do corpo docente; aquisio
de competncias institucionais para o desenvolvimento de linhas de pesquisa; consolidao
da extenso universitria; qualidade da oferta dos ensinos presencial e a distncia; bem-
estar e satisfao da comunidade interna; qualidade da gesto acadmica e administrativa;
compromisso social de incluso; processos de cooperao e parceria com o mundo do
trabalho, como tambm pelo compromisso e relacionamento permanente com os egressos,
incentivando a educao continuada.
Todas as atividades de estudo presentes neste material foram desenvolvidas para atender o
seu processo de formao e contemplam as diretrizes curriculares dos cursos de graduao,
determinadas pelo Ministrio da Educao (MEC). Desta forma, buscando atender essas
necessidades, dispomos de uma equipe de profissionais multidisciplinares para que,
independente da distncia geogrfica que voc esteja, possamos interagir e, assim, fazer-se
presentes no seu processo de ensino-aprendizagem-conhecimento.
Neste sentido, por meio de um modelo pedaggico interativo, possibilitamos que, efetivamente,
voc construa e amplie a sua rede de conhecimentos. Essa interatividade ser vivenciada
especialmente no ambiente virtual de aprendizagem AVA no qual disponibilizamos, alm do
material produzido em linguagem dialgica, aulas sobre os contedos abordados, atividades de
estudo, enfim, um mundo de linguagens diferenciadas e ricas de possibilidades efetivas para
a sua aprendizagem. Assim sendo, todas as atividades de ensino, disponibilizadas para o seu
processo de formao, tm por intuito possibilitar o desenvolvimento de novas competncias
necessrias para que voc se aproprie do conhecimento de forma colaborativa.
Portanto, recomendo que durante a realizao de seu curso, voc procure interagir com os
textos, fazer anotaes, responder s atividades de autoestudo, participar ativamente dos
fruns, ver as indicaes de leitura e realizar novas pesquisas sobre os assuntos tratados,
pois tais atividades lhe possibilitaro organizar o seu processo educativo e, assim, superar os
desafios na construo de conhecimentos. Para finalizar essa mensagem de boas-vindas, lhe
estendo o convite para que caminhe conosco na Comunidade do Conhecimento e vivencie
a oportunidade de constituir-se sujeito do seu processo de aprendizagem e membro de uma
comunidade mais universal e igualitria.
Apresento a voc o livro que nortear seus estudos nesta disciplina, auxiliando no aprendizado
de algoritmos e lgica de programao. Em cada unidade construiremos algoritmos passo
a passo e voc ver que medida que avanamos aumentamos a gama de problemas que
conseguimos resolver.
A Unidade II abordar o conceito de estrutura condicional, que nos possibilita impor condies
para a execuo de uma determinada instruo ou conjunto de instrues. Discutiremos sobre
Ao longo deste livro voc encontrar indicaes de leitura complementar as quais enriquecero
o seu conhecimento com mais exemplos de algoritmos. H o momento de reflexo denominado
REFLITA, que permite que voc pense com calma sobre um determinado subtema.
importante que voc desenvolva as atividades de autoestudo, pois o momento que voc
tem para colocar em prtica os conhecimentos adquiridos e identificar eventuais dificuldades.
UNIDADE I
CONCEITOS BSICOS
CONCEITUANDO ALGORITMOS 16
TIPOS DE ALGORITMOS 20
ESTUDANDO VARIVEIS 23
TIPOS DE VARIVEIS 26
CONSTANTE 28
EXPRESSES 28
FUNES INTRNSECAS 31
ATRIBUIO 32
ENTRADA DE DADOS 33
SADA DE DADOS 33
CONSTRUINDO ALGORITMOS 34
UNIDADE II
ESTRUTURA CONDICIONAL
ESTRUTURA CONDICIONAL 64
UNIDADE III
ESTRUTURA DE REPETIO
UNIDADE IV
VETORES 148
MATRIZES 162
REGISTROS 166
PROBLEMA 173
UNIDADE V
SUB-ROTINAS 190
PROCEDIMENTOS 191
FUNES 205
RECURSIVIDADE 207
CONCLUSO 223
REFERNCIAS 225
UNIDADE I
CONCEITOS BSICOS
Professora Me. Gislaine Camila Lapasini Leal
Objetivos de Aprendizagem
Plano de Estudo
Conceituando algoritmos
Tipos de algoritmos
Estudando variveis
Tipos de variveis
Constantes
Expresses
Funes Intrnsecas
Atribuio
Entrada de dados
Sada de dados
Construindo algoritmos
Problema 1
Problema 2
Problema 3
INTRODUO
Nesta unidade voc aprender os princpios bsicos de algoritmos e lgica de programao.
Algoritmos constituem o conceito central da programao e a atividade de programar envolve
a construo de algoritmos. Em geral, so utilizados para a soluo de um problema, contudo,
no se constituem em nica soluo para um problema e podemos ter vrios algoritmos que
resolvem o mesmo problema.
Construiremos trs algoritmos para visualizar a aplicao de cada um dos conceitos abordados.
Aps estudar esta unidade voc poder responder s questes relacionadas com o tema de
Algoritmos e Lgica de Programao I, tais como: Que informaes so de entrada e quais
CONCEITUANDO ALGORITMOS
Se pararmos um pouco para pensar, em nosso cotidiano encontramos uma srie de problemas
os quais demandam por uma soluo. E um algoritmo nada mais do que um conjunto de
passos que resolvem um determinado problema. Isto quer dizer que empiricamente j
conhecemos diversos algoritmos. Tomemos como exemplo o problema de ir para o trabalho
(Quadro 1)
1. Desligar o despertador
2. Ir para o banheiro
3. Lavar o rosto
4. Escovar os dentes
5. Tirar o pijama
8. Pegar o carro
9. Estacionar o carro
Observando o algoritmo para ir ao trabalho verificamos que em cada linha temos uma
instruo. Podemos dizer que o algoritmo para ir ao trabalho tem dez instrues. Portanto,
um algoritmo um conjunto de instrues. Mas, o que uma instruo? Uma instruo
uma operao bsica (sem ambiguidade) que indica a um computador a ao que deve ser
executada (SALVETTI; BARBOSA, 2004).
O Quadro 2 apresenta o conjunto de instrues a serem seguidas para tomar sal de frutas (uso
de medicamento).
4. Tomar a soluo
A sequncia de passos a ser seguida para realizar uma ligao telefnica apresentada no
Quadro 3.
1. Inserir o nmero
3. Esperar atender
4. Falar no telefone
2. Pegar a lmpada
Como j sabemos o que um algoritmo, outro conceito importante que precisamos compreender
o de programa de computador. Um programa nada mais que uma sequncia de instrues
codificada em uma linguagem que pode ser seguida por um computador. a representao
de um algoritmo em uma linguagem de programao (C, Pascal, Java, Fortran etc.) (ZIVIANE,
2004; SALVETTI; BARBOSA, 2004).
Sabemos que a construo de algoritmos requer prtica. Para facilitar nosso processo de
aprendizagem ASCENCIO; CAMPOS (2010) descrevem alguns passos que devemos seguir,
sendo eles:
TIPOS DE ALGORITMOS
ASCENCIO; CAMPOS (2010) destacam que os tipos de algoritmos mais utilizados so:
descrio narrativa, fluxograma e pseudocdigo.
Vamos tomar como exemplo a soma de dois nmeros. Seguindo os passos descritos na seo
Como Construir Algoritmos temos que:
Dados de entrada: obter do usurio quais so os dois nmeros que devemos somar.
Agora que estruturamos o nosso problema em Entrada Processamento Sada ficou mais
fcil construir o nosso algoritmo. A representao do algoritmo como descrio narrativa pode
ser visualizada no Quadro 5.
O fluxograma consiste em uma notao grfica que permite indicar as aes e decises
que devem ser seguidas para resolver o problema. Os smbolos utilizados para construir o
fluxograma so apresentados no Quadro 6.
Smbolo Descrio
Indica o incio e o fim do algoritmo.
Indica que deve ser tomada uma deciso, h possibilidade de desvio do fluxo.
Incio N1, S = N1 S
Fim
Figura 1: Fluxograma Algoritmo Soma
Fonte: a autora
ESTUDANDO VARIVEIS
Para elaborar algoritmos precisamos guardar algumas informaes e para isto utilizamos as
variveis. Uma varivel um espao na memria principal do computador que pode conter
diferentes valores a cada instante de tempo (LOPES;GARCIA, 2002).
Uma varivel pode ser vista como uma caixa que armazena pertences. Esta caixa tem um
nome e somente guarda objetos do mesmo tipo. Uma varivel possui um nome e seu contedo
pode ser de vrios tipos: inteiro, real, caractere, lgico entre outros.
Na Figura 2 temos uma varivel com nome Idade. Essa varivel pode guardar apenas valores
inteiros. Com isto, temos que o valor Casa no pode ser armazenado nesta caixa, visto que
se trata de um conjunto de caracteres.
Figura 3: Varivel
Fonte: a autora
As variveis so definidas logo no incio do algoritmo para que a rea na memria seja alocada.
A definio de variveis realizada utilizando o comando VAR, primeiro definimos o nome e,
em seguida, o tipo, do seguinte modo:
O nome deve iniciar SEMPRE com letra. Isto indica que nossas variveis podem ser
chamadas de media, altura, idade, cidade. Mas, no pode ser 2cidade, 4x etc.
A 2
a b@
altura2 caso
media_idade se
x36 x*y
TIPOS DE VARIVEIS
Como sabemos, as nossas variveis s podem armazenar dados do mesmo tipo. Os tipos de
variveis so: inteiro, real, caractere e lgico.
Uma varivel inteira armazena dados numricos que no possuem componentes decimais
ou fracionrios. Podendo o nmero ser positivo ou negativo (ASCENCIO; CAMPOS, 2010).
Alguns exemplos de nmeros inteiros so: -3, -1, 0, 4, 7. Desta forma, a declarao de uma
varivel inteira realizada da seguinte forma:
Var
Idade : Inteiro
Outro tipo de varivel numrica a real, que armazena componentes decimais ou fracionrios,
podendo estes ser positivos ou negativos. Alguns exemplos de nmeros reais so: 15.02, 4.5,
Var
Altura : Real
Neste ponto voc pode estar se perguntando: que diferena faz declarar uma varivel como
inteira ou real? Declaro todas as variveis como real j que o conjunto dos inteiros est incluso
nos reais?
A diferena est no tamanho do espao de memria utilizado. Normalmente, uma varivel inteira
pode ocupar 1, 2 ou 4 bytes. Enquanto uma varivel real poder ocupar 4 ou 8 bytes (LOPES;
GARCIA, 2002). Isto nos indica que se alocarmos todas as variveis como real, estaremos
alocando um espao de memria desnecessrio e sabemos que uma srie de informaes no
assumem valores decimais ou fracionrios. Por exemplo, quando perguntamos a idade para
uma pessoa, obtemos como resposta 26 anos e no 26,3 anos. Desta forma, para armazenar
a idade utilizamos sempre variveis do tipo inteiro. Do mesmo modo, existem informaes que
so necessariamente do tipo real, tais como altura, peso, notas, mdias e outras.
Um caractere uma varivel que armazena dado que contm letras, dgitos e/ou smbolos
especiais (LOPES; GARCIA, 2002). Alguns exemplos so: Joo, 1234567, E, 21/06/1984.
As variveis do tipo caractere possuem um comprimento associado, por exemplo, Maria tem
comprimento 5, 21/06/1984 tem comprimento 10. O comprimento corresponde ao nmero de
caracteres que a varivel possui. Ao declarar uma varivel do tipo caractere podemos definir o
tamanho mximo de caracteres que ela poder armazenar, para tanto basta inserir o tamanho
entre colchetes. A declarao de uma varivel do tipo caractere realizada da seguinte forma:
H o tipo de varivel lgica ou booleana, que possui dois nicos valores lgicos: verdadeiro
ou falso, ou, 1 e 0. Para declarar uma varivel lgica realizamos o seguinte procedimento:
Var
Ocupado : Lgico
CONSTANTE
Uma constante armazena informaes que no variam com o tempo, ou seja, o seu contedo
um valor fixo. Da mesma forma que as variveis, todas as constantes devem ser definidas
no incio do algoritmo. O comando utilizado para definir constantes o CONST e sua definio
dada por:
CONST
<nome da constante> = <valor>
EXPRESSES
Por exemplo, temos: x + y * 25. Neste caso, a primeira operao a ser realizada a multiplicao
de y por 25, visto que o operador de multiplicao tem prioridade 3 e a soma prioridade 4. Se
quisermos multiplicar o produto da soma de x e y por 25 temos que representar a expresso
do seguinte modo: (x+y) * 25. Neste caso, primeiro executada a operao que est entre os
parnteses e depois a multiplicao, ou seja, os parnteses tm precedncia.
FUNES INTRNSECAS
Funo Objetivo
ATRIBUIO
identificador expresso
idade 26
A leitura dessa instruo realizada do seguinte modo: a varivel idade recebe o valor 26.
ENTRADA DE DADOS
A entrada de dados permite receber os dados digitados pelo usurio e realizada por meio do
comando leia. Os dados recebidos so armazenados em variveis (ASCENCIO; CAMPOS,
2010).
A sintaxe do comando :
leia <varivel>
SADA DE DADOS
A sada de dados permite mostrar dados aos usurios. O comando utilizado o escreva, que
Podemos imprimir diversas variveis ou combinar variveis com literais em um nico comando,
basta separ-las por vrgula. Por exemplo:
CONSTRUINDO ALGORITMOS
Formular um algoritmo que leia e apresente as seguintes informaes de uma pessoa: nome,
idade, peso, altura e telefone.
Antes de partir para a elaborao do algoritmo dividiremos o problema tal como aprendemos
na seo COMO CONSTRUIR ALGORITMOS, em objetivo do algoritmo, entrada,
processamento e sada. Deste modo, temos que:
Objetivo do algoritmo: ler e apresentar o nome, idade, peso, altura e telefone de uma
pessoa.
Processamento: no h processamento.
Iniciando a formulao do algoritmo, temos que ele precisa de um nome o qual denominaremos
de problema1. Portanto, a primeira linha ser:
Algoritmo problema1
Var
Idade : inteiro
Nome : caractere[50]
Telefone : caractere[15]
Note que as variveis do mesmo tipo podem ser declaradas na mesma linha, como o caso
de peso e altura. Se as variveis do tipo caractere tivessem o mesmo tamanho poderamos
declar-las de modo anlogo. Declarar como caractere[50] indica que o tamanho mximo que
a varivel ir armazenar de 50 caracteres.
Incio
Na entrada de dados precisamos obter as informaes definidas por meio do comando leia.
No entanto, importante enviar sempre uma mensagem informando ao usurio que dado est
Leia (nome)
Leia (idade)
Leia (peso)
Leia (altura)
Leia (telefone)
Fim.
O algoritmo inteiro apresentado no Quadro 13. Observe que as palavras destacadas (negrito)
Algoritmo problema1
Var
Idade : inteiro
Nome : caractere[50]
Telefone : caractere[15]
Incio
Leia (nome)
Leia (idade)
Leia (peso)
Leia (altura)
Leia (telefone)
Escreva (O telefone :,
telefone)
Fim.
Informe a idade: 30
A idade : 30
O peso : 60.3
A altura : 1.58
O telefone : 3011-1212
PROBLEMA 2
Um quadrado (Figura 4) uma figura geomtrica com quatro lados de mesmo comprimento
(l) e quatro ngulos retos. Elabore um algoritmo para calcular a rea e o permetro de um
quadrado. Observando a Figura 4, a rea dada pela superfcie (laranja) e o permetro a
medida do contorno do objeto, a soma dos quatro lados (pontilhado).
Figura 4: Quadrado
Fonte: a autora
Entrada: para calcular o permetro e a rea precisamos saber qual o comprimento do lado
do quadrado, ou seja, temos que saber o valor de l.
Na entrada de dados precisamos saber qual o valor do lado. Esta informao ser fornecida
Definimos as variveis, agora temos que especificar qual o tipo de cada uma delas. O
comprimento do lado, a rea e o permetro so valores numricos, podemos representar como
inteiro ou real. Qual dos dois tipos devemos utilizar? Podemos ter parte decimal na medida do
lado de um quadrado?
O tipo a ser utilizado o real, j que a medida do lado, o permetro e a rea no necessariamente
so nmeros inteiros.
Algoritmo quadrado
A declarao de variveis deve ser realizada no incio do algoritmo, logo aps a definio de
seu nome, portanto temos:
Var
L, A, P: real
Sabemos que o algoritmo uma sequncia finita de passos, delimitada por Incio e Fim, com
as instrues de entrada, processamento e sada dentro desses limites. Portanto:
Na entrada de dados precisamos obter o valor do lado (L), portanto utilizamos o comando leia.
importante fornecer ao usurio uma mensagem informando qual ao esperada antes de
utilizar o comando leia. Com isso, temos:
Leia (L)
A=L*L
P=4*L
Passamos pela entrada e processamento, agora temos que informar o resultado, ou seja, a
sada de dados, que realizada pelo comando escreva. O objetivo informar o valor da rea
e do permetro, portanto:
Escreva (O permetro :, P)
Escreva (A rea :, A)
Na instruo de sada utilizamos o comando escreva e combinamos uma sada literal com o
valor da varivel. Observe que a literal fica entre aspas, seguida de vrgula, varivel. Como um
algoritmo uma sequncia finita de passos, temos que finaliz-lo com a seguinte instruo:
Fim.
Vamos simular o funcionamento do nosso algoritmo ou realizar o teste de mesa. Essa etapa
importante, pois auxilia na compreenso e verificao do algoritmo. Supondo que L = 3, logo
temos que:
A=3*3
P=4*3
O permetro : 12
A rea : 9
O permetro : 12
A rea : 9
PROBLEMA 3
Fonte: SHUTTERSTOCK.COM
Elaborar um algoritmo que apresente o salrio bruto, salrio lquido, INSS e FGTS de
um funcionrio, sabendo que o salrio bruto dado por (Horas Trabalhadas + Horas
Objetivo do algoritmo: apresentar o valor do salrio bruto, salrio lquido, INSS e FGTS.
Entrada: para calcular o salrio bruto do funcionrio precisamos obter o nmero de horas,
nmero de horas extras e o valor da hora trabalhada.
Vamos tomar como exemplo os seguintes valores para a entrada de dados: Horas trabalhadas
= 20, horas extras = 5 e valor da hora = 10. Substituindo esses valores na expresso para
clculo do salrio bruto teramos que:
O INSS : 27
O FGTS : 24
CONSIDERAES FINAIS
Nesta unidade foi introduzido o conceito central da disciplina, algoritmo. O algoritmo consiste
em um conjunto de instrues para solucionar um problema. Enfatizando, dado um problema,
podemos ter vrios algoritmos que o resolvem, ou seja, temos o algoritmo como um possvel
caminho para a soluo. Alm disso, voc pde perceber que o termo algoritmo est presente
no nosso dia a dia nas mais diversificadas situaes, sempre que temos uma sequncia de
passos para realizar uma tarefa.
Aprendemos os comandos que utilizamos para atribuio, entrada de dados e sada de dados.
A atribuio o processo de fornecer valor a uma varivel, lembrando que esse valor tem
que ser compatvel com o tipo da varivel. Ou seja, se a varivel do tipo inteira, s podemos
armazenar um nmero inteiro nela.
ATIVIDADE DE AUTOESTUDO
1 Construa um algoritmo utilizando a descrio narrativa para pagar uma conta de luz em um
caixa eletrnico.
2. Para os nomes de variveis abaixo, marque (C) para os corretos e (I) para os incorretos.
Para cada nome incorreto explique o que est errado.
3. Elabore um algoritmo que leia, calcule e escreva a mdia aritmtica entre quatro nmeros.
EXERCCIOS DE FIXAO
Algoritmo numero
Var
num: inteiro
Incio
Leia (num)
Fim.
Algoritmo triangulo
Var
Incio
Leia (base)
Leia (altura)
Fim.
4. Elabore um algoritmo que leia a quantidade de livros que uma locadora de livros possui e
o valor do aluguel por livro. Apresente as seguintes informaes: a) faturamento mensal se
todos os livros forem locados; b) faturamento anual se 20% dos livros no forem locados
todo ms.
Algoritmo faturamento
Var
qtdade : inteiro
Incio
Leia (qtdade)
Leia (valor)
Fim.
5. Escreva um algoritmo que leia o valor da hora aula, o nmero de aulas dadas no ms e o
percentual de desconto do INSS. Calcule e apresente o salrio lquido e o salrio bruto.
Entrada: ler o valor da hora aula, o nmero de aulas dadas no ms e o percentual de des-
conto do INSS.
Processamento: calcular o salrio bruto que dado pelo produto do nmero de aulas pelo
valor da aula e calcular o salrio lquido que o salrio bruto menos o desconto do INSS.
Processamento: calcular a rea que dada por: e permetro que dado por
.
7. Elabore um algoritmo que leia um nmero inteiro e apresente a raiz quadrada e o valor
deste nmero elevado ao quadrado.
Processamento: utilizar as funes SQR e SQRT para elevar ao quadrado e obter a raiz
quadrada, respectivamente.
ESTRUTURA CONDICIONAL
Professora Me. Gislaine Camila Lapasini Leal
Objetivos de Aprendizagem
Plano de Estudo
Estrutura condicional
Nos algoritmos sequenciais o fluxo seguido de modo sequencial, ou seja, todas as instrues
eram executadas uma a uma. No conseguamos impor condies para a execuo das
instrues. Se pararmos para pensar em diversas situaes temos que realizar uma verificao,
analisar o resultado desta verificao para saber que caminho seguir, ou seja, temos desvios
de fluxo. Isso acontece quando vamos comprar um carro, por exemplo, dependendo do valor
da entrada a taxa de juros pode ser maior ou menor. Quando temos que apresentar a mdia
escolar de um aluno e tomar a deciso se ele est aprovado, reprovado ou de exame. No
conseguimos tratar essas duas situaes utilizando apenas os conceitos de variveis, tipos de
variveis, constantes, comando de atribuio, entrada e sada de dados. Precisamos de uma
estrutura que nos permita impor condies para a execuo de uma determinada instruo, ou
ainda, criar condies que possibilitem desviar o fluxo.
Estudaremos a estrutura condicional simples que nos permite tomar uma deciso. A estrutura
condicional composta que a partir de uma expresso podemos seguir dois caminhos, um
quando o resultado do teste verdadeiro e outro quando o resultado falso. A estrutura
condicional aninhada ou encadeada que nos permite estabelecer verificao de condies
sucessivas. E a estrutura de deciso mltipla que uma generalizao da estrutura condicional
composta em que pode haver uma ou mais condies a serem testadas e cada uma delas
pode ter uma instruo diferente associada. Alm disso, veremos a tabela verdade para cada
um dos operadores lgicos e como construir expresses relacionais e lgicas. Os operadores
e expresses foram vistos na Unidade I, se voc ficou com alguma dvida no se preocupe,
pois ao longo desta unidade revisaremos estes conceitos.
ESTRUTURA CONDICIONAL
Vamos analisar a retirada de dinheiro em um caixa eletrnico. Aps inserir o carto solicitado
que a senha seja digitada. Se a senha digitada estiver correta poderemos efetuar o saque. Caso
a senha esteja errada receberemos mensagem informando que a senha invlida. Notem
que nesta situao no conseguimos representar apenas com o conhecimento adquirido na
Unidade I. Em situaes como esta precisamos utilizar uma estrutura que nos permita fazer
verificaes para ento saber que instrues devem ser executadas.
A estrutura condicional consiste em uma estrutura de controle de fluxo que permite executar
um ou mais comandos se a condio testada for verdadeira ou executar um ou mais comandos
se for falsa. Essa estrutura divide-se em estrutura simples e estrutura composta, as quais
veremos a seguir (LOPES; GARCIA 2002).
Se (<Condio>) ento
fim_se
A estrutura condicional simples tem por finalidade tomar uma deciso. De modo que
se a condio que est sendo testada for verdadeira so executadas todas as instrues
compreendidas entre o se e o fim_se (MANZANO; OLIVEIRA, 1997). Ao trmino da execuo
o algoritmo segue o primeiro comando aps o fim_se. Se a condio que est sendo testada
for falsa o algoritmo executa a primeira instruo aps o fim_se, no executando as instrues
compreendidas entre o se e o fim_se.
Vamos analisar o algoritmo apresentado no Quadro 26. Consideremos o valor de A como 15,
desta forma ao testar a condio dada pela expresso A > 10, retorna um valor verdadeiro.
Com isto, temos a execuo do comando escreva que est compreendido entre o se e o
fim_se. Agora, tomemos A com valor 3. Ao testar a condio A >10 o valor retornado falso.
Algoritmo exemplo
Var
A : inteiro
Incio
Leia (A)
Fim_se
Fim.
De acordo com LOPES; GARCIA (2002), a condio uma expresso lgica, portanto ao
ser testada devolve como resposta o valor verdadeiro ou falso. Uma condio pode ser
representada por uma expresso relacional ou por uma expresso lgica formada por pelo
menos duas expresses relacionais. Os operadores relacionais vistos na Unidade I so >, <, =,
>=, <= e <>. J os operadores lgicos so E, OU e NO.
Agora fica mais clara a aplicao dos operadores relacionais e como eles so utilizados em
nossos algoritmos. Alguns exemplos de expresso relacional so:
X > 16
A<B
Sexo = F
Operador E
O operador OU resulta em verdadeiro quando pelo menos uma das condies verdadeira.
Sendo o resultado falso apenas quando as duas condies so falsas, como pode ser
visualizado no Quadro 28.
Operador OU
Operador NO
Condio Resultado
Verdadeiro Falso
Falso Verdadeiro
A partir do entendimento da tabela verdade de cada um dos operadores lgicos vamos ver
exemplos de expresso lgica:
(X >= 1) E (X <=20)
(Sexo = F) OU (Sexo = f)
NO (X>5)
Agora que conhecemos a sintaxe da estrutura condicional simples e sabemos como montar
condies, vamos formular nosso primeiro algoritmo contendo desvio de fluxo.
Se o resto for igual a zero calcularemos a metade deste nmero. E a sada consistir em
imprimir a metade do nmero. Se o resto for diferente de zero no ser executada nenhuma
instruo e tambm no haver sada.
Uma soluo para este problema apresentada no Quadro 30, em que podemos visualizar o
uso da estrutura condicional simples.
Em relao ao algoritmo apresentado, podemos colocar uma instruo escreva aps o fim_se
dizendo que o nmero mpar? No, pois para qualquer nmero obtido na entrada, indiferente
de ser par ou mpar, a mensagem seria impressa. Devemos lembrar que aps o fim_se o fluxo
do algoritmo segue normalmente, sendo executada instruo a instruo.
Por que a varivel metade foi declarada como inteira e no como real? A metade de qualquer
nmero par sempre um nmero inteiro. Como a operao est sendo executada apenas se
o nmero par, no h problema. Se a instruo que calcula a metade fosse executada fora
da estrutura condicional a varivel deveria ser real. Por exemplo, se o nmero 3 fosse obtido
na entrada a metade seria 1.5, que no um nmero inteiro.
Algoritmo par
Var
n: inteiro
Incio
Leia (n)
Se (n mod 2 = 0) ento
Fim_se
Fim.
Seno
fim_se
Agora que voc conhece a estrutura condicional composta, podemos construir um algoritmo
para verificar se um nmero inteiro par ou mpar. O Quadro 32 apresenta o pseudocdigo
para verificar se um nmero par ou mpar.
Algoritmo parimpar
Var
n: inteiro
Incio
Leia (n)
Se (n mod 2 = 0) ento
Seno
Fim_se
Fim.
Antes de conhecer outros tipos de estrutura condicional vamos praticar mais a construo de
algoritmos utilizando expresses lgicas. O problema consiste em: dado um nmero inteiro
verificar se ele est compreendido entre 20 e 90.
A verificao se o nmero est na faixa entre 20 e 90, pode ser descrita como: n tem que ser
maior que 20 e menor do que 90. Com isto, temos duas expresses relacionais: n > 20 e n <
90.
Algoritmo faixa
Var
n: inteiro
Incio
Leia (n)
Seno
Fim_se
Fim.
Considerando n com valor 27, temos uma expresso lgica composta por duas expresses
relacionais (condies) unidas pelo operador E. Voc se recorda como esse operador
funciona? Dadas duas condies o resultado verdadeiro se e somente se as duas forem
verdadeiras. O Quadro 34 representa a expresso lgica da estrutura condicional, em que
27 > 20 verdadeiro e 27 < 90 tambm verdadeiro, o que resulta em verdadeiro. Como o
Operador E
E se na entrada recebssemos o nmero 20? Vamos analisar cada uma das expresses
relacionais (Quadro 35). Temos 20 > 20, uma expresso que resulta em verdadeiro ou falso?
falso, pois 20 igual a 20 e no maior. Na segunda expresso temos 20 < 90, que resulta
em verdadeiro. Essas expresses esto unidas pelo operador E sendo uma delas falsa e a
outra verdadeira, o resultado do teste lgico falso. Com isto, temos a execuo da instruo
compreendida entre o seno e o fim_se, O nmero est fora da faixa.
Operador E
Agora que voc j conhece a estrutura condicional simples e a composta, vamos conhecer a
estrutura condicional aninhada ou encadeada. Essa estrutura utilizada quando precisamos
estabelecer a verificao de condies sucessivas, em que uma determinada ao poder
LOPES; GARCIA (2002) destacam que essa estrutura utilizada quando sentimos a
necessidade de tomar decises dentro de uma das alternativas de uma condio.
A entrada de dados consiste em ler trs nmeros inteiros, os quais armazenaremos em variveis
denominadas A, B e C. Para encontrar qual o maior nmero precisamos realizar comparaes
utilizando expresses relacionais do tipo: A > B e armazenar o valor do maior nmero em uma
varivel, a qual chamaremos de max. A sada consiste em enviar uma mensagem contendo o
valor do maior nmero, que est armazenado na varivel max. O algoritmo para o problema
apresentado no Quadro 36.
Se (a > b) ento
Se ( a > c) ento
max:= a
seno
1 3 max:=c
fimse
seno
Se ( b > c ) ento
max:=b
seno
2 4 max:=c
fimse
fimse
Podemos resolver o problema de encontrar o maior nmero dentre trs nmeros sem utilizar
a estrutura condicional aninhada? Sim, podemos, porm ser executado um maior nmero de
verificaes, como pode ser visto no algoritmo do Quadro 37.
caso <varivel>
Fim_caso
Nesta estrutura o termo <varivel> indica a varivel a ser controlada, o termo <valor> o contedo
da varivel que est sendo analisado e o termo <instruo> refere-se a instruo que ser
executada. O funcionamento desta estrutura consiste em ao entrar-se em uma construo do
tipo Caso, o caso1 testada: se for verdadeira, a instruo 1 executada e aps seu trmino,
Na entrada de dados temos um nmero inteiro, que nomearemos com varivel num. O
processamento consiste em verificar se o nmero digitado est entre 1 e 12 e como sada
escrever por extenso o ms correspondente. No Quadro 38 temos o pseudocdigo para o
problema em questo.
Algoritmo mes
Var
num: inteiro
Incio
Leia (num)
Caso (num)
Fim_caso
Fim.
Ainda analisando o algoritmo que utiliza a estrutura de deciso mltipla, voc acha que
podemos escrev-lo de outra forma? Como ficaria o algoritmo se utilizssemos apenas a
estrutura condicional simples?
H pelo menos mais duas formas de resolv-lo utilizando a estrutura condicional simples ou
a estrutura encadeada. A construo do algoritmo utilizando apenas a estrutura condicional
simples pode ser visualizada no Quadro 39.
Algoritmo mes2
Var
num: inteiro
Incio
Leia (num)
Se (num = 1) ento
Escreva (Janeiro)
Fim_se
Se (num = 2) ento
Escreva (Fevereiro)
fim_se
Se (num = 3) ento
Escreva (Maro)
Fim_se
Se (num = 4) ento
Escreva (Abril)
Fim_se
Se (num = 5) ento
Escreva (Maio)
Fim_se
Se (num = 6) ento
Escreva (Junho)
84 Fim_se
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
Escreva (Abril)
Fim_se
Se (num = 5) ento
Escreva (Maio)
Fim_se
Se (num = 6) ento
Escreva (Junho)
Fim_se
Se (num = 7) ento
Escreva (Julho)
Fim_se
Se (num = 8) ento
Escreva (Agosto)
Fim_se
Se (num = 9) ento
Escreva (Setembro)
Fim_se
Escreva (Outubro)
Fim_se
Escreva (Novembro)
Fim_se
Escreva (Dezembro)
Fim_se
Se (num < > 1 ) e (num < > 2) e (num < >3) e (num < >4) e (num < >5) e (num< >6) e
(num< ALGORITMOS
>7) e (num< >8) eE(num < > 9) DE
LGICA e (num < > 10) e (num< >11)
PROGRAMAO a ento
e (num< >12)
I | Educao Distncia 85
Escreva (Novembro)
Fim_se
Escreva (Dezembro)
Fim_se
Se (num < > 1 ) e (num < > 2) e (num < >3) e (num < >4) e (num < >5) e (num< >6) e
(num< >7) e (num< >8) e (num < > 9) e (num < > 10) e (num< >11) e (num< >12) ento
fim_se
Fim.
Nesta unidade voc aprendeu a construir algoritmos com desvios de fluxo, isto , algoritmos
em que podemos impor condies execuo de uma determinada instruo a um teste.
Essa estrutura que nos possibilita desviar o fluxo do programa conhecida na literatura como
estrutura condicional, estrutura de seleo ou estrutura de controle.
Se (<Condio>) ento
fim_se
Na estrutura condicional composta vimos que realizada a avaliao de uma nica condio.
No entanto, temos dois caminhos para seguir, um quando o resultado da instruo verdadeiro
e outro quando falso. A sintaxe da estrutura condicional composta :
Se (<Condio>) ento
Seno
fim_se
Aprendemos que a estrutura aninhada usada quando temos que estabelecer verificaes
sucessivas, isto , quando uma ao s poder ser executada se um conjunto anterior de
condies for satisfeito. Alm disso, estudamos que o uso desta estrutura torna o algoritmo
mais rpido devido ao fato de executar um menor nmero de passos para chegar soluo
do problema.
Vimos tambm a estrutura de deciso mltipla, uma generalizao da estrutura Se, em que
Caso <varivel>
Fim _caso
ATIVIDADE DE AUTOESTUDO
1. Formule um algoritmo que leia a matrcula e nome de um vendedor, seu salrio fi xo e o total
de vendas e calcule a comisso do vendedor. Se o total de vendas inferior a R$ 1500,00
o percentual de comisso 2% e se for maior o percentual de 4%. Apresente o nome do
vendedor, matrcula, salrio fi xo e salrio total.
2. Escreva um algoritmo que leia um nmero e informe se ele divisvel por 3 e por 7.
3. Formule um algoritmo que leia cinco nmeros e conte quantos deles so negativos.
4. De acordo com uma tabela mdica, o peso ideal est relacionado com a altura e o sexo.
Elabore um algoritmo que receba altura e sexo de uma pessoa e calcule e imprima o seu
peso ideal, sabendo que:
5. Elabore um algoritmo que leia o percurso em quilmetros, o tipo de moto e informe o con-
sumo estimado de combustvel, sabendo que uma moto do tipo A faz 26 km com um litro de
gasolina, uma moto do tipo B faz 20 km e o tipo C faz 7 km.
6. Uma instituio fi nanceira conceder crdito a uma taxa de juros de 3% aos seus clientes
de acordo com o saldo mdio do perodo. Elabore um algoritmo que calcule o valor que
pode ser concedido ao cliente e imprima-o. Os clientes com saldo mdio inferior a R$
500,00 no tm direito a crdito. J os clientes com saldo entre R$ 501,00 e R$ 1000,00
podem obter crditos de 35% em relao ao saldo mdio. Clientes com saldo entre R$
1001,00 a R$ 3000,00 podem obter crditos de 50% em relao ao saldo mdio. E para
aqueles clientes com saldo superior a R$ 3001,00 pode ser concedido crdito de 75% do
valor do saldo.
1. Construa um algoritmo que receba o nome e a idade de uma pessoa e informe se menor
de idade, maior de idade ou idoso.
Algoritmo verificaidade
Var
idade: inteiro
nome: caractere[30]
Incio
Leia (nome)
Leia (idade)
Escreva (Idoso)
Seno
Seno
Fim_se
Fim_se
Fim.
Algoritmo classeeleitoral
Var
idade: inteiro
Incio
Leia (idade)
Seno
Seno
Fim_se
Fim_se
Fim.
Algoritmo calculaimc
Var
Incio
Leia (peso)
Leia (altura)
Seno
Escreva (Normal)
Seno
92 ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
Se (imc <=30) ento
Se (imc <= 25) ento
Escreva (Normal)
Seno
Seno
Escreva (Obesidade)
Seno
Fim_se
Fim_se
Fim_se
Fim_se
Fim.
2 Vigia 30%
3 Recepcionista 25%
4 Vendedor 15%
Sada: imprimir o cdigo do cargo, nome do cargo, valor do aumento e novo salrio.
Algoritmo reajuste
Var
cargo: inteiro
Incio
Leia (cargo)
Leia (salario)
Se (cargo = 1) ento
Seno
Se (cargo = 2) ento
Escreva (Vigia)
94 seno
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
Se (cargo = 3) ento
Escreva (O aumento de:, aumento)
seno
Se (cargo = 3) ento
Escreva (Recepcionista)
seno
Se (cargo = 4) ento
Escreva (Vendedor)
fim_se
fim_se
fim_se
fim_se
Fim.
5. Escreva um algoritmo para resolver equaes do segundo grau (ax2 +bx + c). Sendo que: a
varivel a deve ser diferente de zero; = b2 - 4 x a x c; Se < 0 no existe raiz real; se = 0
existe uma raiz real que dada por ; se > 0 existem duas razes reais
e -
Algoritmo raiz
Var
Incio
Leia (a)
Leia (b)
Leia (c)
Se (a = 0) ento
seno
delta sqr(b) * 4 * a * c
seno
Se (delta = 0) ento
96
x1 ( - b) / (2 * a)
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
Escreva (A raiz :, x1)
Se (delta < 0) ento
seno
Se (delta = 0) ento
x1 ( - b) / (2 * a)
seno
x1 ( - b + sqrt(delta)) / (2 * a)
x2 ( - b - sqrt(delta)) / (2 * a)
fim_se
fim_se
fim_se
fim_se
Fim.
ESTRUTURA DE REPETIO
Professora Me. Gislaine Camila Lapasini Leal
Objetivos de Aprendizagem
Plano de Estudo
Estrutura Para
Estrutura Enquanto
Estrutura Repita
Problema 1
Problema 2
INTRODUO
Nesta unidade voc aprender a construir algoritmos com repetio de um trecho de cdigo. A
repetio permite executar um conjunto de instrues quantas vezes forem necessrias sem
ter que ficar reescrevendo trechos de cdigos idnticos.
Ao final desta unidade voc saber construir algoritmos com estruturas de repetio e poder
responder as questes relacionadas com o tema de Algoritmos e Lgica de Programao
I, tais como: como repetir um trecho de cdigo um nmero determinado de vezes? Como
repetir um trecho de cdigo com base em uma condio? Que estrutura de repetio mais
adequada para cada problema? Quando utilizar varivel contadora e acumuladora? Quando
utilizar estruturas de repetio encadeadas?
Ao desenvolver algoritmos muitas vezes nos deparamos com situaes em que precisamos
repetir um determinado trecho de cdigo ou todo o cdigo um certo nmero de vezes.
Por exemplo, se queremos efetuar a soma dos 100 primeiros nmeros pares, somar n
nmeros enquanto o valor da soma no ultrapasse 500, calcular a mdia de 20 nmeros,
calcular a tabuada de um nmero, somar os nmeros entre uma faixa de valores, efetuar
um processamento enquanto o usurio informe SIM, validar um dado de entrada e outras
(SALVETTI e BARBOSA, 1998; ASCENIO e CAMPOS, 2010).
Nos casos descritos acima e em muitos outros, podemos criar um loop para efetuar o
processamento de um trecho de cdigo quantas vezes forem necessrias. Na literatura essas
estruturas de repetio (loop) so, tambm, denominadas de laos de repetio e malhas de
repetio (MANZANO; OLIVEIRA, 1997).
Nas estruturas de repetio o nmero de repeties pode ser fixo ou estar relacionado a uma
condio. Isto , os laos de repetio podem ser classificados em laos contados e laos
condicionais (ASCENCIO; CAMPOS, 2010).
Os laos contados so aqueles que utilizamos quando sabemos previamente quantas vezes o
trecho do cdigo precisa ser repetido. Por exemplo, realizar a leitura de 100 nmeros, efetuar
o somatrio dos nmeros entre 500 e 700 e outros. A estrutura utilizada para representar os
laos contados a Estrutura Para.
Os laos condicionais podem ter o teste lgico no incio ou no final do lao, configurando assim
duas estruturas de repetio: Estrutura Repita e Estrutura Enquanto.
Nas sees seguintes ser apresentada cada uma das estruturas de repetio, destacando
sua sintaxe e aplicao.
ESTRUTURA PARA
A estrutura Para uma estrutura do tipo lao contado, utilizada para um nmero definido de
repeties. Isto , devemos utilizar essa estrutura quando sabemos o nmero de vezes que o
trecho de cdigo precisa ser repetido. Outro termo utilizado para essa estrutura de repetio
o de estrutura de repetio com varivel de controle, pois utilizada uma varivel contadora
<instrues>
fim_para
Em que:
<incio> e <fim>: esses termos delimitam o intervalo para a execuo do lao de repetio.
Podem ser constantes inteiras, funes ou expresses que retornem nmeros inteiros
(SALVETTI; BARBOSA, 1998).
<incremento> representa o valor que ser incrementado ou decrementado (se for um valor
negativo) a cada passagem do lao, isto , como ser a variao da varivel de controle
(contador).
Esse termo pode ser representado por uma constante ou uma varivel.
LOPES; GARCIA (2002) destacam que o nmero de repeties do bloco de comandos igual
ao nmero de termos da srie delimitada pelos termos <incio> e <fim>. A varivel contadora
no deve aparecer em um comando de leitura dentro do bloco de repetio.
Agora que voc conheceu a teoria sobre a estrutura de repetio para, vamos resolver
um problema utilizando-a para tornar mais clara a sua aplicao prtica. Voc se lembra
databuada? A Figura 6 apresenta a tabuada para o nmero 5, em que temos o produto entre o
nmero 5 e os nmeros compreendidos entre 0 e 10.
Na entrada de dados temos que ler um nmero inteiro, isto implica que precisamos declarar
uma varivel do tipo inteira para armazenar o nmero digitado pelo usurio. Denominaremos
essa varivel de num.
Lembre-se que um lao de repetio pode ser utilizado tanto para entrada, processamento,
quanto para a sada de dados.
Algoritmo tabuada
Var
Incio
Leia (num)
mult num*i
fim_para
Fim.
Algoritmo tabuada
Var
Num, i: inteiro
Incio
Leia (num)
fim_para
Fim.
Nesta seo estudamos a estrutura de repetio controlada, que utiliza uma varivel contadora
para controlar o lao. Essa estrutura deve ser utilizada nas situaes em que sabemos
previamente quantas vezes o comando deve ser repetido.
A estrutura Enquanto uma estrutura do tipo lao condicional, isto , o loop baseia-se na
anlise de uma condio. Essa estrutura utilizada quando temos um nmero indefinido de
repeties e se caracteriza por realizar um teste condicional no incio.
<instrues>
fim_enquanto
Na estrutura para tnhamos uma varivel de controle (contador) para controlar o nmero de
repeties do algoritmo. Na estrutura Enquanto no h varivel de controle, sendo imposta
uma condio para controlar a repetio do algoritmo. Devemos tomar cuidado para garantir
que em algum momento a condio ser satisfeita, seno o algoritmo pode entrar em loop (no
parar nunca). Para impedir o loop do algoritmo utilizamos uma expresso condicional, tal como
vimos na Unidade II, para parar a repetio (LOPES; GARCIA, 2002).
Outra situao que como o teste condicional executado no incio, podem ocorrer casos em
que as instrues da estrutura de repetio nunca sejam executadas. Isso acontece quando
o teste condicional da estrutura resulta em falso logo na primeira comparao (ASCENCIO;
CAMPOS, 2010).
Na entrada de dados temos que realizar a leitura de nmeros inteiros repetidas vezes, at
que o valor zero seja digitado. O processamento consiste em contar a quantidade de nmero
que esto na faixa entre 100 e 300, para isso utilizaremos uma varivel do tipo contador, que
nomearemos como cont. Para saber quantos valores esto dentro da faixa utilizaremos a
estrutura condicional Se, conforme visto na Unidade II. Como sada temos que informar o valor
da varivel cont.
Algoritmo conta
Var
Incio
Leia (num)
cont 0
cont cont +1
fim_se
Leia (num)
fim_enquanto
Fim.
Vamos analisar este algoritmo linha a linha a partir da instruo de Incio. Temos um comando
escreva, que envia uma mensagem ao usurio que digite um nmero. O nmero digitado pelo
usurio armazenado na varivel num (comando Leia). Em seguida, temos uma atribuio a
varivel cont, que um contador. Por qu? Sempre que utilizamos variveis desse tipo devemos
inicializ-la, pois uma varivel um espao de memria e pode conter lixos. Portanto, sempre
inicialize as variveis que exercem funo de contador e acumulador.
Vamos analisar o comportamento do algoritmo (Quadro 48) sem a entrada de dados dentro
Algoritmo conta
Var
Incio
Leia (num)
cont 0
cont cont +1
fim_se
fim_enquanto
Fim.
ESTRUTURA REPITA
A estrutura Repita uma estrutura do tipo lao condicional, isto , o loop baseia-se na anlise
de uma condio. Essa estrutura utilizada quando temos um nmero indefinido de repeties
e precisamos que o teste condicional seja realizado aps a execuo do trecho de cdigo. Isto
, devemos utilizar essa estrutura quando no sabemos o nmero de vezes que um trecho do
cdigo deve ser repetido (ASCENCIO; CAMPOS, 2010).
Repita
<instrues>
At_que <condio>
Observe que na estrutura Repita as instrues dentro do lao sero executadas pelo menos
uma vez, pois a anlise condicional executada ao final. Do mesmo modo que na estrutura
condicional enquanto, lembre-se que nas instrues que esto dentro da estrutura de repetio
tem que haver uma instruo que altere o valor da <condio>.
Com o conhecimento que temos sobre a estrutura Repita vamos reescrever o algoritmo que l
vrios nmeros e informa quantos esto no intervalo de 100 a 300. Se for digitado o valor 0, o
A entrada de dados consiste na leitura de nmeros inteiros repetidas vezes, at que o valor
zero seja digitado. O processamento contar a quantidade de nmero que esto na faixa entre
100 e 300. E a sada informar quantos dos nmeros lidos na entrada so maiores ou iguais
a 100 e menores ou iguais a 300. O Quadro 49 apresenta um algoritmo para este problema
utilizando a estrutura de repetio condicional Repita.
Algoritmo conta
Var
Incio
cont 0
Repita
cont cont +1
fim_se
Fim.
Aps a inicializao de cont, temos o incio da estrutura Repita. Internamente a essa estrutura
temos a leitura do nmero, o qual armazenado na varivel num. Em seguida, temos a
estrutura condicional se, que analisa se o nmero maior ou igual a 100 e menor ou igual
a 300. O resultado do teste lgico verdadeiro quando as duas expresses relacionais so
verdadeiras e ento cont incrementado em 1. Se o resultado do teste for falso vai diretamente
para a linha que impe a condio para o lao de repetio. Nesta linha, temos a verificao se
o nmero igual a zero, isto , quando o nmero for igual a zero, a repetio do lao finaliza e
executada a instruo escreva.
Observe que na estrutura Repita a leitura da varivel realizada internamente. Isso acontece
porque o teste lgico executado no final. Deste modo, o conjunto de instrues que esto
dentro do lao executada uma ou mais vezes. Na estrutura enquanto o conjunto de instrues
pode no ser executado, pois o teste lgico realizado no incio.
Do mesmo modo que na estrutura condicional, podemos ter encadeamento das estruturas
de repetio, isto , podemos ter uma estrutura de repetio dentro de outra. Neste caso
necessrio que todas as instrues da construo interna estejam embutidas na construo
externa (MANZANO; OLIVEIRA, 1997; LOPES; GARCIA, 2002).
<instrues>
fim_para
fim_para
<instrues>
fim_enquanto
fim_para
repita
<instrues>
At_que (condio)
fim_para
<instrues>
fim_enquanto
fim_enquanto
repita
<instrues>
at_que (<condio2>)
fim_enquanto
<instrues>
fim_para
fim_enquanto
repita
<instrues>
fim_para
at_que (<condio>)
repita
<instrues>
fim_enquanto
at_que (<condio1>)
repita
<instrues>
at_que (<condio>)
at_que (<condio>)
PROBLEMA 1
Agora que recordamos o que o fatorial, vamos escrever um algoritmo para calcular o fatorial
de um nmero qualquer. Seguindo o mtodo de estruturao de problemas, conforme visto na
Unidade I, temos que:
No Quadro 50 temos o algoritmo para o problema do fatorial. Faa voc um teste de mesa
efetuando o clculo do fatorial de 5.
Algoritmo fatorial
Var
Incio
Leia (num)
fat 1;
fat fat*cont
fim_para
Fim.
Ao analisar o algoritmo surge o questionamento: por que a varivel fat foi inicializada com 1?
Podemos inicializ-la com 0? Se a inicializao da varivel for 0, e considerando num como 5,
teramos fat igual a 0, conforme ilustra a Figura 12.
Aps a simulao, fica claro que a varivel fat deve ser inicializada com 1. Deste modo,
teramos o resultado correto para o fatorial de 5, que 120.
PROBLEMA 2
A aprovao de um aluno em uma disciplina ocorre quando a mdia das notas maior ou
igual a 7. Para auxiliar o professor em suas atividades elabore um algoritmo, leia o nmero de
notas da disciplina, cdigo do aluno e as notas do aluno. Calcule a mdia final de cada aluno e
informe o nmero de alunos aprovados e reprovados. O algoritmo deve ser executado at que
seja informado um cdigo 0.
Na entrada de dados temos que saber inicialmente o nmero de notas da disciplina. Este
valor deve ser armazenado em uma varivel (nnotas). Alm disso, precisamos armazenar o
cdigo do aluno (cod) e nota (nota). O processamento consiste em a partir do nmero de notas
informado para a disciplina, efetuar a repetio da leitura de notas e som-las (varivel soma)
e calcular a mdia aritmtica do aluno (varivel mdia). A mdia deve ser armazenada em uma
varivel do tipo real. Se a mdia for maior ou igual a 7 o aluno est aprovado, seno reprovado.
Para contabilizar o nmero de aprovados e reprovados, precisamos declarar duas variveis do
tipo inteira, aprovados e reprovados, respectivamente. Como sada temos o nmero de alunos
aprovados e reprovados.
Algoritmo fatorial
Var
Inciqo
Leia (nnotas)
aprovados 0
reprovados 0
Leia (cod)
soma 0
media 0
Leia (nota)
Leia (nota)
fim_para
media soma/nnotas;
aprovados aprovados + 1
seno
reprovados reprovados + 1
fim_se
Leia (cod)
Fim_enquanto
Fim.
Algoritmo fatorial
Var
Incio
Leia (nnotas)
aprovados 0
reprovados 0
Repita
Leia (cod)
soma 0
media 0
Leia (nota)
fim_para
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 129
Leia (nota)
fim_para
media soma/nnotas
aprovados aprovados + 1
seno
reprovados reprovados + 1
fim_se
At_que (cod = 0)
Fim.
CONSIDERAES FINAIS
Nesta unidade voc aprendeu a construir algoritmos utilizando estruturas de repetio, que
permitem a execuo de um trecho de cdigo repetidas vezes. As estruturas de repetio
tambm so chamadas de lao de repetio.
Nos laos de repetio condicionais vimos as estruturas Enquanto e Repita. Vimos que a
estrutura Enquanto utilizada quando no sabemos previamente o nmero de repeties que
deve ser executado e impomos uma condio que realizada no final. Aprendemos que no
130 ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
uso desta estrutura devemos utilizar um comando leia ou de atribuio antes do enquanto para
entrar na repetio e um comando leia ou de atribuio (ltima instruo dentro da estrutura de
repetio) para sair da repetio.
Do mesmo modo que a estrutura Enquanto, a estrutura Repita utilizada quando temos
um nmero indefinido de repeties, no entanto, o teste lgico realizado no final. Alm de
estudar as estruturas de repetio conhecemos os conceitos e aplicaes de variveis do tipo
contador e acumulador.
As estruturas mais versteis so Enquanto e Repita, pois podem ser substitudas uma pela outra,
alm de poderem substituir perfeitamente a estrutura Para. Porm, h de considerar-se que nem toda
estrutura Enquanto ou Repita poder ser substituda por uma estrutura Para.
ATIVIDADE DE AUTOESTUDO
1. Escreva um algoritmo que leia 20 nomes e imprima o primeiro caractere de cada nome.
2. Formule um algoritmo que entre com o nome do aluno e as notas de quatro provas de 20
alunos. Imprima nome, nota1, nota2, nota3, nota4 e mdia de cada aluno e informe a mdia
geral da turma.
3. Escreva um algoritmo que leia a quantidade de nmeros que se deseja digitar. Em seguida,
leia esses nmeros e encontre o maior e o menor.
4. Construa um algoritmo que leia nmeros inteiros at que seja digitado o 0. Calcule e es-
creva o nmero de valores lidos, a mdia aritmtica, a quantidade de nmeros pares e a
quantidade de nmeros mpares.
5. Apresentar todos os nmeros divisveis por 5 que sejam menores que 200.
6. Construa um algoritmo que leia nmeros inteiros at que seja digitado um valor negativo.
Ao fi nal, informe a mdia dos nmeros, o maior e o menor valor.
7. Escreva um algoritmo que leia vrios nomes at que seja digitado o valo FIM. Imprima o
primeiro caractere de cada nome. Dica: em uma varivel do tipo caractere, para imprimir o
primeiro caractere utilize o comando Escreva nomevariavel[1].
8. Uma indstria produz e vende vrios produtos e para cada um deles tm-se os seguintes
dados: nome, quantidade produzida e quantidade vendida. Formule um algoritmo que:
Imprima nome e quantidade em estoque para os produtos com estoque menor que 30.
1. Escreva um algoritmo que leia o nmero de vezes que se deseja imprimir a palavra ALGO-
RITMOS e imprimir.
Processamento: no h.
Algoritmo palavra
Var
num, i: inteiro
Incio
Leia (num)
Escreva (ALGORITMOS)
fim_para
Fim.
2. Elabore um algoritmo que leia cem nmeros inteiros e conte quantos so pares e quantos
so mpares.
Algoritmo conta
Var
Incio
npares 0
nimpares 0
Leia (num)
npar npar + 1
Seno
nimpar nimpar + 1
Fim_se
fim_para
Fim.
3. Construa um algoritmo que entre com nmeros inteiros enquanto forem positivos e imprima
quantos nmeros foram digitados.
Objetivo do algoritmo: ler vrios nmeros enquanto forem positivos e contar quantos
foram digitados.
Algoritmo conta
Var
Incio
qtdade 0
Leia (num)
qtdade qtdade + 1
Leia (num)
Fim_enquanto
Fim.
Entrada: ler pedidos de compra (nmero, data, preo quantidade) at que o nmero do
pedido seja zero.
Algoritmo compras
Var
Incio
total 0
Leia (pedido)
Leia (data)
Leia (preco)
Leia (qtdade)
Leia (pedido)
Fim_enquanto
Fim.
Objetivo do algoritmo: ler informaes sobre vrios atletas e apresentar o atleta mais alto,
mais pesado e mdia de idade.
Entrada: ler nome, sexo, idade, peso e altura at que seja digitado o nome FIM.
Processamento: identificar o atleta do sexo masculino mais alto, a atleta do sexo feminino
mais pesada e a mdia de idade dos atletas.
Sada: imprimir o nome do atleta mais alto e da atleta mais pesada e a mdia de idade.
Algoritmo atletas
Var
sexo : caractere[1]
Incio
media 0
cont 0
alto 0
pesado 0
nalto
npesado
Escreva (Informe o nome do atleta ou FIM para encerrar:)
Leia (nome)
137
Enquanto (nome <> FIM) faa
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
Escreva (Informe a idade:)
Escreva (Informe o nome do atleta ou FIM para encerrar:)
Leia (nome)
Leia (idade)
Leia (peso)
Leia (altura)
Leia (sexo)
alto altura
nalto nome
Fim_se
Fim_se
pesado peso
npesado nome
Fim_se
Fim_se
Leia (nome)
138 ALGORITMOSFim_enquanto
E LGICA DE PROGRAMAO I | Educao a Distncia
Fim_se
Fim_se
Leia (nome)
Fim_enquanto
Fim.
Algoritmo triangulo
Var
Incio
Repita
Leia (base)
Repita
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 139
Leia (base)
Repita
Leia (altura)
Fim.
7. Construa um algoritmo que receba a idade e o estado civil de vrias pessoas e imprima a
quantidade de pessoas casadas, solteiras, separadas e vivas. O algoritmo finaliza quando
for informado o valor zero para idade.
Objetivo do algoritmo: ler idade e estado civil e contabilizar a quantidade de pessoas por
estado civil.
Algoritmo pessoas
Var
estado : caractere
Incio
ncasado 0
nsolteiro 0
140 ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
nviuva 0
idade, ncasado, nseparado, nsolteiro, nviuva : inteiro
estado : caractere
Incio
ncasado 0
nsolteiro 0
nviuva 0
nseparado 0
Repita
Leia (idade)
Repita
Leia (estado)
Se (estado = C) ento
ncasado ncasado + 1
fim_se
Se (estado = S) ento
nsolteiro nsolteiro + 1
fim_se
Se (estado = D) ento
nseparado nseparado + 1
fim_se
Se (estado = V) ento
nviuva nviuva + 1
fim_se
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 141
Repita
nseparado nseparado + 1
fim_se
Se (estado = V) ento
nviuva nviuva + 1
fim_se
Repita
Leia (idade)
fim_enquanto
Fim.
Objetivos de Aprendizagem
Plano de Estudo
Vetores
Ordenao de Vetor
Busca em Vetor
Mtodo Sequencial
Matrizes
Registros
Problema
INTRODUO
Ao final desta unidade voc saber construir algoritmos utilizando as estruturas de dados
homogneas e heterogneas, as quais permitem representar um agrupamento de informaes
em uma mesma varivel. Entender, tambm, qual a importncia dessas estruturas e como
utiliz-las em aplicaes prticas, aumentando assim a gama de problemas que consegue
resolver utilizando algoritmos. Vamos l?
VETORES
O vetor segue o mesmo princpio de uma matriz linha da matemtica, como ilustra a Figura
13. Em cada coluna da linha temos uma varivel com mesmo nome, no entanto em diferentes
posies no arranjo. A posio de cada varivel no arranjo indicada por um ndice. No caso
apresentado, temos 5 posies de modo que na posio 1 temos o valor 4, na posio 2 o
valor 7, na posio 3 o valor 10, na posio 4 o valor 1 e na posio 5 o valor 5.
O uso de vetores est associado criao de tabelas, em que temos a definio de uma nica
varivel que dimensionada com um determinado tamanho. Sendo que dimenso deve ser
uma constante inteira e positiva (MANZANO; OLIVEIRA, 1997).
Em que:
Em que o nome da varivel media, sendo que esta possui cinco posies e do tipo real.
O acesso a cada posio do vetor realizado por meio da especificao do ndice. Isto
media[1] indica o elemento que est na posio 1 do vetor, que no caso da Figura 13 o valor
4.
O problema consiste em ler o nome e quatro notas de 10 alunos e imprimir uma relao
Objetivo do algoritmo: emitir uma relao contendo nome dos alunos, notas e mdia
final.
Na entrada de dados temos que efetuar a leitura do nome do aluno e quatro notas. Observe que
a leitura tem que ser realizada para dez alunos. Sem utilizar a estrutura de vetor precisaramos
de dez variveis para armazenar nome, cinquenta variveis para armazenar as quatro notas
dos dez alunos e dez variveis para armazenar a mdia. Com o uso de vetores precisamos
declarar uma varivel para armazenar nome, quatro variveis para armazenar as notas e uma
para armazenar a mdia. O tipo de dado utilizado para armazenar o nome caractere e para
as notas e mdias utilizamos o real. Podemos utilizar inteiro? No, pois tanto para nota quanto
para mdia so admitidos valores decimais. A entrada de dados realizada por meio do
comando leia, no entanto, devemos lembrar que no possvel obter todos os valores do vetor
de uma nica vez, precisamos ler elemento a elemento. O processamento consiste em calcular
a mdia das quatro notas para cada aluno e armazenar na varivel media. Na sada de dados
temos que informar o nome, notas e mdias dos dez alunos. Para isso, utilizaremos o comando
escreva em uma estrutura de repetio, pois temos que escrever elemento a elemento do
Algoritmo media
Var
cont: inteiro
Incio
Leia (nome[cont])
Leia (n1[cont])
Leia (n2[cont])
Leia (n3[cont])
Leia (n4[cont])
fim_para
fim_para
fim_para
Fim.
Observe que nos comandos de entrada, sada e atribuio sempre utilizamos o nome da varivel
seguido do ndice na posio do vetor. Se voc ficou com dvidas quanto ao funcionamento de
vetores elabore o teste de mesa para o algoritmo apresentado.
ORDENAO EM VETOR
No dia a dia nos deparamos com uma srie de situaes em que independentemente do modo
que os dados foram informados, precisamos apresent-los seguindo uma ordem. No caso de
variveis do tipo caractere temos que classific-los em ordem alfabtica (A-Z) para facilitar
a localizao de um nome, por exemplo. A ordenao crescente ou decrescente pode ser
utilizada, tambm, para variveis numricas (MANZANO; OLIVEIRA, 1997).
O mtodo da bolha no o mtodo mais eficiente, mas bastante simples. Portanto, veremos
seu funcionamento. O mtodo consiste em percorrer o vetor repetidas vezes, comparando os
elementos vizinhos. Se eles esto fora de ordem, efetuada uma troca de posio. O nmero
de repeties de varredura dado pelo nmero de elementos do vetor menos 1. Vamos tomar
como exemplo a ordenao (crescente) do vetor apresentado na Figura 14. Primeiramente,
veremos o funcionamento do mtodo passo a passo e, em seguida, a implementao do
algoritmo. Como podemos observar o vetor no est ordenado.
Ao iniciar a ordenao estamos na posio 1 (Figura 15), temos que comparar o elemento da
posio 1 com o elemento da posio 2 (Figura 16). Como 4 no maior que 7 no efetuamos
a troca.
4 maior que 7?
Agora temos que comparar o elemento da posio 1 com o elemento da posio 3 (Figura 17).
Como 4 maior do que 1, temos que trocar os elementos de posio, isto o 1 vai para a
posio 1 e o 4 vai para a posio 4. Ainda temos que comparar o elemento da posio 1 com
o elemento da posio 5 (Figura 19).
4 maior que 1?
Como 4 no maior que 5, no h troca. Agora devemos repetir a comparao passando para
a posio 3 (Figura 25).
Comparando o elemento da posio 3 com o elemento da posio 4 (Figura 26) , temos que
10 maior que 7. Portanto, h troca (Figura 27).
10 maior que 7?
Ainda temos que comparar o elemento da posio 3 com o da posio 5 (Figura 28).
7 maior que 5?
Comparando o elemento da posio 4 com o da posio 5 (Figura 30), temos que 10 maior
que 7. Os elementos trocam de posio e como no h mais comparaes, temos o vetor
ordenado (Figura 32). 10 maior que 7?
Ao final das comparaes temos o vetor ordenado. O processo de percorrer o vetor realizando
comparaes foi repetido quatro vezes, ou seja, o nmero de elementos do vetor menos 1.
De modo que na primeira repetio foram realizadas quatro comparaes, na segunda trs,
na terceira duas e na ltima uma. O algoritmo que l 5 valores e os apresenta em ordem
crescente (utilizando o mtodo da bolha) apresentado no Quadro 61.
Algoritmo ordena
Var
i, j, aux: inteiro
Incio
Leia (num[i])
Fim_para
uax num[i]
num[i] num[j]
num[j] aux
Fim_se
fim_para
fim_para
Escreva (num[i])
Fim_para
Fim.
Se voc ainda ficou com dvidas quanto ao funcionamento da ordenao, faa o teste de mesa
do algoritmo utilizando o vetor da Figura 33. Lembre-se no h aprendizado de algoritmos sem
prtica.
BUSCA EM VETOR
MTODO SEQUENCIAL
Algoritmo busca
Var
num: inteiro
acha: lgico
Incio
Leia (vnum[i])
Fim_para
Leia (num)
160 ALGORITMOS Ei LGICA
1
DE PROGRAMAO I | Educao a Distncia
Leia (vnum[i])
Fim_para
Leia (num)
i 1
acha falso
acha verdadeiro
seno
i i+1
fim_se
fim_enquanto
Seno
Fim_se
Fim.
MATRIZES
Uma matriz uma varivel homognea multidimensional, formada por uma sequncia de
variveis do mesmo tipo, com o mesmo nome e alocadas sequencialmente na memria.
Para acessar cada elemento da matriz so utilizados ndices, sendo que para cada dimenso
devemos ter um ndice.
A Figura 34 apresenta um exemplo de uma matriz bidimensional, com trs linhas e quatro
colunas.
Da mesma forma que os vetores, a dimenso da matriz formada por constantes inteiras e
positivas. E a nomeao da matriz segue as mesmas regras das variveis. A declarao de
um vetor realizada na seo de variveis (Var) do seguinte modo:
Neste exemplo, temos uma matriz com oito linhas e quatro colunas (Figura 35). Isto , na
primeira dimenso representamos o nmero de linhas e na segunda o nmero de colunas.
Em uma matriz nas operaes de atribuio, leitura e escrita devemos utilizar o nmero de
repeties relativo ao tamanho das dimenses. Com isto, uma matriz de duas dimenses deve
ser controlada por dois laos de repetio, de trs dimenses trs laos e assim por diante
(MANZANO; OLIVEIRA, 1997).
Processamento: calcular a mdia das quatro notas dos alunos e a mdia da turma.
Na entrada de dados temos que efetuar a leitura de quatro notas de vinte alunos. Para isso,
utilizaremos uma matriz com vinte linhas e quatro colunas, ou seja, a primeira dimenso (linhas)
representa o nmero de alunos e a segunda dimenso (colunas) as notas. O tipo de dado
utilizado para armazenar essas informaes real. Como temos uma matriz bidimensional
utilizaremos dois laos de repetio para efetuar a operao de leitura.
O processamento consiste no clculo da mdia das quatro notas para cada aluno, que
armazenaremos em uma varivel vetor de dimenso vinte. J para o clculo da mdia da
turma utilizaremos uma varivel para acumular os valores das mdias de cada aluno e ao sair
da estrutura de repetio calculamos a mdia. Na sada temos que informar a mdia de cada
aluno e da turma. No Quadro 63 apresentado o algoritmo para o problema descrito.
Var
i, j : inteiro
Incio
somat 0
soma 0
Leia (notas[i,j])
Fim_para
media[i] soma/4
soma 0
fim_para
mediat somat/20
Fim_para
Fim.
Se voc ficou com alguma dvida, elabore o teste de mesa. Bom trabalho!!
REGISTROS
Os registros so estruturas de dados que agregam diversas informaes, que podem ser de
diferentes tipos. Com essa estrutura possvel gerar novos tipos de dados, alm dos definidos
pelas linguagens de programao (ASCENCIO; CAMPOS, 2010).
Tipo
<identificador> = registro
fim_registro
var
<variveis> : <identificador>
Em que:
<lista dos campos e seus tipos>: relao de variveis que sero usadas como campos e
o tipo de cada uma delas.
Note que na seo Var devemos indicar a varivel como tipo registro e a declarao do seu
tipo de acordo com o identificador definido anteriormente. LEMBRE-SE: a instruo tipo deve
vir antes da instruo Var.
Vamos retomar o problema visto na seo Vetores, que consistia em ler o nome e quatro
A Figura 36 ilustra o layout de um registro, contendo os campos: nome, primeira nota, segunda
nota, terceira nota e quarta nota.
Um algoritmo que realiza a leitura de nome e quatro notas de um aluno utilizando o conceito
de registros apresentado no Quadro 64. Com este exemplo fica mais claro como deve ser
realizada a declarao, atribuio, leitura e escrita utilizando registros.
Algoritmo registroaluno
Tipo
Cad_aluno = registro
Nome: caractere
Nota1: real
Nota2: real
Nota3: real
Nota4: real
fim_registro
Var
Aluno: cad_aluno
Incio
Leia (aluno.nome)
Leia (aluno.nota1)
Leia (aluno.nota2)
Leia (aluno.nota3)
Leia (aluno.nota4)
Fim.
Voc imagina outras situaes que podemos aplicar o conceito de registros? No dia a dia
nos deparamos com diversos casos. Se pensarmos em uma empresa temos cadastros
com informaes sobre clientes, produtos e servios. Podemos agrupar as informaes
relacionadas a cada um destes elementos em registros, facilitando o acesso s informaes
relacionadas a um cliente, produto ou servio.
Ao criar registros podemos definir um vetor ou at mesmo uma matriz dentro de um registro.
O algoritmo do Quadro 65 apresenta um registro utilizando vetores para o problema de ler o
nome e as quatro notas de um aluno.
Algoritmo registroaluno
Tipo
Cad_aluno = registro
Nome: caractere
Nota: notas
fim_registro
Var
Aluno: cad_aluno
i: inteiro
Incio
Leia (aluno.nome)
170 ALGORITMOS
Escreva (Informe a nota,
E LGICA DEi, :)
PROGRAMAO I | Educao a Distncia
Aluno: cad_aluno
i: inteiro
Incio
Leia (aluno.nome)
Leia (aluno.nota[i])
fim_para
Fim.
No exemplo apresentado na seo Vetores tnhamos a leitura de nome e notas para dez
alunos. Podemos resolver o mesmo problema utilizando registros? Sim, pois podemos declarar
vetores de registros, conforme apresentado no Quadro 66.
Algoritmo registroaluno
Tipo
Cad_aluno = registro
Nome: caractere
Nota: notas
fim_registro
Var
i, j: inteiro
Incio
ParaEi LGICA
ALGORITMOS de 1 at 10DEfaa
PROGRAMAO I | Educao a Distncia 171
Aluno: vetor [1..10] de cad_aluno
i, j: inteiro
Incio
Para i de 1 at 10 faa
Leia (aluno[i].nome)
Leia (aluno[i].nota[j])
Fim_para
Fim_para
Para i de 1 at 10 faa
Fim_para
Fim_para
Fim.
PROBLEMA
Objetivo do algoritmo: ler informaes sobre 20 produtos e realizar consulta pelo cdigo
do produto.
O Quadro 67 apresenta o algoritmo para o problema descrito. Observe que este algoritmo
envolve o conceito de registros, lao de repetio e busca em vetor.
Algoritmo registroproduto
Tipo
Cad_produto = registro
codigo: inteiro
nome: caractere[30]
preo: real
saldo: inteiro
fim_registro
Var
i, codigo: inteiro
acha: lgico
resp: caractere[3]
Incio
Para i de 1 at 20 faa
Leia (produto[i].codigo)
resp: caractere[3]
Incio
Para i de 1 at 20 faa
Leia (produto[i].codigo)
Leia (produto[i].nome)
Leia (produto[i].preco)
Leia (produto[i].saldo)
Fim_para
Resp sim
Leia (codigo)
i 1
acha falso
Acha verdadeiro
Seno
i i+1
fim_se
fim_enquanto
Se (acha=verdadeiro) ento
ALGORITMOS E LGICA
Escreva DE:,
(O preo PROGRAMAO
produto[i].preco) I | Educao a Distncia 175
fim_se
fim_enquanto
Se (acha=verdadeiro) ento
Seno
Fim_se
Leia (resp)
Fim_enquanto
Fim.
CONSIDERAES FINAIS
Vimos que vetores e matrizes so estruturas homogneas que agrupam diversas informaes,
do mesmo tipo, em uma nica varivel. Sendo os vetores unidimensionais e as matrizes
multidimensionais. Em relao aos vetores conhecemos o mtodo de classificao Bubble
Sort, que varre o vetor repetidas vezes, comparando os elementos vizinhos. Se eles esto
fora de ordem, efetuada uma troca de posio. Esse mtodo utilizado quando queremos
rearranjar o vetor segundo algum critrio como, por exemplo, ordem crescente, decrescente
ou alfabtica. Ainda em relao a vetores conhecemos o mtodo de pesquisa sequencial, que
permite verificar se um dado elemento encontra-se no vetor ou no.
Por fim, elaboramos um algoritmo que envolveu todos os conceitos vistos na Unidade. Agora,
para fixar todos os conceitos importante que voc desenvolva as atividades de autoestudo
propostas. Assim, voc assimila com mais facilidade tudo o que vimos, desenvolve seu
raciocnio lgico e aumenta o poder de resoluo de problemas, afinal, elaboramos algoritmos
com o intuito de resolver problemas.
Para saber um pouco mais sobre o mtodo de ordenao da bolha, acesse os vdeos disponveis em:
<http://www.youtube.com/watch?v=AW5TlqCHV8U>.
<http://www.youtube.com/watch?v=otqltM-ou0o>.
A varivel caractere armazenada na memria principal como sendo um vetor, mesmo sem ser de-
clarada como tal.
ATIVIDADE DE AUTOESTUDO
1. Elabore um algoritmo que leia um vetor de 50 nmeros inteiros e imprima o maior e o menor
nmero.
2. Escreva um algoritmo que leia dois vetores A e B, com 20 nmeros inteiros. Efetue a soma
dos dois vetores em um vetor C e imprima o vetor C em ordem crescente.
5. Desenvolva um algoritmo que efetua a leitura dos nomes de 5 alunos e tambm de suas
quatro notas bimestrais. Calcule a mdia de cada aluno e apresente os nomes classifica-
dos em ordem crescente de mdia.
6. Escreva um algoritmo que recebe duas matrizes inteiras de ordem 5 e imprima a soma e a
diferena entre elas.
7. Formule um algoritmo que receba os valores de contas a pagar de uma ao longo do ano,
de modo que cada linha representa um ms do ano e cada coluna uma semana do ms.
Com isso, temos uma matriz 12 x 4. Calcule e imprima: total de contas a pagar por ms e
o total anual.
1. cadastre os professores;
4. saia do programa.
EXERCCIOS DE FIXAO
1. Escreva um algoritmo que leia um vetor com 30 elementos inteiros e escreva-os em ordem
contrria a da leitura.
Processamento: no h.
Algoritmo levetor
Var
i, j : inteiro
Incio
Leia (num[i])
fim_para
Escreva (num[i])
Fim_para
Fim.
2. Elabore um algoritmo que leia duas matrizes de 5x5. Calcule e imprimia a diferena entre
elas.
Algoritmo diferenca
Var
i, j : inteiro
Incio
Leia (A[i,j])
Fim_para
fim_para
Leia (B[i,j])
C A[i,j] B[ i,j]
Fim_para
fim_para
Escreva (C[i,j])
Fim_para
fim_para
Fim.
Objetivo do algoritmo: ler informaes sobre 20 contatos e realizar consulta pelo nome.
Sada: imprimir o telefone se existir o nome informado. Seno, informar ao usurio que no
h contato cadastrado com o nome digitado.
Algoritmo registrocontato
Tipo
Cad_agenda = registro
nome: caractere[30]
fone: caractere[15]
e-mail: caractere[20]
fim_registro
Var
i: inteiro
acha: lgico
nomebusca: caractere[30]
resp: caractere[3]
Incio
Para i de 1 at 20 faa
resp: caractere[3]
Incio
Para i de 1 at 20 faa
Leia (contato[i].nome)
Leia (contato[i].fone)
Leia (contato[i].email)
Fim_para
Resp sim
Leia (nomebusca)
i1
acha falso
Acha verdadeiro
Seno
i i+1
fim_se
fim_enquanto
Se (acha=verdadeiro) ento
Seno
Seno
Fim_se
Leia (resp)
Fim_enquanto
Fim.
4. Elabore um algoritmo que leia informaes (matrcula, nome, lotao e salrio) de 30 pro-
fessores. Deve ser permitido executar quantas consultas o operador desejar, em que ele
digita a matrcula e apresentado a lotao e o salrio do professor. Se a matrcula digitada
no existir, informar o usurio.
Objetivo do algoritmo: ler informaes sobre 30 professores e realizar consulta pela ma-
trcula.
Sada: imprimir a lotao, se existir a matrcula informada. Seno, informar ao usurio que
no h professor com a matrcula digitada.
Algoritmo registroprofessor
Tipo
Cad_professor = registro
matricula: inteiro
nome: caractere[30]
lotacao: caractere[20]
salario: real
fim_registro
Var
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 183
salario: real
fim_registro
Var
i, registro: inteiro
acha: lgico
resp: caractere[3]
Incio
Para i de 1 at 30 faa
Leia (professor[i].matricula)
Leia (professor[i].nome)
Leia (professor[i].lotacao)
Leia (professor[i].salario)
Fim_para
Resp sim
Leia (registro)
i 1
acha falso
Acha verdadeiro
184 ALGORITMOS E LGICA
Seno
DE PROGRAMAO I | Educao a Distncia
i 1
acha falso
Acha verdadeiro
Seno
i i+1
fim_se
fim_enquanto
Se (acha=verdadeiro) ento
Seno
Fim_se
Leia (resp)
Fim_enquanto
Fim.
Objetivos de Aprendizagem
Plano de Estudo
Sub-rotinas
Procedimentos
Escopo de variveis
Passagem de Parmetros
Funes
Recursividade
Ao final desta unidade voc saber construir algoritmos modularizados, utilizar arquivos para
SUB-ROTINAS
Em muitas situaes nos deparamos com problemas complexos e abrangentes. Para resolver
esse tipo de problema temos que dividi-lo em subproblemas mais simples e especficos, dividindo
assim a sua complexidade e facilitando a resoluo (FORBELLONE; EBERSPACHER, 2005).
Na diviso dos problemas complexos utilizamos sub-rotinas para resolver cada subproblema,
permitindo assim possuir a modularizao. Na literatura encontramos, tambm, as terminologias
de subprograma, mdulos e subalgoritmos para designar as sub-rotinas.
E o que vem a ser ento uma sub-rotina? Uma sub-rotina consiste em blocos de instrues
que realizam tarefas especficas. um trecho menor de cdigo, um algoritmo mais simples,
que resolve um subproblema por meio de operaes de entrada, processamento e sada
(ASCENCIO; CAMPOS, 2010; MANZANO; OLIVEIRA, 1997).
Uma sub-rotina carregada apenas uma vez e pode ser executada quantas vezes for
necessrio, podendo ser utilizada para economizar espao e tempo de programao. Em cada
sub-rotina, alm de ter acesso s variveis do programa que o chamou (variveis globais),
pode ter suas prprias variveis (variveis locais), que existem apenas durante sua chamada.
Facilita o teste.
PROCEDIMENTOS
Uma sub-rotina de procedimento se caracteriza por no retornar valor para quem as chamou
(ASCENCIO; CAMPOS, 2010). E sua sintaxe :
var
<variveis>
incio
<instrues>
fim_procedimento
Outro ponto importante que as sub-rotinas devem ser declaradas antes do programa ou
sub-rotina que as chama.
Entrada: ler a opo do usurio. E se for uma operao aritmtica efetuar a operao.
Na construo deste algoritmo vamos aplicar o conceito de procedimentos, de modo que cada
operao aritmtica deve ser realizada por um procedimento especfico. O programa principal
ir ler a opo selecionada pelo usurio e efetuar chamada aos procedimentos. Precisamos
criar variveis para armazenar a opo selecionada pelo usurio, os dois nmeros que o
O Quadro 72 apresenta o algoritmo que efetua as quatro operaes aritmticas. Note que para
cada operao h um procedimento associado.
Algoritmo calculadora
Procedimento soma
Var:
A, B, Resultado: real
Incio
Leia (A)
Leia (B)
Resultado A + B
Fim_procedimento
Procedimento subtracao
Var:
A, B, Resultado: real
Incio
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 193
Escreva (Procedimento SUBTRAO)
Fim_procedimento
Procedimento subtracao
Var:
A, B, Resultado: real
Incio
Leia (A)
Leia (B)
Resultado A - B
Fim_procedimento
Procedimento multiplicacao
Var:
A, B, Resultado: real
Incio
Leia (A)
Leia (B)
Resultado A * B
Fim_procedimento
Procedimento divisao
Var:
A, B, Resultado: real
Incio
Leia (A)
Leia (B)
Resultado A / B
Fim_procedimento
Var
opcao: inteiro
Incio
opcao 0
Escreva (1 Soma)
Escreva (2 Subtrao)
Escreva (3 Multiplicao)
Escreva (4 Diviso)
Escreva (5 Sair)
Escreva (5 Sair)
Leia (opcao)
Caso (opcao)
fim_caso
fim_se
fim_enquanto
Fim.
Observe que no programa principal ocorre a chamada para cada um dos procedimentos
declarados. O problema calculadora foi dividido em subproblemas (cada operao aritmtica)
e para esses subproblemas foram construdas sub-rotinas do tipo procedimento.
As variveis globais so aquelas declaradas fora das sub-rotinas. Elas esto acessveis em
qualquer parte do algoritmo, inclusive dentro das sub-rotinas e so destrudas apenas ao final
da execuo do algoritmo (ASCENCIO; CAMPOS, 2010). o caso da varivel opo utilizada
no exemplo da calculadora.
A Figura 37 ilustra o conceito de escopo de variveis. Temos uma rotina principal que contm
as rotinas 1 e 2. Internamente a rotina 1, temos duas rotinas (1.1 e 1.2) e internamente a
rotina 2, temos a rotina 2.1 Observe que a rotina principal possui duas variveis A, B, que so
variveis globais em relao as sub-rotinas 1 e 2. No entanto, na rotina 1 temos a declarao
de uma varivel A, a qual assume um contexto local para esta sub-rotina mas, global para as
sub-rotinas 1.1 e 1.2 do mesmo modo a varivel X. J as variveis W e Y so variveis locais
que pertencem s rotinas 1.1 e 1.2, respectivamente.
Em relao sub-rotina 2 temos que as variveis A e B so globais para a rotina 2.1 A varivel
M declarada na rotina 2 uma varivel global para a rotina 2.1, que possui uma varivel X que
local e no apresenta nenhuma relao com a varivel X definida na rotina 1.
Em relao sub-rotina 2 temos que as variveis A e B so globais para a rotina 2.1 A varivel
M declarada na rotina 2 uma varivel global para a rotina 2.1, que possui uma varivel X que
local e no apresenta nenhuma relao com a varivel X definida na rotina 1.
MANZANO; OLIVEIRA (1997) destacam que uma varivel declarada antes de uma sub-rotina
uma varivel global para a sub-rotina.
Algoritmo calculadora
Var:
Resultado: real
Incio
Resultado A + B
Fim_procedimento
Var:
Resultado: real
Incio
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 199
Resultado A - B
Escreva (O resultado da soma :, resultado)
Fim_procedimento
Var:
Resultado: real
Incio
Resultado A - B
Fim_procedimento
Var:
Resultado: real
Incio
Resultado A * B
Fim_procedimento
Var:
Resultado: real
Incio
Resultado A/ B
Fim_procedimento
opcao: inteiro
Fim_procedimento
Var
opcao: inteiro
X, Y: real
Incio
opcao 0
Leia (X)
Leia (Y)
Escreva (1 Soma)
Escreva (2 Subtrao)
Escreva (3 Multiplicao)
Escreva (4 Diviso)
Escreva (5 Sair)
Leia (opcao)
Caso (opcao)
ALGORITMOSfim_caso
E LGICA DE PROGRAMAO I | Educao a Distncia 201
Seja 4 faa multiplicacao(X,Y)
fim_caso
fim_se
fim_enquanto
Fim.
Observe que agora temos a leitura das variveis X e Y no programa principal e na identificao
dos procedimentos temos os parmetros que so exigidos pelos mesmos. Os parmetros
reais so os valores de X e Y obtidos na entrada de dados e os parmetros formais so A e B.
Vamos exemplificar a passagem de parmetro por valor e por referncia utilizando o problema
de calcular o fatorial de um nmero inteiro. No Quadro 74 apresentado o algoritmo utilizando
a passagem de parmetros por valor.
Algoritmo calculafatorial
Var:
i, fat: inteiro
Incio
fat 1
fat fat * i
fim_para
Fim_procedimento
Var
n: inteiro
Incio
Leia (n)
Fatorial(n)
Fim.
Neste caso, temos que a varivel X o parmetro formal que receber o valor da varivel n
por meio do procedimento fatorial. Ao trmino do lao de repetio, o valor da varivel fat
impresso. Lembre-se: a varivel fat vlida apenas dentro do procedimento fatorial.
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 203
No Quadro 75 temos a passagem de parmetros por referncia, no caso a varivel Fat.
Sempre que a passagem for por referncia devemos inserir a instruo Var na declarao da
sub-rotina. A varivel X continua sendo passada por valor.
FUNES
Uma funo, tambm uma sub-rotina, que tem como objetivo desviar a execuo do programa
principal para realizar uma tarefa especfica, com uma nica diferena: sempre retorna um
var
<variveis>
inicio
<instrues>
retorne <valor>
fim_funcao
Um exemplo de uso de funo apresentado no Quadro 76. Note que o nome da funo
recebe o valor da varivel fat. Observe, tambm, que a funo tem um tipo associado, no caso
inteiro.
Algoritmo calculafatorial
Var:
i: inteiro
Incio
fat 1
fat fat * i
fim_para
retorne fat
206 ALGORITMOSFim_funcao
E LGICA DE PROGRAMAO I | Educao a Distncia
Incio
fat 1
fat fat * i
fim_para
retorne fat
Fim_funcao
Var
n, resultado: inteiro
Incio
Leia (n)
Resultado Fatorial(n)
Fim.
No algoritmo principal a chamada da funo atribuda a varivel resultado, pois toda funo
retorna um valor.
RECURSIVIDADE
Um objeto dito recursivo se ele for definido em termos de si prprio. Wirth (1999) destaca
Voc conhece algum problema recursivo? Vamos retomar o problema do fatorial, que um
exemplo clssico de recurso. A definio recursiva dada por:
Incio
Se (x= 0) ento
retorne 1
seno
fim_se
Fim_funcao
A Figura 40 ilustra a simulao da funo fatorial para o clculo do fatorial de 5. Observe que
so realizadas chamadas sucessivas funo fatorial at chegar na condio de parada.
Incio
retorne x
seno
fim_se
Fim_funcao
At aqui trabalhamos com a manipulao de dados que estavam na memria, ou seja, aps
a execuo do algoritmo esses dados so perdidos. A partir de agora trabalharemos com
arquivos para armazenar e manipular os dados. Voc sabe o que so arquivos? Conhece
algum arquivo?
Quando pensamos em arquivo nos vem em mente aquele armrio com um monte de pastas
para guardar informaes (Figura 41). exatamente essa a ideia de arquivos, um local para
armazenar informaes.
Para exemplificar o conceito de arquivos vamos tomar como exemplo um cadastro de produtos
com as seguintes informaes: cdigo, descrio, unidade, preo e saldo em estoque.
Como um arquivo um conjunto de registros, o primeiro passo definir o registro que compe
o arquivo (Quadro 79).
Tipo
Cad_produto = registro
Codigo: inteiro
Descricao: caractere
Unidade: caractere
Preco: real
Saldo: inteiro
fim_registro
Tipo
Cadastro: Cad_Produto
Produto: Arq_Produto
Sempre que formos trabalhar com arquivo, primeiro temos que abri-lo, para deix-lo disponvel
Para copiar uma informao que est em um arquivo utilizamos o comando Copie( ), o qual
possui dois parmetros: varivel do arquivo e varivel registro com o mesmo formato do registro
que compe o arquivo. Ou seja, no primeiro parmetro indicamos de onde ser copiado e no
segundo o local que armazenaremos o valor copiado. Lembre-se que o formato da varivel
deve ser igual ao do arquivo. No exemplo de cadastro de produtos a instruo para cpia seria
Copie(Produto, Cadastro).
Para armazenar uma informao no arquivo utilizamos o comando Guarde( ), que possui dois
parmetros, em que o primeiro indica onde ser guardado e o segundo o que ser guardado.
No se esquea de que o formato do registro que ser guardado tem que ser idntico ao do
arquivo. Com isto, para o exemplo do cadastro de produto a instruo : Guarde(Produto,
Cadastro).
Muitas vezes, queremos apagar algumas informaes (registros) do arquivo. Para isso,
utilizamos o comando Elimine( ) que um parmetro, o arquivo pois, elimina sempre o registro
da posio corrente. Para o exemplo, teramos Elimine(Produto).
Nos casos de concepo sequencial temos que a gravao dos registros realizada de modo
contnuo, um aps o outro. Com isto, a localizao de um registro obedece sua ordem de
CONSIDERAES FINAIS
Conhecemos o conceito de escopo de variveis e vimos que as variveis podem ser locais
ou globais. Sendo que uma varivel local aquela que est acessvel apenas dentro da sub-
rotina, enquanto que uma varivel global acessvel de qualquer parte do algoritmo. Alm
disso, estudamos o funcionamento da passagem de parmetros por valor e por referncia.
Na passagem de parmetros por valor no h alterao do valor do parmetro real, pois a
sub-rotina trabalha com cpias dos valores passados no momento de sua chamada. J na
passagem de parmetros por referncia esses valores so alterados, pois os parmetros
passados so endereos de memria.
Para saber um pouco mais sobre recursividade, leia o artigo Ensino de Programao recursiva em
Cincia da Computao, disponvel em: <ftp://ftp.usjt.br/pub/revint/115_45.pdf>.
O artigo destaca a importncia da recursividade e apresenta cenrios de aplicao.
ATIVIDADE DE AUTOESTUDO
1. Desenvolva um cadastro de produtos que contenha cdigo, descrio, unidade e preo
para 20 produtos. Defi na um menu com as seguintes opes:
1. Cadastrar os 20 registros.
1. Cadastrar os 10 registros.
5. Sair do programa.
3. Escreva uma funo que receba um caractere e retorne 1 se for uma consoante e 0 se for
vogal.
4. Elabore um programa com uma sub-rotina que apresente o somatrio dos N primeiros
nmeros pares, definidos por um operador. O valor de N ser informado pelo usurio.
5. Escreva um algoritmo que efetue a leitura de um nmero inteiro e apresente uma mensa-
gem informando se o nmero par ou mpar.
6. Desenvolva um programa que por meio de uma sub-rotina apresente como resultado o
valor absoluto de um nmero.
7. Elabore um algoritmo que por meio de funo efetue e apresente o valor da converso de
um valor em real de um valor lido em euros. Dever ser solicitado por meio do programa
principal o valor da cotao do euro e a quantidade de euro disponvel.
8. Escreva um algoritmo utilizando funo que converta uma dada temperatura lida em Cel-
sius para Fahrnheit.
EXERCCIOS DE FIXAO
1. Escreva uma sub-rotina que apresente o somatrio dos N primeiros nmeros inteiros.
Algoritmo somatorio
Var:
i, total: inteiro
Incio
total 0
total total + i
fim_para
retorne total
Fim_funcao
Var
n, resultado: inteiro
Incio
Leia (n)
Resultado soma(n)
Fim.
Algoritmo raizquadrada
Incio
retorne sqr(x)
Fim_funcao
Var
num: inteiro
resultado: real
Incio
Leia (num)
resultado raiz(n)
Fim.
Algoritmo raizquadrada
Var
num: inteiro
Incio
Se (x > y) ento
num x
seno
num y
fim_se
num z
fim_se
retorne num
Fim_funcao
Var
resultado, a, b, c: inteiro
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia 219
Fim_funcao
Var
resultado, a, b, c: inteiro
Incio
Leia (a)
Leia (b)
Leia (c)
resultado maior(a, b, c)
Fim.
4. Elabore um procedimento que receba um valor em segundos e converta para horas, minu-
tos e segundos.
Objetivo do algoritmo: ler um valor em segundos e converter para horas, minutos e se-
gundos.
Processamento: converter os segundos para horas, dividindo por 3600. O resto da diviso
deve ser dividido por 60 (minutos) e o resto da diviso resultante deve ser dividido por 60
para obter os segundos.
Algoritmo calculatempo
Var:
resto: inteiro
Incio
h x/3600
m resto/60
s resto mod 60
Fim_procedimento
Var
Incio
Leia (n)
Fim.
Var
valor: real
Incio
retorne valor
Fim_funcao
Var
Incio
Leia (valor)
Leia (percentual)
Fim.
Diante dos conceitos que foram apresentados, voc deve estar mais preparado para construir
algoritmos e entender a importncia que eles tm no desenvolvimento de software. Iniciamos
o nosso aprendizado construindo algoritmos simples, que tinham apenas entrada e sada
de dados, e conforme avanamos passamos a construir algoritmos mais complexos, que
envolviam entrada, processamento, sada de dados e modularizao.
Professora Camila
CORMEN, T. H.; RIVEST, R.; LEISERSON, C. E. Algoritmos: teoria e prtica. Rio de Janeiro:
Campus, 2002.