Você está na página 1de 216

Universidade do Sul de Santa Catarina

Palhoa
UnisulVirtual
2007
Lgica de Programao II
Disciplina na modalidade a distncia
LIVRO DIDTICO E CADERNO DE ATIVIDADES
logica_2_livro_caderno.indb 1 7/12/2006 14:19:18
Sumrio
LIVRO DIDTICO
Palavras do professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE 1 Manipulao de vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
UNIDADE 2 Manipulao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
UNIDADE 3 Manipulao de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
UNIDADE 4 Tpicos avanados em algoritmos computacionais . . . . . 71
UNIDADE 5 Programao estruturada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Para concluir o estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Sobre o professor conteudista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Respostas e comentrios das atividades de auto-avaliao . . . . . . . . . . . . 127
logica_2_livro_caderno.indb 2 7/12/2006 14:20:49
CADERNO DE ATIVIDADES
Palavras dos professores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
UNIDADE 1 Manipulao de vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
UNIDADE 2 Manipulao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
UNIDADE 3 Manipulao de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
UNIDADE 4 Tpicos avanados em algoritmos computacionais . . . . 181
UNIDADE 5 Programao estruturada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Respostas e comentrios das atividades de auto-avaliao . . . . . . . . . . . . 199
Sobre os professores conteudistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
logica_2_livro_caderno.indb 3 7/12/2006 14:20:49
logica_2_livro_caderno.indb 4 7/12/2006 14:20:49
Apresentao
Este livro didtico corresponde disciplina de Lgica de Programao II.
O material foi elaborado visando a uma aprendizagem autnoma, abordando
contedos especialmente selecionados e adotando uma linguagem que
facilite seu estudo a distncia.
Por falar em distncia, isso no signica que voc estar sozinho. No
esquea que sua caminhada nesta disciplina tambm ser acompanhada
constantemente pelo Sistema Tutorial da UnisulVirtual. Entre em contato
sempre que sentir necessidade, seja por correio postal, fax, telefone, e-mail
ou Espao UnisulVirtual de Aprendizagem. Nossa equipe ter o maior
prazer em atend-lo, pois sua aprendizagem nosso principal objetivo
Bom estudo e sucesso!
Equipe UnisulVirtual.
logica_2_livro_caderno.indb 5 7/12/2006 14:20:49
logica_2_livro_caderno.indb 6 7/12/2006 14:20:49
Carlos Fernando Martins
Design instrucional
Daniela Erani Monteiro Will
Carolina Hoeller da Silva
Palhoa
UnisulVirtual
2007
Lgica de Programao II
Livro didtico
4 edio
revista e atualizada
logica_2_livro_caderno.indb 7 7/12/2006 14:20:49
Copyright UnisulVirtual 2007
Nenhuma parte desta publicao pode ser reproduzida por qualquer meio sem a prvia autorizao desta instituio.


005.1
M34 Martins, Carlos Fernando
Lgica de programao II / Carlos Fernando Martins ; design instrucional
Daniela Erani Monteiro Will, Carolina Hoeller da Silva, [Leandro Kingeski
Pacheco] - 4. ed. rev. e atual. - Palhoa : UnisulVirtual, 2007.
216 p. : il. ; 28 cm

Inclui bibliografia
ISBN 978-85-7817-003-5

1. Programao (Computadores). 2. Lgica Processamento de dados.
I. Will, Daniela Erani Monteiro. II. Silva, Carolina Hoeller da. III. Pacheco,
Leandro Kingeski. IIII. Ttulo.

Ficha catalogrfica elaborada pela Biblioteca Universitria da Unisul

Crditos
Unisul - Universidade do Sul de Santa Catarina
UnisulVirtual - Educao Superior a Distncia

Campus UnisulVirtual
Rua Joo Pereira dos
Santos, 303
Palhoa - SC - 88130-475
Fone/fax: (48) 3279-1541 e
3279-1542
E-mail:
cursovirtual@unisul.br
Site: www.virtual.unisul.br

Reitor Unisul
Gerson Luiz Joner da
Silveira

Vice-Reitor e Pr-Reitor
Acadmico
Sebastio Salsio Heerdt

Chefe de gabinete da
Reitoria
Fabian Martins de Castro

Pr-Reitor
Administrativo
Marcus Vincius Antoles da
Silva
Ferreira

Campus Sul
Diretor: Valter Alves
Schmitz Neto
Diretora adjunta: Alexandra
Orseni

Campus Norte
Diretor: Ailton Nazareno
Soares
Diretora adjunta: Cibele
Schuelter

Campus UnisulVirtual
Diretor: Joo Vianney
Diretora adjunta: Jucimara
Roesler

Equipe UnisulVirtual

Administrao
Renato Andr Luz
Valmir Vencio Incio

Bibliotecria
Soraya Arruda Waltrick

Coordenao dos Cursos
Adriano Srgio da Cunha
Ana Luisa Mlbert
Ana Paula Reusing Pacheco
Ctia Melissa S. Rodrigues
(Auxiliar)
Charles Cesconetto
Diva Marlia Flemming
Elisa Flemming Luz
Itamar Pedro Bevilaqua
Janete Elza Felisbino
Jucimara Roesler
Lilian Cristina Pettres
(Auxiliar)
Lauro Jos Ballock
Luiz Guilherme Buchmann
Figueiredo
Luiz Otvio Botelho Lento
Marcelo Cavalcanti
Mauri Luiz Heerdt
Mauro Faccioni Filho
Michelle Denise Durieux
Lopes Destri
Nlio Herzmann
Onei Tadeu Dutra
Patrcia Alberton
Patrcia Pozza
Raulino Jac Brning

Design Grfico
Cristiano Neri Gonalves
Ribeiro
(coordenador)
Adriana Ferreira dos Santos
Alex Sandro Xavier
Evandro Guedes Machado
Fernando Roberto Dias
Zimmermann
Higor Ghisi Luciano
Pedro Paulo Alves Teixeira
Rafael Pessi
Vilson Martins Filho
Equipe Didtico-
Pedaggica
Angelita Maral Flores
Carmen Maria Cipriani
Pandini
Carolina Hoeller da Silva
Boeing
Cristina Klipp de Oliveira
Daniela Erani Monteiro Will
Dnia Falco de Bittencourt
Elisa Flemming Luz
Enzo de Oliveira Moreira
Flvia Lumi Matuzawa
Karla Leonora Dahse Nunes
Leandro Kingeski Pacheco
Ligia Maria Soufen Tumolo
Mrcia Loch
Patrcia Meneghel
Silvana Denise Guimares
Tade-Ane de Amorim
Vanessa de Andrade
Manuel
Vanessa Francine Corra
Viviane Bastos
Viviani Poyer

Logstica de Encontros
Presenciais
Caroline Batista
(Coordenadora)
Aracelli Araldi
Graciele Marins
Lindenmayr
Jos Carlos Teixeira
Letcia Cristina Barbosa
Knia Alexandra Costa
Hermann
Marcia Luz de Oliveira
Priscila Santos Alves

Logstica de Materiais
Jeferson Cassiano Almeida
da Costa
(coordenador)
Eduardo Kraus



Monitoria e Suporte
Rafael da Cunha Lara
(coordenador)
Adriana Silveira
Caroline Mendona
Edison Rodrigo Valim
Francielle Arruda
Gabriela Malinverni
Barbieri
Gislane Frasson de Souza
Josiane Conceio Leal
Maria Eugnia Ferreira
Celeghin
Simone Andra de Castilho
Vincius Maycot Sera. m

Produo Industrial e
Suporte
Arthur Emmanuel F.
Silveira
(coordenador)
Francisco Asp

Projetos Corporativos
Diane Dal Mago
Vanderlei Brasil

Secretaria de Ensino a
Distncia
Karine Augusta Zanoni
(secretria de ensino)
Djeime Sammer Bortolotti
Carla Cristina Sbardella
Grasiela Martins
James Marcel Silva Ribeiro
Lamuni Souza
Liana Pamplona
Maira Marina Martins
Godinho
Marcelo Pereira
Marcos Alcides Medeiros
Junior
Maria Isabel Aragon
Olavo Lajs
Priscilla Geovana Pagani
Silvana Henrique Silva


Secretria Executiva
Viviane Schalata Martins

Tecnologia
Osmar de Oliveira Braz
Jnior
(coordenador)
Ricardo Alexandre
Bianchini
Rodrigo de Barcelos
Martins

Edio Livro Didtico

Professor Conteudista
Carlos Fernando Martins

Design Instrucional
Daniela Erani Monteiro Will
Carolina Hoeller da Silva
Flavia Lumi Matuzawa
(3a edio revista e
atualizada)
Leandro Kingeski Pacheco
(4a edio revista e
atualizada)

Projeto Grfico e Capa
Equipe UnisulVirtual

Diagramao
Rafael Pessi

Reviso Ortogrfica
Revisare
Palavras do professor
Ol caro estudante, pronto para mais uma etapa?
Na verdade, agora voc vai aprimorar o que estudou em
Lgica de Programao I. No imagine que est na metade
do caminho, tendo em vista que o estudo da lgica de
programao contnuo e eterno, pelo menos para quem quer
ser um programador verdadeiro.
Ainda hoje, mesmo depois de muitos anos trabalhando com
programao, cada algoritmo que implemento uma forma de
exercitar os conceitos. Trato cada algoritmo como um desao
a ser vencido. Voc deve pensar assim tambm, que lgica de
programao um aprendizado contnuo e dinmico; que cada
problema solucionado por um algoritmo de programao um
degrau alcanado. Isso pode ajudar e muito nos desaos desta
disciplina.
Lembre-se, um programador diferencia-se do outro pela
quantidade de exerccios que ele faz. Portanto, aproveite
esse material de base para se aprofundar. Consulte algumas
bibliograas que podero ajud-lo a resolver outros problemas
de programao. Quanto mais voc estudar, melhor vai car.
E quanto melhor car, mais voc vai estudar. um ciclo
contnuo e desaador. Planeje o seu tempo de forma que o
estudo de lgica de programao se torne uma diverso. Se
assim for, voc j tem o esprito de programador.
Bom estudo!
Professor Carlos Fernando Martins.
logica_2_livro_caderno.indb 9 7/12/2006 14:20:50
logica_2_livro_caderno.indb 10 7/12/2006 14:20:50
Plano de estudo
O plano de estudos visa a orient-lo/a no desenvolvimento da
Disciplina. Nele, voc encontrar elementos que esclarecero
o contexto da Disciplina e sugeriro formas de organizar o seu
tempo de estudos.
O processo de ensino e aprendizagem na UnisulVirtual leva
em conta instrumentos que se articulam e se complementam.
Assim, a construo de competncias se d sobre a articulao
de metodologias e por meio das diversas formas de ao/
mediao.
So elementos desse processo:
o livro didtico;
o Espao UnisulVirtual de Aprendizagem - EVA;
as atividades de avaliao (complementares, a distncia
e presenciais).
Ementa
Continuao da Lgica de Programao I com
aprofundamento dos estudos com Fluxogramas e Diagrama de
Blocos. Linguagens de programao, Cdigos computacionais
e ambientes de desenvolvimento. Exerccios de Programao
Linear, de Programao Estruturada e de Programao Visual.
Objetivos
Desenvolver a capacidade do aluno em pensar
logicamente, sendo assim, capaz de desenvolver
algoritmos computacionais de mdia e alta
complexidade.
Elaborar algoritmos de programao de mdia e
alta complexidade.

logica_2_livro_caderno.indb 11 7/12/2006 14:20:50


12
Universidade do Sul de Santa Catarina
Carga horria
A carga horria total da disciplina 60 horas/aula.
Agenda de atividades/ Cronograma
Verique com ateno o EVA, organize-se para acessar
periodicamente o espao da Disciplina. O sucesso nos
seus estudos depende da priorizao do tempo para a
leitura; da realizao de anlises e snteses do contedo; e
da interao com os seus colegas e tutor.
No perca os prazos das atividades. Registre no espao
a seguir as datas, com base no cronograma da disciplina
disponibilizado no EVA.
Use o quadro para agendar e programar as atividades
relativas ao desenvolvimento da Disciplina.

logica_2_livro_caderno.indb 12 7/12/2006 14:20:50


13
Lgica de Programao II
Atividades

Avaliao a Distncia 1
Avaliao Presencial 1
Avaliao Presencial 2 (2 chamada)
Avaliao Final (caso necessrio)
Demais atividades (registro pessoal)
logica_2_livro_caderno.indb 13 7/12/2006 14:20:50
logica_2_livro_caderno.indb 14 7/12/2006 14:20:51
Objetivos de aprendizagem
Conhecer os algoritmos de maiores complexidades.
Construir algoritmos com utilizao de vetores.
Sees de estudo
Seo 1 Conceito e declarao de vetores.
Seo 2 Operao de vetores.
Seo 3 Algoritmos com manipulao de vetores.
UNIDADE 1
Manipulao de vetores 1
logica_2_livro_caderno.indb 15 7/12/2006 14:20:51
16
Universidade do Sul de Santa Catarina
Para incio de conversa
Antes de iniciar o estudo sobre vetores, voc deve recordar o
que uma varivel e para que ela serve, certo? Bem, voltando
unidade 4 de Lgica de Programao I, temos que varivel
a representao simblica dos elementos de memria de um
computador. Cada varivel corresponde a uma posio de
memria, cujo contedo pode se alterado ao longo do tempo
durante a execuo de um programa.
Embora uma varivel possa assumir diferentes valores, ela s
pode armazenar um valor a cada instante.
Voc tambm estudou que as variveis podem ser de trs tipos:
numricas, alfanumricas e lgicas, e que para declarar uma
varivel precisamos denir o seu nome e que tipo de dados ser
armazenado nela.
Veja a seguir:
incio
nome: literal {varivel do tipo literal}
idade: numrica {varivel do tipo numrica}
m
Outro exemplo bem fcil, j utilizando o sinal de atribuio.
Veja.
incio
nome: literal {varivel do tipo literal}
idade: numrica {varivel do tipo numrica}
idade 22 {varivel idade assume valor 22}
nome Paulo Pereira {varivel nome assume Paulo Pereira}
m
logica_2_livro_caderno.indb 16 7/12/2006 14:20:51
17
Lgica de Programao II
Unidade 1
O algoritmo acima, amplamente discutido em Lgica de
Programao I, serve de base para a seguinte questo: Suponha
que precisamos cadastrar dois nomes de clientes com suas
respectivas idades. Como fazer? Ora, parece bem simples, voc
no acha? Basta criar duas novas variveis, conforme mostro a
seguir:
incio
nome1, nome2: literal {variveis do tipo literal}
idade1, idade2: numrica {variveis do tipo numrica}
idade1 22 {varivel idade1assume valor 22}
nome1 Paulo Pereira {varivel nome1 assume Paulo Pereira}
idade2 38 {varivel idade2 assume valor 38}
nome2 Ana Luiza {varivel nome2 assume Ana Luiza}
m
Mas, e se quisermos criar um cadastro de alunos de um colgio?
E agora? Quantas variveis precisamos criar? 500, 2500, 10000?
Basta utilizar o conceito de vetores para lidar com situaes como
essas.
- Toda a lgica de programao estudada at agora vai se repetir. No
h nenhum outro comando. Tudo que voc aprendeu em Lgica de
Programao I ser utilizado agora. Os nicos assuntos novos so o
conceito, a criao e a utilizao de vetores.

logica_2_livro_caderno.indb 17 7/12/2006 14:20:51
18
Universidade do Sul de Santa Catarina
SEO 1 - Conceito e declarao de vetores
Antes de denir vetor, imaginemos a seguinte situao.
Precisamos criar um programa que armazene as seguintes notas
de um aluno em Lgica de Programao II: 8.0, 10.0, 9.0, 10.0,
8.5, 10.0 e que calcule a mdia nal. A soluo bem simples,
conforme j visto em Lgica de Programao I.
incio
nota, conta, media, soma: numrico
soma 0 {inicializa varivel soma com o valor 0}
para conta de 1 at 6 passo 1 faa {lao de repetio}
escreva Entre com a nota:
leia nota {leitura da nota}
soma soma + nota {soma de todas as notas entradas}
m-para
media soma/6 {calcula a mdia nal}
escreva A mdia nal , media {mostra o resultado na tela}
m
Mas agora consta a seguinte complexidade: necessitamos
imprimir tambm todas as notas do aluno, alm da mdia nal.
Uma soluo extremamente pobre seria criar seis variveis para
armazenar as seis notas digitadas e imprimi-las. Mas, se tiver
mais notas (80, por exemplo), seu algoritmo j no resolveria
mais o problema. Para resolver essa situao, utilize o conceito de
vetor.
Um vetor nada mais do que uma varivel que pode
armazenar vrios valores do mesmo tipo.
Bem, mas o que signica isso? Inicialmente, acompanhe o
conceito de variveis e sua denio.
logica_2_livro_caderno.indb 18 7/12/2006 14:20:51
19
Lgica de Programao II
Unidade 1
Quando denimos uma varivel, alocamos um espao na
memria do computador para armazenar uma e somente uma
constante por vez, seja ela literal, numrica ou lgica. Quando
atribumos um valor varivel sobrescrevemos seu contedo.
Por exemplo, ao criarmos uma varivel numrica chamada nota,
criamos um espao na memria para armazenar apenas um valor
numrico por vez, conforme a seguir:
nota: numrica
.......
nota 10 {varivel armazena valor numrico 10}
escreva O valor da varivel nota : , nota {aqui, o valor impresso
ser 10}
nota 8 {varivel armazena valor numrico 8}
escreva O valor da varivel nota : , nota {aqui, o valor impresso
ser 8, ou seja, sobrescrevemos o valor 10}
......
Isso parece bem lgico, pois estamos escrevendo na mesma
posio de memria do computador.
Lembre-se que, sempre que criarmos uma varivel, estaremos
criando um espao na memria do computador para armazenar
dados. um endereo na qual o computador se referencia para
manipular os dados em questo.
Como queremos armazenar vrios valores numricos, precisamos
criar vrias posies de memria sob o nome de uma mesma
varivel. O que devemos especicar quantos valores queremos
armazenar, ou seja, quantas posies de memria queremos
alocar para armazenar esses nmeros. Vejamos o exemplo para
armazenar as notas de um aluno conforme o algoritmo anterior.
Queremos armazenar seis valores diferentes em seis posies de
memria diferentes:
8.0 10.0 9.0 10.0 8.5 10.0
logica_2_livro_caderno.indb 19 7/12/2006 14:20:51
20
Universidade do Sul de Santa Catarina
Devemos criar 6 posies de memrias para armazenar esses
valores. Como soluo, podemos criar 6 variveis ou criar um
vetor com 6 posies de memria.
Esse esquema representa um vetor do tipo numrico de 6
posies, ou seja, 6 endereos de memria consecutivos alocados
no computador que podem armazenar 6 valores numricos
diferentes.
Cada quadradinho representa uma posio de memria, onde
podem ser armazenados os valores numricos.
O nmero de posies que queremos criar especicado na
declarao.
Em resumo: um vetor prtico quando precisamos manipular
um conjunto de dados do mesmo tipo sem que seja necessrio
declarar muitas variveis. Por exemplo: O registro de 26 livros e
seus respectivos preos; o registro de notas de 13 avaliaes de
um aluno etc.
Mas como criar um vetor? muito simples. Especicamos o
nome do vetor e o nmero de posies da memria que queremos
alocar. Cada posio de memria pode armazenar um valor
diferente dos demais.
Sintaxe do vetor
<nome do vetor>: vetor [tamanho do vetor]
<tipo de constante que o vetor poder conter>
Quando um vetor declarado, ele se apresenta assim na memria:
Valor 1 Valor 2 Valor n
logica_2_livro_caderno.indb 20 7/12/2006 14:20:51
21
Lgica de Programao II
Unidade 1
notas: vetor[6] numrico {vetor numrico de 6 posies. Pode
armazenar at 6 valores numricos diferentes}
estados: vetor[27] literal {vetor de caracteres de 27 posies. Pode
armazenar at 27 caracteres diferentes}
Importante
Assim como na criao das variveis, para a
criao de vetores no precisamos especifcar os
endereos de memria do computador. Isso feito
automaticamente, sem que sequer saibamos onde
os valores esto armazenados na memria. A nica
coisa que sabemos que alocado um espao para
armazenar esses valores e que so armazenados em
endereos de memria seqenciais. Para acessar
esses endereos, ou os valores armazenados nesses
endereos, que um pouco diferente das variveis.
Veremos isso na seo 2.
Bem, at agora no resolvemos o nosso problema de mostrar
todas as notas do aluno mais a mdia nal, conforme solicitado.
Sabemos que precisaremos criar um vetor conforme explicado,
porm, ainda no sabemos manipular ou realizar operaes com
eles. A prxima seo tratar sobre isso.
Importante
Alguns autores preferem utilizar uma sintaxe diferente
para a criao de vetores, conforme a seguir:
<nome do vetor>: vetor[<posio inicial do vetor>.. <posio nal
do vetor>] <tipo de constante que o vetor poder conter>
logica_2_livro_caderno.indb 21 7/12/2006 14:20:51
22
Universidade do Sul de Santa Catarina
notas: vetor [1..50]: numrico {criamos um vetor que inicia com
ndice 1 e vai at 50}.
O mesmo vetor poderia ser criado da seguinte maneira:
notas: vetor [0..49]: numrico {criamos um vetor que inicia com
ndice 0 e vai at 49}.
Qual a melhor maneira? Voc pode escolher. Porm, em
linguagens de programao de alto nvel como C/C++, JAVA
etc., os vetores comeam sempre com ndice 0. Desde que voc
faa a converso correta entre pseudocdigo e uma linguagem de
programao de alto nvel, no h problemas de qual a maneira
que voc vai criar seus vetores. O importante que seja claro e
sem quaisquer ambigidades.
SEO 2 - Operao de vetores
At agora nossa preocupao foi em saber como criar um vetor
e saber quando ele necessrio. Sempre que trabalharmos com
grandes quantidades de dados, estaremos criando um ou mais
vetores. A sintaxe da criao bastante simples conforme seo
anterior. Mas como iremos trabalhar com um vetor? Por exemplo,
como atribuir valores a um vetor? Como recuperar um valor de
um vetor? Como realizar operaes bsicas de adio, subtrao
etc. de vetores?
Bem, vamos por etapa. Inicialmente vamos inserir valores em
cada parte do vetor. Como j foi dito anteriormente, quando
um vetor declarado, so reservados espaos na memria para
armazenar as constantes (literal, numrica ou lgica). Porm,
como acessar esses espaos? muito simples, basta indicar a
posio que voc quer acessar.
logica_2_livro_caderno.indb 22 7/12/2006 14:20:52
23
Lgica de Programao II
Unidade 1
Veja um exemplo de um vetor de notas:
notas: vetor[6] numrico
Quando o vetor notas declarado, ele se apresenta assim na
memria:
Cada quadrado, representando uma posio de memria, uma
posio do vetor declarado. Chamamos essa posio de ndice do
vetor. O primeiro quadrado (posio inicial), dizemos que tem ndice
0 e o acesso a essa posio se d atravs do nome do vetor seguido
do abre colchete [, do valor 0, seguido do fecha colchete ]. Para as
posies seguintes, temos os ndices 1, 2, 3, .... .
Para atribuirmos um valor posio inicial do vetor notas,
podemos ento fazer: notas[0] 8.0
Para atribuirmos um valor segunda posio do vetor notas,
podemos fazer:
notas[1] 10.0
Para atribuirmos um valor terceira posio do vetor notas,
podemos fazer:
notas[2] 9.0. E assim sucessivamente, at preencher todo o
vetor de notas.
Nosso vetor caria assim preenchido:
8.0 10.0 9.0
Importante
Perceba que a primeira posio do vetor tem ndice
0, a segunda posio tem ndice 1, a terceira posio
tem ndice 2, e assim sucessivamente. Isso signifca
que para um vetor de tamanho N, o ltimo ndice
N-1. Por exemplo, um vetor de notas de tamanho
150, declarado da seguinte forma notas: vetor [150]
numrico tem ndices de vo de 0 (posio inicial) at
150-1, ou seja, ndice 149. No existe a posio 150.
150 o tamanho do vetor que vai de 0 at 149.
logica_2_livro_caderno.indb 23 7/12/2006 14:20:52
24
Universidade do Sul de Santa Catarina
Todo o processo de manipulao agora se torna bastante
simples, bastando especicar a posio do vetor onde estaremos
armazenando os valores.
Voltando ao nosso exemplo, onde queremos imprimir as notas
do aluno, alm da sua mdia, podemos armazenar os valores
(notas digitadas) em um vetor de notas. Cada nota digitada ser
armazenada em uma posio especca. Perceba que temos 6
notas como entrada, o que sugere um vetor de tamanho 6, com
ndices variando de 0 at 5.
incio
conta, media, soma: numrico
notas: vetor[6] numrico {vetor para armazenar as notas digitadas}
soma 0 {inicializa varivel soma com o valor 0}
para conta de 0 at 5 passo 1 faa {lao de repetio}
escreva Entre com a nota:
leia notas[ conta ] {leitura das notas. Perceba que o que aparece
entre colchetes a varivel conta.
Dentro do lao de repetio, a varivel conta vai sendo incrementada de 1,
sendo seu valor inicial de 0 e o nal de 5, conforme o comando para.
Para o primeiro lao de repetio, a varivel conta tem valo 0. Sendo assim,
o comando leia notas[ conta ] est lendo notas na posio 0, ou seja, leia
notas[ 0 ]. Para o segundo lao de repetio, a varivel conta tem valo 1.
Sendo assim, o comando leia notas[ conta ] est lendo notas na posio 1,
ou seja, leia notas[ 1 ], e assim sucessivamente at atingir o valor 5, ltima
posio do vetor. }
soma soma + notas[conta] {soma das notas digitadas}
m-para
{para imprimir as notas, basta ler o vetor notas da posio 0 at a posio
5. Faamos com o lao de repetio novamente}
para conta de 0 at 5 passo 1 faa {lao de repetio}
escreva Nota: , notas[conta]
m-para
media soma/6 {calcula a mdia nal}
escreva A mdia nal , media {mostra o resultado na tela}
m
Dica: para trabalhar com vetores, sempre precisamos
especifcar o seu tamanho inicial. Sendo assim, a
forma mais usual e fcil para escrita/leitura de valores
para/de vetores pode ser feita atravs do comando
para/fm-para. Voc consegue saber por qu?
logica_2_livro_caderno.indb 24 7/12/2006 14:20:52
25
Lgica de Programao II
Unidade 1
Tudo, agora, no passa de operaes simples, como se estivssemos
manipulando variveis independentes. Por exemplo, vamos criar
um vetor de nmeros pares e um vetor de nmeros mpares: a
diferena entre eles ser armazenada em um terceiro vetor. Vamos
assumir os 50 primeiros valores numricos, ou seja, de 0 at 49.
incio
{declarao das variveis}
pares: vetor[25] numrico {armazena nmeros pares com 25 posies,
pois se so os 50 primeiros nmeros positivos, temos apenas 25 pares}
impares: vetor[25] numrico {armazena nmeros mpares}
subtracao: vetor[25] numrico {armazena a diferena entre nmeros
pares e mpares}
j,i: numrico {variveis utilizadas para realizar o lao de repetio}

{vamos armazenar os nmeros pares no vetor pares}
j 0 {ser o contador do vetor pares e vetor mpares}
para i de 0 at 49 passo 2 faa
{armazena 0,2,4,6.....48. Perceba que o passo do lao de
repetio de 2 em 2.
Ento o valor da varivel i pula de 2 em 2. Mas no vetor pares
precisamos guardar em posies seqenciais. Vamos criar
uma outra varivel para contar os vetores pares (j).}
pares[ j ] i
j j +1
m-para

{vamos armazenar os nmeros mpares no vetor mpares}
j 0 {inicializar novamente, para iniciar o vetor impares de 0.}
para i de 1 at 49 passo 2 faa
impares [ j ] i {armazena 1,3,5,7.....49. Perceba que o passo
do lao de repetio de 2 em 2, mas a contagem comea
com 1. O contador j ir guardar o valor de i na posio correta
em seqncia.}
j j + 1
m-para

{vamos realizar as subtraes de cada posio dos vetores pares e
mpares e armazenar o resultado no vetor subtracao. A estrutura
repetio para-faa inicia em 0 e vai at 25, pois cada vetor tem apenas
25 elementos (25 pares e 25 mpares) dentre os 50 primeiros nmeros
0-49}
para i de 0 at 24 passo 1 faa
subtracao[ i ] = pares[ i ] impares[ i ]
m-para

