Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila - Apostila Ninja
Apostila - Apostila Ninja
Apostila - Apostila Ninja
Lógica de Programação II
Disciplina na modalidade a distância
Palhoça
UnisulVirtual
2007
LIVRO DIDÁTICO
Palavras do professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
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
Equipe UnisulVirtual.
Lógica de Programação II
Livro didático
Design instrucional
Daniela Erani Monteiro Will
Carolina Hoeller da Silva
4ª edição
revista e atualizada
Palhoça
UnisulVirtual
2007
005.1
M34 Martins, Carlos Fernando
Lógica de programação II / Carlos Fernando Martins ; design instrucional
Daniela Erani Monteiro Will, Carolina Hoeller da Silva, [Leandro Kingeski
Pacheco] - 4. ed. rev. e atual. - Palhoça : UnisulVirtual, 2007.
216 p. : il. ; 28 cm
Inclui bibliografia
ISBN 978-85-7817-003-5
Créditos
Unisul- Universidade do Sulde Santa Catarina
UnisulVirtual- Educação Superiora Distância
Cam pusUnisulVirtual Pedro Paulo Alves Teixeira Eduardo Kraus Olavo Lajús
Rua João Pereira dos Adm inistração RafaelPessi Priscilla Geovana Pagani
Santos,303 Renato AndréLuz Vilson Martins Filho Silvana Henrique Silva
Palhoça - SC- 88130-475 Valm ir Venício Inácio Equipe Didático-
Fone/fax:(48)3279-1541 e Pedagógica M onitoria e Suporte
3279-1542 Bibliotecária Angelita MarçalFlores Rafaelda Cunha Lara Secretária Executiva
E-m ail: Soraya Arruda W altrick Carm en M aria Cipriani (coordenador) Viviane Schalata M artins
cursovirtual@unisul.br Pandini Adriana Silveira
Site:www.virtual.unisul.br Coordenação dosCursos Carolina Hoeller da Silva Caroline M endonça Tecnologia
Adriano Sérgio da Cunha Boeing Edison Rodrigo Valim Osm ar de Oliveira Braz
ReitorUnisul Ana Luisa M ülbert Cristina Klipp de Oliveira Francielle Arruda Júnior
Gerson LuizJoner da Ana Paula Reusing Pacheco Daniela Erani M onteiro W ill Gabriela M alinverni (coordenador)
Silveira Cátia M elissa S.Rodrigues Dênia Falcão de Bittencourt Barbieri Ricardo Alexandre
(Auxiliar) Elisa Flem m ing Luz Gislane Frasson de Souza Bianchini
Vice-Reitore Pró-Reitor Charles Cesconetto Enzo de Oliveira M oreira Josiane Conceição Leal Rodrigo de Barcelos
Acadêm ico Diva Marília Flem m ing Flávia Lum i Matuzawa M aria Eugênia Ferreira M artins
Sebastião Salésio Heerdt Elisa Flem m ing Luz Karla Leonora Dahse Nunes Celeghin
Itam ar Pedro Bevilaqua Leandro Kingeski Pacheco Sim one Andréa de Castilho Edição – Livro Didático
Chefe de gabinete da Janete Elza Felisbino Ligia Maria Soufen Tum olo Vinícius M aycotSera.m
Reitoria Jucim ara Roesler M árcia Loch ProfessorConteudista
Fabian M artins de Castro Lilian Cristina Pettres Patrícia M eneghel Produção Industriale Carlos Fernando M artins
(Auxiliar) Silvana Denise Guim arães Suporte
Pró-Reitor Lauro JoséBallock Tade-Ane de Am orim Arthur Em m anuelF. Design Instrucional
Adm inistrativo LuizGuilherm e Buchm ann Vanessa de Andrade Silveira Daniela Erani M onteiro W ill
M arcus Vinícius Anátoles da Figueiredo M anuel (coordenador) Carolina Hoeller da Silva
Silva LuizOtávio Botelho Lento Vanessa Francine Corrêa Francisco Asp Flavia Lum i Matuzawa
Ferreira M arcelo Cavalcanti Viviane Bastos (3a edição revista e
M auri LuizHeerdt Viviani Poyer ProjetosCorporativos atualizada)
Cam pusSul M auro Faccioni Filho Diane DalM ago Leandro Kingeski Pacheco
Diretor:Valter Alves M ichelle Denise Durieux Logística de Encontros Vanderlei Brasil (4a edição revista e
Schm itzNeto Lopes Destri Presenciais atualizada)
Diretora adjunta:Alexandra Nélio Herzm ann Caroline Batista Secretaria de Ensino a
Orseni Onei Tadeu Dutra (Coordenadora) Distância Projeto Gráfico e Capa
Patrícia Alberton Aracelli Araldi Karine Augusta Zanoni Equipe UnisulVirtual
Cam pusNorte Patrícia Pozza Graciele Marinês (secretária de ensino)
Diretor:Ailton Nazareno Raulino Jacó Brüning Lindenm ayr Djeim e Sam m er Bortolotti Diagram ação
Soares JoséCarlos Teixeira Carla Cristina Sbardella RafaelPessi
Diretora adjunta:Cibele Design Gráfico Letícia Cristina Barbosa Grasiela M artins
Schuelter Cristiano Neri Gonçalves Kênia Alexandra Costa Jam es M arcelSilva Ribeiro Revisão Ortográfica
Ribeiro Herm ann Lam uniêSouza Revisare
Cam pusUnisulVirtual (coordenador) M arcia Luzde Oliveira Liana Pam plona
Diretor:João Vianney Adriana Ferreira dos Santos Priscila Santos Alves M aira M arina M artins
Diretora adjunta:Jucim ara AlexSandro Xavier Godinho
Roesler Evandro Guedes M achado Logística de M ateriais M arcelo Pereira
Fernando Roberto Dias Jeferson Cassiano Alm eida M arcos Alcides M edeiros
Equipe UnisulVirtual Zim m erm ann da Costa Junior
Higor Ghisi Luciano (coordenador) M aria IsabelAragon
Palavras do professor
Bom estudo!
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.
Carga horária
A carga horária total da disciplina é 60 horas/aula.
12
Atividades
Avaliação a Distância 1
Avaliação Presencial 1
13
Manipulação de vetores
Objetivos de aprendizagem
1
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.
Veja a seguir:
início
Veja.
início
16
início
Unidade 1 17
início
nota, conta, media, soma: numérico
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
18
nota: numérica
.......
nota 10 {variável armazena valor numérico 10}
escreva “O valor da variável nota é: “, nota {aqui, o valor impresso
será 10}
nota 8 {variável armazena valor numérico 8}
escreva “O valor da variável nota é: “, nota {aqui, o valor impresso
será 8, ou seja, sobrescrevemos o valor 10}
......
Unidade 1 19
20
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.
Importante
Alguns autores preferem utilizar uma sintaxe diferente
para a criação de vetores, conforme a seguir:
<nome do vetor>: vetor[<posição inicial do vetor>.. <posição final
do vetor>] <tipo de constante que o vetor poderá conter>
Unidade 1 21
22
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 assim sucessivamente. 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]
numérico 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.
Unidade 1 23
início
conta, media, soma: numérico
notas: vetor[6] numérico {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 valo 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 valo 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
24
início
{declaração das variáveis}
pares: vetor[25] numérico {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] numérico {armazena números ímpares}
subtracao: vetor[25] numérico {armazena a diferença entre números
pares e ímpares}
j,i: numérico {variáveis utilizadas para realizar o laço de repetição}
Unidade 1 25
Pseudocódigo:
início
VET1,VET2 : vetor [50] numérico
CONTADOR : numérico
para CONTADOR de 0 até 49 faça
leia “Digite um número: “,VET1[CONTADOR]
VET2[CONTADOR] VET1[CONTADOR] * 3
fim-para
fim
26
Pseudocódigo:
início
{declaração das variáveis}
CODIGOPRODUTO : vetor [400] literal
QUANTIDADE : vetor [400] numérico
CONTADOR : numérico
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
Pseudocódigo:
início
{declaração de variáveis}
ALUNOS : vetor[100] numérico {lembre que o tamanho do vetor é
100, mas ele vai de 0 até 99}
POS, PESQUISADO, CONT :numérico
{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
Unidade 1 27
28
início
{declaração de variáveis}
PRECOCOMPRA: vetor [100] numérico {armazena os preços de compra das mercadorias}
PRECOVENDA: vetor [100] numérico {armazena os preços de venda das mercadorias}
LUCRO, TOTLUCROMENOR10, TOTLUCROMENOR20, TOTLUCROMAIOR20: numérico
{variáveis utilizadas para armazenar o lucro, o lucro menor que 10%, menor do que
20% e maior do que 20%, respectivamente}
i : numérico {variável utilizada como contadora para laços de repetição}
Unidade 1 29
{saída do algoritmo}
escreva “Número de mercadorias com lucro inferior a 10%: “,
TOTLUCROMENOR10
escreva “Número de mercadorias com lucro maior ou igual a 10% e menor
do que 20%: “, TOTLUCROMENOR20
escreva “Número de mercadorias com lucro superior a 20%: “,
TOTLUCROMAIOR20
fim
Síntese
30
Até lá!
Unidade 1 31
Atividades de auto-avaliaçã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
32
Manipulação de matrizes
Objetivos de aprendizagem
2
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.
Linha 0 7.5
Coluna 0 Coluna 1 Coluna 2 Coluna n-1
34
- Nesta unidade você vai conhecer o que são matrizes e saber o porquê
de sua importância no mundo da programação.
Unidade 2 35
Pode ser representada por uma tabela, conforme você pode ver a
seguir:
36
Unidade 2 37
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 relacionas duas ou
mais variáveis, estaremos criando uma ou mais matrizes. A
sintaxe da criação é bastante simples conforme seção anterior.
38
Exemplo: NOTAS.
NOTAS: matriz [6][4] numérico
10.0
Unidade 2 39
início
MAT : matriz [4][5] numérico {matriz de dimensão 4x5. 4 linhas e 5
colunas}
SOMALINHA, SOMACOLUNA, LINHA, COLUNA : numérico
{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 que todas 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}
40
Unidade 2 41
início
MESES : matriz [12][3] literal
LINHA, NUM : numérico
para LINHA de 1 até 12 passo 1 faça
escreva “Digite o nome do “,LINHA,”º 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
42
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] : numérico
NOME: vetor [50] literal
I: numérico
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 ] < PRODUTOS[ I ][ 1 ] então
[PRODUTOS [ I ][ 2 ] PRODUTOS[ I ][ 1 ]
- PRODUTOS[ I ][ 0 ]
senão
[PRODUTOS [ I ][ 2 ] 0
fim-se
fim-para
{dados de saída do algoritmo}
escreva “Total de Compras: ”
para I de 0 até 49 passo 1 faça
escreva “Produto: “, NOME [i], “ Qtde = “, PRODUTOS[ I ] [ 2 ]
fim-para
fim
Unidade 2 43
Síntese
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.
44
Atividades de auto-avaliação
1 2 2 27
1 0 23 45
2 23 0 10
27 110 50 66 72 0
Unidade 2 45
Saiba mais
46
Manipulação de registros
Objetivos de aprendizagem
3
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.
início
{Declaração de variáveis}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO: literal
IDADE, DATANASC, NUMERO, CEP, FONE: numérico
.....
fim
48
Unidade 3 49
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.
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.
50
FICHA: registro
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO,
EMAIL: literal
IDADE, TELEFONE, NUMERO: numérico
fim-registro
Unidade 3 51
Nome: Idade:
Estado Civil:
Endereço:
Número:
Bairro: Cidade:
Estado: Telefone:
52
FICHA: registro
{variáveis da ficha}
fim-registro
FICHA: registro
{variáveis da ficha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: numérico
fim-registro
Unidade 3 53
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: numérico
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
54
Unidade 3 55
56
início
{declaração do registro FICHA}
tipo FICHA = registro
{variáveis da ficha}
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal
IDADE, NUMERO, TELEFONE: numérico
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
Unidade 3 57
58
nome nome
estadocivil estadocivil
endereco endereco
bairro bairro
cidade cidade
estado estado
idade, numero idade, numero
telefone telefone
Unidade 3 59
início
tipo FICHA = registro {criando um tipo FICHA}
NOME, CONTEUDO : literal
FREQUENCIA, MEDIA : numérico
fim-registro
60
início
{declaração do tipo FICHA}
tipo FICHA = registro
NOME, CANTOR, TIPO, PRODUTORA : literal
CODIGO, ANOPRODUCAO : numérico
fim-registro
{declaração do vetor CDS. Cada posição do vetor contém um registro do
tipo FICHA}
CDS : vetor [5000] FICHA
CANTORCONSUL : literal {Cantor a ser consultado}
POS : numérico {variável para percorrer o vetor CDS}
Unidade 3 61
62
Síntese
Unidade 3 63
Atividades de auto-avaliação
64
Unidade 3 65
66
Unidade 3 67
Segunda maneira:
início
tipo FICHA = registro
NOME: literal
CPF: literal
FONE: numérico
fim-registro
fichas: vetor[50] FICHA {declaração de um vetor de FICHAS}
..... {implementação do algoritmo}
fim
68
Saiba mais
Unidade 3 69
Tópicos avançados em
algoritmos computacionais
Objetivo de aprendizagem
Identificar os comandos e compreender a lógica em
pseudocódigo, proposta para resolver o problema.
Seções de estudo
Seção 1 Implementação de algoritmos de ordenação.
Seção 2 Implementação de algoritmos de busca.
Em caso de dúvida,
consulte a Unidade 3 de
Você se lembra dos passos para se fazer um bom algoritmo?
Lógica de Programação I. Para escrever um algoritmo precisamos descrever a seqüência de
instruções, de maneira simples e objetiva. Para isso, utilizamos
algumas técnicas:
72
4. Ser objetivo.
5. Procurar usar palavras que não tenham sentido dúbio.
Ao passo de cada algoritmo, mostro a seguir algumas dessas
e outras regras que nos possibilita construir algoritmos mais
complexos de alta qualidade.
Unidade 4 73
Pseudocódigo:
início
NOTAS: vetor[5] numérico {declaração do vetor de 5 posições}
CONT: numérica
para CONT de 0 até 4 passo 1 faça
escreva “Entre com uma nota”:
leia NOTAS[ CONT ]
fim-para
74
POS ULTIMA
Unidade 4 75
POS ULTIMA
POS ULTIMA
76
POS ULTIMA
POS ULTIMA
POS ULTIMA
POS ULTIMA
Unidade 4 77
POS ULTIMA
POS ULTIMA
78
POS ULTIMA
início
NOTAS: vetor [5] numérico {declaração do vetor de 5 posições}
POS, ULTIMA, AUX: numérico
{entrada de dados}
para POS de 0 até 4 passo 1 faça
escreva “Entre com a Nota: “
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}
AUX 0 {inicializa a variável AUX, variável que auxilia na troca de
valores entre as posições do vetor NOTAS}
{processamento da ordenação dos números}
enquanto ULTIMA < > 0 faça
Unidade 4 79
80
27 44 14 15 20
Pseudocódigo:
início
IDADES: vetor [5] numérico
ENTRADA: numérico {variável utilizada para armazenar a entrada de uma
idade a ser pesquisada no vetor IDADES.}
CONT: numérico {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
Unidade 4 81
{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
numérico 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 numérico
15. Dessa forma, vamos percorrer todo o vetor IDADES procurando pelo valor
numérico 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 <= 4 faça
{perceba que, enquanto o valor não for encontrado (IDADES [ CONT ] < > ENTRADA)
e não atingirmos o final do vetor IDADES (CONT <= 4 ), incrementamos a variável
CONT de 1. Isso significa irmos de posição em posição do vetor IDADES. Observe
a instrução lógica e aqui no exemplo. Como exercício, faça a tabela verdade e
verifique quando a condição se torna falsa, ou seja, quando que o laço de repetição
é finalizado.}
CONT CONT + 1
fim-enquanto
{na seqüência, verifica-se se há algum valor no vetor igual ao valor lido pelo cliente}
se IDADES[ CONT ] = ENTRADA então
escreva “O número “, ENTRADA, “ está na posição “, CONT
senão
escreva “O número “, ENTRADA, “ não foi encontrado.”
fim-se
fim-algoritmo
82
início
IDADES: vetor [5] numérico
ENTRADA: numérico
CONT: numérico
para CONT de 0 até 4 passo 1 faça
escreva “Especifique a idade do cliente: “
leia IDADES[ CONT ]
fim-para
CONT 0
escreva “Entre com a idade“
leia ENTRADA
enquanto IDADES[ CONT ] < > ENTRADA e CONT <= 4 faça
CONT CONT + 1
fim-enquanto
se IDADES[ CONT ] = ENTRADA então
escreva “O número “, ENTRADA, “ está na posição “, CONT
senão
escreva “O número “, ENTRADA, “ não foi encontrado.”
fim-se
fim-algoritmo
Unidade 4 83
Solucionando o problema
1. Lembrando sempre que o vetor é assumido como sendo
ordenado em ordem crescente. Vamos supor o seguinte vetor
chamado de VET:
10 44 58 78 100
84
o vetor desde o seu início. Parece uma vantagem enorme você não
acha, principalmente quando estamos trabalhando com vetores
de dimensões maiores?
10 44 58 78 100
58 78 100
10 44 58 78 100
Unidade 4 85
10 44 58 78 100
10 44 58 78 100
PRIMEIRA ULTIMA
10 44 58 78 100
86
PRIMEIRA: 0
ULTIMA: 4
METADE: (0 + 4)/2 = 2
10 44 58 78 100
10 44 58 78 100
PRIMEIRA ULTIMA
Unidade 4 87
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
Síntese
88
Atividades de auto-avaliação
Unidade 4 89
90
Unidade 4 91
92
Saiba mais
Unidade 4 93
Programação estruturada
Objetivos de aprendizagem
5
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 2 Modularização: retorno de valores e passagem de
parâmetros.
96
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.
Unidade 5 97
Veja um exemplo:
98
Unidade 5 99
100
início
{declarando as variáveis}
N1, N2, SOMA: numérico
{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
Unidade 5 101
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: numérico
{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
102
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,
o comando de escrita do valor numérico da variável N1 está
errado.
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
Unidade 5 103
início
{declarando variável N1}
N1: numérico
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
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
104
Unidade 5 105
106
FUNÇÃO_SOMA
início
{declarando as variáveis}
N1, N2, SOMA: numérico
{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
<identificador> onde identificador é o nome de uma variável
definida dentro da função}
retorna SOMA.
fim-função
início
{declaração da variável}
RESULTADO: numérico
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
Unidade 5 107
108
Unidade 5 109
FUNCAO_SOMA
início
{declaração de variáveis locais}
{comandos da função}
fim-função
110
início
N1, N2, RESULTADO: numérico
{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
início
{declaração de variáveis locais}
SOMA : numérico
{o parâmetro ou variável NUM1 armazena o valor 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
Unidade 5 111
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:
112
< lista de parâmetros> Lista dos parâmetros que serão utilizados (se houver)
Unidade 5 113
114
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.
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.
Unidade 5 115
116
Atividades de auto-avaliaçã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.
Unidade 5 117
118
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 entre eles.
A entrada de dados e a impressão do resultado devem ser feitas no
programa principal.
Unidade 5 119
Saiba mais
Para aprofundar os estudos leia os livros indicados a seguir.
120
Unidade 1
1) temperaturas: vetor[25] numérico
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: numérico {NVD = número do vôo desejado}
vetor: VOOS[500] numérico {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 < NUM_VOOS) então
se VOOS[ NVD ] > 0 então {há lugares disponíveis}
VOOS[ NVD ] VOOS[ NVD ] – 1 {1 lugar ocupado no vôo}
Unidade 2
1) Pseudocódigo
início
NOMES : vetor [27] literal
DISTANCIAS : matriz [27][27] numérico
LINHA, COLUNA : numérico
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
128
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 <= 27 faça
LINHA LINHA + 1
fim-enquanto
COLUNA 0
enquanto NOMES[COLUNA] <> CAPITAL2 ou COLUNA <= 27 faça
COLUNA COLUNA + 1
fim-enquanto
se LINHA <= 27 então
se COLUNA <= 27 então
escreva “A distância entre “,CAPITAL1,” e “,CAPITAL2,” é de “,
DISTANCIAS[LINHA][COLUNA], “kms.”
senão
escreva “Nome “,CAPITAL2,” não consta no cadastro!”
fim-se
senão
escreva “Nome “,CAPITAL1,” não consta no cadastro!”
fim-se
fim
129
Unidade 3
1) Declaração de um registro de um hóspede de um hotel de luxo:
FICHA: registro
NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO, EMAIL, MOTIVO_
VIAGEM: literal
TELEFONE, NUM_RESERVAS: numérico
fim-registro
130
leia CADASTRO[CONT].CIDADE
escreva “Estado:”
leia CADASTRO[CONT].ESTADO
escreva “CEP:”
leia CADASTRO[CONT].CEP
escreva “Telefone de Contato:”
leia CADASTRO[CONT].TELEFONE
fim-para
fim
{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
131
{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
início
tipo FICHA = registro
NOME, ENDERECO, CIDADE, UF, RG, CURSO, GRAU_ESC, CONJUGE : literal
CODIGO,CEP, DEPENDENTES, FONE, CPF, DATA_NASC : numérico
fim-registro
132
133
Unidade 4
1) Pseudocódigo
início
CODIGOPRODUTO : vetor[100] literal
QUANTIDADE : vetor[100] numérico
POS, ULTIMO, AUX1 : numérico
AUX2 : literal
para POS de 0 até 99 passo 1 faça
escreva “Entre com o código da mercadoria: “
leia CODIGOPRODUTO[POS]
fim-para
para POS de 0 até 99 passo 1 faça
escreva “Entre com a quantidade: “
leia QUANTIDADE[POS]
fim-para
POS 0
ULTIMO 99
AUX 0
enquanto ULTIMO < > 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
senão
POS POS + 1
fim-se
fim-enquanto
POS 1
ULTIMO ULTIMO - 1
fim-enquanto
134
2) Pseudocódigo
início
ALUNOS : vetor[100] numérico
POS, PESQUISADO, CONT :numérico
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
135
3) início
VET: vetor[5] numérico
NUMEROLIDO, PRIMEIRA, ULTIMA, METADE: numérico
POS: numérico
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 PRIMEIRA <= ULTIMA e não ACHOU faça
{cálculo da metade. Utilizamos a função aritmética DIV para realizar
uma divisão inteira, Veja Lógica de Programação I}
METADE DIV((PRIMEIRA + ULTIMA), 2)
{verifica se o número procurado já se encontra na metade. É o
primeiro teste}
se VET[ METADE ] = NUMEROLIDO então
ACHOU verdadeiro
fim-se
{caso o número procurado não esteja exatamente na metade o vetor,
verificamos se ele é maior do que esse número}
{Segundo teste}
se VET[ METADE ] < NUMEROLIDO então
PRIMEIRA METADE + 1
{Se ele não for maior, então só poderá ser menor do que o
número contido na metade do vetor. Terceiro teste}
senão
ULTIMA METADE – 1
136
fim-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
137
senão
POS POS + 1
fim-se
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, N1, N2: numérico
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
leia N2
se OPCAO < > 4 faça
se OPCAO = 1 então
{operação de subtração}
SUBTRACAO (N1, N2)
138
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
fim-enquanto
fim
139
início
{declaração de variáveis}
OPCAO, NUM1, NUM2, RESULTADO: numérico
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
140
{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
141
{implementação da função}
função FUNCAO_MAIOR (NUM1, NUM2, NUM3: numérico): numérico
142
Lógica de Programação II
Caderno de atividades
Design instrucional
Flavia Lumi Matuzawa
Viviane Bastos
2ª edição revista
Palhoça
UnisulVirtual
2007
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
Equipe UnisulVirtual.
005.1
G95 Gubert, Elton João
Lógica de programação II : caderno de atividades / Elton João Gubert,
Mário Gerson Miranda Magno Júnior, Patrícia Gerent Petry ; design instrucional
Flavia Lumi Matuzawa; Viviane Bastos. – 2. ed. rev. – Palhoça : UnisulVirtual, 2007.
73p. : il. ; 28 cm.
Créditos
Unisul - Universidade do Sul de Santa Catarina
UnisulVirtual - Educação Superior a Distância
Prezado aluno,
Mãos à obra!
Manipulação de vetores
Objetivos de aprendizagem
Conhecer os algoritmos de maiores complexidades.
Construir algoritmos com utilização de vetores.
Bom trabalho!
Exemplos resolvidos
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
Início
{Lê o total de alturas armazenadas no vetor
Altura}
Leia (“Digite o total de pessoas”,N)
150
{Iniciamos o laço}
Para I de 1 até N faça
MediaAltura ← Soma / N
Unidade 1 151
Algoritmo Pessoas
152
Unidade 1 153
154
Unidade 1 155
Algoritmo Concurso
Início
Continuar ← V
Para X de 1 até 50 faça
Leia (V _ Gabarito[X])
Fim Para
Leia (NumeroDocandidato)
Para X de 1 até 50 faça
Leia (V _ Respostas[X])
Fim Para
Escreva (NumeroDocandidato)
Escreva (ContadorAcertos)
Escreva (“Digite V para avaliar mais um
candidato ou F para parar”)
Leia (Continuar)
Fim Enquanto
Fim
156
Atividades propostas
Algoritmo Teste
I: numérico
V: Vetor[5] numérico
Início
Para I de 1 até 5 faça
V[I] ← I+1
Fimpara
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
Unidade 1 157
158
Manipulação de matrizes
Objetivos de aprendizagem
Entender o conceito de matrizes.
Exemplos resolvidos
VACA
1 2 3 4 5 6 7 8 9 10
DIA
1 15.5 18.5 10.2 18.3 20.3 15.2 9.5 13.2 11.2 23.4
2 18.2 15.2 9.9 15.0 19.9 20.2 12.9 15.4 13.4 25.4
3 16.2 12.2 10.9 16.2 20.0 17.2 13.3 16.2 12.2 24.9
30 15.6 11.0 10.9 16.3 18.9 17.2 15.2 14.2 12.6 23.9
160
Algoritmo Leite
vaca5 = 0
vaca8 = 0
dia10e20 = 0
dia01a30 = 0
Fim Para
Unidade 2 161
162
Algoritmo MatrizNumerica
Unidade 2 163
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
SomaPar ← 0
Para I de 1 até N faça
Para J de 1 até M faça
Se N = M então
Escreva (“Matriz é quadrada.”)
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
164
SomaLinha3 ← 0
{Resultado}
Unidade 2 165
Algoritmo MatrizSimetrica
I, J, N, M : Numérico
Simetrica : Lógica
Início
Leia (N)
I ← 1
Simetrica ← Verdadeiro
Enquanto I < N faça
J ← I + 1
Enquanto J < N faça
Se A[I, J] <> A[J, I] então
Simetrica ← Falso
166
J ← N
I ← N
Fim Se
J ← J + 1
Fim Enquanto
I ← I + 1
Fim Enquanto
Se Simetrica então
Escreva (“A matriz é simétrica”)
Senão
Escreva (“A matriz NÃO é simétrica”)
Fim Se
Fim
Unidade 2 167
Algoritmo Matriz
Início
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
168
SomaDiagSecund ← 0
Para I de 1 até 10 faça
SomaDiagSecund ← SomaDiagSecund +
Mat[I,(11-I)]
Fim Para
{Calculando a média}
Unidade 2 169
Atividades propostas
1) Considere a matriz M:
O Q * I
E * E S
R E U T
A * * S
Algoritmo Matriz
Variáveis
I,J: numérico
M: Matriz[4x4] literal
Aux: literal
Início
Para I de 1 até 4 faça
Para J de 1 até 4 faça
Ler (M[I,J])
Fim Para
Fim Para
Para I de 1 até 4 faça
Para J de I+1 até 4 faça
Aux ← M[I,J]
M[I,J] ← M[J,I]
M[J,I] ← Aux
Fim Para
Fim Para
Aux ← M[1,1]
M[1,1] ← M[4,4]
M[4,4] ← Aux
Aux ← M[2,2]
M[2,2] ← M[3,3]
M[3,3] ← Aux
Fim
170
Unidade 2 171
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
172
Manipulação de registros
Objetivos de aprendizagem
Entender o conceito de registro ou estrutura.
Exemplos resolvidos
Algoritmo Empresa
Var
{Agora, será declarada a variável FUNCIONARIO, que é
um vetor do tipo TFuncionário, na qual contém todas as
informações do funcionário}
Início
Leia (“Digite o total de funcionários: “,N)
Para I de 1 até N faça
174
Leia (FUNCIONARIO[I].Nome)
Leia (FUNCIONARIO[I].Idade)
Leia (FUNCIONARIO[I].Salario)
Leia (FUNCIONARIO[I].Sexo)
Leia (FUNCIONARIO[I].Endereco.Rua)
Leia (FUNCIONARIO[I].Endereco.Número)
Leia (FUNCIONARIO[I].Endereco.Cidade)
Fim Para
cont ← 0
Para I de 1 ate N faça
Se (FUNCIONARIO[I].Endereco.Cidade=“São Paulo”) então
cont ← cont + 1
Fim se
Fim Para
Algoritmo eleição
Unidade 3 175
X : numérico
Início
Para X de 1 até 5 faça
Leia (relatório[X].Partido)
Leia (relatório[X].Candidato)
Leia (relatório[X].Nome)
Leia (relatório[X].Votos)
Fim Para
Escreva (“Impressão do relatório de parciais:”)
Para X de 1 até 5 faça
Escreva (“Partido: ”, relatório[X].Partido)
Escreva (“Canditato:”, relatório[X].Nome)
Escreva (“Numero: ”, relatório[X].Candidato)
Escreva (“Votos: ”, relatório[X].Votos)
Fim Para
Fim
Algoritmo Aluno
ALUNO: registro
Nome: literal
Idade, Sexo: numérico {Sexo 0-Feminino 1-Masculino}
Altura: numérico
176
Início
Para I de 1 até 100 faça
Leia (CAD _ ALUNOS[I].Nome)
Leia (CAD _ ALUNOS[I].Idade)
Leia (CAD _ ALUNOS[I].Altura)
Leia (CAD _ ALUNOS[I].Sexo)
Escreva(CAD _ ALUNOS[I].Nome)
Escreva(CAD _ ALUNOS[I].Idade)
Fim Se
Fim Para
Fim
Unidade 3 177
Atividades propostas
178
Unidade 3 179
180
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.
Exemplos resolvidos
Ordenação de literais
Algoritmo OrdenarNomes
{Declarando variáveis}
Início
{Fazendo a leitura do vetor de nomes}
182
Unidade 4 183
I=2
J=I+1 = 3
184
I=4
J=I+1=5.
Fim Para
Fim Para
Unidade 4 185
Pesquisa
Seqüencial ou Linear
a,n,i: numérico
Início
Leia (a, n)
i ← 1
Enquanto (i<=n) E (x[i]<>a) faça
i ← i + 1
Fim Enquanto
Se i > n então
Escreva (“Não encontrou”)
Senão
Escreva (“Encontrou na posição : “, i)
Fim Se
Fim.
186
Algoritmo PesquisaBinaria
numeroPesquisa: numérico {número a ser
pesquisado}
n: numérico {quantidade de valores no vetor}
x: vetor[N] de numérico {vetor de tamanho “n” de
valores inteiros}
início, meio, fi nal, i: numérico
Início
Leia (numeroPesquisa , N)
Início ← 1
fi nal ← N
Enquanto (início <= fi nal) faça
Unidade 4 187
Final ← meio - 1
Senão
Se (numeroPesquisa > x[meio] ) então
Início ← fi nal + 1
Senão
Fim Se
Fim Se
Fim enquanto
188
Atividades propostas
Unidade 4 189
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.
190
Programação estruturada
Objetivos de aprendizagem
Entender os conceitos de programação estruturada.
Exemplos resolvidos
K, TamPalavra: numérico
Início
ExistePalavraMaiorQueSete ← Falso
192
Frase ← Frase + “ $”
K ← 0
TamPalavra ← 0
Enquanto (NÃO ExistePalavraMaiorQueSete) e
(Frase[K] <> “$”) faça
ExistePalavraMaiorQueSete ← Verdadeiro
Senão
TamPalavra ← 0
Fim Se
Fim Se
K ← K + 1
Fim Enquanto
Fim
Unidade 5 193
Algoritmo salário
SalBruto, NumDeFunc,
DescINSS, DescIRRF, SalLiq: numérico
Início
Leia (SalarioBruto)
Leia (NumDeFunc)
DescINSS CalculaINSS(SalarioBruto)
DescIRRF CalculaIRRF (SalarioBruto)
SalLiq = SalarioBruto – DescINSS – DescIRRF
Escreva (“O salário Liquido é:”, SalLiq)
Fim
194
Unidade 5 195
Atividades propostas
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).
196
Unidade 5 197
Unidade 1
1) Analise o algoritmo abaixo e mostre o desenvolvimento do
mesmo mediante teste de mesa.
Algoritmo Teste
Var
I:numérico
V: Vetor[5] numérico
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:
V[3] = 2 + 6 = 8
V[5] = V[V[2]] = V[3] = 4
Algoritmo loteriaesportiva
Var
Gabarito, Respostas: Vetor[13] numérico
NROCARTAO, CONTACERTOS, I : numérico
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
200
Resposta :
Algoritmo TROCA_TROCA
Var
V : VETOR[20] numérico
AUX, I, J : numérico
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<=I)
Var
A, B : Vetor[100] numérico
I, J : numérico
Início
Escreva (“Informe 100 valores”)
Para I de 1 até 100 faça
Leia (A[I])
Fim Para
J ← 1
Para I de 1 até 100 faça
Se (A[I] > 0) então
B[J] ← A[I]
J ← J + 1
Fim se
Fim Para
I ← 1
201
Unidade 2
1) Considere a matriz M:
O Q * I
E * E S
R E U T
A * * S
Variáveis
I,J: numérico
M: Matriz[4x4] literal
Aux: literal
Início
Para I de 1 até 4 faça
Para J de 1 até 4 faça
Ler (M[I,J])
Fimpara
Fimpara
Para I de 1 até 4 faça
Para J de I+1 até 4 faça
Aux ← M[I,J]
M[I,J] ← M[J,I]
M[J,I] ← Aux
Fimpara
Fimpara
Aux ← M[1,1]
M[1,1] ← M[4,4]
M[4,4] ← Aux
Aux ← M[2,2]
M[2,2] ← M[3,3]
M[3,3] ← Aux
Fim
Resposta:
I = 1 I = 1 I = 1
J = 2 J = 3 J = 4
AUX M[1,2] (Q) AUX M[1,3] (*) AUX M[1,4] (I)
M[1,2] M[2,1] (E) M[1,3] M[3,1] (R) M[1,4] M[4,1] (A)
M[2,1] AUX (Q) M[3,1] AUX (*) M[4,1] AUX (I)
I = 2 I = 2
J = 3 J = 4
AUX M[2,3] (E) AUX M[2,4] (S)
M[2,3] M[3,2] (E) M[2,4] M[4,2] (*)
M[3,2] AUX (E) M[4,2] AUX (S)
I = 3 I = 4
J = 4 J = 5
AUX M[3,4] (T) NADA ACONTECE
M[3,4] M[4,3] (*)
M[4,3] AUX (T)
202
Configuração final:
S E R A
Q U E *
* E * *
I S T O
Variáveis
M : MATRIZ[12,13] numérico
MAIOR : numérico
I, J: numérico
Início
Para I de 1 até 12 faça
Para J de 1 até 13 faça
Escreva (“Informe o valor de M[“,I, “,”,J, “]:”)
Leia (M[I,J])
Fim Para
Fim Para
203
Variáveis
M : MATRIZ[6,6] numérico
V : VETOR [36] numérico
A : numérico
K, I, J: numérico
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:
Principal Secundária
X X
X X
X X
X X
Resposta:
204
Algoritmo Matriz3
Var
M : MATRIZ[10,10] numérico
AUX, C, K, I, J: numérico
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
I 1
J 1
K 10
Repita
AUX M[I,C]
M[I,C] M[I,K]
M[I,K] AUX
I I + 1
J J + 1
K K – 1
Até (I>10 E J >10 E K <1)
205
Unidade 3
Resposta:
Algoritmo RelatorioSalarial
Tipo TFUNC
NOME, END, SEXO : literal
SALÁRIO : numérico
Var
FUNC : vetor [200] TFUNC
I, TOTALMUL,
MAIORSAL, MEDIASAL : numérico
Início
{leitura dos dados}
{Letra A}
TOTALMUL0
Para I de 1 até 200 faça
Se (FUNC[I].SEXO=”F”) E (FUNC[I].
SALARIO>1000) então
TOTMULTOTMUL + 1
Fim se
Fim Para
206
{Letra B}
MAIORSAL0
Para I de 1 até 200 faça
Se (FUNC[I].SEXO=”M”)E(FUNC[I].
SALARIO>MAIORSAL) então
MAIORSALFUNC[I].SALARIO
Fim se
Fim Para
{Letra C}
MEDIASAL0
Para I de 1 até 200 faça
MEDIASALMEDIASAL+ FUNC[I].SALARIO
Fim Para
MEDIASALMEDIASAL/200
Var
207
Início
{Leitura dos dados cadastrais}
{Processamento}
208
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
209
Unidade 4
Var
X, Posicoes: vetor[9999] numérico
K, N, cont: numérico
Inicio
Leia (K)
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
210
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] numérico
K, N: numérico
Encontrou: lógico
Início
Leia (N)
Encontrou ← Falso
K ← 1
Enquanto (Não Encontrou) e (K < 500) faça
Encontrou ← Numeros[K] = N
K ← K + 1
Fim Enquanto
Se Encontrou então
Escreva(“O número “ + N + “ foi encontrado”)
Senão
Escreva(“O número “ + N + “ Não foi
encontrado”)
Fim Se
Fim
211
Unidade 5
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).
Algoritmo Supermercado
Var
N, TOTALPAGO, VALORPROD, CONT : numérico
CODPROD :
literal
212
Início
Escreva “Digite o total de produtos
comprado”
Leia N
TOTALPAGO ← 0
Para CONT de 1 até N faça
Se (RESTO(N,K) = 0) Então
EhPrimo ← 0
Senão
EhPrimo ← 1
Fim Se
Retorne EhPrimo
Fim
213
Algoritmo DadosDoRetangulo
Variáveis
LadoA, LadoB : numérico
Início
Leia (LadoA, LadoB)
Escreva (“A área retângulo é:”,CalculaArea(LadoA,
LadoB))
Escreva (“O perímetro é:”,CalculaPerimetro(Lado
A, LadoB))
Fim
214
216