Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Universidade do Sul de Santa Catarina
Palhoça
UnisulVirtual
2009
Lógica de Programação II
Disciplina na modalidade a distância
LIVRO DIDÁTICO E CADERNO DE ATIVIDADES
5ª edição revista e atualizada
Créditos
Unisul - Universidade do Sul de Santa Catarina
UnisulVirtual - Educação Superior a Distância
Campus UnisulVirtual 
Avenida dos Lagos, 41 - Cidade 
Universitária Pedra Branca 
Palhoça – SC - 88137-100 
Fone/fax: (48) 3279-1242 e 3279-1271 
E-mail: cursovirtual@unisul.br 
Site: www.virtual.unisul.br
Reitor Unisul
Ailton Nazareno Soares
Vice-Reitor
Sebastião Salésio Heerdt 
Chefe de Gabinete da Reitoria
Willian Máximo
Pró-Reitor Acadêmico
Mauri Luiz Heerdt
Pró-Reitor de Administração
Fabian Martins de Castro
Campus Sul 
Diretora: Milene Pacheco Kindermann
Campus Norte 
Diretor: Hércules Nunes de Araújo
Campus UnisulVirtual
Diretor: João Vianney 
Diretora Adjunta: Jucimara Roesler 
Equipe UnisulVirtual 
Gerência Acadêmica 
Márcia Luz de Oliveira 
Gerência Administrativa 
Renato André Luz (Gerente)
Marcelo Fraiberg Machado
Naiara Jeremias da Rocha
Valmir Venício Inácio 
Gerência de Ensino, Pesquisa e 
Extensão
Moacir Heerdt
Clarissa Carneiro Mussi
Letícia Cristina Barbosa (auxiliar)
Gerência Financeira
Fabiano Ceretta
Gerência de Produção 
e Logística
Arthur Emmanuel F. Silveira
Gerência Serviço de Atenção 
Integral ao Acadêmico
James Marcel Silva Ribeiro 
Avaliação Institucional 
Dênia Falcão de Bittencourt 
Rafael Bavaresco Bongiolo
Biblioteca 
Soraya Arruda Waltrick (Coordenadora)
Maria Fernanda Caminha de Souza
Capacitação e Assessoria ao 
Docente
Angelita Marçal Flores (Coordenadora)
Adriana Silveira
Caroline Batista 
Cláudia Behr Valente
Elaine Surian
Patrícia Meneghel 
Simone Perroni da Silva Zigunovas 
Coordenação dos Cursos
Adriana Ramme
Adriano Sérgio da Cunha 
Aloísio José Rodrigues 
Ana Luisa Mülbert 
Ana Paula Reusing Pacheco 
Bernardino José da Silva
Carmen Maria Cipriani Pandini
Charles Cesconetto 
Diva Marília Flemming 
Eduardo Aquino Hübler 
Fabiana Lange Patrício (auxiliar) 
Fabiano Ceretta 
Itamar Pedro Bevilaqua
Jairo Afonso Henkes 
Janete Elza Felisbino 
Jorge Alexandre Nogared Cardoso
José Carlos Noronha de Oliveira
Jucimara Roesler 
Karla Leonora Dahse Nunes
Luiz Guilherme B. Figueiredo 
Luiz Otávio Botelho Lento 
Marciel Evangelista Catâneo
Maria da Graça Poyer 
Maria de Fátima Martins (auxiliar) 
Mauro Faccioni Filho
Moacir Fogaça 
Moacir Heerdt 
Nazareno Marcineiro
Nélio Herzmann 
Onei Tadeu Dutra 
Raulino Jacó Brüning 
Rose Clér Estivalete Beche
Rodrigo Nunes Lunardelli
 
Criação e Reconhecimento de 
Cursos
Diane Dal Mago 
Vanderlei Brasil 
Desenho Educacional 
Carolina Hoeller da Silva Boeing 
(Coordenadora)
Design Instrucional
Ana Cláudia Taú
Carmen Maria Cipriani Pandini 
Cristina Klipp de Oliveira
Daniela Erani Monteiro Will
Emília Juliana Ferreira
Flávia Lumi Matuzawa 
Karla Leonora Dahse Nunes 
Leandro José Rocha
Lucésia Pereira
Luiz Henrique Milani Queriquelli
Márcia Loch
Marcelo Mendes de Souza
Marina Cabeda Egger Moellwald
Marina M. G. da Silva
Michele Correa
Nagila Cristina Hinckel
Silvana Souza da Cruz 
Viviane Bastos 
Acessibilidade 
Vanessa de Andrade Manoel 
Avaliação da Aprendizagem
Márcia Loch (Coordenadora) 
Eloísa Machado Seemann
Franciele Débora Maia
Gabriella Araújo Souza Esteves
Lis Airê Fogolari
Simone Soares Haas Carminatti
Design Visual 
Pedro Paulo Alves Teixeira 
(Coordenador) 
Adriana Ferreira dos Santos 
Alex Sandro Xavier
Alice Demaria Silva 
Anne Cristyne Pereira
Diogo Rafael da Silva
Edison Rodrigo Valim
Elusa Cristina Sousa
Higor Ghisi Luciano
Patricia Fragnani
Vilson Martins Filho
Multimídia 
Cristiano Neri Gonçalves Ribeiro
Fernando Gustav Soares Lima 
Portal
Rafael Pessi 
Disciplinas a Distância 
Enzo de Oliveira Moreira (Coordenador)
Franciele Arruda Rampelotti (auxiliar)
Luiz Fernando Meneghel
Gestão Documental
Lamuniê Souza (Coordenadora) 
Janaina Stuart da Costa
Josiane Leal
Juliana Dias Ângelo
Marília Locks Fernandes
Roberta Melo Platt
Logística de Encontros 
Presenciais 
Graciele Marinês Lindenmayr 
(Coordenadora) 
Ana Paula de Andrade
Aracelli Araldi Hackbarth
Daiana Cristina Bortolotti
Douglas Fabiani da Cruz 
Edésio Medeiros Martins Filho
Fabiana Pereira
Fernando Steimbach 
Marcelo Faria
Marcelo Jair Ramos
Rodrigo Lino da Silva
Formatura e Eventos 
Jackson Schuelter Wiggers 
Logística de Materiais 
Jeferson Cassiano Almeida da Costa 
(Coordenador) 
Carlos Eduardo Damiani da Silva
Geanluca Uliana 
Guilherme Lentz
Luiz Felipe Buchmann Figueiredo
José Carlos Teixeira 
Rubens Amorim
Monitoria e Suporte 
Rafael da Cunha Lara (Coordenador)
Andréia Drewes 
Anderson da Silveira 
Angélica Cristina Gollo
Bruno Augusto Zunino 
Claudia Noemi Nascimento 
Cristiano Dalazen 
Débora Cristina Silveira 
Ednéia Araujo Alberto 
Fernanda Farias 
Jonatas Collaço de Souza 
Karla Fernanda W. Desengrini 
Maria Eugênia Ferreira Celeghin 
Maria Isabel Aragon 
Maria Lina Moratelli Prado 
Mayara de Oliveira Bastos
Patrícia de Souza Amorim 
Poliana Morgana Simão 
Priscila Machado 
Priscilla Geovana Pagani 
Produção Industrial
Francisco Asp (coordenador)
Ana Paula Pereira 
Marcelo Bittencourt
Relacionamento com o 
Mercado 
Walter Félix Cardoso Júnior 
Secretaria de Ensino a Distância 
Karine Augusta Zanoni Albuquerque 
(Secretária de ensino) 
Andréa Luci Mandira 
Andrei Rodrigues
Bruno De Faria Vaz Sampaio
Daiany Elizabete da Silva
Djeime Sammer Bortolotti 
Douglas Silveira
Fylippy Margino dos Santos
James Marcel Silva Ribeiro 
Jenniffer Camargo 
Luana Borges Da Silva
Luana Tarsila Hellmann 
Marcelo José Soares
Micheli Maria Lino de Medeiros
Miguel Rodrigues Da Silveira Junior
Patricia Nunes Martins 
Rafael Back
Rosângela Mara Siegel 
Silvana Henrique Silva 
Vanilda Liordina Heerdt 
Vilmar Isaurino Vidal
Secretária Executiva 
Viviane Schalata Martins
Tenille Nunes Catarina (Recepção) 
Tecnologia 
Osmar de Oliveira Braz Júnior 
(Coordenador) 
André Luis Leal Cardoso Júnior
Felipe Jacson de Freitas
Jefferson Amorin Oliveira
José Olímpio Schmidt 
Marcelo Neri da Silva 
Phelipe Luiz Winter da Silva
Rodrigo Battistotti Pimpão
Carlos Fernando Martins
Design instrucional
Daniela Erani Monteiro Will
Carolina Hoeller da Silva Boeng
Palhoça
UnisulVirtual
2009
Lógica de Programação II
Livro didático
Revisão e atualização de conteúdo
Clavison Martinelli Zapelini 
5ª edição revista e atualizada
Edição – Livro Didático
Professores Conteudistas
Carlos Fernando Martins
Design Instrucional
Daniela Erani Monteiro Will
Carolina Hoeller da Silva Boeng
Revisão e atualização de conteúdo
Clavison Martinelli Zapelini
Assistente Acadêmico
Michele Antunes Corrêa (5ª edição revista e atualizada)
Projeto Gráfico e Capa
Equipe UnisulVirtual
Diagramação
Rafael Pessi
Revisão
Revisare 
Ficha catalográfica elaborada pela Biblioteca Universitária da Unisul
Copyright © UnisulVirtual 2009
Nenhuma parte desta publicação pode ser reproduzida por qualquer meio sem a prévia autorização desta instituição. 
005.1
L82 Martins, Carlos Fernando 
 Lógica de programação II : livro didático / Carlos Fernando Martins ; revisor,
 Clavison Martinelli Zapelini ; design instrucional Daniela Erani Monteiro Will,
 Carolina Hoeller da Silva ; [assistente acadêmico Michele Antunes Corrêa]. – 5. 
 ed. rev. e atual. – Palhoça : UnisulVirtual, 2009.
 142 p. : il. ; 28 cm.
 Inclui bibliografia.
 1. Lógica – Processamento de dados. 2. Programação (Computadores). 
 3. Estrutura de dados (Computação). I. Zapelini, Clavison Martinelli. II. Will, 
 Daniela Erani Monteiro. III.Silva, Carolina Hoeller da. IV. Corrêa, Michele Antunes. 
 V. Título.
Sumário
LIVRO DIDÁTICO
Palavras do professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Plano de estudo . . . . . . . . . . . . .ficha2.NOME, 
e para ficha3, ficha3.NOME. Como cada variável, nesse caso, 
ficha1, ficha2 e ficha3 são três blocos de memórias independentes, 
58
Universidade do Sul de Santa Catarina
é como se tivéssemos três variáveis independentes em locais de 
memória diferentes, porém, cada uma delas contendo seis variáveis 
literais e três numéricas, conforme você já leu. 
Criando um conjunto de registros
Precisamos incrementar nosso algoritmo anterior. Ele permite 
o cadastramento de 5 hóspedes apenas. Nosso hotel tem 100 
quartos. Podemos admitir até 100 hóspedes, certo? Devemos 
criar 100 fichas cadastrais. E agora? Você terá problemas se tiver 
que criar 100 variáveis 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 inteiros, criamos um vetor do tipo inteiro; se precisamos 
armazenar 100 nomes de clientes, criamos um vetor do tipo 
literal. Raciocinando da mesma maneira, se precisarmos 
armazenar 100 fichas de clientes, criamos um vetor de FICHA 
(tipo definido por nós). Na sintaxe de pseudocódigo teríamos: 
fichas: vetor [100] FICHA. Agora, definimos um vetor de 100 
posições chamado de fichas, onde cada posição (quadrado) tem 
uma variável do tipo FICHA. Veja a seguir:
Ficha 1 Ficha 2 Ficha 3 ... Ficha 99
0 1 2 ... 99
Ficha1 está na posição 0 do vetor fichas, Ficha2 está na posição 1 
do vetor fichas, e assim sucessivamente. 
Mas o que é uma FiCHA mesmo? FiCHA é um 
registro que tem os seguintes campos definidos 
anteriormente: 
NOME, ESTADOCiViL, ENDERECO, BAiRRO, CiDADE, 
ESTADO: literal
iDADE, NUMERO, TELEFONE: inteiro.
59
Lógica de Programação II
Unidade 3
Como podemos acessar os dados de cada ficha dentro do 
vetor? Bem, de forma similar ao acesso dos dados em vetores, 
precisamos saber qual a posição que queremos acessar do vetor. 
Depois de sabermos qual o índice do vetor, devemos lembrar que 
dentro de cada posição do vetor temos um registro com aqueles 
campos ou variáveis definidas. Veja a figura a seguir.
[0] [1] [2] ... ... Ficha 99
Para acessar um desses campos basta colocar um ponto (.) 
seguido do nome da variável definida dentro do registro.
Por exemplo, para acessar o nome do primeiro hóspede 
(definido na posição 0 do vetor fichas), colocamos fichas [0].
NOME; para acessar a idade dessa mesma ficha, colocarmos 
fichas [0].iDADE e assim por diante. 
Vamos supor que estamos cadastrando o cliente 60 do nosso 
hotel. Como poderíamos fazer? 
Bem, devemos lembrar que, como um vetor sempre começa na 
posição 0 (zero), assim o cliente 60 está definido da posição 59 
do nosso vetor, certo? Desta forma, podemos preencher os dados 
conforme a seguir:
fichas[59].NOME  “Luiz Silva”
fichas[59].ESTADOCIVIL  “solteiro”
fichas[59].ENDERECO  “Avenida Paulista”
fichas[59].IDADE  30
{e assim para os demais dados deste hóspede}.
� nome
� estadocivil
� endereco
� bairro
� cidade
� estado
� idade, numero
� telefone
� nome
� estadocivil
� endereco
� bairro
� cidade
� estado
� idade, numero
� telefone
60
Universidade do Sul de Santa Catarina
- Olha aí a importância dos vetores novamente. Na seção seguinte 
você verá exemplos com código pronto para você estudar e tirar 
dúvidas. Tente implementar cada exercício sozinho, depois compare 
com a solução proposta. Faça tantas vezes você quiser. Quanto mais 
exercícios você fizer, melhor você será. 
SEÇÃO 3 - Algoritmos com manipulação de registros
Veja agora alguns exercícios resolvidos com manipulação de 
registros.
1. Cadastrar os dados gerais de 300 disciplinas que os 
professores lecionam: nome, conteúdo, freqüência e nota 
mínimas para aprovação. Ler cinco nomes de disciplinas e 
mostrar freqüência e média mínimas para aprovação em 
cada uma.
Pseudocódigo:
início
 tipo FICHA = registro {criando um tipo FICHA}
 NOME, CONTEUDO : literal
 FREQUENCIA, MEDIA : real
 fim-registro
 DISCIPLINAS : vetor [300] FICHA {criando um vetor para cadastrar 
300 disciplinas, onde cada disciplina é constituída por um nome 
(NOME), conteúdo (CONTEUDO), freqüência (FREQUENCIA) e média 
(MEDIA)}
 NOMECONSUL : literal {Nome da disciplina a ser consultada}
 CONT, POS : inteiro {Variáveis para controle de laço de repetição}
 
 {Entrada de dados para 300 disciplinas}
 
 para POS de 0 até 299 passo 1 faça
 escreva “Digite o nome da disciplina: “
 leia DISCIPLINAS[POS].NOME
 escreva “Digite o conteúdo da disciplina: “
 leia DISCIPLINAS[POS].CONTEUDO
 escreva “Digite a freqüência mínima necessária para aprovação: “
 leia DISCIPLINAS[POS].FREQUENCIA
61
Lógica de Programação II
Unidade 3
 escreva “Digite a média mínima necessária para aprovação: “
 leia DISCIPLINAS[POS].MEDIA
 fim-para
{verificação de 5 disciplinas, conforme o enunciado}
 para CONT de 1 até 5 passo 1 faça
 escreva “Digite o nome da disciplina a ser consultada: “
 leia NOMECONSUL {nome da disciplina a ser consultada}
 POS  0 {inicializa a variável POS pois o vetor começa em 0}
 enquanto NOMECONSUL DISCIPLINAS[POS].NOME ou POS “FIM” faça
 POS  0
 enquanto CANTORCONSUL CDS[POS].CANTOR ou POSescreva “Cantor ou grupo musical não possui nenhum CD cadastrado !”
 fim-se
 {Observe aqui que estamos solicitando que o usuário entre com o nome 
do cantor ou a palavra FIM novamente. Perceba que a primeira vez ocor-
reu fora do laço de repetição. Dessa vez, o comando de leitura é realizado 
para permitir com que o usuário finalize o programa digitando FIM. Caso 
não colocássemos essa opção, teríamos um laço infinito. Lembra que todo 
algoritmo tem que possuir um fim?}
 escreva “Digite o nome do cantor ou grupo a ser consultado (ou FIM para 
encerrar): “
 leia CANTORCONSUL
 fim-enquanto
fim
63
Lógica de Programação II
Unidade 3
Síntese
Você acaba de finalizar mais uma etapa na busca pela excelência. 
Viu que para implementar variáveis de diferentes tipos utilizamos 
um registro, que nada mais é do que um recurso que permite a 
criação de diferentes tipos de variáveis em um mesmo bloco de 
memória do computador, facilitando, sobretudo, o desempenho 
do programa. 
Quando criamos um registro, criamos um espaço na memória do 
computador que permite armazenar dados heterogêneos, ou seja, 
constantes de vários tipos. É como se fosse uma ficha de dados, 
organizada de forma que os dados estão próximos um dos outros 
dentro da memória do computador. 
A sintaxe em pseudocódigo para criar um registro é a seguinte:
 : registro
 
 fim-registro
Viu também que a lógica de programação permite ao usuário 
criar seus próprios tipos. Isso facilita bastante porque nem 
tudo que estamos trabalhando são apenas números, literais ou 
lógicos. Há uma combinação desses tipos básicos. A sintaxe para 
implementar um tipo registro é a seguinte:
 tipo : registro
 
 fim-registro
Por fim, aprendeu que podemos construir uma poderosa estrutura 
de dados misturando vetores com registros. Podemos construir 
vetores de registros, onde cada posição do vetor é um registro de 
dados. O acesso a cada elemento dentro do vetor é a seguinte:
[índice do vetor].8.0 8.5 9.0 10.0
0 1 2 3 4
Perceba que há uma troca dos valores dentro do vetor.
Por exemplo, o número 10 que estava na posição 0 foi para 
a posição 4. O número 8 ficou na mesma posição, ou seja, 
posição 1 em ambos os vetores. O número 9 foi da posição 
2 para a posição 3, o número 7 da posição 3 para a posição 
0 e o número 8.5 foi da posição 4 para a posição 2. Fizemos 
uma reordenação dos números de forma a se mostrarem 
em ordem crescente. 
Essa aplicação é um exemplo dentre tantas outras, por exemplo, 
ordenar nomes de clientes em ordem alfabética para mostrar 
em uma página 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 método da Bolha ou em inglês Bubble Sort.
74
Universidade do Sul de Santa Catarina
Solucionando o problema em passos
1. Vamos iniciar nosso algoritmo criando um vetor de 5 posições:
 Pseudocódigo:
início
NOTAS: vetor[5] real {declaração do vetor de 5 posições}
2. Criado o vetor NOTAS, precisamos ler os valores e armazená-
los nesse vetor. Utilizamos a estrutura de repetição para/faça/
fim-para para percorrer todo o vetor. Precisamos criar uma 
variável de contagem. Vamos chamá-la de CONT.
CONT: inteiro
para CONT de 0 até 4 passo 1 faça 
 escreva “Entre com uma nota”: 
 leia NOTAS[ CONT ]
fim-para
O vetor poderia se mostrar conforme a seguir:
10.0 8.0 9.0 7.0 8.5
0 1 2 3 4
Perceba que estamos lendo os números de uma forma aleatória, 
ou seja, sem qualquer seqüência pré-definida. Nosso objetivo é 
colocá-los em ordem crescente, ou seja, do menor para o maior.
3. Sempre que quisermos ordenar números e/ou literais, 
precisamos realizar uma comparação entre dois números e/
ou literais para saber quem é maior ou menor. Lembrando 
de Lógica de Programação I, quando realizamos uma 
comparação, realizamos entre dois e apenas dois valores 
por vez. Isso sugere que devemos realizar a comparação 
dos valores do vetor NOTAS tomando dois a dois, ou seja, 
comparamos inicialmente a posição 0 com a posição 1 do vetor 
NOTAS, seguido da posição 1 com a 2, da 2 com a posição 
3 e assim sucessivamente. Precisamos saber de antemão 
75
Lógica de Programação II
Unidade 4
POS ULTIMA
que posição estamos testando e quando é finalizado o teste. 
Precisamos, assim, criar 2 novas variáveis: POS, armazena 
a posição de teste e ULTIMA, armazena o último teste de 
comparação. Podemos perceber que POS tem valor inicial de 
zero (índice inicial do vetor) e ULTIMA tem valor inicial de 4 
(índice final do vetor). 
POS, ULTIMO: inteiro
POS  0
ULTIMO  4
10.0 8.0 9.0 7.0 8.5
0 1 2 3 4
4. Realizamos a primeira comparação, entre a primeira e 
a segunda posição do vetor. O teste é feito por meio da 
pergunta: “10.0 é maior do que 8?” e o objetivo é colocar o 
menor na primeira posição. Podemos verificar 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 
posição 0 do vetor NOTAS e o valor 10.0 vai para a posição 1 
do mesmo vetor. Como podemos realizar esse passo? 
A resposta é simples desde que criemos uma nova variável. 
Chamaremos essa variável de AUX (variável auxiliar na troca 
entre os valores). A idéia é passar o conteúdo de NOTAS [0] 
para NOTAS [1] e vice-versa. Com auxílio 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 posição 0 recebe o 
valor contido na posição 1, ou seja, NOTAS[ 0 ] = 8.0}
NOTAS [ 1 ]  AUX { o vetor NOTAS na posição 1 recebe o valor 
contido na variável AUX, ou seja, NOTAS[ 0 ] = 10.0}. 
76
Universidade do Sul de Santa Catarina
Sendo assim, observe que os valores das variáveis foram trocados 
com a utilização da variável auxiliar AUX. Temos agora a 
seguinte formação do vetor de NOTAS:
8.0 10.0 9.0 7.0 8.5
0 1 2 3 4
6. Para realizar nosso próximo passo, vamos testar agora a 
posição 1 com a posição 2 do vetor, conforme o passo 3. Para 
fazermos esse teste, devemos incrementar a variável POS de 1, 
fazendo com que ela assuma o valor 1.
POS  POS + 1 {como a variável POS tem valor inicial de 0, 
incrementando 1, a variável POS passa a ter valor 1.}
8.0 10.0 9.0 7.0 8.5
0 1 2 3 4
7. Realizamos a segunda comparação, entre a segunda (índice 1) 
e terceira (índice 2) posição do vetor. O teste é feito por meio 
da pergunta: “10.0 é maior do que 9.0?” e o objetivo é colocar 
o menor na segunda posição (índice 1). Podemos verificar que 
a resposta é verdadeira.
8. Executamos o passo de maneira análoga ao passo 5, mas agora 
observando que estamos testando entre os índices 1 e 2 do 
vetor NOTAS:
AUX  NOTAS [ 1 ] {guardo o valor da posição 1 vetor de NOTAS na 
variável AUX. No exemplo, AUX recebe o valor 10.0}
NOTAS [ 1 ]  NOTAS[ 2 ] {o vetor NOTAS na posição 1 recebe o 
valor contido na posição 2, ou seja, NOTAS[ 1 ] = 9.0}
NOTAS [ 2 ]  AUX { o vetor NOTAS na posição 2 recebe o valor 
contido na variável AUX, ou seja, NOTAS[ 2 ] = 10.0}. 
POS ULTIMA
POS ULTIMA
77
Lógica de Programação II
Unidade 4
POS ULTIMA
POS ULTIMA
POS ULTIMA
Sendo assim, observe que os valores das variáveis foram trocados 
com a utilização da variável auxiliar AUX. Temos agora a 
seguinte formação do vetor de NOTAS: 
8.0 9.0 10.0 7.0 8.5
0 1 2 3 4
9. Executamos o passo 6, 7 e 8 novamente, porém nossa posição 
de teste agora é a terceira (índice 2) e iremos comparar os 
valores numéricos armazenados na terceira e quarta posição do 
vetor de NOTAS, respectivamente índices 2 e 3.
8.0 9.0 10.0 7.0 8.5
0 1 2 3 4
Como resposta da execução do passo 8, temos a seguinte 
formação do vetor:
8.0 9.0 7.0 10.0 8.5
0 1 2 3 4
78
Universidade do Sul de Santa Catarina
POS ULTIMA
POS ULTIMA
10. Executamos o passo 6, 7 e 8 novamente, porém nossa posição 
de teste agora é a quarta (índice 3) e iremos comparar os 
valores numéricos armazenados na quarta e quinta posição do 
vetor de NOTAS, respectivamente índices 3 e 4.
8.0 9.0 7.0 10.0 8.5
0 1 2 3 4
11. Como resposta da execução do passo anterior, temos a 
seguinte formação do vetor:
8.0 9.0 7.0 8.5 10.0
0 1 2 3 4
12. Observando o resultado do passo anterior, podemos perceber 
que o número 10.0 está na última posição do vetor e lá deverá 
ficar, tendo em vista que não há número maior do que 10.0 
dentro do vetor de NOTAS, certo? Atingimos, dessa forma 
a posição final do vetor NOTAS. Precisamos recomeçar 
a ordenação, colocando a variável POS em 0 e a variável 
ULTIMA em ULTIMA-1, ou seja, ULTIMA recebe valor 3. 
Mas por que isso? A resposta é que não precisamos comparar 
mais o valor 10.0 que está na última posição. Lembra que o 
número 10.0 estava inicialmente na posição 0 do vetor e que 
fomos realizando a comparação com valores subseqüentes 
para verificar 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 números até colocá-lo 
na posição final do vetor NOTAS. 
O que nos interessa agora é reinicializar a ordenação do índice 
0 até o índice 3 do vetor de NOTAS, conforme a seguir: 
8.0 9.0 7.0 8.5 10.0
0 1 2 3 4
79
Lógica de Programação II
Unidade 4
13. Repetimos todos os passos anteriores. Como resultado, 
temos a seguinte ordenação, já decrementando a variável 
ULTIMA de 1 também:
8.0 7.0 8.5 9.0 10.0
0 1 2 3 4
 