{como resultado de sada, vamos imprimir os vetores}
para i de 0 at 24 passo 1 faa
escreva Nmeros Pares: , pares[ i ]
escreva Nmeros mpares , impares[ i ]
escreva Diferena Pares - mpares: , subtracao[ i ]
m-para
m
logica_2_livro_caderno.indb 25 7/12/2006 14:20:52
26
Universidade do Sul de Santa Catarina
Bem, agora voc j sabe criar vetores, inserir e recuperar valores
de vetores. Na prxima seo, vai estudar alguns algoritmos de
programao utilizando vetores.
SEO 3 - Algoritmos com manipulao de Vetores
Conforme falamos na disciplina de Lgica de Programao
I, a melhor maneira de aprender a programar programando.
Continua valendo a idia: A melhor maneira de aprender a
utilizar vetores construindo algoritmos com vetores. Nesta
seo, mostraremos algumas aplicaes que manuseiam vetores.
Para esses exemplos, vamos denir as variveis com nomes
maisculos apenas por questes de esttica. Vale lembrar que, de
acordo com a seo 4 de Lgica de Programao I, por padro,
as variveis so todas com letras minsculas, mas isso para as
linguagens de programao de alto nvel como C/C++, JAVA,
Visual etc. Para o pseudocdigo, podemos representar por letras
maisculas, sem perda de padronizao.
1. Ler um vetor de 50 nmeros e montar outro vetor com os
valores do primeiro multiplicados por 3.
Pseudocdigo:
incio
VET1,VET2 : vetor [50] numrico
CONTADOR : numrico
para CONTADOR de 0 at 49 faa
leia Digite um nmero: ,VET1[CONTADOR]
VET2[CONTADOR] VET1[CONTADOR] * 3
m-para
m
logica_2_livro_caderno.indb 26 7/12/2006 14:20:52
27
Lgica de Programao II
Unidade 1
2. Um armazm contm 400 produtos e para cada tipo de
produto existe um cdigo. Faa um algoritmo para ler o
cdigo do produto e a quantidade em estoque. Depois, monte
dois vetores para armazenar respectivamente os cdigos das
mercadorias e a quantidade dos produtos.
Pseudocdigo:
incio
{declarao das variveis}
CODIGOPRODUTO : vetor [400] literal
QUANTIDADE : vetor [400] numrico
CONTADOR : numrico
para CONTADOR de 0 at 399 faa
{leitura de 400 cdigos de produtos e a quantidade em estoque
de cada um}
escreva Digite o cdigo do produto:
leia CODIGOPRODUTO[CONTADOR]
escreva Digite a quantidade do produto em estoque:
leia QUANTIDADE[CONTADOR]
m-para
m
3. Ler um vetor contendo 100 nmeros, que correspondem
a matrculas de alunos. Ler cinco nmeros e imprimir uma
mensagem informando se eles esto ou no presentes no vetor.
Pseudocdigo:
incio
{declarao de variveis}
ALUNOS : vetor[100] numrico {lembre que o tamanho do vetor
100, mas ele vai de 0 at 99}
POS, PESQUISADO, CONT :numrico
{lao de repetio para preencher o vetor ALUNOS}
para POS de 0 at 99 faa
escreva Digite o cdigo de matrcula de um aluno:
leia ALUNOS[POS]
m-para
logica_2_livro_caderno.indb 27 7/12/2006 14:20:53
28
Universidade do Sul de Santa Catarina
{5 entradas de dados para vericar se alunos esto cadastrados ou
no}
para CONT de 1 at 5 faa
escreva Digite o nmero de matrcula a ser pesquisado:
leia PESQUISADO
POS -1 {inicialmente atribudo o valor 1 para a varivel
POS porque na seqncia, no comando repita, a varivel POS ser
incrementada de 1 (POS POS + 1). Como queremos comear a
ler o vetor ALUNOS a partir da posio 0, no primeiro lao, a varivel
POS assume valor 0}
repita
POS POS+1
{repete o lao at que o nmero sendo pesquisado (valor
armazenado na varivel PESQUISADO) seja igual ao nmero
armazenado no vetor ALUNOS em uma determinada posio POS,
ou que a varivel POS seja maior que o tamanho do vetor ALUNOS,
nesse caso, seja maior que 100}
at que PESQUISADO = ALUNOS[POS] OU POS > 99
se POS > 99 ento
{se a varivel POS possui um valor superior a 99, ou seja, 100,
isso signica que todo o vetor ALUNOS foi lido desde o ndice 0 at
99 (100 alunos), mas que no h nenhum nmero armazenado
nesse vetor igual ao valor armazenado na varivel PESQUISADO}
escreva Nmero no cadastrado !
seno
escreva Nmero localizado na posio , POS , do vetor.
m-se
m-para
m
4. Criar um algoritmo que leia o preo de compra e o preo de
venda de 100 mercadorias. O algoritmo dever imprimir quantas
mercadorias proporcionam:
Lucro menor do que 10%
Lucro maior ou igual 10% e menor ou igual a 20%
Lucro superior a 20%
Pseudocdigo:
logica_2_livro_caderno.indb 28 7/12/2006 14:20:53
29
Lgica de Programao II
Unidade 1
incio
{declarao de variveis}
PRECOCOMPRA: vetor [100] numrico {armazena os preos de compra das mercadorias}
PRECOVENDA: vetor [100] numrico {armazena os preos de venda das mercadorias}
LUCRO, TOTLUCROMENOR10, TOTLUCROMENOR20, TOTLUCROMAIOR20: numrico
{variveis utilizadas para armazenar o lucro, o lucro menor que 10%, menor do que
20% e maior do que 20%, respectivamente}
i : numrico {varivel utilizada como contadora para laos de repetio}
{precisamos inicializar as variveis contadoras de lucros}
TOTLUCROMENOR10 0
TOTLUCROMENOR20 0
TOTLUCROMAIOR20 0
{entrada de dados}
para I de 0 at 99 passo 1 faa
{vamos especicar o preo de venda e de compra de todas as 100 mercadorias}
escreva Entre com o preo de compra da mercadoria:
leia PRECOCOMPRA[ i ]
escreva Entre com o preo de venda da mercadoria:
leia PRECOVENDA[ i ]
m-para
{Processamento do algoritmo. Vamos vericar o lucro de cada mercadoria (preo
de venda preo de compra) e vericar as condies de lucro (10%, 20% ou maior
do que 20%. Para isso, vamos ter que ler os vetores PRECOVENDA e PRECOCOMPRA
novamente}
para i de 0 at 99 passo 1 faa
LUCRO (PRECOVENDA[ i ] PRECOCOMPRA[ i ])
*
100 / PRECOCOMPRA[ i ]
{se a diferena entre preo de venda e preo de compra, ou seja, o lucro for menor do
que 10, ento incrementa a varivel contadora de mercadorias com lucros inferior a
10%}
se LUCRO < 10.0 ento
TOTLUCROMENOR10 TOTLUCROMENOR10 + 1
seno
{se o lucro no inferior a 10%, ento ele s pode ser superior a 10%. Mas quanto?
Precisamos saber se o lucro menor a 20% ou superior a esse valor. Por isso colocamos
outra condio dentro do comando seno. Essa condio verica se o lucro inferior ou
superior a 20%.}
logica_2_livro_caderno.indb 29 7/12/2006 14:20:53
30
Universidade do Sul de Santa Catarina
Sntese
Finalizamos mais uma etapa. Mais um passo da nossa
caminhada. Nessa unidade, vimos que um vetor uma
varivel que pode armazenar vrias constantes do mesmo tipo
(homogneas). Isso permite manipular uma grande quantidade
de dados sem a necessidade de declarar vrias variveis. Para
declarar um vetor em pseudocdigo, utilizamos o seguinte
comando:
<nome do vetor>: vetor [tamanho do vetor] <tipo de constante
que o vetor poder conter>
Quando um vetor declarado, ele se apresenta assim na memria:
Valor 1 Valor 2 Valor n
se LUCRO < 20.0 ento
TOTLUCROMENOR20 TOTLUCROMENOR20 + 1
seno
TOTLUCROMAIOR20 TOTLUCROMAIOR20 + 1
m-se {m da condio que testa se lucro menor do que 20.0}
m-se {m da condio que testa se lucro menor do que 10.0}
m-para
{sada do algoritmo}
escreva Nmero de mercadorias com lucro inferior a 10%: ,
TOTLUCROMENOR10
escreva Nmero de mercadorias com lucro maior ou igual a 10% e menor
do que 20%: , TOTLUCROMENOR20
escreva Nmero de mercadorias com lucro superior a 20%: ,
TOTLUCROMAIOR20
m
logica_2_livro_caderno.indb 30 7/12/2006 14:20:53
31
Lgica de Programao II
Unidade 1
Cada posio (representado por um quadrado no desenho
acima) uma posio de memria do computador. Para inserir
ou ler valores de um vetor basta especicar seu nome e o ndice
(posio) que queremos acessar dentro do vetor. Por exemplo:
notas [10] 8.5. Sabendo que o ndice dos vetores comea com
o valor numrico 0. Quando colocamos notas [10] estamos nos
referindo ao ndice 10, mas a posio no vetor (representado por
um quadrado) o 9. Poderamos representar as posies de um
vetor de tamanho 5 conforme apresentado abaixo:
Valor 1 Valor 2 Valor n
[0] [1] [2] [3] [4]
Podemos perceber que o ndice [3] est no quarto quadrado.
Tudo isso porque um vetor tem seu incio no ndice 0, conforme
j dito.
Bem, um vetor unidimensional, ou seja, apresenta apenas uma
dimenso ou 1 linha. Poderamos estar trabalhando com vetores
bidimensionais ou vetores que possuem vrias colunas e vrias
linhas. A esses vetores damos o nome de matrizes. No prximo
captulo, estaremos estudando algoritmos que utilizam os
conceitos de matrizes.
At l!
logica_2_livro_caderno.indb 31 7/12/2006 14:20:53
32
Universidade do Sul de Santa Catarina
Saiba mais
Consulte o site http://www.unidev.com.br/artigos. H uma
srie de algoritmos j feitos. um bom exerccio fazer os
exemplos e comparar com o que est feito. Tambm, neste site,
constam dicas importantes de lgica de programao.
Dicas de programao nunca so demais, no se esquea disso!
Atividades de auto-avaliao
1. Crie um vetor para armazenar 25 valores de temperaturas.
2. Crie um vetor para armazenar 150 alunos de um colgio infantil.
3. Um site na web precisa registrar 2500 produtos cadastrados de um
fornecedor. Crie um vetor para representar esses produtos.
4. Criar um algoritmo que realize as reservas de passagem areas de uma
companhia. Alm da leitura do nmero de vos e da quantidade de
lugares disponveis, leia vrios pedidos de reserva, constitudos do
nmero da carteira de identidade e do nmero do vo desejado. Para
cada cliente, verifcar se h possibilidade no vo desejado. Em caso
afrmativo, imprimir o nmero de identidade do cliente e o nmero
do vo, atualizando o nmero de lugares disponveis. Caso contrrio,
avisar ao cliente a inexistncia de lugares.
logica_2_livro_caderno.indb 32 7/12/2006 14:20:53
Objetivos de aprendizagem
Entender o conceito de matrizes.
Conhecer e praticar montagens de matrizes.
Construir algoritmos com utilizao de matrizes.
Sees de estudo
Seo 1 Conceito e declarao de matrizes.
Seo 2 Operao de matrizes.
Seo 3 Algoritmos com manipulao de matrizes.
UNIDADE 2
Manipulao de matrizes 2
logica_2_livro_caderno.indb 33 7/12/2006 14:20:53
34
Universidade do Sul de Santa Catarina
Para incio de conversa
Trabalhamos na unidade anterior apenas com vetores
unidimensionais, ou seja, variveis que podem conter diferentes
valores de um mesmo tipo em diversas colunas. Na verdade, o
conceito de vetor pode ser representado por uma tabela com 1
linha e vrias colunas, onde o tamanho do vetor especica o
nmero de colunas, conforme voc pode ver a seguir:
Linha 0 Valor 1 Valor 2 Valor 3
...
Valor n
Coluna 0 Coluna 1 Coluna 2 Coluna n-1
Perceba na gura anterior que temos uma linha, denominada
linha 0, e vrias colunas, denominadas de colunas 0, coluna 1 e
assim sucessivamente. Como vimos na unidade anterior, cada
valor de um vetor armazenado em uma posio de memria,
ou seja, em um dos quadrados representados na gura anterior.
J sabemos tambm que no precisamos saber o endereo de
memria do computador para acessar os elementos do vetor,
bastando especicar o ndice que queremos acessar.
Por exemplo, para um vetor chamado de NOTAS de
tamanho 5, podemos acessar os ndices de 0 at 4 (lembre-
se de que um vetor sempre comea com ndice 0). Para
acessar qualquer posio do vetor, basta especifcar o ndice
de interesse: NOTAS [2] 7.5. Se observarmos o ndice que
estamos acessando, no exemplo em questo, o ndice 2 do
vetor NOTAS, podemos represent-lo conforme a fgura
anterior:
Linha 0 7.5
Coluna 0 Coluna 1 Coluna 2 Coluna n-1
Observando a gura, podemos constatar que o ndice 2 est na
linha 0 e coluna 2. Isso mesmo, voc j deve ter percebido que
um vetor nada mais do que uma tabela de 1 (uma) linha, na
qual chamamos de linha 0 e vrias colunas, onde armazenado
logica_2_livro_caderno.indb 34 7/12/2006 14:20:54
35
Lgica de Programao II
Unidade 2
cada um dos valores, seja ele numrico, alfanumrico ou lgico, e
que o ndice que especicamos para acessar o vetor exatamente
o nmero da coluna desse vetor.
Outro exemplo, NOTAS [4] 10.0. Podemos dizer que
estamos inserindo no vetor NOTAS o valor 10.0 no ndice 4,
ou seja, na linha 0 e coluna 4 do vetor.
Mas agora vem a questo: e, se quisermos trabalhar com um
vetor que possua vrias linhas e vrias colunas conforme a gura
a seguir?
Temos agora vrias linhas e colunas. Damos o nome para essas
estruturas de matrizes.
- Nesta unidade voc vai conhecer o que so matrizes e saber o porqu
de sua importncia no mundo da programao.

logica_2_livro_caderno.indb 35 7/12/2006 14:20:54
36
Universidade do Sul de Santa Catarina
SEO 1 - Conceito e declarao de matrizes
Uma matriz nada mais do que um vetor de 2
dimenses (linhas e colunas) capaz de armazenar
variveis do mesmo tipo (numrica, literal ou lgica).
Pode ser representada por uma tabela, conforme voc pode ver a
seguir:
Cada quadrado representa uma posio de memria onde podem
ser armazenadas as variveis, de maneira idntica aos vetores.
Porm, os vetores so unidimensionais (apenas colunas) e as
matrizes so bidimensionais (2 dimenses: linhas e colunas).
Agora teremos no somente a linha 0, mas tambm a linha 1, a
linha 2 e assim sucessivamente.
O nmero de posies que queremos criar especicado na
declarao, de forma similar a dos vetores.
Mas qual a utilidade de uma matriz? Uma matriz prtica
quando precisamos manipular um conjunto de dados do
mesmo tipo, sem que seja necessrio declarar muitas variveis e
precisamos fazer relaes de 2 variveis.
Queremos registrar 4 temperaturas de trs dias da semana
(segunda-feira, tera-feira e quarta-feira). Nesse caso,
temos duas variveis: temperatura e dias da semana. A
melhor maneira de representar isso atravs de uma tabela,
mostrando nas linhas os dias da semana e, nas colunas, as
temperaturas medidas.
logica_2_livro_caderno.indb 36 7/12/2006 14:20:54
37
Lgica de Programao II
Unidade 2
Veja a tabela a seguir:
Dias da semana Temperatura 1 Temperatura 2 Temperatura 3 Temperatura 4
Segunda 27 29 30 24
Tera 25 27 28 22
Quarta 21 23 25 20
Se olharmos para a tabela anterior, podemos saber, por exemplo,
que na tera-feira, a 4 temperatura medida foi 22C e que na
quarta-feira a 2 temperatura medida foi de 23C. Estamos
fazendo uma correspondncia entre a varivel Temperatura
e o Dia. Nesse caso, para determinar a temperatura em
uma determinada hora de um dia. Para representar essa
correspondncia que utilizamos o conceito de matrizes. Agora
termos uma estrutura de linhas e colunas e no apenas de colunas
como eram os vetores.
Mas como criar uma matriz? muito simples. Especicamos
o nome da matriz seguido do nmero de linhas e colunas que a
matriz conter, alm do tipo de varivel que ser armazenada.
A exemplo de vetores, as matrizes s podem
armazenar dados do mesmo tipo. Por exemplo:
somente dados numricos ou somente dados literais
ou somente dados lgicos. No podemos ter em uma
matriz dados numricos e literais ao mesmo tempo.
Sintaxe da matriz
<nome da matriz>: matriz [nmero de linhas][nmero de
colunas] <tipo de constante que o vetor poder conter>
notas_de_alunos: matriz[6][4] numrico {matriz que possui 6 linhas
numeradas de 0 at 5 e 4 colunas, numeradas de 0 at 3. Dizemos
que a matriz tem dimenso de 6x4. No total, so 6x4 = 24 posies
para armazenar valores numricos}
matriz_de_alunos: matriz[10][30] literal {matriz que possui 10
linhas numeradas de 0 at 9 e 30 colunas, numeradas de 0 at 29.
Dizemos que a matriz tem dimenso de 10x30. No total, so 10x30
= 300 posies para armazenar valores literais}

logica_2_livro_caderno.indb 37 7/12/2006 14:20:54
38
Universidade do Sul de Santa Catarina
Assim como na criao de vetores, para a criao de matrizes no
precisamos especicar os endereos de memria do computador.
Isso feito automaticamente, sem que sequer saibamos onde
os valores esto armazenados na memria. A nica coisa que
sabemos que alocado um espao para armazenar esses valores
e que so armazenados em endereos de memria seqenciais.
Para acessar esses endereos ou os valores armazenados nesses
endereos que um pouco diferente dos vetores. Veremos isso
na seo 2.
- Na prxima seo voc vai estudar como manipular matrizes, ou
seja, como inserir e ler valores a partir de matrizes.
SEO 2 - Operao de matrizes
At agora nossa preocupao foi em saber como criar uma matriz
e saber quando ela necessria. Sempre que trabalharmos com
grandes quantidades de dados e precisamos relacionas duas ou
mais variveis, estaremos criando uma ou mais matrizes. A
sintaxe da criao bastante simples conforme seo anterior.
Mas como iremos trabalhar com uma matriz? Por
exemplo, como atribuir valores a uma matriz? Como
recuperar um valor de uma matriz?
Para a nossa alegria, tudo realizado de forma similar a
dos vetores, somente com uma ateno especial: precisamos
especicar qual a linha que estamos acessando, alm da coluna
como feito com os vetores.
Assim, para acessar as posies de uma matriz, basta indicar a
linha e a coluna desejadas.
logica_2_livro_caderno.indb 38 7/12/2006 14:20:54
39
Lgica de Programao II
Unidade 2
Exemplo: NOTAS.
NOTAS: matriz [6][4] numrico
1. A Matriz NOTAS uma matriz de dimenso 6x4,
ou seja, 6 linhas por 4 colunas.
2. Para armazenar uma constante numrica na matriz NOTAS,
precisamos identicar a linha e coluna que queremos acessar. Isso
feito da seguinte forma: nome da matriz [ndice da linha][ndice da
coluna], lembrando que os ndices comeam sempre com o valor 0.
Por exemplo, a 3 (terceira) linha da matriz tem ndice 2, isso por que
a 1 (primeira) linha tem o ndice 0, a 2 (segunda) linha tem ndice 1
e a 3 (terceira) o ndice 2.
3. Para armazenar a constante numrica 10 na 3 (terceira) linha
(linha 2) da 2 (segunda) coluna (coluna 1), utilizamos os ndices
da matriz NOTAS, nesse caso, o ndice 2 para linha e o ndice 1 para
coluna. Assim, NOTAS [2][1] 10.0. Veja com ca a matriz.
10.0
Todo o processo de manipulao agora se torna simples, bastando
especicar a posio onde estaremos armazenando os valores,
ou seja, basta especicar o nome da matriz e, a seguir, entre
colchetes, o ndice que representa a linha e, depois, tambm entre
colchetes, o ndice que representa a coluna.
logica_2_livro_caderno.indb 39 7/12/2006 14:20:54
40
Universidade do Sul de Santa Catarina
Dica: para trabalhar com matrizes, sempre precisamos
especifcar a sua dimenso, ou seja, o nmero de linha
pelo nmero de colunas. Sendo assim, a forma mais
usual e fcil para escrita/leitura de valores para/de
matrizes pode ser feita atravs do comando para/fm-
para. Voc consegue saber o porqu?
1. Montar uma matriz nas dimenses 4x5 e imprimir a soma
das linhas e colunas.
Pseudocdigo:
incio
MAT : matriz [4][5] numrico {matriz de dimenso 4x5. 4 linhas e 5
colunas}
SOMALINHA, SOMACOLUNA, LINHA, COLUNA : numrico
{Aqui um fato importante. Para percorrer um vetor desde o seu
incio at o seu nal, utilizamos o comando para/faa/m-para. Agora
temos que percorrer toda a matriz, ou seja, todas as linhas e colunas. O
processo bem simples. Para percorrer todas as colunas de uma linha
de uma matriz continuamos utilizando o comando para/faa/m-
para. Assim que todas as colunas de uma linha so lidas ou acessadas,
passa-se para a prxima linha. Novamente, para essa nova linha, todas
as colunas so acessadas, e assim sucessivamente. Podemos perceber
que para cada incremento da linha devemos ler ou acessar todas as
colunas daquela linha. Isso sugere dois laos de repetio: 1 para
pular as linhas e outro para pular as colunas. Dessa forma, elabora-
mos 2 laos de repetio, um para linha com a varivel LINHA sendo
incrementada de 0 at 3 (4 linhas no total), e um lao para coluna com
a varivel COLUNA sendo incrementada de 0 at 4 (5 colunas no total).
Para cada repetio do lao dentro da linha executamos 5 repeties
para as colunas, percorrendo assim toda a matriz}
para LINHA de 0 at 3 passo 1 faa
para COLUNA de 0 at 4 passo 1 faa
escreva Digite um nmero:
leia MAT[LINHA][COLUNA]
m-para
m-para
{Processamento do Algoritmo. Soma das linhas. A explicao
desta parte est aps o m-para do primeiro lao de repetio}

logica_2_livro_caderno.indb 40 7/12/2006 14:20:55
41
Lgica de Programao II
Unidade 2
para LINHA de 0 at 3 passo 1 faa
SOMALINHA 0
para COLUNA de 0 at 4 passo 1 faa
SOMALINHA SOMALINHA + MAT[LINHA][COLUNA]
m-para
escreva Total da linha, LINHA,:, SOMALINHA
m-para
{Explicando a lgica anterior: Nossa matriz possui 4 linhas e 5
colunas. Sendo assim, vamos percorrer as linhas de 0 a 3 e as colunas
de 0 a 4 (So os ndices da matriz. Para o primeiro lao de repetio
para LINHA de 0 at 3 passo 1 faa, a varivel LINHA incrementada de
0 at 3. Inicialmente ela tem valor numrico 0. O primeiro comando
dentro do lao inicializar a varivel SOMALINHA igual a 0. A varivel
SOMALINHA armazenar a soma de todas os valores numricos de
cada linha. Sabendo que estamos na linha 0, devemos percorrer cada
coluna dessa linha. Isso feito pelo lao de repetio seguinte para
COLUNA de 0 at 4 passo 1 faa. Quando o programa entra nesse
segundo lao, a varivel COLUNA incrementada com passo 1, de 0 at
4, executando os comandos que esto dentro da estrutura para/faa/
m-para, no nosso caso, apenas o comando SOMALINHA SOMA-
LINHA + MAT[LINHA][COLUNA]. Quando o segundo lao de repetio
nalizado, o programa executa os comandos seguintes ao m-para, ou
seja, executa o comando de impresso na tela escreva Total da linha,
LINHA,:, SOMALINHA. Ao encontrar o m-para do primeiro lao de
repetio, o programa incrementa a varivel LINHA de 1 no comando
para LINHA de 0 at 3 passo 1 faa passando o valor da varivel LINHA
para o valor 1, e executa todos os comandos dentro da estrutura
para/faa/m-para novamente. Como SOMALINHA armazena o valor
numrico da soma dos valores da linha anterior, a varivel reinicial-
izada com valor 0. Um timo exerccio montar uma matriz e executar
o algoritmo passo a passo. Essa uma atividade para voc fazer logo a
seguir.}

{Processamento do Algoritmo. Soma das colunas}
para COLUNA de 0 at 4 passo 1 faa
SOMACOLUNA 0
para LINHA de 0 at 3 passo 1 faa
SOMACOLUNA SOMACOLUNA + MAT[LINHA][COLUNA]
m-para
escreva Total da coluna, COLUNA,:, SOMACOLUNA
m-para
m
logica_2_livro_caderno.indb 41 7/12/2006 14:20:55
42
Universidade do Sul de Santa Catarina
SEO 3 - Algoritmos com manipulao de matrizes
Voc j deve ter observado que no criamos qualquer lgica
para manipular tanto os vetores quanto as matrizes. Usamos os
mesmos comandos que aprendemos em Lgica de Programao
I, ou seja, comandos como leia, escreva, para/faa/m-para,
entre outros que poderamos estar utilizando tambm. uma
oportunidade mpar para voc incrementar os conceitos e revisar
toda a lgica de programao. Nesta seo, apresento mais
alguns exerccios resolvidos, porm, com uma atividade: que voc
construa as matrizes em um caderno e execute o algoritmo passo
a passo. Comporte-se como o processador do computador. Tente
e experimente. um exerccio e tanto para aprender cada vez
mais.
1. Monte uma matriz para quando o usurio informar um
nmero correspondente a um ms, o algoritmo imprima
o nome do ms indicado em portugus, a abreviatura e o
nome do ms em ingls. Por exemplo, o usurio digita o
nmero 4 e o algoritmo ativado para imprimir: 4Abril, Abr,
April.
Pseudocdigo:
incio
MESES : matriz [12][3] literal
LINHA, NUM : numrico
para LINHA de 1 at 12 passo 1 faa
escreva Digite o nome do ,LINHA, ms:
leia MESES[LINHA][1]
escreva Digite a abreviao do ms de ,MESES[LINHA][1],:
leia MESES[LINHA][2]
escreva Digite o nome em ingls do ms ,MESES[LINHA][1],:
leia MESES[LINHA][3]
m-para
leia Digite o nmero do ms a ser consultado: ,NUM
escreva NUM, , MESES[NUM][1], ,, MESES[NUM][2], , , MESES[NUM][3]
m
logica_2_livro_caderno.indb 42 7/12/2006 14:20:55
43
Lgica de Programao II
Unidade 2
2. Uma foricultura conhecedora de sua clientela gostaria de
fazer um algoritmo que pudesse controlar via Web sempre
um estoque mnimo de determinadas plantas, pois todo
o dia, pela manh, o dono faz novas aquisies. Criar um
algoritmo que deixe cadastrar 50 tipos de plantas e nunca
deixa o estoque fcar abaixo do ideal. O algoritmo ser
utilizado para construir um programa na pgina da empresa.
Pseudocdigo:
incio
{vamos montar uma matriz de 50 linhas e 3 colunas. As 50 linhas
servem para cadastrar todos os produtos e as trs colunas servem
para especicar a quantidade de produtos em estoque, a quantidade
desejada e o resultado da diferena entre a quantidade em estoque e a
quantidade desejada respectivamente.}
PRODUTOS: matriz [50][3] : numrico
NOME: vetor [50] literal
I: numrico
para I de 0 at 49 passo 1 faa
escreva Entre com o nome do produto:
leia NOME [i]
escreva Entre com a quantidade em estoque:
leia PRODUTOS[ I ][ 0 ]
escreva Entre com a quantidade desejada:
leia PRODUTOS[ I ][ 1 ]
se PRODUTOS[ I ][ 0 ] < PRODUTOS[ I ][ 1 ] ento
[PRODUTOS [ I ][ 2 ] PRODUTOS[ I ][ 1 ]
- PRODUTOS[ I ][ 0 ]
seno
[PRODUTOS [ I ][ 2 ] 0
m-se
m-para
{dados de sada do algoritmo}
escreva Total de Compras:
para I de 0 at 49 passo 1 faa
escreva Produto: , NOME [i], Qtde = , PRODUTOS[ I ] [ 2 ]
m-para
m
logica_2_livro_caderno.indb 43 7/12/2006 14:20:55
44
Universidade do Sul de Santa Catarina
Sntese
Nesta unidade, voc viu que para relacionar duas ou mais
variveis precisamos manipular matrizes. Diferentemente de
vetores, que so unidimensionais, as matrizes so bidimensionais,
possuindo linhas e colunas. Podemos ter matrizes com mais
dimenses, mas nesta unidade trabalhamos apenas com 2.
Similarmente aos vetores, as matrizes s podem armazenar
dados do mesmo tipo, ou seja, quando denimos uma matriz,
especicamos que tipo de varivel a mesma vai armazenar
(numrico, literal ou lgico). A sintaxe em pseudocdigo para
denir uma matriz a seguinte:
<nome da matriz>: matriz [nmero de linhas][nmero de colunas] <tipo de
constante que o vetor poder conter>
Quando criamos uma matriz, o computador reserva um espao
na memria para armazenar Linhas x Colunas valores. o
que chamamos de dimenso da matriz. Para acessar qualquer
elemento da matriz, basta especicar o ndice da linha e coluna,
lembrando sempre que os ndices comeam com o valor numrico
0. Por exemplo, uma matriz NOTAS de dimenso 5x 6 comea
em [0][0] e termina em [4][5]. Podemos acessar qualquer posio
da matriz desde que esteja dentro das dimenses especicadas:
NOTAS[3][2] 8.5. Estamos acessando a quarta linha e a
terceira coluna da matriz.
Por m, viu que para percorrer uma matriz de ponta a ponta,
precisamos de dois laos de repetio, um sendo utilizado para
percorrer as colunas de cada linha e o outro para percorrer as
linhas da matriz.
Na prxima unidade, vamos trabalhar com aspectos mais
sosticados da linguagem de programao: as estruturas. Elas
so a base para algoritmos avanados e tambm para a linguagem
orientada a objetos, linguagem essa que voc, programador web,
deve dominar.
Bom trabalho e at a prxima etapa desse mundo fabuloso que
o estudo da lgica de programao.
logica_2_livro_caderno.indb 44 7/12/2006 14:20:55
45
Lgica de Programao II
Unidade 2
Atividades de auto-avaliao
1. A distncia em quilmetros entre algumas capitais mostrada no
quadro a seguir. Suponha que voc tenha sido contratado por uma
empresa, que vende mapas, para montar um programa (algoritmo) que
leia as capitais e suas respectivas distncias e tambm dever imprimir
a distncia entre duas capitais solicitadas por um usurio. Esse ser um
programa que poder ser acessado via Web.
Tabela mostrando as distncias entre as capitais:
1 2 2 27
1 0 23 45
2 23 0 10
27 110 50 66 72 0
logica_2_livro_caderno.indb 45 7/12/2006 14:20:56
46
Universidade do Sul de Santa Catarina
Saiba mais
Consulte o livro Construindo algoritmos computacionais: lgica
de programao de Alfredo Boente.
Para quem deseja participar de um outro grupo de discusso,
basta acessar o site: http://www.aprendaprogramacao.hpg.
ig.com.br/grupo.html.
logica_2_livro_caderno.indb 46 7/12/2006 14:20:56
Objetivos de aprendizagem
Entender o conceito de registro ou estrutura.
Conhecer e praticar montagens de registros.
Criar novos tipos de variveis.
Sees de estudo
Seo 1 Conceito e declarao de registros.
Seo 2 Operao com registros.
Seo 3 Algoritmos com manipulao de registros.
UNIDADE 3
Manipulao de registros 3
logica_2_livro_caderno.indb 47 7/12/2006 14:20:56
48
Universidade do Sul de Santa Catarina
Para incio de conversa
Quantas vezes voc j preencheu chas de cadastros, seja em
hotis, em videolocadoras, para propostas de consrcios ou
ainda chas de matrcula escolar? Nessas chas, certamente
voc precisou entrar com dados como: seu nome, sua idade, seu
telefone de contato, endereo etc.
Nesses casos, estamos trabalhando com dados de diferentes tipos.
Por exemplo: nome uma varivel literal, idade uma
varivel numrica, informao se possui ou no veculo
pode ser um valor lgico.
Percebeu que estamos entrando em um mundo onde as coisas
no so to homogneas assim, ou seja, nem tudo que estamos
trabalhando so apenas variveis numricas ou literais ou ainda
lgicos? H uma mistura de tipos de dados que devemos
trabalhar.
Mas, o que tem haver isso com lgica de programao? No
poderamos criar variveis independentes, ou seja, cada
informao armazenada em um local diferente como temos
feito at agora? Poderamos criar, por exemplo, as variveis em
pseudocdigo representando nossa cha cadastral. Acompanhe a
seguir.
incio
{Declarao de variveis}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO: literal
IDADE, DATANASC, NUMERO, CEP, FONE: numrico
.....
m

logica_2_livro_caderno.indb 48 7/12/2006 14:20:56
49
Lgica de Programao II
Unidade 3
Se fssemos preencher apenas uma cha cadastral, isso resolveria
nossos problemas. Mas vamos supor que queremos cadastrar 50
hspedes de um hotel. Certamente, tendo visto e estudado as
unidades sobre vetores e matrizes, voc responderia que a soluo
continua simples. Basta fazer, de todas as variveis criadas
anteriormente, vetores de dimenso 50.
NOME: vetor [50] literal; IDADE: vetor[50] numrico, e assim
por diante. Isso tambm resolveria nossos problemas. Se
voc pensou assim, pensou certo. Parabns, por que mostra
que voc conseguiu entender os conceitos das unidades
anteriores.
Mas o que h de novo, ento?
Quando criamos variveis independentes, o computador ir
coloc-las em qualquer endereo de memria reservado para
essas ocasies. Ele no vai se preocupar em colocar em uma
certa ordem que muitas vezes so necessrias por quesitos de
velocidade de execuo do programa. Imagine sua cha cadastral
onde o nome est em uma folha, o endereo est duas folhas a
seguir, depois volta uma folha para preencher a idade e assim
sucessivamente. Parece desorganizado voc no acha? Alm do
tempo de preenchimento que ser bem maior. Ou seja, se estamos
criando variveis para representar nossas chas cadastrais, seria
interessante que todas elas fossem declaradas prximas uma das
outras. Isso faria com que o desempenho do programa fosse
melhor. Pode parecer estranho, mas para um programa com
muitas informaes e dados para manipular, isso pode fazer a
diferena entre um programa bom e um ruim.
Pois bem, no mundo da lgica de programao, podemos criar
estruturas de dados heterogneas, ou seja, capaz de armazenar
variveis de tipos diferentes, de forma que as mesmas estejam
declaradas prximas umas das outras no que diz respeito
posio de memria do computador. So os chamados registros.
Com esse tipo de estrutura, podemos declarar mltiplas variveis
de diferentes tipos, todas organizadas umas prximas das outras,
de forma similar a uma cha cadastral. Na seo seguinte, vamos
denir essa estrutura e vamos aprender a como declar-las.
logica_2_livro_caderno.indb 49 7/12/2006 14:20:56
50
Universidade do Sul de Santa Catarina
Quando trabalhamos com vetores e matrizes nas unidades
anteriores, os dados armazenados nessas estruturas devem ser
homogneos, ou seja, tudo do mesmo tipo. No podemos utilizar
nem vetores e nem matrizes para armazenar dados de tipos
diferentes.
Mas, se quisermos trabalhar com dados do tipo literal
e numrico juntamente, isso possvel?
Posso dizer que sim. Nesta unidade voc vai aprender como
trabalhar com dados de tipos diferentes, ou seja, vai conhecer as
estruturas ou registros de dados.
SEO 1 - Conceito e declarao de registros
Mas, se quisermos trabalhar com dados do tipo literal
e numrico juntamente, isso possvel?
Em lgica de programao um registro um recurso que permite
a criao de diferentes tipos de variveis em um mesmo bloco
de memria do computador. Quando criamos um registro,
criamos um espao na memria do computador que permite
armazenar dados heterogneos, ou seja, constantes de vrios
tipos. como se fosse uma cha de dados, organizada de forma
que os dados esto prximos um dos outros dentro da memria
do computador. Uma das grandes vantagens disso, alm da
organizao, a velocidade de acesso s informaes ali contidas.
Para lembrar!
Diferentemente de vetores e matrizes que s podem
armazenar dados do mesmo tipo, os registros so
estrutura ou recursos que permitem armazenar
constantes de diferentes tipos.
logica_2_livro_caderno.indb 50 7/12/2006 14:20:56
51
Lgica de Programao II
Unidade 3

Sintaxe do registro
<nome do registro>: registro
<campos que comporo o registro>
m-registro
onde <campos que comporo o registro> so todas as variveis
que iro compor uma cha de dados, ou seja, NOME, IDADE,
CPF, ENDERECO etc.
Vamos imaginar uma fcha cadastral que chamaremos de
FICHA com as seguintes informaes a serem preenchidas
por um cliente de um hotel:
Nome, estado civil, endereo, bairro, cidade, estado, e-mail,
idade, telefone, nmero.
Utilizando a sintaxe de criao de registro, temos:
FICHA: registro
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO,
EMAIL: literal
IDADE, TELEFONE, NUMERO: numrico
m-registro
Bem, voc j deve estar perguntando. O que mudou alm da palavra
reservada registro e fim-registro?
Pois bem, conforme dito anteriormente, quando declaramos
a FICHA anterior como sendo registro uma parte da
memria do computador reservada e nela so inseridas as
variveis declaradas entre os comandos registro e m-registro.
Portanto, elas ocupam o mesmo bloco de memria, tornando
o desempenho do programa mais rpido. Agora, por exemplo,
NOME e IDADE esto num mesmo bloco de memria. Seria
anlogo a ter nome e idade em uma mesma cha cadastral.
Outra diferena importante a questo de como acessamos as
variveis declaradas dentro de uma estrutura.
logica_2_livro_caderno.indb 51 7/12/2006 14:20:56
52
Universidade do Sul de Santa Catarina
Como podemos ler e escrever nessas variveis?
A resposta bastante simples. Basta especicarmos o nome do
registro criado, seguido de um ponto (.) e o nome da varivel.
Por exemplo, para acessar a varivel NOME, precisamos
especicar o nome do registro do qual ela pertence. Sendo assim,
FICHA.NOME. Observe que a varivel NOME no uma
varivel independente qualquer. Ela pertence ao registro FICHA.
Por isso, precisamos preceder o nome da varivel NOME com o
nome do registro FICHA seguido de um ponto (.).
Assim como na criao de vetores e matrizes, para a criao de
registros no precisamos especicar os endereos de memria
do computador. Isso feito automaticamente, sem que sequer
saibamos onde os valores esto armazenados na memria.
A nica coisa que sabemos que alocado um espao para
armazenar esses valores e que so armazenados em blocos de
memria.
- Na prxima seo voc vai saber como montar algoritmos com
registros.
SEO 2 - Operao com registros
Novamente, voc j deve ter percebido que no criamos qualquer
outra lgica de controle alm das j estudadas. mais uma
oportunidade de mostrar a voc a importncia dos comandos
bsicos de lgica de programao. Nesta seo, vamos mostrar
uma aplicao tpica de registros: o conceito de chas cadastrais.
A gura a seguir mostra uma possvel cha cadastral:
Nome: Idade:
Estado Civil:
Endereo:
Nmero:
Bairro: Cidade:
Estado: Telefone:

logica_2_livro_caderno.indb 52 7/12/2006 14:20:57
53
Lgica de Programao II
Unidade 3
Observando a gura anterior, podemos vericar que temos
variveis literais e numricas.
Vamos classic-las inicialmente: Nome, Estado Civil, Endereo,
Bairro, Cidade e Estado so variveis literais. Idade, Nmero
e Telefone de Contato so variveis numricas. Observe que
poderamos colocar Telefone de Contato como literal tambm.
Se quisssemos representar um nmero telefnico por
278-8080, isso um literal e no um valor numrico. Mas
para nosso exemplo, vamos considerar o Telefone de
Contato como sendo numrico. Para o telefone especifcado
devemos colocar ento como sendo 2788080.
Criaremos um registro para a cha cadastral. Iremos chamar esse
registro de FICHA. Sendo assim, em pseudocdigo, temos:
FICHA: registro
{variveis da cha}
m-registro
Agora vamos denir as variveis. Iremos especicar seis variveis
literais e trs variveis numricas. Colocaremos os nomes das
variveis de forma a no deixar qualquer tipo de dvida em
relao s constantes que sero armazenadas. Dessa forma, nosso
registro ser conforme a seguir:
FICHA: registro
{variveis da cha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: numrico
m-registro
Isso tudo. Nossa cha j est montada. Basta utiliz-la agora
acessando as variveis do registro. O algoritmo a seguir, mostra
um exemplo completo.
logica_2_livro_caderno.indb 53 7/12/2006 14:20:57
54
Universidade do Sul de Santa Catarina
Pseudocdigo:
incio
{declarao do registro FICHA}
FICHA: registro
{variveis da cha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO:
literal
IDADE, NUMERO, TELEFONE: numrico
m-registro
{entrada de dados}
escreva Nome:
leia FICHA.NOME
escreva Estado Civil:
leia FICHA.ESTADOCIVIL
escreva Idade:
leia FICHA.IDADE
escreva Endereo:
leia FICHA.ENDERECO
escreva Bairro:
leia FICHA.BAIRRO
escreva Nmero:
leia FICHA.NUMERO
escreva Cidade:
leia FICHA.CIDADE
escreva Estado:
leia FICHA.ESTADO
escreva Telefone de Contato:
leia FICHA.TELEFONE
m
No algoritmo anterior no mostramos nenhuma sada. O
exemplo foi apenas para mostrar como trabalhar com criar um
registro e como acessar suas variveis.
logica_2_livro_caderno.indb 54 7/12/2006 14:20:57
55
Lgica de Programao II
Unidade 3
Criando novos tipos de variveis
Muitas vezes, os tipos bsicos de variveis que utilizamos
at agora (numrico, literal e lgico) no so sucientes para
resolver um algoritmo. Seria interessante que pudssemos criar
tipos denidos pelo usurio. Por exemplo, um tipo de varivel
que armazenasse, ao mesmo tempo, um valor literal, um valor
numrico e um valor lgico. Vou lhe dar a boa notcia. Isso
possvel sim, graas estrutura de registros que acabamos
de estudar. Podemos fazer de um registro criado um tipo de
varivel.
Por exemplo, alm de termos os tipos bsicos como o
numrico, o literal e o lgico, poderamos ter tambm o
tipo FICHA. FICHA na verdade, um registro criado pelo
programador. Chamamos isso de tipo defnido pelo usurio.
Isso fantstico, pode acreditar. Alm de podermos criar
variveis, podemos criar agora, tambm tipos de variveis.
Mas como posso fazer isso e para que serve?
Bem, para criar um tipo registro, em pseudocdigo, necessrio
apenas colocar a palavra reservada tipo antes do nome do
registro, cando assim sua sintaxe:
tipo <nome do registro> = registro
<campos que comporo o registro>
m-registro
O comando tipo serve para criar novos tipos de variveis a partir
dos tipos bsicos.
logica_2_livro_caderno.indb 55 7/12/2006 14:20:57
56
Universidade do Sul de Santa Catarina
Por exemplo, no exerccio de para manipular uma fcha
cadastral colocado anteriormente, poderamos fazer do
registro FICHA um tipo e declarar variveis daquele tipo. A
sintaxe fcaria conforme a seguir:
tipo FICHA = registro
{variveis da cha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: numrico
m-registro
Para criar uma varivel do tipo FICHA, criamos da mesma
forma que criamos as variveis dos tipos primitivos. Por exemplo,
cha1: FICHA, onde cha1 agora uma varivel do tipo
FICHA. Passamos a acessar as variveis do registro FICHA a
partir da varivel cha1.
Exemplo: fcha1.NOME, fcha1.ENDERECO e assim por diante.
O que quero dizer que FICHA um tipo denido pelo
programador e que cha1 uma varivel do tipo FICHA que
ocupa um espao na memria para armazenar seis variveis
literais e trs variveis numricas, conforme nosso exemplo.
Assim, veja parte do algoritmo anterior atualizado:
logica_2_livro_caderno.indb 56 7/12/2006 14:20:57
57
Lgica de Programao II
Unidade 3
incio
{declarao do registro FICHA}
tipo FICHA = registro
{variveis da cha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: numrico
m-registro
cha1 : FICHA {declarao da varivel do tipo FICHA. Observe que o tipo
FICHA denido antes de ser utilizado. Isso obrigatrio, tendo em vista
que o programa precisa saber o que FICHA. Como denimos FICHA como
sendo um registro, ao especicar cha1 como sendo do tipo FICHA, nenhum
problema ser encontrado}
escreva Nome:
leia cha1.NOME
escreva Estado Civil:
leia cha1.ESTADOCIVIL
........ {restante do algoritmo}
m
Mas qual a utilidade de se criar tipos como no nosso
exemplo?
muito simples. Perceba que criamos apenas uma cha
cadastral de um hspede. Se quisssemos preencher o cadastro
para um novo hspede, bastaria criarmos outra varivel, cha2
por exemplo. Poderamos criar tantas chas quanto quisermos.
Considerando o tipo FICHA anteriormente criado, podemos
criar vrias variveis:
cha1, cha2, cha3: FICHA.
Cada varivel representa uma cha para cadastrar um hspede.
como se tivssemos 3 chas cadastrais para serem preenchidas
na mo. Para acessar o nome de cha1, apenas colocaramos
cha1.NOME. Para acessar o nome de cha2, cha2.NOME,
e para cha3, cha3.NOME. Como cada varivel, nesse caso,
cha1, cha2 e cha3 so trs blocos de memrias independentes,
logica_2_livro_caderno.indb 57 7/12/2006 14:20:57
58
Universidade do Sul de Santa Catarina
como se tivssemos trs variveis independentes em locais de
memria diferentes, porm, cada uma delas contendo seis variveis
literais e trs numricas, conforme voc j leu.
Criando um conjunto de registros
Precisamos incrementar nosso algoritmo anterior. Ele permite
o cadastramento de 5 hspedes apenas. Nosso hotel tem 100
quartos. Podemos admitir at 100 hspedes, certo? Devemos
criar 100 chas cadastrais. E agora? Voc ter problemas se tiver
que criar 100 variveis do tipo FICHA.
Lembra para que servem os vetores? Ser que voc
deduziu que podemos utilizar vetores para esse caso?
Vamos por analogia: se estamos precisando armazenar 100
valores numricos, criamos um vetor do tipo numrico; se
precisamos armazenar 100 nomes de clientes, criamos um vetor
do tipo literal. Raciocinando da mesma maneira, se precisarmos
armazenar 100 chas de clientes, criamos um vetor de FICHA
(tipo denido por ns). Na sintaxe de pseudocdigo teramos:
chas: vetor [100] FICHA. Agora, denimos um vetor de 100
posies chamado de chas, onde cada posio (quadrado) tem
uma varivel do tipo FICHA. Veja a seguir:
Ficha 1 Ficha 2 Ficha 3 ... Ficha 99
Ficha1 est na posio 0 do vetor chas, Ficha2 est na posio 1
do vetor chas, e assim sucessivamente.
Mas o que uma FICHA mesmo? FICHA um
registro que tem os seguintes campos defnidos
anteriormente:
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE,
ESTADO: literal
IDADE, NUMERO, TELEFONE: numrico.
logica_2_livro_caderno.indb 58 7/12/2006 14:20:57
59
Lgica de Programao II
Unidade 3
Como podemos acessar os dados de cada cha dentro do
vetor? Bem, de forma similar ao acesso dos dados em vetores,
precisamos saber qual a posio que queremos acessar do vetor.
Depois de sabermos qual o ndice do vetor, devemos lembrar que
dentro de cada posio do vetor temos um registro com aqueles
campos ou variveis denidas. Veja a gura a seguir.
[0] [1] [2] ... ... Ficha 99
Para acessar um desses campos basta colocar um ponto (.)
seguido do nome da varivel denida dentro do registro.
Por exemplo, para acessar o nome do primeiro hspede
(defnido na posio 0 do vetor fchas), colocamos fchas [0].
NOME; para acessar a idade dessa mesma fcha, colocarmos
fchas [0].IDADE e assim por diante.
Vamos supor que estamos cadastrando o cliente 60 do nosso
hotel. Como poderamos fazer?
Bem, devemos lembrar que, como um vetor sempre comea na
posio 0 (zero), assim o cliente 60 est denido da posio 59
do nosso vetor, certo? Desta forma, podemos preencher os dados
conforme a seguir:
chas[59].NOME Luiz Silva
chas[59].ESTADOCIVIL solteiro
chas[59].ENDERECO Avenida Paulista
chas[59].IDADE 30
{e assim para os demais dados deste hspede}.

nome

estadocivil

endereco

bairro

cidade

estado

idade, numero

telefone

nome

estadocivil

endereco

bairro

cidade

estado

idade, numero

telefone
logica_2_livro_caderno.indb 59 7/12/2006 14:20:58
60
Universidade do Sul de Santa Catarina
- Olha a a importncia dos vetores novamente. Na seo seguinte
voc ver exemplos com cdigo pronto para voc estudar e tirar
dvidas. Tente implementar cada exerccio sozinho, depois compare
com a soluo proposta. Faa tantas vezes voc quiser. Quanto mais
exerccios voc zer, melhor voc ser.
SEO 3 - Algoritmos com manipulao de registros
Veja agora alguns exerccios resolvidos com manipulao de
registros.
1. Cadastrar os dados gerais de 300 disciplinas que os
professores lecionam: nome, contedo, freqncia e nota
mnimas para aprovao. Ler cinco nomes de disciplinas e
mostrar freqncia e mdia mnimas para aprovao em
cada uma.
Pseudocdigo:
incio
tipo FICHA = registro {criando um tipo FICHA}
NOME, CONTEUDO : literal
FREQUENCIA, MEDIA : numrico
m-registro
DISCIPLINAS : vetor [300] FICHA {criando um vetor para cadastrar
300 disciplinas, onde cada disciplina constituda por um nome
(NOME), contedo (CONTEUDO), freqncia (FREQUENCIA) e mdia
(MEDIA)}
NOMECONSUL : literal {Nome da disciplina a ser consultada}
CONT, POS : numrico {Variveis para controle de lao de repetio}

{Entrada de dados para 300 disciplinas}

para POS de 0 at 299 passo 1 faa
escreva Digite o nome da disciplina:
leia DISCIPLINAS[POS].NOME
escreva Digite o contedo da disciplina:
leia DISCIPLINAS[POS].CONTEUDO
escreva Digite a freqncia mnima necessria para aprovao:
leia DISCIPLINAS[POS].FREQUENCIA
logica_2_livro_caderno.indb 60 7/12/2006 14:20:58
61
Lgica de Programao II
Unidade 3
escreva Digite a mdia mnima necessria para aprovao:
leia DISCIPLINAS[POS].MEDIA
m-para
{vericao de 5 disciplinas, conforme o enunciado}
para CONT de 1 at 5 passo 1 faa
escreva Digite o nome da disciplina a ser consultada:
leia NOMECONSUL {nome da disciplina a ser consultada}
POS 0 {inicializa a varivel POS pois o vetor comea em 0}
enquanto NOMECONSUL < > DISCIPLINAS[POS].NOME ou POS < 300
{percorre todo o vetor DISCIPLINAS at que a varivel NOME-
CONSUL seja igual a DISCIPLINAS [POS].NOME e POS < 300. Utilize aqui,
como exerccio, uma tabela-verdade para saber quando a condio
resultante se torna falsa. uma excelente reviso da operao lgica ou.}
POS POS + 1 {enquanto no encontrar a disciplinas digitadas,
soma POS de 1, o que signica pular para a prxima posio do vetor}
m-enquanto
se NOMECONSUL = DISCIPLINAS[POS].NOME ento
escreva Disciplina:, DISCIPLINAS[POS].NOME
escreva Mdia Mnima:, DISCIPLINAS[POS].MEDIA
escreva Freq. Mnima:, DISCIPLINAS[POS].FREQUENCIA
seno
escreva Disciplina no consta no cadastro !
m-se
m-para
m
2. Elaborar um algoritmo para cadastrar 5000 CDs de uma
loja. Os dados a serem cadastrados so: cdigo, nome do CD,
nome do cantor/grupo, tipo de msica, produtora e ano de
produo. Exibir os cdigos e nomes dos CDs solicitados por
um usurio por meio do nome de um cantor ou grupo musical.
Pseudocdigo:

incio
{declarao do tipo FICHA}
tipo FICHA = registro
NOME, CANTOR, TIPO, PRODUTORA : literal
CODIGO, ANOPRODUCAO : numrico
m-registro
{declarao do vetor CDS. Cada posio do vetor contm um registro do
tipo FICHA}
CDS : vetor [5000] FICHA
CANTORCONSUL : literal {Cantor a ser consultado}
POS : numrico {varivel para percorrer o vetor CDS}
logica_2_livro_caderno.indb 61 7/12/2006 14:20:58
62
Universidade do Sul de Santa Catarina
{Dados de entrada para o programa de cadastramento de CDS}
para POS de 0 at 4999 passo 1 faa
escreva Digite o cdigo do CD:
leia CDS[POS].CODIGO
escreva Digite o nome do CD:
leia CDS[POS].NOME
escreva Digite o nome do cantor ou do grupo:
leia CDS[POS].CANTOR
escreva Digite o tipo de msica:
leia CDS[POS].TIPO
escreva Digite o nome da produtora:
leia CDS[POS].PRODUTORA
escreva Digite o ano de produo (somente os nmeros) do CD:
leia CDS[POS].ANOPRODUCAO
m-para
{processamento do algoritmo}
escreva Digite o nome do cantor ou grupo a ser consultado (ou FIM para
encerrar):
leia CANTORCONSUL
enquanto CANTORCONSUL < > FIM faa
POS 0
enquanto CANTORCONSUL < > CDS[POS].CANTOR ou POS < 5000
{percorre cada posio do vetor para vericar a existncia do cantor}
POS POS + 1
m-enquanto
se CANTORCONSUL = CDS[POS].CANTOR ento
escreva Cdigo:, CDS[POS].CODIGO
escreva Nome do CD:, CDS[POS].NOME
seno
escreva Cantor ou grupo musical no possui nenhum CD cadastrado !
m-se
{Observe aqui que estamos solicitando que o usurio entre com o nome
do cantor ou a palavra FIM novamente. Perceba que a primeira vez ocor-
reu fora do lao de repetio. Dessa vez, o comando de leitura realizado
para permitir com que o usurio nalize o programa digitando FIM. Caso
no colocssemos essa opo, teramos um lao innito. Lembra que todo
algoritmo tem que possuir um m?}
escreva Digite o nome do cantor ou grupo a ser consultado (ou FIM para
encerrar):
leia CANTORCONSUL
m-enquanto
m
logica_2_livro_caderno.indb 62 7/12/2006 14:20:58
63
Lgica de Programao II
Unidade 3
Sntese
Voc acaba de nalizar mais uma etapa na busca pela excelncia.
Viu que para implementar variveis de diferentes tipos utilizamos
um registro, que nada mais do que um recurso que permite a
criao de diferentes tipos de variveis em um mesmo bloco de
memria do computador, facilitando, sobretudo, o desempenho
do programa.
Quando criamos um registro, criamos um espao na memria do
computador que permite armazenar dados heterogneos, ou seja,
constantes de vrios tipos. como se fosse uma cha de dados,
organizada de forma que os dados esto prximos um dos outros
dentro da memria do computador.
A sintaxe em pseudocdigo para criar um registro a seguinte:
<nome do registro>: registro
<campos que comporo o registro>
m-registro
Viu tambm que a lgica de programao permite ao usurio
criar seus prprios tipos. Isso facilita bastante porque nem
tudo que estamos trabalhando so apenas nmeros, literais ou
lgicos. H uma combinao desses tipos bsicos. A sintaxe para
implementar um tipo registro a seguinte:
tipo <nome do registro>: registro
<campos que comporo o registro>
m-registro
Por m, aprendeu que podemos construir uma poderosa estrutura
de dados misturando vetores com registros. Podemos construir
vetores de registros, onde cada posio do vetor um registro de
dados. O acesso a cada elemento dentro do vetor a seguinte:
<nome do vetor>[ndice do vetor].<campo ou varivel que compe o registro}
preciso, agora, muita prtica para que possas seguir adiante.
Na prxima unidade voc conhecer alguns algoritmos de
complexidade maior, que envolvero todos os tpicos at agora
estudados. A unidade conta com muitos exemplos prontos para
que voc estude, entenda e possa implementar esses algoritmos.
Boa sorte e at l!
logica_2_livro_caderno.indb 63 7/12/2006 14:20:58
64
Universidade do Sul de Santa Catarina
Atividades de auto-avaliao
1. Voc responsvel pelo cadastramento de um hspede em um hotel
de luxo em sua cidade. Crie um registro de dados que implementa
essa fcha cadastral. Escolha as variveis de maior importncia para o
cadastro do hspede.
logica_2_livro_caderno.indb 64 7/12/2006 14:20:59
65
Lgica de Programao II
Unidade 3
2. Monte um algoritmo para cadastrar e imprimir os dados pessoais de
vrios professores de um sistema de administrao escolar. Os dados
pessoais so: nome, endereo, cidade, estado, CEP, telefone, CPF, RG,
data de nascimento, grau de escolaridade, curso em que se formou.
logica_2_livro_caderno.indb 65 7/12/2006 14:20:59
66
Universidade do Sul de Santa Catarina
3. Cadastre imprima os dados das ftas de vdeo de uma locadora: cdigo
do flme, nome, tipo de flme, durao, produtor, ator principal, diretor
a ano de produo.
logica_2_livro_caderno.indb 66 7/12/2006 14:20:59
67
Lgica de Programao II
Unidade 3
4. Cadastre os dados dos 200 funcionrios de uma empresa: cdigo do
funcionrio, nome, endereo, data de nascimento, cidade, UF, CEP,
telefone, CPF, RG, grau de escolaridade, nmero de dependentes
e nome do cnjuge. Exibir nomes, endereos e telefones de 20
funcionrios solicitados por um usurio por meio dos cdigos de
funcionrios.
logica_2_livro_caderno.indb 67 7/12/2006 14:20:59
68
Universidade do Sul de Santa Catarina
5. Ao criar um sistema de cadastro de clientes de uma lgica de
informtica, onde so necessrios os seguintes dados: nome do cliente,
CPF e telefone de contato, poderamos implementar o algoritmo para
cadastrar 50 clientes de duas maneiras:
Primeira maneira:
incio
NOME: vetor[50] literal
CPF: vetor[50] literal
FONE: vetor[50] numrico
..... {implementao do algoritmo}
m
Segunda maneira:
incio
tipo FICHA = registro
NOME: literal
CPF: literal
FONE: numrico
m-registro
chas: vetor[50] FICHA {declarao de um vetor de FICHAS}
..... {implementao do algoritmo}
m

Explique com suas prprias palavras as diferenas entre as duas formas
de implementaes citadas e as vantagens em se optar pela segunda
maneira.
logica_2_livro_caderno.indb 68 7/12/2006 14:20:59
69
Lgica de Programao II
Unidade 3
Saiba mais
MAGRI, Joo Alexandre. Lgica de Programao - Ensino
Prtico.
MANZANO, Jos Augusto N. G.; OLIVEIRA, Jayr
Figueiredo de. Estudo Dirigido de Algoritmos.
FORBELLONE, Andr Luiz Villar; EBERSPCHER,
Henri Frederico. LGICA de programao: a construo de
algoritmos e estruturas de dados.
logica_2_livro_caderno.indb 69 7/12/2006 14:20:59
logica_2_livro_caderno.indb 70 7/12/2006 14:20:59
UNIDADE 4
Tpicos avanados em
algoritmos computacionais 4
Objetivo de aprendizagem
Identifcar os comandos e compreender a lgica em
pseudocdigo, proposta para resolver o problema.
Sees de estudo
Seo 1 Implementao de algoritmos de ordenao.
Seo 2 Implementao de algoritmos de busca.
logica_2_livro_caderno.indb 71 7/12/2006 14:20:59
72
Universidade do Sul de Santa Catarina
Para incio de conversa
Voc est quase nalizando a disciplina de Lgica de
Programao II. Falta apenas a parte de modularizao. Antes
porm, nada mais importante do que treinar, treinar e treinar
todos os comandos lgicos vistos at agora. Voc vai estudar
algumas aplicaes de interesse no mundo no somente da web
mas em todas as formas de programao, como por exemplo,
procurar por um nome dentro de um cadastro de clientes ou
ordenar uma lista de clientes por ordem alfabtica.
Nesta unidade, vamos ver algumas aplicaes que envolvero a
reviso de todos os conceitos, desde Lgica de Programao I
at a atual. O objetivo principal fazer com que voc identique
os comandos e entenda a lgica em pseudocdigo, proposta para
resolver o problema.
O mais importante agora fazer os algoritmos antes mesmo
de olhar a soluo. Tente fazer uma, duas ou mais vezes, at
entender por completo o problema e a soluo encontrada. Aps
o exerccio, observe a soluo proposta e compare com o que voc
fez. Se optar por estudar a soluo proposta em primeiro lugar,
mesmo assim, tente fazer o algoritmo sozinho para vericar se
realmente entendeu. So fascinantes os desaos aqui propostos.
Esta coletnea de exemplos e exerccios vai fazer de voc um
programador mais seguro e pronto para iniciar outras conquistas.
SEO 1 - Implementao de algoritmos de ordenao
Voc se lembra dos passos para se fazer um bom algoritmo?
Para escrever um algoritmo precisamos descrever a seqncia de
instrues, de maneira simples e objetiva. Para isso, utilizamos
algumas tcnicas:
1. Usar somente um verbo por frase.
2. Imaginar que voc est desenvolvendo um algoritmo
para pessoas que no trabalham com informtica.
3. Usar frases curtas e simples.
Em caso de dvida,
consulte a Unidade 3 de
Lgica de Programao I.
logica_2_livro_caderno.indb 72 7/12/2006 14:20:59
73
Lgica de Programao II
Unidade 4
4. Ser objetivo.
5. Procurar usar palavras que no tenham sentido dbio.
Ao passo de cada algoritmo, mostro a seguir algumas dessas
e outras regras que nos possibilita construir algoritmos mais
complexos de alta qualidade.
Pronto para esse desao? Respire fundo e mos obra!
Problema 1: Imagine um vetor com cinco elementos conforme
descrito a seguir.
10.0 8.0 9.0 7.0 8.5
Como coloc-lo em ordem crescente de tal maneira que os
nmeros sejam dispostos na seguinte ordem?
7.0 8.0 8.5 9.0 10.0
Perceba que h uma troca dos valores dentro do vetor.
Por exemplo, o nmero 10 que estava na posio 0 foi para
a posio 4. O nmero 8 fcou na mesma posio, ou seja,
posio 1 em ambos os vetores. O nmero 9 foi da posio
2 para a posio 3, o nmero 7 da posio 3 para a posio
0 e o nmero 8.5 foi da posio 4 para a posio 2. Fizemos
uma reordenao dos nmeros de forma a se mostrarem
em ordem crescente.
Essa aplicao um exemplo dentre tantas outras, por exemplo,
ordenar nomes de clientes em ordem alfabtica para mostrar
em uma pgina web; mostrar em um cadastro de alunos, os
alunos que possuem as melhores notas, ordenadas em ordem
decrescente; mostrar no site do DETRAN os motoristas com
maiores multas; e assim sucessivamente.
O algoritmo que vamos aplicar aqui serve para todos os casos
citados. o mtodo da Bolha ou em ingls Bubble Sort.
logica_2_livro_caderno.indb 73 7/12/2006 14:20:59
74
Universidade do Sul de Santa Catarina
Solucionando o problema em passos
1. Vamos iniciar nosso algoritmo criando um vetor de 5 posies:
Pseudocdigo:
incio
NOTAS: vetor[5] numrico {declarao do vetor de 5 posies}
2. Criado o vetor NOTAS, precisamos ler os valores e armazen-
los nesse vetor. Utilizamos a estrutura de repetio para/faa/
m-para para percorrer todo o vetor. Precisamos criar uma
varivel de contagem. Vamos cham-la de CONT.
CONT: numrica
para CONT de 0 at 4 passo 1 faa
escreva Entre com uma nota:
leia NOTAS[ CONT ]
m-para
O vetor poderia se mostrar conforme a seguir:
10.0 8.0 9.0 7.0 8.5
Perceba que estamos lendo os nmeros de uma forma aleatria,
ou seja, sem qualquer seqncia pr-denida. Nosso objetivo
coloc-los em ordem crescente, ou seja, do menor para o maior.
3. Sempre que quisermos ordenar nmeros e/ou literais,
precisamos realizar uma comparao entre dois nmeros e/
ou literais para saber quem maior ou menor. Lembrando
de Lgica de Programao I, quando realizamos uma
comparao, realizamos entre dois e apenas dois valores
por vez. Isso sugere que devemos realizar a comparao
dos valores do vetor NOTAS tomando dois a dois, ou seja,
comparamos inicialmente a posio 0 com a posio 1 do vetor
NOTAS, seguido da posio 1 com a 2, da 2 com a posio
3 e assim sucessivamente. Precisamos saber de antemo
que posio estamos testando e quando nalizado o teste.
Precisamos, assim, criar 2 novas variveis: POS, armazena
logica_2_livro_caderno.indb 74 7/12/2006 14:20:59
75
Lgica de Programao II
Unidade 4
a posio de teste e ULTIMA, armazena o ltimo teste de
comparao. Podemos perceber que POS tem valor inicial de
zero (ndice inicial do vetor) e ULTIMA tem valor inicial de 4
(ndice nal do vetor).
POS, ULTIMO: numrico
POS 0
ULTIMO 4
10.0 8.0 9.0 7.0 8.5
4. Realizamos a primeira comparao, entre a primeira e
a segunda posio do vetor. O teste feito por meio da
pergunta: 10.0 maior do que 8? e o objetivo colocar o
menor na primeira posio. Podemos vericar que a resposta
verdadeira.
5. Como a resposta do passo 4 foi positiva, precisamos trocar
o valor 10.0 pelo valor 8.0, ou seja, o valor 8.0 passa para a
posio 0 do vetor NOTAS e o valor 10.0 vai para a posio 1
do mesmo vetor. Como podemos realizar esse passo?
A resposta simples desde que criemos uma nova varivel.
Chamaremos essa varivel de AUX (varivel auxiliar na troca
entre os valores). A idia passar o contedo de NOTAS [0]
para NOTAS [1] e vice-versa. Com auxlio de AUX podemos
fazer o seguinte:
AUX NOTAS [ 0 ] {guardo o valor inicial do vetor de NOTAS. No
exemplo, AUX recebe o valor 10.0}
NOTAS [ 0 ] NOTAS[ 1 ] {o vetor NOTAS na posio 0 recebe o
valor contido na posio 1, ou seja, NOTAS[ 0 ] = 8.0}
NOTAS [ 1 ] AUX { o vetor NOTAS na posio 1 recebe o valor
contido na varivel AUX, ou seja, NOTAS[ 0 ] = 10.0}.
POS ULTIMA
logica_2_livro_caderno.indb 75 7/12/2006 14:21:00
76
Universidade do Sul de Santa Catarina
Sendo assim, observe que os valores das variveis foram trocados
com a utilizao da varivel auxiliar AUX. Temos agora a
seguinte formao do vetor de NOTAS:
8.0 10.0 9.0 7.0 8.5
6. Para realizar nosso prximo passo, vamos testar agora a
posio 1 com a posio 2 do vetor, conforme o passo 3. Para
fazermos esse teste, devemos incrementar a varivel POS de 1,
fazendo com que ela assuma o valor 1.
POS POS + 1 {como a varivel POS tem valor inicial de 0,
incrementando 1, a varivel POS passa a ter valor 1.}
8.0 10.0 9.0 7.0 8.5
7. Realizamos a segunda comparao, entre a segunda e terceira
posio do vetor. O teste feito por meio da pergunta: 10.0
maior do que 9.0? e o objetivo colocar o menor na segunda
posio. Podemos vericar que a resposta verdadeira.
8. Executamos o passo de maneira anloga ao passo 5, mas agora
observando que estamos testando entre as posies 1 e 2 do
vetor NOTAS:
AUX NOTAS [ 1 ] {guardo o valor da posio 1 vetor de NOTAS na
varivel AUX. No exemplo, AUX recebe o valor 10.0}
NOTAS [ 1 ] NOTAS[ 2 ] {o vetor NOTAS na posio 1 recebe o
valor contido na posio 2, ou seja, NOTAS[ 1 ] = 9.0}
NOTAS [ 2 ] AUX { o vetor NOTAS na posio 2 recebe o valor
contido na varivel AUX, ou seja, NOTAS[ 2 ] = 10.0}.
POS ULTIMA
POS ULTIMA
logica_2_livro_caderno.indb 76 7/12/2006 14:21:00
77
Lgica de Programao II
Unidade 4
Sendo assim, observe que os valores das variveis foram trocados
com a utilizao da varivel auxiliar AUX. Temos agora a
seguinte formao do vetor de NOTAS:
8.0 9.0 10.0 7.0 8.5
9. Executamos o passo 6, 7 e 8 novamente, porm nossa posio
de teste agora a terceira e iremos comparar os valores
numricos armazenados na terceira e quarta posio do vetor
de NOTAS.
8.0 9.0 10.0 7.0 8.5
Como resposta da execuo do passo 8, temos a seguinte
formao do vetor:
8.0 9.0 7.0 10.0 8.5
10. Executamos o passo 6, 7 e 8 novamente, porm nossa posio
de teste agora a quarta e iremos comparar os valores
numricos armazenados na quarta e quinta posio do vetor
de NOTAS.
8.0 9.0 7.0 10.0 8.5
POS ULTIMA
POS ULTIMA
POS ULTIMA
POS ULTIMA
logica_2_livro_caderno.indb 77 7/12/2006 14:21:00
78
Universidade do Sul de Santa Catarina
11. Como resposta da execuo do passo anterior, temos a
seguinte formao do vetor:
8.0 9.0 7.0 8.5 10.0
12. Observando o resultado do passo anterior, podemos perceber
que o nmero 10.0 est na ltima posio do vetor e l dever
car, tendo em vista que no h nmero maior do que 10.0
dentro do vetor de NOTAS, certo? Atingimos, dessa forma
a posio nal do vetor NOTAS. Precisamos recomear
a ordenao, colocando a varivel POS em 0 e a varivel
ULTIMA em ULTIMA-1, ou seja, ULTIMA recebe
valor 3. Mas por que isso? A resposta que no precisamos
comparar mais o valor 10.0 que est na ltima posio.
Lembra que o nmero 10.0 estava inicialmente na posio 0
do vetor e que fomos realizando a comparao com valores
subseqentes para vericar se ele era maior ou menor? Em
nosso exemplo, coincidiu que o valor 10.0 era o maior de
todos. Sendo assim, em cada passo realizamos as trocas dos
nmeros at coloc-lo na posio nal do vetor NOTAS.
O que nos interessa agora reinicializar a ordenao da
posio 0 at a posio 3 do vetor de NOTAS, conforme a
seguir:
8.0 9.0 7.0 8.5 10.0
13. Repetimos todos os passos anteriores. Como resultado,
temos a seguinte ordenao, j decrementando a varivel
ULTIMA de 1 tambm:
8.0 7.0 8.5 9.0 10.0
POS ULTIMA
POS ULTIMA
logica_2_livro_caderno.indb 78 7/12/2006 14:21:00
79
Lgica de Programao II
Unidade 4
14. Repetimos novamente os passos, temos o seguinte vetor:
7.0 8.0 8.5 9.0 10.0
At quando devemos repetir os passos de ordenao?
Perceba que executamos os passos at que a varivel ULTIMA
assuma valor 1. Para cada valor da varivel ULTIMA, executamos
as repeties para a varivel POS de 0 at ULTIMA-1.
15. Observe que o vetor est ordenado em forma crescente, do
menor valor para o maior. Nosso objetivo foi atingido.
Veja o resultado em pseudocdigo. Execute o algoritmo passo
a passo, de forma a entender o que est colocado. Desenhe
um vetor com quantos elementos voc desejar e execute os
comandos colocados em pseudocdigo.
POS ULTIMA
incio
NOTAS: vetor [5] numrico {declarao do vetor de 5 posies}
POS, ULTIMA, AUX: numrico
{entrada de dados}
para POS de 0 at 4 passo 1 faa
escreva Entre com a Nota:
leia NOTAS[ POS ] {armazena os valores lidos no vetor NOTAS}
m-para
{inicializao das variveis}
POS 0 {inicializa a varivel POS}
ULTIMA 4 {inicializa a varivel ULTIMA}
AUX 0 {inicializa a varivel AUX, varivel que auxilia na troca de
valores entre as posies do vetor NOTAS}
{processamento da ordenao dos nmeros}
enquanto ULTIMA < > 0 faa
logica_2_livro_caderno.indb 79 7/12/2006 14:21:00
80
Universidade do Sul de Santa Catarina
enquanto POS < > ULTIMA faa
se NOTAS[ POS ] > NOTAS[ POS + 1 ] ento
{processo de troca dos nmeros}
AUX NOTAS [ POS ]
NOTAS [ POS ] NOTAS[ POS + 1]
NOTAS [ POS + 1] AUX
m-se
{incrementa posio do vetor}
POS POS + 1
m-enquanto
{inicializa varivel POS e decrementa a varivel ULTIMA de 1}
POS 0
ULTIMA ULTIMA -1
m-enquanto
m
SEO 2 - Implementao de algoritmos de pesquisa
Mtodos de pesquisa, tambm chamados de
mtodos de busca, so algoritmos utilizados para
localizar valores dentro de um vetor.
Na seo anterior, aprendemos a como ordenar os valores de
um vetor. Nesta seo, procuramos por determinados valores de
interesse dentro do vetor, seja os elementos do vetor ordenados
ou no. H vrias tcnicas de ordenao. Voc vai estudar duas
aplicaes bem simples:
O mtodo de procura seqencial.
O mtodo de procura binria.
logica_2_livro_caderno.indb 80 7/12/2006 14:21:00
81
Lgica de Programao II
Unidade 4
Mtodo de procura seqencial
O mtodo de pesquisa seqencial o mais simples de todos. Um
vetor pesquisado (percorrido) at encontrar o valor desejado
ou at que o vetor termine. um mtodo bastante aplicado
para vetores com valores desordenados, ou seja, que no esto
ordenados em ordem crescente ou decrescente de valores.
Vamos supor o seguinte exemplo: Um vetor de 5 valores
representando as idades dos clientes de uma loja de vdeo
locadora. Precisamos saber se h clientes com idade de 15
anos, por exemplo. A representao do vetor mostrada a
seguir:
27 44 14 15 20
Solucionando o problema em passos
1. Inicialmente, precisamos criar nosso vetor de 5 posies. Esse
vetor armazenar as idades de nossos clientes. Vamos permitir
com que o usurio especique as idades que desejar, ou seja,
ser uma entrada de dados via teclado.
Pseudocdigo:
incio
IDADES: vetor [5] numrico
ENTRADA: numrico {varivel utilizada para armazenar a entrada de uma
idade a ser pesquisada no vetor IDADES.}
CONT: numrico {varivel contadora}
{entrada de dados: idade dos clientes. Estamos percorrendo o vetor da
posio 0 at a posio 4.}
para CONT de 0 at 4 passo 1 faa
escreva Especique a idade do cliente:
leia IDADES[CONT] {observe que a varivel CONT vai de 0 at 4}
m-para

logica_2_livro_caderno.indb 81 7/12/2006 14:21:01
82
Universidade do Sul de Santa Catarina
2. Preenchido o vetor, iremos realizar nosso processamento. O
processamento simplesmente encontrar a idade especicada
pelo usurio. Vamos precisar entrar com a idade do cliente e
vericar se ela existe ou no no vetor IDADES.
{processamento de procura}
escreva Entre com a idade a ser procurada no cadastro de clientes:
leia ENTRADA
{agora, vamos percorrer o vetor IDADES para vericar se existe ou no o valor
numrico digitado pelo usurio e armazenado na varivel ENTRADA. Vamos supor
que voc especique a idade 15, ou seja, a varivel ENTRADA possui valor numrico
15. Dessa forma, vamos percorrer todo o vetor IDADES procurando pelo valor
numrico 15. O processo bem simples. Para cada lao de repetio, lemos o valor
contido na posio do vetor. Se encontrarmos o valor que estamos procurando,
nalizamos a pesquisa. Caso contrrio, percorremos o vetor IDADES at encontrar
o valor desejado ou at o m do vetor. Vamos inicializar a varivel CONT para ser
reutilizada, ou seja, para percorrer o vetor novamente da posio 0 at a posio 4
do vetor IDADES}
CONT 0
enquanto IDADES[ CONT ] < > ENTRADA e CONT <= 4 faa
{perceba que, enquanto o valor no for encontrado (IDADES [ CONT ] < > ENTRADA)
e no atingirmos o nal do vetor IDADES (CONT <= 4 ), incrementamos a varivel
CONT de 1. Isso signica irmos de posio em posio do vetor IDADES. Observe
a instruo lgica e aqui no exemplo. Como exerccio, faa a tabela verdade e
verique quando a condio se torna falsa, ou seja, quando que o lao de repetio
nalizado.}
CONT CONT + 1
m-enquanto
{na seqncia, verica-se se h algum valor no vetor igual ao valor lido pelo cliente}
se IDADES[ CONT ] = ENTRADA ento
escreva O nmero , ENTRADA, est na posio , CONT
seno
escreva O nmero , ENTRADA, no foi encontrado.
m-se
m-algoritmo
logica_2_livro_caderno.indb 82 7/12/2006 14:21:01
83
Lgica de Programao II
Unidade 4
3. O algoritmo completo mostrado a seguir:
incio
IDADES: vetor [5] numrico
ENTRADA: numrico
CONT: numrico
para CONT de 0 at 4 passo 1 faa
escreva Especique a idade do cliente:
leia IDADES[ CONT ]
m-para
CONT 0
escreva Entre com a idade
leia ENTRADA
enquanto IDADES[ CONT ] < > ENTRADA e CONT <= 4 faa
CONT CONT + 1
m-enquanto
se IDADES[ CONT ] = ENTRADA ento
escreva O nmero , ENTRADA, est na posio , CONT
seno
escreva O nmero , ENTRADA, no foi encontrado.
m-se
m-algoritmo
Mtodo de pesquisa binria
Esse mtodo aplicado apenas para vetores ordenados,
ou seja, os valores esto em ordem crescente de valores.
Dessa forma, para aplicar esse mtodo precisamos garantir
que o vetor esteja ordenado, conforme a seo 1 desta
unidade.
A grande vantagem desse mtodo a rapidez, tendo em vista
que o nmero de dados pesquisados menor. Apenas parte do
vetor lida, o que signica uma reduo importante de tempo de
procura, principalmente se temos um vetor de dimenso grande,
por exemplo, 1000 elementos.
logica_2_livro_caderno.indb 83 7/12/2006 14:21:01
84
Universidade do Sul de Santa Catarina
Voc deve estar se perguntando: como assim, que
somente parte do vetor lida? A explicao vem no
prprio desenvolvimento do algoritmo.
Porm, em vez de mostramos todo o algoritmo j desenvolvido,
vamos mexer com o seu potencial. Iremos apenas colocar os
passos e voc ser o responsvel pela montagem do pseudocdigo.
Que belo desao voc tem pela frente. A soluo completa est
no nal da unidade, para voc vericar a sua soluo encontrada.
Dica: Tente resolver o algoritmo, ao menos algumas vezes, antes
de olhar a soluo. um exerccio que tem raciocnio lgico mais
aprimorado do que todos os anteriores. Vamos l ento?
Solucionando o problema
1. Lembrando sempre que o vetor assumido como sendo
ordenado em ordem crescente. Vamos supor o seguinte vetor
chamado de VET:
10 44 58 78 100
Vamos supor tambm que estamos a procura do nmero 78.
Ser que precisamos percorrer o vetor desde o seu
incio at encontrar o nmero 78 na posio 3 do
vetor VET, sabendo de antemo que o mesmo est
ordenado em ordem crescente?
Ser que no poderamos ler o valor na posio
central do vetor, ou prxima do centro do vetor VET e
verifcar se o valor contido nessa posio maior ou
menor do que o valor que estamos procurando?
Em nosso exemplo, podemos vericar que o nmero central do
vetor VET est na posio 2 do vetor e o nmero 58. Como
estamos procurando o nmero 78 e esse maior do que 58,
iremos procurar o nmero 78 apenas na segunda metade do vetor
VET, ou seja, da posio 2 at a posio 4, sem precisar percorrer
logica_2_livro_caderno.indb 84 7/12/2006 14:21:01
85
Lgica de Programao II
Unidade 4
o vetor desde o seu incio. Parece uma vantagem enorme voc no
acha, principalmente quando estamos trabalhando com vetores
de dimenses maiores?
10 44 58 78 100
Como o valor 78 est na segunda metade do vetor VET,
realizamos uma nova diviso, agora considerando apenas os
nmeros nas posies [2], [3] e [4]. A metade do vetor a posio
[3], que nesse caso o nmero 78, ou seja, o nmero que estamos
procurando.
58 78 100
Se fssemos realizar a pesquisa seqencialmente, teramos 4
passos at encontrar o nmero 78. Teramos que ler da posio
0 at a posio 3 do vetor VET. Com a pesquisa binria, onde
dividimos o vetor ao meio, realizamos 2 passos apenas, ou seja,
duas divises at encontrar o nmero 78. Vamos parte lgica do
problema?
1. Monte um vetor VET com os seguintes valores: Montar um
vetor signica cri-lo e preench-lo com os valores colocados
na seqncia.
10 44 58 78 100
2. Estabelea o nmero 78 como o valor a ser pesquisado. Esse
nmero dever ser armazenado na varivel NUMEROLIDO.
3. Crie duas variveis, uma para armazenar a posio inicial do
vetor e outra para armazenar a posio nal. As variveis podem
ser chamadas de PRIMEIRA e ULTIMA respectivamente.
Lembre-se de que a posio inicial do vetor a posio 0.
Some os dois valores e divida por 2 para achar a posio que
corresponde metade do vetor VET. Armazena o valor na
varivel METADE.
logica_2_livro_caderno.indb 85 7/12/2006 14:21:01
86
Universidade do Sul de Santa Catarina
METADE = (PRIMEIRA + ULTIMA)/2
PRIMEIRA: 0
ULTIMA: 4
METADE: (0 + 4)/2 = 2
10 44 58 78 100
4. Para o primeiro teste, 78 igual a 58? o resultado falso.
Para o segundo teste, 78 maior do que 58? o resultado
verdadeiro. Portanto, o valor que estamos procurando s
pode estar entre a metade do vetor VET at a posio nal.
Como j vericamos que o valor na metade do vetor 58, no
precisamos test-lo novamente. Sendo assim, fazemos com que
a varivel PRIMEIRA assuma o valor da varivel METADE
mais um, ou seja, PRIMEIRA = METADE + 1, cando
assim nossa nova estrutura:
10 44 58 78 100
Agora temos a seguinte composio de variveis:
PRIMEIRA: METADE + 1, ou seja, 2 + 1 = 3
ULTIMA: 4
METADE: (3 + 4)/2 = 3 ( uma diviso de nmeros inteiros, por isso o resultado um
nmero inteiro, desconsiderando a parte fracionria). Podemos perceber que o valor
da varivel PRIMEIRA igual ao valor da varivel METADE.
10 44 58 78 100
PRIMEIRA ULTIMA METADE
PRIMEIRA ULTIMA
METADE PRIMEIRA ULTIMA
logica_2_livro_caderno.indb 86 7/12/2006 14:21:01
87
Lgica de Programao II
Unidade 4
5. Para o teste 78 igual a 78?, o resultado verdadeiro. Nesse
caso, o algoritmo deve imprimir a mensagem o nmero
78 est na posio 3 do vetor. Essa primeira parte est
concluda.
6. No podemos nos esquecer de que o nmero digitado pode
estar entre a posio inicial do vetor e a metade do mesmo.
Temos que resolver essa situao tambm. Vejamos no caso do
nmero lido seja 10. A varivel NUMEROLIDO armazena o
valor numrico 10.
7. Realizamos os mesmos passos para a procura do valor
numrico 10 atravs do vetor VET, reinicializando as
variveis.
PRIMEIRA: 0
ULTIMA: 4
METADE: (0 + 4)/2 = 2
10 44 58 78 100
8. Para o primeiro teste, 10 igual a 58? o resultado falso.
Para o segundo teste, 10 maior do que 58? o resultado
falso. Para o terceiro teste 10 menor do que 58? o resultado
verdadeiro. Portanto, o valor que estamos procurando s
pode estar entre a posio inicial do vetor at a sua metade.
Como j vericamos que o valor na metade do vetor 58, no
precisamos test-lo novamente. Assim, podemos testar at
METADE-1. Vamos atribuir esse valor varivel ULTIMA,
ou seja ULTIMA METADE 1, e teremos a seguinte
estrutura.
10 44 58 78 100
PRIMEIRA ULTIMA METADE
PRIMEIRA ULTIMA
logica_2_livro_caderno.indb 87 7/12/2006 14:21:02
88
Universidade do Sul de Santa Catarina
Para o teste 10 igual a 10?, o resultado verdadeiro. Nesse
caso, o algoritmo deve imprimir a mensagem o nmero 10 est
na posio 0 do vetor.
Nosso processo lgico de encontrar um valor numrico atravs de
um vetor com valores numricos ordenados em ordem crescente
est nalizado. Agora com voc. Realize as atividades de auto-
avaliao a seguir.
Sntese
Nesta unidade vimos estruturas de algoritmos um pouco mais
complexas. Dois mecanismos bastante utilizados em lgica
de programao so os mtodos de procura e os mtodos de
ordenao. Inicialmente vimos como ordenar um vetor com
valores numricos e, aps, vimos como realizar um busca por
valores contidos dentro de um vetor.
Voc pde observar dois tipos de procura: O mtodo mais
simples o seqencial, onde percorremos todo o vetor at
encontrar o valor desejado. Esse mtodo tem a vantagem de ser
simples, porm, pelo fato de precisar percorrer todo o vetor para
encontrar o nmero desejado, no to eciente, caracterizando
como uma das principais desvantagens desse mtodo. O outro
mtodo que vimos foi o mtodo da pesquisa binria, aplicada
somente para vetores com valores ordenados em ordem crescente.
O mtodo consiste em dividir o vetor pela metade e vericar
se o valor que estamos procurando est exatamente na metade
do vetor, ou acima ou abaixo da metade encontra. Caso esteja
Agora temos a seguinte composio de variveis:
PRIMEIRA: 0
ULTIMA: METADE 1, ou seja, 2 1 = 1
METADE: (PRIMEIRA + ULTIMA)/2, ou seja, (0 + 1)/2 = 0
10 44 58 78 100
PRIMEIRA ULTIMA METADE
logica_2_livro_caderno.indb 88 7/12/2006 14:21:02
89
Lgica de Programao II
Unidade 4
Atividades de auto-avaliao
1. Ler um vetor contendo 100 cdigos relativos s mercadorias de um
armazm e outro relativo s quantidades de mercadorias. Imprimir os
cdigos e as quantidades dos produtos, seguindo a ordem crescente
das quantidades.
acima ou abaixo da metade, dividimos o vetor novamente at que
o nmero seja encontrado. um mtodo bastante eciente de
procura, porm h a necessidade de que o mesmo esteja ordenado
em ordem crescente.
Nossos algoritmos esto cando grandes e complexos. hora
de estrutur-los de forma a carem mais fceis de entender e
melhores de trabalhar. Na prxima unidade estaremos vendo uma
parte que dominou toda a dcada de 80 em relao aos estudos
de linguagem de programao: a estruturao ou modularizao
de algoritmos.
Espero por voc l, ento.
logica_2_livro_caderno.indb 89 7/12/2006 14:21:02
90
Universidade do Sul de Santa Catarina
2. Ler um vetor contendo 100 nmeros, que correspondem matrcula
de alunos. Ler 5 matrculas e verifcar se os alunos com essas matrculas
esto matriculados ou no.
logica_2_livro_caderno.indb 90 7/12/2006 14:21:02
91
Lgica de Programao II
Unidade 4
3. Monte um algoritmo em pseudocdigo que implemente os processos
lgicos descritos anteriormente. Esse um algoritmo de pesquisa
binria.
logica_2_livro_caderno.indb 91 7/12/2006 14:21:02
92
Universidade do Sul de Santa Catarina
4. Um cliente, gerente de supermercado, possui um programa via Web
que permite cadastrar as mercadorias e as quantidades respectivas
para controle de estoque em ordem aleatria. O supermercado possui
um total de 100 mercadorias para serem cadastradas. O cliente
est solicitando um algoritmo para imprimir as mercadorias e as
quantidades em ordem crescente de quantidades disponveis. Esse
algoritmo ser utilizado no programa j existente no supermercado.
Faa esse algoritmo solicitado e comente-o sempre que necessrio. O
cliente dever entender sua soluo por completo, tendo em vista que
ele ser o programador da soluo proposta por voc.
logica_2_livro_caderno.indb 92 7/12/2006 14:21:02
93
Lgica de Programao II
Unidade 4
Saiba mais
MANZANO, Jos Augusto N. G.; OLIVEIRA, Jayr
Figueiredo de. ALGORITMOS: lgica para desenvolvimento
de programao. 9. ed.
MANZANO, Jos Augusto N. G. Lgica Estruturada para
Programao de Computadores.
BORATTI, Isaias Camilo; OLIVEIRA, lvaro Borges de.
Introduo Programao e Algoritmos. 2. ed. Ampliada e
atualizada.
logica_2_livro_caderno.indb 93 7/12/2006 14:21:02
logica_2_livro_caderno.indb 94 7/12/2006 14:21:02
UNIDADE 5
Programao estruturada 5
Objetivos de aprendizagem
Entender os conceitos de programao estruturada.
Aplicar modularizao aos algoritmos.
Sees de estudo
Seo 1 Modularizao: conceitos iniciais.
Seo 2 Modularizao: retorno de valores e passagem de
parmetros.
logica_2_livro_caderno.indb 95 7/12/2006 14:21:02
96
Universidade do Sul de Santa Catarina
Para incio de conversa
Voc est iniciando agora a ltima unidade da disciplina. Isso no
signica que os estudos acabaram por aqui. Muito pelo contrrio,
acabaram de comear. No nal desta unidade voc estar pronto
para comear a se tornar um excelente programador Web. O
que estamos lhe oferecendo apenas a base, independente da
linguagem de programao que voc ir utilizar ou j utiliza.
Voc precisa entender agora um dos conceitos que foi alvo de
muitos estudos em dcadas passadas: a programao estruturada
ou programao modular. Esse tipo de programao surgiu
quando ocorreu a crise do software, por volta da dcada de 60.
Os programas de computadores se tornaram grandes e caros,
principalmente em relao manuteno dos mesmos. No
havia metodologia para a criao de programas de computadores.
A probabilidade de acontecerem erros na programao era
enorme, mesmo depois de o programa estar funcionando. Eram
necessrias manutenes dirias, aumentando substancialmente
os custos de desenvolvimento.
A tecnologia mudou, o mundo mudou, os problemas tambm
mudaram. Temos um grau bem maior de complexidade, e a
presso por reduo de custos fez com que os programadores
adotassem metodologias de desenvolvimento de software. Uma
dessas metodologias a programao estruturada. O objetivo
principal da programao estruturada decompor o problema
em partes ou blocos, fazendo com que cada bloco execute uma
funo especca e, juntos, esses blocos formam o programa
como um todo. A proposta desenvolver os algoritmos em partes
integradas, de forma a adquirirem maior legibilidade, facilidade
de uso e manuteno.
Por isso, nossa meta nesta unidade a de decompor os problemas
em partes. Vamos dividir para poder conquistar, ou seja,
vamos transformar nossos algoritmos em uma forma bem mais
estruturada do que temos feito at agora.
O que voc acha de iniciar, ento?
logica_2_livro_caderno.indb 96 7/12/2006 14:21:03
97
Lgica de Programao II
Unidade 5
SEO 1 - Modularizao: conceitos iniciais
Quando nos deparamos com problemas complexos, a melhor
maneira de solucion-los decomp-lo em partes, ou seja,
resolver o problema em etapas para que possamos ter xito no
nal. A cada uma dessas partes bem denidas, que contribuem
para a soluo do problema, chamamos de mdulo.
Assim tambm so nossas solues lgicas. Caso separemos
um problema em partes, podemos construir algoritmos
para cada uma das partes de forma bem denida
e independentes uma das outras. A essa tcnica
de dividir os algoritmos em mdulos chamados de
modularizao.
- Retome primeiro o conceito de algoritmo em Lgica de
Programao I.
Para lembrar!
Um algoritmo formalmente uma seqncia fnita
de passos que levam a execuo de uma tarefa.
Podemos pensar em algoritmo como uma receita,
uma seqncia de instrues, que tem a funo de
atingir uma meta especfca. Estas tarefas no podem
ser redundantes nem subjetivas na sua defnio,
devendo ser claras e precisas.
Sendo assim, cada parte ou mdulo construdo deve ter as
mesmas caractersticas citadas, devendo cada mdulo:
Implementar tarefas no-redundantes e nem subjetivas.
Ter uma funo especfica e clara.
Ser independente de todos os outros mdulos de um
programa.
Ser testado e corrigido antes de ser integrado soluo
completa tendo em vista que parte da soluo lgica
do problema.
Poder ser utilizado em outros algoritmos que requerem
os mesmos procedimentos.
logica_2_livro_caderno.indb 97 7/12/2006 14:21:03
98
Universidade do Sul de Santa Catarina
Veja um exemplo:
Imagine que voc seja responsvel por construir uma
pgina na intranet de uma empresa prestadora de servios.
O programa dever realizar a entrada de dados para cada
funcionrio da empresa, ir executar o clculo da folha
de pagamento e, por fm, ir emitir os contracheques e a
relao bancria.
Parece um problema bem mais complexo dos que
temos visto at agora, voc concorda?
Pois bem, se quisermos implementar as mesmas solues lgicas
at agora estudadas, vamos ter um programa grande e complexo,
sujeito a falhas e erros. Podemos separar o problema em
partes, construir pequenos mdulos, test-los e depois integr-
los para alcanar o objetivo nal. Com esse procedimento, a
complexidade dos algoritmos diminui, os testes se tornam rpidos
e a manuteno tambm diminui. Pode parecer estranho, mas os
resultados so de arregalar os olhos.
Voltando ao problema, temos que o nosso alvo a construo de
um programa de mostrar a folha de pagamento. Vamos ento
dividi-lo conforme gura a seguir:
logica_2_livro_caderno.indb 98 7/12/2006 14:21:03
99
Lgica de Programao II
Unidade 5
FolhaPagamento constitui o nosso programa principal. Esse
programa constitudo de mdulos chamados de EntradaDados,
Movimento e Sadas. Por sua vez, o Mdulo EntradaDados
constitudo de dois outros mdulos: Funcionrios e Dependentes.
Cada mdulo resolve um pequeno problema e pode ser
solucionado por uma pessoa diferente, diminuindo o tempo de
desenvolvimento.
O mdulo Sada mostra a formatao do texto e formulrio
no site da empresa. O mdulo EntradaDados permite que
os dados cadastrais de funcionrios e/ou dependentes
sejam entrados no programa. Cada um desses mdulos
deve funcionar de maneira independente e precisa, ou seja,
sempre que precisarmos imprimir algo na tela, chamamos
o mdulo responsvel por isso, o mdulo Sada. Se
precisarmos cadastrar um novo funcionrio, chamamos
o mdulo EntradaDados, e assim sucessivamente. Tudo
funciona por partes. No preciso chamar o mdulo
Movimento, se meu interesse apenas mostrar os
resultados na sada ou na pgina da empresa.
Um fato importante: Os mdulos so independentes, mas
todos eles esto integrados ao mdulo que chamados de
mdulo principal do programa em nosso exemplo o mdulo
FolhaPagamento. A partir desse mdulo que os outros so
chamados para resolver problemas como entrada de dados,
impresso de resultados etc.
Lembra como era anteriormente? Entrvamos com
os dados, processvamos o algoritmo e mostrvamos
o resultado na sada? Agora, as coisas se tornaram
independentes. Chamamos apenas o mdulo que
nos convier naquele momento, na seqncia em que
quisermos. realmente uma forma estruturada de
trabalhar, percebeu?
De forma resumida, nossos programas tero agora um mdulo
principal, chamado de programa principal e diversos outros
mdulos que iro compor todo o programa. Cada mdulo
chamado a partir do programa principal. Quando um mdulo
chamado a partir do programa principal, os comandos denidos
logica_2_livro_caderno.indb 99 7/12/2006 14:21:03
100
Universidade do Sul de Santa Catarina
dentro do mdulo so executados. Quando nalizados, o controle
volta para o programa principal.
Nas linguagens de programao, cada mdulo chamado de
funo.
Mas, o que uma funo?
Uma funo dita como sendo uma sub-rotina
ou mdulo do algoritmo principal. Cada funo
independente uma da outra. Chamamos uma funo
a partir do algoritmo principal. Dentro da funo so
executados comandos que realizam alguma tarefa
especfca. Quando todos os comandos dentro da
funo forem executados, o controle do programa
volta para o programa principal. A partir do programa
principal, podemos chamar outras funes de
interesse tambm.
Por que usar funes ?

Para permitir o reaproveitamento de cdigo j


construdo por voc ou por outros programadores.

Para evitar que um trecho de cdigo que seja repetido


vrias vezes dentro de um mesmo programa.

Para permitir a alterao de um trecho de cdigo de


uma forma mais rpida. Com o uso de uma funo
preciso alterar apenas dentro da funo que se deseja.

Para que os blocos do programa no fiquem grandes


demais e, por conseqncia, mais difceis de entender.

Para facilitar a leitura do programa de uma forma mais


fcil.

Para separar o programa em partes (blocos) que


possam ser logicamente compreendidas de forma
isolada.
logica_2_livro_caderno.indb 100 7/12/2006 14:21:03
101
Lgica de Programao II
Unidade 5
Com dvida ainda? No tem problema.
Acompanhe um exemplo bastante simples que
ir permitir que voc entenda o que denimos
anteriormente. A exemplo dos algoritmos anteriores,
vamos elaborar um pseudocdigo para o seguinte
problema: queremos somar dois nmeros quaisquer.
Conforme voc j estudou at agora, uma soluo
bastante simples para o caso seria a seguinte:
incio
{declarando as variveis}
N1, N2, SOMA: numrico
{entrada de dados}
escreva Programa de soma de dois nmeros
escreva Entre com o primeiro nmero:
leia N1
escreva Entre com o segundo nmero:
leia N2
{processamento da soma}
SOMA N1 + N2
{mostrando a sada}
escreva Resultado da soma =, SOMA
escreva Programa Finalizado
m
A soma dos dois nmeros est sendo realizada no algoritmo ou
programa principal. Vamos considerar que as partes do algoritmo
anterior, que so responsveis pela soma, sejam as partes de
entrada de dados, a soma propriamente dita, ou seja, SOMA
N1 + N2, e a impresso do resultado, ou seja, escreva Resultado
da soma =, SOMA. Modularizar ou estruturar um programa
consiste na construo de mdulos que iro compor o programa
como um todo e sero chamados a partir do programa principal.
A proposta a seguinte: em vez de termos a operao soma
realizada dentro do programa principal, podemos construir uma
sub-rotina que faa somente essa operao, ou seja, somar dois
nmeros e mostrar o resultado nal. Sempre que quisermos
somar dois nmeros chamamos essa sub-rotina.
logica_2_livro_caderno.indb 101 7/12/2006 14:21:03
102
Universidade do Sul de Santa Catarina
Nosso pseudocdigo caria mais ou menos assim:
incio
escreva Programa de soma de dois nmeros
CHAMADA DA FUNO FUNCAO_SOMA {quando chamamos a funo
FUNCAO_SOMA o programa passa a executar os comandos dentro da
funo. Finalizados os comandos dentro da funo, o programa retorna para
o programa principal, continuando a executar os comandos aqui colocados
na seqncia. A sintaxe de uma funo ser estudada mais adiante.}
escreva Programa Finalizado
m
FUNO_SOMA
incio
{declarando as variveis}
N1, N2, SOMA: numrico
{entrada de dados}
escreva Entre com o primeiro nmero:
leia N1
escreva Entre com o segundo nmero:
leia N2
{processamento da soma}
SOMA N1 + N2
{mostrando a sada}
escreva Resultado da soma =, SOMA
m-funo

logica_2_livro_caderno.indb 102 7/12/2006 14:21:04
103
Lgica de Programao II
Unidade 5
Pontos a observar:
1. Observe onde esto denidas as variveis antes e aps
a modularizao. Antes da modularizao, as variveis
esto denidas dentro do programa principal. Aps a
modularizao, as variveis esto denidas dentro da funo
FUNCAO_SOMA. Isso apenas para colocar o seguinte:
as variveis so denidas onde elas so utilizadas. Mais
importante, uma varivel denida no programa principal no
reconhecida na funo FUNCAO_SOMA, e uma varivel
denida na funo FUNCAO_SOMA no reconhecida
no programa principal. A isso damos o nome de variveis
locais. Por exemplo, em nosso algoritmo principal anterior,
o comando de escrita do valor numrico da varivel N1 est
errado.
incio
escreva Programa de soma de dois nmeros
CHAMADA DA FUNO FUNCAO_SOMA
escreva O Valor de N1 =, N1 {errado pois N1 no est denida dentro
do programa principal}
escreva Programa Finalizado
m
O porqu disso? A resposta que a varivel N1 est denida
dentro da funo FUNCAO_SOMA e no dentro do programa
principal.
2. Assim que a funo chamada, os comandos dentro da funo
so executados, ou seja, as variveis N1, N2 e SOMA so
criadas, so executados os comandos de entrada de dados
(escreva e leia), realizado a soma de N1 com N2 e o valor
armazenado na varivel SOMA, e por m, o valor impresso.
Quando os comandos so nalizados encontrando o comando
m da funo, o programa volta para o programa principal.
Mas o que acontece com as variveis locais? Elas so
destrudas. isso mesmo. So destrudas e recriadas sempre
que a funo FUNCAO_SOMA for chamada. Por isso no
podemos acessar essas variveis a partir do programa principal.
Dentro da funo FUNCAO_SOMA as variveis locais N1,
N2 e SOMA so criadas no incio e destrudas no m.
logica_2_livro_caderno.indb 103 7/12/2006 14:21:04
104
Universidade do Sul de Santa Catarina
3. Podemos criar variveis no programa principal com os
mesmos nomes das variveis da funo FUNCAO_SOMA?
A resposta sim. Elas so variveis locais e uma nada tem a
ver com a outra. Assim, nosso pseudocdigo principal estaria
correto:
incio
{declarando varivel N1}
N1: numrico
N1 10
escreva Programa de soma de dois nmeros
CHAMADA DA FUNO SOMA
escreva O Valor de N1 =, N1 {agora est correto pois a varivel N1
est denida dentro do programa principal. Essa varivel local diferente
da varivel local denida na funo SOMA.}
escreva Programa Finalizado
m
4. Podemos chamar a funo FUNCAO_SOMA quantas vezes
quisermos. Veja o pseudocdigo abaixo:
incio
escreva Programa de soma de dois nmeros
CHAMADA DA FUNO FUNCAO_SOMA {primeira chamada da funo
FUNCAO_SOMA}
CHAMADA DA FUNO FUNCAO_SOMA {segunda chamada da funo
FUNCAO_SOMA}
CHAMADA DA FUNO FUNCAO_SOMA {terceira chamada da funo
FUNCAO_SOMA}
escreva Programa Finalizado
m
Esta uma das vantagens da modularizao: construmos a
funo uma vez e chamamos quantas vezes quisermos.
5. O nome FUNCAO_SOMA foi escolhido apenas para mostrar
que estamos nos referindo a uma funo cuja funo seja a
de somar dois nmeros. No necessrio colocar a palavra
FUNCAO. Poderamos ter denido a funo como FSOMA,
logica_2_livro_caderno.indb 104 7/12/2006 14:21:04
105
Lgica de Programao II
Unidade 5
SOMAS, ou outro nome qualquer. No poderamos chamar
a funo de SOMA apenas porque criamos uma varivel
tambm chamada de SOMA. O que quero dizer que no
podemos ter o mesmo nome signicando coisas diferentes
(funo ou varivel).
SEO 2 - Modularizao: retorno de valores e
passagem de parmetros
Na seo 1 vimos um algoritmo de funo bastante simples que
permite implementar a soma de dois nmeros. Todo o processo
de entrada, clculo da soma e escrita do resultado feito na
funo FUNCAO_SOMA.
No entanto, se perguntssemos o que realmente a
funo FUNCAO_SOMA deve fazer, qual a funo
principal da funo FUNCAO_SOMA, qual seria sua
resposta?
Se voc respondeu que a funo FUNCAO_SOMA deve somar
e somente somar dois nmeros voc acertou. Observe que dentro
da funo FUNCAO_SOMA temos comandos de entrada e
sada, alm da soma propriamente dita.
Veja o seguinte exemplo:
Voc quer somar dois nmeros quaisquer mas no deseja
imprimir o resultado na tela do seu computador, isso porque a
soma dos dois nmeros serve apenas para vericar se o resultado
um nmero superior ou abaixo de 10, por exemplo. Para esse
caso, a nossa funo FUNCAO_SOMA no serve, sabe por
qu? Por que alm de somar os dois nmeros e funo, tambm
imprime o resultado na tela. Ou seja, estamos atribuindo
funo FUNCAO_SOMA funes que na verdade no lhe
pertencem. A funo FUNCAO_SOMA deve somar, e to
somente somar, dois nmeros. Dados de entrada e sada devem
ser feitos parte. Isso vai nos levar ao tema de Passagem de
logica_2_livro_caderno.indb 105 7/12/2006 14:21:04
106
Universidade do Sul de Santa Catarina
parmetros e retorno de valores a partir das funes. Podemos
imaginar uma funo como sendo uma caixa que aceita valores,
processa-os e retorna um resultado para o programa principal.
Se utilizarmos o mesmo exemplo da funo FUNCAO_SOMA,
o seguinte esquema nos mostra onde estamos querendo chegar:
Dois valores so passados para a funo FUNCAO_SOMA, N1
e N2. A funo realiza a soma e retorna o valor (resultado) para
o programa principal. De onde vm N1 e N2? Para onde vai o
valor da varivel SOMA? isso que vamos responder a partir de
agora.
Retornando valores de funes
Retornar um valor de uma funo signica que o valor calculado
pela funo pode ser lido no programa principal. Voc deve estar
se perguntando: Como assim?
Veja o exemplo da funo FUNCAO_SOMA. Queremos que a
funo no imprima mais o resultado, ou seja, queremos eliminar
o comando escreva da funo FUNCAO_SOMA. Quem ir
imprimir o resultado da soma ser o programa principal.
Conforme disse na seo 1, a varivel SOMA criada sempre
que a funo FUNCAO_SOMA chamada. Ao nalizar a
funo com o comando m, a varivel SOMA destruda e no
podemos acessar mais seu contedo. No entanto, ainda assim
possvel ler seu valor antes mesmo da varivel ser destruda.
O que estamos querendo dizer que possvel ler o valor da
varivel SOMA no momento em que chamamos a funo
FUNCAO_SOMA no programa principal.
logica_2_livro_caderno.indb 106 7/12/2006 14:21:04
107
Lgica de Programao II
Unidade 5
Veja como isso pode ser feito:
FUNO_SOMA
incio
{declarando as variveis}
N1, N2, SOMA: numrico
{entrada de dados}
escreva Entre com o primeiro nmero:
leia N1
escreva Entre com o segundo nmero:
leia N2
{processamento da soma}
SOMA N1 + N2
{em vez de imprimir o resultado na tela, vamos retornar o valor da
varivel SOMA para o programa principal. Esse valor vai ser retornado
para a linha de comando onde a funo FUNCAO_SOMA chamada.
O comando que executamos nesse caso o comando retorna
<identicador> onde identicador o nome de uma varivel
denida dentro da funo}
retorna SOMA.
m-funo
No programa principal, podemos ter:
incio
{declarao da varivel}
RESULTADO: numrico
escreva Programa de soma de dois nmeros
{observe o comando a seguir: Ele nos indica que o valor retornado pela
funo FUNCAO_SOMA armazenado na varivel RESULTADO, varivel
essa declarada no programa principal. Com isso, podemos ler o contedo
da varivel SOMA declarada na funo FUNCAO_SOMA.}
RESULTADO CHAMADA DA FUNO FUNCAO_SOMA
logica_2_livro_caderno.indb 107 7/12/2006 14:21:04
108
Universidade do Sul de Santa Catarina
{Vamos supor que estamos entrando com os nmeros 2 e 3 e queremos
som-los. Na chamada da funo FUNCAO_SOMA a funo retorna o valor
da varivel SOMA que 5. Sendo assim, o comando caria RESULTADO 5}
{Importante: O valor retornado por uma funo somente pode ser
lido no momento em que ela chamada. Os comandos a seguir esto
completamente errados:
CHAMADA DA FUNO FUNCAO_SOMA
RESULTADO SOMA.
Voc sabe por qu? Por dois motivos bsicos. Quando uma funo
retorna um valor ela retorna na linha de comando em que ela chamada.
Ao encontrar o comando CHAMADA DA FUNO FUNCAO_SOMA, a funo
chamada, e ao encontrar o comando retorna <identicador> dentro
da funo, o valor de <identicador> colocado na mesma linha que a
funo chamada. O segundo motivo que a varivel SOMA no pode
ser lida a partir do programa principal, tendo em vista que ela denida
apenas na sub-rotina FUNCAO_SOMA.}
{podemos agora fazer o que quisermos com o resultado da soma, tendo
em vista que armazenamos o resultado na varivel RESULTADO. Podemos
vericar se o valor da soma maior ou igual a 10, por exemplo:
se RESULTADO > 10 ento
escreva A soma maior que 10
seno
escreva A soma menor ou igual a 10. Tambm, podemos apenas
imprimi-lo conforme algoritmo anterior.}
escreva Resultado da soma =, RESULTADO
escreva Programa Finalizado
m
Sem segredos no mesmo?
Estamos com uma funo (FUNCAO_SOMA) que tem duas
funes bsicas: entrada de dados e a soma dos nmeros.
A impresso ca a cargo do programa principal. Nosso prximo
passo fazer com que a funo FUNCAO_SOMA apenas some,
deixando a entrada de dados para o programa principal ou at
mesmo uma outra funo qualquer.
logica_2_livro_caderno.indb 108 7/12/2006 14:21:05
109
Lgica de Programao II
Unidade 5
Passando valores para funes
At agora no nos preocuparmos com a sintaxe para a
implementao de uma funo em pseudocdigo. Acho que
mais importante entender o conceito agora do que mostrar a
sintaxe propriamente dita. Entendido o conceito de funo, a
sintaxe mero detalhe.
Vimos como voltar um valor de uma funo. A
questo agora : Podemos passar valores para dentro
de uma funo, ou seja, podemos passar um valor de
uma varivel defnida dentro do programa principal
para uma funo?
A resposta sim. Perceba que estamos agora fazendo o caminho
da volta do que zemos no item 2.1. A transferncia de valores
para dentro de uma funo se d atravs de passagem por
parmetros.
Mas o que signica passagem de parmetros? Para responder essa
questo, voltamos gura onde denimos um esquema para a
funo FUNCAO_SOMA.
Vimos que SOMA representa o valor de retorno da funo
FUNCAO_SOMA. Mas quem so N1 e N2? De onde vm
essas variveis? Pois bem, N1 e N2 so duas variveis declaradas
fora da funo FUNCAO_SOMA. Por exemplo, elas podem
estar declaradas dentro do programa principal de forma que a
entrada de dados no mais realizada pela funo FUNCAO_
SOMA e sim pelo programa principal. Poderiam estar denidas
em outra funo qualquer tambm.
logica_2_livro_caderno.indb 109 7/12/2006 14:21:05
110
Universidade do Sul de Santa Catarina
Para o nosso exemplo, vamos considerar que a entrada de
dados seja feita pelo programa principal.
Sabendo que as variveis N1 e N2 armazenam dois
valores que queremos somar, e cuja operao de soma
realizada pela funo FUNCAO_SOMA, obviamente
temos que fazer com que esses dois valores possam ser
lidos dentro da funo tambm. sempre importante
lembrar que as variveis so locais (denidas dentro
do programa principal) e no podem ser utilizadas
em quaisquer outras funes. A passagem dos valores
das variveis N1 e N2 se d atravs de passagem
de parmetros. Os parmetros de uma funo so
variveis locais denidas junto ao nome da funo e servem
para receber valores de outras funes ou programa principal e
podem ser utilizados como variveis locais dentro da funo. Por
exemplo, quando denimos anteriormente a funo FUNCAO_
SOMA, utilizamos a seguinte sintaxe provisria:
FUNCAO_SOMA
incio
{declarao de variveis locais}
{comandos da funo}
m-funo
Os parmetros de uma funo so denidos junto ao nome da
funo. Eles recebem valores que sero passados para a funo no
momento em que chamada no programa principal. Em nosso
programa de soma, a funo FUNCAO_SOMA deve receber
dois valores para serem somados. Ento, temos:
FUNCAO_SOMA( NUM1, NUM2 )
incio
{declarao de variveis locais}
{comandos da funo}
m-funo
logica_2_livro_caderno.indb 110 7/12/2006 14:21:05
111
Lgica de Programao II
Unidade 5
Perceba que os parmetros NUM1 e NUM2 so colocados entre
parnteses aps o nome da funo. Podemos utilizar NUM1
e NUM2 dentro da funo de modo que nos convier. Essas
variveis so variveis locais que servem para receber valores a
partir da chamada da funo. Mostro um exemplo que explica
melhor. Veja o nosso programa principal:
incio
N1, N2, RESULTADO: numrico
{vamos realizar a entrada pelo programa principal}
escreva entre com o nmero 1
leia N1
escreva entre com o nmero 2
leia N2
{N1 e N2 so duas variveis locais que armazenam os valores que
queremos somar. Devemos, portanto, passar esses valores para dentro
da funo FUNCAO_SOMA. Fizemos isso atravs da passagem de
parmetros}
RESULTADO FUNCAO_SOMA (N1, N2) {Nesse momento, a funo
FUNCAO_SOMA chamada e o valor da varivel N1 armazenado na
varivel NUM1 e o valor da varivel N2 armazenado na varivel NUM2,
exatamente nessa seqncia. A funo calcula a soma e retorna um valor,
cujo resultado armazenado em RESULTADO.}
escreva resultado da soma =, RESULTADO
m
Nossa funo FUNCAO_SOMA a seguinte: FUNCAO_
SOMA( NUM1, NUM2 )
incio
{declarao de variveis locais}
SOMA : numrico
{o parmetro ou varivel NUM1 armazena o valor da varivel N1 e o
parmetro ou varivel NUM2 armazena o valor da varivel N2}
SOMA NUM1 + NUM2 {observe aqui que estamos utilizando NUM1
e NUM2 como variveis locais. Diferentemente das variveis declaradas
dentro da funo, os parmetros da funo servem para receber valores
no momento em que so chamadas. Uma observao importante o
fato de no podermos denir variveis locais com os mesmos nomes do
que os parmetros da funo. Em nosso exemplo, no podemos declarar
logica_2_livro_caderno.indb 111 7/12/2006 14:21:05
112
Universidade do Sul de Santa Catarina
uma varivel chamada NUM1 porque j est denida como parmetro da
funo}
retorna SOMA {retorna o valor da varivel SOMA para a linha de
comando em que a funo foi chamada}
m-funo
Se fssemos montar um novo esquema para a funo
FUNCAO_SOMA, teramos:
No momento em que a funo FUNCAO_SOMA chamada,
os parmetros da funo (NUM1 e NUM2) so criados e so
passados os valores das variveis N1 e N2 respectivamente.
Observe que estamos transferindo valores de N1 para
NUM1 e de N2 para NUM2. Isso signifca que ambos
devem ser do mesmo tipo, ou seja, se N1 numrico,
NUM1 tambm deve ser numrico. Se a varivel N2
for literal, ento NUM2 tambm deve ser literal.
Sintaxe da funo
Bem, j conhecendo a importncia de uma funo e de como
ela chamada, basta saber como implementar utilizando
pseudocdigo. Veja a sintaxe:
Sintaxe da funo
funo <nome da funo> (< lista de parmetros>):
<tipo de retorno>
logica_2_livro_caderno.indb 112 7/12/2006 14:21:05
113
Lgica de Programao II
Unidade 5
Os termos utilizados nesse tipo de sintaxe so explicados a
seguir:
Funo Comando referente funo
<nome da funo> Nome da funo que ser declarada.
< lista de parmetros> Lista dos parmetros que sero utilizados (se houver)
<tipo de retorno>
Tipo da varivel que ser retornada pela funo declarada
(numrico, literal, lgico)
Observe como ca a funo FUNCAO_SOMA utilizando a
sintaxe em pseudocdigo:
Nome da funo: FUNCAO_SOMA
Lista de parmetros: NUM1 e NUM2 do tipo numrico
Tipo de retorno: numrico
Desta forma, a sintaxe para a funo FUNCAO_SOMA ca:
funo FUNCAO_SOMA (NUM1, NUM2: numrico): numrico
Veja outros exemplos de declarao de funo:
1. Funo que recebe 4 notas e retorna a mdia.
funo MEDIA (NOTA1, NOTA2, NOTA3, NOTA4: numrico): numrico
2. Funo que recebe o nome e idade de uma pessoa e
retorna verdadeiro ou falso.
funo CADASTRA (NOME: literal, IDADE: numrico): lgico
3. Funo que recebe o nome de um ms e volta o ms em
nmero
funo FUNCAO_MES ( MS: literal ): numrico
logica_2_livro_caderno.indb 113 7/12/2006 14:21:05
114
Universidade do Sul de Santa Catarina
Acompanhe mais alguns exemplos de funes. O interesse aqui
apenas vericar a implementao das funes. Voc poder
construir qualquer tipo de programa que chame essas funes
da maneira que voc quiser, quantas vezes quiser e onde quiser.
Por isso que chamamos de modularizao. Fazemos uma vez e
podemos usar vrias.
1. Criar uma funo para receber o ano corrente e
o ano de nascimento de uma pessoa. Em seguida,
retornar a idade da pessoa.
Pseudocdigo:
funo IDADE (ANOCORRENTE, ANONASCIMENTO: numrico):
numrico
retorna ANOCORRENTE ANONASCIMENTO
m-funo
2. Criar uma frao para receber o valor de uma
determinada temperatura em graus Fahrenheit e
retornar o valor correspondente em Centgrados. A
frmula de converso C = 5/9 (F-32).
Pseudocdigo:
funo CELSUIS (FAHRENHEIT : numrico) : numrico
retorna (5/9) * (FAHRENHEIT - 32)
m-funo
3. Um exemplo bastante interessante o
desenvolvimento de um algoritmo para
implementao de menus de entrada, ou seja, a
elaborao de opes que permitam o usurio entrar
com os dados de acordo com a seleo de um item.
- Bem, agora voc est mesmo nalizando os estudos de lgica de
programao. Foi um desao e tanto no?
logica_2_livro_caderno.indb 114 7/12/2006 14:21:06
115
Lgica de Programao II
Unidade 5
Mas o estudo no deve terminar por aqui. O que voc conheceu
e aprendeu apenas o ponta-p inicial para aprofundamentos
futuros. Lembro novamente que, quanto mais exerccios
voc zer, melhor voc ser e se diferenciar dos outros
programadores. Um outro fato importante que recomendo
que, ao estudar linguagem de programao, voc no abandone
a lgica. Pense inicialmente em uma soluo algortmica. Isso
pensar no problema de forma inteligente. Alis, isso ser
inteligente. Com a soluo pensada, o programador ter apenas
trabalho de digitar a soluo lgica encontrada em qualquer
linguagem de programao. Passa a ser um trabalho de digitao.
Fao uma ltima pergunta a voc:
Voc quer se tornar um profssional de programao
ou um digitador profssional?
Pense nisso quando estiver programando um website.
Um grande abrao e sucesso!
Sntese
Nesta unidade voc viu que para a soluo de problemas mais
complexos, devemos dividi-los em partes. Caso separemos um pro-
blema complexo em problemas menores, podemos construir algo-
ritmos para cada um deles de forma bem denida, e fazer com que
eles sejam independentes um dos outros. A essa tcnica de dividir
os algoritmos em mdulos chamamos de modularizao.
Cada mdulo, quando bem elaborado, deve possuir uma srie
de caractersticas: implementar tarefas no-redundantes e nem
subjetivas; ter uma funo especca e clara; ser independente de
todos os outros mdulos de um programa; ser testado e corrigido
antes de ser integrado soluo completa, tendo em vista que
parte da soluo lgica do problema.
logica_2_livro_caderno.indb 115 7/12/2006 14:21:06
116
Universidade do Sul de Santa Catarina
Em pseudocdigo, utilizamos o conceito de funo para mo-
dularizar um algoritmo. Uma funo dita como sendo uma
sub-rotina ou mdulo do algoritmo principal. Cada funo
independente uma da outra. Chamamos uma funo a partir do
algoritmo principal. A sintaxe para implementar uma funo a
seguinte:
funo <nome da funo> (< lista de parmetros>): <tipo de retorno>
Onde a lista de parmetros representa a forma de passagem de
valores para dentro da funo. o que chamamos de passagem
de valor ou passagem de parmetros por valor. A funo tambm
pode retornar um valor. Esse valor do tipo <tipo de retorno>,
podendo ser numrico, literal ou lgico.
Sempre que necessrio, devemos utilizar funes para desenvolvi-
mento de algoritmos. As grandes vantagens so:
Para permitir o reaproveitamento de cdigo j
construdo por voc ou por outros programadores.
Para evitar que um trecho de cdigo que seja repetido
vrias vezes dentro de um mesmo programa.
Para permitir a alterao de um trecho de cdigo de
uma forma mais rpida. Com o uso de uma funo
preciso alterar apenas dentro da funo que se deseja.
Para que os blocos do programa no fiquem grandes
demais e, por conseqncia, mais difceis de entender.
Para facilitar a leitura do programa de uma forma mais
fcil.
Para separar o programa em partes (blocos) que
possam ser logicamente compreendidas de forma
isolada.

logica_2_livro_caderno.indb 116 7/12/2006 14:21:06
117
Lgica de Programao II
Unidade 5
Atividades de auto-avaliao
1. Utilizando o algoritmo anterior, implemente a funo SUBTRACAO,
MULTIPLICACAO e DIVISAO. Elabore um programa principal que possa
chamar as funes de acordo com o que o usurio deseja. Por exemplo,
se o usurio digitar 1, a funo SUBTRACAO chamada, se o usurio
digitar 2, a funo MULTIPLICACAO chamada, se o usurio digitar 3
a funo DIVISAO chamada. Qualquer outro nmero, o programa
dever indicar uma mensagem de erro e solicitar com que o usurio
digite 1, 2 ou 3 novamente.
logica_2_livro_caderno.indb 117 7/12/2006 14:21:06
118
Universidade do Sul de Santa Catarina
2. Na atividade 1, altere os algoritmos de cada funo de forma que as
mesmas retornem os valores por elas calculados. O programa principal
que dever imprimir o resultado de sada, qualquer que seja a
operao escolhida (subtrao, multiplicao ou diviso).
logica_2_livro_caderno.indb 118 7/12/2006 14:21:06
119
Lgica de Programao II
Unidade 5
3. Elaborar uma funo que calcule o maior nmero entre trs valores. A
funo deve aceitar trs parmetros e retornar o maior valor entre eles.
A entrada de dados e a impresso do resultado devem ser feitas no
programa principal.
logica_2_livro_caderno.indb 119 7/12/2006 14:21:06
120
Universidade do Sul de Santa Catarina
Saiba mais
Para aprofundar os estudos leia os livros indicados a seguir.
MANZANO, Jos Augusto N. G. LGICA estruturada para
programao de computadores.
XAVIER, Gley Fabiano Cardoso. Lgica de Programao.
MANZANO, Jos Augusto N. G. Algoritmos: lgica para de-
senvolvimento de programao de computadores.
logica_2_livro_caderno.indb 120 7/12/2006 14:21:06
Para concluir o estudo
Voc chegou ao nal da disciplina de Lgica de
Programao II. Foram 120 horas de estudos de
algoritmos de programao. O objetivo principal foi
estudar as principais estruturas lgicas de programao
e perceber a importncia de realizar um projeto de
qualquer software atravs de algoritmos.
Pois bem, gostaria de enfatizar que o contedo no
terminou, muito pelo contrrio, voc est agora apto para
se aprofundar em algoritmos de programao. Por isso,
agora com voc, nobre estudante. Siga em frente! Se
voc quiser realmente ser um programador diferenciado
no mercado, passo o basto para voc. A corrida sua
agora. Tenho certeza tambm que a vitria vir. No
se esquea disso, quanto mais voc estiver preparado em
lgica de programao, melhor voc ser, independente
de qualquer linguagem de programao que voc poder
vir a utilizar. Esse realmente o diferencial de um bom
programador. No seja apenas um digitador, seja um
pensador, por isso, saiba bem lgica de programao.
Um grande abrao e at a prxima oportunidade.
Professor Carlos Fernando Martins.
logica_2_livro_caderno.indb 121 7/12/2006 14:21:06
logica_2_livro_caderno.indb 122 7/12/2006 14:21:06
MANZANO, Jos Augusto N. G.; OLIVEIRA, Jayr Figueiredo
de. ALGORITMOS: lgica para desenvolvimento de
programao. 9. ed. So Paulo: rica, 2000. 265 p.
ABE, Jair Minoro; SCALZITTI, Alexandre,; SILVA FILHO, Joo Incio
da,. Introduo lgica para a cincia da computao. 2. ed.
So Paulo: Arte & Cincia, 2002. 247 p.
WARNIER, Jean-Dominique. LCP - Lgica de Construo de
Programas: um mtodo de programao estruturada. 3. ed.
Rio de Janeiro: Campus, 1984. 185 p.
UCCI, Waldir; SOUSA, Reginaldo Luiz; KOTANI, Alice Mayumi.
LGICA de programao: os primeiros passos. 8. ed. So
Paulo: rica, 1999. 339 p.
FORBELLONE, Andr Luiz Villar; EBERSPCHER, Henri Frederico.
LGICA de programao: a construo de algoritmos e
estruturas de dados. 2. ed. rev. e atual. So Paulo: Makron
Books, 2000. 197 p.
MANZANO, Jos Augusto N. G. LGICA estruturada para
programao de computadores. So Paulo: rica, 2002. 180 p.
Referncias
logica_2_livro_caderno.indb 123 7/12/2006 14:21:06
logica_2_livro_caderno.indb 124 7/12/2006 14:21:07
Sobre o professor conteudista
Carlos Fernando Martins
Engenheiro de Controle e Automao Industrial pela
Universidade Federal de Santa Catarina UFSC
(1990-1995); Mestre em Engenharia Eltrica pelo
Departamento de Automao e Sistemas da UFSC
(1995-1996); Doutorando no Departamento de
Engenharia Mecnica da UFSC (incio em 2001)
na rea de Concentrao: Sistemas de Produo da
Manufatura. Professor da Faculdade de Tecnologia
do SENAI Florianpolis nas disciplinas de Lgica
de Programao, Programao Orientada a Objetos,
Linguagens de Programao C/C++ e UML; Professor
de cursos de Ps Graduao em nvel de especializao
em automao industrial (Sistemas Discretos da
Manufatura, Integrao de Sistemas da Manufatura,
Sistemas da Informao).
logica_2_livro_caderno.indb 125 7/12/2006 14:21:07
logica_2_livro_caderno.indb 126 7/12/2006 14:21:07
Respostas e comentrios das
atividades de auto-avaliao
Unidade 1
1) temperaturas: vetor[25] numrico
2) nomes: vetor[150] literal
3) produtos: vetor[2500] literal
4) Pseudocdigo do programa de reserva de vos
incio
{declarao de variveis}
NUM_VOOS, I, NVD: numrico {NVD = nmero do vo desejado}
vetor: VOOS[500] numrico {supondo 500 vos ao dia. Cada posio do vetor
armazena o nmero de lugares disponveis}
RG: literal

{incio do programa}
escreva Especique o nmero de vos disponveis
leia NUM_VOOS
para I de 0 at NUM_VOOS-1 passo 1 faa
escreva Especique a quantidade de lugares disponveis para
o vo:, I+1
leia VOOS[ I ]
m-para
{processamento}
escreva Entre com o nmero do vo ou 1 para sair:
leia NVD {leitura do nmero do vo desejado pelo cliente}
enquanto NVD <> -1 faa
se (NVD >= 0 E NVD < NUM_VOOS) ento
se VOOS[ NVD ] > 0 ento {h lugares disponveis}
VOOS[ NVD ] VOOS[ NVD ] 1 {1 lugar ocupado no vo}
logica_2_livro_caderno.indb 127 7/12/2006 14:21:07
128
Universidade do Sul de Santa Catarina
Unidade 2
1) Pseudocdigo
incio
NOMES : vetor [27] literal
DISTANCIAS : matriz [27][27] numrico
LINHA, COLUNA : numrico
CAPITAL1, CAPITAL2 : literal
para LINHA de 0 at 26 passo 1 faa
escreva Digite o nome de uma capital:
leia NOMES[LINHA]
m-para
para LINHA de 0 at 26 passo 1 faa
para COLUNA de 0 at 26 passo 1 faa
se LINHA = COLUNA ento
DISTANCIAS[LINHA][COLUNA] 0
seno
escreva Digite a distncia (kms) entre ,NOMES[LINHA], e ,
NOMES[COLUNA]
escreva Entre com o RG do passageiro:
leia RG
seno
escreva No h lugares disponveis no vo, NVD
m-se
seno
escreva No existe esse vo,
m-se
escreva Entre com o nmero do vo ou 1 para sair:
leia NVD
m-enquanto
m
logica_2_livro_caderno.indb 128 7/12/2006 14:21:07
129
Lgica de Programao II
leia DISTANCIAS[LINHA][COLUNA]
m-se
m-para
m-para
escreva Digite o nome da primeira capital escolhida:
leia CAPITAL1
escreva Digite o nome da segunda capital escolhida:
leia CAPITAL2
LINHA 0
enquanto NOMES[LINHA] <> CAPITAL1 ou LINHA <= 27 faa
LINHA LINHA + 1
m-enquanto
COLUNA 0
enquanto NOMES[COLUNA] <> CAPITAL2 ou COLUNA <= 27 faa
COLUNA COLUNA + 1
m-enquanto
se LINHA <= 27 ento
se COLUNA <= 27 ento
escreva A distncia entre ,CAPITAL1, e ,CAPITAL2, de ,
DISTANCIAS[LINHA][COLUNA], kms.
seno
escreva Nome ,CAPITAL2, no consta no cadastro!
m-se
seno
escreva Nome ,CAPITAL1, no consta no cadastro!
m-se
m
logica_2_livro_caderno.indb 129 7/12/2006 14:21:07
130
Universidade do Sul de Santa Catarina
Unidade 3
1) Declarao de um registro de um hspede de um hotel de luxo:
FICHA: registro
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO, EMAIL, MOTIVO_
VIAGEM: literal
TELEFONE, NUM_RESERVAS: numrico
m-registro
2) Algoritmo de um sistema de administrao escolar:
incio
{declarao do registro FICHA}
FICHA: registro
{variveis da cha}
NOME, ENDERECO, CIDADE, ESTADO, CEP, CPF, RG, DATA_NASC, CURSO: literal
TELEFONE, GRAU_ESC: numrico
m-registro
CONT, NUM_PROF: numrico {especica o nmero de professores a serem cadastrados}
CADASTRO: vetor[0..199] FICHA {permite armazenar at 200 professores. As
posies do vetor vo de 0 at 199}
escreva Entre com o nmero de professores a serem cadastrados
leia NUM_PROF
para CONT de 0 at NUM_PROF-1 passo 1 faa
{entrada de dados}
escreva Nome do Professor:
leia CADASTRO[CONT].NOME
escreva CPF do Professor:
leia CADASTRO[CONT].CPF
escreva RG do Professor:
leia CADASTRO[CONT].RG
escreva Data de Nascimento do Professor:
leia CADASTRO[CONT].DATA_NASC
escreva Grau de Escolaridade:
leia CADASTRO[CONT].GRAU_ESC
escreva Curso do Professor:
leia CADASTRO[CONT].CURSO
escreva Endereo:
leia CADASTRO[CONT].ENDERECO
escreva Cidade:
logica_2_livro_caderno.indb 130 7/12/2006 14:21:07
131
Lgica de Programao II
leia CADASTRO[CONT].CIDADE
escreva Estado:
leia CADASTRO[CONT].ESTADO
escreva CEP:
leia CADASTRO[CONT].CEP
escreva Telefone de Contato:
leia CADASTRO[CONT].TELEFONE
m-para
m
3) Algoritmo de um sistema de cadastro de uma Vdeo Locadora:
incio
{declarao do registro FICHA}
VIDEO: registro
{variveis da cha}
NOME, CODIGO, TIPO, PRODUTOR, ATOR, DIRETOR: literal
DURACAO, ANO: numrico
m-registro
FITAS: vetor[0..499] VIDEO {permite cadastrar at 500 tas de vdeo}
NUM_FITAS, CONT: numrico
{entrada de dados}
escreva Entre com o nmero de tas a serem cadastradas
leia NUM_FITAS
para CONT de 0 at NUM_FITAS-1 passo 1 faa
escreva Entre com o nome do lme:
leia FITAS[CONT].NOME
escreva Entre com o cdigo do lme:
leia FITAS[CONT].CODIGO
escreva Entre com o tipo de lme:
leia FITAS[CONT].TIPO
escreva Entre com o nome do produtor:
leia FITAS[CONT].PRODUTOR
escreva Entre com o nome do ator principal:
leia FITAS[CONT].ATOR
escreva Entre com o nome do diretor do lme:
leia FITAS[CONT].DIRETOR
escreva Entre com o tempo de durao do lme:
leia FITAS[CONT].DURACAO
escreva Entre com o ano da produo:
leia FITAS[CONT].ANO
m-para
logica_2_livro_caderno.indb 131 7/12/2006 14:21:07
132
Universidade do Sul de Santa Catarina
4) Cadastro de 200 funcionrios de uma empresa.
Pseudocdigo:
incio
tipo FICHA = registro
NOME, ENDERECO, CIDADE, UF, RG, CURSO, GRAU_ESC, CONJUGE : literal
CODIGO,CEP, DEPENDENTES, FONE, CPF, DATA_NASC : numrico
m-registro
FUNCIONARIOS : vetor [0..199] FICHA
CODIGOCONSUL, CONT, POS : numrico
para POS de 0 at 199 passo 1 faa
escreva Especique o cdigo do funcionrio:
leia FUNCIONARIOS[POS].CODIGO
escreva Digite o nome do funcionrio:
leia FUNCIONARIOS[POS].NOME
escreva Especique o endereo:
leia, FUNCIONARIOS[POS].ENDERECO
escreva Especique a cidade onde funcionrio reside:
leia FUNCIONARIOS[POS].CIDADE
escreva Especique o estado:,
leia FUNCIONARIOS[POS].UF
escreva Especique o CEP:
leia FUNCIONARIOS[POS].CEP
escreva Especique o telefone
leia FUNCIONARIOS[POS].FONE

