Beruflich Dokumente
Kultur Dokumente
ALGORITMOS E LGICA DE
PROGRAMAO I
Professora Me. Gislaine Camila Lapasini Leal
graduao
Anlise e desenvolvimento de sistemas
Sistemas para Internet
MARING-pr
2012
ISBN 978-85-8084-295-1
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
Professora Me. Gislaine Camila Lapasini Leal
APRESENTAO DO REITOR
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.
Com essa viso, o Cesumar Centro Universitrio de Maring assume o compromisso
de democratizar o conhecimento por meio de alta tecnologia e contribuir para o futuro dos
brasileiros.
No cumprimento de sua misso promover a educao de qualidade nas diferentes reas
do conhecimento, formando profissionais cidados que contribuam para o desenvolvimento
de uma sociedade justa e solidria , o Cesumar busca a integrao do ensino-pesquisaextenso com as demandas institucionais e sociais; a realizao de uma prtica acadmica que
contribua para o desenvolvimento da conscincia social e poltica e, por fim, a democratizao
do conhecimento acadmico com a articulao e a integrao com a sociedade.
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; bemestar 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.
Professor Wilson de Matos Silva
Reitor
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
APRESENTAO
Livro: ALGORITMOS E LGICA DE PROGRAMAO I
Professora Me. Gislaine Camila Lapasini Leal
Sumrio
UNIDADE I
CONCEITOS BSICOS
CONCEITUANDO ALGORITMOS
16
19
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
65
71
75
80
UNIDADE III
ESTRUTURA DE REPETIO
ESTRUTURA DE REPETIO
102
ESTRUTURA PARA
103
ESTRUTURA ENQUANTO
110
ESTRUTURA REPITA
116
118
UNIDADE IV
ESTRUTURAS DE DADOS HOMOGNEAS E HETEROGNEAS
ESTUTURAS DE DADOS HOMOGNEAS
148
VETORES
148
ORDENAO EM VETOR
152
BUSCA EM VETOR
159
MTODO SEQUENCIAL
160
MATRIZES
162
166
REGISTROS
166
PROBLEMA
173
UNIDADE V
SUB-ROTINAS E PROGRAMAO COM ARQUIVOS
SUB-ROTINAS
190
PROCEDIMENTOS
191
ESCOPO DE VARIVEIS
197
PASSAGEM DE PARMETROS
199
FUNES
205
RECURSIVIDADE
207
211
CONCLUSO
223
REFERNCIAS
225
UNIDADE I
CONCEITOS BSICOS
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.
Primeiramente, ser abordado o conceito de algoritmos e voc descobrir que empiricamente
j conhece e utiliza algoritmos no seu cotidiano. Estudaremos tipos de algoritmos e as formas
que podemos utilizar para representar a soluo do problema e, especificamente, trataremos
sobre a representao por meio de linguagem natural, simbologia e linguagem restrita.
Para facilitar o processo de ensino-aprendizagem ser apresentado um mtodo para a
construo de algoritmos que divide os problemas em trs partes: Entrada Processamento
Sada. Esse mtodo nos auxiliar a sistematizar as informaes para a construo de
algoritmos.
Ao formular algoritmos precisamos guardar algumas informaes do problema. Para isso
veremos o conceito de variveis e constantes. Conheceremos os tipos de variveis numricas,
literais e lgicas e a caracterstica da informao que cada uma delas pode armazenar.
Alm de guardar informaes precisaremos obter dados, mostrar mensagens e resultados
de processamento. Desta forma, estudaremos os comandos relacionados entrada de
dados que nos permitem interagir como usurio; atribuio que possibilita atribuir valor s
variveis; e, sada de dados que viabiliza o envio de mensagens e a exibio dos resultados
do processamento.
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
15
so de sada? Que tipo de varivel devo utilizar? Como exibo um resultado ao usurio? Qual o
resultado da simulao do algoritmo?
Alm disto, voc aprender os conceitos de variveis, constantes, expresses, funes,
atribuio, comando de entrada, comando de sada e tcnicas de raciocnio lgico para a
soluo de problemas. Todo esse conhecimento voc poder utilizar para construir os primeiros
algoritmos que resolvem problemas! Vamos l?!
CONCEITUANDO ALGORITMOS
16
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).
17
Agora que estamos mais familiarizados com o termo algoritmo podemos perceber que eles
fazem parte do nosso dia a dia, por exemplo, quando seguimos instrues para uso de um
medicamento, realizamos uma ligao telefnica, trocamos uma lmpada, montamos um
mvel ou aparelho ou at mesmo quando seguimos uma receita culinria (ZIVIANI, 2004).
O Quadro 2 apresenta o conjunto de instrues a serem seguidas para tomar sal de frutas (uso
de medicamento).
Quadro 2: Algoritmo para tomar sal de frutas
1. Colocar 2/3 de gua em um copo
2. Dissolver o sal de frutas
3. Esperar o efeito efervescente
4. Tomar a soluo
A sequncia de passos a ser seguida para realizar uma ligao telefnica apresentada no
Quadro 3.
Quadro 3: Algoritmo para fazer ligao telefnica
1. Inserir o nmero
2. Apertar o boto para fazer ligao
3. Esperar atender
4. Falar no telefone
5. Apertar o boto para desligar ligao
Fonte: adaptado de (LOPES; GARCIA, 2002)
18
Uma soluo para o problema de trocar uma lmpada representada por cinco instrues,
como pode ser visto no Quadro 4.
Quadro 4: Algoritmo para trocar lmpada
1. Se (lmpada estiver fora de alcance) Pegar uma escada
2. Pegar a lmpada
3. Se (lmpada estiver quente) Pegar um pano
4. Tirar a lmpada queimada
5. Colocar a lmpada boa
Fonte: LOPES; GARCIA (2002)
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).
19
Definir o processamento: que clculos devemos efetuar. neste momento que os dados
obtidos pela entrada sero transformados em informao til para o usurio.
TIPOS DE ALGORITMOS
Ascencio e Campos (2010) destacam que os tipos de algoritmos mais utilizados so: descrio
narrativa, fluxograma e pseudocdigo.
A descrio narrativa consiste na representao do problema por meio da linguagem natural,
descrevendo os passos que devem ser seguidos para a resoluo de um problema, conforme
foi visto no tpico CONCEITUANDO ALGORITMOS. Como vantagem dessa representao
destaca-se a facilidade de aprendizado. No entanto, esse tipo de descrio pode ser ambgua,
gerar diversas interpretaes e dificultar a converso do algoritmo em um programa de
computador (ASCENCIO; CAMPOS, 2010).
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.
20
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.
Quadro 5: Descrio Narrativa Algoritmo Soma
1. Obter dois nmeros
2. Somar os dois nmeros
3. Mostrar o resultado da soma
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.
Quadro 6: Simbologia de Fluxograma
Smbolo
Descrio
Indica o incio e o fim do algoritmo.
Indica o sentido do fluxo de dados.
Indica a realizao de clculos e operaes de atribuio.
Representa a sada de dados.
Indica que deve ser tomada uma deciso, h possibilidade de desvio do fluxo.
21
Incio
N1, N2
S = N1+N2
S
Fim
22
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.
23
Figura 2: Varivel
Fonte: a autora
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:
Var <nome da varivel> : <tipo da varivel>
24
Ao declarar variveis devemos tomar alguns cuidados: a palavra VAR usada uma nica vez
na definio de variveis; mais de uma varivel do mesmo tipo pode ser definida em uma
mesma linha, basta separar cada uma delas por vrgula; e, se h diferentes tipos de variveis,
cada tipo deve ser declarado em linhas diferentes.
Os identificadores so os nomes das variveis, programas, rotinas, constantes etc. Para
nomear esses identificadores devemos seguir algumas regras (ASCENCIO; CAMPOS, 2010):
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.
25
Identificadores invlidos
b@
media
media idade
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,
26
27
Var
Nome : Caractere [tamanho]
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
De acordo com Lopes e Garcia (2002), as expresses esto diretamente relacionadas ao
conceito de frmula matemtica, em que um conjunto de variveis e constantes relacionase por meio de operadores. As expresses dividem-se em: aritmticas, relacional, lgicas e
literais.
As expresses aritmticas so aquelas em que o resultado consiste em um valor numrico.
Desta forma, apenas operadores aritmticos e variveis numricas (inteiro e real) podem ser
utilizados em expresso desse tipo.
28
Operador
Soma
Significado
Prioridade
representado por A * B.
Diviso
**
mod
div
29
Smbolo Exemplo
Igual
A=1
<>
A<>B
Maior
>
A >5
Menor que
<
B < 12
Maior ou igual a
>=
A >= 6
Menor ou igual a
<=
B <=7
Diferente
Smbolo
Explicao
Prioridade
OU
NO
30
FUNES INTRNSECAS
As funes so frmulas matemticas prontas que podemos utilizar em nossos algoritmos. O
Quadro 12 apresenta as principais funes, destacando o comando associado e o que ela faz.
31
Funo
Objetivo
ABS(varivel)
ARCTAN(varivel)
COS(varivel)
EXP(varivel)
FRAC(varivel)
LN(varivel)
PI
SIN(varivel)
SQR(varivel)
SQRT(varivel)
ATRIBUIO
J sabemos o que so variveis, quais os tipos de variveis e expresses que podemos
associar a elas, agora precisamos entender como armazenar um dado em uma varivel. A
32
atribuio consiste no processo de fornecer um valor a uma varivel, em que o tipo desse valor
tem que ser compatvel com a varivel (LOPES; GARCIA, 2002).
O smbolo utilizado para a atribuio e a representao dada por:
identificador
expresso
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
33
<varivel> ou <literal>
CONSTRUINDO ALGORITMOS
J vimos o conceito de variveis, constantes, expresses, conhecemos os operadores,
funes, comandos de atribuio, entrada e sada de dados. Nesta seo reuniremos todos
esses conhecimentos na construo de algoritmos.
34
PROBLEMA 1
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.
35
variveis so necessrias e qual o tipo de cada uma delas. Os dados que precisamos obter
e armazenar so: nome, idade, peso, altura e telefone. Desta forma, temos uma varivel
associada a cada um. Sabemos que idade, peso e altura so variveis numricas, sendo que
a idade inteiro e os demais real. Para armazenar o nome e telefone, uma informao literal,
utilizaremos a varivel do tipo caractere.
Iniciando a formulao do algoritmo, temos que ele precisa de um nome o qual denominaremos
de problema1. Portanto, a primeira linha ser:
Algoritmo problema1
Em seguida, temos a declarao das variveis, que dada por:
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.
Todo algoritmo delimitado pela instruo de Incio, logo:
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
36
sendo solicitado, deste modo utilizamos o comando escreva. Com isto, temos:
Leia (nome)
Leia (idade)
Leia (peso)
Leia (altura)
Leia (telefone)
37
: inteiro
: caractere[50]
Telefone
: caractere[15]
Incio
Escreva (Informe o nome:)
Leia (nome)
Escreva (Informe a idade:)
Leia (idade)
Escreva (Informe o peso:)
Leia (peso)
Escreva (Informe a altura:)
Leia (altura)
Escreva (Informe o telefone:)
Leia (telefone)
Escreva (O nome :, nome)
Escreva (A idade :, idade )
Escreva (O peso :, peso)
Escreva (A altura :, altura)
Escreva (O telefone :,
telefone)
Fim.
38
39
l
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.
40
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:
41
Incio
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:
Escreva (Informe o valor do lado do quadrado:)
Leia (L)
No processamento temos que calcular a rea e o permetro, os quais so representados pelas
variveis, A e P, respectivamente. O clculo representado por uma expresso matemtica,
que ao passar para algoritmo temos:
A=L*L
P=4*L
Estas instrues indicam que a varivel A e a varivel P armazena o resultado da expresso
que definimos.
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.
42
Note que a instruo Fim possui um ponto final. O algoritmo completo que formulamos
encontra-se no Quadro 15. Note que as palavras-chave esto em negrito. Lembre-se que essas
palavras so reservadas, desta forma no podemos utiliz-las para nomear os identificadores
(programas, variveis, constantes e outros).
Quadro 15: Pseudocdigo - Problema 2
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
43
Fonte: SHUTTERSTOCK.COM
PROBLEMA 3
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
44
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.
45
46
A constante phoraextra foi definida pelo fato do valor ser invarivel, neste caso, sendo 100%.
Aps a entrada de dados foi efetuado o processamento, composto por quatro expresses,
em que podemos observar o uso de parnteses. Esses parnteses servem para indicar a
precedncia das operaes, ou seja, primeiramente realizada a operao que est dentro
deles e, em seguida, as demais, observando tambm a precedncia.
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:
sbruto (20 + 5*(1+(100/100)))*10
Para facilitar o entendimento acompanhe a resoluo deste clculo fazendo-o no papel. A
prioridade de execuo o conjunto de parnteses interno, ou seja, a diviso resultando
em 1. Aps a realizao da diviso ser executada a operao de soma cujo resultado 2.
Continuando a ordem de precedncia temos que ser realizada a multiplicao entre 5 e 2,
resultando em 10, o qual ser somado com o valor 20, tendo como resultado 30. Por fim, ser
realizada a multiplicao de 30 e 10, resultando em 300.
Ao final da execuo do algoritmo obteremos os resultados, conforme apresentado no Quadro
18.
Quadro 18 - Resultado da execuo - Problema 3
Informe o nmero de horas trabalhadas: 20
Informe o nmero de horas extras: 5
Informe o valor da hora: 10
O salrio bruto : 300
O salrio lquido : 273
O INSS : 27
O FGTS : 24
47
Neste problema, alm dos conceitos de variveis, tipos de variveis, comando de atribuio,
entrada e sada de dados, utilizamos constantes e a precedncia dos operadores.
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.
Entendemos o processo de anlise de problemas, que consiste na diviso do problema em
trs partes: Entrada (dados que precisamos solicitar ao usurio), Processamento (operaes
que devemos efetuar) e Sada (informaes que devemos mostrar ao usurio). Percebemos
que esses passos nos auxiliam na construo do algoritmo e raciocnio lgico e facilitam a
nossa compreenso sobre o problema.
Dentre os tipos de algoritmos estudamos a descrio narrativa, o fluxograma e o pseudocdigo.
Vimos que na descrio narrativa o problema representado por meio da linguagem natural,
o fluxograma apresenta uma notao grfica especfica para representao e o pseudocdigo
utiliza regras pr-definidas. Ao longo de nossa disciplina adotaremos a representao em
pseudocdigo devido a facilidade de converso para uma linguagem de programao.
Aprendemos a armazenar os dados obtidos utilizando variveis, que so espaos na memria
principal e que contm diversos valores a cada instante de tempo. Fizemos a analogia de
variveis com caixas, de modo que essas caixas s podem armazenar pertences do mesmo
tipo. Com isto, vimos os tipos de variveis numricas (inteiro e real), lgicas (boolean) e literais
(caractere).
48
49
construo do algoritmo.
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.
(
(
(
(
) cidade
) endereo_nr
) media_peso%
) aluno-nota
(
(
(
(
) media idade
) a3
) endereo.cep
) B5
(
(
(
(
) nome2
) 4cidade
) cliente_nome
) 1234P
3. Elabore um algoritmo que leia, calcule e escreva a mdia aritmtica entre quatro nmeros.
4. Formule um algoritmo para ler um nmero positivo qualquer e apresentar o quadrado e a
50
EXERCCIOS DE FIXAO
1. Elabore um algoritmo que leia um nmero inteiro e apresente o antecessor, o nmero e o
sucessor.
Objetivo do algoritmo: apresentar o antecessor e o sucessor de um nmero.
Entrada: ler um nmero inteiro.
Processamento: calcular o valor do nmero menos um (antecessor) e o valor do nmero
mais um (sucessor).
51
52
53
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.
Objetivo do algoritmo: calcular o faturamento mensal e o anual de uma locadora de livros.
Entrada: ler a quantidade de livros e o valor do aluguel.
Processamento: calcular o faturamento mensal considerando que todos os livros foram
locados e o faturamento anual considerando que 20% dos livros no sero locados.
Sada: imprimir o valor do faturamento mensal e o valor do faturamento anual.
54
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.
Objetivo do algoritmo: calcular o salrio lquido e o salrio bruto de um professor.
Entrada: ler o valor da hora aula, o nmero de aulas dadas no ms e o percentual de desconto 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.
Sada: imprimir o valor do salrio bruto e o valor do salrio lquido.
55
56
7. Elabore um algoritmo que leia um nmero inteiro e apresente a raiz quadrada e o valor
deste nmero elevado ao quadrado.
Objetivo do algoritmo: calcular a raiz quadrada e o valor do nmero elevado ao quadrado.
Entrada: ler um nmero inteiro.
Processamento: utilizar as funes SQR e SQRT para elevar ao quadrado e obter a raiz
quadrada, respectivamente.
Sada: imprimir raiz quadrada e o valor do nmero elevado ao quadrado.
57
58
59
60
UNIDADE II
ESTRUTURA CONDICIONAL
Professora Me. Gislaine Camila Lapasini Leal
Objetivos de Aprendizagem
Conhecer a estrutura condicional simples.
Conhecer a estrutura condicional composta.
Conhecer a estrutura condicional aninhada.
Conhecer a estrutura de deciso mltipla.
Elaborar algoritmos utilizando estrutura condicional.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Estrutura condicional
Estrutura condicional simples
Estrutura condicional composta
Estrutura condicional aninha
Estrutura de deciso mltipla
INTRODUO
Nesta unidade voc estudar a estrutura condicional conhecendo a estrutura condicional
simples, composta, aninhada e de deciso mltipla. Com os conhecimentos adquiridos
na Unidade I conseguamos construir algoritmos que a partir da entrada, os dados eram
processados e apresentavam algumas informaes na sada, isto , algoritmos sequenciais.
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.
63
ESTRUTURA CONDICIONAL
At o momento, os nossos algoritmos apresentavam um padro em que a partir dos dados de
entrada, esses eram processados e na sada mostrvamos algumas informaes. O fluxo era
seguido sequencialmente, sem nenhum desvio, ou seja, todas as instrues eram executadas.
No entanto, em muitas situaes necessitamos realizar algum teste antes de efetuar um
processamento.
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.
64
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.
65
A
Incio
Leia (A)
Se (A > 10) ento
Escreva (A maior que 10)
Fim_se
Fim.
De acordo com Lopes e 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
Resposta <> Sim
66
Quando nossa condio uma expresso lgica temos pelo menos duas expresses
relacionais que esto ligadas por um operador lgico. Voc se recorda do funcionamento dos
operadores lgicos? O operador E resulta em verdadeiro somente quando as duas condies
so verdadeiras, como pode ser visto na tabela verdade apresentada no Quadro 27.
Quadro 27: Tabela Verdade - Operador E
Operador E
Condio 1
Condio 2
Resultado
Verdadeiro
Verdadeiro
Verdadeiro
Verdadeiro
Falso
Falso
Falso
Verdadeiro
Falso
Falso
Falso
Falso
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.
Quadro 28: Tabela Verdade - Operador OU
Operador OU
Condio 1
Condio 2
Resultado
Verdadeiro
Verdadeiro
Verdadeiro
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Verdadeiro
Falso
Falso
Falso
67
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)
Note que as expresses lgicas so compostas utilizando operadores relacionais e lgicos.
Agora que conhecemos a sintaxe da estrutura condicional simples e sabemos como montar
condies, vamos formular nosso primeiro algoritmo contendo desvio de fluxo.
O problema consiste em identificar se um nmero inteiro um nmero par e ento imprimir a
metade do nmero.
68
69
70
Precisamos essa varivel denominada metade? E a varivel resto? No, podemos realizar o
teste lgico a partir da expresso relacional, no sendo necessria a varivel metade. Quanto
a varivel resto, podemos enviar como sada a operao que calcula a metade. Com isto,
teramos um algoritmo que utiliza apenas uma varivel e duas operaes de atribuio menos,
como pode ser visto no Quadro 31.
Quadro 31: Pseudocdigo - Algoritmo Par
Algoritmo par
Var
n: inteiro
Incio
Escreva (Digite um nmero:)
Leia (n)
Se (n mod 2 = 0) ento
Escreva (A metade do nmero :, n/2)
Fim_se
Fim.
71
Se (<Condio>) ento
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.
Quadro 32: Pseudocdigo - Algoritmo parimpar
Algoritmo parimpar
Var
n: inteiro
Incio
Escreva (Digite um nmero:)
Leia (n)
Se (n mod 2 = 0) ento
Escreva (O nmero par)
Seno
Escreva (O nmero mpar)
Fim_se
Fim.
72
73
A sada de dados consiste em imprimir se o nmero est ou no dentro dos limites dessa faixa.
O Quadro 33 apresenta o algoritmo para o problema descrito.
Quadro 33: Pseudocdigo - Algoritmo faixa
Algoritmo faixa
Var
n: inteiro
Incio
Escreva (Digite um nmero inteiro:)
Leia (n)
Se (n > 20) e (n < 90) ento
Escreva (O nmero est na faixa entre 20 e 90)
Seno
Escreva (O nmero est fora da faixa)
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
74
Condio 2
Resultado
27 > 20
27 < 90
Verdadeiro
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.
Quadro 35: Representao da Expresso Lgica
Operador E
Condio 1
Condio 2
Resultado
20 > 20
20 < 90
Falso
75
76
77
Se (a > b) ento
Se ( a > c) ento
max:= a
seno
3
max:=c
fimse
seno
Se ( b > c ) ento
max:=b
seno
4
max:=c
fimse
fimse
78
79
Teste o funcionamento dos dois algoritmos supondo a=5, b=3 e c=12. Qual a vantagem de
utilizar a estrutura condicional aninhada? A grande vantagem que o uso destes encadeados
melhora o desempenho do algoritmo, isto , torna o algoritmo mais rpido por realizar menos
testes e comparaes. Ou ainda, executar um menor nmero de passos para chegar soluo
do problema.
80
trmino, o fluxo de execuo prossegue pela primeira instruo aps o final da construo
(fim_caso); se o caso1 for falsa, o caso2 testado: se esta for verdadeira, a instruo 2
executada e ao seu trmino, a execuo prossegue normalmente pela instruo seguinte ao
final da construo (fim_caso). De modo anlogo ocorre para os demais casos da estrutura.
Lopes e Garcia (2002) destacam que esse tipo de estrutura bastante utilizado na construo
de menus, tornando-os mais claros.
Vamos elaborar um algoritmo para dado um nmero inteiro escrever o ms correspondente. Se
for digitado um nmero fora desse intervalo, dever aparecer uma mensagem informando que
no existe ms com este nmero. Retomando o nosso modelo de estruturao de problemas,
temos que:
Objetivo do algoritmo: retornar o ms equivalente ao nmero digitado.
Entrada: obter um nmero inteiro.
Processamento: verificar se o nmero digitado est entre 1 e 12.
Sada: imprimir o ms equivalente por extenso.
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.
81
Fim_caso
Fim.
82
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.
83
Algoritmo mes2
Var
num: inteiro
Incio
Escreva (Digite um nmero de 1 a 12:)
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
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
Se (num = 10) ento
Escreva (Outubro)
Fim_se
Se (num = 11) ento
Escreva (Novembro)
Fim_se
Se (num = 12) ento
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
e (num
< > 10) e (num< >11)
e (num< >12)
LGICA
PROGRAMAO
I | Educao
a ento
Distncia
85
Escreva (Novembro)
Fim_se
Se (num = 12) ento
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
Escreva (O nmero digitado no corresponde a nenhum ms)
fim_se
Fim.
86
CONSIDERAES FINAIS
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.
Estudamos quatro formas de estrutura condicional: estrutura condicional simples, estrutura
condicional composta, estrutura condicional encadeada e estrutura de deciso mltipla. Na
estrutura condicional simples vimos que as instrues s sero executadas se a condio que
est sendo avaliada for verdadeira. A sintaxe dessa estrutura sintaxe dada por:
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
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
87
pode haver uma ou mais condies a serem testadas e um comando associado a cada uma
delas. A sintaxe dessa estrutura :
Caso <varivel>
seja <valor 1> faa <instruo 1>
seja <valor 2> faa < instruo 2>
seja <valor N> faa < instruo N>
seno < instruo >
Fim _caso
Alm da estrutura condicional, trabalhamos a construo de expresses relacionais e lgicas,
as quais so utilizadas na construo de condies. Entendemos, tambm, a tabela verdade
dos operadores lgicos E, OU e NO.
Ao longo desta unidade construmos algoritmos utilizando todos os conceitos aprendidos e,
tambm, discutimos que estrutura condicional mais adequada para cada situao. Como
o aprendizado de algoritmos requer prtica, importante que voc faa as atividades de
autoestudo para exercitar o raciocnio lgico.
88
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:
Para homens
Para mulheres
5. Elabore um algoritmo que leia o percurso em quilmetros, o tipo de moto e informe o consumo 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.
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
89
EXERCCIOS DE FIXAO
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.
Objetivo do algoritmo: informar se a pessoa menor de idade, maior ou idoso.
Entrada: ler nome e idade.
Processamento: verificar se a idade menor que 18 (menor de idade), entre 18 e 64 anos
(maior de idade) ou maior ou igual a 65 anos (idoso).
Sada: escrever se a pessoa menor de idade, maior ou idoso.
Quadro 40: Pseudocdigo Exerccio 1
Algoritmo verificaidade
Var
idade: inteiro
nome: caractere[30]
Incio
Escreva (Digite o nome:)
Leia (nome)
Escreva (Digite a idade:)
Leia (idade)
Se (idade > = 65) ento
Escreva (Idoso)
Seno
Se (idade < 18) ento
Escreva (Menor de idade)
Seno
Escreva (Maior de idade)
Fim_se
Fim_se
Fim.
90
2. Elabore um algoritmo que receba a idade de uma pessoa e identifique sua classe eleitoral:
no eleitor (menor que 16 anos de idade), eleitor obrigatrio (entre 18 e 65 anos) e eleitor
facultativo (entre 16 e 18 anos e maior que 65 anos).
Objetivo do algoritmo: verificar a classe eleitoral de uma pessoa.
Entrada: ler idade.
Processamento: verificar se a idade menor que 16 (no eleitor), entre 18 e 65 anos
(eleitor obrigatrio) ou entre 16 e 18 ou maior que 65 anos (eleitor facultativo).
Sada: escrever a classe eleitoral.
Quadro 41: Pseudocdigo Exerccio 2
Algoritmo classeeleitoral
Var
idade: inteiro
Incio
Escreva (Digite a idade:)
Leia (idade)
Se (idade < 16) ento
Escreva (No eleitor)
Seno
Se (idade > 65) ou (idade < 18) ento
Escreva (Eleitor facultativo)
Seno
Escreva (Eleitor obrigatrio)
Fim_se
Fim_se
Fim.
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
91
3. Escreva um algoritmo que calcule o IMC de uma pessoa e identifique se a pessoa est
abaixo do peso (IMC menor que 20), normal (IMC entre 20 e 25), com excesso de peso
(IMC entre 26 e 30), obesa (IMC entre 31 e 35) ou com obesidade mrbida (acima de 35).
.
O clculo do IMC dado por:
Objetivo do algoritmo: verificar a faixa de risco de uma pessoa a partir do IMC.
Entrada: ler peso e altura.
Processamento: verificar se o IMC menor que 20 (abaixo do peso), entre 20 e 25 (normal), entre 26 e 30 (excesso de peso), entre 31 e 35 (obesidade) ou acima de 35 (obesidade mrbida).
Sada: imprimir a faixa de risco da pessoa.
Quadro 42: Pseudocdigo Exerccio 3
92
Cdigo
Cargo
Percentual do aumento
Servios gerais
50%
Vigia
30%
Recepcionista
25%
Vendedor
15%
93
salario * (30/100)
94
seno
Se (cargo = 3) ento
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
^- b h
existe uma raiz real que dada por x =
; se > 0 existem duas razes reais
2 xa
^- b - T h
^- b + T h
e x1 =
x1 = 2 xa
2 xa
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
95
( - b) / (2 * a)
96
Escreva (Existem
razes reais)
ALGORITMOS E LGICA DE PROGRAMAO
I |duas
Educao
a Distncia
delta sqr(b) * 4 * a * c
Se (delta < 0) ento
Escreva (No existe raiz real)
x1
( - b) / (2 * a)
97
98
UNIDADE III
ESTRUTURA DE REPETIO
Professora Me. Gislaine Camila Lapasini Leal
Objetivos de Aprendizagem
Estudar as estruturas de repetio controladas e condicionais.
Conhecer as estruturas de repetio encadeadas.
Construir algoritmos utilizando estruturas de repetio.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Estrutura Para
Estrutura Enquanto
Estrutura Repita
Estruturas de Repetio Encadeadas
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.
Ser abordado o conceito de estrutura de repetio e sua aplicao. Estudaremos as
estruturas de repetio com laos contados e laos condicionais. O uso de laos contados
restrito a situaes em que sabemos previamente quantas vezes as instrues precisam ser
executadas. Neste caso, abordaremos especificamente a Estrutura Para.
Nos laos condicionais no sabemos previamente o nmero de execues e atrelamos a
repetio a uma condio. Trataremos os casos com condio no incio e no final do lao,
estudando as estruturas: Enquanto e Repita.
Ao construir algoritmos utilizando estruturas de repetio, muitas vezes, precisaremos utilizar
variveis contadoras e acumuladoras. Aprenderemos os conceitos relacionados a essas
variveis, como utiliz-las e qual a diferena entre elas.
Estudaremos as estruturas de repetio (Para, Enquanto e Repita), destacando seu
funcionamento, sintaxe e aplicao. Para facilitar o aprendizado construiremos algoritmos
utilizando cada uma dessas estruturas.
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?
101
ESTRUTURA DE REPETIO
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; BARBOSA, 1998; ASCENIO; 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 so utilizados quando no conhecemos o nmero de vezes que o
trecho de cdigo precisa ser repetido. A repetio est atrelada a uma condio que pode ser
alterada dentro do lao. Por exemplo, solicitar que o usurio informe um nmero at que ele
digite um nmero entre 1 e 12. Com isto, podemos efetuar a validao dos dados de entrada.
Voc se recorda do algoritmo que criamos na unidade II para escrever por extenso o nome do
ms correspondente ao nmero digitado pelo usurio? Naquele caso, se o usurio informasse
um nmero fora da faixa1 e 12, emitamos uma mensagem informando que no havia ms
correspondente ao nmero digitado e a execuo do algoritmo era encerrada. Utilizando laos
podemos forar a digitao de um dado de entrada vlido, ou seja, enquanto o usurio no
digitar um nmero dentro da faixa definida continuamos solicitando que ele informe um nmero.
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.
A vantagem da estrutura de repetio que no precisamos reescrever trechos de cdigo
idnticos, reduzindo assim o tamanho do algoritmo. Alm disso, podemos determinar repeties
com nmero de vezes varivel (LOPES; GARCIA, 2002).
No uso de estruturas de repetio observaremos que necessrio utilizar variveis contadoras
e acumuladoras. Uma varivel contadora uma varivel que recebe um valor inicial antes de
iniciar a estrutura de repetio e no interior dessa estrutura seu valor incrementado em um
valor constante. J uma varivel acumuladora uma varivel que recebe um valor inicial antes
do incio de uma estrutura de repetio e incrementada no interior dessa estrutura em um
valor varivel. O que difere uma varivel contadora de uma acumuladora o valor que elas so
incrementadas na estrutura de repetio. Em uma varivel contadora o valor fixo e em uma
varivel acumuladora o valor constante.
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
103
<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 e 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.
105
Observe que temos a repetio de uma expresso aritmtica de multiplicao (num x i), em
que sabemos previamente o nmero de repeties. Portanto, podemos utilizar a estrutura
Para. Lembre-se que ao utilizar esta estrutura precisamos declarar uma varivel contadora
que deve ser do tipo inteiro, nomearemos de i. A varivel i deve ter incio em 0 e fim em 10, pois
queremos mostrar a tabuada de 0 a 10. O passo a ser utilizado 1. Como sada do algoritmo
temos que imprimir o resultado da operao de multiplicao.
processamento (expresso aritmtica dada por mult = num * i) quanto a sada de dados (Escreva
num, x, i, =, mult) se encontram dentro do lao de repetio. Por que isso acontece? Pois,
temos que imprimir o resultado de 10 operaes de multiplicao e no apenas uma. O que
acontece se colocarmos a sada de dados fora do lao? No vdeo ser apresentado apenas o
resultado da ltima operao, em que num igual a 3, i igual a 10. Portanto, ser exibido 3 x
10 = 30.
Lembre-se que um lao de repetio pode ser utilizado tanto para entrada, processamento,
quanto para a sada de dados.
Quadro 45: Pseudocdigo - Algoritmo tabuada
Algoritmo tabuada
Var
Num, i, mult: inteiro
Incio
Escreva (Digite um nmero:)
Leia (num)
Para i de 1 at 10 passo 1 faa
mult num*i
Escreva (num, x, i, =, mult)
fim_para
Fim.
107
economizar uma varivel, no caso a varivel mult, e com isto, retirar a instruo de atribuio,
realizando a operao aritmtica diretamente no comando escreva. Isto possvel, pois no
comando escreva podemos colocar uma expresso. No Quadro 46 podemos visualizar outro
modo de escrever o algoritmo para a tabuada.
Quadro 46: Pseudocdigo - Algoritmo tabuada
Algoritmo tabuada
Var
Num, i: inteiro
Incio
Escreva (Digite um nmero:)
Leia (num)
Para i de 1 at 10 passo 1 faa
mult num*i
Escreva (num, x, i, =, num * i )
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.
109
ESTRUTURA ENQUANTO
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.
A sintaxe da estrutura Enquanto :
Enquanto <condio> faa
<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).
Agora que conhecemos os conceitos relacionados estrutura enquanto, vamos construir um
algoritmo para o seguinte problema: ler vrios nmeros e informar quantos se encontram no
intervalo de 100 a 300. Se for digitado o valor 0, o algoritmo encerra sua execuo.
Seguindo o mtodo de estruturao de problemas visto na Unidade I, temos:
Objetivo do algoritmo: ler vrios nmeros e informar quantos esto no intervalo entre 100
e 300.
Entrada: ler nmeros inteiros at que seja digitado o nmero zero.
Processamento: contar quantos nmeros esto no intervalo entre 100 e 300.
Sada: imprimir a quantidade de nmeros entre 100 e 300.
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.
Na construo de algoritmos utilizando a estrutura enquanto temos que o teste lgico
realizado no incio, deste modo precisamos ter um valor atribudo para a varivel usada na
condio antes de entrar na estrutura enquanto. Alm disso, no conjunto de instrues dentro
do lao de repetio deve haver uma instruo que modifique o valor dessa varivel, seno
entraremos em um loop. Isto nos indica que ao utilizar laos do tipo enquanto temos que ler a
varivel fora da estrutura de repetio e dentro. Observe o algoritmo do Quadro 47.
111
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.
A prxima linha a instruo enquanto em que temos o teste lgico que analisa se o nmero
diferente de 0. Se o resultado for verdadeiro, temos a execuo das instrues que esto
dentro do lao, seno vai para a instruo aps o fim_enquanto. No lao de repetio temos
a verificao se o nmero est ou no na faixa estabelecida. Para isso usada a estrutura
condicional Se, em que temos duas expresses relacionais unidas por uma expresso lgica
com o operador E. Se o resultado do teste lgico for verdadeiro temos que cont recebe o valor
que ele tem mais um, ou seja, incrementado em uma unidade. Se o teste lgico resultar em
falso a execuo segue para a linha posterior ao fim_se. Note que aps o fim_se temos a
leitura da varivel novamente. Por que isso acontece? Se a leitura da varivel fosse realizada
apenas fora do lao de repetio teramos que o lao entraria em loop, uma vez que teramos
o mesmo valor para num. As instrues dentro do lao sero repetidas at que na entrada
seja obtido o valor zero. Quando este valor for obtido tem-se a execuo do comando aps o
fim_enquanto, que exibe na tela o valor armazenado na varivel cont. Na Figura 9 podemos
visualizar a simulao do algoritmo descrito.
113
da estrutura de repetio. Note que a leitura est sendo realizada apenas antes da estrutura
de repetio.
Quadro 48: Pseudocdigo - Algoritmo conta
Algoritmo conta
Var
Num, cont: inteiro
Incio
Escreva (Digite um nmero:)
Leia (num)
cont 0
Enquanto (num <> 0) faa
Se (num >=100) e (num <=300) ento
cont cont +1
fim_se
fim_enquanto
Escreva (A quantidade de nmeros entre 100 e 300 :, cont)
Fim.
h um teste lgico que verifica se o nmero maior ou igual a 100 e menor ou igual a 300, a
avaliao deste teste verdadeira. Portanto, tem-se o incremento da varivel cont, que passa
a armazenar o valor 1. Aps o fim_se no temos nenhuma instruo, deste modo a execuo
retomada para a linha do enquanto, em que novamente o teste lgico executado. A varivel
num continua com o valor 130, resultando em verdadeiro o teste lgico, pois 130 diferente
de 0. Na verificao da estrutura condicional o teste, tambm, resulta em verdadeiro, com isto
executada a instruo que incrementa a varivel cont. Novamente a execuo retorna para
a linha do enquanto e o funcionamento do algoritmo ser o mesmo, de modo que apenas a
varivel cont est sendo incrementada a cada execuo. Perceba que se no efetuarmos a
leitura da varivel num dentro da estrutura enquanto, tambm, seu valor no ser alterado e o
cdigo entra em loop, pois sempre a condio num <> 0 satisfeita.
115
Lembre-se!!! SEMPRE que voc utilizar uma estrutura de repetio condicional tem que ter uma instruo no interior desta estrutura que modifi que o valor da varivel que utilizada no teste lgico.
Variveis contadoras e acumuladoras precisam ser inicializadas no incio do cdigo.
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).
A sintaxe da estrutura Repita :
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
117
Vamos estudar cada linha do algoritmo para entender melhor o funcionamento dessa
estruturao de repetio. Na primeira linha temos a inicializao da varivel cont, que conta
o nmero de valores que esto na faixa entre 100 e 300. Afinal, por que inicializamos essa
varivel? Por exemplo, se efetuamos a leitura de vrios nmeros e nenhum deles estava na
faixa entre 100 e 300, qual o valor de cont? No h como garantir que o valor ser zero. Como
uma varivel um espao em memria, devemos inicializ-lo para que no fique nenhum
lixo.
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.
No existem regras para o encadeamento das estruturas de repetio. De modo que voc
precisa conhecer cada uma delas para saber quando conveniente encade-las, quais
devem ser utilizadas e como. No se preocupe! Conforme vamos construindo algoritmos
aperfeioamos o nosso raciocnio lgico de modo que automaticamente saberemos o momento
de utilizar essas estruturas (MANZANO; OLIVEIRA, 1997).
A sintaxe para encadeamento da estrutura Para com Para dada por:
para <var1> de <incio> ate <fim> passo <incremento> faa
<instrues>
fim_para
fim_para
Podemos utilizar encadeamento utilizando a estrutura Para e Enquanto, em que a sintaxe :
para <varivel> de <incio> at <fim> passo <incremento> faa
<instrues>
fim_enquanto
fim_para
119
repita
<instrues>
At_que (condio)
fim_para
Alguns exemplos de encadeamento de estruturas de repetio utilizando a estrutura Enquanto
so:
enquanto (<condio1>) faa
<instrues>
fim_enquanto
fim_enquanto
<instrues>
at_que (<condio2>)
fim_enquanto
<instrues>
fim_para
fim_enquanto
Nos casos de encadeamento utilizando a estrutura Repita e as demais temos as seguintes
sintaxes:
repita
para <var> de <incio> at <fim> passo <incremento> faa
<instrues>
fim_para
at_que (<condio>)
repita
<instrues>
fim_enquanto
at_que (<condio1>)
121
repita
repita
<instrues>
at_que (<condio>)
at_que (<condio>)
Fique tranquilo! Veremos a aplicao de estruturas encadeada no PROBLEMA 2.
PROBLEMA 1
Voc se recorda de fatorial? O fatorial de um nmero o produto dos nmeros naturais
comeando em n e descrevendo at 1, isto , o produto de todos os inteiros positivos menores
ou igual a n. O fatorial de um nmero representado por n!
Tomemos como exemplo o fatorial de 7, representado por 7! O clculo de 7! : 7 x 6 x 5 x 4 x
3 x 2 x 1, que igual a 5040.
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:
7x6x5x4x3x2x
1
Figura 11: Representao do clculo de 7!
No Quadro 50 temos o algoritmo para o problema do fatorial. Faa voc um teste de mesa
efetuando o clculo do fatorial de 5.
123
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.
125
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.
No Quadro 51 apresentado o algoritmo para o problema descrito. Neste algoritmo temos a
aplicao de estruturas de repetio encadeada. Por qu? Precisamos saber o nmero de
notas que devem ser lidas e devem ser lidas as notas de vrios alunos at que o cdigo do
aluno seja 0. Como no sabemos quantos alunos teremos que ler as notas, precisamos utilizar
uma estrutura do tipo lao condicional. No primeiro momento optamos por utilizar a estrutura
Enquanto. Nesta estrutura o teste condicional realizado no incio, deste modo temos que
realizar a leitura da informao utilizada no teste condicional fora da estrutura. No caso, a
informao obtida foi o cdigo do aluno.
Se o teste condicional resulta em verdadeiro, ou seja, o cdigo do aluno diferente de 0,
precisamos ler as notas do aluno. Em seguida, temos a inicializao das variveis soma e
mdia, pois a soma deve acumular as notas de um aluno e no de todos. Para a leitura das
notas utilizamos a estrutura Para, pois sabemos previamente o nmero de notas que precisa
ser lido. Dentro da estrutura Para realizada a soma das notas do aluno. Aps ser finalizada
a leitura de todas as notas (acumuladas na varivel soma) efetuado o clculo da mdia
do aluno. Em seguida, temos o teste condicional que analisa se o aluno est aprovado ou
reprovado. Se a mdia maior ou igual a 7 temos o incremento da varivel aprovados, seno
a varivel reprovados incrementada. As instrues seguintes efetuam a leitura do cdigo do
aluno. Depois do fim_enquanto so apresentados os nmeros de aprovados e reprovados.
Quadro 51: Pseudocdigo - Algoritmo notas
Algoritmo fatorial
Var
nnotas, cod, aprovados, reprovados , cont: inteiro
media, nota, soma
: real
Inciqo
Escreva (Informe o nmero de notas da disciplina:)
Leia (nnotas)
aprovados
reprovados
127
soma + nota;
fim_para
media
soma/nnotas;
aprovados + 1
seno
reprovados
reprovados + 1
fim_se
Escreva (Informe o cdigo do aluno:)
Leia (cod)
Fim_enquanto
Escreva (O nmero de aprovados :, aprovados )
Escreva (O nmero de reprovados :, reprovados)
Fim.
: real
Incio
Escreva (Informe o nmero de notas da disciplina:)
Leia (nnotas)
aprovados
reprovados 0
Repita
Escreva (Informe o cdigo do aluno:)
Leia (cod)
soma
media 0
Para cont de 1 at nnotas passo 1 faa
Escreva (Informe a nota:)
Leia (nota)
soma
soma + nota
fim_para
media soma/nnotas
129
Leia (nota)
soma
soma + nota
fim_para
media soma/nnotas
se (media >=7) ento
aprovados
aprovados + 1
seno
reprovados reprovados + 1
fim_se
At_que (cod = 0)
Escreva (O nmero de aprovados :, aprovados)
Escreva (O nmero de reprovados :, reprovados)
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.
Estudamos os laos de repetio contados e os laos condicionais. Nos laos de repetio
contados conhecemos a estrutura Para, que utilizada nos casos em que sabemos quantas
vezes o trecho de cdigo precisa ser repetido. A estrutura Para tambm conhecida como
estrutura de repetio com varivel de controle, pois utilizamos uma varivel contadora para
controlar o nmero de repeties.
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
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.
Observamos que as estruturas baseadas em laos condicionais so mais flexveis e que
podem ser substitudas uma pela outra, isto , podemos resolver um problema com algoritmo
utilizando a estrutura Enquanto ou com a estrutura Repita. Destaca-se que a estrutura Para
pode ser substituda pelo uso de estruturas baseadas em laos condicionais. Mas, o contrrio
no verdadeiro.
Vimos que o conceito de encadeamento pode ser aplicado s estruturas de repetio, de
modo anlogo estrutura condicional, vista na Unidade II.
Ao longo desta unidade construmos algoritmos utilizando todos os conceitos aprendidos e,
tambm, discutimos as particularidades de cada estrutura de repetio enfatizando a forma de
uso de cada uma delas e o seu uso encadeado. Para aperfeioar o raciocnio lgico e fixar os
conceitos vistos faa as atividades de autoestudo.
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.
131
Para entender um pouco mais sobre a estrutura de repetio, acesse o vdeo disponvel em: <http://
www.youtube.com/watch?v=av5T0y6rwdk>.
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 escreva 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:
Leia a quantidade de produtos que a empresa possui.
Imprima nome e quantidade em estoque para os produtos com estoque menor que 30.
Imprima nome do produto com maior quantidade em estoque.
9. Elabore uma algoritmo que imprima todas as tabuadas do 1 ao 10.
EXERCCIOS DE FIXAO
1. Escreva um algoritmo que leia o nmero de vezes que se deseja imprimir a palavra ALGORITMOS e imprimir.
Objetivo do algoritmo: informar se a pessoa menor de idade, maior ou idoso.
Entrada: ler um nmero inteiro.
Processamento: no h.
Sada: imprimir a palavra Algoritmos o nmero de vezes informado.
Quadro 53: Pseudocdigo Exerccio 1
Algoritmo palavra
Var
num, i: inteiro
Incio
Escreva (Informe o nmero de vezes que deseja imprimir:)
Leia (num)
Para i de 1 at num passo 1 faa
Escreva (ALGORITMOS)
fim_para
Fim.
2. Elabore um algoritmo que leia cem nmeros inteiros e conte quantos so pares e quantos
so mpares.
Objetivo do algoritmo: ler cem nmeros e contar os pares e mpares.
Entrada: ler cem nmeros inteiros.
Processamento: verificar se o nmero par ou mpar e contar a quantidade de pares e
mpares.
Sada: imprimir o nmero de pares e mpares.
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
133
Incio
npares
nimpares
npar + 1
Seno
nimpar nimpar + 1
Fim_se
fim_para
Escreva (A quantidade de nmeros pares :, npar)
Escreva (A quantidade de nmeros mpares :, nimpar)
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.
Entrada: ler nmeros enquanto forem positivos.
135
: real
Incio
total 0
Escreva (Informe o nmero do pedido:)
Leia (pedido)
Enquanto (num <> 0) faa
Escreva (Informe a data:)
Leia (data)
Escreva (Informe o preo unitrio:)
Leia (preco)
Escreva (Informe a quantidade:)
Leia (qtdade)
total total + (preco * qtdade)
Escreva (O valor da compra :, preco*qtdade)
Escreva (Informe o nmero do pedido ou 0 para finalizar:)
Leia (pedido)
Fim_enquanto
Escreva (O total da compra :, total)
Fim.
5. Construa um algoritmo que leia nome, sexo, idade, peso e altura dos atletas que participam
de um campeonato at que seja informado o nome FIM e apresente: o nome do atleta do
sexo masculino mais alto, o nome da atleta do sexo feminino mais pesada e a mdia de
idade dos atletas.
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.
Quadro 57: Pseudocdigo Exerccio 5
Algoritmo atletas
Var
idade, cont
peso, altura, media, alto, pesado, soma
: inteiro
: real
: caractere[30]
sexo
: caractere[1]
Incio
media
cont
alto
pesado
nalto
npesado
137
cont + 1
altura
nalto
nome
Fim_se
Fim_se
Se (sexo = F) ou (sexo = f) ento
Se (peso > pesado) ento
pesado
npesado
peso
nome
Fim_se
Fim_se
Escreva (Informe o nome do atleta ou FIM para encerrar:)
Leia (nome)
Fim_se
Fim_se
Escreva (Informe o nome do atleta ou FIM para encerrar:)
Leia (nome)
Fim_enquanto
Escreva (O nome do atleta mais alto :, nalto)
Escreva (O nome da atleta mais pesada :, npesado)
Fim.
Algoritmo triangulo
Var
base, altura, area: real
Incio
Repita
Escreva (Informe a base:)
Leia (base)
At_que (base >=0)
Repita
139
Leia (base)
At_que (base >=0)
Repita
Escreva (Informe a altura:)
Leia (altura)
At_que (altura >=0)
area
(base * altura)/2
Algoritmo pessoas
Var
idade, ncasado, nseparado, nsolteiro, nviuva : inteiro
estado
: caractere
Incio
ncasado
nsolteiro
: caractere
Incio
ncasado
nsolteiro
nviuva
nseparado
Repita
Escreva (Informe a idade:)
Leia (idade)
At_que (idade >= 0)
Enquanto (idade <> 0) faa
Repita
Escreva (Informe o estado civil:)
Leia (estado)
At_que ((estado = C) ou (estado = D) ou (estado = S) ou (estado = V))
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
fim_se
nviuva + 1
Repita
141
nseparado
nseparado + 1
fim_se
Se (estado = V) ento
nviuva
nviuva + 1
fim_se
Repita
Escreva (Informe a idade:)
Leia (idade)
At_que (idade >= 0)
fim_enquanto
Escreva (O nmero de casados :, ncasados)
Escreva (O nmero de solteiros :, nsolteiro)
Escreva (O nmero de separados :, nseparado)
Escreva (O nmero de vivas :, nviuva)
Fim.
143
UNIDADE IV
INTRODUO
Estamos chegando ao final do contedo da disciplina de Algoritmos e Lgica de Programao
I. Nesta unidade voc conhecer as estruturas de dados homogneas e heterogneas. Essas
estruturas permitem agrupar diversas informaes em uma nica varivel.
As estruturas de dados homogneas permitem a representao de diversas informaes do
mesmo tipo, sendo divididas em unidimensionais (vetores) e multidimensionais (matrizes).
Estudaremos como atribuir valores, realizar a leitura e entrada de dados nesse tipo de
estrutura. Alm disso, conheceremos um mtodo para a classificao (ordenao segundo
algum critrio) e busca em vetores, especificamente, ordenao com Bubble Sort e pesquisa
sequencial.
Estudaremos as estruturas de dados heterogneas, registros, que agregam informaes de
diversos tipos. Abordando, especificamente, como realizar atribuio, entrada e sada de
dados utilizando registros.
Na construo de algoritmos utilizando estruturas homogneas e heterogneas, utilizaremos
todos os conceitos vistos nas demais unidades, principalmente as estruturas de repetio, pois
elas so utilizadas nas operaes de atribuio, leitura e escrita.
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?
147
VETORES
As estruturas unidimensionais, conhecidas como vetores, consistem em um arranjo de
elementos armazenados na memria principal, sequencialmente, todos com o mesmo nome
(LOPES; GARCIA, 2002).
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).
149
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
fim_para
Para cont de 1 at 10 passo 1 faa
Escreva (Aluno:, nome[cont])
Escreva (Nota 1:, n1[cont])
Escreva (Nota 2:, n2[cont])
ALGORITMOS
LGICA
DE PROGRAMAO I | Educao a Distncia
EscrevaE(Nota
3:, n3[cont])
151
media[cont]
fim_para
Para cont de 1 at 10 passo 1 faa
Escreva (Aluno:, nome[cont])
Escreva (Nota 1:, n1[cont])
Escreva (Nota 2:, n2[cont])
Escreva (Nota 3:, n3[cont])
Escreva (Nota 4:, n4[cont])
Escreva (Mdia:, media[cont])
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.
Fique tranquilo!!! Na prxima seo construiremos mais algoritmos utilizando vetores.
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).
A ordenao o processo de rearranjar os elementos de acordo com um critrio especfico
com o objetivo de facilitar a localizao (WIRTH, 1999). Na literatura existem diversos mtodos
de ordenao, sendo o mtodo da bolha (Bubble Sort) o mais conhecido.
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.
153
Como 4 no maior que 10, no h troca. Agora temos que comparar o elemento da posio
1 com o elemento da posio 4 (Figura 18).
4 maior que 10?
155
10 maior que 7?
157
Algoritmo ordena
Var
num: vetor[1..5] de inteiro
i, j, aux: inteiro
Incio
Para i de 1 at 5 passo 1 faa
Escreva (Informe um nmero:)
Leia (num[i])
Fim_para
Para i de 1 at 4 passo 1 faa
Para j de i+1 at 5 faa
Se (num[i] > num[j]) ento
uax
num[i]
num[i] num[j]
num[j]
aux
Fim_se
fim_para
fim_para
Para i de 1 at 5 passo 1 faa
Escreva (num[i])
Fim_para
Fim.
BUSCA EM VETOR
H situaes em que precisamos buscar por um determinado elemento em um vetor. Se
considerarmos um vetor com cinco elementos fcil realizar essa busca de forma manual.
No entanto, nos casos em que temos muitos elementos este processo manual invivel
(MANZANO; OLIVEIRA, 1997).
159
Existem mtodos que permitem verificar a existncia de um valor dentro de um vetor, isto
, procurar dentre os elementos um determinado valor. Estudaremos o mtodo de busca
sequencial.
MTODO SEQUENCIAL
A busca utilizando o mtodo sequencial consiste em percorrer o vetor a partir do primeiro
elemento, sequencialmente, at o ltimo realizando testes lgicos verificando se o elemento
do vetor, posio a posio, igual ao elemento procurado. Neste mtodo, tambm conhecido
como busca linear, a busca termina quando uma das duas condies for satisfeita: o elemento
foi encontrado ou todo o vetor foi analisado, mas o elemento no foi encontrado (WIRTH,
1999).
O algoritmo que realiza a busca sequencial de um nmero qualquer em um vetor apresentado
no Quadro 62.
Quadro 62: Pseudocdigo Algoritmo Busca Sequencial
Algoritmo busca
Var
vnum: vetor[1..20] de inteiro
num: inteiro
acha: lgico
Incio
Para i de 1 at 20 passo 1 faa
Escreva (Informe um nmero:)
Leia (vnum[i])
Fim_para
Escreva (Informe o nmero que deseja buscar:)
Leia (num)
Leia (vnum[i])
Fim_para
Escreva (Informe o nmero que deseja buscar:)
Leia (num)
i 1
acha falso
Enquanto (i < = 20) e (acha = falso) faa
se (num = vnum[i]) ento
acha verdadeiro
seno
i i+1
fim_se
fim_enquanto
Se (acha = verdadeiro) ento
Escreva (O elemento foi encontrado na posio, i)
Seno
Escreva (O elemento no foi encontrado)
Fim_se
Fim.
161
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:
Variavel: vetor [<dimenso1>, <dimenso2>] de <tipo de dado>
Em que:
163
Com base nos conceitos sobre matrizes vamos escrever um algoritmo para o seguinte
problema: efetuar a leitura de quatro notas de vinte alunos, calcular a mdia de cada aluno e
a mdia da turma.
Sistematizando o problema temos que:
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.
i, j
Incio
somat 0
soma 0
165
Observe que nos comandos de entrada, sada e atribuio sempre utilizamos o nome da
varivel seguida dos ndices que indicam a linha e a coluna da matriz, respectivamente. Como
a matriz bidimensional a leitura foi realizada dentro de um encadeamento da estrutura Para.
A primeira estrutura Para percorre as linhas (alunos) e a segunda a coluna (notas). No interior
do encadeamento de estrutura Para temos a leitura das notas de cada aluno e acumulamos
a soma das quatro notas do aluno. Ao sair da primeira estrutura Para calculada a mdia
para cada aluno, que armazenada no vetor media e armazenamos o valor individual da
mdia de cada aluno na varivel somat, que utilizamos no clculo da mdia da turma. Ao sair
da estrutura Para externa, aps ter percorrido todos os alunos, calculamos a mdia geral
da turma. E na sada de dados, temos a impresso do vetor media dentro de uma estrutura
Para. Fora do lao de repetio escrevemos o valor da mdia geral da turma, armazenado na
varivel mediat.
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).
Em um registro cada informao denominada de campo, os quais podem ser de diferentes
tipos, ou ainda, representar outros registros.
A declarao de uma varivel registro deve ocorrer antes das variveis, pois pode ocorrer a
necessidade de declarar uma varivel com tipo registro. A sintaxe para declarao dada por
(MANZANO; OLIVEIRA, 1997):
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.
As operaes de atribuio, leitura e escrita so realizadas utilizando o nome da varivel
registro e seu campo correspondente separado por um caractere . (ponto) (MANZANO;
OLIVEIRA, 1997).
J conhecemos os conceitos e sintaxe de registros, mas qual a estrutura de um registro e
como utiliz-los?
Vamos retomar o problema visto na seo Vetores, que consistia em ler o nome e quatro
167
notas de 10 alunos e imprimir uma relao contendo o nome do aluno, notas e a mdia final.
Na resoluo deste problema aplicamos o conceito de vetores e utilizamos cinco vetores, um
para armazenar o nome, um para cada uma das notas e outro para armazenar a mdia das
notas. H uma forma mais fcil de resolver esse problema? Sim. Sabemos que um registro
pode conter vrios tipos de dados em uma mesma estrutura, ento fica mais fcil agrupar os
dois tipos de dados (caractere e real) em uma mesma estrutura.
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.
169
Note que utilizando registros precisamos declarar apenas uma varivel que do tipo cad_
aluno (identificador do registro). O registro possui cinco campos, sendo eles: nome, nota1,
nota2, nota3 e nota4. Para acessar cada um desses campos utilizamos o nome da varivel que
declaramos como registro seguida de ponto e o nome do campo. Por exemplo, aluno.nome.
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.
Quadro 65: Pseudocdigo Algoritmo registro aluno
Algoritmo registroaluno
Tipo
notas = vetor [1..4] de real
Cad_aluno = registro
Nome: caractere
Nota: notas
fim_registro
Var
Aluno: cad_aluno
i: inteiro
Incio
Escreva (Informe nome do aluno:)
Leia (aluno.nome)
Para i de 1 at 4 passo 1 faa
Escreva (Informe
a nota,
170 ALGORITMOS
E LGICA
DEi, :)
PROGRAMAO I | Educao a Distncia
Aluno: cad_aluno
i: inteiro
Incio
Escreva (Informe nome do aluno:)
Leia (aluno.nome)
Para i de 1 at 4 passo 1 faa
Escreva (Informe a nota, i, :)
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.
Quadro 66: Pseudocdigo Algoritmo registro aluno
Algoritmo registroaluno
Tipo
notas = vetor [1..4] de real
Cad_aluno = registro
Nome: caractere
Nota: notas
fim_registro
Var
Aluno: vetor [1..10] de cad_aluno
i, j: inteiro
Incio
ParaEi LGICA
de 1 at 10DEfaa
ALGORITMOS
PROGRAMAO I | Educao a Distncia
171
Se voc ficou com dvidas, no se preocupe!! Vamos escrever mais um algoritmo aplicando
os conceitos aprendidos nesta Unidade na prxima seo.
PROBLEMA
O problema consiste em ler informaes (cdigo, descrio, preo e quantidade em estoque)
de 20 produtos. Alm disso, deve ser permitido executar quantas consultas o operador desejar,
em que ele digita o cdigo do produto e apresentado o preo e o saldo em estoque do
produto. Se o cdigo digitado no existir, informar o usurio.
Sistematizando o problema temos que:
Objetivo do algoritmo: ler informaes sobre 20 produtos e realizar consulta pelo cdigo
do produto.
173
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.
Quadro 67: Pseudocdigo Algoritmo registro aluno
Algoritmo registroproduto
Tipo
Cad_produto = registro
codigo: inteiro
nome: caractere[30]
preo: real
saldo: inteiro
fim_registro
Var
produto: vetor [1..10] de cad_produto
i, codigo: inteiro
acha: lgico
resp: caractere[3]
Incio
Para i de 1 at 20 faa
Escreva (Informe cdigo do produto:)
Leia (produto[i].codigo)
Escreva (Informe a descrio do produto:)
Leia (produto[i].nome)
174 ALGORITMOS E LGICA
DE PROGRAMAO I | Educao a Distncia
acha: lgico
resp: caractere[3]
Incio
Para i de 1 at 20 faa
Escreva (Informe cdigo do produto:)
Leia (produto[i].codigo)
Escreva (Informe a descrio do produto:)
Leia (produto[i].nome)
Escreva (Informe o preo do produto:)
Leia (produto[i].preco)
Escreva (Informe o saldo em estoque do produto:)
Leia (produto[i].saldo)
Fim_para
Resp
sim
175
fim_se
fim_enquanto
Se (acha=verdadeiro) ento
Escreva (O preo :, produto[i].preco)
Escreva (O saldo em estoque :, produto[i].saldo)
Seno
Escreva (No h produto com o cdigo informado)
Fim_se
Escreva (Deseja continuar a pesquisa?)
Leia (resp)
Fim_enquanto
Fim.
CONSIDERAES FINAIS
Nesta unidade voc conheceu as estruturas de dados homogneas e heterogneas. Nas
estruturas de dados homogneas estudamos os vetores e as matrizes.
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.
Estudamos as estruturas heterogneas, aquelas que agregam diversas informaes, que
podem ser de diferentes tipos, sendo denominadas de registros. Este tipo de estrutura
bastante utilizado para representar cadastros, tais como: produtos, clientes, alunos, servios
e outros.
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 declarada 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.
3. Construa um algoritmo que leia o preo de compra e o preo de venda de 30 produtos e
imprima o nmero de mercadorias que apresenta lucro < 15% e quantas apresentam lucro
> 30%.
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
177
4. Formule um algoritmo que leia uma matriz 5 x 5 de nmeros inteiros e imprima os elementos da diagonal principal.
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 classificados 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.
8. Escreva a estrutura de um registro para um cadastro de livros contendo as seguintes informaes: ttulo, autor, editora, edio e ano.
9. Elabore um cadastro para 15 professores, contendo as seguintes informaes: matrcula,
nome, formao e salrio. Desenvolva um menu que:
1. cadastre os professores;
2. imprima o nome dos professores por ordem crescente de salrio;
3. pesquise um professor pela matrcula e informe nome e formao, caso exista;
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.
Objetivo do algoritmo: ler e imprimir um vetor com 30 elementos inteiros.
Entrada: ler um vetor com 30 nmeros inteiros.
Processamento: no h.
Sada: imprimir os 30 elementos em ordem contrria a da leitura.
i, j
Incio
2. Elabore um algoritmo que leia duas matrizes de 5x5. Calcule e imprimia a diferena entre
elas.
Objetivo do algoritmo: ler duas matrizes e imprimir a diferena entre elas.
Entrada: ler duas matrizes 5 x 5.
Processamento: calcular a diferena entre as duas matrizes.
Sada: imprimir a matriz diferena.
179
i, j
: inteiro
Incio
Para i de 1 at 5 passo 1 faa
Para j de 1 at 5 passo 1 faa
Escreva (Informe o elemento, i, j, da matriz A)
Leia (A[i,j])
Fim_para
fim_para
Para i de 1 at 5 passo 1 faa
Para j de 1 at 5 passo 1 faa
Escreva (Informe o elemento, i, j, da matriz B )
Leia (B[i,j])
C
A[i,j] B[ i,j]
Fim_para
fim_para
Para i de 1 at 5 passo 1 faa
Para j de 1 at 5 passo 1 faa
Escreva (C[i,j])
Fim_para
fim_para
Fim.
3. Construa um algoritmo para uma agenda telefnica (nome, fone, e-mail) com 20 contatos.
Alm disso, deve ser permitido executar quantas consultas o operador desejar, em que
ele digita o nome do contato e apresentado o telefone. Se o nome digitado no existir,
informar o usurio.
Objetivo do algoritmo: ler informaes sobre 20 contatos e realizar consulta pelo nome.
Entrada: ler nome, fone e e-mail de 20 contatos e o nome para pesquisa.
Processamento: encontrar o nome informado pelo usurio.
Sada: imprimir o telefone se existir o nome informado. Seno, informar ao usurio que no
h contato cadastrado com o nome digitado.
Quadro 70: Pseudocdigo Exerccio 3
Algoritmo registrocontato
Tipo
Cad_agenda = registro
nome: caractere[30]
fone: caractere[15]
e-mail: caractere[20]
fim_registro
Var
contato: vetor [1..20] de cad_agenda
i: inteiro
acha: lgico
nomebusca: caractere[30]
resp: caractere[3]
Incio
Para i de 1 at 20 faa
Escreva (Informe nome do contato:)
Leia (contato[i].nome)
181
nomebusca: caractere[30]
resp: caractere[3]
Incio
Para i de 1 at 20 faa
Escreva (Informe nome do contato:)
Leia (contato[i].nome)
Escreva (Informe o telefone:)
Leia (contato[i].fone)
Escreva (Informe o e-mail:)
Leia (contato[i].email)
Fim_para
Resp
sim
Se (acha=verdadeiro) ento
Escreva (O fone :, contato[i].fone)
Seno
Escreva (No h contato com o nome informado)
Fim_se
Escreva (Deseja continuar a pesquisa?)
Leia (resp)
Fim_enquanto
Fim.
4. Elabore um algoritmo que leia informaes (matrcula, nome, lotao e salrio) de 30 professores. 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 matrcula.
Entrada: ler matrcula, nome, lotao e salrio e a matrcula para pesquisa.
Processamento: encontrar o professor com a matrcula informada pelo usurio.
Sada: imprimir a lotao, se existir a matrcula informada. Seno, informar ao usurio que
no h professor com a matrcula digitada.
Quadro 71: Pseudocdigo Exerccio 4
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
professor: vetor [1..30] de professor
i, registro: inteiro
acha: lgico
resp: caractere[3]
Incio
Para i de 1 at 30 faa
Escreva (Informe a matrcula:)
Leia (professor[i].matricula)
Escreva (Informe o nome:)
Leia (professor[i].nome)
Escreva (Informe a lotao:)
Leia (professor[i].lotacao)
Escreva (Informe o salrio:)
Leia (professor[i].salario)
Fim_para
Resp
sim
falso
verdadeiro
i 1
acha
falso
verdadeiro
Seno
i
i+1
fim_se
fim_enquanto
Se (acha=verdadeiro) ento
Escreva (A lotao :, professor[i].lotacao)
Escreva (O salrio :, professor[i].salario)
Seno
Escreva (No h professor com a matrcula informada)
Fim_se
Escreva (Deseja continuar a pesquisa?)
Leia (resp)
Fim_enquanto
Fim.
185
UNIDADE V
INTRODUO
Caro aluno, chegamos ltima unidade da disciplina de Algoritmos e Lgica de Programao
I. Nesta unidade voc estudar as sub-rotinas e aprender a trabalhar com a manipulao de
arquivos.
No dia a dia um programador, geralmente, encontra problemas complexos e abrangentes. Para
resolver esse tipo de problema o primeiro passo consiste em decomp-lo em subproblemas
para assim facilitar o processo de entendimento, anlise e resoluo. Na soluo dos
subproblemas so utilizadas sub-rotinas, bloco de instrues que realizam tarefas especficas.
Na literatura encontramos, tambm, os termos subalgoritmo, subprograma e mdulo, que so
equivalentes a sub-rotinas. Existem dois tipos de sub-rotinas: os procedimentos e as funes.
Estudaremos cada uma delas destacando sua sintaxe e modo de aplicao.
Ao trabalhar com sub-rotinas surge a necessidade de entender o conceito de escopo de
variveis, compreender o que so variveis locais e variveis globais e como elas impactam
no algoritmo. O escopo est relacionado visibilidade de uma varivel ao longo do algoritmo,
sendo que uma varivel local aquela que podemos utilizar apenas dentro da sub-rotina e
uma varivel global aquela que est acessvel de qualquer parte do algoritmo.
Ainda no contexto de sub-rotinas estudaremos a passagem de parmetros por valor e por
referncia e o conceito de recursividade. Em relao passagem de parmetros veremos
quando utilizar cada uma delas e qual o seu impacto no algoritmo. Estudaremos funes
recursivas, que so funes que fazem chamadas a si mesmo, como constru-las, quais suas
vantagens e desvantagens.
Conheceremos o conceito de arquivos, modos de concepo e como manipul-los utilizando
operaes que possibilitem consultar, inserir, modificar e eliminar dados.
Ao final desta unidade voc saber construir algoritmos modularizados, utilizar arquivos para
189
armazenamento dos dados e responder a questes do tipo: quando utilizar uma funo ou um
procedimento? O que so parmetros? Como deve ser realizada a passagem de parmetros?
Qual a diferena entre passar por valor ou por referncia? Como acessar um arquivo? Como
percorrer um arquivo?
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).
A decomposio do problema em subproblemas determinante para a reduo da complexidade
e, por conseguinte, na resoluo do problema. Esse processo de decomposio, tambm,
conhecido como refinamento sucessivo ou abordagem top down, em que a anlise parte
do todo para o especfico (FORBELLONE; EBERSPACHER, 2005; MANZANO; OLIVEIRA,
1997).
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
Um procedimento consiste em um trecho de cdigo (conjunto de instrues) com incio e fim e
identificado por um nome, o qual usado para chamar a rotina de qualquer parte do programa
principal ou em uma sub-rotina qualquer. Quando uma sub-rotina chamada, ela executada
e ao seu trmino o processamento retorna para a linha seguinte a da instruo que a chamou
(MANZANO; OLIVEIRA, 1997).
Uma sub-rotina de procedimento se caracteriza por no retornar valor para quem as chamou
(ASCENCIO; CAMPOS, 2010). E sua sintaxe :
191
<variveis>
incio
<instrues>
fim_procedimento
Outro ponto importante que as sub-rotinas devem ser declaradas antes do programa ou
sub-rotina que as chama.
Para exemplificar o funcionamento de sub-rotinas do tipo procedimento, vamos construir um
programa calculadora que apresenta um menu de opes no programa principal e possibilita
ao usurio escolher as seguintes operaes: adio, subtrao, multiplicao, diviso e sair
(MANZANO; OLIVEIRA, 2997).
Sistematizando as informaes do problema temos que:
Objetivo do algoritmo: criar uma calculadora com as operaes de adio, subtrao,
multiplicao e diviso.
Entrada: ler a opo do usurio. E se for uma operao aritmtica efetuar a operao.
Processamento: efetuar a operao aritmtica selecionada.
Sada: imprimir o resultado da operao aritmtica.
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
usurio deseja efetuar a operao e outra varivel para armazenar o resultado da operao
aritmtica. O processamento consiste em efetuar a operao solicitada e como sada temos
que informar ao usurio o resultado da operao. Lembre-se: as rotinas devem ser declaradas
antes do programa principal.
O Quadro 72 apresenta o algoritmo que efetua as quatro operaes aritmticas. Note que para
cada operao h um procedimento associado.
Quadro 72: Pseudocdigo Algoritmo calculadora
Algoritmo calculadora
Procedimento soma
Var:
A, B, Resultado: real
Incio
Escreva (Procedimento SOMA)
Escreva (Informe o valor de A:)
Leia (A)
Escreva (Informe o valor de B:)
Leia (B)
Resultado A + B
Escreva (O resultado da soma :, resultado)
Fim_procedimento
Procedimento subtracao
Var:
A, B, Resultado: real
Incio
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
193
Fim_procedimento
Procedimento subtracao
Var:
A, B, Resultado: real
Incio
Escreva (Procedimento SUBTRAO)
Escreva (Informe o valor de A:)
Leia (A)
Escreva (Informe o valor de B:)
Leia (B)
Resultado A - B
Escreva (O resultado da subtrao :, resultado)
Fim_procedimento
Procedimento multiplicacao
Var:
A, B, Resultado: real
Incio
Escreva (Procedimento MULTIPLICAO)
Escreva (Informe o valor de A:)
Leia (A)
Escreva (Informe o valor de B:)
Leia (B)
Resultado A * B
Escreva (O resultado da multiplicao :, resultado)
Fim_procedimento
Fim_procedimento
Procedimento divisao
Var:
A, B, Resultado: real
Incio
Escreva (Procedimento DIVISO)
Escreva (Informe o valor de A:)
Leia (A)
Escreva (Informe o valor de B:)
Leia (B)
Resultado A / B
Escreva (O resultado da diviso :, resultado)
Fim_procedimento
Var
opcao: inteiro
Incio
opcao 0
Enquanto (opcao <> 5) faa
Escreva (1 Soma)
Escreva (2 Subtrao)
Escreva (3 Multiplicao)
Escreva (4 Diviso)
Escreva (5 Sair)
Escreva (Digite a opo:)
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
Leia (opcao)
195
Escreva (4 Diviso)
Escreva (5 Sair)
Escreva (Digite a opo:)
Leia (opcao)
Se (opcao <> 5) faa
Caso (opcao)
Seja 1 faa soma
Seja 2 faa subtracao
Seja 3 faa divisao
Seja 4 faa multiplicacao
Seno escreva (Opo invlida)
fim_caso
fim_se
fim_enquanto
Fim.
ESCOPO DE VARIVEIS
As variveis declaradas no interior de uma sub-rotina so chamadas de variveis locais, pois
podem ser utilizadas apenas dentro da sub-rotina. Ao final da execuo da sub-rotina essas
variveis so destrudas e seus contedos so perdidos (ASCENCIO; CAMPOS, 2010). No
exemplo apresentado na seo Procedimentos as variveis A, B e resultado so variveis
locais.
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.
O escopo de uma varivel est vinculado a sua visibilidade em relao s sub-rotinas de um
programa. Devemos atentar para o fato de que uma varivel pode ser considerada global para
todas as sub-rotinas inferiores a uma rotina principal, e dentro de uma dessas sub-rotinas a
mesma varivel pode ser utilizada como local.
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.
197
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 e Oliveira (1997) destacam que uma varivel declarada antes de uma sub-rotina
uma varivel global para a sub-rotina.
PASSAGEM DE PARMETROS
Os parmetros servem como um ponto de comunicao bidirecional entre uma sub-rotina e o
programa principal ou outra sub-rotina. Possibilitam a passagem de valores de uma sub-rotina
ou rotina chamadora outra sub-rotina e vice-versa. Devemos fazer distino entre dois tipos
de parmetros, os formais e os reais (MANZANO; OLIVEIRA, 1997).
Os parmetros formais so aqueles declarados por meio de variveis juntamente com a
identificao do nome da sub-rotina. J os parmetros reais so aqueles que substituem
os parmetros formais quando do uso da sub-rotina por um programa principal ou rotina
chamadora.
O Quadro 73 apresenta o algoritmo para o problema da calculadora utilizando o conceito de
parmetros.
Quadro 73: Pseudocdigo Algoritmo calculadora
Algoritmo calculadora
Resultado A - B
199
A/ B
opcao: inteiro
Fim_procedimento
Var
opcao: inteiro
X, Y: real
Incio
opcao 0
Enquanto (opcao <> 5) faa
Escreva (Informe o valor de X:)
Leia (X)
Escreva (Informe o valor de Y:)
Leia (Y)
Escreva (1 Soma)
Escreva (2 Subtrao)
Escreva (3 Multiplicao)
Escreva (4 Diviso)
Escreva (5 Sair)
Escreva (Digite a opo:)
Leia (opcao)
Se (opcao <> 5) faa
Caso (opcao)
Seja 1 faa soma(X,Y)
Seja 2 faa subtracao(X,Y)
Seja 3 faa divisao(X,Y)
Seja 4 faa multiplicacao(X,Y)
Seno escreva (Opo invlida)
ALGORITMOSfim_caso
E LGICA DE PROGRAMAO I | Educao a Distncia
201
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.
A passagem de parmetro ocorre quando realizada a substituio dos parmetros formais
pelos reais no momento da execuo da sub-rotina. A passagem de parmetros ocorre de
duas formas: por valor e por referncia (MANZANO; OLIVEIRA, 1997).
A passagem de parmetro por valor caracterizada pela no alterao do valor do parmetro
real quando o parmetro formal manipulado na sub-rotina. Isto , qualquer alterao na
varivel local da sub-rotina no afetar o valor do parmetro real correspondente. Na passagem
de parmetros por valor a sub-rotina trabalha com cpias dos valores passados no momento
de sua chamada (MANZANO; OLIVEIRA, 1997; ASCENCIO; CAMPOS, 2010).
Na passagem de parmetro por referncia os parmetros passados para a sub-rotina
consistem em endereos de memria ocupados por variveis. O acesso a determinado valor
realizado por apontamento do endereo. Na passagem por referncia o valor do parmetro
real alterado quando o parmetro formal manipulado dentro da sub-rotina (ASCENCIO;
CAMPOS, 2010).
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.
Var
n: inteiro
Incio
Escreva (Informe o nmero que deseja calcular o fatorial:)
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
fat * i
fim_para
Fim_procedimento
Var
n, resultado: inteiro
Incio
Escreva (Informe o nmero que deseja calcular o fatorial:)
Leia (n)
Fatorial(n, resultado)
Escreva (O fatorial :, resultado)
Fim.
Ao final do lao de repetio o resultado do fatorial est armazenado na varivel Fat, que foi
passada para a sub-rotina como referncia, e ao retornar ao programa principal este valor
transferido para a varivel resultado do programa principal, a qual apresenta o valor recebido
dentro da sub-rotina por meio da varivel fat. Este tipo de passagem de parmetro utilizado
para se obter um determinado valor de dentro de uma sub-rotina (MANZANO; OLIVEIRA,
1997).
A Figura 38 ilustra a passagem de parmetros por referncia no clculo do fatorial. No algoritmo
principal temos a leitura do nmero que devemos calcular o fatorial. Este valor armazenado
na varivel n. Em seguida, h o chamado do procedimento fatorial com os parmetros n sendo
passado por valor e resultado por referncia. O valor de n copiado para a varivel x. Para
calcular fatorial utilizado o valor de x para controlar o lao de repetio. Ao trmino da
execuo do procedimento o valor da varivel fat passado por referncia e modifica o valor
da varivel resultado.
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
205
206 ALGORITMOSFim_funcao
E LGICA DE PROGRAMAO I | Educao a Distncia
Incio
fat 1
Para i de 1 at x passo 1 faa
fat fat * i
fim_para
retorne fat
Fim_funcao
Var
n, resultado: inteiro
Incio
Escreva (Informe o nmero que deseja calcular o fatorial:)
Leia (n)
Resultado Fatorial(n)
Escreva (O fatorial :, resultado)
Fim.
Fonte: MANZANO; OLIVEIRA (1997)
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
207
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.
209
Ziviane (2004) destaca que a recursividade permite uma descrio mais concisa dos
algoritmos, especialmente, quando o problema tem natureza recursiva ou utiliza estruturas
recursivas. Algumas desvantagens da recurso so: algoritmos recursivos consomem mais
recursos, especialmente memria e so mais difceis de serem depurados.
211
Sempre que formos trabalhar com arquivo, primeiro temos que abri-lo, para deix-lo disponvel
213
gravao. Para percorrer o arquivo utilizamos o comando Avance( ), que coloca o arquivo na
posio do prximo registro. Para verificar se o arquivo chegou ao fim utilizamos o comando
Fda( ). Utilizando uma estrutura de repetio o comando Avance e Fda, conseguimos
percorrer o arquivo registro a registro (FORBELLONE; EBERSPACHER, 2005).
Na concepo direta, a localizao de um registro no arquivo est relacionada com algum
campo do arquivo, de modo que por meio deste campo conseguimos localizar o lugar que o
registro est armazenado. O campo que determina a posio do registro no arquivo chamado
de chave. Devemos atentar para o fato de que esse campo deve ser nico (FORBELLONE;
EBERSPACHER, 2005).
CONSIDERAES FINAIS
Nesta unidade voc aprendeu a modularizar os algoritmos utilizando sub-rotinas. A
modularizao uma tcnica bastante utilizada em programao devido complexidade
e tamanho dos problemas que temos que resolver no dia a dia. O princpio desta tcnica
consiste em decompor um problema em subproblemas de menor complexidade com o objetivo
de facilitar o entendimento, anlise e resoluo.
Vimos que na resoluo dos subproblemas so utilizadas sub-rotinas, que consistem em
blocos de instrues que realizam tarefas especficas. Aprendemos que as sub-rotinas podem
ser de dois tipos (procedimentos e funes) e que quando uma sub-rotina chamada, ela
executada e ao seu trmino o processamento retorna para a linha seguinte a da instruo que
a chamou. Estudamos que uma sub-rotina do tipo procedimento no retorna valor para quem
a chamou e j uma funo sempre retorna um valor.
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 subrotina, 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.
Estudamos o conceito de recursividade, que um mecanismo que permite uma funo chamar
a si mesma, e aprendemos que toda funo recursiva formada por um passo bsico e um
recursivo. Alm disso, construmos funes recursivas para calcular o fatorial e a srie de
Fibonacci, que so problemas clssicos de recurso.
Por fim, conhecemos os comandos para manipular arquivos e os modos de concepo de
arquivos sequencial e direto. Em relao concepo de arquivos vimos como realizar a
insero, consulta, alterao e excluso de dados.
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.
2. Pesquisar um produto pelo cdigo.
3. Classifi car por ordem de descrio os registros cadastrados.
4. Classifi car por ordem de cdigo.
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
215
EXERCCIOS DE FIXAO
1. Escreva uma sub-rotina que apresente o somatrio dos N primeiros nmeros inteiros.
Objetivo do algoritmo: ler um nmero inteiro e apresentar o somatrio dos nmeros no
intervalo de 1 at N.
Entrada: ler um nmero inteiro.
Var
n, resultado: inteiro
Incio
Escreva (Informe o nmero:)
Leia (n)
Resultado soma(n)
Escreva (O somatrio :, resultado)
Fim.
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
217
2. Elabore uma sub-rotina que receba um nmero e apresenta sua raiz quadrada.
Objetivo do algoritmo: ler um nmero e apresentar sua raiz quadrada.
Entrada: ler um nmero inteiro.
Processamento: calcular a raiz quadrada.
Sada: imprimir o valor da raiz quadrada.
Quadro 81: Pseudocdigo Exerccio 2
Algoritmo raizquadrada
Var
num: inteiro
resultado: real
Incio
Escreva (Informe o nmero:)
Leia (num)
resultado raiz(n)
Escreva (A raiz quadrada :, resultado)
Fim.
3. Elabore uma sub-rotina que receba 3 valores de entrada e retorne o maior valor.
Objetivo do algoritmo: ler trs nmeros inteiros e retornar o maior valor.
Entrada: ler trs nmeros inteiros.
Processamento: comparar os nmeros e selecionar o maior.
Sada: imprimir o valor do maior nmero.
Quadro 82: Pseudocdigo Exerccio 3
Algoritmo raizquadrada
Var
resultado, a, b, c: inteiro
219
Fim_funcao
Var
resultado, a, b, c: inteiro
Incio
Escreva (Informe o valor de A:)
Leia (a)
Escreva (Informe o valor de B:)
Leia (b)
Escreva (Informe o valor de C:)
Leia (c)
resultado
maior(a, b, c)
4. Elabore um procedimento que receba um valor em segundos e converta para horas, minutos e segundos.
Objetivo do algoritmo: ler um valor em segundos e converter para horas, minutos e segundos.
Entrada: ler um nmero inteiro.
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.
Sada: imprimir as horas, minutos e segundos resultantes da converso.
x/3600
resto
x mod 3600
resto/60
resto mod 60
Fim_procedimento
Var
n, hora, minuto, segundo: inteiro
Incio
Escreva (Informe os segundos que deseja converter:)
Leia (n)
tempo(n, hora, minuto, segundo)
Escreva (Horas:, hora)
Escreva (Minutos:, minuto)
Escreva (Segundos:, segundo)
Fim.
221
5. Elabore uma sub-rotina que receba o valor antigo de um produto e o percentual de reajuste
e retorne o valor reajustado.
Objetivo do algoritmo: reajustar o valor de um produto.
Entrada: ler o preo do produto e o percentual de reajuste.
Processamento: calcular o reajuste do produto.
Sada: imprimir o valor do produto reajustado.
Quadro 84: Pseudocdigo Exerccio 5
Algoritmo produto
Var
valor, percentual, resultado: real
Incio
Escreva (Informe o preo do produto:)
Leia (valor)
Escreva (Informe o percentual de reajuste:)
Leia (percentual)
resultado
reajuste(valor, percentual)
CONCLUSO
Caro(a) aluno(a), chegamos ao fim de parte do nosso trabalho!
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.
Na Unidade I, discutimos o conceito de algoritmos, um conjunto de passos para solucionar
um problema, e estudamos que dado um problema no h um nico algoritmo que soluo,
podemos ter vrios algoritmos. Isto que dizer que um algoritmo um possvel caminho para
a soluo de um problema. Entendemos o processo de anlise de problemas a partir do qual
estruturamos um problema em Entrada, Processamento e Sada. Estudamos os principais
tipos de algoritmos, sendo eles: a descrio narrativa, o fluxograma e o pseudocdigo. O
tipo adotado foi o pseudocdigo em funo da facilidade de converso para uma linguagem
de programao. Vimos o conceito de variveis, os tipos de variveis (inteiro, real, caractere
e lgica), as regras para nomeao de identificadores, palavras reservadas, expresses e
operadores (aritmticos, relacionais e lgicos), comandos de atribuio, entrada e sada de
dados.
A Unidade II tratou das estruturas condicionais, tambm denominadas estruturas de seleo ou
estrutura de controle, que possibilitam a construo de algoritmos com desvios de fluxos. Isto
, algoritmos cuja execuo de uma instruo ou conjunto de instrues est condicionada a
um teste condicional. Estudamos quatro formas de estrutura condicional: estrutura condicional
simples, estrutura condicional composta, estrutura condicional encadeada e estrutura de
deciso mltipla. Revimos a construo de expresses lgicas e a tabela verdade de cada um
dos operadores.
Na Unidade III aprendemos a construir algoritmos utilizando as estruturas de repetio,
utilizando laos contados e laos condicionais. Nos laos de repetio vimos a estrutura Para,
que utilizada nos casos em que sabemos quantas vezes o trecho de cdigo precisa ser
repetido. Nos laos de repetio condicionais estudamos as estruturas Enquanto e Repita.
A estrutura Enquanto utilizada quando no sabemos previamente o nmero de repeties
ALGORITMOS E LGICA DE PROGRAMAO I | Educao a Distncia
223
que deve ser executado e impomos uma condio que realizada no final. A estrutura Repita
utilizada quando temos um nmero indefinido de repeties, no entanto, o teste lgico
realizado no final. Foi abordado, tambm, como o conceito de encadeamento pode ser aplicado
s estruturas de repetio.
A Unidade IV discutiu as estruturas de dados homogneas e heterogneas. Nas estruturas de
dados homogneas conhecemos os vetores (unidimensionais) e as matrizes (multidimensionais),
que agrupam diversas informaes, do mesmo tipo, em uma nica varivel. Tratamos, tambm,
como realizar ordenao e busca. Em relao s estruturas heterogneas estudamos os
registros, que agregam diversas informaes, que podem ser de diferentes tipos.
Por fim, na Unidade V aprendemos a construir algoritmos modularizados utilizando sub-rotinas.
Foram abordadas as sub-rotinas de procedimento e funo, sendo que a diferena entre elas
que na sub-rotina do tipo procedimento no h retorno de valor para quem a chamou e j na
funo sempre retorna um valor. Estudamos o conceito de escopo de variveis em que vimos
as variveis globais e locais. Foi tratada, tambm, a passagem de parmetros por valor e por
referncia. Vimos que 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. Discutimos o conceito de recursividade,
que um mecanismo que permite uma funo chamar a si mesma, e em que situaes pode
ser aplicado. Aprendemos os comandos e operaes para manipular arquivos e como estes
podem ser concebidos.
Em cada uma das unidades apresentamos e construmos algoritmos que possibilitaram
a aplicao prtica dos conceitos e estimularam o desenvolvimento do raciocnio lgico.
Nestas cinco unidades consolidamos a viso de Algoritmos e Lgica de Programao que
imprescindvel para o desenvolvimento de software.
Muito sucesso a voc!
Professora Camila
REFERNCIAS
ASCENCIO, A. F. G.; CAMPOS, E. A. V. Fundamentos da programao de computadores.
5. ed. So Paulo: Prentice Hall, 2010.
CORMEN, T. H.; RIVEST, R.; LEISERSON, C. E. Algoritmos: teoria e prtica. Rio de Janeiro:
Campus, 2002.
FARRER, H. Programao Estruturada de Computadores. Rio de Janeiro: Ed. LTC, 1989.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lgica de Programao. 3. ed. So Paulo:
Makron Books, 2005.
GUIMARES, A. M.; LAGES, N.A.C. Algoritmos e Estruturas de Dados. Rio de Janeiro:
LTC, 1994.
LOPES, A.; GARCIA, G. Introduo Programao. Rio de Janeiro: Elsevier, 2002.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Estudo dirigido de algoritmos. 3. ed. So Paulo:
rica, 1997.
SALVETTI, D. D.; BARBOSA, L. M. Algoritmos. So Paulo: Pearson Makron Books, 1998.
WIRTH, N. Algoritmos e Estruturas de Dados. Rio de Janeiro: Editora LTC, 1999.
ZIVIANE, N. Projeto de Algoritmos com implementaes em Pascal e C. 2. ed. So Paulo:
Pioneira Thomson Learning, 2004.
225