14. Repetimos novamente os passos, temos o seguinte vetor:
7.0 8.0 8.5 9.0 10.0
0 1 2 3 4
 
Até quando devemos repetir os passos de ordenação? 
Perceba que executamos os passos até que a variável ULTIMA 
assuma valor 1. Para cada valor da variável ULTIMA, executamos 
as repetições para a variável POS de 0 até ULTIMA-1.
15. Observe que o vetor está ordenado em forma crescente, do 
menor valorpara o maior. Nosso objetivo foi atingido. 
Veja o resultado em pseudocódigo. 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 pseudocódigo.
início
 NOTAS: vetor [5] numérico {declaração do vetor de 5 posições}
 POS, ULTIMA, AUX: inteiro
 {entrada de dados}
para POS de 0 até 4 passo 1 faça
escreva “Entre com a Nota: “
POS ULTIMA
POS ULTIMA
80
Universidade do Sul de Santa Catarina
leia NOTAS[ POS ] {armazena os valores lidos no vetor NOTAS}
fim-para
{inicialização das variáveis}
POS  0 {inicializa a variável POS}
ULTIMA  4 {inicializa a variável ULTIMA}
{processamento da ordenação dos números}
enquanto ULTIMA 0 faça
enquanto POS ULTIMA faça
se NOTAS[ POS ] > NOTAS[ POS + 1 ] então
 {processo de troca dos números}
 AUX  NOTAS [ POS ]
 NOTAS [ POS ]  NOTAS[ POS + 1]
 NOTAS [ POS + 1]  AUX
fim-se
{incrementa posição do vetor}
POS  POS + 1
 fim-enquanto
{inicializa variável POS e decrementa a variável ULTIMA de 1}
POS  0
ULTIMA  ULTIMA -1
fim-enquanto
fim
SEÇÃO 2 - Implementação de algoritmos de pesquisa
Métodos de pesquisa, também chamados de 
métodos de busca, são algoritmos utilizados para 
localizar valores dentro de um vetor. 
Na seção anterior, aprendemos a como ordenar os valores de 
um vetor. Nesta seção, procuramos por determinados valores 
de interesse dentro do vetor, seja os elementos do vetor 
ordenados ou não. Há várias técnicas de ordenação. Você vai 
estudar duas aplicações bem simples:
� O método de procura seqüencial.
� O método de procura binária.
81
Lógica de Programação II
Unidade 4
Método de procura seqüencial
O método de pesquisa seqüencial é o mais simples de todos. Um 
vetor é pesquisado (percorrido) até encontrar o valor desejado 
ou até que o vetor termine. É um método bastante aplicado 
para vetores com valores desordenados, ou seja, que não estão 
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 vídeo 
locadora. Precisamos saber se há clientes com idade de 15 
anos, por exemplo. A representação do vetor é mostrada a 
seguir:
27 44 14 15 20
0 1 2 3 4
Solucionando o problema em passos
1. Inicialmente, precisamos criar nosso vetor de 5 posições. Esse 
vetor armazenará as idades de nossos clientes. Vamos permitir 
com que o usuário especifique as idades que desejar, ou seja, 
será uma entrada de dados via teclado.
Pseudocódigo:
início
 IDADES: vetor [5] inteiro
 ENTRADA: inteiro {variável utilizada para armazenar a entrada de uma 
idade a ser pesquisada no vetor IDADES.}
 CONT: inteiro {variável contadora}
{entrada de dados: idade dos clientes. Estamos percorrendo o vetor da 
posição 0 até a posição 4.}
 para CONT de 0 até 4 passo 1 faça
 escreva “Especifique a idade do cliente: “
 leia IDADES[CONT] {observe que a variável CONT vai de 0 até 4}
 fim-para
 