{resultados de sada}
para CONT de 0 at NUM_FITAS-1 passo 1 faa
{resultado de sada do algoritmo. Perceba que vamos colocar as principais
sadas tudo no mesmo comando}
escreva O lme, FITAS[CONT].NOME, do produtor, FITAS[CONT].
PRODUTOR, um, FITAS[CONT].TIPO, com uma durao de, FITAS[CONT].
DURACAO, .Estrelando o ator, FITAS[CONT].ATOR .O lme foi produzido no
ano de, FITAS[CONT].ANO
m-para
m
logica_2_livro_caderno.indb 132 7/12/2006 14:21:07
133
Lgica de Programao II
escreva Digite CPF
leia FUNCIONARIOS[POS].CPF
escreva Especique R.G.:,
leia FUNCIONARIOS[POS].RG
escreva Digite a data de nascimento
leia FUNCIONARIOS[POS].DATA_NASC
escreva Digite o grau de escolaridade:
leia FUNCIONARIOS[POS].GRAU_ESC
escreva Digite o nome do cnjuge:
leia FUNCIONARIOS[POS].CONJUGE
escreva Digite o nmero de dependentes:
leia FUNCIONARIOS[POS].DEPENDENTES
m-para
para CONT de 1 at 20 passo 1 faa
escreva Digite o cdigo do funcionrio a ser consultado:
leia CODIGOCONSUL
POS 0
enquanto CODIGOCONSUL < > FUNCIONARIOS[POS].CODIGO OU POS < 200
POS POS + 1
m-enquanto
se CODIGOCONSUL = FUNCIONARIOS[POS].CODIGO ento
escreva Nome:, FUNCIONARIOS[POS].NOME
escreva Endereo:, FUNCIONARIOS[POS].ENDERECO
escreva Telefone:, FUNCIONARIOS[POS].FONE
seno
escreva Cdigo do funcionrio no consta no cadastro
m-se
m-para
m
5) A Primeira Maneira, declaramos as variveis individualmente e a
segunda maneira, colocamos as variveis em um bloco. A praticidade
do segundo tipo est na possibilidade de voc criar novas variveis
em vez de declarar os dados ou estrutura vrias vezes. Facilita na
construo de estrutura de dados. Conforme voc pode ver na
seqncia do exerccio, para criar uma estrutura de dados utilizando
a segunda maneira, basta criarmos um vetor e/ou matriz daquela
estrutura. Voc ter um vetor onde cada posio um registro de
dados, e cada registro possui campos (variveis) onde so armazenados
os valores.
logica_2_livro_caderno.indb 133 7/12/2006 14:21:08
134
Universidade do Sul de Santa Catarina
Unidade 4
1) Pseudocdigo
incio
CODIGOPRODUTO : vetor[100] literal
QUANTIDADE : vetor[100] numrico
POS, ULTIMO, AUX1 : numrico
AUX2 : literal
para POS de 0 at 99 passo 1 faa
escreva Entre com o cdigo da mercadoria:
leia CODIGOPRODUTO[POS]
m-para
para POS de 0 at 99 passo 1 faa
escreva Entre com a quantidade:
leia QUANTIDADE[POS]
m-para
POS 0
ULTIMO 99
AUX 0
enquanto ULTIMO < > 1 faa
enquanto POS < > (ULTIMO - 1) faa
se QUANTIDADE[POS] > QUANTIDADE[POS+1] ento
AUX1 QUANTIDADE[POS]
AUX2 CODIGOPRODUTO[POS]
QUANTIDADE[POS] QUANTIDADE[POS+1]
CODIGOPRODUTO[POS] CODIGOPRODUTO[POS+1]
QUANTIDADE[POS+1] AUX1
CODIGOPRODUTO[POS+1] AUX2
seno
POS POS + 1
m-se
m-enquanto
POS 1
ULTIMO ULTIMO - 1
m-enquanto
logica_2_livro_caderno.indb 134 7/12/2006 14:21:08
135
Lgica de Programao II
escreva Imprimindo os cdigos e as quantidades em ordem crescente.
para POS de 0 at 99 passo 1 faa
escreva CODIGOPRODUTO[POS]
escreva QUANTIDADE[POS]
m-para
m
2) Pseudocdigo
incio
ALUNOS : vetor[100] numrico
POS, PESQUISADO, CONT :numrico
para POS de 0 at 99 passo 1 faa
escreva Digite o cdigo de matrcula de um aluno:
leia ALUNOS[POS]
m-para
{leitura de 5 nmeros de matrcula}
para CONT de 1 at 5 passo 1 faa
escreva Digite o nmero de matrcula a ser pesquisado:
leia PESQUISADO
POS 0
{o comando repita est sendo utilizado para percorrer o vetor ALUNOS}
repita
POS POS + 1
at que PESQUISADO = ALUNOS[POS] ou POS > 99
se POS > 99 ento
escreva Nmero no cadastrado !
seno
escreva Nmero localizado na posio ,POS, do vetor.
m-se
m-para
m
logica_2_livro_caderno.indb 135 7/12/2006 14:21:08
136
Universidade do Sul de Santa Catarina
3) incio
VET: vetor[5] numrico
NUMEROLIDO, PRIMEIRA, ULTIMA, METADE: numrico
POS: numrico
ACHOU : lgico {varivel que armazena verdadeiro quando o valor numrico for
encontrado no vetor. Caso contrrio, armazena falso}
{preenchendo um vetor com nmeros em ordem crescente}
para POS de 0 at 4 passo 1 faa
escreva digite um nmero:
leia VET[ POS ]
m-para
escreva digite um nmero a ser pesquisado :
leia NUMEROLIDO
{inicializao das variveis}
PRIMEIRA 0
ULTIMA 4
ACHOU falso
{processo de procura}
enquanto PRIMEIRA <= ULTIMA e no ACHOU faa
{clculo da metade. Utilizamos a funo aritmtica DIV para realizar
uma diviso inteira, Veja Lgica de Programao I}
METADE DIV((PRIMEIRA + ULTIMA), 2)
{verica se o nmero procurado j se encontra na metade. o
primeiro teste}
se VET[ METADE ] = NUMEROLIDO ento
ACHOU verdadeiro
m-se
{caso o nmero procurado no esteja exatamente na metade o vetor,
vericamos se ele maior do que esse nmero}
{Segundo teste}
se VET[ METADE ] < NUMEROLIDO ento
PRIMEIRA METADE + 1
{Se ele no for maior, ento s poder ser menor do que o
nmero contido na metade do vetor. Terceiro teste}
seno
ULTIMA METADE 1
logica_2_livro_caderno.indb 136 7/12/2006 14:21:08
137
Lgica de Programao II
m-se
m-enquanto
{verica o valor lgico da varivel ACHOU}
se ACHOU = verdadeiro ento
escreva Nmero , NUMEROLIDO, encontrado na posio , METADE,
do vetor
seno
escreva Nmero no encontrado no vetor
m-se
m
4) Algoritmo para cadastro de cdigos e quantidades dos produtos,
seguindo a ordem crescente das quantidades.
Pseudocdigo:
incio
COD_PRODUTO : vetor[0..99] literal {cdigo do produto}
QTDE : vetor[0..99] numrico {quantidade de mercadoria}
POS, ULTIMO, AUX1 :numrico
AUX2 : literal
para POS de 0 at 99 faa
leia COD_PRODUTO[POS]
leia QTDE[POS]
m-para
POS 0
ULTIMO 99
AUX 0
enquanto ULTIMO < > 1 faa
enquanto POS < > (ULTIMO - 1) faa
{mecanismos de ordenao de valores}
se QTDE[POS] > QTDE[POS+1] ento
AUX1 QTDE[POS]
AUX2 COD_PRODUTO[POS]
QTDE[POS] QTDE[POS+1]
COD_PRODUTO[POS] COD_PRODUTO[POS+1]
QTDE[POS+1] AUX1
COD_PRODUTO[POS+1] AUX2
logica_2_livro_caderno.indb 137 7/12/2006 14:21:08
138
Universidade do Sul de Santa Catarina
seno
POS POS + 1
m-se
m-enquanto
POS 1
ULTIMO ULTIMO - 1
m-enquanto
escreva Imprimindo os cdigos e as quantidades em ordem crescente.
para POS de 0 at 99 faa
escreva COD_PRODUTO[POS]
escreva QTDE[POS]
m-para
m
Unidade 5
1) Implementando a funo SUBTRACAO, MULTIPLICACAO e DIVISAO sem
retorno de valores.
Pseudocdigo
incio
{declarao de variveis}
OPCAO, N1, N2: numrico
OPCAO 1
enquanto OPCAO < > 4 faa
escreva Menu de Opes
escreva 1. Subtrao
escreva 2. Multiplicao
escreva 3. Diviso
escreva 4. Sair
escreva Selecione uma opo:
leia OPCAO
leia N1
leia N2
se OPCAO < > 4 faa
se OPCAO = 1 ento
{operao de subtrao}
SUBTRACAO (N1, N2)
logica_2_livro_caderno.indb 138 7/12/2006 14:21:08
139
Lgica de Programao II
m-enquanto
m
{implementao das funes}
funo SUBTRACAO (NUM1, NUM2: numrico)
escreva resultado =, NUM1 NUM2
m-funo
funo MULTIPLICACAO (NUM1, NUM2: numrico)
escreva resultado =, NUM1*NUM2
m-funo
funo DIVISAO (NUM1, NUM2: numrico)
se NUM2 < > 0 ento {garante que a diviso nunca ser feita por
zero}
escreva resultado = NUM1/NUM2
seno
escreva no existe diviso por zero
m-se
m-funo
Seno
se OPCAO = 2 ento
{operao de Multiplicao}
MULTIPLICACAO (N1, N2)
Seno
se OPCAO = 3 ento
{operao de diviso}
DIVISAO (N1, N2)
seno
escreva Opo errada. Digite novamente
m-se
m-se
m-se
m-se
logica_2_livro_caderno.indb 139 7/12/2006 14:21:09
140
Universidade do Sul de Santa Catarina
2) Implementando a funo SUBTRACAO, MULTIPLICACAO e DIVISAO
com retorno de valores.
Pseudocdigo
incio
{declarao de variveis}
OPCAO, NUM1, NUM2, RESULTADO: numrico
OPCAO 1
enquanto OPCAO < > 4 faa
escreva Menu de Opes
escreva 1. Subtrao
escreva 2. Multiplicao
escreva 3. Diviso
escreva 4. Sair
escreva Selecione uma opo:
leia OPCAO
se OPCAO < > 4 faa
Escreva Digite dois nmeros
Leia N1
Leia N2
se OPCAO = 1 ento
{operao de subtrao}
RESULTADO SUBTRACAO (N1, N2)
seno se OPCAO = 2 ento
{operao de Multiplicao}
RESULTADO MULTIPLICACAO (N1, N2)
seno se OPCAO = 3 ento
{operao de diviso}
RESULTADO DIVISAO (N1, N2)
seno
escreva Opo errada. Digite novamente
m se
m se
m se
escreva resultado da operao =, RESULTADO
m se
m enquanto
m
logica_2_livro_caderno.indb 140 7/12/2006 14:21:09
141
Lgica de Programao II
{implementao das funes}
funo SUBTRACAO (NUM1, NUM2: numrico): numrico
retorna NUM1 NUM2 {retorna a diferena entre os parmetros da
funo}
m-funo
funo MULTIPLICACAO (NUM1, NUM2: numrico): numrico
retorna NUM1*NUM2 {retorna a multiplicao entre os parmetros
da funo}
m-funo
funo DIVISAO (NUM1, NUM2: numrico): numrico
se NUM2 < > 0 ento {garante que a diviso nunca ser feita por zero}
retorna NUM1/NUM2
seno
escreva no existe diviso por zero
retorna 0
m-se
m-funo
3) Algoritmo do programa que implementa uma funo que aceita trs
valores como parmetro e retorna o maior valor.
incio
{declarao de variveis}
RESULT, VAL1, VAL2, VAL3: numrico