82
Universidade do Sul de Santa Catarina
2. Preenchido o vetor, iremos realizar nosso processamento. O 
processamento é simplesmente encontrar a idade especificada 
pelo usuário. Vamos precisar entrar com a idade do cliente e 
verificar se ela existe ou não 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 verificar se existe ou não o valor inteiro 
digitado pelo usuário e armazenado na variável ENTRADA. Vamos supor que você 
especifique a idade 15, ou seja, a variável ENTRADA possui valor inteiro 15. Dessa 
forma, vamos percorrer todo o vetor IDADES procurando pelo valor inteiro 15. O 
processo é bem simples. Para cada laço de repetição, lemos o valor contido na 
posição do vetor. Se encontrarmos o valor que estamos procurando, finalizamos a 
pesquisa. Caso contrário, percorremos o vetor IDADES até encontrar o valor desejado 
ou até o fim do vetor. Vamos inicializar a variável CONT para ser reutilizada, ou seja, 
para percorrer o vetor novamente da posição 0 até a posição 4 do vetor IDADES}
CONT  0
enquanto IDADES[ CONT ] ENTRADA e CONT ENTRADA) 
e não atingirmos o final do vetor IDADES (CONT ENTRADA e CONTprincipalmente quando estamos trabalhando com vetores 
de dimensões maiores?
10 44 58 78 100
0 1 2 3 4
Como o valor 78 está na segunda metade do vetor VET, 
realizamos uma nova divisão, agora considerando apenas os 
números nos índices [2], [3] e [4]. A metade do vetor é o índice 
[3], que nesse caso é o número 78, ou seja, o número que estamos 
procurando.
58 78 100
2 3 4
Se fôssemos realizar a pesquisa seqüencialmente, teríamos 4 
passos até encontrar o número 78. Teríamos que ler do índice 
0 até o índice 3 do vetor VET. Com a pesquisa binária, onde 
dividimos o vetor ao meio, realizamos 2 passos apenas, ou seja, 
duas divisões até encontrar o número 78. Vamos à parte lógica do 
problema?
1. Monte um vetor VET com os seguintes valores: Montar um 
vetor significa criá-lo e preenchê-lo com os valores colocados 
na seqüência.
10 44 58 78 100
0 1 2 3 4
2. Estabeleça o número 78 como o valor a ser pesquisado. Esse 
número deverá ser armazenado na variável NUMEROLIDO.
3. Crie duas variáveis, uma para armazenar o índice inicial do 
vetor e outra para armazenar o índice final. As variáveis podem 
ser chamadas de PRIMEIRA e ULTIMA respectivamente. 
86
Universidade do Sul de Santa Catarina
Lembre-se de que a posição inicial do vetor é o índice 0. Some os 
dois valores e divida por 2 para achar o índice que corresponde à 
metade do vetor VET. Armazena o valor na variável METADE. 
METADE = (PRIMEIRA + ULTIMA)/2
PRIMEIRA: 0
ULTIMA: 4
METADE: (0 + 4)/2 = 2
10 44 58 78 100
0 1 2 3 4
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é o índice final. 
Como já verificamos que o valor na metade do vetor é 58, não 
precisamos testá-lo novamente. Sendo assim, fazemos com que 
a variável PRIMEIRA assuma o valor da variável METADE 
mais um, ou seja, PRIMEIRA = METADE + 1, ficando 
assim nossa nova estrutura:
10 44 58 78 100
0 1 2 3 4
Agora temos a seguinte composição de variáveis:
PRIMEIRA: METADE + 1, ou seja, 2 + 1 = 3
ULTIMA: 4
METADE: (3 + 4)/2 = 3 (é uma divisão de números inteiros, por isso o resultado é um 
número inteiro, desconsiderando a parte fracionária). Podemos perceber que o valor da 
variável PRIMEIRA é igual ao valor da variável METADE.
PRIMEIRA ULTIMAMETADE
PRIMEIRA ULTIMA
87
Lógica de Programação II
Unidade 4
10 44 58 78 100
0 1 2 3 4
5. Para o teste “78 é igual a 78?”, o resultado é verdadeiro. Nesse 
caso, o algoritmo deve imprimir a mensagem “o número 78 
está no índice 3 do vetor”. Essa primeira parte está concluída. 
6. Não podemos nos esquecer de que o número digitado pode 
estar entre o índice inicial do vetor e a metade do mesmo. 
Temos que resolver essa situação também. Vejamos no caso do 
número lido seja 10. A variável NUMEROLIDO armazena o 
valor numérico 10.
7. Realizamos os mesmos passos para a procura do valor 
numérico 10 através do vetor VET, reinicializando as 
variáveis.
PRIMEIRA: 0
ULTIMA: 4
METADE: (0 + 4)/2 = 2
10 44 58 78 100
0 1 2 3 4
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 posição inicial do vetor até a sua metade. 
Como já verificamos que o valor na metade do vetor é 58, não 
precisamos testá-lo novamente. Assim, podemos testar até 
METADE-1. Vamos atribuir esse valor à variável ULTIMA, 
ou seja ULTIMA  METADE –1, e teremos a seguinte 
estrutura.
PRIMEIRA ULTIMAMETADE
METADEPRIMEIRA ULTIMA
88
Universidade do Sul de Santa Catarina
10 44 58 78 100
0 1 2 3 4
Agora temos a seguinte composição de variáveis:
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
0 1 2 3 4
Para o teste “10 é igual a 10?”, o resultado é verdadeiro. Nesse 
caso, o algoritmo deve imprimir a mensagem “o número 10 está 
no índice 0 do vetor”. 
Nosso processo lógico de encontrar um valor numérico através de 
um vetor com valores numéricos ordenados em ordem crescente 
está finalizado. Agora é com você. Realize as atividades de auto-
avaliação a seguir.
Síntese
Nesta unidade vimos estruturas de algoritmos um pouco mais 
complexas. Dois mecanismos bastante utilizados em lógica 
de programação são os métodos de procura e os métodos de 
ordenação. Inicialmente vimos como ordenar um vetor com 
valores numéricos e, após, vimos como realizar uma busca por 
valores contidos dentro de um vetor. 
PRIMEIRA ULTIMA
PRIMEIRA ULTIMAMETADE
89
Lógica de Programação II
Unidade 4
Você pôde observar dois tipos de busca: O método mais simples 
é o seqüencial, onde percorremos todo o vetor até encontrar o 
valor desejado. Esse método tem a vantagem de ser simples, 
porém, pelo fato de precisar percorrer todo o vetor para encontrar 
o número desejado, não é tão eficiente, caracterizando como uma 
das principais desvantagens desse método. O outro método que 
vimos foi o método da pesquisa binária, aplicada somente para 
vetores com valores ordenados em ordem crescente. 
O método consiste em dividir o vetor pela metade e verificar 
se o valor que estamos procurando está exatamente na metade 
do vetor, ou acima ou abaixo da metade encontra. Caso esteja 
acima ou abaixo da metade, dividimos o vetor novamente até que 
o número seja encontrado. É um método bastante eficiente de 
procura, porém há a necessidade de que o mesmo esteja ordenado 
em ordem crescente.
Nossos algoritmos estão ficando grandes e complexos. É hora 
de estruturá-los de forma a ficarem mais fáceis de entender e 
melhores de trabalhar. Na próxima unidade estaremos vendo 
uma parte que dominou toda a década de 80 em relação aos 
estudos de linguagem de programação: a estruturação ou 
modularização de algoritmos. 
Espero por você lá, então.
Atividades de autoavaliação
1. Ler um vetor contendo 100 códigos relativos às mercadorias de um 
armazém e outro relativo às quantidades de mercadorias. imprimir os 
códigos e as quantidades dos produtos, seguindo a ordem crescente 
das quantidades. 
90
Universidade do Sul de Santa Catarina
2. Ler um vetor contendo 100 números, que correspondem à matrícula 
de alunos. Ler 5 matrículas e verificar se os alunos com essas matrículas 
estão matriculados ou não.
91
Lógica de Programação II
Unidade 4
3. Monte um algoritmo em pseudocódigo que implemente os processos 
lógicos descritos anteriormente. Esse é um algoritmo de pesquisa 
binária.
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 aleatória. 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 disponíveis. Esse 
algoritmo será utilizado no programa já existente no supermercado. 
Faça esse algoritmo solicitado e comente-o sempre que necessário. O 
cliente deverá entender sua solução por completo, tendo em vista que 
ele será o programador da solução proposta por você. 
93
Lógica de Programação II
Unidade 4
Saiba mais
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr 
Figueiredo de. ALGORITMOS: lógica para desenvolvimento 
de programação. 9. ed.
MANZANO, José Augusto N. G. Lógica Estruturada para 
Programação de Computadores.
BORATTI, Isaias Camilo; OLIVEIRA, Álvaro Borges de. 
Introdução à Programação e Algoritmos. 2. ed. Ampliada e 
atualizada. 
UNiDADE 5
Programação estruturada 5
Objetivos de aprendizagem 
� Entender os conceitos de programação estruturada.
� Aplicar modularização aos algoritmos. 
Seções de estudo
Seção 1 Modularização: conceitos iniciais. 
Seção 2Modularização: retorno de valores e passagem de 
parâmetros. 
96
Universidade do Sul de Santa Catarina
Para início de estudo
Você está iniciando agora a última unidade da disciplina. Isso não 
significa que os estudos acabaram por aqui. Muito pelo contrário, 
acabaram de começar. No final desta unidade você estará pronto 
para começar a se tornar um excelente programador Web. O 
que estamos lhe oferecendo é apenas a base, independente da 
linguagem de programação que você irá utilizar ou já utiliza.
Você precisa entender agora um dos conceitos que foi alvo de 
muitos estudos em décadas passadas: a programação estruturada 
ou programação modular. Esse tipo de programação surgiu 
quando ocorreu a crise do software, por volta da década de 60. 
Os programas de computadores se tornaram grandes e caros, 
principalmente em relação à manutenção dos mesmos. Não 
havia metodologia para a criação de programas de computadores. 
A probabilidade de acontecerem erros na programação era 
enorme, mesmo depois de o programa estar funcionando. Eram 
necessárias manutenções diárias, aumentando substancialmente 
os custos de desenvolvimento. 
A tecnologia mudou, o mundo mudou, os problemas também 
mudaram. Temos um grau bem maior de complexidade, e a 
pressão por redução de custos fez com que os programadores 
adotassem metodologias de desenvolvimento de software. Uma 
dessas metodologias é a programação estruturada. O objetivo 
principal da programação estruturada é decompor o problema 
em partes ou blocos, fazendo com que cada bloco execute uma 
função específica 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 manutenção. 
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, então? 
97
Lógica de Programação II
Unidade 5
SEÇÃO 1 - Modularização: 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 
final. A cada uma dessas partes bem definidas, que contribuem 
para a solução do problema, chamamos de módulo. 
Assim também são nossas soluções lógicas. Caso separemos 
um problema em partes, podemos construir algoritmos 
para cada uma das partes de forma bem definida 
e independentes uma das outras. A essa técnica 
de dividir os algoritmos em módulos chamados de 
modularização.
- Retome primeiro o conceito de algoritmo em Lógica de 
Programação I.
Para lembrar!
Um algoritmo é formalmente uma seqüência finita 
de passos que levam a execução de uma tarefa. 
Podemos pensar em algoritmo como uma receita, 
uma seqüência de instruções, que tem a função de 
atingir uma meta específica. Estas tarefas não podem 
ser redundantes nem subjetivas na sua definição, 
devendo ser claras e precisas.
Sendo assim, cada parte ou módulo construído deve ter as 
mesmas características citadas, devendo cada módulo: 
� Implementar tarefas não-redundantes e nem 
subjetivas.
� Ter uma função específica e clara.
� Ser independente de todos os outros módulos de um 
programa.
� Ser testado e corrigido antes de ser integrado à solução 
completa tendo em vista que é parte da solução lógica 
do problema.
� Poder ser utilizado em outros algoritmos que requerem 
os mesmos procedimentos.
98
Universidade do Sul de Santa Catarina
Veja um exemplo:
imagine que você seja responsável por construir uma 
página na intranet de uma empresa prestadora de serviços. 
O programa deverá realizar a entrada de dados para cada 
funcionário da empresa, irá executar o cálculo da folha 
de pagamento e, por fim, irá emitir os contracheques e a 
relação bancária.
Parece um problema bem mais complexo dos que 
temos visto até agora, você concorda?
Pois bem, se quisermos implementar as mesmas soluções lógicas 
até agora estudadas, vamos ter um programa grande e complexo, 
sujeito a falhas e erros. Podemos separar o problema em 
partes, construir pequenos módulos, testá-los e depois integrá-
los para alcançar o objetivo final. Com esse procedimento, a 
complexidade dos algoritmos diminui, os testes se tornam rápidos 
e a manutenção também diminui. Pode parecer estranho, mas os 
resultados são de arregalar os olhos. 
Voltando ao problema, temos que o nosso alvo é a construção de 
um programa de mostrar a folha de pagamento. Vamos então 
dividi-lo conforme figura a seguir:
99
Lógica de Programação II
Unidade 5
FolhaPagamento constitui o nosso programa principal. Esse 
programa é constituído de módulos chamados de EntradaDados, 
Movimento e Saídas. Por sua vez, o Módulo EntradaDados é 
constituído de dois outros módulos: Funcionários e Dependentes. 
Cada módulo resolve um pequeno problema e pode ser 
solucionado por uma pessoa diferente, diminuindo o tempo de 
desenvolvimento.
O módulo Saída mostra a formatação do texto e formulário 
no site da empresa. O módulo EntradaDados permite que 
os dados cadastrais de funcionários e/ou dependentes 
sejam entrados no programa. Cada um desses módulos 
deve funcionar de maneira independente e precisa, ou seja, 
sempre que precisarmos imprimir algo na tela, chamamos 
o módulo responsável por isso, o módulo Saída. Se 
precisarmos cadastrar um novo funcionário, chamamos 
o módulo EntradaDados, e assim sucessivamente. Tudo 
funciona por partes. Não preciso chamar o módulo 
Movimento, se meu interesse é apenas mostrar os 
resultados na saída ou na página da empresa. 
Um fato importante: Os módulos são independentes, mas 
todos eles estão integrados ao módulo que chamados de 
módulo principal do programa em nosso exemplo o módulo 
FolhaPagamento. A partir desse módulo é que os outros são 
chamados para resolver problemas como entrada de dados, 
impressão de resultados etc.
Lembra como era anteriormente? Entrávamos com 
os dados, processávamos o algoritmo e mostrávamos 
o resultado na saída? Agora, as coisas se tornaram 
independentes. Chamamos apenas o módulo que 
nos convier naquele momento, na seqüência em que 
quisermos. É realmente uma forma estruturada de 
trabalhar, percebeu? 
De forma resumida, nossos programas terão agora um módulo 
principal, chamado de programa principal e diversos outros 
módulos que irão compor todo o programa. Cada módulo é 
chamado a partir do programa principal. Quando um módulo é 
chamado a partir do programa principal, os comandos definidos 
100
Universidade do Sul de Santa Catarina
dentro do módulo são executados. Quando finalizados, o controle 
volta para o programa principal. 
Nas linguagens de programação, cada módulo é chamado de 
função.
Mas, o que é uma função?
Uma função é dita como sendo uma sub-rotina 
ou módulo do algoritmo principal. Cada função é 
independente uma da outra. Chamamos uma função 
a partir do algoritmo principal. Dentro da função são 
executados comandos que realizam alguma tarefa 
específica. Quando todos os comandos dentro da 
função forem executados, o controle do programa 
volta para o programa principal. A partir do programa 
principal, podemos chamar outras funções de 
interesse também. 
Por que usar funções ? 
� Para permitir o reaproveitamento de código já 
construído por você ou por outros programadores.
� Para evitar que um trecho de código que seja repetido 
várias vezes dentro de um mesmo programa.
� Para permitir a alteração de um trecho de código de 
uma forma mais rápida. Com o uso de uma função é 
preciso alterar apenas dentro da função que se deseja.
� Para que os blocos do programa não fiquem grandes 
demais e, por conseqüência, mais difíceis de entender.
� Para facilitar a leitura e manutenção do programa.
� Para separar o programa em partes (blocos) que 
possam ser logicamente compreendidas de forma 
isolada.101
Lógica de Programação II
Unidade 5
Com dúvida ainda? Não tem problema. 
Acompanhe um exemplo bastante simples que 
irá permitir que você entenda o que definimos 
anteriormente. A exemplo dos algoritmos 
anteriores, vamos elaborar um pseudocódigo para o 
seguinte problema: queremos somar dois números 
quaisquer. Conforme você já estudou até agora, 
uma solução bastante simples para o caso seria a 
seguinte:
início
 {declarando as variáveis}
 N1, N2, SOMA: inteiro
 {entrada de dados}
 escreva “Programa de soma de dois números”
 escreva “Entre com o primeiro número:”
 leia N1
 escreva “Entre com o segundo número:”
 leia N2
 {processamento da soma}
 SOMA  N1 + N2
 {mostrando a saída}
 escreva “Resultado da soma =”, SOMA
 escreva “Programa Finalizado”
fim
A soma dos dois números está sendo realizada no algoritmo ou 
programa principal. Vamos considerar que as partes do algoritmo 
anterior, que são responsáveis pela soma, sejam as partes de 
entrada de dados, a soma propriamente dita, ou seja, SOMA  
N1 + N2, e a impressão do resultado, ou seja, escreva “Resultado 
da soma =”, SOMA. Modularizar ou estruturar um programa 
consiste na construção de módulos que irão compor o programa 
como um todo e serão chamados a partir do programa principal. 
A proposta é a seguinte: em vez de termos a operação soma 
realizada dentro do programa principal, podemos construir uma 
sub-rotina que faça somente essa operação, ou seja, somar dois 
números e mostrar o resultado final. Sempre que quisermos 
somar dois números chamamos essa sub-rotina. 
102
Universidade do Sul de Santa Catarina
Nosso pseudocódigo ficaria mais ou menos assim:
início
escreva “Programa de soma de dois números”
CHAMADA DA FUNÇÃO FUNCAO_SOMA {quando chamamos a função 
FUNCAO_SOMA o programa passa a executar os comandos dentro da 
função. Finalizados os comandos dentro da função, o programa retorna para 
o programa principal, continuando a executar os comandos aqui colocados 
na seqüência. A sintaxe de uma função será estudada mais adiante.}
escreva “Programa Finalizado”
fim 
FUNÇÃO_SOMA
início
 {declarando as variáveis}
 N1, N2, SOMA: inteiro
 {entrada de dados}
 escreva “Entre com o primeiro número:”
 leia N1
 escreva “Entre com o segundo número:”
 leia N2
 {processamento da soma}
 SOMA  N1 + N2
 {mostrando a saída}
 escreva “Resultado da soma =”, SOMA
fim-função
 
103
Lógica de Programação II
Unidade 5
Pontos a observar:
1. Observe onde estão definidas as variáveis antes e após 
a modularização. Antes da modularização, as variáveis 
estão definidas dentro do programa principal. Após a 
modularização, as variáveis estão definidas dentro da função 
FUNCAO_SOMA. Isso é apenas para colocar o seguinte: 
as variáveis são definidas onde elas são utilizadas. Mais 
importante, uma variável definida no programa principal não 
é reconhecida na função FUNCAO_SOMA, e uma variável 
definida na função FUNCAO_SOMA não é reconhecida 
no programa principal. A isso damos o nome de variáveis 
locais. Por exemplo, em nosso algoritmo principal anterior, se 
tentássemos utilizar a variável N1, como abaixo, estaríamos 
cometendo um erro.
início
 escreva “Programa de soma de dois números”
 CHAMADA DA FUNÇÃO FUNCAO_SOMA
 escreva “O Valor de N1 =”, N1 {errado pois N1 não está definida dentro 
 do programa principal}
 escreva “Programa Finalizado”
fim
O porquê disso? A resposta é que a variável N1 está definida 
dentro da função FUNCAO_SOMA e não dentro do programa 
principal. 
2. Assim que a função é chamada, os comandos dentro da função 
são executados, ou seja, as variáveis N1, N2 e SOMA são 
criadas, são executados os comandos de entrada de dados 
(escreva e leia), é realizado a soma de N1 com N2 e o valor 
armazenado na variável SOMA, e por fim, o valor é impresso. 
Quando os comandos são finalizados encontrando o comando 
fim da função, o programa volta para o programa principal. 
Mas o que acontece com as variáveis locais? Elas são 
destruídas. É isso mesmo. São destruídas e recriadas sempre 
que a função FUNCAO_SOMA for chamada. Por isso não 
podemos acessar essas variáveis a partir do programa principal. 
Dentro da função FUNCAO_SOMA as variáveis locais N1, 
N2 e SOMA são criadas no início e destruídas no fim.
104
Universidade do Sul de Santa Catarina
3. Podemos criar variáveis no programa principal com os 
mesmos nomes das variáveis da função FUNCAO_SOMA? 
A resposta é sim. Elas são variáveis locais e uma nada tem a 
ver com a outra. Assim, nosso pseudocódigo principal estaria 
correto:
início
 {declarando variável N1}
 N1: inteiro
 N1  10
 escreva “Programa de soma de dois números”
 CHAMADA DA FUNÇÃO SOMA
 escreva “O Valor de N1 =”, N1 {agora está correto pois a variável N1 
 está definida dentro do programa principal. Essa variável local é diferente 
 da variável local definida na função SOMA.}
 escreva “Programa Finalizado”
fim
4. Podemos chamar a função FUNCAO_SOMA quantas vezes 
quisermos. Veja o pseudocódigo abaixo:
início
 escreva “Programa de soma de dois números”
 CHAMADA DA FUNÇÃO FUNCAO_SOMA {primeira chamada da função 
 FUNCAO_SOMA}
 CHAMADA DA FUNÇÃO FUNCAO_SOMA {segunda chamada da função 
 FUNCAO_SOMA}
 CHAMADA DA FUNÇÃO FUNCAO_SOMA {terceira chamada da função 
 FUNCAO_SOMA}
 escreva “Programa Finalizado”
fim
Esta é uma das vantagens da modularização: construímos a 
função uma vez e chamamos quantas vezes quisermos.
5. O nome FUNCAO_SOMA foi escolhido apenas para mostrar 
que estamos nos referindo a uma função cuja função seja a 
de somar dois números. Não é necessário colocar a palavra 
FUNCAO. Poderíamos ter definido a função como FSOMA, 
105
Lógica de Programação II
Unidade 5
SOMAS, ou outro nome qualquer. Não poderíamos chamar 
a função de SOMA apenas porque criamos uma variável 
também chamada de SOMA. O que quero dizer é que não 
podemos ter o mesmo nome significando coisas diferentes 
(função ou variável).
SEÇÃO 2 - Modularização: retorno de valores e 
 passagem de parâmetros
Na seção 1 vimos um algoritmo de função bastante simples que 
permite implementar a soma de dois números. Todo o processo 
de entrada, cálculo da soma e escrita do resultado é feito na 
função FUNCAO_SOMA.
No entanto, se perguntássemos o que realmente a 
função FUNCAO_SOMA deve fazer, qual a função 
principal da função FUNCAO_SOMA, qual seria sua 
resposta? 
Se você respondeu que a função FUNCAO_SOMA deve somar 
e somente somar dois números você acertou. Observe que dentro 
da função FUNCAO_SOMA temos comandos de entrada e 
saída, além da soma propriamente dita.
Veja o seguinte exemplo:
Você quer somar dois números quaisquer mas não deseja 
imprimir o resultado na tela do seu computador, isso porque a 
soma dos dois números serve apenas para verificar se o resultado 
é um número superior ou abaixo de 10, por exemplo. Para esse 
caso, a nossa função FUNCAO_SOMA não serve, sabe por 
quê? Por que além de somar os dois números e função, também 
imprime o resultado na tela. Ou seja, estamos atribuindo à 
função FUNCAO_SOMA funções que na verdade não lhe 
pertencem. A função FUNCAO_SOMA deve somar, e tão 
somente somar, dois números. Dados de entrada e saída devem 
ser feitos à parte. Isso vai nos levar ao tema de Passagem de 
106
Universidade do Sul de Santa Catarina
parâmetros e retorno de valores a partir das funções. Podemos 
imaginar uma função como sendo uma caixa que aceita valores, 
processa-os e retorna um resultado para o programa principal. 
Se utilizarmos o mesmo exemplo da função FUNCAO_SOMA, 
o seguinte esquema nos mostra onde estamos querendo chegar:
Dois valores são passados para a função FUNCAO_SOMA, N1 
e N2. A função realiza a soma e retorna o valor (resultado) para 
o programa principal. De onde vêm N1 e N2? Para onde vai o 
valor da variável SOMA? É isso que vamos responder a partir de 
agora.
Retornando valores de funções
Retornar um valor de uma função significa que o valor calculadopela função pode ser lido no programa principal. Você deve estar 
se perguntando: Como assim? 
Veja o exemplo da função FUNCAO_SOMA. Queremos que a 
função não imprima mais o resultado, ou seja, queremos eliminar 
o comando escreva da função FUNCAO_SOMA. Quem irá 
imprimir o resultado da soma será o programa principal. 
Conforme disse na seção 1, a variável SOMA é criada sempre 
que a função FUNCAO_SOMA é chamada. Ao finalizar a 
função com o comando fim, a variável SOMA é destruída e não 
podemos acessar mais seu conteúdo. No entanto, ainda assim é 
possível ler seu valor antes mesmo da variável ser destruída. 
O que estamos querendo dizer é que é possível ler o valor da 
variável SOMA no momento em que chamamos a função 
FUNCAO_SOMA no programa principal. 
107
Lógica de Programação II
Unidade 5
Veja como isso pode ser feito:
FUNÇÃO_SOMA
início
 {declarando as variáveis}
 N1, N2, SOMA: inteiro
 {entrada de dados}
 escreva “Entre com o primeiro número:”
 leia N1
 escreva “Entre com o segundo número:”
 leia N2
 {processamento da soma}
 SOMA  N1 + N2
 {em vez de imprimir o resultado na tela, vamos retornar o valor da 
 variável SOMA para o programa principal. Esse valor vai ser retornado 
 para a linha de comando onde a função FUNCAO_SOMA é chamada. 
 O comando que executamos nesse caso é o comando retorna 
 onde identificador é o nome de uma variável 
definida dentro da função}
retorna SOMA.
fim-função
No programa principal, podemos ter:
início
 {declaração da variável}
 RESULTADO: inteiro 
 escreva “Programa de soma de dois números”
 {observe o comando a seguir: Ele nos indica que o valor retornado pela 
 função FUNCAO_SOMA é armazenado na variável RESULTADO, variável 
 essa declarada no programa principal. Com isso, podemos ler o conteúdo 
 da variável SOMA declarada na função FUNCAO_SOMA.} 
 RESULTADO  CHAMADA DA FUNÇÃO FUNCAO_SOMA 
108
Universidade do Sul de Santa Catarina
{Vamos supor que estamos entrando com os números 2 e 3 e queremos 
somá-los. Na chamada da função FUNCAO_SOMA a função retorna o valor 
da variável SOMA que é 5. Sendo assim, o comando ficaria RESULTADO  5}
{Importante: O valor retornado por uma função somente pode ser 
lido no momento em que ela é chamada. Os comandos a seguir estão 
completamente errados: 
CHAMADA DA FUNÇÃO FUNCAO_SOMA
RESULTADO  SOMA. 
 
Você sabe por quê? Por dois motivos básicos. Quando uma função 
retorna um valor ela retorna na linha de comando em que ela é 
chamada. 
{Você sabe por quê? Por dois motivos básicos. Quando uma função 
retorna um valor ela retorna na linha de comando em que ela é chamada. 
Ao encontrar o comando CHAMADA DA FUNÇÃO FUNCAO_SOMA, a função 
é chamada, e ao encontrar o comando retorna dentro 
da função, o valor de é colocado na mesma linha que a 
função é chamada. O segundo motivo é que a variável SOMA não pode 
ser lida a partir do programa principal, tendo em vista que ela é definida 
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 variável RESULTADO. Podemos 
verificar se o valor da soma é maior ou igual a 10, por exemplo: 
se RESULTADO > 10 então
 escreva “A soma é maior que 10”
senão
 escreva “A soma é menor ou igual a 10”. Também, podemos apenas 
imprimi-lo conforme algoritmo anterior.}
escreva “Resultado da soma =”, RESULTADO
escreva “Programa Finalizado”
fim
Sem segredos não é mesmo?
Estamos com uma função (FUNCAO_SOMA) que tem duas 
funções básicas: entrada de dados e a soma dos números. 
A impressão fica a cargo do programa principal. Nosso próximo 
passo é fazer com que a função FUNCAO_SOMA apenas some, 
deixando a entrada de dados para o programa principal ou até 
mesmo uma outra função qualquer.
109
Lógica de Programação II
Unidade 5
Passando valores para funções
Até agora não nos preocupamos com a sintaxe para a 
implementação de uma função em pseudocódigo. Acho que é 
mais importante entender o conceito agora do que mostrar a 
sintaxe propriamente dita. Entendido o conceito de função, a 
sintaxe é mero detalhe.
Vimos como voltar um valor de uma função. A 
questão agora é: Podemos passar valores para dentro 
de uma função, ou seja, podemos passar um valor de 
uma variável definida dentro do programa principal 
para uma função? 
A resposta é sim. Perceba que estamos agora fazendo o caminho 
da volta do que fizemos no item 2.1. A transferência de valores 
para dentro de uma função se dá através de passagem por 
parâmetros.
Mas o que significa passagem de parâmetros? Para responder essa 
questão, voltamos à figura onde definimos um esquema para a 
função FUNCAO_SOMA.
Vimos que SOMA representa o valor de retorno da função 
FUNCAO_SOMA. Mas quem são N1 e N2? De onde vêm 
essas variáveis? Pois bem, N1 e N2 são duas variáveis declaradas 
fora da função FUNCAO_SOMA. Por exemplo, elas podem 
estar declaradas dentro do programa principal de forma que a 
entrada de dados não é mais realizada pela função FUNCAO_
SOMA e sim pelo programa principal. Poderiam estar definidas 
em outra função qualquer também. 
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 variáveis N1 e N2 armazenam dois valores que 
queremos somar, e cuja operação de soma é realizada pela função 
FUNCAO_SOMA, obviamente temos que fazer com que esses 
dois valores possam ser lidos dentro da função também. É sempre 
importante lembrar que as variáveis são locais (definidas dentro 
do programa principal) e não podem ser utilizadas em quaisquer 
outras funções. A passagem dos valores das variáveis N1 e N2 se 
dá através de passagem de parâmetros. Os parâmetros de uma 
função são variáveis locais definidas junto ao nome da função 
e servem para receber valores de outras funções ou programa 
principal e podem ser utilizados como variáveis locais dentro da 
função. Por exemplo, quando definimos anteriormente a função 
FUNCAO_SOMA, utilizamos a seguinte sintaxe provisória:
FUNCAO_SOMA 
início
{declaração de variáveis locais} 
{comandos da função}
fim-função
Os parâmetros de uma função são definidos junto ao nome da 
função. Eles recebem valores que serão passados para a função no 
momento em que é chamada no programa principal. Em nosso 
programa de soma, a função FUNCAO_SOMA deve receber 
dois valores para serem somados. Então, temos:
FUNCAO_SOMA( NUM1, NUM2 )
início
{declaração de variáveis locais} 
{comandos da função}
fim-função 
111
Lógica de Programação II
Unidade 5
Perceba que os parâmetros NUM1 e NUM2 são colocados entre 
parênteses após o nome da função. Podemos utilizar NUM1 
e NUM2 dentro da função de modo que nos convier. Essas 
variáveis são variáveis locais que servem para receber valores a 
partir da chamada da função. Mostro um exemplo que explica 
melhor. Veja o nosso programa principal:
início
 N1, N2, RESULTADO: inteiro
 {vamos realizar a entrada pelo programa principal}
 escreva “entre com o número 1”
 leia N1
 escreva “entre com o número 2”
 leia N2
{N1 e N2 são duas variáveis locais que armazenam os valores que 
queremos somar. Devemos, portanto, passar esses valores para dentro 
da função FUNCAO_SOMA. Fizemos isso através da passagem de 
parâmetros}
RESULTADO  FUNCAO_SOMA (N1, N2) {Nesse momento, a função 
FUNCAO_SOMA é chamada e o valor da variável N1 é armazenado na 
variável NUM1 e o valor da variável N2 é armazenado na variável NUM2, 
exatamente nessa seqüência. A função calcula a soma e retorna um valor, 
cujo resultado é armazenado em RESULTADO.}
escreva “resultado da soma =”, RESULTADO
fim
 
Nossa função FUNCAO_SOMA é a seguinte:
 FUNCAO_SOMA( NUM1, NUM2 )
início
{declaração de variáveis locais} 
SOMA : numérico
{o parâmetro ou variável NUM1 armazena ovalor da variável N1 e o 
parâmetro ou variável NUM2 armazena o valor da variável N2}
SOMA  NUM1 + NUM2 {observe aqui que estamos utilizando NUM1 
e NUM2 como variáveis locais. Diferentemente das variáveis declaradas 
dentro da função, os parâmetros da função servem para receber valores 
no momento em que são chamadas. Uma observação importante é o fato 
de não podermos definir variáveis locais com os mesmos nomes do que os 
parâmetros da função. Em nosso exemplo, não podemos declarar
112
Universidade do Sul de Santa Catarina
uma variável chamada NUM1 porque já está definida como parâmetro da 
função}
retorna SOMA {retorna o valor da variável SOMA para a linha de 
comando em que a função foi chamada}
fim-função
Se fôssemos montar um novo esquema para a função 
FUNCAO_SOMA, teríamos:
No momento em que a função FUNCAO_SOMA é chamada, 
os parâmetros da função (NUM1 e NUM2) são criados e são 
passados os valores das variáveis N1 e N2 respectivamente.
Observe que estamos transferindo valores de N1 para 
NUM1 e de N2 para NUM2. isso significa que ambos 
devem ser do mesmo tipo, ou seja, se N1 inteiro, 
NUM1 também deve ser inteiro. Se a variável N2 for 
literal, então NUM2 também deve ser literal.
Sintaxe da função
Bem, já conhecendo a importância de uma função e de como 
ela é chamada, basta saber como implementar utilizando 
pseudocódigo. Veja a sintaxe:
Sintaxe da função função (): 
 
113
Lógica de Programação II
Unidade 5
Os termos utilizados nesse tipo de sintaxe são explicados a 
seguir:
Função Comando referente à função
 Nome da função que será declarada.
 Lista dos parâmetros que serão utilizados (se houver)
 Tipo da variável que será retornada pela função declarada 
(numérico, literal, lógico)
Observe como fica a função FUNCAO_SOMA utilizando a 
sintaxe em pseudocódigo:
Nome da função: FUNCAO_SOMA
Lista de parâmetros: NUM1 e NUM2 do tipo inteiro
Tipo de retorno: inteiro
Desta forma, a sintaxe para a função FUNCAO_SOMA fica:
função FUNCAO_SOMA (NUM1, NUM2: inteiro): inteiro
Veja outros exemplos de declaração de função:
1. Função que recebe 4 notas e retorna a média.
função MEDIA (NOTA1, NOTA2, NOTA3, NOTA4: real): real
2. Função que recebe o nome e idade de uma pessoa e 
retorna verdadeiro ou falso. 
função CADASTRA (NOME: literal, IDADE: inteiro): lógico
3. Função que recebe o nome de um mês e volta o mês em 
número
função FUNCAO_MES ( MÊS: literal ): inteiro 
114
Universidade do Sul de Santa Catarina
Acompanhe mais alguns exemplos de funções. O interesse aqui 
é apenas verificar a implementação das funções. Você poderá 
construir qualquer tipo de programa que chame essas funções 
da maneira que você quiser, quantas vezes quiser e onde quiser. 
Por isso é que chamamos de modularização. Fazemos uma vez e 
podemos usar várias.
1. Criar uma função para receber o ano corrente e 
o ano de nascimento de uma pessoa. Em seguida, 
retornar a idade da pessoa.
Pseudocódigo:
função idade (anocorrente, anonascimento: inteiro): inteiro
 retorna ANOCORRENTE – ANONASCIMENTO
fim-função
2. Criar uma função para receber o valor de uma 
determinada temperatura em graus Fahrenheit e 
retornar o valor correspondente em Centígrados. A 
fórmula de conversão é C = 5/9 (F-32).
Pseudocódigo:
função CELSIUS (FAHRENHEIT : real) : real
 retorna (5/9) * (FAHRENHEIT - 32) 
fim-função
3. Um exemplo bastante interessante é o 
desenvolvimento de um algoritmo para 
implementação de menus de entrada, ou seja, a 
elaboração de opções que permitam o usuário entrar 
com os dados de acordo com a seleção de um item.
- Bem, agora você está mesmo finalizando os estudos de lógica de 
programação. Foi um desafio e tanto não?
115
Lógica de Programação II
Unidade 5
Mas o estudo não deve terminar por aqui. O que você conheceu 
e aprendeu é apenas o “ponta-pé” inicial para aprofundamentos 
futuros. Lembro novamente que, quanto mais exercícios 
você fizer, melhor você será e se diferenciará dos outros 
programadores. Um outro fato importante que recomendo é 
que, ao estudar linguagem de programação, você não abandone 
a lógica. Pense inicialmente em uma solução algorítmica. Isso 
é pensar no problema de forma inteligente. Aliás, isso é ser 
inteligente. Com a solução pensada, o programador terá apenas 
trabalho de digitar a solução lógica encontrada em qualquer 
linguagem de programação. Passa a ser um trabalho de digitação.
Faço uma última pergunta a você:
Você quer se tornar um profissional de programação 
ou um digitador profissional? 
Pense nisso quando estiver programando um website.
Um grande abraço e sucesso!
Síntese
Nesta unidade você viu que para a solução 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 definida, e fazer com que 
eles sejam independentes um dos outros. A essa técnica de dividir 
os algoritmos em módulos chamamos de modularização. 
Cada módulo, quando bem elaborado, deve possuir uma série 
de características: implementar tarefas não-redundantes e nem 
subjetivas; ter uma função específica e clara; ser independente de 
todos os outros módulos de um programa; ser testado e corrigido 
antes de ser integrado à solução completa, tendo em vista que é 
parte da solução lógica do problema.
116
Universidade do Sul de Santa Catarina
Em pseudocódigo, utilizamos o conceito de função para mo-
dularizar um algoritmo. Uma função é dita como sendo uma 
sub-rotina ou módulo do algoritmo principal. Cada função é 
independente uma da outra. Chamamos uma função a partir do 
algoritmo principal. A sintaxe para implementar uma função é a 
seguinte:
função (): 
Onde a lista de parâmetros representa a forma de passagem de 
valores para dentro da função. É o que chamamos de passagem 
de valor ou passagem de parâmetros por valor. A função também 
pode retornar um valor. Esse valor é do tipo , 
podendo ser numérico, literal ou lógico. 
Sempre que necessário, devemos utilizar funções para desenvolvi-
mento de algoritmos. As grandes vantagens são:
� Para permitir o reaproveitamento de código já 
construído por você ou por outros programadores.
� Para evitar que um trecho de código que seja repetido 
várias vezes dentro de um mesmo programa.
� Para permitir a alteração de um trecho de código de 
uma forma mais rápida. Com o uso de uma função é 
preciso alterar apenas dentro da função que se deseja. 
� Para que os blocos do programa não fiquem grandes 
demais e, por conseqüência, mais difíceis de entender.
� Para facilitar a leitura do programa de uma forma mais 
fácil.
� Para separar o programa em partes (blocos) que 
possam ser logicamente compreendidas de forma 
isolada.
 
117
Lógica de Programação II
Unidade 5
Atividades de autoavaliação
1. Utilizando o algoritmo anterior, implemente a função SUBTRACAO, 
MULTiPLiCACAO e DiViSAO. Elabore um programa principal que possa 
chamar as funções de acordo com o que o usuário deseja. Por exemplo, 
se o usuário digitar 1, a função SUBTRACAO é chamada, se o usuário 
digitar 2, a função MULTiPLiCACAO é chamada, se o usuário digitar 3 
a função DiViSAO é chamada. Qualquer outro número, o programa 
deverá indicar uma mensagem de erro e solicitar com que o usuário 
digite 1, 2 ou 3 novamente. 
118
Universidade do Sul de Santa Catarina
2. Na atividade 1, altere os algoritmos de cada função de forma que as 
mesmas retornem os valores por elas calculados. O programa principal 
é que deverá imprimir o resultado de saída, qualquer que seja a 
operação escolhida (subtração, multiplicação ou divisão).
119
Lógica de Programação II
Unidade 5
3. Elaborar uma função que calcule o maior número entre três valores. A 
função deve aceitar três parâmetros e retornar o maior valor entreeles. 
A entrada de dados e a impressão do resultado devem ser feitas no 
programa principal.
120
Universidade do Sul de Santa Catarina
Saiba mais
Para aprofundar os estudos leia os livros indicados a seguir.
MANZANO, José Augusto N. G. LÓGICA estruturada para 
programação de computadores. 
XAVIER, Gley Fabiano Cardoso. Lógica de Programação.
MANZANO, José Augusto N. G. Algoritmos: lógica para de-
senvolvimento de programação de computadores. 
Para concluir o estudo
Você chegou ao final da disciplina de Lógica de 
Programação II. Foram 120 horas de estudos de 
algoritmos de programação. O objetivo principal foi 
estudar as principais estruturas lógicas de programação 
e perceber a importância de realizar um projeto de 
qualquer software através de algoritmos. 
Pois bem, gostaria de enfatizar que o conteúdo não 
terminou, muito pelo contrário, você está agora apto para 
se aprofundar em algoritmos de programação. Por isso, 
agora é com você, nobre estudante. Siga em frente! Se 
você quiser realmente ser um programador diferenciado 
no mercado, passo o bastão para você. A corrida é sua 
agora. Tenho certeza também que a vitória virá. Não 
se esqueça disso, quanto mais você estiver preparado em 
lógica de programação, melhor você será, independente 
de qualquer linguagem de programação que você poderá 
vir a utilizar. Esse é realmente o diferencial de um bom 
programador. Não seja apenas um digitador, seja um 
pensador, por isso, saiba bem lógica de programação. 
Um grande abraço e até a próxima oportunidade.
Professor Carlos Fernando Martins.
MANZANO, José Augusto N. G.; OLiVEiRA, Jayr Figueiredo 
de. ALGORITMOS: lógica para desenvolvimento de 
programação. 9. ed. São Paulo: Érica, 2000. 265 p.
ABE, Jair Minoro; SCALZiTTi, Alexandre,; SiLVA FiLHO, João inácio 
da,. Introdução à lógica para a ciência da computação. 2. ed. 
São Paulo: Arte & Ciência, 2002. 247 p.
WARNiER, Jean-Dominique. LCP - Lógica de Construção de 
Programas: um método de programação estruturada. 3. ed. 
Rio de Janeiro: Campus, 1984. 185 p.
UCCi, Waldir; SOUSA, Reginaldo Luiz; KOTANi, Alice Mayumi. 
LÓGICA de programação: os primeiros passos. 8. ed. São 
Paulo: Érica, 1999. 339 p.
FORBELLONE, André Luiz Villar; EBERSPÄCHER, Henri Frederico. 
LÓGICA de programação: a construção de algoritmos e 
estruturas de dados. 2. ed. rev. e atual. São Paulo: Makron 
Books, 2000. 197 p.
MANZANO, José Augusto N. G. LÓGICA estruturada para 
programação de computadores. São Paulo: Érica, 2002. 180 p.
Referências
Sobre o professor conteudista
Carlos Fernando Martins
Engenheiro de Controle e Automação Industrial pela 
Universidade Federal de Santa Catarina – UFSC 
(1990-1995); Mestre em Engenharia Elétrica pelo 
Departamento de Automação e Sistemas da UFSC 
(1995-1996); Doutorando no Departamento de 
Engenharia Mecânica da UFSC (início em 2001) 
na Área de Concentração: Sistemas de Produção da 
Manufatura. Professor da Faculdade de Tecnologia 
do SENAI Florianópolis nas disciplinas de Lógica 
de Programação, Programação Orientada a Objetos, 
Linguagens de Programação C/C++ e UML; Professor 
de cursos de Pós Graduação em nível de especialização 
em automação industrial (Sistemas Discretos da 
Manufatura, Integração de Sistemas da Manufatura, 
Sistemas da Informação).
Respostas e comentários das 
atividades de autoavaliação
Unidade 1
1) temperaturas: vetor[25] real
2) nomes: vetor[150] literal
3) produtos: vetor[2500] literal
4) Pseudocódigo do programa de reserva de vôos
início
{declaração de variáveis}
 NUM_VOOS, I, NVD: inteiro {NVD = número do vôo desejado} 
vetor: VOOS[500] inteiro {supondo 500 vôos ao dia. Cada posição do vetor 
armazena o número de lugares disponíveis}
 RG: literal 
 
 {início do programa}
 escreva “Especifique o número de vôos disponíveis”
 leia NUM_VOOS
 para I de 0 até NUM_VOOS-1 passo 1 faça
 escreva “Especifique a quantidade de lugares disponíveis para 
 o vôo:”, I+1
 leia VOOS[ I ]
 fim-para
 {processamento}
 escreva “Entre com o número do vôo ou –1 para sair:”
 leia NVD {leitura do número do vôo desejado pelo cliente}
 enquanto NVD -1 faça
 se (NVD >= 0 E NVD 0 então {há lugares disponíveis}
 VOOS[ NVD ]  VOOS[ NVD ] – 1 {1 lugar ocupado no vôo} 
128
Universidade do Sul de Santa Catarina
Unidade 2
1) Pseudocódigo
início
 NOMES : vetor [27] literal
 DISTANCIAS : matriz [27][27] real
 LINHA, COLUNA : inteiro
 CAPITAL1, CAPITAL2 : literal
 para LINHA de 0 até 26 passo 1 faça
 escreva “Digite o nome de uma capital: “ 
 leia NOMES[LINHA]
 fim-para
 para LINHA de 0 até 26 passo 1 faça
 para COLUNA de 0 até 26 passo 1 faça
 se LINHA = COLUNA então
 DISTANCIAS[LINHA][COLUNA]  0
 senão 
 escreva “Digite a distância (kms) entre “,NOMES[LINHA], “ e “, 
 NOMES[COLUNA]
 escreva “Entre com o RG do passageiro:”
 leia RG
 senão
 escreva “Não há lugares disponíveis no vôo”, NVD 
 fim-se
 senão
 escreva “Não existe esse vôo”, 
 fim-se 
 escreva “Entre com o número do vôo ou –1 para sair:”
 leia NVD
 fim-enquanto
fim
129
Lógica de Programação II
 leia DISTANCIAS[LINHA][COLUNA]
 fim-se
 fim-para
 fim-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 CAPITAL2 ou COLUNA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE 1 – Manipulação de vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
UNIDADE 2 – Manipulação de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
UNIDADE 3 – Manipulação de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
UNIDADE 4 – Tópicos avançados em algoritmos computacionais . . . . . 71
UNIDADE 5 – Programação estruturada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Para concluir o estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Sobre o professor conteudista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Respostas e comentários das atividades de autoavaliação . . . . . . . . . . . . . 127
Apresentação
Este livro didático corresponde à disciplina de Lógica de 
Programação II.
O material foi elaborado visando a uma aprendizagem autônoma, 
abordando conteúdos especialmente selecionados e adotando uma 
linguagem que facilite seu estudo a distância. 
Por falar em distância, isso não significa que você estará sozinho. 
Não esqueça que sua caminhada nesta disciplina também 
será acompanhada constantemente pelo Sistema Tutorial da 
UnisulVirtual. Entre em contato sempre que sentir necessidade, 
seja por correio postal, fax, telefone, e-mail ou Espaço 
UnisulVirtual de Aprendizagem. Nossa equipe terá o maior 
prazer em atendê-lo, pois sua aprendizagem é nosso principal 
objetivo
Bom estudo e sucesso!
 
Equipe UnisulVirtual. 
Palavras do professor
Olá caro estudante, pronto para mais uma etapa? 
Na verdade, agora você vai aprimorar o que estudou em 
Lógica de Programação I. Não imagine que está na metade 
do caminho, tendo em vista que o estudo da lógica de 
programação é contínuo e eterno, pelo menos para quem quer 
ser um programador verdadeiro. 
Ainda hoje, mesmo depois de muitos anos trabalhando com 
programação, cada algoritmo que implemento é uma forma de 
exercitar os conceitos. Trato cada algoritmo como um desafio 
a ser vencido. Você deve pensar assim também, que lógica de 
programação é um aprendizado contínuo e dinâmico; que cada 
problema solucionado por um algoritmo de programação é um 
degrau alcançado. Isso pode ajudar e muito nos desafios desta 
disciplina. 
Lembre-se, um programador diferencia-se do outro pela 
quantidade de exercícios que ele faz. Portanto, aproveite 
esse material de base para se aprofundar. Consulte algumas 
bibliografias que poderão ajudá-lo a resolver outros problemas 
de programação. Quanto mais você estudar, melhor vai ficar. 
E quanto melhor ficar, mais você vai estudar. É um ciclo 
contínuo e desafiador. Planeje o seu tempo de forma que o 
estudo de lógica de programação se torne uma diversão. Se 
assim for, você já tem o espírito de programador. 
Bom estudo! 
Professor Carlos Fernando Martins.
Plano de estudo
O plano de estudos visa a orientá-lo/a no desenvolvimento da 
Disciplina. Nele, você encontrará elementos que esclarecerão 
o contexto da Disciplina e sugerirão 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 construção de competências se dá sobre a articulação 
de metodologias e por meio das diversas formas de ação/
mediação.
São elementos desse processo:
 � o livro didático; 
 � o Espaço UnisulVirtual de Aprendizagem - EVA; 
 � as atividades de avaliação (complementares, a distância 
e presenciais).
Ementa
Continuação da “Lógica de Programação I” com 
aprofundamento dos estudos com Fluxogramas e Diagrama de 
Blocos. Linguagens de programação, Códigos computacionais 
e ambientes de desenvolvimento. Exercícios de Programação 
Linear, de Programação Estruturada e de Programação Visual. 
Objetivos
� Desenvolver a capacidade do aluno em pensar 
logicamente, sendo assim, capaz de desenvolver 
algoritmos computacionais de média e alta 
complexidade.
� Elaborar algoritmos de programação de média e 
alta complexidade.
12
Universidade do Sul de Santa Catarina
Carga horária
A carga horária total da disciplina é 60 horas/aula.
Agenda de atividades/ Cronograma
 � Verifique com atenção o EVA, organize-se para acessar 
periodicamente o espaço da Disciplina. O sucesso nos 
seus estudos depende da priorização do tempo para a 
leitura; da realização de análises e sínteses do conteúdo; e 
da interação com os seus colegas e tutor.
 � Não perca os prazos das atividades. Registre no espaço 
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.
13
Lógica de Programação II
Atividades 
Demais atividades (registro pessoal)
Objetivos de aprendizagem 
� Conhecer os algoritmos de maiores complexidades.
� Construir algoritmos com utilização de vetores.
Seções de estudo
Seção 1 Conceito e declaração de vetores.
Seção 2 Operação de vetores. 
Seção 3 Algoritmos com manipulação de vetores. 
UNiDADE 1
Manipulação de vetores 1
16
Universidade do Sul de Santa Catarina
Para início de estudo
Antes de iniciar o estudo sobre vetores, você deve recordar o 
que é uma variável e para que ela serve, certo? Bem, voltando 
à unidade 4 de Lógica de Programação I, temos que variável 
é a representação simbólica dos elementos de memória de um 
computador. Cada variável corresponde a uma posição de 
memória, cujo conteúdo pode se alterado ao longo do tempo 
durante a execução de um programa. 
Embora uma variável possa assumir diferentes valores, ela só 
pode armazenar um valor a cada instante. 
Você também estudou que as variáveis podem ser de quatro 
tipos: inteiras, reais e laterais, e que para declarar uma variável 
precisamos definir o seu nome e que tipo de dados será 
armazenado nela. 
Veja a seguir:
início
nome: literal {variável do tipo literal}
idade: inteiro {variável do tipo inteira}
fim
Outro exemplo bem fácil, já utilizando o sinal de atribuição.
Veja.
início
nome: literal {variável do tipo literal}
idade: inteiro {variável do tipo inteira}
idade  22 {variável idade assume valor 22}
nome  “Paulo Pereira” {variável nome assume “Paulo Pereira”}
fim
17
Lógica de Programação II
Unidade 1
O algoritmo acima, amplamente discutido em Lógica de 
Programação I, serve de base para a seguinte questão: Suponha 
que precisamos cadastrar dois nomes de clientes com suas 
respectivas idades. Como fazer? Ora, parece bem simples, você 
não acha? Basta criar duas novas variáveis, conforme mostro a 
seguir:
início
nome1, nome2: literal {variáveis do tipo literal}
idade1, idade2: inteiro {variáveis do tipo inteira}
idade1  22 {variável idade1assume valor 22}
nome1  “Paulo Pereira” {variável nome1 assume “Paulo Pereira”}
idade2  38 {variável idade2 assume valor 38}
nome2  “Ana Luiza” {variável nome2 assume “Ana Luiza”}
fim
Mas, e se quisermos criar um cadastro de alunos de um colégio? 
E agora? Quantas variáveis precisamos criar? 500, 2500, 10000? 
Basta utilizar o conceito de vetores para lidar com situações como 
essas. 
- Toda a lógica de programação estudada até agora vai se repetir. Não 
há nenhum outro comando. Tudo que você aprendeu em Lógica de 
Programação I será utilizado agora. Os únicos assuntos novos são o 
conceito, a criação e a utilização de vetores. 
18
Universidade do Sul de Santa Catarina
SEÇÃO 1 - Conceito e declaração de vetores
Antes de definir vetor, imaginemos a seguinte situação. 
Precisamos criar um programa que armazene as seguintes notas 
de um aluno em Lógica de Programação II: 8.0, 10.0, 9.0, 10.0, 
8.5, 10.0 e que calcule a média final. A solução é bem simples, 
conformeinício 
 {declaração do registro FICHA}
 VIDEO: registro
 {variáveis da ficha}
 NOME, CODIGO, TIPO, PRODUTOR, ATOR, DIRETOR: literal
 ANO: inteiro
 DURACAO: real
 fim-registro
 FITAS: vetor[0..499] VIDEO {permite cadastrar até 500 fitas de vídeo}
 NUM_FITAS, CONT: inteiro
 {entrada de dados}
 escreva “Entre com o número de fitas a serem cadastradas”
 leia NUM_FITAS
 para CONT de 0 até NUM_FITAS-1 passo 1 faça
 escreva “Entre com o nome do filme:”
 leia FITAS[CONT].NOME
 escreva “Entre com o código do filme:”
 leia FITAS[CONT].CODIGO
 escreva “Entre com o tipo de filme:”
 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 filme:”
 leia FITAS[CONT].DIRETOR
 escreva “Entre com o tempo de duração do filme:”
 leia FITAS[CONT].DURACAO
 escreva “Entre com o ano da produção:”
 leia FITAS[CONT].ANO
 fim-para
132
Universidade do Sul de Santa Catarina
4) Cadastro de 200 funcionários de uma empresa.
 Pseudocódigo:
início
 tipo FICHA = registro
 DATA_NASC, NOME, ENDERECO, CIDADE, UF, RG, CURSO, GRAU_ESC, CONJUGE : literal
 CODIGO,CEP, DEPENDENTES, FONE, CPF : inteiro
 fim-registro
 FUNCIONARIOS : vetor [0..199] FICHA
 CODIGOCONSUL, CONT, POS : inteiro
 para POS de 0 até 199 passo 1 faça
 escreva “Especifique o código do funcionário:”
 leia FUNCIONARIOS[POS].CODIGO
 escreva “Digite o nome do funcionário:”
 leia FUNCIONARIOS[POS].NOME
 escreva “Especifique o endereço:”
 leia, FUNCIONARIOS[POS].ENDERECO
 escreva “Espeficique a cidade onde funcionário reside:”
 leia FUNCIONARIOS[POS].CIDADE
 escreva “Especifique o estado:”,
 leia FUNCIONARIOS[POS].UF
 escreva “Especifique o CEP:”
 leia FUNCIONARIOS[POS].CEP
 escreva “Especifique o telefone”
 leia FUNCIONARIOS[POS].FONE
 
 {resultados de saída}
 para CONT de 0 até NUM_FITAS-1 passo 1 faça
 {resultado de saída do algoritmo. Perceba que vamos colocar as principais 
 saídas tudo no mesmo comando} 
 escreva “O filme”, FITAS[CONT].NOME, “do produtor”, FITAS[CONT]. 
 PRODUTOR, “é um”, FITAS[CONT].TIPO, “com uma duração de”, FITAS[CONT]. 
 DURACAO, “.Estrelando o ator”, FITAS[CONT].ATOR “.O filme foi produzido no 
 ano de”, FITAS[CONT].ANO 
 fim-para
fim
133
Lógica de Programação II
 escreva “Digite CPF”
 leia FUNCIONARIOS[POS].CPF
 escreva “Especifique 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 cônjuge:”
 leia FUNCIONARIOS[POS].CONJUGE
 escreva “Digite o número de dependentes:”
 leia FUNCIONARIOS[POS].DEPENDENTES
 fim-para
 para CONT de 1 até 20 passo 1 faça
 escreva “Digite o código do funcionário a ser consultado:”
 leia CODIGOCONSUL
 POS  0
 enquanto CODIGOCONSUL FUNCIONARIOS[POS].CODIGO OU POS 1 faça
 enquanto POS (ULTIMO - 1) faça
 se QUANTIDADE[POS] > QUANTIDADE[POS+1] então
 AUX1  QUANTIDADE[POS]
 AUX2  CODIGOPRODUTO[POS]
 QUANTIDADE[POS]  QUANTIDADE[POS+1]
 CODIGOPRODUTO[POS]  CODIGOPRODUTO[POS+1]
 QUANTIDADE[POS+1]  AUX1
 CODIGOPRODUTO[POS+1]  AUX2
 fim-se
 POS  POS + 1
 fim-enquanto
 POS  1
 ULTIMO  ULTIMO - 1
 fim-enquanto
 escreva “Imprimindo os códigos e as quantidades em ordem crescente.”
 para POS de 0 até 99 passo 1 faça
 escreva CODIGOPRODUTO[POS]
135
Lógica de Programação II
 escreva QUANTIDADE[POS]
 fim-para
fim
2) Pseudocódigo
início
 ALUNOS : vetor[100] inteiro
 POS, PESQUISADO, CONT: inteiro
 para POS de 0 até 99 passo 1 faça
 escreva “Digite o código de matrícula de um aluno: “
 leia ALUNOS[POS]
 fim-para
 {leitura de 5 números de matrícula} 
 para CONT de 1 até 5 passo 1 faça
 escreva “Digite o número de matrícula 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 então
 escreva “Número não cadastrado !”
 senão 
escreva “Número localizado na posição “,POS,” do vetor.”
 fim-se
 fim-para
fim
136
Universidade do Sul de Santa Catarina
3) início
 VET: vetor[5] inteiro
 NUMEROLIDO, PRIMEIRA, ULTIMA, METADE: inteiro
 POS: inteiro
ACHOU : lógico {variável que armazena verdadeiro quando o valor numérico for 
encontrado no vetor. Caso contrário, armazena falso}
 {preenchendo um vetor com números em ordem crescente}
para POS de 0 até 4 passo 1 faça
 escreva “digite um número: “
 leia VET[ POS ]
 fim-para
 escreva “digite um número a ser pesquisado : “
 leia NUMEROLIDO
 {inicialização das variáveis}
 PRIMEIRA  0
 ULTIMA  4
 ACHOU  falso
 {processo de procura}
 enquanto PRIMEIRAfim-se
fim-enquanto
{verifica o valor lógico da variável ACHOU}
se ACHOU = verdadeiro então
escreva “Número “, NUMEROLIDO, “encontrado na posição “, METADE, 
“ do vetor”
senão
 escreva “Número não encontrado no vetor”
fim-se
fim
4) Algoritmo para cadastro de códigos e quantidades dos produtos, 
seguindo a ordem crescente das quantidades.
 Pseudocódigo:
início
 COD_PRODUTO : vetor[0..99] literal {código do produto}
 QTDE : vetor[0..99] inteiro {quantidade de mercadoria}
 POS, ULTIMO, AUX1: inteiro
 AUX2 : literal
 para POS de 0 até 99 faça
 leia COD_PRODUTO[POS]
 leia QTDE[POS]
 fim-para
 POS  0
 ULTIMO  99
 AUX  0
 enquanto ULTIMO 1 faça
 enquanto POS (ULTIMO - 1) faça
 {mecanismos de ordenação de valores}
 se QTDE[POS] > QTDE[POS+1] então
 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
138
Universidade do Sul de Santa Catarina
 fim-se
POS  POS + 1
 fim-enquanto
 POS  1
 ULTIMO  ULTIMO - 1
 fim-enquanto
 escreva “Imprimindo os códigos e as quantidades em ordem crescente.”
 para POS de 0 até 99 faça
 escreva COD_PRODUTO[POS]
 escreva QTDE[POS]
 fim-para
fim
Unidade 5
1) implementando a função SUBTRACAO, MULTiPLiCACAO e DiViSAO sem 
retorno de valores.
 Pseudocódigo
início
 {declaração de variáveis}
 OPCAO: inteiro
 N1, N2: real
 OPCAO  1
 enquanto OPCAO 4 faça
 escreva “Menu de Opções”
 escreva “1. Subtração”
 escreva “2. Multiplicação”
 escreva “3. Divisão”
 escreva “4. Sair”
 escreva “Selecione uma opção: ”
 leia OPCAO
 leia N1 
se OPCAO 4 faça
 se OPCAO = 1 então
 {operação de subtração}
 SUBTRACAO (N1, N2)
139
Lógica de Programação II
 leia N2
 fim-enquanto
fim
{implementação das funções}
função SUBTRACAO (NUM1, NUM2: real)
 escreva “resultado =”, NUM1 – NUM2 
fim-função
função MULTIPLICACAO (NUM1, NUM2: real)
 escreva “resultado =”, NUM1*NUM2
fim-função
função DIVISAO (NUM1, NUM2: real)
 se NUM2 0 então {garante que a divisão nunca será feita por 
 zero}
 escreva “resultado =” NUM1/NUM2
 senão
 escreva “não existe divisão por zero”
 fim-se
fim-função
 Senão
 se OPCAO = 2 então
 {operação de Multiplicação}
 MULTIPLICACAO (N1, N2)
 Senão
 se OPCAO = 3 então
 {operação de divisão}
 DIVISAO (N1, N2)
 senão
 escreva “Opção errada. Digite novamente”
 fim-se
 fim-se
 fim-se
fim-se
140
Universidade do Sul de Santa Catarina
2) implementando a função SUBTRACAO, MULTiPLiCACAO e DiViSAO 
com retorno de valores.
 Pseudocódigo
início
 {declaração de variáveis}
 OPCAO, NUM1, NUM2, RESULTADO: real 
 OPCAO : inteiro
 OPCAO  1
 enquanto OPCAO 4 faça
 escreva “Menu de Opções”
 escreva “1. Subtração”
 escreva “2. Multiplicação”
 escreva “3. Divisão”
 escreva “4. Sair”
 escreva “Selecione uma opção: ”
 leia OPCAO
 se OPCAO 4 faça
 Escreva “Digite dois números”
 Leia N1
 Leia N2
 se OPCAO = 1 então 
 {operação de subtração}
 RESULTADO  SUBTRACAO (N1, N2)
 senão se OPCAO = 2 então 
 {operação de Multiplicação}
 RESULTADO  MULTIPLICACAO (N1, N2) 
 senão se OPCAO = 3 então 
 {operação de divisão}
 RESULTADO  DIVISAO (N1, N2)
 senão
 escreva “Opção errada. Digite novamente” 
 fim se
 fim se
 fim se
 escreva “resultado da operação =”, RESULTADO
 fim se
 fim enquanto
fim
141
Lógica de Programação II
{implementação das funções}
função SUBTRACAO (NUM1, NUM2: real): real
 retorna NUM1 – NUM2 {retorna a diferença entre os parâmetros da 
função}
fim-função
função MULTIPLICACAO (NUM1, NUM2: real): real
 retorna NUM1*NUM2 {retorna a multiplicação entre os parâmetros 
 da função}
fim-função
função DIVISAO (NUM1, NUM2: real): real
 se NUM2 0 então {garante que a divisão nunca será feita por zero}
 retorna NUM1/NUM2
 senão
 escreva “não existe divisão por zero”
 retorna 0
 fim-se
fim-função
3) Algoritmo do programa que implementa uma função que aceita três 
valores como parâmetro e retorna o maior valor.
início
 {declaração de variáveis}
 RESULT, VAL1, VAL2, VAL3: inteiro
 
 {entrada de dados}
 escreva “Digite o primeiro número”
 leia VAL1
 escreva “Digite o segundo número”
 leia VAL2
 escreva “Digite o terceiro número”
 leia VAL3
 {chamando a função}
 RESULT  FUNCAO_MAIOR(VAL1, VAL2, VAL3)
 escreva “O maior valor é:”, RESULT
fim
142
Universidade do Sul de Santa Catarina
{implementação da função}
função FUNCAO_MAIOR (NUM1, NUM2, NUM3: inteiro): inteiro
 MAIOR: inteiro {variável local. Válido somente dentro da função}
se NUM1 > NUM2 E NUM1 > NUM3 então
 {NUM1 é o maior valor}
 MAIOR  NUM1
 senão se NUM2 > NUM1 E NUM2 > NUM3 então
 {NUM2 é o maior valor}
 MAIOR  NUM2
 senão
 {NUM3 é o maior valor}
 MAIOR  NUM3
 fim-se
 retorna MAIOR
fim-função
Elton João Gubert
Mário Gerson Miranda Magno Júnior
Patrícia Gerent Petry
Design instrucional
Flavia Lumi Matuzawa
Viviane Bastos
Palhoça
UnisulVirtual
2009
Lógica de Programação II
Caderno de atividades
3ª edição revista e atualizada 
 