{entrada de dados}
escreva Digite o primeiro nmero
leia VAL1
escreva Digite o segundo nmero
leia VAL2
escreva Digite o terceiro nmero
leia VAL3
{chamando a funo}
RESULT FUNCAO_MAIOR(VAL1, VAL2, VAL3)
escreva O maior valor :, RESULT
m
logica_2_livro_caderno.indb 141 7/12/2006 14:21:09
142
Universidade do Sul de Santa Catarina
{implementao da funo}
funo FUNCAO_MAIOR (NUM1, NUM2, NUM3: numrico): numrico
MAIOR: numrico {varivel local. Vlido somente dentro da funo}
se NUM1 > NUM2 E NUM1 > NUM3 ento
{NUM1 o maior valor}
MAIOR NUM1
seno se NUM2 > NUM1 E NUM2 > NUM3 ento
{NUM2 o maior valor}
MAIOR NUM2
seno
{NUM3 o maior valor}
MAIOR NUM3
m-se
retorna MAIOR
m-funo
logica_2_livro_caderno.indb 142 7/12/2006 14:21:09
Elton Joo Gubert
Mrio Gerson Miranda Magno Jnior
Patrcia Gerent Petry
Design instrucional
Flavia Lumi Matuzawa
Viviane Bastos
2 edio revista
Palhoa
UnisulVirtual
2007
Lgica de Programao II
Caderno de atividades
logica_2_livro_caderno.indb 143 7/12/2006 14:21:09
logica_2_livro_caderno.indb 144 7/12/2006 14:21:09
Apresentao
Este caderno de atividades corresponde ao material
complementar da disciplina de Lgica de Programao II.
O material foi elaborado visando a uma aprendizagem autnoma,
abordando contedos especialmente selecionados e adotando uma
linguagem que facilite seu estudo a distncia.
Por falar em distncia, isso no signica que voc estar sozinho.
No esquea que sua caminhada nesta disciplina tambm
ser acompanhada constantemente pelo Sistema Tutorial da
UnisulVirtual. Entre em contato sempre que sentir necessidade,
seja por correio postal, fax, telefone, e-mail ou Espao
UnisulVirtual de Aprendizagem. Nossa equipe ter o maior
prazer em atend-lo, pois sua aprendizagem nosso principal
objetivo
Bom estudo e sucesso!
Equipe UnisulVirtual.
logica_2_livro_caderno.indb 145 7/12/2006 14:21:09
Copyright UnisulVirtual 2007
Nenhuma parte desta publicao pode ser reproduzida por qualquer meio sem a prvia autorizao desta instituio.
Ficha catalogrfca elaborada pela Biblioteca Universitria da Unisul
005.1
G95 Gubert, Elton Joo
Lgica de programao II : caderno de atividades / Elton Joo Gubert,
Mrio Gerson Miranda Magno Jnior, Patrcia Gerent Petry ; design instrucional
Flavia Lumi Matuzawa; Viviane Bastos. 2. ed. rev. Palhoa : UnisulVirtual, 2007.
73p. : il. ; 28 cm.