Revisão e atualização de conteúdo
Clavison Martinelli Zapelini
Edição – Livro Didático
Professores Conteudistas
Elton João Gubert
Mário Gerson Miranda Magno Júnior
Patrícia Gerent Petry
Design Instrucional
Flávia Lumi Matuzawa
Viviane Bastos
Revisão e atualização de conteúdo
Clavison Martinelli Zapelini
Assistente Acadêmico
Michele Antunes Corrêa (3ª edição revista e atualizada)
Projeto Gráfico e Capa
Equipe UnisulVirtual
Diagramação
Rafael Pessi
Revisão
Heloísa Mano Dorneles
Ficha catalográfica elaborada pela Biblioteca Universitária da Unisul
Copyright © UnisulVirtual 2009
Nenhuma parte desta publicação pode ser reproduzida por qualquer meio sem a prévia autorização desta instituição. 
005.1
G95 Gubert, Elton João 
 Lógica de programação I : caderno de atividades / Elton João Gubert, Mário 
 Gerson Miranda Magno Júnior, Patrícia Gerent Petry ; revisão e atualização de 
 conteúdo Clavison Martinelli Zapelini ; design instrucional Flávia Lumi Matuzawa, 
 Viviane Bastos ; [assistente acadêmico Michele Antunes Corrêa]. – 3. ed. rev. e 
 atual. – Palhoça : UnisulVirtual, 2009.
 198 p. : il. ; 28 cm.
 Inclui bibliografia.
 1. Lógica – Processamento de dados. 2. Programação (Computadores). 
 3. Estrutura de dados (Computação). 4. Algoritmos. I. Magno Júnior, Mário Gerson 
 Miranda. II. Petry, Patrícia Gerent. III. Zapelini, Clavison Martinelli. IV. Matuzawa, 
 Flávia Lumi. V. Bastos, Viviane. VI Corrêa, Michele Antunes. VII. Título.
Sumário
Palavras do professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
UNIDADE 1 – Manipulação de vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
UNIDADE 2 – Manipulação de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
UNIDADE 3 – Manipulação de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
UNIDADE 4 – Tópicos avançados em algoritmoscomputacionais . . . . 183
UNIDADE 5 – Programação estruturada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Respostas e comentários das atividades de autoavaliação . . . . . . . . . . . . . 201
Sobre os professores conteudistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
146
147
Apresentação
Este caderno de atividades corresponde ao material 
complementar da disciplina de Lógica de Programação II.
O material foi elaborado visando a uma aprendizagem autônoma, 
abordando conteúdos especialmente selecionados e adotando uma 
linguagem que facilite seu estudo a distância. 
Por falar em distância, isso não significa que você estará sozinho. 
Não esqueça que sua caminhada nesta disciplina também 
será acompanhada constantemente pelo Sistema Tutorial da 
UnisulVirtual. Entre em contato sempre que sentir necessidade, 
seja por correio postal, fax, telefone, e-mail ou Espaço 
UnisulVirtual de Aprendizagem. Nossa equipe terá o maior 
prazer em atendê-lo, pois sua aprendizagem é nosso principal 
objetivo
Bom estudo e sucesso!
 
Equipe UnisulVirtual. 
Palavras dos professores
Prezado aluno,
Você aprendeu, em Lógica de Programação I, os 
conceitos iniciais de algoritmos, criação de variáveis, 
tipos de dados, expressões e estruturas seqüenciais de 
decisão e de repetição. 
Em Lógica de Programação II, estudou novas estruturas, 
que o auxiliarão na resolução de problemas, e novas 
maneiras de representar a informação, como vetores, 
matrizes, registros, funções.
Neste caderno de atividades, você vai aprimorar 
seu conhecimento com alguns exercícios resolvidos 
utilizando todos os conceitos abordados em Lógica de 
Programação I e II.
Mãos à obra!
1UNiDADE 1
Manipulação de vetores
Objetivos de aprendizagem
� Conhecer os algoritmos de maiores complexidades.
� Construir algoritmos com utilização de vetores.
152
Universidade do Sul de Santa Catarina
Para início de estudo
Na Unidade referente à Lógica de Programação II, você aprendeu 
a manipular vetores, que nada mais é do que uma variável que 
pode armazenar vários valores de mesmo tipo.
Neste caderno de atividades, vamos apresentar alguns exercícios 
resolvidos passo a passo e, ao fim da unidade, exercícios propostos 
para a sua resolução.
Bom trabalho!
Exemplos resolvidos
1) Leia um conjunto N de números armazenados em um vetor, 
que representa alturas de pessoas. Calcule e escreva:
a) média aritmética;
b) quantas pessoas possuem altura acima da média;
c) a maior altura;
d) quantas pessoas possuem a maior altura.
Algoritmo AlturaPessoas
Altura : vetor[9999] real
I, N, TotalAcimaMedia,
TotalMaiorAltura: inteiro
MediaAltura, MaiorAltura: real
Início
{Lê o total de alturas armazenadas no vetor 
Altura}
Leia (“Digite o total de pessoas”,N)
{Inicializar a variável Soma, que contém a soma 
de todas as alturas, para no final calcular a 
média}
Soma ← 0
153
Lógica de Programação II
Unidade 1
{Iniciamos com um valor bem BAIXO, para garantir 
que encontraremos uma altura MAIOR que essa no 
vetor}
MaiorAltura ← -1
{Iniciamos o laço}
Para I de 1 até N faça
 {leitura do vetor de alturas}
 Leia “Digite a altura”, ALTURA [I]
{Somamos a altura das pessoas, para depois 
calcularmos a média}
Soma ← Soma + Altura[I]
{Se a altura da pessoa atual (Altura[I]) for 
MAIOR que a maior altura até agora então, 
aquela passa a ser a maior altura}
Se Altura[I] > MaiorAltura Então
MaiorAltura ← Altura[I]
 Fim Se
Fim Para
{Calcula a média das alturas}
MediaAltura ← Soma / N
{Inicializando as variáveis que são contadores}
TotalAcimaMedia ← 0
TotalMaiorAltura ← 0
{Novamente iniciamos o laço, para verificar quem 
tem altura maior que a média e quem tem a maior 
altura}
Para I de 1 até N faça
 {Aqui iremos verificar o total de pessoas que 
têm a altura acima da média}
 Se Altura[I]>MediaAltura então
 TotalAcimaMedia ← TotalAcimaMedia + 1
Fim Se
 {Agora vamos verificar o total de pessoas que 
têm a maior altura}
 Se Altura[I]= MaiorAltura então
 TotalMaiorAltura ← TotalMaiorAltura + 1
Fim Se
Fim Para
154
Universidade do Sul de Santa Catarina
{Escrevendo os dados de saída}
Escreva(“Média das alturas: “ + MediaAltura)
Escreva(“Total de pessoas com altura acima da 
média: “ + TotalAcimaMedia)
Escreva(“A maior altura é: “ + MaiorAltura)
Escreva(“Total de pessoas com a maior altura é : 
“+TotalMaiorAltura)
Fim
2) Faça 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á também:
a) imprimir as idades dos homens e depois as idades das 
mulheres;
b) imprimir as médias de idade de cada sexo;
c) encontrar o homem mais velho e colocá-lo na posição 
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] inteiro
I, N, PosMaisJovem, IdadeMaisNova, PosMaisVelho, 
IdadeMaisVelho: inteiro
MediaIdadeHomens, MediaIdadeMulheres: real
Início
I ← 1
{Lê a idade da primeira pessoa já fora do laço, 
para que a condição do comando “enquanto-faça” 
possa ser verificada}
Leia (“Digite a idade”,Idade[I])
155
Lógica de Programação II
Unidade 1
{Enquanto o usuário digitar números maiores que 
-1, o laço continua girando e, conseqüentemente, 
lendo a Idade e o Sexo de outra pessoa.}
Enquanto Idade[I] > -1 faça
Leia(“Digite o sexo”,Sexo[I])
I ← I + 1
{Antes de o laço “retornar”, é preciso ler a 
idade de outra pessoa. Veja que a leitura da 
Idade da primeira pessoa foi realizada “fora” 
do laço}
Leia(“Digite um valor para a idade ou -1 para 
finalizar”,Idade[I])
Fim Enquanto
{Aqui descobrimos quantos dados foram realmente 
lidos (N), já que não sabíamos de antemão}
N ← I - 1
{Escreve a idade de todos os homens. Aproveita 
o laço 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 faça
Se Sexo[I] = 1 Então
{Escrevemos a idade de cada homem}
Escreva (Idade[I])
{Somamos a idade de cada homem para depois 
calcular a média}
Soma ← Soma + Idade[I]
{Se a idade do Homem atual (Idade[I]) for 
MAIOR que a idade do mais velho até agora 
então, aquele passa a ser o mais velho. 
A posição atual no vetor é “guardada” em 
PosMaisVelho}
Se Idade[I] > IdadeMaisVelho Então
IdadeMaisVelho ← Idade[I]
PosMaisVelho ← I
Fim Se
Fim Se
Fim Para
{Calcula a média de idade dos homens}
MediaIdadeHomens ← Soma / N
156
Universidade do Sul de Santa Catarina
{Trocando de posição o homem mais velho com a 
primeira posição em que aparece homem}
I ← 1
Enquanto |Se
Fim Para
{Calcula a média de idade das mulheres}
MediaIdadeMulheres ← Soma / N
{Trocando de posição a mulher mais nova com a 
primeira posição em que aparece mulher}
I ← 1
Enquanto |30 faça
 vaca5 = vaca5 + leite[linha,5]
 vaca8 = vaca8 + leite[linha,8]
 Fim Para
{Produção total do dia 10 com a do dia 20.}
{Nesse caso devem-se somar as produções 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 faça
 dia10e20 = dia10e20 + leite(10, col) + leite(20, 
col)
 Fim Para
{Producao total do mês.}
{A produção total de leite do mês é 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. Então, 
a variável LINHA assumirá valores de 1 a 30 e para 
cada valor assumido por LINHA, a variável COLUNA 
assumirá valores de 1 a 10}
 Para linha de 1 a 30 faça
 Para coluna de 1 a 10 faça
 dia01a30 = dia01a30 + leite(linha, coluna)
 Fim Para
 Fim Para
{Impressão dos resultados}
 Escreva(“Produção da vaca número 5 : “, vaca5)
 Escreva(“Produção da vaca número 8 : “, vaca8)
 Escreva(“Produção do dia 10 com a do dia 20: “, 
 dia10e20)
 Escreva(“Produção total do mês : “, dia01a30)
Fim
165
Lógica de Programação II
Unidade 2
2) Faça um algoritmo que:
a) Leia uma matriz A de ordem N X M.
b) Some todos os elementos da matriz e escreva o resultado 
na tela.
c) Some os elementos pares da matriz e escreva o resultado 
na tela.
d) Escreva uma mensagem, caso a matriz seja quadrada. 
OBS: Uma matriz é quadrada quando o número de 
linhas é igual ao número de colunas.
e) Expresse os elementos da diagonal principal.
f) Expresse a soma dos elementos da diagonal secundária.
g) Expresse a soma de cada linha da matriz mostrando o 
resultado na tela.
h) Expresse a soma da linha 3.
Algoritmo MatrizNumerica
A: Matriz[999,999] inteiro {ou ainda poderíamos 
declarar assim: A: Matriz[999x999] inteiro ou A: 
Matriz[999][999] inteiro ou, em vez de escrever Matriz, 
pode ser escrito Vetor, assim: A: Vetor[999,999] 
inteiro, ou ainda: A:Array[999,999] inteiro}
I, J, N, M, Soma, SomaPar, SomaDS, SomaLinha, 
SomaLinha3 : inteiro
Início
{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 faça
 Para J de 1 até M faça
Leia (A[I, J])
 Fim Para
Fim Para
166
Universidade do Sul de Santa Catarina
{Processo para somar os valores da matriz}
Soma ← 0
Para I de 1 até N faça
 Para J de 1 até M faça
 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 faça
 Para J de 1 até M faça
{Verifica se o valor da matriz é par. É 
par quando o resto da divisão do valor 
por 2 for igual a zero}
 Se (RESTO (A[I,J],2) = 0) então 
 SomaPar ← SomaPar + A[I,J]
 Fim se
 Fim Para
Fim Para
{Processo para verificar se uma matriz é quadrada}
Se N = M então
 Escreva (“Matriz é quadrada.”)
 
{Matriz quadrada tem diagonal principal e 
secundária. Agora vou mostrar na tela os 
valores da diagonal principal. É diagonal 
principal quando I for igual a J}
 Para I de 1 até N faça
 Escreva (“Diagonal Principal : “, A[I,I]
 Fim Para
{Agora some os elementos da diagonal 
secundária. É diagonal secundária quando I + J 
for igual a N+1, ou de N=total de linhas}
SomaDS ← SomaDS + 1
 Para I de 1 até N faça
 Para J de 1 até M faca
 Se (I+J = N+1) então
 SomaDS ← SomaDS + A[I,J]
 Fim se
 Fim Para
 Fim Para
Senão
 Escreva (“Matriz não é quadrada.”)
Fim se
167
Lógica de Programação II
Unidade 2
{Processo para somar cada linha da matriz}
Para I de 1 até N faça
 SomaLinha ← 0 {a cada nova linha inicializo a 
soma}
 Para J de 1 até M faça
 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 faça
{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 
secundária da matriz é: “,SomaDS)
Escreva (“A soma dos elementos da linha 3 da 
matriz é: “,SomaLinha3)
Fim
168
Universidade do Sul de Santa Catarina
3) Dada uma matriz de ordem N x N, faça um algoritmo que 
verifique se a matriz é simétrica (aij=aji).
Algoritmo MatrizSimetrica
A: Matriz [N,M] inteiro {também posso declarar, 
como N e M, quando não sei o tamanho. Mas 
cuidado com esse tipo de declaração, pois algumas 
linguagens não suportam}
I, J, N, M : inteiro
Simetrica : Lógica
Início
{Leitura da ordem da matriz}
Leia (N)
{Leitura dos valores da matriz}
Para I de 1 até N faça
 Para J de 1 até N faça
Leia (A[I, J])
 Fim Para
Fim Para
{Processo para descobrir se a matriz é simétrica 
ou não}
I ← 1
{A princípio consideramos a matriz como simétrica}
Simetrica ← Verdadeiro
Enquanto I A[J, I] então
{Se um dos valores for diferente, podemos, 
com certeza, afirmar que a matriz NÃO é 
simétrica}
Simetrica ← Falso
169
Lógica de Programação II
Unidade 2
{Se já sabemos que a matriz NÃO é simétrica, 
então não é preciso comparar os demais 
valores; por isso, foi atribuído o valor 
N, tanto para I como para J, para que os 
dois laços terminem}
J ← N
I ← N
Fim Se
J ← J + 1
Fim Enquanto
I ← I + 1
Fim Enquanto
{Neste momento a variável “Simétrica” tem o valor 
Verdadeiro, ou Falso. Com base nesse valor, se 
escreve o resultado}
Se Simetrica então
Escreva (“A matriz é simétrica”)
Senão
Escreva (“A matriz NÃO é simétrica”)
Fim Se
Fim
4) Dada uma matriz 10 x 10 de valores reais, faça um algoritmo 
que faça a leitura desses valores e, ao final da leitura de todos, 
imprima o relatório com os seguintes itens:
a) soma dos valores de cada coluna da matriz;
b) lista dos valores que são menores que a média dos 
valores;
c) soma dos elementos da diagonal secundária.
{O trabalho com matrizes é praticamente todo baseado 
em comandos de repetição, e, como o tamanho da matriz 
é conhecido, usa-se praticamente sempre o comando 
Para-faça.
No caso a seguir, será definida uma matriz de tamanho 
10x10.}
170
Universidade do Sul de Santa Catarina
Algoritmo Matriz
{Primeiramente serão definidas as variáveis necessárias. 
Nesse caso, as variáveis novas incluem um vetor, de 
nome SomaColuna, com 10 posições, que será usado para 
obter o somatório de cada coluna da matriz e uma 
variável Mat, que representa uma matriz 10x10.}
 I, J : inteiro
 SomaTotal, Media : real
SomaDiagSecund : real
Mat : matriz[10,10] real
SomaColuna : Vetor[10] real
Início
{Como você viu anteriormente, o processo de leitura dos 
dados em matrizes é baseado em comandos de repetição. 
Você verá, a seguir, que são necessários sempre dois 
laços de repetição: o primeiro é para navegação nas 
linhas, e o segundo, para navegação nas colunas}
{No exemplo de leitura a seguir, a matriz será preenchida 
linha a linha, na seguinte seqüência: 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 células, soma 
esta que será utilizada mais tarde para o cálculo da 
média}
SomaTotal ← 0
 Para I de 1 até 10 faça
 Para J de 1 até 10 faça
 Leia (Mat[I,J])
 SomaTotal ← SomaTotal + Mat[I,J]
 Fim Para
 Fim Para
{Para efetuar a soma das colunas, recorreu-se ao mesmo 
processo, porém foi invertida a ordem de navegação, 
variáveis I e J. Assim, a navegação será coluna a 
coluna. Sendo todas aslinhas da primeira oluna, 
depois todas as linhas da segunda coluna e assim por 
diante.}
 Para J de 1 até 10 faça
 SomaColuna[I] ← 0 {inicializo cada coluna 
com 0}
 Para I de I até 10 faça
 SomaColuna[I] ← SomaColuna[I] + 
Mat[I,J]
 Fim Para
 Fim Para
171
Lógica de Programação II
Unidade 2
{Para a navegação em uma diagonal, foi usado um 
artifício matemático; como os números são inversamente 
proporcionais, será preciso apenas um laço de 
repetição}
SomaDiagSecund ← 0
 Para I de 1 até 10 faça
 SomaDiagSecund ← SomaDiagSecund + 
 Mat[I,(11-I)]
 Fim Para
{A saída de dados deste algoritmo não é tão simples 
como nos outros. Para que se possam escrever os dados 
solicitados são necessários também alguns laços de 
repetição}
{Para escrever os valores das somas das colunas, foi 
construído um laço que percorre o vetor SomaColuna 
escrevendo o conteúdo de cada posição}
 Para I de I até 10 faça
 Escreva (“Soma da coluna”,I,“ é: ”, 
 SomaColuna[I])
 Fim Para
{Calculando a média}
 Media = SomaTotal / 100
{Após encontrar a média, é necessário percorrer 
novamente a matriz, comparando cada uma das posições 
com a média. Assim, é possível escrever somente 
aquelas que são menores que ela.}
Para I de 1 até 10 faça
 Para J de I até 10 faça
 Se Mat[I,J]e verifica se ela é maior 
que 8}
 Se (Soma / 5) > 8 então
 {Escreve nome e idade das alunas com 
 média superior a 8}
 Escreva(CAD _ ALUNOS[I].Nome)
 Escreva(CAD _ ALUNOS[I].Idade) 
 Fim Se
Fim Para
Fim
180
Universidade do Sul de Santa Catarina
Atividades propostas
1) Utilizando os conceitos de vetor e registro, estudados nas unidades 1 e 
3 respectivamente, faça um algoritmo para ler nome, salário, endereço 
e sexo de 200 funcionários e armazene estas informações na memória. 
Após a leitura, escreva na tela: 
a) quantas mulheres possuem salário maior que R$ 1.000,00;
b) qual o maior salário entre os funcionários homens;
c) a média salarial.
181
Lógica de Programação II
Unidade 3
2) Monte um algoritmo para cadastrar dados pessoais de 100 candidatos 
a uma vaga de engenheiro de um sistema de administração de 
currículos. Os dados pessoais são: nome, endereço, cidade, estado, 
telefone, grau de escolaridade (1-Graduação, 2-Pós-graduação, 3-
Mestrado, 4-Doutorado) e curso em que se formou. Depois da leitura, 
imprima uma relação dos candidatos que tenham grau de pós-
graduação ou superior e que residam em SC. Os campos do relatório 
devem ser: nome, cidade, telefone, grau de escolaridade e curso de 
formação.
182
Universidade do Sul de Santa Catarina
3) Faça um algoritmo que receba as informações sobre determinado 
acervo de filmes, título, gênero, autor, duração e sinopse. Além disso, 
imprima uma relação de filmes por gênero. Considere que a Pinacoteca 
tem 3.500 Filmes.
4UNiDADE 4
Tópicos avançados em 
algoritmos computacionais
Objetivos de aprendizagem
 � identificar os comandos e compreender a lógica em 
pseudocódigo, proposta para resolver o problema.
184
Universidade do Sul de Santa Catarina
Para início de estudo
Com esta unidade, você vai aprimorar seus estudos em tópicos 
avançados utilizando vetores, como a ordenação de literais, 
pesquisa simples e pesquisa binária, com explicações passo a 
passo da resolução destes métodos.
Exemplos resolvidos
Ordenação de literais
1. Faça um algoritmo para ordenar o nome de 50 pessoas.
Algoritmo OrdenarNomes
 {Declarando variáveis}
 NOME : Vetor[50] de literal
 AUX : literal
 I, J : inteiro
Início
 {Fazendo a leitura do vetor de nomes}
 Para I de 1 até 50 faça {ou ainda poderia: Para 
I de 0 até 49 faça}
 Escreva “Digite o nome na posição : ”, I
 Leia NOME[I]
 Fim Para
 {Fazendo a ordenação do vetor de nomes – Isso 
 será explicado após o algoritmo}
 Para I de 0 até 49 faça 
 Para J de (I+1) até 49 faça
 Se NOME[I] > NOME[J] então
 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 0 até 49 faça
 Escreva NOME[I]
 Fim Para
Fim
185
Lógica de Programação II
Unidade 4
Explicação do Método de Ordenação utilizado
Imagine o vetor chamado NOME e suas posições I, com 
tamanho 4:
NOME José Marcos Ana Maria
I 0 1 2 3
É importante lembrar que quando se menciona posição está-se 
referindo a I, e quando mencionado no conteúdo do vetor, na 
informação, refere-se a NOME[I].
Qual é a idéia do algoritmo apresentado anteriormente? Será 
utilizado o primeiro nome (José), comparando-o com todos 
os demais, ou seja, será fixada a posição I=0 e será comparado 
o nome José com Marcos, Ana e Maria (I=1, 2 e 3). Então 
será colocado o menor nome (Ana) na primeira posição e será 
comparada a posição do 2º nome com os demais, e assim por 
diante. Acompanhe o exemplo.
Para I de 0 até 3 faça 
{essa primeira estrutura de repetição serve para fixar 
o primeiro nome (a primeira vez que entra nesse para-
faça é José) a ser comparado com os demais quando 
I=0. Depois será com I=1, I=2 e I=3.}
 
 Para J de (I+1) até 3 faça
 
{essa segunda estrutura de repetição serve 
para percorrer os demais nomes a partir 
daquele que será fixo, ou seja, se estou na 
primeira posição I=0, o J será I+1, ou seja, 1 
(depois 2, depois 3, e assim por diante).}
 Se NOME[I] > NOME[J] então
 AUX  NOME[I]
 NOME[I]  NOME[J]
 NOME[J]  AUX
 Fim se
{Na estrutura de decisão, SE está sendo 
comparado NOME[0] > NOME[1] (José com 
Marcos), ou seja, o I=0 e J=1. Verifica-se 
se José é > que Marcos, ou seja, a letra 
J vem depois de M? Não. Então não há 
troca. 
O que ocorre? Volta para o PARA J DE 
(I+1) ATÉ 3 FAÇA. Agora o I vale 0 e J 
está valendo 2. 
186
Universidade do Sul de Santa Catarina
 Então, entro na estrutura de decisão SE e testo 
NOME[0] > NOME[2]. José é maior do que Ana? Sim. Então 
a troca entre a posição 0 e 2 será feita.} 
Meu vetor agora se apresenta assim:
NOME Ana Marcos José Maria
I 0 1 2 3
{Volta para o PARA J DE (I+1) ATÉ 3 FAÇA. 
Agora o J está valendo 3.
Entra na estrutura de decisão SE e 
testa NOME[0] > NOME[3]. Agora atenção. 
Vou comparar Ana com Maria. Ana é > 
que Maria? Não. Não é realizada nenhuma 
troca.
Volta para PARA J DE (I+1) ATÉ 3 FAÇA. Já 
chegou a 3. Então sai do PARA J e volta 
para o PARA I, agora o I vale 1.
Entra novamente no PARA J DE (I+1) ATE 3 
FAÇA.}
I=1
J=I+1 = 2
{Então será fixa; fixar a posição 1 e 
comparar com o restante do vetor a 
partir da posição 2.
Se NOME[1] > NOME[2] então. É verdade? 
Marcos é > José? Sim. Então realiza a 
troca.} 
O vetor fica assim agora:
NOME Ana José Marcos Maria
I 0 1 2 3
{Volta para o PARA J DE (I+1) ATÉ 3 FAÇA. 
Entra no SE e compara NOME[1]>NOME[3]. 
Não. Não é realizada troca.
PARA J já chegou a 3. Então pára! E vai 
para o PARA I novamente. O I já chegou 
a 3? Não. O I estava valendo 1 e agora 
passa a valer 2.}
187
Lógica de Programação II
Unidade 4
 Entra no PARA J novamente:
I=2
J=I+1=3
{Vou comparar NOME[2]>NOME[3], Marcos é > 
Maria? Não. Então não troca.
O PARA J já está em 3. Volta para o PARA 
I.}
 
I=3
J=I+1=4.
{Não entra no PARA J porque já 
ultrapassou o limite 3. Volta para o PARA 
I. Agora o I já chegou a 3.}
Observe que o vetor exemplo ficou 
ordenado.
NOME Ana José Marcos Maria
I 0 1 2 3
Fim Para
Fim Para
188
Universidade do Sul de Santa Catarina
Pesquisa
Seqüencial ou Linear
1) Dados desordenados – Pesquisa Linear Simples
{Este algoritmo representa a forma mais básica 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 
não?}
 a,n,i: inteiro 
 x: vetor[n] de inteiro 
{A variável a representa o número procurado}
{A variável n representa o número de valores 
armazenados}
Início
 Leia (a, n)
{Primeiramente, é preciso preencher o vetor com os 
valores; para isso, usamos um laço que pede para o 
usuário digitar cada um dos valores}
 Para i de 1 até n faça
 Leia ( x[ i ] )
 Fim Para
{Abaixo posicionamos nossa variável auxiliar i na 
primeira posição do vetor e então desenvolvemos um 
laço à procura do primeiro valor que corresponder ao 
valor procurado}
 i ← 1
 Enquanto (ia) faça
 i ← i + 1 
 Fim Enquanto
{A seguir, verificamos se o nosso ponteiro está 
direcionado para uma posição no vetor; se ele 
estiver apontando para o final, quer dizer que 
não encontramos nenhum valor correspondente; se 
estiver no meio, esta corresponde à posição do vetor 
procurado.}
 Se i > n então
 Escreva (“Não encontrou”)
 Senão
 Escreva (“Encontrou na posição : “, i)
 Fim Se
Fim.
189
Lógica de Programação II
Unidade 4
2) Dados Ordenados - Pesquisa Binária (para vetores grandes)
{O exemplo abaixo se refere à Pesquisa Binária para 
números inteiros, mas o método pode ser aplicado para 
tipo de valor, como real e literal.}
Algoritmo PesquisaBinaria
numeroPesquisa: inteiro {número a ser pesquisado}
N: inteiro {quantidade de valores no vetor}
x: vetor[N] de inteiro {vetor de tamanho “n” de 
valores inteiros}
início, meio, final, i: inteiro
Início
{A idéia central deste método de pesquisa 
é “dividir para conquistar”, isto é, sempre 
perguntar “ao vetor” onde está o valor que estamos 
procurando: se na metade daesquerda do vetor, ou 
na metade da direita. De posse dessa informação, 
nós “redefinimos” o início e o fim 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 redefinindo início e fim 
do vetor sucessivamente), até que o valor seja 
encontrado, ou não seja mais possível dividir o 
vetor; neste último caso, significa que o valor não 
estava no vetor.
Este método é especialmente utilizado em vetores 
GRANDES. Como vimos acima, a vantagem é que a 
cada iteração o tamanho do vetor passa a ter 
a metade do anterior, e assim sucessivamente, 
diminuindo, desse modo, o tempo de processamento.}
{Leitura do número a ser pesquisado e do tamanho 
do vetor}
 Leia (numeroPesquisa , N)
{Leitura dos valores do vetor}
 Para i de 1 até N faça
 Leia ( x [ i ] )
 Fim Para
{O início e o final neste ponto representam o 
tamanho original do vetor}
Início ← 1
 final ← N
 Enquanto (início x[meio] ) então
{O número está na metade direita, 
“redefino” o início}
 Início ← final + 1
 Senão
{Nesta opção, o número foi encontrado, 
então atribuímos à variável início um 
valor tal, para que o laço TERMINE de 
“girar”}
 Início ← final + 1 {artifício para 
 interromper o laço}
 Fim Se
 Fim Se
 Fim enquanto
{Se saímos do laço e x[meio] é diferente do 
numeroPesquisa, então NÃO encontramos, senão... 
(x[meio] é igual a numeroPesquisa, então 
ENCONTRAMOS}
 Se (x[meio] numeroPesquisa) então
 Escreva (“Não Encontrou”)
 Senão
 Escreva (“Encontrou na posição : “, meio)
 Fim Se
Fim
191
Lógica de Programação II
Unidade 4
Atividades propostas
1) Faça um algoritmo para ler um vetor X com N elemento. Leia um valor 
A qualquer. Verifique se este valor pertence ao vetor. Se pertencer, 
mostre uma mensagem na tela. E informe quantas vezes ele aparece e 
em quais posições. Caso não exista, escreva uma mensagem.
192
Universidade do Sul de Santa Catarina
2) Faça um algoritmo para ler um vetor com 500 valores inteiros e verificar 
se um determinado valor “N” está ou não dentro dele. Escreva uma 
mensagem dizendo se encontrou ou não o valor. 
5UNiDADE 5
Programação estruturada
Objetivos de aprendizagem
 � Entender os conceitos de programação estruturada.
 � Aplicar modularização aos algoritmos.
194
Universidade do Sul de Santa Catarina
Para início de estudo
A realização de uma determinada tarefa muitas vezes é 
decomposta em seqüências de passos. Lembre-se da tarefa de 
trocar uma lâmpada: existe uma série de passos que devem ser 
seguidos. 
Conforme uma tarefa cresce e se torna mais complexa, surge 
uma série de situações a serem resolvidas para que esse problema 
possa ser solucionado. Podemos dizer que passamos a ter dentro 
deste problema uma série de “probleminhas”. Muitas vezes, 
essa grande quantidade de probleminhas afeta a legibilidade 
(clareza), fazendo com que uma consulta ou manutenção futura 
dessa lógica seja uma tarefa difícil de se realizar. Por meio da 
modularização é possível evitar isso, como também podemos 
reutilizar esse probleminha descrito em uma outra tarefa.
Portanto, modularizar é quebrar um problema em pequenas 
partes, sendo que cada uma dessas partes será responsável pela 
realização de uma etapa do problema.
Exemplos resolvidos
1) Dada uma frase, faça uma FUNÇÃO que verifique se existe 
alguma palavra com mais de 7 caracteres. Considere que cada 
palavra é separada da outra por, no mínimo, um espaço em branco.
Função ExistePalavraMaiorQueSete(Frase: literal): 
lógico
K, TamPalavra: inteiro
{Observe que “Frase” é o parâmetro da função e 
ExistePalavraMaiorQueSete é o próprio nome da 
função que retorna Verdadeiro ou Falso}
Início
{Partimos do princípio de que NÃO existe Palavra 
com tamanho maior que 7 (sete)}
ExistePalavraMaiorQueSete ← Falso 
195
Lógica de Programação II
Unidade 5
{Artifício identificar o final da frase, neste caso 
a frase está terminando com os caracteres “ $” 
(espaço e cifrão) }
Frase ← Frase + “ $”
K ← 0
{Vale lembrar que um literal pode ser manipulado 
como um VETOR de caracteres, iniciando na posição 
0(zero)}
TamPalavra ← 0
Enquanto (NÃO ExistePalavraMaiorQueSete) e 
(Frase[K] “$”) faça
{Se o caractere da posição K for diferente de 
um espaço em branco, estamos assumindo que ele 
está fazendo parte de uma palavra, por isso 
incrementamos a variável TamPalavra que guarda 
esta informação}
Se Frase[K] “ “ Então
TamPalavra ← TamPalavra + 1
Senão
{Neste ponto a palavra terminou e, então, 
precisamos testar e seu tamanho}
Se TamPalavra > 7 Então
{Se a palavra for maior que sete, 
já temos nosso resultado, por isso 
atribuímos “Verdadeiro” à variável para 
que o laço termine}
ExistePalavraMaiorQueSete ← Verdadeiro
Senão
{Neste ponto precisamos “zerar” a 
variável que guarda o tamanho da 
palavra, para começar a contar o 
tamanho de outra, visto que essa, neste 
ponto, não tem tamanho maior que 7(set(}
TamPalavra ← 0
Fim Se
Fim Se
{Incrementamos a variável K para acessar o 
próximo caractere da frase}
K ← K + 1
Fim Enquanto
Fim
196
Universidade do Sul de Santa Catarina
2) Faça um programa para ler o nome e salário bruto de N 
funcionários. Calcule e imprima o valor do desconto do INSS, 
o valor de desconto do IRRF (se houver) e o valor do salário 
líquido do funcionário. Escreva uma função para retornar o valor 
de desconto do INSS e outra função para retornar o valor de 
desconto do IRRF.
Tabela de Desconto do INSS
SALÁRIO 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 contribuição)
Tabela de Desconto do IRFF
SALÁRIO 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 funções}
Algoritmo salário
 NumDeFunc: inteiro 
 SalBruto, DescINSS, DescIRRF, SalLiq: real
Início
Leia (SalarioBruto)
Leia (NumDeFunc)
DescINSS  CalculaINSS(SalarioBruto)
DescIRRF  CalculaIRRF (SalarioBruto)
SalLiq = SalarioBruto – DescINSS – DescIRRF
Escreva (“O salário Liquido é:”, SalLiq)
Fim
197
Lógica de Programação II
Unidade 5
{Esta é a função para calcular o valor do desconto de 
IRRF}
 
Função CalculaIRRF (SalarioBruto:real): real
Início
Se SalarioBrutocódigo “ABC”, será concedido um desconto 
de 4,5% (quatro e meio por cento); 
 � caso o produto tenha o código “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 não se enquadre em nenhum desses códigos, ele não 
receberá desconto;
Exemplo supermercado:
Um cliente foi a um supermercado e comprou N produtos, sendo 
informado que, dependendo do código do produto, ele receberia 
um desconto. Faça um algoritmo pedindo que o usuário digite as 
informações de N produtos: seu valor e o seu código. Após a digitação, 
mostre na tela, o valor total que foi pago pelo cliente, considerando os 
possíveis descontos (utilize a função CALCDESCONTO neste algoritmo).
 
199
Lógica de Programação II
Unidade 5
2) Faça uma função chamada EhPrimo que receba um valor e retorne 
1, caso o número seja primo, ou 0, em caso contrário. Um número N 
é primo quando não é divisível por nenhum valor (exceto 1) até N/2. 
Quando se encontrar um valor pelo qual N é divisível, a função pode 
parar a busca e considerar o número não primo.
3) Faça um programa que calcule a área e o perímetro do retângulo. 
Modularize esse programa, ou seja, divida-o em funções 
adequadamente. 
Respostas e comentários das 
atividades de autoavaliação
Unidade 1
1) Analise o algoritmo abaixo e mostre o desenvolvimento do 
mesmo mediante teste de mesa.
 Algoritmo Teste
Var
 I:inteiro
V: Vetor[5] inteiro
Início
 Para I de 1 até 5 faça
 V[I] ← I+1
 Fim Para 
 V[3] ← V[1]+V[5]
V[5] ← V[V[2]]
Para I de 1 até 5 faça
 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
202
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 número do seu cartão e um vetor de Respostas 
de 13 posições. Verifique para cada apostador o número de acertos, 
comparando o vetor de Gabarito com o vetor de Respostas. Escreva o 
número do apostador e o número de acertos. Se o apostador tiver 13 
acertos, mostre a mensagem “Ganhador”.
 Resposta:
 Algoritmo loteriaesportiva
Var
 Gabarito, Respostas: Vetor[13] inteiro
 NROCARTAO, CONTACERTOS, I : inteiro
Início
 Escrever (“Informe o gabarito do jogo”)
 Para I de 1 até 13 faça
 Escreva(“1= COLUNA1, 2= COLUNA2, 3= COLUNA DO 
MEIO”)
 Leia (Gabarito[I])
 Fim Para
 Escrever (“Informe o número do cartão:”)
 Leia (NROCARTAO)
 CONTACERTOS ← 0
 Escrever (“Informe as 13 posições do jogo”)
 Para I de 1 até 13 faça
 Escreva(“1= COLUNA1, 2= COLUNA2, 3= COLUNA DO 
MEIO”)
 Leia (RESPOSTAS[I])
 Se (RESPOSTAS[I] = GABARITO[I]) então
 CONTACERTOS ← CONTACERTOS + 1
 Fim Se
 Fim Para
 Escrever (“Número do cartão = “, NROCARTAO)
 Escrever (“Número de acertos = “, CONTACERTOS)
 Se (CONTACERTOS=13) então
 Escreva (“VENCEDOR”)
 Fim Se
Fim
3) Escreva um algoritmo que leia um vetor de 20 posições e mostre-o. Em 
seguida, troque o primeiro elemento com o último, o segundo com o 
penúltimo, o terceiro com o antepenúltimo, e assim sucessivamente. 
Mostre o novo vetor depois da troca.
 
203
Lógica de Programação II
Resposta :
 Algoritmo TROCA_TROCA
Var
 V : VETOR[20] inteiro
 AUX, I, J : inteiro
Início
 Escreva (“INFORME 20 VALORES”)
 Para I de 1 até 20 faça
 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 0) então
 B[J] ← A[I]
 J ← J + 1
 Fim se
 Fim Para
 I ← 1
 Enquanto (I MAIOR então
 MAIOR  M[I,J]
 Fim se
 Fim Para
 Para J de 1 até 13 faça
 M[I,J]  M[I,J] / MAIOR
 Fim Para
 Fim Para
 Para I de 1 até 12 faça
 Para J de 1 até 13 faça
 Escreva (‘M[‘ ,I, ‘,’ J ,’]=’)
 Escreva (M[I,J])
 Fim Para
 Fim Para
Fim
206
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 final.
 Resposta:
 Algoritmo Matriz2
Variáveis
 M : MATRIZ[6,6] real
 V : VETOR [36] real
 A : inteiro
 K, I, J: inteiro
Início
 Escrever (“Informe um valor inteiro”)
 Leia(A)
 Para I de 1 até 6 faça
 Para J de 1 até 6 faça
 Leia (M[I,J])
 Fim para
 Fim para
 K  1
 Para I de 1 até 6 faça
 Para J de 1 até 6 faça
 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 secundária;
d) a linha 5 pela coluna 10. 
Escreva a matriz assim modificada (diagonal principal e diagonal 
secundária).
Principal Secundária
X X
X X
X X
X X
 Resposta:
207
Lógica de Programação II
 Algoritmo Matriz3
Var
 M : MATRIZ[10,10] inteiro
 AUX, C, K, I, J: inteiro
Início
 Para I de 1 até 10 faça
 Para J de 1 até 10 faça
 Leia (M[I,J])
 Fim Para
 Fim para
 {Troca a linha 2 pela linha 8}
 Para J de 1 até 10 faça
 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 faça
 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 faça
 AUX  M[5,K]
 M[5,K]  M[K,10]
 M[K,10]  AUX
 Fim Para
 {Troca a diagonal principal pela diagonal 
secundária}
 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 1000) então
 TOTMULTOTMUL + 1
 Fim se
 Fim Para
209
Lógica de Programação II
{Letra B}
 MAIORSAL0
 Para I de 1 até 200 faça
 Se (FUNC[I].SEXO=”M”)E(FUNC[I].
SALARIO>MAIORSAL) então
 MAIORSALFUNC[I].SALARIO
 Fim se
 Fim Para
 {Letra C}
 MEDIASAL0
 Para I de 1 até 200 faça
 MEDIASALMEDIASAL+ FUNC[I].SALARIO
 Fim Para
 MEDIASALMEDIASAL/200
 {Saída dos dados}
 Escreva (“Total de mulheres com mais de R$ 
 1.000,00 : “, TOTALMUL)
 Escreva “Maior salário dos homens : “, MAIORSAL
 Escreva “Média Salarial : “, MEDIASAL
Fim
2) Monte um algoritmo para cadastrar dados pessoais de 100 candidatos a 
uma vaga de engenheiro de um sistema de administração de currículos. 
Os dados pessoais são: nome, endereço, cidade, estado, telefone, 
grau de escolaridade (1-Graduação, 2-Pós-graduação, 3-Mestrado, 4-
Doutorado) e curso em que se formou. Depois da leitura, imprima uma 
relação dos candidatos que tenham grau de pós-graduação ou superior 
e que residam em SC. Os campos do relatório devem ser: nome, cidade, 
telefone, grau de escolaridade e curso de formação.
 Resposta:
 Algoritmo PesquisaCandidatos
Var
{Definição do registro}
tipo CADASTRO = registro
NOME: literal {Nome do Candidato}
ENDERECO: literal {Endereço}
CIDADE: literal {Cidade}
UF: literal {Unidade da Federação}
FONE: literal {Telefone}
GRAU : inteiro {Grau de Escolaridade}
CURSO : literal {Nome do Curso}
Fim-registro
210
Universidade do Sul de Santa Catarina
{Declaração das variáveis}
CANDIDATOS : vetor[100] CADASTRO
K : inteiro {Contador}
Início
{Leitura dos dados cadastrais}
Para K de 1 até 100 passo 1 faça 
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 faça 
Se (CANDIDATOS[K].UF=“SC”)E(CANDIDATOS[K].
GRAU > 1) Então
Escreva (CANDIDATOS[K].NOME)
Escreva (CANDIDATOS[K].ENDEREÇO)
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
211
Lógica de Programação II
3) Faça um algoritmo que receba as informações sobre determinado 
acervo de filmes, título, gênero, autor, duração e sinopse. Além disso, 
imprima uma relação de filmes por gênero. Considere que a Pinacoteca 
tem 3.500 Filmes.
 Resposta:
 Algoritmo Acervo 
tipo Filme = registro
Título: literal
Gênero: literal
Autor: Literal
Duração: real
Sinopse: literal
fim-registro
Acervo : Vetor [3500] Filme
Generodesejado: literal
 contador : inteiro
Início
Para contador de 1 até 3500 faça
 Leia Acervo[contador].Título 
 Leia Acervo[contador].Genero 
 Leia Acervo[contador].Autor 
 Leia Acervo[contador].Duracao 
 Leia Acervo[contador].Sinopse 
Fim Para
 
Escreva (“Deseja pesquisar algum gênero?”)
Leia (Generodesejado)
Enquanto Genero = “sim” faça
Para contador de 1 até 3500 faça
 Se Acervo[contador].Genero = 
Generodesejado 
 Escreva Acervo[contador].
Título
 Escreva Acervo[contador].
Genero 
 Escreva Acervo[contador].
Autor 
 Escreva Acervo[contador].
Duracao 
 Escreva Acervo[contador].
Sinopse 
 Fim Se
 Fim Para
Escreva (“Deseja mais algum gênero?”) 
Leia (Generodesejado )
 Fim Enquanto
Fim.
212
Universidade do Sul de Santa Catarina
Unidade 4
1) Faça um algoritmo para ler um vetor X com N elemento. Leia um valor 
A qualquer. Verifique se este valor pertence ao vetor. Se pertencer, 
mostre uma mensagem na tela. E informe quantas vezes ele aparece e 
em quais posições. Caso não exista, escreva uma mensagem.
 Resposta: 
 Algoritmo EncontraValor 
Var
X, Posicoes: vetor[9999] inteiro
K, N, cont: inteiro
Inicio
{Leitura dos valores do vetor}
Leia (“Digite o total de valores do vetor: ”,N)
Para I de 1 até N faça
Leia(X[I])
Fim Para
{Leitura do valor a ser pesquisado}
Leia (K)
{Processamento – Encontrar o valor}
{Considerarmos inicialmente que NÃO 
encontraremos o valor}
cont ← 0
Para I de 1 até N faça
 Se (X[I] = K) então {pesquisando o valor no 
vetor}
 Posicoes[cont] ← I {guardando a 
posição onde o valor se encontra}
 cont ← cont + 1
 Fim Se
Fim Para
Se cont = 0 então
 Escreva (“Valor não encontrado.”)
Senão
{Escrever quantas vezes o valor aparece no 
vetor}
Escreva (“Valor encontrado. Ele aparece 
“,cont,” vezes no vetor X”)
{Escrever as posições em que o valor 
aparece no vetor}
Para I de 1 até cont faça
 Escreva(Posicoes[I])
Fim Para
Fim Se
Fim.
213
Lógica de Programação II
2) Faça um algoritmo para ler um vetor com 500 valores inteiros e verificar 
se um determinado valor “N” está ou não dentro dele. Escreva uma 
mensagem dizendo se encontrou ou não o valor. 
 Resposta: 
 Algoritmo EncontraValor