1. Programao (Computadores). 2. Estrutura de dados (Computador). 3.
Algoritmos. I. Magno Jnior, Mario Gerson Miranda. II. Petry, Patrcia
Gerent. III. Matuzawa, Flavia Lumi. IV. Bastos, Viviane. V. Ttulo.
Crditos
Unisul - Universidade do Sul de Santa Catarina
UnisulVirtual - Educao Superior a Distncia
Campus UnisulVirtual
Rua Joo Pereira dos Santos, 303
Palhoa - SC - 88130-475
Fone/fax: (48) 3279-1541 e
3279-1542
E-mail: cursovirtual@unisul.br
Site: www.virtual.unisul.br
Reitor Unisul
Gerson Luiz Joner da Silveira
Vice-Reitor e Pr-Reitor
Acadmico
Sebastio Salsio Heerdt
Chefe de gabinete da Reitoria
Fabian Martins de Castro
Pr-Reitor Administrativo
Marcus Vincius Antoles da Silva
Ferreira
Campus Sul
Diretor: Valter Alves Schmitz Neto
Diretora adjunta: Alexandra Orseni
Campus Norte
Diretor: Ailton Nazareno Soares
Diretora adjunta: Cibele Schuelter
Campus UnisulVirtual
Diretor: Joo Vianney
Diretora adjunta: Jucimara Roesler