Algoritmo EncontraValor
Var
Números: vetor[500] inteiro
K, N: inteiro
Encontrou: lógico
Início
{Leitura dos valores do vetor}
Para K de 1 até 500 faça
Leia(Numeros[K])
Fim Para
{Leitura do valor a ser pesquisado}
Leia (N)
{Processamento – Encontrar o valor}
{Considerarmos inicialmente que NÃO 
encontraremos o valor}
Encontrou ← Falso
K ← 1
Enquanto (Não Encontrou) e (Kjá visto em Lógica de Programação I.
início
conta:inteiro
nota, media, soma: real
soma  0 {inicializa variável soma com o valor 0}
para conta de 1 até 6 passo 1 faça {laço de repetição}
 escreva “Entre com a nota: “
 leia nota {leitura da nota}
 soma  soma + nota {soma de todas as notas entradas}
fim-para
media  soma/6 {calcula a média final}
escreva “A média final é “, media {mostra o resultado na tela}
fim
Mas agora consta a seguinte complexidade: necessitamos 
imprimir também todas as notas do aluno, além da média final. 
Uma solução extremamente pobre seria criar seis variáveis para 
armazenar as seis notas digitadas e imprimi-las. Mas, se tiver 
mais notas (80, por exemplo), seu algoritmo já não resolveria 
mais o problema. Para resolver essa situação, utilize o conceito de 
vetor.
Um vetor nada mais é do que uma variável que pode 
armazenar vários valores do mesmo tipo. 
Bem, mas o que significa isso? Inicialmente, acompanhe o 
conceito de variáveis e sua definição. 
19
Lógica de Programação II
Unidade 1
Quando definimos uma variável, alocamos um espaço na 
memória do computador para armazenar uma e somente uma 
constante por vez, seja ela literal, numérica(real ou inteiro) ou 
lógica. Quando atribuímos um valor à variável sobrescrevemos 
seu conteúdo. Por exemplo, ao criarmos uma variável real 
chamada nota, criamos um espaço na memória para armazenar 
apenas um valor real por vez, conforme a seguir:
nota: real
.......
nota  10 {variável armazena valor real 10}
escreva “O valor da variável nota é: “, nota {aqui, o valor impresso 
 será 10}
nota  8 {variável armazena valor real 8}
escreva “O valor da variável nota é: “, nota {aqui, o valor impresso 
 será 8, ou seja, sobrescrevemos o valor 10}
......
Isso parece bem lógico, pois estamos escrevendo na mesma 
posição de memória do computador. 
Lembre-se que, sempre que criarmos uma variável, estaremos 
criando um espaço na memória do computador para armazenar 
dados. É um endereço na qual o computador se referencia para 
manipular os dados em questão.
Como queremos armazenar vários valores numéricos, precisamos 
criar várias posições de memória sob o nome de uma mesma 
variável. O que devemos especificar é quantos valores queremos 
armazenar, ou seja, quantas posições de memória queremos 
alocar para armazenar esses números. Vejamos o exemplo para 
armazenar as notas de um aluno conforme o algoritmo anterior. 
Queremos armazenar seis valores diferentes em seis posições de 
memória diferentes:
8.0 10.0 9.0 10.0 8.5 10.0
20
Universidade do Sul de Santa Catarina
Devemos criar 6 posições de memórias para armazenar esses 
valores. Como solução, podemos criar 6 variáveis ou criar um 
vetor com 6 posições de memória. 
Esse esquema representa um vetor do tipo real de 6 posições, 
ou seja, 6 endereços de memória consecutivos alocados no 
computador que podem armazenar 6 valores reais diferentes. 
Cada quadradinho representa uma posição de memória, onde 
podem ser armazenados os valores reais.
O número de posições que queremos criar é especificado na 
declaração. 
Em resumo: um vetor é prático quando precisamos manipular 
um conjunto de dados do mesmo tipo sem que seja necessário 
declarar muitas variáveis. Por exemplo: O registro de 26 livros e 
seus respectivos preços; o registro de notas de 13 avaliações de 
um aluno etc.
Mas como criar um vetor? É muito simples. Especificamos o 
nome do vetor e o número de posições da memória que queremos 
alocar. Cada posição de memória pode armazenar um valor 
diferente dos demais. 
Sintaxe do vetor : vetor [tamanho do vetor] 
 
Quando um vetor é declarado, ele se apresenta assim na 
memória:
Valor 1 Valor 2 Valor n
21
Lógica de Programação II
Unidade 1
notas: vetor[6] real {vetor real de 6 posições. Pode armazenar até 6 
valores reais diferentes}
 
estados: vetor[27] literal {vetor de caracteres de 27 posições. Pode 
armazenar até 27 caracteres diferentes}
Importante 
Assim como na criação das variáveis, para a 
criação de vetores não precisamos especificar os 
endereços de memória do computador. isso é feito 
automaticamente, sem que sequer saibamos onde 
os valores estão armazenados na memória. A única 
coisa que sabemos é que é alocado um espaço para 
armazenar esses valores e que são armazenados em 
endereços de memória seqüenciais. Para acessar 
esses endereços, ou os valores armazenados nesses 
endereços, é que é um pouco diferente das variáveis. 
Veremos isso na seção 2.
Bem, até agora não resolvemos o nosso problema de mostrar 
todas as notas do aluno mais a média final, conforme solicitado. 
Sabemos que precisaremos criar um vetor conforme explicado, 
porém, ainda não sabemos manipular ou realizar operações com 
eles. A próxima seção tratará sobre isso.
Importante
Alguns autores preferem utilizar uma sintaxe diferente 
para a criação de vetores, conforme a seguir:
: vetor[.. ] 
22
Universidade do Sul de Santa Catarina
notas: vetor [1..50]: real {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]: real {criamos um vetor que inicia com índice 0 e 
vai até 49}.
Qual a melhor maneira? Você pode escolher. Porém, em 
linguagens de programação de alto nível como C/C++, JAVA 
etc., os vetores começam sempre com índice 0. Desde que você 
faça a conversão correta entre pseudocódigo e uma linguagem de 
programação de alto nível, não há problemas de qual a maneira 
que você vai criar seus vetores. O importante é que seja claro e 
sem quaisquer ambigüidades.
SEÇÃO 2 - Operação de vetores
Até agora nossa preocupação foi em saber como criar um vetor 
e saber quando ele é necessário. Sempre que trabalharmos com 
grandes quantidades de dados, estaremos criando um ou mais 
vetores. A sintaxe da criação é bastante simples conforme seção 
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 operações básicas de adição, subtração 
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, são reservados espaços na memória para 
armazenar as constantes literal, numérica (real ou inteira) ou 
lógica. Porém, como acessar esses espaços? É muito simples, 
basta indicar a posição que você quer acessar. 
23
Lógica de Programação II
Unidade 1
 0 1 2 3 4 5 (índices)
 0 1 2 3 4 5
Veja um exemplo de um vetor de notas:
 notas: vetor[6] real
Quando o vetor notas é declarado, ele se apresenta assim na 
memória: 
 
 
Cada quadrado, representando uma posição de memória, é uma 
posição do vetor declarado. Chamamos essa posição de índice do 
vetor. O primeiro quadrado (posição inicial), dizemos que tem índice 
0 e o acesso a essa posição se dá através do nome do vetor seguido 
do abre colchete ‘[‘, do valor 0, seguido do fecha colchete ‘]’. Para as 
posições seguintes, temos os índices 1, 2, 3, .... .
Para atribuirmos um valor à posição inicial do vetor notas, 
podemos então fazer: notas[0]  8.0
Para atribuirmos um valor à segunda posição do vetor notas, 
podemos fazer: 
notas[1]  10.0
Para atribuirmos um valor à terceira posição do vetor notas, 
podemos fazer: 
notas[2]  9.0. E assim sucessivamente, até preencher todo o 
vetor de notas. 
 
Nosso vetor ficaria assim preenchido: 
8.0 10.0 9.0
 
Importante 
Perceba que a primeira posição do vetor tem índice 
0, a segunda posição tem índice 1, a terceira posição 
tem índice 2, e assimE (VALOR 0) E (Ksucessivamente. isso significa 
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] real 
tem índices de vão de 0 (posição inicial) até 150-1, ou 
seja, índice 149. Não existe a posição 150. 150 é o 
tamanho do vetor que vai de 0 até 149.
24
Universidade do Sul de Santa Catarina
Todo o processo de manipulação agora se torna bastante 
simples, bastando especificar a posição do vetor onde estaremos 
armazenando os valores. 
Voltando ao nosso exemplo, onde queremos imprimir as notas 
do aluno, além da sua média, podemos armazenar os valores 
(notas digitadas) em um vetor de notas. Cada nota digitada será 
armazenada em uma posição específica. Perceba que temos 6 
notas como entrada, o que sugere um vetor de tamanho 6, com 
índices variando de 0 até 5.
início
conta: inteiro 
media, soma: real
notas: vetor[6] real {vetor para armazenar as notas digitadas}
soma  0 {inicializa variável soma com o valor 0}
para conta de 0 até 5 passo 1 faça {laço de repetição}
 escreva “Entre com a nota: “
 leia notas[ conta ] {leitura das notas. Perceba que o que aparece 
entre colchetes é a variável conta. 
Dentro do laço de repetição, a variável conta vai sendo incrementada de 1, 
sendo seu valor inicial de 0 e o final de 5, conforme o comando para. 
Para o primeiro laço de repetição, a variável conta tem valor 0. Sendo 
assim, o comando leia notas[ conta ] está lendo notas na posição 0, ou seja, 
leia notas[ 0 ]. Para o segundo laço de repetição, a variável conta tem valor 
1. Sendo assim, o comando leia notas[ conta ] está lendo notas na posição 
1, ou seja, leia notas[ 1 ], e assim sucessivamente até atingir o valor 5, 
última posição do vetor. }
 soma  soma + notas[conta] {soma das notas digitadas}
 fim-para
{para imprimir as notas, basta ler o vetor notas da posição 0 até a posição 
5. Façamos com o laço de repetição novamente}
para conta de 0 até 5 passo 1 faça {laço de repetição}
 escreva “Nota: “, notas[conta]
fim-para
media  soma/6 {calcula a média final}
escreva “A média final é “, media {mostra o resultado na tela}
fim
Dica: para trabalhar com vetores, sempre precisamos 
especificar o seu tamanho inicial. Sendo assim, a 
forma mais usual e fácil para escrita/leitura de valores 
para/de vetores pode ser feita através do comando 
para/fim-para. Você consegue saber por quê? 
25
Lógica de Programação II
Unidade 1
Tudo, agora, não passa de operações simples, como se estivéssemos 
manipulando variáveis independentes. Por exemplo, vamos criar 
um vetor de números pares e um vetor de números ímpares: a 
diferença entre eles será armazenada em um terceiro vetor. Vamos 
assumir os 50 primeiros valores inteiros, ou seja, de 0 até 49.
início
 {declaração das variáveis}
 pares: vetor[25] inteiro {armazena números pares com 25 posições, pois 
se são os 50 primeiros números positivos, temos apenas 25 pares}
 impares: vetor[25] inteiro {armazena números ímpares}
 subtracao: vetor[25] inteiro {armazena a diferença entre números 
 pares e ímpares}
 j,i: inteiro {variáveis utilizadas para realizar o laço de repetição}
 
 {vamos armazenar os números pares no vetor pares}
 j  0 {será o contador do vetor pares e vetor ímpares}
 para i de 0 até 49 passo 2 faça
 {armazena 0,2,4,6.....48. Perceba que o passo do laço de 
repetição é de 2 em 2.
 Então o valor da variável i pula de 2 em 2. Mas no vetor pares 
precisamos guardar em posições seqüenciais. Vamos criar 
uma outra variável para contar os vetores pares (j).}
 pares[ j ]  i 
 j  j +1
 fim-para
 
 {vamos armazenar os números ímpares no vetor ímpares}
 j  0 {inicializar novamente, para iniciar o vetor impares de 0.}
 para i de 1 até 49 passo 2 faça
 impares [ j ]  i {armazena 1,3,5,7.....49. Perceba que o passo 
do laço de repetição é de 2 em 2, mas a contagem começa 
com 1. O contador j irá guardar o valor de i na posição correta 
em seqüência.}
 j  j + 1
 fim-para
 
 {vamos realizar as subtrações de cada posição dos vetores pares e 
ímpares e armazenar o resultado no vetor subtracao. A estrutura 
repetição para-faça inicia em 0 e vai até 25, pois cada vetor tem apenas 
25 elementos (25 pares e 25 ímpares) dentre os 50 primeiros números 
0-49}
 para i de 0 até 24 passo 1 faça
 subtracao[ i ] = pares[ i ] – impares[ i ]
 fim-para
 
 {como resultado de saída, vamos imprimir os vetores}
 para i de 0 até 24 passo 1 faça
 escreva “Números Pares: “, pares[ i ]
 escreva “Números Ímpares “, impares[ i ]
 escreva “Diferença Pares - Ímpares: “, subtracao[ i ]
 fim-para
fim
26
Universidade do Sul de Santa Catarina
Bem, agora você já sabe criar vetores, inserir e recuperar valores 
de vetores. Na próxima seção, vai estudar alguns algoritmos de 
programação utilizando vetores.
SEÇÃO 3 - Algoritmos com manipulação de Vetores
Conforme falamos na disciplina de Lógica de Programação 
I, a melhor maneira de aprender a programar é programando. 
Continua valendo a idéia: A melhor maneira de aprender a 
utilizar vetores é construindo algoritmos com vetores. Nesta 
seção, mostraremos algumas aplicações que manuseiam vetores. 
Para esses exemplos, vamos definir as variáveis com nomes 
maiúsculos apenas por questões de estética. Vale lembrar que, de 
acordo com a seção 4 de Lógica de Programação I, por padrão, 
as variáveis são todas com letras minúsculas, mas isso para as 
linguagens de programação de alto nível como C/C++, JAVA, 
Visual etc. Para o pseudocódigo, podemos representar por letras 
maiúsculas, sem perda de padronização.
1. Ler um vetor de 50 números e montar outro vetor com os 
valores do primeiro multiplicados por 3. 
Pseudocódigo:
início
 VET1,VET2 : vetor [50] real
 CONTADOR : inteiro
 para CONTADOR de 0 até 49 faça
 leia “Digite um número: “,VET1[CONTADOR]
 VET2[CONTADOR]  VET1[CONTADOR] * 3
 fim-para
fim 
27
Lógica de Programação II
Unidade 1
2. Um armazém contém 400 produtos e para cada tipo de 
produto existe um código. Faça um algoritmo para ler o 
código do produto e a quantidade em estoque. Depois, monte 
dois vetores para armazenar respectivamente os códigos das 
mercadorias e a quantidade dos produtos.
Pseudocódigo:
início
 {declaração das variáveis}
 CODIGOPRODUTO : vetor [400] literal
 QUANTIDADE : vetor [400] inteiro
 CONTADOR : inteiro
 para CONTADOR de 0 até 399 faça
 {leitura de 400 códigos de produtos e a quantidade em estoque 
de cada um}
 escreva “Digite o código do produto: “
 leia CODIGOPRODUTO[CONTADOR]
 escreva “Digite a quantidade do produto em estoque: “
 leia QUANTIDADE[CONTADOR]
 fim-para
fim
3. Ler um vetor contendo 100 números, que correspondem 
a matrículas de alunos. Ler cinco números e imprimir uma 
mensagem informando se eles estão ou não presentes no vetor.
Pseudocódigo:
início
 {declaração de variáveis}
 ALUNOS : vetor[100] inteiro {lembre que o tamanho do vetor é 
100, mas ele vai de 0 até 99}
 POS, PESQUISADO, CONT :inteiro
 {laço de repetição para preencher o vetor ALUNOS}
 para POS de 0 até 99 faça
 escreva “Digite o código de matrícula de um aluno: “
 leia ALUNOS[POS]
 fim-para 
28
Universidade do Sul de Santa Catarina
 {5 entradas de dados para verificar se alunos estão cadastrados ou 
não}
 para CONT de 1 até 5 faça
 escreva “Digite o número de matrícula a ser pesquisado: “
 leia PESQUISADO
POS  -1 {inicialmente é atribuído o valor –1 para a variável 
POS porque na seqüência, no comando repita, a variável POS será 
incrementada de 1 (POS  POS + 1). Como queremos começar a 
ler o vetor ALUNOS a partir da posição 0, no primeiro laço, a variável 
POS assume valor 0} 
 repita 
 POS  POS+1
{repete o laçoaté que o número sendo pesquisado (valor 
armazenado na variável PESQUISADO) seja igual ao número 
armazenado no vetor ALUNOS em uma determinada posição POS, 
ou que a variável 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 então
 {se a variável POS possui um valor superior a 99, ou seja, 100, 
isso significa que todo o vetor ALUNOS foi lido desde o índice 0 até 
99 (100 alunos), mas que não há nenhum número armazenado 
nesse vetor é igual ao valor armazenado na variável PESQUISADO} 
 escreva “Número não cadastrado !”
 senão 
 escreva “Número localizado na posição “, POS , “ do vetor.”
 fim-se
 fim-para
fim
4. Criar um algoritmo que leia o preço de compra e o preço 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%
Pseudocódigo:
29
Lógica de Programação II
Unidade 1
Inicio
 {declaração de variáveis}
PRECOCOMPRA: vetor [100] real {armazena os preços de compra das mercadorias}
PRECOVENDA: vetor [100] real {armazena os preços de venda das mercadorias}
LUCRO, TOTLUCROMENOR10, TOTLUCROMENOR20, TOTLUCROMAIOR20: real {variáveis 
utilizadas para armazenar o lucro, o lucro menor que 10%, menor do que 20% e maior 
do que 20%, respectivamente}
i : inteiro {variável utilizada como contadora para laços de repetição}
{precisamos inicializar as variáveis contadoras de lucros}
TOTLUCROMENOR10  0
TOTLUCROMENOR20  0
TOTLUCROMAIOR20  0
{entrada de dados}
para I de 0 até 99 passo 1 faça
 {vamos especificar o preço de venda e de compra de todas as 100 mercadorias}
 escreva “Entre com o preço de compra da mercadoria: “
 leia PRECOCOMPRA[ i ]
 escreva “Entre com o preço de venda da mercadoria: “
 leia PRECOVENDA[ i ]
fim-para
{Processamento do algoritmo. Vamos verificar o lucro de cada mercadoria (preço 
de venda – preço de compra) e verificar as condições 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 faça
 LUCRO  (PRECOVENDA[ i ] – PRECOCOMPRA[ i ]) * 100 / PRECOCOMPRA[ i ]
{se a diferença entre preço de venda e preço de compra, ou seja, o lucro for menor do 
que 10, então incrementa a variável contadora de mercadorias com lucros inferior a 
10%} 
se LUCRO : vetor [tamanho do vetor] 
Quando um vetor é declarado, ele se apresenta assim na 
memória: 
Valor 1 Valor 2 Valor n
 
 
índices ->
31
Lógica de Programação II
Unidade 1
Cada posição (representado por um quadrado no desenho 
acima) é uma posição de memória do computador. Para inserir 
ou ler valores de um vetor basta especificar seu nome e o índice 
(posição) que queremos acessar dentro do vetor. Por exemplo: 
notas [10]  8.5. Sabendo que o índice dos vetores começa com 
o valor numérico 0. Quando colocamos notas [10] estamos nos 
referindo ao índice 10, mas a posição no vetor (representado por 
um quadrado) é o 11. Poderíamos representar as posições de um 
vetor de tamanho 5 conforme apresentado abaixo: 
 
 
Valor 1 Valor 2 Valor 3 Valor 4 Valor 5 Valores
 
[0] [1] [2] [3] [4] Índices
 
Podemos perceber que o índice [3] está no quarto quadrado. 
Tudo isso porque um vetor tem seu início no índice 0, conforme 
já dito.
Bem, um vetor é unidimensional, ou seja, apresenta apenas uma 
dimensão ou 1 linha. Poderíamos estar trabalhando com vetores 
bidimensionais ou vetores que possuem várias colunas e várias 
linhas. A esses vetores damos o nome de matrizes. No próximo 
capítulo, estaremos estudando algoritmos que utilizam os 
conceitos de matrizes.
Até lá!
Atividades de autoavaliação
1. Crie um vetor para armazenar 25 valores de temperaturas.
2. Crie um vetor para armazenar 150 alunos de um colégio 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 aéreas de uma 
companhia. Além da leitura do número de vôos e da quantidade de 
lugares disponíveis, leia vários pedidos de reserva, constituídos do 
número da carteira de identidade e do número do vôo desejado. Para 
cada cliente, verificar se há possibilidade no vôo desejado. Em caso 
afirmativo, imprimir o número de identidade do cliente e o número 
do vôo, atualizando o número de lugares disponíveis. Caso contrário, 
avisar ao cliente a inexistência de lugares.
Saiba mais
Consulte o site http://www.unidev.com.br/artigos. Há uma 
série de algoritmos já feitos. É um bom exercício fazer os 
exemplos e comparar com o que está feito. Também, neste site, 
constam dicas importantes de lógica de programação. 
Dicas de programação nunca são demais, não se esqueça disso!
Objetivos de aprendizagem 
� Entender o conceito de matrizes.
� Conhecer e praticar montagens de matrizes.
� Construir algoritmos com utilização de matrizes.
Seções de estudo
Seção 1 Conceito e declaração de matrizes.
Seção 2 Operação de matrizes. 
Seção 3 Algoritmos com manipulação de matrizes. 
UNiDADE 2
Manipulação de matrizes 2
34
Universidade do Sul de Santa Catarina
Para início de estudo
Trabalhamos na unidade anterior apenas com vetores 
unidimensionais, ou seja, variáveis 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 várias colunas, onde o tamanho do vetor especifica o 
número 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 figura anterior que temos uma linha, denominada 
linha 0, e várias colunas, denominadas de coluna 0, coluna 1 e 
assim sucessivamente. Como vimos na unidade anterior, cada 
valor de um vetor é armazenado em uma posição de memória, 
ou seja, em um dos quadrados representados na figura anterior. 
Já sabemos também que não precisamos saber o endereço de 
memória do computador para acessar os elementos do vetor, 
bastando especificar 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 começa com índice 0). Para 
acessar qualquer posição do vetor, bastaespecificar o índice 
de interesse: NOTAS [2]  7.5. Se observarmos o índice que 
estamos acessando, no exemplo em questão, o índice 2 do 
vetor NOTAS, podemos representá-lo conforme a figura 
anterior:
Linha 0 7.5
Coluna 0 Coluna 1 Coluna 2 Coluna n-1
Observando a figura, 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 várias colunas, onde é armazenado 
35
Lógica de Programação II
Unidade 2
cada um dos valores, seja ele numérica (real ou inteiro), 
alfanumérico (literal) ou lógico e que o índice que especificamos 
para acessar o vetor é exatamente o número 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 questão: e, se quisermos trabalhar com um 
vetor que possua várias linhas e várias colunas conforme a figura 
a seguir? 
Linha 0
Linha 1
Linha 2
Coluna 0 Coluna 1 Coluna 2 Coluna 3
 
Temos agora várias linhas e colunas. Damos o nome para essas 
estruturas de matrizes.
- Nesta unidade você vai conhecer o que são matrizes e saber o porquê 
de sua importância no mundo da programação. 
36
Universidade do Sul de Santa Catarina
SEÇÃO 1 - Conceito e declaração de matrizes
Uma matriz nada mais é do que um vetor de 2 
dimensões (linhas e colunas) capaz de armazenar 
variáveis do mesmo tipo (numérica, literal ou lógica). 
Pode ser representada por uma tabela, conforme você pode ver a 
seguir:
0
1
2
0 1 2 3
Cada quadrado representa uma posição de memória onde podem 
ser armazenadas as variáveis, de maneira idêntica aos vetores. 
Porém, os vetores são unidimensionais (apenas colunas) e as 
matrizes são bidimensionais (2 dimensões: linhas e colunas). 
Agora teremos não somente a linha 0, mas também a linha 1, a 
linha 2 e assim sucessivamente. 
O número de posições que queremos criar é especificado na 
declaração, de forma similar a dos vetores. 
Mas qual a utilidade de uma matriz? Uma matriz é prática 
quando precisamos manipular um conjunto de dados do 
mesmo tipo, sem que seja necessário declarar muitas variáveis e 
precisamos fazer relações de 2 variáveis.
Queremos registrar 4 temperaturas de três dias da semana 
(segunda-feira, terça-feira e quarta-feira). Nesse caso, 
temos duas variáveis: temperatura e dias da semana. A 
melhor maneira de representar isso é através de uma tabela, 
mostrando nas linhas os dias da semana e, nas colunas, as 
temperaturas medidas.
Veja a tabela a seguir:
37
Lógica de Programação II
Unidade 2
Dias da semana Temperatura 1
Temperatura 
2
Temperatura 
3
Temperatura 
4
Segunda 27 29 30 24
Terça 25 27 28 22
Quarta 21 23 25 20
Se olharmos para a tabela anterior, podemos saber, por exemplo, 
que na terça-feira, a 4ª temperatura medida foi 22ºC e que na 
quarta-feira a 2ª temperatura medida foi de 23ºC. Estamos 
fazendo uma correspondência entre a variável Temperatura 
e o Dia. Nesse caso, para determinar a temperatura em 
uma determinada hora de um dia. Para representar essa 
correspondência é que utilizamos o conceito de matrizes. Agora 
termos uma estrutura de linhas e colunas e não apenas de colunas 
como eram os vetores. 
Mas como criar uma matriz? É muito simples. Especificamos 
o nome da matriz seguido do número de linhas e colunas que a 
matriz conterá, além do tipo de variável que será armazenada.
A exemplo de vetores, as matrizes só podem 
armazenar dados do mesmo tipo. Por exemplo: 
somente dados numéricos (reais e inteiros) ou 
somente dados literais ou somente dados lógicos. 
Não podemos ter em uma matriz dados numéricos e 
literais ao mesmo tempo.
Sintaxe da matriz : matriz [número de linhas][número de 
colunas] 
notas_de_alunos: matriz[6][4] real {matriz que possui 6 linhas – 
numeradas de 0 até 5 e 4 colunas, numeradas de 0 até 3. Dizemos 
que a matriz tem dimensão de 6x4. No total, são 6x4 = 24 posições 
para armazenar valores reais}
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 dimensão de 10x30. No total, são 10x30 
= 300 posições para armazenar valores literais}
 
38
Universidade do Sul de Santa Catarina
Assim como na criação de vetores, para a criação de matrizes não 
precisamos especificar os endereços de memória do computador. 
Isso é feito automaticamente, sem que sequer saibamos onde 
os valores estão armazenados na memória. A única coisa que 
sabemos é que é alocado um espaço para armazenar esses valores 
e que são armazenados em endereços de memória seqüenciais. 
Para acessar esses endereços ou os valores armazenados nesses 
endereços é que é um pouco diferente dos vetores. Veremos isso 
na seção 2.
- Na próxima seção você vai estudar como manipular matrizes, ou 
seja, como inserir e ler valores a partir de matrizes. 
SEÇÃO 2 - Operação de matrizes
Até agora nossa preocupação foi em saber como criar uma matriz 
e saber quando ela é necessária. Sempre que trabalharmos com 
grandes quantidades de dados e precisamos relacionar duas ou 
mais variáveis, estaremos criando uma ou mais matrizes. A 
sintaxe da criação é bastante simples conforme seção 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 atenção especial: precisamos 
especificar qual a linha que estamos acessando, além da coluna 
como é feito com os vetores.
Assim, para acessar as posições de uma matriz, basta indicar a 
linha e a coluna desejadas. 
39
Lógica de Programação II
Unidade 2
Exemplo: NOTAS.
 NOTAS: matriz [6][4] real
0
1
2
3
4
5
0 1 2 3
1. A Matriz NOTAS é uma matriz de dimensão 6x4, 
ou seja, 6 linhas por 4 colunas.
2. Para armazenar uma constante real na matriz NOTAS, precisamos 
identificar 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 começam 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 real 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 fica a matriz.
0
1
2
3 10.0
4
5
0 1 2 3
Todo o processo de manipulação agora se torna simples, bastando 
especificar a posição onde estaremos armazenando os valores, 
ou seja, basta especificar o nome da matriz e, a seguir, entre 
colchetes, o índice que representa a linha e, depois, também entre 
colchetes, o índice que representa a coluna. 
40
Universidade do Sul de Santa Catarina
Dica: para trabalhar com matrizes, sempre precisamos 
especificar a sua dimensão, ou seja, o número de linha 
pelo número de colunas. Sendo assim, a forma mais 
usual e fácil para escrita/leitura de valores para/de 
matrizes pode ser feita através do comando para/fim-
para. Você consegue saber o porquê? 
1. Montar uma matriz nas dimensões 4x5 e imprimir a soma 
das linhas e colunas.
Pseudocódigo:
início
 MAT : matriz [4][5] inteiro {matriz de dimensão 4x5. 4 linhas e 5 
colunas}
 SOMALINHA, SOMACOLUNA, LINHA, COLUNA : inteiro
 {Aqui um fato importante. Para percorrer um vetor desde o seu 
início até o seu final, utilizamos o comando para/faça/fim-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/faça/fim-
para. Assim quetodas as colunas de uma linha são lidas ou acessadas, 
passa-se para a próxima linha. Novamente, para essa nova linha, todas 
as colunas são acessadas, e assim sucessivamente. Podemos perceber 
que para cada incremento da linha devemos ler ou acessar todas as 
colunas daquela linha. Isso sugere dois laços de repetição: 1 para 
pular as linhas e outro para pular as colunas. Dessa forma, elabora-
mos 2 laços de repetição, um para linha com a variável LINHA sendo 
incrementada de 0 até 3 (4 linhas no total), e um laço para coluna com 
a variável COLUNA sendo incrementada de 0 até 4 (5 colunas no total). 
Para cada repetição do laço dentro da linha executamos 5 repetições 
para as colunas, percorrendo assim toda a matriz} 
 para LINHA de 0 até 3 passo 1 faça
 para COLUNA de 0 até 4 passo 1 faça
 escreva “Digite um número: “
 leia MAT[LINHA][COLUNA]
 fim-para
 fim-para 
 {Processamento do Algoritmo. Soma das linhas. A explicação 
desta parte está após o fim-para do primeiro laço de repetição} 
 
41
Lógica de Programação II
Unidade 2
 para LINHA de 0 até 3 passo 1 faça
 SOMALINHA  0
 para COLUNA de 0 até 4 passo 1 faça
 SOMALINHA  SOMALINHA + MAT[LINHA][COLUNA]
 fim-para
 escreva “Total da linha”, LINHA,”:”, SOMALINHA
 fim-para
 {Explicando a lógica 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 (São os índices da matriz. Para o primeiro laço de repetição 
para LINHA de 0 até 3 passo 1 faça, a variável LINHA é incrementada 
de 0 até 3. Inicialmente ela tem valor numérico 0. O primeiro co-
mando dentro do laço é inicializar a variável SOMALINHA igual a 0. A 
variável SOMALINHA armazenará a soma de todos os valores inteiros 
de cada linha. Sabendo que estamos na linha 0, devemos percorrer 
cada coluna dessa linha. Isso é feito pelo laço de repetição seguinte 
para COLUNA de 0 até 4 passo 1 faça. Quando o programa entra nesse 
segundo laço, a variável COLUNA é incrementada com passo 1, de 0 até 
4, executando os comandos que estão dentro da estrutura para/faça/
fim-para, no nosso caso, apenas o comando SOMALINHA  SOMA-
LINHA + MAT[LINHA][COLUNA]. Quando o segundo laço de repetição é 
finalizado, o programa executa os comandos seguintes ao fim-para, ou 
seja, executa o comando de impressão na tela escreva “Total da linha”, 
LINHA,”:”, SOMALINHA. Ao encontrar o fim-para do primeiro laço de 
repetição, o programa incrementa a variável LINHA de 1 no comando 
para LINHA de 0 até 3 passo 1 faça passando o valor da variável LINHA 
para o valor 1, e executa todos os comandos dentro da estrutura para/
faça/fim-para novamente. Como SOMALINHA armazena o valor 
inteiro da soma dos valores da linha anterior, a variável é reinicializada 
com valor 0. Um ótimo exercício é 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 faça
 SOMACOLUNA  0
 para LINHA de 0 até 3 passo 1 faça
 SOMACOLUNA  SOMACOLUNA + MAT[LINHA][COLUNA]
 fim-para
 escreva “Total da coluna”, COLUNA,”:”, SOMACOLUNA
 fim-para
fim
42
Universidade do Sul de Santa Catarina
SEÇÃO 3 - Algoritmos com manipulação de matrizes
Você já deve ter observado que não criamos qualquer lógica 
para manipular tanto os vetores quanto as matrizes. Usamos os 
mesmos comandos que aprendemos em Lógica de Programação 
I, ou seja, comandos como leia, escreva, para/faça/fim-para, 
entre outros que poderíamos estar utilizando também. É uma 
oportunidade ímpar para você incrementar os conceitos e revisar 
toda a lógica de programação. Nesta seção, apresento mais 
alguns exercícios resolvidos, porém, 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 exercício e tanto para aprender cada vez 
mais.
1. Monte uma matriz para quando o usuário informar um 
número correspondente a um mês, o algoritmo imprima 
o nome do mês indicado em português, a abreviatura e o 
nome do mês em inglês. Por exemplo, o usuário digita o 
número 4 e o algoritmo é ativado para imprimir: 4Abril, Abr, 
April.
Pseudocódigo:
início
 MESES : matriz [12][3] literal
 LINHA, NUM : inteiro
 para LINHA de 0 até 11 passo 1 faça
 escreva “Digite o nome do “,LINHA +1,”mês:”
 leia MESES[LINHA][1]
 escreva “Digite a abreviação do mês de “,MESES[LINHA][1],”:”
 leia MESES[LINHA][2]
 escreva “Digite o nome em inglês do mês “,MESES[LINHA][1],”:”
 leia MESES[LINHA][3]
 fim-para
 leia “Digite o número do mês a ser consultado: “,NUM
 escreva NUM,” “, MESES[NUM][1], “,”, MESES[NUM][2], “, “, MESES[NUM][3]
fim
43
Lógica de Programação II
Unidade 2
2. Uma floricultura conhecedora de sua clientela gostaria de 
fazer um algoritmo que pudesse controlar via Web sempre 
um estoque mínimo de determinadas plantas, pois todo 
o dia, pela manhã, o dono faz novas aquisições. Criar um 
algoritmo que deixe cadastrar 50 tipos de plantas e nunca 
deixa o estoque ficar abaixo do ideal. O algoritmo será 
utilizado para construir um programa na página da empresa.
Pseudocódigo:
início
 {vamos montar uma matriz de 50 linhas e 3 colunas. As 50 linhas 
servem para cadastrar todos os produtos e as três colunas servem 
para especificar a quantidade de produtos em estoque, a quantidade 
desejada e o resultado da diferença entre a quantidade em estoque e a 
quantidade desejada respectivamente.}
 PRODUTOS: matriz [50][3] : inteiro
 NOME: vetor [50] literal
 I: inteiro
 para I de 0 até 49 passo 1 faça
 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 ] : matriz [número de linhas][número de colunas] 
Quando criamos uma matriz, o computador reserva um 
espaço na memória para armazenar Linhas x Colunas. É o 
que chamamos de dimensão da matriz. Para acessar qualquer 
elemento da matriz, basta especificar o índice da linha e coluna, 
lembrando sempre que os índices começam com o valor numérico 
0. Por exemplo, uma matriz NOTAS de dimensão 5x 6 começa 
em [0][0] e termina em [4][5]. Podemos acessar qualquer posição 
da matriz desde que esteja dentro das dimensões especificadas: 
NOTAS[3][2]  8.5. Estamos acessando a quarta linha ea 
terceira coluna da matriz.
Por fim, viu que para percorrer uma matriz de ponta a ponta, 
precisamos de dois laços de repetição, um sendo utilizado para 
percorrer as colunas de cada linha e o outro para percorrer as 
linhas da matriz. 
Na próxima unidade, vamos trabalhar com aspectos mais 
sofisticados da linguagem de programação: as estruturas. Elas 
são a base para algoritmos avançados e também para a linguagem 
orientada a objetos, linguagem essa que você, programador web, 
deve dominar.
Bom trabalho e até a próxima etapa desse mundo fabuloso que é 
o estudo da lógica de programação.
45
Lógica de Programação II
Unidade 2
Atividades de autoavaliação
1. A distância em quilômetros 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 distâncias e também deverá imprimir 
a distância entre duas capitais solicitadas por um usuário. Esse será um 
programa que poderá ser acessado via Web.
 Tabela mostrando as distâncias entre as capitais:
1 2 2 27
1 0 23 45
2 23 0 10
27 110 50 66 72 0
46
Universidade do Sul de Santa Catarina
Saiba mais
Consulte o livro “Construindo algoritmos computacionais: lógica 
de programação” de Alfredo Boente.
Para quem deseja participar de um outro grupo de discussão, 
basta acessar o site: http://www.aprendaprogramacao.hpg.
ig.com.br/grupo.html.
Objetivos de aprendizagem 
� Entender o conceito de registro ou estrutura.
� Conhecer e praticar montagens de registros.
� Criar novos tipos de variáveis. 
Seções de estudo
Seção 1 Conceito e declaração de registros. 
Seção 2 Operação com registros. 
Seção 3 Algoritmos com manipulação de registros. 
UNiDADE 3
Manipulação de registros 3
48
Universidade do Sul de Santa Catarina
Para início de estudo
Quantas vezes você já preencheu fichas de cadastros, seja em 
hotéis, em videolocadoras, para propostas de consórcios ou 
ainda fichas de matrícula escolar? Nessas fichas, certamente 
você precisou entrar com dados como: seu nome, sua idade, seu 
telefone de contato, endereço etc.
Nesses casos, estamos trabalhando com dados de diferentes tipos.
Por exemplo: nome é uma variável literal, idade é uma 
variável inteira, informação se possui ou não veículo pode 
ser um valor lógico. 
Percebeu que estamos entrando em um mundo onde as coisas 
não são tão homogêneas assim, ou seja, nem tudo que estamos 
trabalhando são apenas variáveis numéricas (real ou inteiras) ou 
literais ou ainda lógicos? Há uma mistura de tipos de dados que 
devemos trabalhar. 
Mas, o que tem haver isso com lógica de programação? Não 
poderíamos criar variáveis independentes, ou seja, cada 
informação armazenada em um local diferente como temos 
feito até agora? Poderíamos criar, por exemplo, as variáveis em 
pseudocódigo representando nossa ficha cadastral. Acompanhe a 
seguir.
início 
{Declaração de variáveis}
DATANASC, NOME, ESTADOCIVIL, ENDERECO, BAIRRO: literal 
IDADE, NUMERO, CEP, FONE: inteiro 
.....
fim
 
49
Lógica de Programação II
Unidade 3
Se fôssemos preencher apenas uma ficha cadastral, isso resolveria 
nossos problemas. Mas vamos supor que queremos cadastrar 50 
hóspedes de um hotel. Certamente, tendo visto e estudado as 
unidades sobre vetores e matrizes, você responderia que a solução 
continua simples. Basta fazer, de todas as variáveis criadas 
anteriormente, vetores de dimensão 50.
NOME: vetor [50] literal; iDADE: vetor[50] inteiro, e assim por 
diante. isso também resolveria nossos problemas. Se você 
pensou assim, pensou certo. Parabéns, por que mostra 
que você conseguiu entender os conceitos das unidades 
anteriores.
Mas o que há de novo, então? 
Quando criamos variáveis independentes, o computador irá 
colocá-las em qualquer endereço de memória reservado para 
essas ocasiões. Ele não vai se preocupar em colocar em uma 
certa ordem que muitas vezes são necessárias por quesitos de 
velocidade de execução do programa. Imagine sua ficha cadastral 
onde o nome está em uma folha, o endereço está duas folhas a 
seguir, depois volta uma folha para preencher a idade e assim 
sucessivamente. Parece desorganizado você não acha? Além do 
tempo de preenchimento que será bem maior. Ou seja, se estamos 
criando variáveis para representar nossas fichas cadastrais, seria 
interessante que todas elas fossem declaradas próximas uma das 
outras. Isso faria com que o desempenho do programa fosse 
melhor. Pode parecer estranho, mas para um programa com 
muitas informações e dados para manipular, isso pode fazer a 
diferença entre um programa bom e um ruim.
 Pois bem, no mundo da lógica de programação, podemos criar 
estruturas de dados heterogêneas, ou seja, capaz de armazenar 
variáveis de tipos diferentes, de forma que as mesmas estejam 
declaradas próximas umas das outras no que diz respeito à 
posição de memória do computador. São os chamados registros. 
Com esse tipo de estrutura, podemos declarar múltiplas variáveis 
de diferentes tipos, todas organizadas umas próximas das outras, 
de forma similar a uma ficha cadastral. Na seção seguinte, vamos 
definir essa estrutura e vamos aprender a como declará-las.
50
Universidade do Sul de Santa Catarina
Quando trabalhamos com vetores e matrizes nas unidades 
anteriores, os dados armazenados nessas estruturas devem ser 
homogêneos, ou seja, tudo do mesmo tipo. Não podemos utilizar 
nem vetores e nem matrizes para armazenar dados de tipos 
diferentes. 
Mas, se quisermos trabalhar com dados do tipo literal 
e numérico juntamente, isso é possível? 
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.
SEÇÃO 1 - Conceito e declaração de registros
Mas, se quisermos trabalhar com dados do tipo literal 
e inteiro juntamente, isso é possível? 
Em lógica de programação um registro é um recurso que permite 
a criação de diferentes tipos de variáveis em um mesmo bloco 
de memória do computador. Quando criamos um registro, 
criamos um espaço na memória do computador que permite 
armazenar dados heterogêneos, ou seja, constantes de vários 
tipos. É como se fosse uma ficha de dados, organizada de forma 
que os dados estão próximos um dos outros dentro da memória 
do computador. Uma das grandes vantagens disso, além da 
organização, é a velocidade de acesso às informações ali contidas.
Para lembrar!
Diferentemente de vetores e matrizes que só podem 
armazenar dados do mesmo tipo, os registros são 
estrutura ou recursos que permitem armazenar 
constantes de diferentes tipos.
51
Lógica de Programação II
Unidade 3
 
Sintaxe do registro
: registro
 
 fim-registro
onde são todas as variáveis 
que irão compor uma ficha de dados, ou seja, NOME, IDADE, 
CPF, ENDERECO etc.
Vamos imaginar uma ficha cadastral que chamaremos de 
FiCHA com as seguintes informações a serem preenchidas 
por um cliente de um hotel:
Nome, estado civil, endereço, bairro, cidade, estado, e-mail, 
idade, telefone, número.
Utilizando a sintaxe de criação de registro, temos:
FICHA: registro
 NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO, 
EMAIL: literal
 IDADE, TELEFONE, NUMERO: inteiro 
 fim-registro
Bem, você já deve estar perguntando. O que mudou além da palavra 
reservada registro e fim-registro?
Pois bem, conforme dito anteriormente, quando declaramos 
a FICHA anterior como sendo registro uma parte da 
memória do computador é reservada e nela são inseridas as 
variáveis declaradas entre os comandos registro e fim-registro. 
Portanto, elas ocupam o mesmo bloco de memória, tornando 
o desempenho do programa mais rápido. Agora, por exemplo, 
NOME e IDADE estão num mesmo bloco de memória. Seria 
análogo a ter nome e idade em uma mesma ficha cadastral.
Outra diferençaimportante é a questão de como acessamos as 
variáveis declaradas dentro de uma estrutura. 
52
Universidade do Sul de Santa Catarina
Como podemos ler e escrever nessas variáveis? 
A resposta é bastante simples. Basta especificarmos o nome do 
registro criado, seguido de um ponto (.) e o nome da variável. 
Por exemplo, para acessar a variável NOME, precisamos 
especificar o nome do registro do qual ela pertence. Sendo assim, 
FICHA.NOME. Observe que a variável NOME não é uma 
variável independente qualquer. Ela pertence ao registro FICHA. 
Por isso, precisamos preceder o nome da variável NOME com o 
nome do registro FICHA seguido de um ponto (.).
Assim como na criação de vetores e matrizes, para a criação de 
registros não precisamos especificar os endereços de memória 
do computador. Isso é feito automaticamente, sem que sequer 
saibamos onde os valores estão armazenados na memória. 
A única coisa que sabemos é que é alocado um espaço para 
armazenar esses valores e que são armazenados em blocos de 
memória.
- Na próxima seção você vai saber como montar algoritmos com 
registros.
SEÇÃO 2 - Operação com registros
Novamente, você já deve ter percebido que não criamos qualquer 
outra lógica de controle além das já estudadas. É mais uma 
oportunidade de mostrar a você a importância dos comandos 
básicos de lógica de programação. Nesta seção, vamos mostrar 
uma aplicação típica de registros: o conceito de fichas cadastrais. 
A figura a seguir mostra uma possível ficha cadastral:
Nome: Idade:
Estado Civil:
Endereço:
Número:
Bairro: Cidade:
Estado: Telefone:
 
53
Lógica de Programação II
Unidade 3
Observando a figura anterior, podemos verificar que temos 
variáveis literais e inteiras. 
Vamos classificá-las inicialmente: Nome, Estado Civil, Endereço, 
Bairro, Cidade e Estado são variáveis literais. Idade, Número 
e Telefone de Contato são variáveis inteiras. Observe que 
poderíamos colocar Telefone de Contato como literal também.
Se quiséssemos representar um número telefônico por 
278-8080, isso é um literal e não um valor inteiro. Mas para 
nosso exemplo, vamos considerar o Telefone de Contato 
como sendo initeiro. Para o telefone especificado devemos 
colocar então como sendo 2788080.
Criaremos um registro para a ficha cadastral. Iremos chamar esse 
registro de FICHA. Sendo assim, em pseudocódigo, temos:
FICHA: registro
 {variáveis da ficha}
 fim-registro
Agora vamos definir as variáveis. Iremos especificar seis variáveis 
literais e três variáveis inteiras. Colocaremos os nomes das 
variáveis de forma a não deixar qualquer tipo de dúvida em 
relação às constantes que serão armazenadas. Dessa forma, nosso 
registro será conforme a seguir:
FICHA: registro
 {variáveis da ficha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: inteiro
 fim-registro
Isso é tudo. Nossa ficha já está montada. Basta utilizá-la agora 
acessando as variáveis do registro. O algoritmo a seguir, mostra 
um exemplo completo.
54
Universidade do Sul de Santa Catarina
Pseudocódigo:
início 
{declaração do registro FICHA}
FICHA: registro
 {variáveis da ficha}
 NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: 
 literal
 IDADE, NUMERO, TELEFONE: inteiro
 fim-registro
 {entrada de dados}
 escreva “Nome: “
 leia FICHA.NOME
 escreva “Estado Civil: “
 leia FICHA.ESTADOCIVIL
 escreva “Idade: “
 leia FICHA.IDADE
 escreva “Endereço: “
 leia FICHA.ENDERECO
 escreva “Bairro: “
 leia FICHA.BAIRRO
 escreva “Número: “
 leia FICHA.NUMERO
 escreva “Cidade: “
 leia FICHA.CIDADE
 escreva “Estado: “
 leia FICHA.ESTADO
 escreva “Telefone de Contato: “
 leia FICHA.TELEFONE
fim
No algoritmo anterior não mostramos nenhuma saída. O 
exemplo foi apenas para mostrar como trabalhar com criar um 
registro e como acessar suas variáveis. 
55
Lógica de Programação II
Unidade 3
Criando novos tipos de variáveis
Muitas vezes, os tipos básicos de variáveis que utilizamos até 
agora (inteiro, real, literal e lógico) não são suficientes para 
resolver um algoritmo. Seria interessante que pudéssemos criar 
tipos definidos pelo usuário. Por exemplo, um tipo de variável 
que armazenasse, ao mesmo tempo, um valor literal, um valor 
numérico e um valor lógico. Vou lhe dar a boa notícia. Isso 
é possível sim, graças à estrutura de registros que acabamos 
de estudar. Podemos fazer de um registro criado um tipo de 
variável.
Por exemplo, além de termos os tipos básicos como o 
real, inteiro, o literal e o lógico, poderíamos ter também o 
tipo FiCHA. FiCHA na verdade, é um registro criado pelo 
programador. Chamamos isso de tipo definido pelo usuário. 
Isso é fantástico, pode acreditar. Além de podermos criar 
variáveis, podemos criar agora, também tipos de variáveis.
Mas como posso fazer isso e para que serve? 
Bem, para criar um tipo registro, em pseudocódigo, é necessário 
apenas colocar a palavra reservada tipo antes do nome do 
registro, ficando assim sua sintaxe:
tipo = registro
 
 fim-registro
O comando tipo serve para criar novos tipos de variáveis a partir 
dos tipos básicos. 
56
Universidade do Sul de Santa Catarina
Por exemplo, no exercício para manipular uma ficha 
cadastral colocado anteriormente, poderíamos fazer do 
registro FiCHA um tipo e declarar variáveis daquele tipo. A 
sintaxe ficaria conforme a seguir:
tipo FICHA = registro
 {variáveis da ficha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: inteiro
 fim-registro
Para criar uma variável do tipo FICHA, criamos da mesma 
forma que criamos as variáveis dos tipos primitivos. Por exemplo, 
ficha1: FICHA, onde ficha1 é agora uma variável do tipo 
FICHA. Passamos a acessar as variáveis do registro FICHA a 
partir da variável ficha1. 
Exemplo: ficha1.NOME, ficha1.ENDERECO e assim por diante. 
O que quero dizer é que FICHA é um tipo definido pelo 
programador e que ficha1 é uma variável do tipo FICHA que 
ocupa um espaço na memória para armazenar seis variáveis 
literais e três variáveis inteiras, conforme nosso exemplo. Assim, 
veja parte do algoritmo anterior atualizado:
57
Lógica de Programação II
Unidade 3
início
 {declaração do registro FICHA}
 tipo FICHA = registro
 {variáveis da ficha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: inteiro
 fim-registro
ficha1 : FICHA {declaração da variável do tipo FICHA. Observe que o tipo 
FICHA é definido antes de ser utilizado. Isso é obrigatório, tendo em vista 
que o programa precisa saber o que é FICHA. Como definimos FICHA como 
sendo um registro, ao especificar ficha1 como sendo do tipo FICHA, nenhum 
problema será encontrado}
 escreva “Nome: “
 leia ficha1.NOME
 escreva “Estado Civil: “
 leia ficha1.ESTADOCIVIL
 ........ {restante do algoritmo}
fim 
Mas qual é a utilidade de se criar tipos como no nosso 
exemplo? 
É muito simples. Perceba que criamos apenas uma ficha 
cadastral de um hóspede. Se quiséssemos preencher o cadastro 
para um novo hóspede, bastaria criarmos outra variável, ficha2 
por exemplo. Poderíamos criar tantas fichas quanto quisermos. 
Considerando o tipo FICHA anteriormente criado, podemos 
criar várias variáveis:
ficha1, ficha2, ficha3: FICHA.
Cada variável representa uma ficha para cadastrar um hóspede. 
É como se tivéssemos 3 fichas cadastrais para serem preenchidas 
na mão. Para acessar o nome de ficha1, apenas colocaríamos 
ficha1.NOME. Para acessar o nome de ficha2,

Mais conteúdos dessa disciplina