Equipe UnisulVirtual
Administrao
Renato Andr Luz
Valmir Vencio Incio
Bibliotecria
Soraya Arruda Waltrick
Coordenao dos Cursos
Adriano Srgio da Cunha
Ana Luisa Mlbert
Ana Paula Reusing Pacheco
Ctia Melissa S. Rodrigues (Auxiliar)
Charles Cesconetto
Diva Marlia Flemming
Elisa Flemming Luz
Itamar Pedro Bevilaqua
Janete Elza Felisbino
Jucimara Roesler
Lilian Cristina Pettres (Auxiliar)
Lauro Jos Ballock
Luiz Guilherme Buchmann
Figueiredo
Luiz Otvio Botelho Lento
Marcelo Cavalcanti
Mauri Luiz Heerdt
Mauro Faccioni Filho
Michelle Denise Durieux Lopes Destri
Nlio Herzmann
Onei Tadeu Dutra
Patrcia Alberton
Patrcia Pozza
Raulino Jac Brning
Design Grco
Cristiano Neri Gonalves Ribeiro
(coordenador)
Adriana Ferreira dos Santos
Alex Sandro Xavier
Evandro Guedes Machado
Fernando Roberto Dias Zimmermann
Higor Ghisi Luciano
Pedro Paulo Alves Teixeira
Rafael Pessi
Vilson Martins Filho
Equipe Didtico-Pedaggica
Angelita Maral Flores
Carmen Maria Cipriani Pandini
Carolina Hoeller da Silva Boeing
Cristina Klipp de Oliveira
Daniela Erani Monteiro Will
Dnia Falco de Bittencourt
Elisa Flemming Luz
Enzo de Oliveira Moreira
Flvia Lumi Matuzawa
Karla Leonora Dahse Nunes
Leandro Kingeski Pacheco
Ligia Maria Soufen Tumolo
Mrcia Loch
Patrcia Meneghel
Silvana Denise Guimares
Tade-Ane de Amorim
Vanessa de Andrade Manuel
Vanessa Francine Corra
Viviane Bastos
Viviani Poyer
Logstica de Encontros
Presenciais
Caroline Batista (Coordenadora)
Aracelli Araldi
Graciele Marins Lindenmayr
Jos Carlos Teixeira
Letcia Cristina Barbosa
Knia Alexandra Costa Hermann
Marcia Luz de Oliveira
Priscila Santos Alves
Logstica de Materiais
Jeferson Cassiano Almeida da Costa
(coordenador)
Eduardo Kraus
Monitoria e Suporte
Rafael da Cunha Lara (coordenador)
Adriana Silveira
Caroline Mendona
Edison Rodrigo Valim
Francielle Arruda
Gabriela Malinverni Barbieri
Gislane Frasson de Souza
Josiane Conceio Leal
Maria Eugnia Ferreira Celeghin
Simone Andra de Castilho
Vincius Maycot Seram
Produo Industrial e Suporte
Arthur Emmanuel F. Silveira
(coordenador)
Francisco Asp
Projetos Corporativos
Diane Dal Mago
Vanderlei Brasil
Secretaria de Ensino a Distncia
Karine Augusta Zanoni
(secretria de ensino)
Djeime Sammer Bortolotti
Carla Cristina Sbardella
Grasiela Martins
James Marcel Silva Ribeiro
Lamuni Souza
Liana Pamplona
Maira Marina Martins Godinho
Marcelo Pereira
Marcos Alcides Medeiros Junior
Maria Isabel Aragon
Olavo Lajs
Priscilla Geovana Pagani
Silvana Henrique Silva
Secretria Executiva
Viviane Schalata Martins
Tecnologia
Osmar de Oliveira Braz Jnior
(coordenador)
Ricardo Alexandre Bianchini
Rodrigo de Barcelos Martins
Edio Livro Didtico
Professores Conteudistas
Elton Joo Gubert
Mrio Gerson Miranda Magno Jnior
Patrcia Gerent Petry
Design Instrucional
Flavia Lumi Matuzawa
Viviane Bastos
Leandro Kingeski Pacheco
(2
a
edio revista)
Projeto Grco e Capa
Equipe UnisulVirtual
Diagramao
Rafael Pessi
Reviso Ortogrca
Helosa Mano Dorneles
logica_2_livro_caderno.indb 146 7/12/2006 14:21:10
Palavras dos professores
Prezado aluno,
Voc aprendeu, em Lgica de Programao I, os
conceitos iniciais de algoritmos, criao de variveis,
tipos de dados, expresses e estruturas seqenciais de
deciso e de repetio.
Em Lgica de Programao II, estudou novas estruturas,
que o auxiliaro na resoluo de problemas, e novas
maneiras de representar a informao, como vetores,
matrizes, registros, funes.
Neste caderno de atividades, voc vai aprimorar
seu conhecimento com alguns exerccios resolvidos
utilizando todos os conceitos abordados em Lgica de
Programao I e II.
Mos obra!
logica_2_livro_caderno.indb 147 7/12/2006 14:21:10
logica_2_livro_caderno.indb 148 7/12/2006 14:21:10
1
UNIDADE 1
Manipulao de vetores
Objetivos de aprendizagem

Conhecer os algoritmos de maiores complexidades.

Construir algoritmos com utilizao de vetores.


logica_2_livro_caderno.indb 149 7/12/2006 14:21:10
150
Universidade do Sul de Santa Catarina
Para incio de conversa
Na Unidade referente Lgica de Programao II, voc aprendeu
a manipular vetores, que nada mais do que uma varivel que
pode armazenar vrios valores de mesmo tipo.
Neste caderno de atividades, vamos apresentar alguns exerccios
resolvidos passo a passo e, ao m da unidade, exerccios propostos
para a sua resoluo.
Bom trabalho!
Exemplos resolvidos
1) Leia um conjunto N de nmeros armazenados em um vetor,
que representa alturas de pessoas. Calcule e escreva:
a) mdia aritmtica;
b) quantas pessoas possuem altura acima da mdia;
c) a maior altura;
d) quantas pessoas possuem a maior altura.
Algoritmo AlturaPessoas
Altura : vetor[9999] numrico
I, N, MediaAltura, TotalAcimaMedia, MaiorAltura,
TotalMaiorAltura: numrico
Incio
{L o total de alturas armazenadas no vetor
Altura}
Leia (Digite o total de pessoas,N)
{Inicializar a varivel Soma, que contm a soma
de todas as alturas, para no nal calcular a
mdia}
Soma 0
logica_2_livro_caderno.indb 150 7/12/2006 14:21:11
151
Lgica de Programao II
Unidade 1
{Iniciamos com um valor bem BAIXO, para garantir
que encontraremos uma altura MAIOR que essa no
vetor}
MaiorAltura -1
{Iniciamos o lao}
Para I de 1 at N faa
{leitura do vetor de alturas}
Leia Digite a altura, ALTURA [I]
{Somamos a altura das pessoas, para depois
calcularmos a mdia}
Soma Soma + Altura[I]
{Se a altura da pessoa atual (Altura[I]) for
MAIOR que a maior altura at agora ento,
aquela passa a ser a maior altura}
Se Altura[I] > MaiorAltura Ento
MaiorAltura Altura[I]
Fim Se
Fim Para
{Calcula a mdia das alturas}
MediaAltura Soma / N
{Inicializando as variveis que so contadores}
TotalAcimaMedia 0
TotalMaiorAltura 0
{Novamente iniciamos o lao, para veri car quem
tem altura maior que a mdia e quem tem a maior
altura}
Para I de 1 at N faa
{Aqui iremos veri car o total de pessoas que
tm a altura acima da mdia}
Se Altura[I]>MediaAltura ento
TotalAcimaMedia TotalAcimaMedia + 1
Fim Se
{Agora vamos veri car o total de pessoas que
tm a maior altura}
Se Altura[I]= MaiorAltura ento
TotalMaiorAltura TotalMaiorAltura + 1
Fim Se
Fim Para
logica_2_livro_caderno.indb 151 7/12/2006 14:21:11
152
Universidade do Sul de Santa Catarina
{Escrevendo os dados de sada}
Escreva(Mdia das alturas: + MediaAltura)
Escreva(Total de pessoas com altura acima da
mdia: + TotalAcimaMedia)
Escreva(A maior altura : + MaiorAltura)
Escreva(Total de pessoas com a maior altura :
+TotalMaiorAltura)
Fim
2) Faa um programa que leia e armazene em vetores as idades e
o sexo (Masculino: 0 ou Feminino: 1) de um conjunto de pessoas.
A leitura dever parar quando for lida uma idade negativa. O
programa dever tambm:
a) imprimir as idades dos homens e depois as idades das
mulheres;
b) imprimir as mdias de idade de cada sexo;
c) encontrar o homem mais novo e coloc-lo na posio
inicial como o primeiro dos homens;
d) encontrar a mulher mais jovem e posicion-la como a
primeira entre as mulheres.
Algoritmo Pessoas
Idade, Sexo: vetor[9999] numrico
I, N, PosMaisJovem, IdadeMaisNova, PosMaisVelho,
IdadeMaisVelho: numrico
MediaIdadeHomens, MediaIdadeMulheres: numrico
Incio
I 1
{L a idade da primeira pessoa j fora do lao,
para que a condio do comando enquanto-faa
possa ser veri cada}
Leia (Digite a idade,Idade[I])
logica_2_livro_caderno.indb 152 7/12/2006 14:21:11
153
Lgica de Programao II
Unidade 1
{Enquanto o usurio digitar nmeros maiores que
-1, o lao continua girando e, conseqentemente,
lendo a Idade e o Sexo de outra pessoa.}
Enquanto Idade[I] > -1 faa
Leia(Digite o sexo,Sexo[I])
I I + 1
{Antes de o lao retornar, preciso ler a
idade de outra pessoa. Veja que a leitura da
Idade da primeira pessoa foi realizada fora
do lao}
Leia(Digite um valor para a idade ou -1 para
nalizar,Idade[I])
Fim Enquanto
{Aqui descobrimos quantos dados foram realmente
lidos (N), j que no sabamos de antemo}
N I - 1
{Escreve a idade de todos os homens. Aproveita
o lao para somar as idades deles e encontrar o
mais velho}
Soma 0
{Iniciamos com um valor bem BAIXO, para garantir
que encontraremos uma idade MAIOR que essa no
vetor}
IdadeMaisVelho -1
Para I de 1 at N faa
Se Sexo[I] = 1 Ento
{Escrevemos a idade de cada homem}
Escreva (Idade[I])
{Somamos a idade de cada homem para depois
calcular a mdia}
Soma Soma + Idade[I]
{Se a idade do Homem atual (Idade[I]) for
MAIOR que a idade do mais velho at agora
ento, aquele passa a ser o mais velho.
A posio atual no vetor guardada em
PosMaisVelho}
Se Idade[I] > IdadeMaisVelho Ento
IdadeMaisVelho Idade[I]
PosMaisVelho I
Fim Se
Fim Se
Fim Para
{Calcula a mdia de idade dos homens}
MediaIdadeHomens Soma / N
logica_2_livro_caderno.indb 153 7/12/2006 14:21:11
154
Universidade do Sul de Santa Catarina
{Trocando de posio o homem mais velho com a
primeira posio em que aparece homem}
I 1
Enquanto |<=N faa
Se Sexo[I]=1 Ento
{guardo a primeira idade do homem em
uma varivel auxiliar}
Aux Idade[I]
{coloco a idade do homem mais velho na
primeira posio do homem}
Idade[I] Idade[PosMaisVelho]
{coloco a primeira idade do homem no
local do mais velho}
Idade[PosMaisVelho] Aux
{para parar a repetio. No precisa
achar outra idade, basta a primeira. A
troca j foi realizada.}
I N
Fim se
I I + 1
Fim enquanto
{Escreve a idade de todas as mulheres. Aproveita
o lao para somar as idades delas e encontrar a
mais nova}
Soma 0
{Iniciamos com um valor bem ALTO, para garantir
que encontraremos uma idade MENOR que essa no
vetor}
IdadeMaisNova 999
Para I de 1 at N faa
Se Sexo[I] = 0 Ento
{Escrevemos a idade de cada mulher}
Escreva (Idade[I])
{Somamos a idade de cada mulher para
depois calcularmos a mdia}
Soma Soma + Idade[I]
{Se a idade da Mulher atual (Idade[I]) for
MENOR que a idade da mais nova at agora
ento, aquela passa a ser a mais nova. A
posio atual no vetor guardada em
PosMaisNova}
Se Idade[I] < IdadeMaisNova Ento
IdadeMaisNova Idade[I]
PosMaisNova I
Fim se
Fim Se
Fim Para
{Calcula a mdia de idade das mulheres}
MediaIdadeMulheres Soma / N
{Trocando de posio a mulher mais nova com a
primeira posio em que aparece mulher}
I 1
Enquanto |<=N faa
Se Sexo[I]=1 Ento
{guardo a primeira idade da mulher em
uma varivel auxiliar}
Aux Idade[I]
{coloco a idade da mulher mais nova na
primeira posio da mulher}
Idade[I] Idade[PosMaisNova]
logica_2_livro_caderno.indb 154 7/12/2006 14:21:12
155
Lgica de Programao II
Unidade 1
{coloco a primeira idade da mulher no
local da mais nova}
Idade[PosMaisVelho] Aux
{para parar a repetio. No precisa
achar outra idade, basta a primeira. A
troca j foi realizada.}
I N
Fim se
I I + 1
Fim enquanto
{Escrevendo dados de sada}
Escreva(Mdia de idade dos homens: ,
MediaIdadeHomens)
Escreva(Mdia de idade das mulheres: ,
MediaIdadeMulheres)
Escreva(A idade do homem mais velho : ,
IdadeMaisVelho, sua posio no vetor : ,
PosMaisVelho)
Escreva(A idade da mulher mais nova : ,
IdadeMaisNova, sua posio no vetor : ,
PosMaisNova)
Fim
3) Um concurso foi realizado por um nmero no conhecido
de candidatos e constou de 50 questes, cada uma contendo
5 opes. Cada candidato teve o seu nmero e respostas
registradas. Sabendo o gabarito da prova, faa um algoritmo
que imprima o nmero do candidato e o total de acertos de cada
candidato.
{Iniciamos o desenvolvimento deste algoritmo
de nindo quatro variveis:
V _ Respostas: Um vetor de cinqenta posies que
armazenar as respostas de cada questo.
V _ Gabarito: Um vetor de cinqenta posies que
armazenar os resultados de cada candidato.
NumeroDoCandidato: usado para identi car o
candidato.
Continuar: uma varivel lgica usada no lao de
repetio.}
logica_2_livro_caderno.indb 155 7/12/2006 14:21:12
156
Universidade do Sul de Santa Catarina
Algoritmo Concurso
V _ Respostas, V _ Gabarito : Vetor[50] Literal
NumeroDocandidato, X, ContadorAcertos : numrico
Continuar : Lgico
Incio
{Primeiramente, as variveis devem apresentar os
valores necessrios; aps, solicitamos a digitao do
gabarito}
Continuar V
Para X de 1 at 50 faa
Leia (V _ Gabarito[X])
Fim Para
{Aps a digitao do gabarito, podemos desenvolver
a correo das provas; para isso usamos um lao de
repetio enquanto; este usado porque no sabemos
o nmero correto de candidatos}
Enquanto (Continuar) faa
{Leitura do nmero do candidato e um lao de
repetio para ler suas respostas}
Leia (NumeroDocandidato)
Para X de 1 at 50 faa
Leia (V _ Respostas[X])
Fim Para
{Agora vamos comparar os resultados de cada questo
do candidato com o gabarito}
ContadorAcertos 0 {para cada candidato vamos
inicializar dentro do lao enquanto}
Para X de 1 at 50 faa
Se V _ Gabarito[X] = V _ Respostas[X] ento
ContadorAcertos ContadorAcertos +1
Fim Se
Fim para
{Impresso dos resultados deste candidato e a leitura
da varivel usada como sinalizador de parada
Continuar}
Escreva (NumeroDocandidato)
Escreva (ContadorAcertos)
Escreva (Digite V para avaliar mais um
candidato ou F para parar)
Leia (Continuar)
Fim Enquanto
Fim
logica_2_livro_caderno.indb 156 7/12/2006 14:21:12
157
Lgica de Programao II
Unidade 1
Atividades propostas
1) Analise o algoritmo a seguir e mostre o desenvolvimento do mesmo
por meio de um teste de mesa (execuo passo a passo do algoritmo).
Algoritmo Teste
I: numrico
V: Vetor[5] numrico
Incio
Para I de 1 at 5 faa
V[I] I+1
Fimpara
V[3] V[1]+V[5]
V[5] V[V[2]]
Para I de 1 at 5 faa
Escreva (V[I])
Fim para
Fim
2) Escreva um algoritmo que leia um vetor de 13 elementos inteiros, que
o Gabarito de um teste da loteria esportiva, contendo os valores
1 (coluna 1), 2 (coluna 2) e 3 (coluna do meio). Leia, a seguir, para
cada apostador, o nmero do seu carto e um vetor de Respostas
de 13 posies. Verifque para cada apostador o nmero de acertos,
comparando o vetor de Gabarito com o vetor de Respostas. Escreva o
nmero do apostador e o nmero de acertos. Se o apostador tiver 13
acertos, mostre a mensagem Ganhador.
logica_2_livro_caderno.indb 157 7/12/2006 14:21:12
158
Universidade do Sul de Santa Catarina
3) Escreva um algoritmo que leia um vetor de 20 posies e mostre-o.
Em seguida, troque o primeiro elemento pelo ltimo, o segundo pelo
penltimo, o terceiro pelo antepenltimo, e assim sucessivamente.
Mostre o novo vetor depois da troca.
4) Faa um algoritmo que leia um vetor (A) de 100 posies. Em seguida,
compacte o vetor retirando os valores nulos e negativos. Coloque o
resultado no vetor B.
logica_2_livro_caderno.indb 158 7/12/2006 14:21:13
2
UNIDADE 2
Manipulao de matrizes
Objetivos de aprendizagem
Entender o conceito de matrizes.
Conhecer e praticar montagens de matrizes.
Construir algoritmos com utilizao de matrizes.
logica_2_livro_caderno.indb 159 7/12/2006 14:21:13
160
Universidade do Sul de Santa Catarina
Para incio de conversa
Nesta unidade, voc estudou as matrizes, que nada mais so que
variveis bidimensionais (com 2 ndices). Em muitos problemas,
torna-se impossvel a utilizao de variveis simples para guardar
vrias informaes.
Na unidade anterior, voc viu que os vetores (variveis
unidimensionais) permitem manipular vrias informaes em
uma nica varivel de mesmo tipo de dados. Esse conceito
tambm serve para uma matriz. Em alguns problemas o uso de
vetores torna-se trabalhoso e, com a utilizao de matrizes, pode
facilitar a resoluo do problema.
Exemplos resolvidos
1) Um fazendeiro anotou as produes de leite, em litros, de cada
uma de suas dez melhores vacas, durante 30 dias e montou a
Tabela 1 abaixo esquematizada:
Tabela 1- Produes de leite
DIA
VACA
1 2 3 4 5 6 7 8 9 10
1 15.5 18.5 10.2 18.3 20.3 15.2 9.5 13.2 11.2 23.4
2 18.2 15.2 9.9 15.0 19.9 20.2 12.9 15.4 13.4 25.4
3 16.2 12.2 10.9 16.2 20.0 17.2 13.3 16.2 12.2 24.9
30 15.6 11.0 10.9 16.3 18.9 17.2 15.2 14.2 12.6 23.9
Faa um algoritmo que:
a) leia e armazene os dados;
b) imprima as produes da vaca 5 e a da vaca 8 no ms;
c) imprima a produo total do dia 10 com a do dia 20;
d) registre quantos litros de leite o fazendeiro tirou no ms.
logica_2_livro_caderno.indb 160 7/12/2006 14:21:13
161
Lgica de Programao II
Unidade 2
Algoritmo Leite
Leite: matriz[30,10] numrico
vaca5,vaca8,linha,coluna,dia10e20,dia01a30 :
numrico
Incio
{Inicializao dos acumuladores.}
vaca5 = 0
vaca8 = 0
dia10e20 = 0
dia01a30 = 0
{Leitura e armazenamento da matriz}
{As produes de leite acima so, claramente, dados
de mesma natureza que podem ser armazenados numa
matriz tipo numrico de 30 linhas por 10 colunas,
perfazendo um total de 300 posies de memria. Caso
no armazenssemos em matriz, teramos que armazenar
item a item, como a seguir:
Leia (leite[1,1], leite[1,2], ..., leite[1,10])
Leia (leite[2,1], leite[2,2], ..., leite[2,10])
...
Leia (leite[30,1], leite[30,2],..., leite[30,10])
Usando uma estrutura de repetio e chamando de
LINHA o primeiro ndice, que varia de 1 a 30, e outra
estrutura de repetio embutida dentro da primeira,
chamando, assim, o segundo ndice de COLUNA, que
varia de 1 a 10, para cada valor assumido por LINHA,
teramos:
LINHA = 1, o segundo ndice assume valores 1, 2,..., 10
LINHA = 2, o segundo ndice assume valores 1, 2,..., 10
...
LINHA = 30, o segundo ndice assume valores 1, 2,..., 10
Assim a leitura da matriz acima caria:}
Para linha de 1 a 30 faa
Para coluna de 1 a 10 faa
Leia (leite[linha, coluna])
Fim Para
{Como se observa, cada execuo do comando LEIA
l primeiramente uma linha da matriz. Quando a
LINHA for 2, estar lendo a segunda linha}
Fim Para
logica_2_livro_caderno.indb 161 7/12/2006 14:21:13
162
Universidade do Sul de Santa Catarina
{Produes da vaca 5 e da vaca 8}
{O que se deseja na realidade a soma da 5a. coluna e
a soma da 8a. coluna. Ento, basta zerar um acumulador
para a vaca 5 e outro para a vaca 8 e percorrer todas
as linhas da matriz, somando os elementos da coluna
5 e os da coluna 8, isto , o primeiro ndice, que
indica a linha, varia de 1 a 30, enquanto o segundo
ca constante, valendo ou 5 ou 8}
Para linha de 1 at 30 faa
vaca5 = vaca5 + leite[linha,5]
vaca8 = vaca8 + leite[linha,8]
Fim Para
{Produo total do dia 10 com a do dia 20.}
{Nesse caso devem-se somar as produes do dia 10
com as do dia 20, das 10 vacas, isto , percorrer as
linhas 10 e 20 somando as colunas de 1 a 10 destas
linhas, e acumulando os valores}
Para coluna de 1 at 10 faa
dia10e20 = dia10e20 + leite(10, col) + leite(20,
col)
Fim Para
{Producao total do ms.}
{A produo total de leite do ms a soma de todos
os elementos da matriz, isto , deve-se percorrer cada
linha e, em cada linha, todas as suas colunas somando
os elementos l posicionados em um acumulador. Ento,
a varivel LINHA assumir valores de 1 a 30 e para
cada valor assumido por LINHA, a varivel COLUNA
assumir valores de 1 a 10}
Para linha de 1 a 30 faa
Para coluna de 1 a 10 faa
dia01a30 = dia01a30 + leite(linha, coluna)
Fim Para
Fim Para
{Impresso dos resultados}
Escreva(Produo da vaca nmero 5 : , vaca5)
Escreva(Produo da vaca nmero 8 : , vaca8)
Escreva(Produo do dia 10 com a do dia 20: ,
dia10e20)
Escreva(Produo total do ms : , dia01a30)
Fim
logica_2_livro_caderno.indb 162 7/12/2006 14:21:13
163
Lgica de Programao II
Unidade 2
2) Faa um algoritmo que:
Leia uma matriz A de ordem N X M.
Some todos os elementos da matriz e escreva o resultado
na tela.
Some os elementos pares da matriz e escreva o resultado
na tela.
Escreva uma mensagem, caso a matriz seja quadrada.
OBS: Uma matriz quadrada quando o nmero de
linhas igual ao nmero de colunas.
Expresse os elementos da diagonal principal.
Expresse a soma dos elementos da diagonal secundria.
Expresse a soma de cada linha da matriz mostrando o
resultado na tela.
Expresse a soma da linha 3.
Algoritmo MatrizNumerica
A: Matriz[999,999] numrico {ou ainda poderamos
declarar assim: A: Matriz[999x999] numrico ou A:
Matriz[999][999] numrico ou, em vez de escrever
Matriz, pode ser escrito Vetor, assim: A: Vetor[999,999]
numrico, ou ainda: A:Array[999,999] numrico}
I, J, N, M, Soma, SomaPar, SomaDS, SomaLinha,
SomaLinha3 : numrico
Incio
{Leitura da ordem da matriz}
Leia (Digite o total de linhas,N)
Leia (Digite o total de colunas,M)
{Leitura dos valores da matriz}
Para I de 1 at N faa
Para J de 1 at M faa
Leia (A[I, J])
Fim Para
Fim Para
a)
b)
c)
d)
e)
f)
g)
h)
logica_2_livro_caderno.indb 163 7/12/2006 14:21:13
164
Universidade do Sul de Santa Catarina
{Processo para somar os valores da matriz}
Soma 0
Para I de 1 at N faa
Para J de 1 at M faa
Soma Soma + A[I,J]
Fim Para
Fim Para
{Processo para somar os valores pares da matriz}
SomaPar 0
Para I de 1 at N faa
Para J de 1 at M faa
{Veri ca se o valor da matriz par.
par quando o resto da diviso do valor
por 2 for igual a zero}
Se (RESTO (A[I,J],2) = 0) ento
SomaPar SomaPar + A[I,J]
Fim se
Fim Para
Fim Para
{Processo para veri car se uma matriz quadrada}
Se N = M ento
Escreva (Matriz quadrada.)

{Matriz quadrada tem diagonal principal e
secundria. Agora vou mostrar na tela os
valores da diagonal principal. diagonal
principal quando I for igual a J}
Para I de 1 at N faa
Escreva (Diagonal Principal : , A[I,I]
Fim Para
{Agora some os elementos da diagonal
secundria. diagonal secundria quando I + J
for igual a N+1, ou de N=total de linhas}
SomaDS SomaDS + 1
Para I de 1 at N faa
Para J de 1 at M faca
Se (I+J = N+1) ento
SomaDS SomaDS + A[I,J]
Fim se
Fim Para
Fim Para
Seno
Escreva (Matriz no quadrada.)
Fim se
logica_2_livro_caderno.indb 164 7/12/2006 14:21:14
165
Lgica de Programao II
Unidade 2
{Processo para somar cada linha da matriz}
Para I de 1 at N faa
SomaLinha 0 {a cada nova linha inicializo a
soma}
Para J de 1 at M faa
SomaLinha SomaLinha + A[I,J]
Fim Para
Escreva (A soma da linha ,I, : ,SomaLinha)
Fim Para
{Processo para somar a linha 3 da matriz}
SomaLinha3 0
{Percorrer toda a coluna da linha 3}
Para J de 1 at M faa
{Fixo a linha 3, ou seja, no lugar do I coloco
3 e percorro toda a coluna J}
SomaLinha3 SomaLinha3 + A[3,J]
Fim Para
{Resultado}
Escreva (A soma dos elementos da matriz :
,Soma)
Escreva (A soma dos elementos pares da matriz :
,SomaPar)
Escreva (A soma dos elementos da diagonal
secundria da matriz : ,SomaDS)
Escreva (A soma dos elementos da linha 3 da
matriz : ,SomaLinha3)
Fim
logica_2_livro_caderno.indb 165 7/12/2006 14:21:14
166
Universidade do Sul de Santa Catarina
3) Dada uma matriz de ordem N x N, faa um algoritmo que
verique se a matriz simtrica (aij=aji).
Algoritmo MatrizSimetrica
A: Matriz [N,M] numrico {tambm posso declarar,
como N e M, quando no sei o tamanho. Mas
cuidado com esse tipo de declarao, pois algumas
linguagens no suportam}
I, J, N, M : Numrico
Simetrica : Lgica
Incio
{Leitura da ordem da matriz}
Leia (N)
{Leitura dos valores da matriz}
Para I de 1 at N faa
Para J de 1 at N faa
Leia (A[I, J])
Fim Para
Fim Para
{Processo para descobrir se a matriz simtrica
ou no}
I 1
{A princpio consideramos a matriz como simtrica}
Simetrica Verdadeiro
Enquanto I < N faa
{Partimos de I+1 para passarmos somente pelos
elementos da diagonal superior da matriz; assim,
para cada um destes valores, comparamos com o
valor da posio simtrica na diagonal inferior.
Observe o comando Se a seguir.}
J I + 1
Enquanto J < N faa
Se A[I, J] <> A[J, I] ento
{Se um dos valores for diferente, podemos,
com certeza, a rmar que a matriz NO
simtrica}
Simetrica Falso
logica_2_livro_caderno.indb 166 7/12/2006 14:21:14
167
Lgica de Programao II
Unidade 2
{Se j sabemos que a matriz NO simtrica,
ento no preciso comparar os demais
valores; por isso, foi atribudo o valor
N, tanto para I como para J, para que os
dois laos terminem}
J N
I N
Fim Se
J J + 1
Fim Enquanto
I I + 1
Fim Enquanto
{Neste momento a varivel Simtrica tem o valor
Verdadeiro, ou Falso. Com base nesse valor, se
escreve o resultado}
Se Simetrica ento
Escreva (A matriz simtrica)
Seno
Escreva (A matriz NO simtrica)
Fim Se
Fim
4) Dada uma matriz 10 x 10 de valores reais, faa um algoritmo
que faa a leitura desses valores e, ao nal da leitura de todos,
imprima o relatrio com os seguintes itens:
soma dos valores de cada coluna da matriz;
lista dos valores que so menores que a mdia dos
valores;
soma dos elementos da diagonal secundria.
{O trabalho com matrizes praticamente todo baseado
em comandos de repetio, e, como o tamanho da matriz
conhecido, usa-se praticamente sempre o comando
Para-faa.
No caso a seguir, ser de nida uma matriz de tamanho
10x10.}
a)
b)
c)
logica_2_livro_caderno.indb 167 7/12/2006 14:21:14
168
Universidade do Sul de Santa Catarina
Algoritmo Matriz
{Primeiramente sero de nidas as variveis necessrias.
Nesse caso, as variveis novas incluem um vetor, de
nome SomaColuna, com 10 posies, que ser usado para
obter o somatrio de cada coluna da matriz e uma
varivel Mat, que representa uma matriz 10x10.}
I, J, SomaTotal, Media : numrico
SomaDiagSecund : numrico
Mat : matriz[10,10] numrico
SomaColuna : Vetor[10] numrico
Incio
{Como voc viu anteriormente, o processo de leitura dos
dados em matrizes baseado em comandos de repetio.
Voc ver, a seguir, que so necessrios sempre dois
laos de repetio: o primeiro para navegao nas
linhas, e o segundo, para navegao nas colunas}
{No exemplo de leitura a seguir, a matriz ser preenchida
linha a linha, na seguinte seqncia: todas as colunas
da primeira linha, depois as da segunda linha e assim
sucessivamente at a ltima coluna da ltima linha.}
{Aproveitando que a matriz ser percorrida inteiramente,
j foi efetuada a soma de todas as suas clulas, soma
esta que ser utilizada mais tarde para o clculo da
mdia}
SomaTotal 0
Para I de 1 at 10 faa
Para J de 1 at 10 faa
Leia (Mat[I,J])
SomaTotal SomaTotal + Mat[I,J]
Fim Para
Fim Para
{Para efetuar a soma das colunas, recorreu-se ao mesmo
processo, porm foi invertida a ordem de navegao,
variveis I e J. Assim, a navegao ser coluna a
coluna. Sendo todas as linhas da primeira oluna,
depois todas as linhas da segunda coluna e assim por
diante.}
Para J de 1 at 10 faa
SomaColuna[I] 0 {inicializo cada coluna
com 0}
Para I de I at 10 faa
SomaColuna[I] SomaColuna[I] +
Mat[I,J]
Fim Para
Fim Para
logica_2_livro_caderno.indb 168 7/12/2006 14:21:14
169
Lgica de Programao II
Unidade 2
{Para a navegao em uma diagonal, foi usado um
artifcio matemtico; como os nmeros so inversamente
proporcionais, ser preciso apenas um lao de
repetio}
SomaDiagSecund 0
Para I de 1 at 10 faa
SomaDiagSecund SomaDiagSecund +
Mat[I,(11-I)]
Fim Para
{A sada de dados deste algoritmo no to simples
como nos outros. Para que se possam escrever os dados
solicitados so necessrios tambm alguns laos de
repetio}
{Para escrever os valores das somas das colunas, foi
construdo um lao que percorre o vetor SomaColuna
escrevendo o contedo de cada posio}
Para I de I at 10 faa
Escreva (Soma da coluna,I, : ,
SomaColuna[I])
Fim Para
{Calculando a mdia}
Media = SomaTotal / 100
{Aps encontrar a mdia, necessrio percorrer
novamente a matriz, comparando cada uma das posies
com a mdia. Assim, possvel escrever somente
aquelas que so menores que ela.}
Para I de 1 at 10 faa
Para J de I at 10 faa
Se Mat[I,J] < Media ento
Escreva (Mat[I,J])
Fim se
Fim Para
Fim Para
{A soma da diagonal secundria foi calculada j na
navegao. Ento para esse caso no ser preciso de
nenhum lao de repetio}
Escreva(Soma diagonal secundria :,
SomaDiagSecund)
Fim
logica_2_livro_caderno.indb 169 7/12/2006 14:21:15
170
Universidade do Sul de Santa Catarina
Atividades propostas
1) Considere a matriz M:
O Q * I
E * E S
R E U T
A * * S
Agora responda: qual ser a sua confgurao aps a execuo do
algoritmo a seguir?
Algoritmo Matriz
Variveis
I,J: numrico
M: Matriz[4x4] literal
Aux: literal
Incio
Para I de 1 at 4 faa
Para J de 1 at 4 faa
Ler (M[I,J])
Fim Para
Fim Para
Para I de 1 at 4 faa
Para J de I+1 at 4 faa
Aux M[I,J]
M[I,J] M[J,I]
M[J,I] Aux
Fim Para
Fim Para
Aux M[1,1]
M[1,1] M[4,4]
M[4,4] Aux
Aux M[2,2]
M[2,2] M[3,3]
M[3,3] Aux
Fim
logica_2_livro_caderno.indb 170 7/12/2006 14:21:15
171
Lgica de Programao II
Unidade 2
2) Escreva um algoritmo que l uma matriz M (12,13) e divida todos os 13
elementos de cada uma das 12 linhas de M pelo maior elemento em
mdulo daquela linha (escreva a matriz lida e a modifcada).
3) Elabore um algoritmo que l uma matriz M (6x6) contendo valores
numricos, e um valor A. Multiplicar M por A, armazenando os valores
resultantes em vetor. Escreva o vetor ao fnal.
logica_2_livro_caderno.indb 171 7/12/2006 14:21:15
172
Universidade do Sul de Santa Catarina
4) Troque, a seguir:
a) a linha 2 pela linha 8;
b) a coluna 4 pela coluna 10;
c) a diagonal principal pela diagonal secundria;
d) a linha 5 pela coluna 10.
Escreva a matriz assim modifcada (Diagonal principal e diagonal
secundria).
Principal Secundria
X X
X X
X X
X X
logica_2_livro_caderno.indb 172 7/12/2006 14:21:15
3
UNIDADE 3
Manipulao de registros
Objetivos de aprendizagem
Entender o conceito de registro ou estrutura.
Conhecer e praticar montagens de registros.
Criar novos tipos de variveis.
logica_2_livro_caderno.indb 173 7/12/2006 14:21:15
174
Universidade do Sul de Santa Catarina
Para incio de conversa
Manipular registros nada mais que trabalhar com dados
relacionados logicamente, porm de tipos de dados diferentes.
Ou seja, visa a facilitar o agrupamento de variveis que no so
do mesmo tipo, mas que guardam estreita relao lgica; por
exemplo, o cadastro (nome, telefone, sexo, endereo, nmero de
dependentes, idade, cidade, etc) de funcionrios de uma empresa.
Exemplos resolvidos
1) Crie um cadastro de funcionrios com as seguintes
informaes: nome, idade, salrio, endereo. O cadastro de
Endereo deve conter: rua, nmero e cidade. Aps, crie um
algoritmo para ler as informaes de N funcionrios. Conte
quantos funcionrios so de So Paulo.
Algoritmo Empresa
{Como so dois cadastros, preciso ento, criar dois
tipos}
Tipo TENDEREO: registro
Rua, Cidade :literal
Nmero :numrico
Tipo TFUNCIONRIO: registro
Nome, sexo: literal
Idade, Salario: numrico
Endereco: TEndereco

{aqui informado que a varivel
Endereco do tipo TEndereco}
Var
{Agora, ser declarada a varivel FUNCIONARIO, que
um vetor do tipo TFuncionrio, na qual contm todas as
informaes do funcionrio}
FUNCIONARIO: Vetor[9999] TFUNCIONARIO
N, cont, I : numrico
Incio
Leia (Digite o total de funcionrios: ,N)
Para I de 1 at N faa
{Para acessar a informao nome, que um componente
do tipo TFuncionrio, fao da seguinte forma:}
logica_2_livro_caderno.indb 174 7/12/2006 14:21:15
175
Lgica de Programao II
Unidade 3
Leia (FUNCIONARIO[I].Nome)
Leia (FUNCIONARIO[I].Idade)
Leia (FUNCIONARIO[I].Salario)
Leia (FUNCIONARIO[I].Sexo)
{Como o endereo um tipo tambm, para acessar a
rua, por exemplo, ser feito da seguinte forma:}
Leia (FUNCIONARIO[I].Endereco.Rua)
Leia (FUNCIONARIO[I].Endereco.Nmero)
Leia (FUNCIONARIO[I].Endereco.Cidade)
Fim Para
{Clculo para contar quantos funcionrios so de So Paulo}
cont 0
Para I de 1 ate N faa
Se (FUNCIONARIO[I].Endereco.Cidade=So Paulo) ento
cont cont + 1
Fim se
Fim Para
Escreva(Total de funcionrios de So Paulo :,cont)
Fim
2) Imagine uma eleio onde haja 5 candidatos; voc deve gerar
um relatrio parcial do andamento: a cada parcial, voc deve
fornecer o nome do partido, o nome do candidato, o nmero do
candidato e sua contagem de votos.
Faa um algoritmo que seja usado para um nmero desconhecido
de parciais.
Algoritmo eleio
{Declarao de um registro com as variveis utilizadas
em cada parcial; necessrio, pois, que os dados sejam
relacionados e de tipos diferentes}
tipo parcial = registro
Partido: literal
Candidato: numrico
Nome: Literal
Votos: numrico
Fim-registro
logica_2_livro_caderno.indb 175 7/12/2006 14:21:16
176
Universidade do Sul de Santa Catarina
{Como possumos cinco candidatos para cada
relatrio de parciais, sero necessrios, ento,
cinco conjuntos de dados, e a criao de um vetor
facilitar a manipulao dos dados}
relatrio: vetor[5] parcial {declarao de um vetor
de parciais}
X : numrico
Incio
Para X de 1 at 5 faa
Leia (relatrio[X].Partido)
Leia (relatrio[X].Candidato)
Leia (relatrio[X].Nome)
Leia (relatrio[X].Votos)
Fim Para
Escreva (Impresso do relatrio de parciais:)
Para X de 1 at 5 faa
Escreva (Partido: , relatrio[X].Partido)
Escreva (Canditato:, relatrio[X].Nome)
Escreva (Numero: , relatrio[X].Candidato)
Escreva (Votos: , relatrio[X].Votos)
Fim Para
Fim
3) Faa um algoritmo para ler nome, idade, altura, sexo, e as
cinco (5) notas de 100 alunos e armazene estas informaes num
vetor usando registro. Depois da leitura escreva um relatrio
contendo nome e idade de todas as pessoas do sexo feminino que
obtiveram mdia superior a 8.0.
Algoritmo Aluno
ALUNO: registro
Nome: literal
Idade, Sexo: numrico {Sexo 0-Feminino 1-Masculino}
Altura: numrico
{Observe que uma das partes do registro um vetor}
Notas: Vetor[5] numrico
CAD _ ALUNOS: Vetor[100] ALUNO
I, K: Numrico
Soma: numrico

logica_2_livro_caderno.indb 176 7/12/2006 14:21:16
177
Lgica de Programao II
Unidade 3
Incio
Para I de 1 at 100 faa
Leia (CAD _ ALUNOS[I].Nome)
Leia (CAD _ ALUNOS[I].Idade)
Leia (CAD _ ALUNOS[I].Altura)
Leia (CAD _ ALUNOS[I].Sexo)
{Observe os ndices [I] e [K], que so
diferentes. O ndice [I] controla o vetor de
100 alunos e o [K] controla o vetor de 5 notas
de cada aluno [I]}
Para K de 1 at 5 faa
Leia(CAD _ ALUNOS[I].Notas[K])
Fim Para
Fim Para
Para I de 1 ate 100 faa
{Se o aluno NO do sexo feminino, ento NEM
analisamos}
Se (CAD _ ALUNOS[I].Sexo = 0) ento
Soma 0
{Soma as 5 notas da aluna atual [I]. Observe a
importncia de zerarmos a varivel Soma
antes do Para-faa. Assim, garantimos que se
faa uma soma nica para aquela determinada
aluna}
Para K de 1 at 5 faa
Soma CAD _ ALUNOS[I].Notas[K] + Soma
Fim Para
{Calcula a mdia e veri ca se ela maior
que 8}
Se (Soma / 5) > 8 ento
{Escreve nome e idade das alunas com
mdia superior a 8}
Escreva(CAD _ ALUNOS[I].Nome)
Escreva(CAD _ ALUNOS[I].Idade)
Fim Se
Fim Para
Fim
logica_2_livro_caderno.indb 177 7/12/2006 14:21:16
178
Universidade do Sul de Santa Catarina
Atividades propostas
1) Utilizando os conceitos de vetor e registro, estudados nas unidades 1 e
3 respectivamente, faa um algoritmo para ler nome, salrio, endereo
e sexo de 200 funcionrios e armazene estas informaes na memria.
Aps a leitura, escreva na tela:
a) quantas mulheres possuem salrio maior que R$ 1.000,00;
b) qual o maior salrio entre os funcionrios homens;
c) a mdia salarial.
logica_2_livro_caderno.indb 178 7/12/2006 14:21:16
179
Lgica de Programao II
Unidade 3
2) Monte um algoritmo para cadastrar dados pessoais de 100 candidatos
a uma vaga de engenheiro de um sistema de administrao de
currculos. Os dados pessoais so: nome, endereo, cidade, estado,
telefone, grau de escolaridade (1-Graduao, 2-Ps-graduao, 3-
Mestrado, 4-Doutorado) e curso em que se formou. Depois da leitura,
imprima uma relao dos candidatos que tenham grau de ps-
graduao ou superior e que residam em SC. Os campos do relatrio
devem ser: nome, cidade, telefone, grau de escolaridade e curso de
formao.
logica_2_livro_caderno.indb 179 7/12/2006 14:21:16
180
Universidade do Sul de Santa Catarina
3) Faa um algoritmo que receba as informaes sobre determinado
acervo de flmes, ttulo, gnero, autor, durao e sinopse. Alm disso,
imprima uma relao de flmes por gnero. Considere que a Pinacoteca
tem 3.500 Filmes.
logica_2_livro_caderno.indb 180 7/12/2006 14:21:16
4
UNIDADE 4
Tpicos avanados em
algoritmos computacionais
Objetivos de aprendizagem
Identifcar os comandos e compreender a lgica em
pseudocdigo, proposta para resolver o problema.

logica_2_livro_caderno.indb 181 7/12/2006 14:21:16


182
Universidade do Sul de Santa Catarina
Para incio de conversa
Com esta unidade, voc vai aprimorar seus estudos em tpicos
avanados utilizando vetores, como a ordenao de literais,
pesquisa simples e pesquisa binria, com explicaes passo a
passo da resoluo destes mtodos.
Exemplos resolvidos
Ordenao de literais
1. Faa um algoritmo para ordenar o nome de 50 pessoas.
Algoritmo OrdenarNomes
{Declarando variveis}
NOME : Vetor[50] de literal
AUX : literal
I, J : numrico
Incio
{Fazendo a leitura do vetor de nomes}
Para I de 1 at 50 faa {ou ainda poderia: Para
I de 0 at 49 faa}
Escreva Digite o nome na posio : , I
Leia NOME[I]
Fim Para
{Fazendo a ordenao do vetor de nomes Isso
ser explicado aps o algoritmo}
Para I de 1 at 50 faa
Para J de (I+1) at 50 faa
Se NOME[I] > NOME[J] ento
AUX NOME[I]
NOME[I] NOME[J]
NOME[J] AUX
Fim se
Fim Para
Fim Para
{Escrevendo o vetor ordenado}
Escreva Nomes Ordenados:
Para I de 1 at 50 faa
Escreva NOME[I]
Fim Para
Fim
logica_2_livro_caderno.indb 182 7/12/2006 14:21:17
183
Lgica de Programao II
Unidade 4
Explicao do Mtodo de Ordenao utilizado
Imagine o vetor chamado NOME e suas posies I, com
tamanho 4:
NOME Jos Marcos Ana Maria
I 1 2 3 4
importante lembrar que quando se menciona posio est-se
referindo a I, e quando mencionado no contedo do vetor, na
informao, refere-se a NOME[I].
Qual a idia do algoritmo apresentado anteriormente? Ser
utilizado o primeiro nome (Jos), comparando-o com todos
os demais, ou seja, ser xada a posio I=1 e ser comparado
o nome Jos com Marcos, Ana e Maria (I=2, 3 e 4). Ento
ser colocado o menor nome (Ana) na primeira posio e ser
comparada a posio do 2 nome com os demais, e assim por
diante. Acompanhe o exemplo.
Para I de 1 at 4 faa
{essa primeira estrutura de repetio serve para
xar o primeiro nome (a primeira vez que entra nesse
para-faa Jos) a ser comparado com os demais
quando I=1. Depois ser com I=2, I=3 e I=4.}

Para J de (I+1) at 4 faa

{essa segunda estrutura de repetio serve
para percorrer os demais nomes a partir
daquele que ser xo, ou seja, se estou na
primeira posio I=1, o J ser I+1, ou seja, 2
(depois 3, depois 4, e assim por diante).}
Se NOME[I] > NOME[J] ento
AUX NOME[I]
NOME[I] NOME[J]
NOME[J] AUX
Fim se
{Na estrutura de deciso, SE est sendo
comparado NOME[1] > NOME[2] (Jos com
Marcos), ou seja, o I=1 e J=2. Veri ca-se
se Jos > que Marcos, ou seja, a letra
J vem depois de M? No. Ento no h
troca.
O que ocorre? Volta para o PARA J DE
(I+1) AT 4 FAA. Agora o I vale 1 e J
est valendo 3.
logica_2_livro_caderno.indb 183 7/12/2006 14:21:17
184
Universidade do Sul de Santa Catarina
Ento, entro na estrutura de deciso SE e testo
NOME[1] > NOME[3]. Jos maior do que Ana? Sim.
Ento a troca entre a posio 1 e 3 ser feita.}
Meu vetor agora se apresenta assim:
NOME Ana Marcos Jos Maria
I 1 2 3 4
{Volta para o PARA J DE (I+1) AT 4 FAA.
Agora o J est valendo 4.
Entra na estrutura de deciso SE e testa
NOME[1] > NOME[4]. Agora ateno. Vou
comparar Ana com Maria. Ana > que
Maria? No. No realizada nenhuma
troca.
Volta para PARA J DE (I+1) AT 4 FAA. J
chegou a 4. Ento sai do PARA J e volta
para o PARA I, agora o I vale 2.
Entra novamente no PARA J DE (I+1) ATE 4
FAA.}
I=2
J=I+1 = 3
{Ento ser xa; xar a posio 2 e
comparar com o restante do vetor a
partir da posio 3.
Se NOME[2] > NOME[3] ento. verdade?
Marcos > Jos? Sim. Ento realiza a
troca.}
O vetor ca assim agora:
NOME Ana Jos Marcos Maria
I 1 2 3 4
{Volta para o PARA J DE (I+1) AT 4 FAA.
Entra no SE e compara NOME[2]>NOME[4].
No. No realizada troca.
PARA J j chegou a 4. Ento pra! E vai
para o PARA I novamente. O I j chegou
a 4? No. O I estava valendo 2 e agora
passa a valer 3.}
logica_2_livro_caderno.indb 184 7/12/2006 14:21:17
185
Lgica de Programao II
Unidade 4
Entra no PARA J novamente:
I=3
J=I+1=4
{Vou comparar NOME[3]>NOME[4], Marcos >
Maria? No. Ento no troca.
O PARA J j est em 4. Volta para o PARA
I.}

I=4
J=I+1=5.
{No entra no PARA J porque j
ultrapassou o limite 4. Volta para o PARA
I. Agora o I j chegou a 4.}
Observe que o vetor exemplo cou
ordenado.
NOME Ana Jos Marcos Maria
I 1 2 3 4
Fim Para
Fim Para
logica_2_livro_caderno.indb 185 7/12/2006 14:21:17
186
Universidade do Sul de Santa Catarina
Pesquisa
Seqencial ou Linear
1) Dados desordenados Pesquisa Linear Simples
{Este algoritmo representa a forma mais bsica de
consulta a um grupo de dados; seria o equivalente
leitura de um livro em procura de uma determinada
palavra; voc pode imaginar como isso trabalhoso
no?}
a,n,i: numrico
{A varivel a representa o nmero procurado}
{A varivel n representa o nmero de valores
armazenados}
Incio
Leia (a, n)
{Primeiramente, preciso preencher o vetor com os
valores; para isso, usamos um lao que pede para o
usurio digitar cada um dos valores}
Para i de 1 at n faa
Leia ( x[ i ] )
Fim Para
{Abaixo posicionamos nossa varivel auxiliar i na
primeira posio do vetor e ento desenvolvemos um
lao procura do primeiro valor que corresponder ao
valor procurado}
i 1
Enquanto (i<=n) E (x[i]<>a) faa
i i + 1
Fim Enquanto
{A seguir, veri camos se o nosso ponteiro est
direcionado para uma posio no vetor; se ele
estiver apontando para o nal, quer dizer que
no encontramos nenhum valor correspondente; se
estiver no meio, esta corresponde posio do vetor
procurado.}
Se i > n ento
Escreva (No encontrou)
Seno
Escreva (Encontrou na posio : , i)
Fim Se
Fim.
logica_2_livro_caderno.indb 186 7/12/2006 14:21:17
187
Lgica de Programao II
Unidade 4
2) Dados Ordenados - Pesquisa Binria (para vetores grandes)
{O exemplo abaixo se refere Pesquisa Binria para
nmeros inteiros, mas o mtodo pode ser aplicado para
tipo de valor, como real e literal.}
Algoritmo PesquisaBinaria
numeroPesquisa: numrico {nmero a ser
pesquisado}
n: numrico {quantidade de valores no vetor}
x: vetor[N] de numrico {vetor de tamanho n de
valores inteiros}
incio, meio, nal, i: numrico
Incio
{A idia central deste mtodo de pesquisa
dividir para conquistar, isto , sempre
perguntar ao vetor onde est o valor que estamos
procurando: se na metade da esquerda do vetor, ou
na metade da direita. De posse dessa informao,
ns rede nimos o incio e o m desse vetor e
passamos a ter agora a metade do vetor original,
via de regra, um novo vetor. A partir da o
processo continua, sempre descobrindo em que
metade o valor est (e rede nindo incio e m
do vetor sucessivamente), at que o valor seja
encontrado, ou no seja mais possvel dividir o
vetor; neste ltimo caso, signi ca que o valor no
estava no vetor.
Este mtodo especialmente utilizado em vetores
GRANDES. Como vimos acima, a vantagem que a
cada iterao o tamanho do vetor passa a ter
a metade do anterior, e assim sucessivamente,
diminuindo, desse modo, o tempo de processamento.}
{Leitura do nmero a ser pesquisado e do tamanho
do vetor}
Leia (numeroPesquisa , N)
{Leitura dos valores do vetor}
Para i de 1 at N faa
Leia ( x [ i ] )
Fim Para
{O incio e o nal neste ponto representam o
tamanho original do vetor}
Incio 1
nal N
Enquanto (incio <= nal) faa
logica_2_livro_caderno.indb 187 7/12/2006 14:21:18
188
Universidade do Sul de Santa Catarina
{Descobrimos qual o meio do vetor}
meio (incio + nal)/2
{Perguntamos se o nmero a ser pesquisado est
na metade da esquerda ou da direita do vetor
original (ou do passo anterior)}
Se (numeroPesquisa < x[meio] ) ento
{O nmero est na metade esquerda,
rede no o nal}
Final meio - 1
Seno
Se (numeroPesquisa > x[meio] ) ento
{O nmero est na metade direita,
rede no o incio}
Incio nal + 1
Seno
{Nesta opo, o nmero foi encontrado,
ento atribumos varivel incio um
valor tal, para que o lao TERMINE de
girar}
Incio nal + 1 {artifcio para
interromper o lao}
Fim Se
Fim Se
Fim enquanto
{Se samos do lao e x[meio] diferente do
numeroPesquisa, ento NO encontramos, seno...
(x[meio] igual a numeroPesquisa, ento
ENCONTRAMOS}
Se (x[meio] <> numeroPesquisa) ento
Escreva (No Encontrou)
Seno
Escreva (Encontrou na posio : , meio)
Fim Se
Fim
logica_2_livro_caderno.indb 188 7/12/2006 14:21:18
189
Lgica de Programao II
Unidade 4
Atividades propostas
1) Faa um algoritmo para ler um vetor X com N elemento. Leia um valor
A qualquer. Verifque se este valor pertence ao vetor. Se pertencer,
mostre uma mensagem na tela. E informe quantas vezes ele aparece e
em quais posies. Caso no exista, escreva uma mensagem.
logica_2_livro_caderno.indb 189 7/12/2006 14:21:18
190
Universidade do Sul de Santa Catarina
2) Faa um algoritmo para ler um vetor com 500 valores inteiros e verifcar
se um determinado valor N est ou no dentro dele. Escreva uma
mensagem dizendo se encontrou ou no o valor.
logica_2_livro_caderno.indb 190 7/12/2006 14:21:18
5
UNIDADE 5
Programao estruturada
Objetivos de aprendizagem
Entender os conceitos de programao estruturada.
Aplicar modularizao aos algoritmos.
logica_2_livro_caderno.indb 191 7/12/2006 14:21:18
192
Universidade do Sul de Santa Catarina
Para incio de conversa
A realizao de uma determinada tarefa muitas vezes
decomposta em seqncias de passos. Lembre-se da tarefa de
trocar uma lmpada: existe uma srie de passos que devem ser
seguidos.
Conforme uma tarefa cresce e se torna mais complexa, surge
uma srie de situaes a serem resolvidas para que esse problema
possa ser solucionado. Podemos dizer que passamos a ter dentro
deste problema uma srie de probleminhas. Muitas vezes,
essa grande quantidade de probleminhas afeta a legibilidade
(clareza), fazendo com que uma consulta ou manuteno futura
dessa lgica seja uma tarefa difcil de se realizar. Por meio da
modularizao possvel evitar isso, como tambm podemos
reutilizar esse probleminha descrito em uma outra tarefa.
Portanto, modularizar quebrar um problema em pequenas
partes, sendo que cada uma dessas partes ser responsvel pela
realizao de uma etapa do problema.
Exemplos resolvidos
1) Dada uma frase, faa uma FUNO que verique se existe
alguma palavra com mais de 7 caracteres. Considere que cada
palavra separada da outra por, no mnimo, um espao em branco.
Funo ExistePalavraMaiorQueSete(Frase: literal):
lgico
K, TamPalavra: numrico
{Observe que Frase o parmetro da funo e
ExistePalavraMaiorQueSete o prprio nome da
funo que retorna Verdadeiro ou Falso}
Incio
{Partimos do princpio de que NO existe Palavra
com tamanho maior que 7 (sete)}
ExistePalavraMaiorQueSete Falso
logica_2_livro_caderno.indb 192 7/12/2006 14:21:18
193
Lgica de Programao II
Unidade 5
{Artifcio identi car o nal da frase, neste caso
a frase est terminando com os caracteres $
(espao e cifro) }
Frase Frase + $
K 0
{Vale lembrar que um literal pode ser manipulado
como um VETOR de caracteres, iniciando na posio
0(zero)}
TamPalavra 0
Enquanto (NO ExistePalavraMaiorQueSete) e
(Frase[K] <> $) faa
{Se o caractere da posio K for diferente de
um espao em branco, estamos assumindo que ele
est fazendo parte de uma palavra, por isso
incrementamos a varivel TamPalavra que guarda
esta informao}
Se Frase[K] <> Ento
TamPalavra TamPalavra + 1
Seno
{Neste ponto a palavra terminou e, ento,
precisamos testar e seu tamanho}
Se TamPalavra > 7 Ento
{Se a palavra for maior que sete,
j temos nosso resultado, por isso
atribumos Verdadeiro varivel para
que o lao termine}
ExistePalavraMaiorQueSete Verdadeiro
Seno
{Neste ponto precisamos zerar a
varivel que guarda o tamanho da
palavra, para comear a contar o
tamanho de outra, visto que essa, neste
ponto, no tem tamanho maior que 7(set(}
TamPalavra 0
Fim Se
Fim Se
{Incrementamos a varivel K para acessar o
prximo caractere da frase}
K K + 1
Fim Enquanto
Fim
logica_2_livro_caderno.indb 193 7/12/2006 14:21:19
194
Universidade do Sul de Santa Catarina
2) Faa um programa para ler o nome e salrio bruto de N
funcionrios. Calcule e imprima o valor do desconto do INSS,
o valor de desconto do IRRF (se houver) e o valor do salrio
lquido do funcionrio. Escreva uma funo para retornar o valor
de desconto do INSS e outra funo para retornar o valor de
desconto do IRRF.
Tabela de Desconto do INSS
SALRIO BRUTO % DE DESCONTO
At R$ 429,00 7,65 %
De R$ 429,01 at R$ 540,00 8,65 %
De R$ 540,01 at R$ 715,00 9,00 %
De R$ 715,01 at R$ 1.430,00 11,00 %
Acima de R$ 1430,00 R$ 157,00 (teto de contribuio)
Tabela de Desconto do IRFF
SALRIO BRUTO % DE DESCONTO
At R$ 1.058,00 Isento
De R$ 1.059,00 a R$ 2.115,00 15%
Acima R$ 2.115,00 27,5%
{Programa Principal; neste, precisamos apenas das
chamadas para as funes}
Algoritmo salrio
SalBruto, NumDeFunc,
DescINSS, DescIRRF, SalLiq: numrico
Incio
Leia (SalarioBruto)
Leia (NumDeFunc)
DescINSS CalculaINSS(SalarioBruto)
DescIRRF CalculaIRRF (SalarioBruto)
SalLiq = SalarioBruto DescINSS DescIRRF
Escreva (O salrio Liquido :, SalLiq)
Fim
logica_2_livro_caderno.indb 194 7/12/2006 14:21:19
195
Lgica de Programao II
Unidade 5
{Esta a funo para calcular o valor do desconto de
IRRF}

Funo CalculaIRRF (SalarioBruto:Numrico) :numrico
Incio
Se SalarioBruto <= 1058 ento
DescIRRF = 0
Seno
Se SalarioBruto <= 2115 ento
DescIRRF = SalarioBruto * 0,15
Seno
DescIRRF = SalarioBruto * 0,275
Fim Se
Fim Se
Retorna DescIRRF
Fim
{Esta a funo para calcular o valor do desconto de
INSS}

Funo CalculaINSS(SalarioBruto:Numrico) :numrico
Incio
Se SalarioBruto <= 429 ento
DescINSS = SalarioBruto * 0,0765
Seno
SE SalarioBruto <= 540 ento
DescINSS = SalarioBruto * 0,0865
Seno
SE SalarioBruto <= 715 ento
DescINSS = SalarioBruto * 0,0900
Seno
SE SalarioBruto < 1.430 ento
DescINSS = SalarioBruto * 0,1100
Seno
DescINSS = 157,00
Fim SE
Fim Se
Fim Se
Fim Se
Retorna DescINSS
Fim
logica_2_livro_caderno.indb 195 7/12/2006 14:21:19
196
Universidade do Sul de Santa Catarina
Atividades propostas
1) Voc estudou, em nossa disciplina, modularizao ou sub-rotinas
e descobriu que uma funo dita como sendo uma sub-rotina ou
mdulo do algoritmo principal. A partir do exemplo supermercado
abaixo, faa uma funo chamada CALCDESCONTO que receba como
parmetro o cdigo de um produto e seu valor. Esta funo deve
retornar o novo valor do produto, com as seguintes regras:
caso o produto tenha o cdigo ABC, ser concedido um desconto
de 4,5% (quatro e meio por cento);
caso o produto tenha o cdigo XYZ, ser concedido um desconto
de 6,5% (seis e meio por cento), se o valor da mercadoria for inferior
a R$ 85,00 (oitenta e cinco reais);
caso o produto no se enquadre em nenhum desses cdigos, ele no
receber desconto;
Exemplo supermercado:
Um cliente foi a um supermercado e comprou N produtos, sendo
informado que, dependendo do cdigo do produto, ele receberia
um desconto. Faa um algoritmo pedindo que o usurio digite as
informaes de N produtos: seu valor e o seu cdigo. Aps a digitao,
mostre na tela, o valor total que foi pago pelo cliente, considerando os
possveis descontos (utilize a funo CALCDESCONTO neste algoritmo).

logica_2_livro_caderno.indb 196 7/12/2006 14:21:19


197
Lgica de Programao II
Unidade 5
2) Faa uma funo chamada EhPrimo que receba um valor e retorne
1, caso o nmero seja primo, ou 0, em caso contrrio. Um nmero N
primo quando no divisvel por nenhum valor (exceto 1) at N/2.
Quando se encontrar um valor pelo qual N divisvel, a funo pode
parar a busca e considerar o nmero no primo.
3) Faa um programa que calcule a rea e o permetro do retngulo.
Modularize esse programa, ou seja, divida-o em funes
adequadamente.
logica_2_livro_caderno.indb 197 7/12/2006 14:21:19
logica_2_livro_caderno.indb 198 7/12/2006 14:21:19
Respostas e comentrios das
atividades de auto-avaliao
Unidade 1
1) Analise o algoritmo abaixo e mostre o desenvolvimento do
mesmo mediante teste de mesa.
Algoritmo Teste
Var
I:numrico
V: Vetor[5] numrico
Incio
Para I de 1 at 5 faa
V[I] I+1
Fim Para
V[3] V[1]+V[5]
V[5] V[V[2]]
Para I de 1 at 5 faa
Escreva (V[I])
Fim Para
Fim
Resposta:
I=1 I=2 I=3 I=4 I=5
V[1] = 2 V[2] = 3 V[3] = 4 V[4] = 5 V[5] = 6
V[3] = 2 + 6 = 8
V[5] = V[V[2]] = V[3] = 4
I=1 I=2 I=3 I=4 I=5
V[1] = 2 V[2] = 3 V[3] = 8 V[4] = 5 V[5] = 4
logica_2_livro_caderno.indb 199 7/12/2006 14:21:19
200
Universidade do Sul de Santa Catarina
2) Escreva um algoritmo que leia um vetor de 13 elementos inteiros, que
o Gabarito de um teste da loteria esportiva, contendo os valores
1 (coluna 1), 2 (coluna 2) e 3 (coluna do meio). Leia, a seguir, para
cada apostador, o nmero do seu carto e um vetor de Respostas
de 13 posies. Verifque para cada apostador o nmero de acertos,
comparando o vetor de Gabarito com o vetor de Respostas. Escreva o
nmero do apostador e o nmero de acertos. Se o apostador tiver 13
acertos, mostre a mensagem Ganhador.
Resposta:
Algoritmo loteriaesportiva
Var
Gabarito, Respostas: Vetor[13] numrico
NROCARTAO, CONTACERTOS, I : numrico
Incio
Escrever (Informe o gabarito do jogo)
Para I de 1 at 13 faa
Escreva(1= COLUNA1, 2= COLUNA2, 3= COLUNA DO
MEIO)
Leia (Gabarito[I])
Fim Para
Escrever (Informe o nmero do carto:)
Leia (NROCARTAO)
CONTACERTOS 0
Escrever (Informe as 13 posies do jogo)
Para I de 1 at 13 faa
Escreva(1= COLUNA1, 2= COLUNA2, 3= COLUNA DO
MEIO)
Leia (RESPOSTAS[I])
Se (RESPOSTAS[I] = GABARITO[I]) ento
CONTACERTOS CONTACERTOS + 1
Fim Se
Fim Para
Escrever (Nmero do carto = , NROCARTAO)
Escrever (Nmero de acertos = , CONTACERTOS)
Se (CONTACERTOS=13) ento
Escreva (VENCEDOR)
Fim Se
Fim
3) Escreva um algoritmo que leia um vetor de 20 posies e mostre-o. Em
seguida, troque o primeiro elemento com o ltimo, o segundo com o
penltimo, o terceiro com o antepenltimo, e assim sucessivamente.
Mostre o novo vetor depois da troca.

logica_2_livro_caderno.indb 200 7/12/2006 14:21:20
201
Lgica de Programao II
Resposta :
Algoritmo TROCA_TROCA
Var
V : VETOR[20] numrico
AUX, I, J : numrico
Incio
Escreva (INFORME 20 VALORES)
Para I de 1 at 20 faa
Leia (V[I])
Fim Para
I 1
J 20
repita
AUX V[I]
V[I] V[J]
V[J] AUX
I I + 1
J J 1
At (J<=I)
Para I de 1 at 20 faa
Escrever (V[I])
Fim Para
Fim
4) Faa um algoritmo que leia um vetor (A) de 100 posies. Em seguida,
compacte o vetor, retirando os valores nulos e negativos. Coloque o
resultado no vetor B.
Resposta:
Algoritmo Compacto
Var
A, B : Vetor[100] numrico
I, J : numrico
Incio
Escreva (Informe 100 valores)
Para I de 1 at 100 faa
Leia (A[I])
Fim Para
J 1
Para I de 1 at 100 faa
Se (A[I] > 0) ento
B[J] A[I]
J J + 1
Fim se
Fim Para
I 1
Enquanto (I<J) faa
Escreva (B[I])
I I + 1
Fim enquanto
Fim
logica_2_livro_caderno.indb 201 7/12/2006 14:21:20
202
Universidade do Sul de Santa Catarina
Unidade 2
1) Considere a matriz M:
O Q * I
E * E S
R E U T
A * * S
Agora responda: qual ser a sua confgurao aps a execuo do
algoritmo a seguir?
Algoritmo Matriz
Variveis
I,J: numrico
M: Matriz[4x4] literal
Aux: literal
Incio
Para I de 1 at 4 faa
Para J de 1 at 4 faa
Ler (M[I,J])
Fimpara
Fimpara
Para I de 1 at 4 faa
Para J de I+1 at 4 faa
Aux M[I,J]
M[I,J] M[J,I]
M[J,I] Aux
Fimpara
Fimpara
Aux M[1,1]
M[1,1] M[4,4]
M[4,4] Aux
Aux M[2,2]
M[2,2] M[3,3]
M[3,3] Aux
Fim
Resposta:
I = 1
J = 2
AUX M[1,2] (Q)
M[1,2] M[2,1] (E)
M[2,1] AUX (Q)
I = 1
J = 3
AUX M[1,3] (*)
M[1,3] M[3,1] (R)
M[3,1] AUX (*)
I = 1
J = 4
AUX M[1,4] (I)
M[1,4] M[4,1] (A)
M[4,1] AUX (I)
I = 2
J = 3
AUX M[2,3] (E)
M[2,3] M[3,2] (E)
M[3,2] AUX (E)
I = 2
J = 4
AUX M[2,4] (S)
M[2,4] M[4,2] (*)
M[4,2] AUX (S)
I = 3
J = 4
AUX M[3,4] (T)
M[3,4] M[4,3] (*)
M[4,3] AUX (T)
I = 4
J = 5
NADA ACONTECE
logica_2_livro_caderno.indb 202 7/12/2006 14:21:20
203
Lgica de Programao II
AUX M[1,1] (O)
M[1,1] M[4,4] (S)
M[4,4] AUX (O)
AUX M[2,2] (*)
M[2,2] M[3,3] (U)
M[3,3] AUX (*)
Confgurao fnal:
S E R A
Q U E *
* E * *
I S T O
2) Escreva um algoritmo que l uma matriz M (12,13) e divida todos os
13 elementos de cada uma das 12 linhas de M pelo maior elemento
daquela linha. Escreva a matriz lida e a modifcada.
Resposta:
Algoritmo Matriz1
Variveis
M : MATRIZ[12,13] numrico
MAIOR : numrico
I, J: numrico
Incio
Para I de 1 at 12 faa
Para J de 1 at 13 faa
Escreva (Informe o valor de M[,I, ,,J, ]:)
Leia (M[I,J])
Fim Para
Fim Para
Para I de 1 at 12 faa
MAIOR M[I,1]
Para J de 2 at 13 faa
Se (M[I,J] > MAIOR ento
MAIOR M[I,J]
Fim se
Fim Para
Para J de 1 at 13 faa
M[I,J] M[I,J] / MAIOR
Fim Para
Fim Para
Para I de 1 at 12 faa
Para J de 1 at 13 faa
Escreva (M[ ,I, , J ,]=)
Escreva (M[I,J])
Fim Para
Fim Para
Fim
logica_2_livro_caderno.indb 203 7/12/2006 14:21:20
204
Universidade do Sul de Santa Catarina
3) Elabore um algoritmo que l uma matriz M(6x6) contendo valores reais,
e um valor A, do tipo inteiro. Multiplicar M por A, armazenando os
valores resultantes em vetor. Escreva o vetor ao fnal.
Resposta:
Algoritmo Matriz2
Variveis
M : MATRIZ[6,6] numrico
V : VETOR [36] numrico
A : numrico
K, I, J: numrico
Incio
Escrever (Informe um valor inteiro)
Leia(A)
Para I de 1 at 6 faa
Para J de 1 at 6 faa
Leia (M[I,J])
Fim para
Fim para
K 1
Para I de 1 at 6 faa
Para J de 1 at 6 faa
V[K] M[I,J] * A
Escreva (V[K])
K K + 1
Fim Para
Fim Para
Fim
4) Troque, a seguir:
a) a linha 2 pela linha 8;
b) a coluna 4 pela coluna 10;
c) a diagonal principal pela diagonal secundria;
d) a linha 5 pela coluna 10.
Escreva a matriz assim modifcada (diagonal principal e diagonal
secundria).
Principal Secundria
X X
X X
X X
X X
Resposta:
logica_2_livro_caderno.indb 204 7/12/2006 14:21:21
205
Lgica de Programao II
Algoritmo Matriz3
Var
M : MATRIZ[10,10] numrico
AUX, C, K, I, J: numrico
Incio
Para I de 1 at 10 faa
Para J de 1 at 10 faa
Leia (M[I,J])
Fim Para
Fim para
{Troca a linha 2 pela linha 8}
Para J de 1 at 10 faa
AUX M[2,J]
M[2,J] M[8,J]
M[8,J] AUX
Fim Para
{Troca a coluna 4 pela coluna 10}
Para I de 1 at 10 faa
AUX M[I,4]
M[I,4] M[I,10]
M[I,10] AUX
Fim Para
{Troca a linha 5 pela coluna 10}
Para K de 1 at 10 faa
AUX M[5,K]
M[5,K] M[K,10]
M[K,10] AUX
Fim Para
{Troca a diagonal principal pela diagonal
secundria}
I 1
J 1
K 10
Repita
AUX M[I,C]
M[I,C] M[I,K]
M[I,K] AUX
I I + 1
J J + 1
K K 1
At (I>10 E J >10 E K <1)
Para I de 1 at 10 faa
Para J de 1 at 10 faa
Escrever (M[I,J])
Fim para
Fim Para
Fim
logica_2_livro_caderno.indb 205 7/12/2006 14:21:21
206
Universidade do Sul de Santa Catarina
Unidade 3
1) Utilizando os conceitos de vetor e registro, estudados nas unidades 1 e
3 respectivamente, faa um algoritmo para ler nome, salrio, endereo
e sexo de 200 funcionrios e armazene estas informaes na memria.
Aps a leitura, escreva na tela:
a) quantas mulheres possuem salrio maior que R$ 1.000,00;
b) qual o maior salrio entre os funcionrios homens;
c) a mdia salarial.
Resposta:
Algoritmo RelatorioSalarial
Tipo TFUNC
NOME, END, SEXO : literal
SALRIO : numrico
Var
FUNC : vetor [200] TFUNC
I, TOTALMUL,
MAIORSAL, MEDIASAL : numrico
Incio
{leitura dos dados}
Para I de 1 at 200 faa
Escreva Digite o nome
Leia FUNC[I].NOME
Escreva Digite o endereo
Leia FUNC[I].END
Escreva Digite o sexo
Leia FUNC[I].SEXO
Escreva Digite o salrio
Leia FUNC[I].SALRIO
Fim para
{Letra A}
TOTALMUL0
Para I de 1 at 200 faa
Se (FUNC[I].SEXO=F) E (FUNC[I].
SALARIO>1000) ento
TOTMULTOTMUL + 1
Fim se
Fim Para
logica_2_livro_caderno.indb 206 7/12/2006 14:21:21
207
Lgica de Programao II
{Letra B}
MAIORSAL0
Para I de 1 at 200 faa
Se (FUNC[I].SEXO=M)E(FUNC[I].
SALARIO>MAIORSAL) ento
MAIORSALFUNC[I].SALARIO
Fim se
Fim Para
{Letra C}
MEDIASAL0
Para I de 1 at 200 faa
MEDIASALMEDIASAL+ FUNC[I].SALARIO
Fim Para
MEDIASALMEDIASAL/200
{Sada dos dados}
Escreva (Total de mulheres com mais de R$
1.000,00 : , TOTALMUL)
Escreva Maior salrio dos homens : , MAIORSAL
Escreva Mdia Salarial : , MEDIASAL
Fim
2) Monte um algoritmo para cadastrar dados pessoais de 100 candidatos a
uma vaga de engenheiro de um sistema de administrao de currculos.
Os dados pessoais so: nome, endereo, cidade, estado, telefone,
grau de escolaridade (1-Graduao, 2-Ps-graduao, 3-Mestrado, 4-
Doutorado) e curso em que se formou. Depois da leitura, imprima uma
relao dos candidatos que tenham grau de ps-graduao ou superior
e que residam em SC. Os campos do relatrio devem ser: nome, cidade,
telefone, grau de escolaridade e curso de formao.
Resposta:
Algoritmo PesquisaCandidatos
Var
{De nio do registro}
tipo CADASTRO : registro
NOME: literal {Nome do Candidato}
ENDERECO: literal {Endereo}
CIDADE: literal {Cidade}
UF: literal {Unidade da Federao}
FONE: literal {Telefone}
GRAU : numrico {Grau de Escolaridade}
CURSO : literal {Nome do Curso}
Fim-registro
logica_2_livro_caderno.indb 207 7/12/2006 14:21:21
208
Universidade do Sul de Santa Catarina
{Declarao das variveis}
CANDIDATOS : vetor[100] CADASTRO
K : numrico {Contador}
Incio
{Leitura dos dados cadastrais}
Para K de 1 at 100 passo 1 faa
Leia (CANDIDATOS[K].NOME)
Leia (CANDIDATOS[K].ENDERECO)
Leia (CANDIDATOS[K].CIDADE)
Leia (CANDIDATOS[K].UF)
Leia (CANDIDATOS[K].FONE)
Leia (CANDIDATOS[K].GRAU)
Leia (CANDIDATOS[K].CURSO)
Fim Para
{Processamento}
Para K de 1 at 100 passo 1 faa
Se (CANDIDATOS[K].UF=SC)E(CANDIDATOS[K].
GRAU > 1) Ento
Escreva (CANDIDATOS[K].NOME)
Escreva (CANDIDATOS[K].ENDEREO)
Escreva (CANDIDATOS[K].CIDADE)
Escreva (CANDIDATOS[K].UF)
Escreva (CANDIDATOS[K].FONE)
Escreva (CANDIDATOS[K].GRAU)
Escreva (CANDIDATOS[K].CURSO)
Fim Se
Fim Para
Fim
logica_2_livro_caderno.indb 208 7/12/2006 14:21:22
209
Lgica de Programao II
3) Faa um algoritmo que receba as informaes sobre determinado
acervo de flmes, ttulo, gnero, autor, durao e sinopse. Alm disso,
imprima uma relao de flmes por gnero. Considere que a Pinacoteca
tem 3.500 Filmes.
Resposta:
Algoritmo Acervo
tipo Filme = registro
Ttulo: literal
Gnero: literal
Autor: Literal
Durao: numrico
Sinopse: literal
m-registro
Acervo : Vetor [3500] Filme
Generodesejado: literal
contador : numrico
Incio
Para contador de 1 at 3500 faa
Leia Acervo[contador].Ttulo
Leia Acervo[contador].Genero
Leia Acervo[contador].Autor
Leia Acervo[contador].Duracao
Leia Acervo[contador].Sinopse
Fim Para

Escreva (Deseja pesquisar algum gnero?)
Leia (Generodesejado)
Enquanto Genero = sim faa
Para contador de 1 at 3500 faa
Se Acervo[contador].Genero =
Generodesejado
Escreva Acervo[contador].
Ttulo
Escreva Acervo[contador].
Genero
Escreva Acervo[contador].
Autor
Escreva Acervo[contador].
Duracao
Escreva Acervo[contador].
Sinopse
Fim Se
Fim Para
Escreva (Deseja mais algum gnero?)
Leia (Generodesejado )
Fim Enquanto
Fim.
logica_2_livro_caderno.indb 209 7/12/2006 14:21:22
210
Universidade do Sul de Santa Catarina
Unidade 4
1) Faa um algoritmo para ler um vetor X com N elemento. Leia um valor
A qualquer. Verifque se este valor pertence ao vetor. Se pertencer,
mostre uma mensagem na tela. E informe quantas vezes ele aparece e
em quais posies. Caso no exista, escreva uma mensagem.
Resposta:
Algoritmo EncontraValor
Var
X, Posicoes: vetor[9999] numrico
K, N, cont: numrico
Inicio
{Leitura dos valores do vetor}
Leia (Digite o total de valores do vetor: ,N)
Para I de 1 at N faa
Leia(X[I])
Fim Para
{Leitura do valor a ser pesquisado}
Leia (K)
{Processamento Encontrar o valor}
{Considerarmos inicialmente que NO
encontraremos o valor}
cont 0
Para I de 1 at N faa
Se (X[I] = K) ento {pesquisando o valor no
vetor}
Posicoes[cont] I {guardando a
posio onde o valor se encontra}
cont cont + 1
Fim Se
Fim Para
Se cont = 0 ento
Escreva (Valor no encontrado.)
Seno
{Escrever quantas vezes o valor aparece no
vetor}
Escreva (Valor encontrado. Ele aparece
,cont, vezes no vetor X)
{Escrever as posies em que o valor
aparece no vetor}
Para I de 1 at cont faa
Escreva(Posicoes[I])
Fim Para
Fim Se
Fim.
logica_2_livro_caderno.indb 210 7/12/2006 14:21:22
211
Lgica de Programao II
2) Faa um algoritmo para ler um vetor com 500 valores inteiros e verifcar
se um determinado valor N est ou no dentro dele. Escreva uma
mensagem dizendo se encontrou ou no o valor.
Resposta:
Algoritmo EncontraValor
Algoritmo EncontraValor
Var
Nmeros: vetor[500] numrico
K, N: numrico
Encontrou: lgico
Incio
{Leitura dos valores do vetor}
Para K de 1 at 500 faa
Leia(Numeros[K])
Fim Para
{Leitura do valor a ser pesquisado}
Leia (N)
{Processamento Encontrar o valor}
{Considerarmos inicialmente que NO
encontraremos o valor}
Encontrou Falso
K 1
Enquanto (No Encontrou) e (K < 500) faa
Encontrou Numeros[K] = N
K K + 1
Fim Enquanto
{Precisamos decidir porque o lao terminou e
isso nos garante a resposta.}
Se Encontrou ento
Escreva(O nmero + N + foi encontrado)
Seno
Escreva(O nmero + N + No foi
encontrado)
Fim Se
Fim
logica_2_livro_caderno.indb 211 7/12/2006 14:21:22
212
Universidade do Sul de Santa Catarina
Unidade 5
1) Voc estudou, em nossa disciplina, modularizao ou sub-rotinas
e descobriu que uma funo dita como sendo uma sub-rotina ou
mdulo do algoritmo principal. A partir do exemplo supermercado
abaixo, faa uma funo chamada CALCDESCONTO que receba como
parmetro o cdigo de um produto e seu valor. Esta funo deve
retornar o novo valor do produto, com as seguintes regras:
caso o produto tenha o cdigo ABC, ser concedido um desconto
de 4,5% (quatro e meio por cento);
caso o produto tenha o cdigo XYZ, ser concedido um desconto
de 6,5% (seis e meio por cento), se o valor da mercadoria for inferior
a R$ 85,00 (oitenta e cinco reais);
caso o produto no se enquadre em nenhum desses cdigos, ele no
receber desconto;
Exemplo supermercado:
Um cliente foi a um supermercado e comprou N produtos, sendo
informado que, dependendo do cdigo do produto, ele receberia
um desconto. Faa um algoritmo pedindo que o usurio digite as
informaes de N produtos: seu valor e o seu cdigo. Aps a digitao,
mostre na tela, o valor total que foi pago pelo cliente, considerando os
possveis descontos (utilize a funo CALCDESCONTO neste algoritmo).
Funo CALCDESCONT (COD: literal, VALOR: numrico):
numrico
Var
NVALOR : numrico
Incio
Se (COD=ABC) ento
NVALOR VALOR VALOR * 4.5/100
Seno
Se (COD=XYZ) E (VALOR<85.00) ento
NVALOR VALOR VALOR * 6.5/100
Seno
NVALOR VALOR
Fim Se
Fim Se
Retorne NVALOR
Fim
Algoritmo Supermercado
Var
N, TOTALPAGO, VALORPROD, CONT : numrico
CODPROD :
literal

logica_2_livro_caderno.indb 212 7/12/2006 14:21:22


213
Lgica de Programao II
Incio
Escreva Digite o total de produtos
comprado
Leia N
TOTALPAGO 0
Para CONT de 1 at N faa
{Entrada dos dados}
Escreva Digite o cdigo do produto
Leia CODPROD
Escreva Digite o valor do produto
Leia VALORPROD
{Chamando a funo e levando de
parmetro o cdigo e o valor}
VALORPROD CALCDESCONTO (CODPROD,
VALORPROD)
{Acumulando valor de cada produto para,
ao nal, saber quanto o cliente pagou}
TOTALPAGO TOTALPAGO + VALORPROD
Fim Para
Escreva O total pago pelo cliente na compra
dos , N, produtos foi: , TOTALPAGO
Fim
2) Faa uma funo chamada EhPrimo que receba um valor e retorne
1, caso o nmero seja primo, ou 0, em caso contrrio. Um nmero N
primo quando no divisvel por nenhum valor (exceto 1) at N/2.
Quando se encontrar um valor pelo qual N divisvel, a funo pode
parar a busca e considerar o nmero no primo.
Funo EhPrimo (N: numrico) : numrico
Var
K, Fim : numrico
Incio
EhPrimo 1 {Partimos do princpio de que o
nmero N primo}
K 2
Fim N/2
Enquanto (RESTO(N,K) > 0) E (K < Fim) Faca
K K + 1
Fim Enquanto
{Ao sair do lao precisamos saber o motivo:
se foi porque encontrou um nmero divisvel ou
porque chegou ao m do lao (K alcanou o valor
de N)}
Se (RESTO(N,K) = 0) Ento
EhPrimo 0
Seno
EhPrimo 1
Fim Se
Retorne EhPrimo
Fim
logica_2_livro_caderno.indb 213 7/12/2006 14:21:23
214
Universidade do Sul de Santa Catarina
3) Faa um programa que calcule a rea e o permetro do retngulo.
Modularize esse programa, ou seja, divida-o em funes
adequadamente.
Algoritmo DadosDoRetangulo
Variveis
LadoA, LadoB : numrico
Incio
Leia (LadoA, LadoB)
Escreva (A rea retngulo :,CalculaArea(LadoA,
LadoB))
Escreva (O permetro :,CalculaPerimetro(Lado
A, LadoB))
Fim
Funo CalculaArea (LA:numrico; LB:numrico) :
numrico
AreaTotal : numrico
Incio
AreaTotal = (LA * LB)
Retorna AreaTotal
Fim.
Funo CalculaPerimetro (A:numrico; B:numrico) :
numrico
Perimetro : numrico
Inicio
Perimetro = ((A * 2)+(B * 2))
Retorna Perimetro
Fim
logica_2_livro_caderno.indb 214 7/12/2006 14:21:23
Sobre os professores conteudistas
Patrcia Gerent Petry
Formada em Cincias da Computao pela Universidade
Federal de Santa Catarina, mestre em Cincias da
Computao, rea Informtica e Educao, pela Universidade
Federal de Santa Catarina, tendo como tema principal
de sua dissertao o Processo de Ensino e Aprendizagem
de Algoritmos. Atuou como professora substituta na
Universidade Federal de Santa Catarina. Foi professora nas
instituies de ensino superior: Universidade do Vale do Itaja
e Faculdades Barddal. Atualmente Analista de Sistemas dos
Correios/SC e atua como professora na Universidade do Sul
de Santa Catarina desde 1998. Atuou por muitos anos nas
disciplinas de Programao I, Programao II, Laboratrio de
Informtica e Anlise e Sistemas I dos cursos de Sistema de
Informao e Cincia da Computao, no ensino presencial da
Unisul. No ensino virtual, atua como tutora nas cadeiras de
Introduo Internet, Lgica de Programao I e II do curso
de Tecnlogo em Web Design e Programao.
Elton Joo Gubert
formado em Cincias da computao (UFSC) e
especialista em Gesto empresarial (UFSC). Atua na empresa
Sistemas e Tecnologias de Informao Ltda, voltada para o
desenvolvimento de software para rea de produo animal
de sunos e bovinos de connamento. professor do curso
de Cincias da Computao e Sistemas de Informao, nas
disciplinas de Linguagem Visual (Delphi), Tcnicas de
Programao, Estruturas de Dados e Anlise e Projetos
de Sistemas Orientados a Objetos. professor do curso
Web Designer da UnisulVirtual (Ensino Distancia).
Apresenta slida atuao em desenvolvimento de sistemas
informatizados, baseada em atividades de anlise de sistemas,
logica_2_livro_caderno.indb 215 7/12/2006 14:21:23
216
Universidade do Sul de Santa Catarina
projeto estruturado, programao, suporte a usurios. Alm
disso, tem experincia em desenvolvimento de sistemas e
programao orientada a objetos.
Mrio Gerson Miranda Magno Jnior
Formado em Cincias da Computao pela Universidade do
Vale do Itaja, mestrando em Cincias da Linguagem pela
Universidade do Sul de Santa Catarina, professor do ensino
superior e Consultor em Gerncia de Projetos e Auditoria de
Tecnologia da Informao, com experincia reconhecida no
mercado nacional. responsvel, no ensino presencial, pelas
cadeiras de Tecnologia da Informao de Programao para
Engenharia e de Programao para Internet, respectivamente,
nos cursos de Engenharia de Telemtica, Engenharia Civil e
Sistemas de Informao. No ensino virtual, atua como professor
tutor nas cadeiras de Lgica de Programao I e II do curso de
Tecnlogo em Web Design e Programao.
logica_2_livro_caderno.indb 216 7/12/2006 14:21:23

Você também pode gostar