Sie sind auf Seite 1von 179

DISCIPLINA: ALGORITMOS CÓDIGO: 126101

CARGA HORÁRIA: 90 h CRÉDITOS: 6


OBJETIVOS DA DISCIPLINA

Ao final da disciplina, o aluno será capaz de identificar os aspectos teóricos, técnicos, práticos e
fundamentais para a construção de algoritmos e estará habilitado a propor uma estratégia de solução para
um determinado problema por meio de uma linguagem de programação.

DESCRIÇÃO DO PROGRAMA

1 - Conceitos Básicos de Programação


Ao final da Unidade I o aluno será capaz de compreender os conceitos básicos de algoritmo,
relacionando-os com programas, bem como identificar os elementos básicos na construção de algoritmos.

Módulos
Conceitos de Programas e Algoritmos
Fluxogramas
Constantes, Variáveis, Tipos e Pseudocódigo
Operadores

2 - Estruturas de Condição, Decisão e Repetição


Ao final da Unidade II o aluno será capaz de fazer uso de operadores, aplicando-os adequadamente aos
tipos de dados, bem como saberá utilizar as estruturas de condição, decisão e escolha na construção de
algoritmos.

Módulos
Estrutura de Condição
Estrutura de Decisão
Estrutura Para
Estrutura Enquanto e Faça-Enquanto

3 - Funções, Recursividade, Fila e Pilha


Ao final da Unidade III o aluno será capaz de compreender a utilização das funções, procedimentos
na construção de algoritmos, recursividade, Fila e Pilha.

Módulos
Funções de interface e matemática
Funções de cadeia e arquivos
Ponteiros e Recursividade
Lista, Fila e Pilha

4 - Vetor, Matriz, Ordenação, Pesquisa e Árvore binária


Ao final da Unidade IV o aluno será capaz de identificar e utilizar as estruturas de vetor e matriz na
construção de algoritmos e os métodos de ordenação, pesquisa e Árvore Binária.
Módulos
Vetor
Matriz
Árvore binária

CRITÉRIOS DE AVALIAÇÃO

Os alunos serão avaliados por meio de:


• Provas mensais;
• Participação no fórum via Internet;
• Outras atividades a critério do professor.

BIBLIOGRAFIA

• Fundamentos de Programação de Computadores Ana Fernanda Gomes Ascencio Edilene Aparecida V. de


Campus São Paulo: Pearson, 2012 – 3ª Ed.
• Lógica de programação Algorítmica Organizador: Sergio Guedes São Paulo: Perason, 2014
• Programação de Computadores – São Paulo: Pearson, 2014. Organizador: Everaldo Leme da Silva
• ASCENCIO, A. F. G.; CAMPOS, E. A. V. Fundamentos da Programação de Computadores. 2ª ed. Editora
Pearson Education, 2003.
• OLIVEIRA, A. B.; BORATTI, I. C. Introdução à Programação - Algoritmos. 3 ª ed. Visual Books, 1999.
101 – Algoritmos | Unidade 01

UNIDADE 1 – CONCEITOS BÁSICOS DE PROGRAMAÇÃO


MÓDULO 1 – CONCEITOS DE PROGRAMAS E ALGORITMOS
01

CONCEITO DE PROGRAMA
Nos dias de hoje o computador passou a ser a principal ferramenta em diversas áreas de trabalho, isso
ocorreu porque o computador é rápido, não cansa e não erra, mas não tem nenhuma iniciativa,
nenhuma criatividade e depende totalmente das instruções e comandos que recebe.

A finalidade do computador é receber, manipular dados e gerar resultados. A simples tarefa de digitar
um texto no Word é um exemplo dessa função: o usuário digita o texto puro, define a formatação, as
margens, insere figuras e, com o auxilio do computador, gera um resultado bem mais apresentável do
que se tivesse que fazer esse texto manualmente.

Outros exemplos como cálculos, ordenação e resumo de informações, são tarefas que o computador
consegue fazer com velocidade e precisão e em bases de dados com milhões de registros. Atividades
que antigamente necessitariam de muitas pessoas ou de muito tempo para concluí-las são rapidamente
realizadas por um único computador.

Como dito anteriormente, as instruções devem ser passadas detalhadamente para o computador e a
forma como essas instruções são passadas se dá através de programas.

Portanto, o programa de computador é uma espécie de idioma usado para repassarmos as ações que o
computador deve executar.

Um programa nada mais é que um tipo de algoritmo, ou seja, é uma sequência finita de ações que
descrevem como um problema pode ser resolvido. Sua particularidade é que suas operações são
específicas para o computador e restritas ao conjunto de instruções que o processador pode executar.
Podemos considerar esse conjunto de instruções como a primeira linguagem de programação do
computador, também chamada de linguagem de máquina.

Tradução para Linguagem de Máquina

© 2014 - AIEC - Associação Internacional de Educação Continuada

1
101 – Algoritmos | Unidade 01

02

Desenvolver um programa consiste em processar dados, isto é, recebê-los por um dispositivo de entrada
(teclado, mouse, scanner), realizar operações com os mesmos (processamento) e gerar respostas que
serão expressas em um dispositivo de saída (impressora, monitor) ou guardar os resultados em
dispositivos de armazenamento (disco rígido, pen-driver, CDs).

As etapas para o desenvolvimento de um programa são:

03

CONCEITO DE ALGORITMO
Segundo Cormen:

Algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto
de valores como entrada e produz algum valor ou conjunto de valores como saída.

Portanto, um algoritmo é uma sequência de passos computacionais, que transformam a entrada na


saída. Também podemos visualizar um algoritmo como uma ferramenta para resolver um problema

© 2014 - AIEC - Associação Internacional de Educação Continuada

2
101 – Algoritmos | Unidade 01

computacional. O enunciado do problema especifica em termos gerais o relacionamento entre a


entrada e a saída desejada. O algoritmo descreve um procedimento computacional específico para se
alcançar esse relacionamento da entrada com a saída.

Em resumo, podemos dizer que algoritmo é um conjunto finito de regras que prevê uma sequência de
operações destinadas à solução de um problema específico.

A importância do algoritmo está no fato de termos de especificar uma sequência de passos lógicos para
que o computador possa executar a tarefa desejada pelo usuário do programa. Lembre-se de que o
computador não tem vontade própria, isto é, faz apenas o que o algoritmo determina.

04

Alguns autores consideram que o algoritmo pode ser considerado a solução de um problema. Mas,
atenção:

No caso do algoritmo, os caminhos que levam à solução de um problema são muitos. Um


determinado problema pode ser resolvido com mais de um algoritmo, assim como podemos ter
algoritmos enormes ou pequenos para resolver o mesmo problema.

Um algoritmo que resolve um problema não pode ser considerado certo ou errado, mas ele pode ser
mais ou menos demorado na resolução do problema. Um algoritmo pode ser especificado em
linguagem comum, como um programa de computador, ou mesmo como um projeto de hardware.

Como exemplo, elencamos o algoritmo para ordenar números, onde tem uma entrada de números (45,
23, 85, 77) e deverá, depois de o algoritmo ser executado, ter uma saída (23, 45, 77, 85) ou seja, um
algoritmo para reordenar a sequência de números.

O melhor algoritmo para uma determinada aplicação depende, entre outros fatores, do número de itens
a serem ordenados, da extensão em que os itens já estão ordenados de algum modo, de possíveis
restrições sobre os valores de itens e da espécie de dispositivo de armazenamento a ser usado: memória
principal, discos ou fitas.

© 2014 - AIEC - Associação Internacional de Educação Continuada

3
101 – Algoritmos | Unidade 01

Ordenamos uma sequência de números pequenos, mas vamos agora citar o exemplo dado por Cormen
sobre o projeto Genoma, que tem como objetivos:

 identificar todos os 100.000 genes do DNA humano,


 determinar as sequências dos 3 bilhões de pares de bases químicas que constituem o DNA
humano,
 armazenar essas informações em bancos de dados e
 desenvolver ferramentas para análise de dados.

Cada uma dessas etapas exige algoritmos sofisticados. Um algoritmo eficiente pode gerar uma
economia de tempo, dinheiro, tanto humano quanto da máquina, à medida que mais informações
podem ser extraídas.

05

FORMAS DE REPRESENTAÇÃO DE UM ALGORITMO


Algoritmos podem ser representados pelas técnicas: descrição narrativa, fluxograma (diagramas de
blocos), como veremos a seguir.

 Descrição narrativa

Na descrição narrativa utiliza-se a língua portuguesa para descrever a sequência finita de regras dos
algoritmos.

06

 Fluxograma

Os fluxogramas são uma apresentação do algoritmo em formato gráfico. Cada ação ou situação é
representada por uma caixa. Tais caixas são ligadas por setas, que indicam o fluxo
das ações.

Algumas caixas especiais indicam a possibilidade de o fluxo seguir caminhos


distintos, dependendo de certas situações que podem ocorrer durante a execução
do algoritmo.

Tomadas de decisões são indicadas por caixas especiais, possibilitando ao fluxo de


ações tomar caminhos distintos. Também há representações para o início do

© 2014 - AIEC - Associação Internacional de Educação Continuada

4
101 – Algoritmos | Unidade 01

algoritmo e para o seu final, para que o fluxo do algoritmo possa ser determinado do seu princípio até o
seu término. A representação de algoritmos por meio de fluxogramas tem uma série de vantagens, que
serão apresentadas mais adiante.

Uma das buscas da humanidade é desenvolver uma máquina que pense e tome
decisões como o ser humano. Apesar de avanços essa máquina ainda não existe. O
exemplo representado pelo fluxograma acima obtém o nome do usuário e escreve
uma saudação.

Descrição Narrativa

PASSO 1 – Receber o nome do usuário.

PASSO 2 – Mostrar a mensagem “Olá” nome do usuário.

Resumindo, os fluxogramas (diagramas de blocos) consistem na utilização de símbolos para


representação da sequência finita de regras dos algoritmos.

Veja quais são as vantagens e desvantagens da utilização do fluxograma.

07

 Linguagem algorítmica

A linguagem algorítmica ou pseudocódigo consiste na definição de uma pseudolinguagem de


programação, cujos comandos são escritos em língua portuguesa, para representar estruturas
algorítmicas.

O pseudocódigo visa a trazer o máximo possível de benefícios, tentando diminuir o ônus da utilização da
linguagem de programação. A ideia é que o pseudocódigo seja um passo intermediário entre a
linguagem natural e a de programação. Ao contrário da linguagem de programação, o pseudocódigo
tem um grau de rigidez sintática intermediária, mas pode utilizar o idioma nativo.

As linguagens de programação são construídas utilizando no geral palavras em inglês. O pseudocódigo é


independente de linguagem e pode ser traduzido de uma forma quase direta para uma gama de
linguagens de programação. Um pseudocódigo bastante conhecido no Brasil é o Portugol, que

© 2014 - AIEC - Associação Internacional de Educação Continuada

5
101 – Algoritmos | Unidade 01

apresenta uma aceitação grande e tem suas razões para isso. Após a construção do algoritmo em
pseudocódigo, é necessário que mais um passo seja executado para que o algoritmo possa ser
transformado em programa, é necessário que seja transcrito para uma linguagem de programação. É a
transformação do pseudocódigo em código de alguma linguagem de programação real.

Para representarmos nossos algoritmos, utilizaremos uma adaptação do Portugol, que incluirá algumas
construções e mecanismos que julgamos adequados para o melhor aprendizado do programador,
procurando facilitar o processo de construção do algoritmo.

08

Observe as vantagens e desvantagens da utilização da linguagem algorítmica.

Exemplo:

#incluir <biblioteca>
principal( )
inicio

literal Nome;
escreva(“Digite seu nome”);
leia(Nome);
escreva(“Olá “, Nome);

fim

O deslocamento para a direita (identação) de uma instrução significa que esta está subordinada à
instrução anterior. Esse recuo facilita muito a compreensão e manutenção do algoritmo e dos códigos
fontes em uma linguagem de programação.

09

Na sua forma mais simples a multiplicação é uma maneira de se


adicionar uma quantidade finita de números iguais. O resultado da
multiplicação de dois números é chamado produto. Os números
sendo multiplicados são chamados de coeficientes ou operandos,

© 2014 - AIEC - Associação Internacional de Educação Continuada

6
101 – Algoritmos | Unidade 01

e individualmente de multiplicando e multiplicador. O exemplo a seguir tem o objetivo de elaborar um


algoritmo que mostre o resultado da multiplicação de dois números, utilizando descrição narrativa,
fluxograma e linguagem algorítmica.

Descrição Narrativa

PASSO 1 – Receber os dois números que serão multiplicados.

PASSO 2 – Multiplicar os números.

PASSO 3 – Mostrar o resultado obtido na multiplicação.

Fluxograma

Linguagem Algorítmica

#incluir <biblioteca>

principal( )

inicio

inteiro N1, N2, M;

escreva(“Digite dois números”);

leia(N1, N2);

M  N1 * N2;

escreva(“Multiplicação = “, M);

fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

7
101 – Algoritmos | Unidade 01

10

TÉCNICAS PARA RESOLVER UM ALGORITMO


Como visto anteriormente, algoritmo é um conjunto regras e operações que visam solucionar um
determinado problema. Um mesmo problema pode ser resolvido de formas diferentes, a solução pode
variar desde a forma mais simples até a mais complexa. A colaboração de membros da equipe ou
colegas, se possível, é sempre vantajosa. A seguir listamos algumas técnicas que podem facilitar a
elaboração do algoritmo.

1) Não se limite apenas às regras conhecidas: transgrida-as.


2) Não use apenas as suas próprias ideias: utilize as vantagens dos membros da equipe.
3) Adote uma definição flexível de solução: não se limite apenas às conhecidas.
4) Coopere com os membros da equipe para que o grupo saia ganhando.

Métodos para construção de algoritmos

1) Ler o enunciado, destacando pontos importantes.


2) Definir os dados de entrada (dados que serão fornecidos pelo usuário).
3) Definir o processamento (cálculos que serão realizados pelo algoritmo).
4) Definir os dados de saída (dados gerados após o processamento, que serão apresentados como
respostas).
5) Construir o algoritmo.
6) Testar o algoritmo realizando simulações.

Depois de ter sido realizada a análise do problema (métodos de 1 a 4), pode-se utilizar a descrição
narrativa para descrever a sequência dos passos do algoritmo, depois elaborar o fluxograma para
facilitar o entendimento do fluxo de execução e, por fim, representar o algoritmo em linguagem
algorítmica. Esta sequência permite o melhor entendimento do algoritmo. Com o aperfeiçoamento da
análise de problemas e dependendo da complexidade de um algoritmo, a fase de elaboração da
descrição narrativa e do fluxograma pode ser suprimida.

11

DESCRIÇÃO NARRATIVA
Veja, a seguir, exemplos de utilização da descrição narrativa na construção do algoritmo. As demais
formas de representação serão apresentadas nas próximas unidades.

Exemplo A

Um sanduíche é um tipo de comida que consiste em duas fatias de pão, entre as


quais é colocada carne, queijo e outros tipos de condimentos.

Elaborar um algoritmo para fazer um sanduíche utilizando a descrição narrativa

© 2014 - AIEC - Associação Internacional de Educação Continuada

8
101 – Algoritmos | Unidade 01

Solução:

PASSO 1: Pegar um pão.

PASSO 2: Cortar o pão ao meio.

PASSO 3: Pegar a maionese.

PASSO 4: Passar a maionese no pão.

PASSO 5: Pegar e cortar alface e tomate.

PASSO 6: Colocar alface e tomate no pão.

PASSO 7: Pegar o hambúrguer.

PASSO 8: Fritar o hambúrguer.

PASSO 9: Colocar o hambúrguer no pão.

12

Exemplo B

Dinheiro é o meio usado na troca de bens, na forma de moedas ou notas (cédulas), usado
na compra de bens, serviços, força de trabalho, divisas estrangeiras ou nas demais
transações financeiras, emitido e controlado pelo governo de cada país, que é o único que
tem essa atribuição.

Elaborar um algoritmo para sacar dinheiro em um terminal de banco 24 horas, utilizando


descrição narrativa.

Solução

Descrição narrativa para sacar dinheiro em um terminal de banco 14 horas:

PASSO 1: Ir até um banco 24 h.


PASSO 2: Colocar o cartão.
PASSO 3: Digitar a senha.
PASSO 4: Solicitar a quantia desejada.
PASSO 5: Se o saldo for maior ou igual à quantia desejada, sacar; senão, mostrar mensagem de
impossibilidade de saque.
PASSO 6: Retirar o cartão.
PASSO 7: Sair do banco 24 h.

© 2014 - AIEC - Associação Internacional de Educação Continuada

9
101 – Algoritmos | Unidade 01

Exemplo C

Um bolo é um tipo de alimento a base de massa de farinha, geralmente


doce e cozido no forno. Os bolos são um dos componentes principais das
festas, por vezes ornamentados artisticamente e ocupando o lugar central
da mesa.

Elaborar um algoritmo para preparação de um bolo de chocolate utilizando descrição narrativa.

Solução

Descrição narrativa para preparação de um bolo de chocolate:

PASSO 1: Bata quatro claras em neve.


PASSO 2: Adicione duas xícaras de açúcar.
PASSO 3: Adicione duas xícaras de farinha de trigo.
PASSO 4: Adicione quatro gemas.
PASSO 5: Adicione uma colher de fermento.
PASSO 6: Adicione duas colheres de chocolate.
PASSO 7: Bata por três minutos.
PASSO 8: Unte uma assadeira com margarina e farinha de trigo.
PASSO 9: Coloque o bolo para assar durante vinte minutos em temperatura média.

13

Exemplo D

Um pneu é um artefato circular feito de borracha, o qual pode ser inflado com ar
ou com água. Utilizado por veículos em geral, como carros de passeio,
caminhões, tratores, bicicletas, carros de mão etc.

Elaborar um algoritmo, utilizando descrição narrativa, para troca de um pneu


furado.

Solução

Descrição narrativa para troca de um pneu furado:

PASSO 1: Verifica qual pneu está furado.


PASSO 2: Pega o macaco, a chave de roda e o estepe.
PASSO 3: Afrouxa os parafusos.
PASSO 4: Com o macaco levanta o carro.
PASSO 5: Retira os parafusos.
PASSO 6: Substitui o pneu furado.

© 2014 - AIEC - Associação Internacional de Educação Continuada

10
101 – Algoritmos | Unidade 01

PASSO 7: Recoloca os parafusos.


PASSO 8: Com o macaco desce o carro.
PASSO 9: Aperta os parafusos.
PASSO 10: Guarda o macaco, a chave de roda e o pneu furado.

Exemplo E

Carta é uma comunicação manuscrita ou impressa devidamente acondicionada e


endereçada a uma ou várias pessoas.

Elaborar um algoritmo utilizando descrição narrativa com a sequência de ações


para enviar uma carta pelo correio.

Solução

Descrição narrativa para enviar uma carta pelo correio:

PASSO 1: Escreva a carta.


PASSO 2: Coloque a carta no envelope.
PASSO 3: Feche o envelope.
PASSO 4: Preencha o envelope.
PASSO 5: Coloque o selo no envelope.
PASSO 6: Vá até o correio.
PASSO 7: Entregue a carta ao funcionário do correio.
PASSO 8: Pague ao funcionário do correio.
PASSO 9: Confira o troco.

14

REFINAMENTO SUCESSIVO
O refinamento sucessivo de um algoritmo consiste na lapidação do mesmo. Nesta fase, são adicionadas
tarefas antes omitidas. São apresentadas soluções mais bem elaboradas.

O refinamento sucessivo é realizado após a construção do primeiro protótipo do algoritmo.

Em algoritmo, um problema pode ser resolvido de maneiras diferentes, porém, deve gerar sempre a
mesma resposta.

Exemplo F

Apresentar as etapas algorítmicas necessárias para a solução da equação


do 2º grau x² – 5x + 6 = 0.

© 2014 - AIEC - Associação Internacional de Educação Continuada

11
101 – Algoritmos | Unidade 01

 Δ  b 2  4ac


ax 2  bx  c  0  
x   b  Δ

 2a

Solução:

PASSO 1: Determinação dos coeficientes a, b, c.

a = 1, b = -5, c = 6

PASSO 2: Cálculo do delta.

∆ = b² – 4ac  ∆ = (- 5)² – 4.1.6 = 25 – 24 = 1

PASSO 3: Cálculo das raízes

 b  Δ  (5)  1 5  1
x  
2a 2.1 2

PASSO 4: Apresentação da solução

x1 = 2 ou x2 = 3.

15

Vejamos mais um exemplo.

Demonstrar um algoritmo utilizando descrição narrativa que solucione


uma equação do 2º grau.

Solução:

PASSO 1: Informe os coeficientes a, b, c.

PASSO 2: Calcule o delta.

PASSO 3: Calcule as raízes.

© 2014 - AIEC - Associação Internacional de Educação Continuada

12
101 – Algoritmos | Unidade 01

PASSO 4: Apresente os resultados na tela.

Abaixo seguem as etapas algorítmicas necessárias para a solução da equação do 2º grau x2 – 5x + 7 = 0.

Atenção: para uma melhor aprendizagem, antes de clicar sobre cada passo para ver a solução, tente
fazer o seu algoritmo.

Solução:

PASSO 1: Determinação dos coeficientes a, b, c.

a = 1, b = -5, c = 7

PASSO 2: Cálculo do delta.

∆ = b² – 4ac  ∆ = (- 5)² – 4.1.7 = 25 – 28 = -3

PASSO 3: Verificação do sinal de delta.


∆ < 0.

PASSO 4: Apresentação da solução

“Não existem raízes reais.”

16

Observe mais um exemplo de refinamento sucessivo.

Fazer o refinamento sucessivo do algoritmo que solucione uma


equação do 2º grau utilizando descrição narrativa.

Solução:

PASSO 1: Informe os coeficientes a, b, c.

PASSO 2: Calcule o delta.

PASSO 3: Verifique se o delta é maior ou igual a zero

PASSO 4: Se o delta for maior ou igual a zero, calcule as raízes.

PASSO 5: Se o delta for menor do que zero, informe que não existem raízes reais.

PASSO 6: Apresente os resultados na tela.

© 2014 - AIEC - Associação Internacional de Educação Continuada

13
101 – Algoritmos | Unidade 01

17

RESUMO
Neste módulo apresentamos os conceitos básicos de programa, a importância do programa como
ferramenta para execução de atividades. Apresentamos também os conceitos básicos de algoritmo, suas
características e sua importância para o desenvolvimento de programas. Descrevemos as técnicas e
métodos que auxiliam na análise e resolução de algoritmos, os quais devem seguir os passos:

1) Ler o enunciado, destacando pontos importantes.


2) Definir os dados de entrada (dados que serão fornecidos pelo usuário).
3) Definir o processamento (cálculos que serão realizados pelo algoritmo).
4) Definir os dados de saída (dados gerados após o processamento, que serão apresentados
como respostas).
5) Construir o algoritmo.
6) Testar o algoritmo realizando simulações.

Apresentamos, também, uma introdução a respeito das formas de representação de algoritmos:


Narração Descritiva, Fluxograma e Linguagem Algorítmica, exemplificando a descrição narrativa aplicada
a diferentes tipos de problemas. Com estes conceitos é possível entender a importância de um
programa de computador, a sua construção através de algoritmos e conhecer inicialmente as principais
formas de representação de algoritmos.

UNIDADE 1 – CONCEITOS BÁSICOS DE PROGRAMAÇÃO


MÓDULO 2 – FLUXOGRAMAS
01

SIMBOLOGIA
O fluxograma é uma forma universal de representação, pois se utiliza de figuras geométricas para
ilustrar os passos a serem seguidos para a resolução dos problemas. Também é chamado de diagrama
de blocos.

Os principais diagramas de bloco encontram-se na tabela abaixo.

© 2014 - AIEC - Associação Internacional de Educação Continuada

14
101 – Algoritmos | Unidade 01

O fluxograma é utilizado para organizar o raciocínio lógico a ser seguido para a resolução de um
problema ou para definir os passos para a execução de uma tarefa, dentro das estruturas sequenciais,
de decisão ou de repetição. Cada ação ou situação é representada por uma caixa. Tomadas de decisões
são indicadas por caixas especiais, possibilitando ao fluxo de ações tomar caminhos distintos.

02

ESTRUTURAS DE CONDIÇÃO
Num processo geral de execução de um algoritmo implementado, a execução começa na primeira linha
e vai avançando sequencialmente, executando o código, linha após linha, até chegar no final.
Entretanto, frequentemente surge a necessidade de colocar instruções dentro de um programa, as quais
só serão executadas caso alguma condição específica aconteça. Para esta finalidade, a maioria das
linguagens dispõe de estruturas de condição para realizar esta tarefa, o que pode variar de acordo com
a característica de cada linguagem.

© 2014 - AIEC - Associação Internacional de Educação Continuada

15
101 – Algoritmos | Unidade 01

O exemplo a seguir mostra um algoritmo utilizando fluxograma para ler dois números e apresentar no
vídeo a soma entre eles. Ao lado do fluxograma, inserimos a simbologia, de modo que você possa
identificar cada etapa do fluxo e habituar-se ao uso dos símbolos.

FLUXOGRAMA:

03

ESTRUTURAS DE DECISÃO
A estrutura de decisão permite que, durante o processamento, o algoritmo possa decidir qual será a
próxima ação, entre uma ou mais opções, dependendo do valor lógico de um determinado teste
(condição).

As estruturas de decisão podem ser simples ou compostas.

 Estrutura de decisão simples

É uma expressão que deverá retornar um valor de verdadeiro (V) ou de falso (F), e caso o resultado
dessa expressão seja verdadeiro, será executado o bloco de comandos que está dentro da estrutura.
Caso seja falso, a execução do programa ignora o bloco de comando e continua na linha seguinte à
estrutura de condição.

se <expressão-lógica> então:

<bloco de comandos>

fim-se

© 2014 - AIEC - Associação Internacional de Educação Continuada

16
101 – Algoritmos | Unidade 01

04

ESTRUTURA DE DECISÃO COMPOSTA


Oferece a possibilidade de executarmos uma determinada ação ou comando se o resultado da
expressão lógica for verdadeiro e de executarmos uma ação diferente se o resultado da expressão lógica
for falso.

O exemplo a seguir mostra um algoritmo utilizando fluxograma para ler dois números e apresentar a
soma entre eles se o primeiro for maior, se o segundo número for maior, é feita a multiplicação desses
números.

O fluxo com a identificação V executa caso o teste seja verdadeiro. Caso o teste resulte em falso, o
fluxograma executa a outra parte do algoritmo.

© 2014 - AIEC - Associação Internacional de Educação Continuada

17
101 – Algoritmos | Unidade 01

E se os números forem iguais, qual fluxo será executado? Qual é o resultado do teste A>B, verdadeiro ou
falso?

Resposta

Resposta: Se os números forem iguais, o resultado de A>B é falso.

05

Estruturas de decisão podem ser encadeadas. Por exemplo, se o usuário desejar escolher uma opção
entre várias.

© 2014 - AIEC - Associação Internacional de Educação Continuada

18
101 – Algoritmos | Unidade 01

Se o usuário digitar qualquer coisa diferente de 1 ou 2, o que acontece?

Resposta

Resposta: O fluxograma mostra a mensagem “Digite uma opção válida” e volta para a tela inicial.

06

ESTRUTURAS DE REPETIÇÃO
A estrutura de repetição permite que durante o processamento, o algoritmo repita uma mesma tarefa
um número determinado de vezes.

Em outras palavras, a estrutura de repetição propõe uma maneira de repetir um conjunto de


procedimentos até que determinado objetivo seja atingido. Apenas se o objetivo for atingido, a
repetição se encerra.

© 2014 - AIEC - Associação Internacional de Educação Continuada

19
101 – Algoritmos | Unidade 01

Vejamos alguns exemplos.

Demonstrar um algoritmo que escreve 100 vezes: “Devo estudar Algoritmo”.

O exemplo a seguir apresenta uma estrutura de repetição com uma condição de


controle, essa condição é uma expressão lógica, que é executada, determinando se a
repetição prossegue ou não. Em suma, a repetição acontecerá até que chegue ao valor 100.

No fluxo anterior, N funciona como um contador de passos, após a exibição da mensagem, N passa a ter
seu valor acrescido de 1 (NN+1), por isso, quando N for maior que 100, a expressão N<=100 será falsa
e o fluxograma vai para o fim.

07

As estruturas de repetição permitem que os passos sejam executados por uma determinada quantidade
de vezes ou até que se obtenha uma determinada condição.

No exemplo a seguir a mensagem “Devo estudar Algoritmo” será exibida até que o usuário escolha a
opção Não.

© 2014 - AIEC - Associação Internacional de Educação Continuada

20
101 – Algoritmos | Unidade 01

08

No exemplo a seguir a mensagem “Devo estudar Algoritmo” será exibida por quantas vezes o usuário
informar.

As estruturas de decisão e repetição serão explicadas com mais detalhes na próxima unidade quando
serão aplicadas nos algoritmos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

21
101 – Algoritmos | Unidade 01

09

CONECTORES
Os conectores são usados quando o algoritmo se torna extenso e sua representação fica complexa.
Nestes casos o conector é usado para ligar diversas partes do fluxograma.

Conectores podem ser identificados por números ou letras

Os conectores A, B e C ligam o fluxograma a outra parte que está logo a seguir.

© 2014 - AIEC - Associação Internacional de Educação Continuada

22
101 – Algoritmos | Unidade 01

10

RESUMO
Neste módulo apresentamos o Fluxograma ou Diagrama de Blocos como forma de representação do
algoritmo, sua finalidade e o significado dos símbolos. Explicamos também a função de cada símbolo
mostrando alguns exemplos. As estruturas de decisão, que podem ser simples e compostas, e as
estruturas de repetição (que permitem que os passos sejam executados por uma determinada
quantidade de vezes ou até que se obtenha uma determinada condição), com e sem blocos de
comando, também foram demonstradas e exemplificadas, os exemplos mostram em quais situações
cada estrutura pode ser utilizada. Foi mostrada ainda a importância da utilização dos conectores para
organizar fluxogramas extensos visando facilitar sua visualização. Com essas informações é possível
representar um algoritmo de forma gráfica com o objetivo de facilitar o entendimento e a visualização
da ordem de execução dos passos do algoritmo.

UNIDADE 1 – CONCEITOS BÁSICOS DE PROGRAMAÇÃO


MÓDULO 3 - CONSTANTES, VARIÁVEIS, TIPOS E
01
PSEUDOCÓDIGO
CONSTANTES E VARIÁVEIS
Dentro de um algoritmo podemos encontrar basicamente duas classes diferentes de dados, conhecidas
como constantes e variáveis.

Uma constante é quando seu valor não se altera ao longo do tempo em que o algoritmo é executado,

© 2014 - AIEC - Associação Internacional de Educação Continuada

23
101 – Algoritmos | Unidade 01

ou seja, permanece o mesmo valor do início até o final da execução.

Um dado que pode ter seu valor alterado durante a execução do programa é tido como uma variável.

Uma constante tem valor fixo e inalterável, podendo ser um caractere, uma cadeia de caracteres ou um
número:

 uma constante caractere é escrita entre aspas simples,


 uma constante cadeia de caracteres entre aspas duplas e
 constantes numéricas como o número propriamente dito.

Uma constante muito comum no meio matemático e, por consequência, no meio computacional, é o
número π = 3,141592...

O número carrega consigo uma propriedade geométrica intrínseca das formas


circulares, tanto bidimensionais, como a circunferência, quanto tridimensionais,
como a esfera. Este fato faz deste número uma constante física.

02

CONSTANTE GRAVITACIONAL

Normalmente uma pessoa diz que está pesando 60 quilos, no entanto, o que ela quer dizer é que sua
massa é de 60 quilos.

Peso é uma força que é calculada pela massa multiplicada pela aceleração gravitacional da Terra.

Neste caso a constante gravitacional é utilizada para saber qual a força que um corpo de 60 Kg exerce
na superfície do planeta Terra. O cálculo do peso é feito através da fórmula:

© 2014 - AIEC - Associação Internacional de Educação Continuada

24
101 – Algoritmos | Unidade 01

Peso = Massa * g;
onde g = 9,78 m/s²

03

Uma variável representa a posição da memória do computador. Um algoritmo recebe dados que
precisam ser armazenados no computador, para que sejam utilizados no processamento. O
armazenamento de dados é feito na memória do computador.

A variável possui nome e tipo, além disso, o conteúdo que ela armazena pode variar ao longo do tempo,
durante a execução de um programa.

04

TIPOS DE DADOS
Para otimizar os recursos computacionais disponíveis e acelerar o processamento das informações, é
necessário que os dados sejam armazenados no computador de acordo com o tipo de informação que
se desejar disponibilizar, bem como o tipo de operação que será executada. Assim, os dados são
representados pelas informações a serem processadas por um computador.

A seguir são definidos os tipos de dados mais comuns encontrados na maioria das linguagens de
programação.

Nas variáveis, os tipos básicos de dados mais utilizados são:

 numérico,
 lógico e
 literal ou caractere.

Vejamos cada um a seguir.

 Dado numérico

Os dados numéricos dividem-se em dois grupos: inteiros e reais.

© 2014 - AIEC - Associação Internacional de Educação Continuada

25
101 – Algoritmos | Unidade 01

05

 Dado lógico

Os dados lógicos também são chamados de dados booleanos. Podem assumir os valores lógicos
verdadeiro ou falso. Os dados lógicos, quando armazenados na memória do computador ocupam um
byte.

Os dados lógicos assumem os valores lógicos definidos pela Lógica Matemática, isto é, pelo princípio da
não contradição e pelo princípio do terceiro excluído.

Segundo o princípio da não contradição, uma proposição não pode ser verdadeira e falsa ao mesmo
tempo. E pelo princípio do terceiro excluído, não há uma terceira opção para que a proposição assuma.
Sendo assim, ou a proposição assume o valor lógico VERDADEIRO ou assume o valor lógico FALSO.

São exemplos de dados lógicos:

 V ou Verdadeiro
 F ou Falso

© 2014 - AIEC - Associação Internacional de Educação Continuada

26
101 – Algoritmos | Unidade 01

Para saber mais sobre os princípios da não contradição e do terceiro excluído, acesse
http://www.academia.edu/3658762/Principios_de_identidade_nao-contradicao_e_terceiro_excluido

06

 Dado literal

O dado literal ou caractere é formado por um único caractere ou por uma cadeia de caracteres.

Os dados literais podem ser as letras maiúsculas, as letras minúsculas, os números (não podem ser
usados para cálculo) e os caracteres especiais (&, #, @, ?, +). O dado literal quando armazenado na
memória do computador, ocupa 1 byte para cada caractere.

Agora, observe na tabela abaixo, alguns exemplos de tipos de dados, incluindo o dado literal.

07

Em um fluxograma, as variáveis identificadas no símbolo de entrada manual recebem as informações


digitadas pelo usuário. No símbolo de processo a operação indica qual variável recebe o resultado do
cálculo, conforme o exemplo a seguir.

© 2014 - AIEC - Associação Internacional de Educação Continuada

27
101 – Algoritmos | Unidade 01

No trecho do fluxograma anterior podemos identificar as variáveis: A, B, Op e R.

08

VARIÁVEIS DE ENTRADA E DE SAÍDA


É possível imaginar uma variável como sendo um local onde se pode colocar qualquer valor do conjunto
de valores possíveis para o tipo definido para a variável.

As variáveis podem ser denominadas de entrada ou de saída.

© 2014 - AIEC - Associação Internacional de Educação Continuada

28
101 – Algoritmos | Unidade 01

Observe os exemplos a seguir.

Exemplo 1

Quais são as variáveis de entrada e de saída de um


algoritmo que recebe um valor de capital, uma taxa
de juros e prazo, em meses, e calcula a prestação de
empréstimo?

Resposta:

Dados de entrada:
Valor de capital
Taxa de juros
Prazo, em meses

Dados de Saída:
Prestação

09

Exemplo 2

Quais são as variáveis de entrada e de saída do algoritmo que calcula o valor


líquido de uma fatura, dado o valor bruto e percentual de desconto?

Resposta:

Dados de entrada:
Valor bruto
Percentual de Desconto

© 2014 - AIEC - Associação Internacional de Educação Continuada

29
101 – Algoritmos | Unidade 01

Dados de Saída:
Valor Líquido

Exemplo 3

Quais as variáveis de entrada e de saída do algoritmo que calcula o quadrado de um


número real?

Resposta:

Dados de entrada:
Número real

Dados de Saída:
Quadrado do número real

10

Exemplo 4

No fluxograma a seguir, quais os dados de entrada e de saída?

Resposta:

© 2014 - AIEC - Associação Internacional de Educação Continuada

30
101 – Algoritmos | Unidade 01

Dados de entrada: A e B

Dados de Saída: R

11

PALAVRAS RESERVADAS E IDENTIFICADORES


Palavras reservadas são palavras que pertencem à sintaxe de um pseudocódigo ou uma linguagem de
programação. Não podem ser utilizadas para mais nada, além do propósito inicial a que se destinam.

Exemplos de palavras reservadas em um pseudocódigo: inicio, declare, fim, literal, real, se, senão, entre
outras.

Exemplos de palavras reservadas da linguagem de programação C: case, char, if, else, entre outras.

Os identificadores são os nomes das variáveis, dos programas, das constantes, das funções e dos
procedimentos.

Regras para formação dos identificadores:

1) Caracteres que podem ser utilizados: números, letras maiúsculas, letras minúsculas e o
caractere sublinhado.
2) Primeiro caractere deve ser sempre uma letra ou o caractere sublinhado.
3) Não são permitidos os espaços em branco e caracteres especiais (@, $, +, -, %, !).
4) Não se pode utilizar palavras reservadas.

Exemplos:

Na tabela a seguir estão indicados os identificadores de variáveis válidos e os inválidos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

31
101 – Algoritmos | Unidade 01

12

PSEUDOCÓDIGO – PORTUGOL
O pseudocódigo é um padrão textual de representação de um algoritmo, pode ser denominado também
de português estruturado ou Portugol.

Seus comandos e operações são semelhantes aos da linguagem de programação, o que facilita o
entendimento da estrutura desses comandos e ajuda a traduzir o código para a linguagem de
programação.

A representação de um algoritmo na forma de Exemplo


pseudocódigo é a seguinte:
Algoritmo “Média”
Algoritmo Nome_Do_Algoritmo Variáveis
Variáveis N1, N2, Média: real
Declaração das variáveis Início
Procedimentos Escreva (“informe o primeiro valor”)
Declaração dos procedimentos Leia (N1)
Funções Escreva (“informe o segundo valor”)
Declaração das funções Leia (N2)
Início Média <- (N1+N2)/2
Corpo do Algoritmo Se Média >= 7 Então
Fim Escreva (“Aprovado!!”)
Senão
Escreva (“Reprovado!!)”
Fim se
Fim.

© 2014 - AIEC - Associação Internacional de Educação Continuada

32
101 – Algoritmos | Unidade 01

As unidades que seguem utilizarão em seus exemplos o padrão da linguagem algorítmica PORTUGOL. O
PORTUGOL foi desenvolvido com o intuito de aproximar o aluno da linguagem C, ainda durante a fase
inicial do aprendizado, evitando dificuldades de aprendizagem com as diferenças entre as sintaxes do C
e do PORTUGOL.

13

Apresentamos abaixo a sequência básica da sintaxe de um algoritmo escrito em PORTUGOL.

Sintaxe:

// instrução que inclui bibliotecas de funções pré-definidas


#incluir <biblioteca>
principal( ) // instrução que caracteriza um nome ao algoritmo
Inicio // instrução que marca o início da estrutura sequencial
declare variáveis; // instrução que declara as variáveis e os tipos de dados
bloco_de_comandos; // instruções que definem os comandos sequenciais
Fim // instrução que marca o término da estrutura sequencial

Fluxograma:

Em fluxograma só são declaradas as variáveis de entrada, mas em linguagem algorítmica todas as


variáveis são declaradas.

14

DECLARAÇÃO DE VARIÁVEIS E CONSTANTES

© 2014 - AIEC - Associação Internacional de Educação Continuada

33
101 – Algoritmos | Unidade 01

Pode-se considerar as variáveis como “apelidos” para endereços de memória que armazenam dados.
Todas as variáveis de um programa C devem ser declaradas antes de serem usadas para que seja
alocada memória para as mesmas.

As variáveis são declaradas conforme os tipos de dados utilizados (numérico, literal ou lógico). Ao longo
do desenvolvimento do programa e do algoritmo, o dado será manipulado através do nome do seu
identificador, que poderá ser uma constante ou uma variável. Assim, o primeiro passo para utilizarmos
os dados é a nomeação do seu identificador e a definição do seu tipo ou do seu valor. A definição dos
dados em algoritmos também é conhecida como declaração.

Um identificador, variável ou constante, declarado com um determinado tipo de dados ficará restrito a
armazenar valores daquele tipo específico (inteiro, real, caractere, lógico).

Na maioria dos casos, se houver uma tentativa de atribuir a um identificador um tipo diferente daquele
para o qual ele foi definido, o sistema não irá funcionar adequadamente.

Exemplo de declaração de variáveis e constantes:

var

marca, modelo: caractere;

ano: inteiro;

preco: real;

vendido: lógico;

constante

PI=3.141592654;

MAXIMO=100;

As variáveis receberam um TIPO específico e as constantes receberam um VALOR.

15

Como já vimos, para que os programas manipulem valores, estes devem ser armazenados em variáveis e
para isso, devemos declará-las de acordo com a sintaxe:

NomeVariável : Tipo

Ex.: VARIÁVEIS

SalMes, Inss: REAL

Nome: CARACTER[30] // Cadeia de caracteres

© 2014 - AIEC - Associação Internacional de Educação Continuada

34
101 – Algoritmos | Unidade 01

Sexo: CARACTER // Caractere

Nesta definição, deveremos seguir algumas regras:

 VARIÁVEIS é a palavra chave, que deverá ser utilizada uma única vez na definição das variáveis e
antes do uso das mesmas;
 Variáveis de tipos diferentes deverão ser declaradas em linhas diferentes;
 Em uma mesma linha, quando quisermos definir variáveis de mesmo tipo, deveremos usar o
símbolo de vírgula (,) para separar as mesmas.
 Não se deve esperar para declarar variáveis quando precisar delas; isto pode confundir um
programador imprudente e embaralhar o escopo do código.
 Não se deve declarar variáveis locais com nomes iguais a de outras variáveis de nível superior.

Observe a seguir exemplos de declaração de variáveis.

Exemplo A

Apresente a sintaxe para declaração da variável A, que armazena a


quantidade de alunos de uma sala.

Solução

Solução:

inteiro A;

Exemplo B

Apresente a sintaxe para declaração da variável B, que armazena a temperatura de um


determinado objeto.

Solução

Solução:

real B;

© 2014 - AIEC - Associação Internacional de Educação Continuada

35
101 – Algoritmos | Unidade 01

16

RESUMO
Neste módulo vimos que, dentro de um algoritmo, podemos encontrar basicamente duas classes
diferentes de dados: constantes e variáveis. Foram apresentados os seus e a sua aplicação dentro de um
algoritmo, detalhados os tipos de dados das variáveis: numérico, lógico e literal, conceituadas e
exemplificadas as variáveis de entrada e saída nos algoritmos. As regras de identificação das variáveis
foram apresentadas. Vimos que o pseudocódigo é um padrão textual de representação de um
algoritmo, e pode ser denominado também de português estruturado ou Portugol. Foi demonstrada a
sua estrutura básica e foi descrita e exemplificada a estrutura inicial que é a declaração de variável. Com
estes conceitos é possível definir as constantes e variáveis de entrada e saída, e iniciar a construção de
um algoritmo com a declaração de variáveis.

UNIDADE 1 – CONCEITOS BÁSICOS DE PROGRAMAÇÃO


MÓDULO 4 – OPERADORES
01

OPERADOR DE ATRIBUIÇÃO
A operação de atribuição permite que se forneça um valor numérico, literal ou lógico ou, ainda, um
valor numérico de uma expressão a uma variável. O comando de atribuição é representado pelo símbolo
“”.

Como pode ser visto abaixo, no lado esquerdo do operador  será colocado o nome da variável que irá
receber o valor, e do lado direito o valor que será armazenado na mesma. A seguir são apresentados
alguns exemplos de atribuições de valores a variáveis:

TipoVeiculo  carro;

Cor  Azul;

Sintaxe:

variável  expressão

Exemplo de sintaxe de declaração de variáveis com a operação de atribuição.

© 2014 - AIEC - Associação Internacional de Educação Continuada

36
101 – Algoritmos | Unidade 01

#incluir <biblioteca>
principal( )
inicio
inteiro x;
literal y[4];
lógico teste;
x  4;
x  x + 2;
y  “aula”;
teste  falso;
bloco_de_comandos;
fim

02

Agora é sua vez. Responda:

Qual o valor das variáveis A, B, C ao final do processamento do pseudocódigo abaixo?

#incluir <biblioteca>

principal( )

inicio

inteiro A, B, C;

A  10;

B  5;

C  1;

A  B – C;

B  A + C;

C  A – B;

A  A + C – B;

C  B – C;

B  A + C – B;

escreva(A, B, C);

fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

37
101 – Algoritmos | Unidade 01

Resposta

Resposta:

A = –2; B = –1, C = 6)

03

COMANDO DE ENTRADA
Os algoritmos necessitam receber informações de fora do próprio algoritmo, a partir da entrada padrão
(em geral, o teclado). Ferrari cita o exemplo de um sistema de locadora: sempre que alugamos um filme,
o sistema irá necessitar de algumas informações, como o nosso código de cliente (ou o nome) e o nome
da fita que estamos locando. Essas informações são fornecidas pelo sistema a partir de comandos de
entrada de dados.

Para realizarmos a entrada de dados utilizaremos o comando leia. Ao utilizar o comando leia, o
programador deve saber de antemão qual a variável que irá armazenar o valor que será fornecido pelo
usuário. No caso do exemplo, os valores que seriam fornecidos pelo usuário são referentes ao código do
cliente e ao nome da fita que o mesmo está locando. Sendo assim, é necessário declarar variáveis que
possam armazenar valores que sejam compatíveis com as informações solicitadas ao usuário. Saiba+

Os cálculos do computador são de pouco valor a não ser que, primeiro, se possa fornecer os dados sobre
os quais estes cálculos serão efetuados e, segundo, se for possível visualizar os resultados destes
cálculos.

Exemplo: refazer o exemplo anterior supondo que o usuário tenha entrado:

a) A = –2, B = –1, C = 6.

b) A = –3, B = –2, C = –1

O comando de entrada é utilizado para receber os dados digitados pelo usuário, por meio de um
dispositivo de entrada (teclado, mouse, monitor). Os dados recebidos são armazenados em variáveis,
conforme os tipos que os comportem. O comando de entrada é representado pela palavra LEIA.

Sintaxe:

leia(nome_variável);
leia(variável-1, variável-2, ..., variável-n);

Saiba+

Por exemplo, a informação do código do cliente pode ser um valor do tipo inteiro, então é necessário

© 2014 - AIEC - Associação Internacional de Educação Continuada

38
101 – Algoritmos | Unidade 01

que declaremos no algoritmo uma variável desse tipo. Seguindo esse mesmo raciocínio, a informação do
nome da fita pode ser uma informação do tipo caractere, sendo também necessário que declaremos no
algoritmo uma outra variável para receber essa informação.

04

COMANDO DE SAÍDA
O comando de saída é utilizado para apresentar ao usuário perguntas necessárias ao processamento e
respostas obtidas com o mesmo, nos dispositivos de saída (monitor, impressora). As informações
apresentadas ao usuário podem ser conteúdos de variáveis ou mensagens. O comando de saída é
representado pela palavra ESCREVA.

Sintaxe:

escreva(“mensagens”);
escreva(nome_variável);
escreva(“mensagens”, nome_variável);

Observe os exemplos a seguir. Tente fazer o que se pede e somente depois clique para ver a resposta.

Exemplo 1

Elaborar um algoritmo que receba três notas de um aluno e retorne a média


aritmética do mesmo, utilize fluxograma e linguagem algorítmica.

© 2014 - AIEC - Associação Internacional de Educação Continuada

39
101 – Algoritmos | Unidade 01

05

Exemplo 2

Elaborar um algoritmo que recebe três números reais some os dois primeiros e
multiplique o resultado pelo terceiro, utilize fluxograma e linguagem
algorítmica.

© 2014 - AIEC - Associação Internacional de Educação Continuada

40
101 – Algoritmos | Unidade 01

Descrevendo lembretes no corpo do programa

Para descrever um lembrete em um corpo de programa, utiliza-se o comando //.

Sintaxe:

// Lembrete

06

OPERADORES ARITMÉTICOS E ORDEM DE PRECEDÊNCIA


Os operadores aritméticos são os utilizados nos cálculos algébricos.

As operações aritméticas fundamentais são: adição, subtração, multiplicação, divisão, potenciação,


divisão inteira e o resto (módulo).

A tabela a seguir apresenta os operadores aritméticos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

41
101 – Algoritmos | Unidade 01

Durante a execução de uma expressão que envolve vários operadores, deve-se seguir uma ordem de
prioridades, caso contrário, corre-se o risco de obter valores que não representem o resultado
esperado.

Veja a seguir alguns exemplos de operadores aritméticos e, na sequência, a ordem de precedência


desses operadores.

07

Exemplo A

A temperatura é um parâmetro físico descritivo de um sistema que


vulgarmente se associa às noções de frio e calor, bem como às
transferências de energia térmica, mas que se poderia definir, mais
exatamente, sob um ponto de vista microscópico, como a medida da
energia cinética associada ao movimento (vibração) aleatório das
partículas que compõem um dado sistema físico.

Elaborar um algoritmo que utilize os operadores aritméticos e


converta uma temperatura Fahrenheit em uma correspondente na escala Celsius, utilize fluxograma e
linguagem algorítmica.

© 2014 - AIEC - Associação Internacional de Educação Continuada

42
101 – Algoritmos | Unidade 01

08

Exemplo B

Elaborar um algoritmo que receba três notas, e os respectivos pesos,


calcule e mostre a média ponderada dessas notas, utilize fluxograma e
linguagem algorítmica.

n1p1  n 2 p 2  n 3p3
Mp 
p1  p 2  p3

© 2014 - AIEC - Associação Internacional de Educação Continuada

43
101 – Algoritmos | Unidade 01

09

ORDEM DE PRECEDÊNCIA
Quando uma expressão aritmética precisa ser avaliada num algoritmo, o analisador processa a
expressão dando prioridade para certos operadores.

A tabela a seguir apresenta a ordem de prioridade dos operadores numa expressão aritmética, chamada
de precedência de operadores.

Conforme o quadro acima, as primeiras subexpressões a serem resolvidas serão aquelas embutidas em
parênteses mais internos, em seguida, as potências, depois as multiplicações e divisões, e assim por
diante, seguindo a ordem.

Vejamos, a seguir, alguns exemplos.

Dica

A maneira mais fácil de verificar a ordem de execução das operações numa expressão aritmética é

© 2014 - AIEC - Associação Internacional de Educação Continuada

44
101 – Algoritmos | Unidade 01

seguir os parênteses, sendo que eles são executados antes de tudo, a partir dos mais internos para os
mais externos.

Os operadores aritméticos devem obedecer à seguinte ordem de precedência

Parêntesis mais internos e mais a esquerda;


Operações mais à esquerda, quando houver a mesma precedência;
Operadores *, /, MOD, DIV possuem a mesma precedência;
Operadores +, - possuem a mesma precedência.

10

Exemplo:

Qual operador devo utilizar para descobrir se um número é par ou impar? Exemplifique.

Solução:

A MOD 2 = 0;  Número Par

A MOD 2 = 1;  Número Ímpar

Para fixar bem a ordem de prioridade dos operadores, efetue as expressões abaixo e clique em
“Resposta” para verificar se você acertou.

Efetue as seguintes expressões:

a) 101 MOD 3 * 2 + 9 * 5 MOD 10;

Resposta a

Resposta: 9.

b) 4 + 5 * 9 – 12 / 3;

Resposta b

Resposta: 45.

c) 40 / 8 + 2 * (5 – 11 MOD 3);

Resposta c

Resposta: 11.

© 2014 - AIEC - Associação Internacional de Educação Continuada

45
101 – Algoritmos | Unidade 01

d) 105 MOD 3 * 4 – 3 * 4 MOD (101 DIV 10);

Resposta d

Resposta: -2.

e) A = 1, B = 2, C = 3, D = 4;

A  40 * B MOD C;

C  A * 10 – 5 DIV D;

escreva(A, B, C, D);

Resposta e

Resposta: 2, 2, 19, 4.

11

OPERADORES RELACIONAIS
Os operadores relacionais são utilizados para comparar duas variáveis.

A tabela a seguir apresenta os principais operadores relacionais.

Exemplo:

Se o usuário digitar o valor 3, qual é o resultado encontrado no seguinte algoritmo:

#incluir <biblioteca>

principal()

© 2014 - AIEC - Associação Internacional de Educação Continuada

46
101 – Algoritmos | Unidade 01

inicio

inteiro A, B, C, D, R;

A  1; B  2; C  3;

escreva(“Digite D”);

leia(D);

se (D + A < C + 4)

R  A + B + C + D;

senão

R  A – B + C – D;

escreva(“O valor de R é: “, R);

fim

Solução

Solução:

D+A=3+1=4
C+4=3+4=7
(4 < 7)  verdade
R=1+2+3+3=9

Agora é sua vez. Resolva:

O que acontece no exemplo anterior se o usuário digitar 10?

Solução

Solução:

D + A = 10 + 1 = 11
C+4=3+4=7
(11 < 7)  falso
R = 1 – 2 + 3 – 10 = – 8.

12

OPERADORES LÓGICOS
© 2014 - AIEC - Associação Internacional de Educação Continuada

47
101 – Algoritmos | Unidade 01

São utilizados para determinar o valor lógico de uma proposição composta.

Proposição é uma ideia de sentido completo.

As proposições podem ser simples ou compostas. As simples possuem um único sentido completo
enquanto as compostas dois ou mais.

A palavra que une as proposições simples para formar as compostas é denominada conectivo. Os
principais conectivos são: e (^), ou (v), não (~), se... então (), se somente se ().

Estes conectivos geram as tabelas-verdades fundamentais

Tabelas-verdades fundamentais

Exemplo:

Em um triângulo retângulo, o quadrado da medida da hipotenusa é igual à soma dos quadrados das
medidas dos catetos.

13

Em programação, os conectivos são representados pelos operadores lógicos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

48
101 – Algoritmos | Unidade 01

O recurso de comparar e associar expressões através de operadores lógicos permite a execução de


ações dependendo da combinação de resultados das expressões.

Exemplo

Podemos incluir no algoritmo da troca de pneus um passo para verificar se o


pneu estepe e as ferramentas estão no carro.

Se pneu estepe = Verdadeiro e macaco = Verdadeiro e chave_de_roda = Verdadeiro Então

A expressão acima verifica se todos os itens estão no carro para continuar a execução da troca de pneu.
Se um dos itens for Falso, a expressão toda se torna falsa, portanto, impossibilitando a continuidade do
processo de troca de pneu. Isso acontece porque o conector utilizado foi o “e”.

Para verificar se um dos pneus está furado, podemos utilizar a expressão:

Se pneu1 = “Furado” ou pneu2 = “Furado” Então

Significa que se um dos pneus estiver furado, a expressão será verdadeira. Inclusive se os dois estiverem
furados, a expressão também será verdadeira.

14

Agora, observe os exemplos a seguir.

Atribuindo os valores às variáveis a, b e c conforme abaixo:

a  30, b  40 e c  80

Temos os seguintes resultados nas expressões a seguir.

a > 30 e c = 80 Falso

O valor de a é 30, portanto, a expressão "a é maior que 30" é falsa. O valor de c é 80, portanto, a
expressão "c é igual a 80" é verdadeira. No entanto, a conjunção "e" resulta verdadeira apenas se todas
as expressões resultarem verdadeiras, nesse caso, portanto, o resultado é falso.

a != 20 ou b <= 50 Verdadeiro

O valor de a é 30. A expressão “a é diferente de 30” é verdadeira. A expressão “b é menor ou igual a 50”
é falsa, pois b tem o valor atribuído de 40. Porém a disjunção “ou” resulta verdadeira se pelo menos
uma das expressões resultar verdadeira, por isso o resultado final é verdadeiro.

© 2014 - AIEC - Associação Internacional de Educação Continuada

49
101 – Algoritmos | Unidade 01

a = 30 e não b <= 40 Falso

A expressão “a é igual a 30” é verdadeira. A expressão b é menor ou igual a 40 também é verdadeira,


mas o operador de negação “não” inverte esse resultado, portanto a expressão “não b é menor ou igual
a 40” torna-se falsa. O resultado é falso, pois na conjunção “e” basta um valor falso para tornar toda a
expressão falsa.

a != b e b = c Falso

A expressão “a é diferente de b” é verdadeira, pois o valor de a é 30 e o valor de b é 40. A expressão b é


igual a c é falsa, pois o valor de c é 80. O resultado da disjunção “e” neste caso também é falso.

a > b ou b > 50 Falso

A expressão “a é maior que b” é falsa. A expressão “b é maior que 50” é falsa. Portanto, o resultado é
falso, já que para a disjunção “ou”, todas as expressões tem que ser falsas para o resultado ser falso.

c > 20 ou a < b Verdadeiro

A expressão “c é maior que 20” é verdadeira, pois o valor de c é 80. A expressão “a é menor que b”
também é verdadeira. Na disjunção “ou” basta uma das expressões ser verdadeira para o resultado ser
verdadeiro, nesse caso, ambas são verdadeiras, o que também resulta em verdadeiro.

15

Em resumo, podemos concluir que a conjunção “e” será falsa se pelo menos uma das expressões for
falsa e somente será verdadeira se todas forem verdadeiras.

A disjunção “ou” será falsa se todas as expressões forem falsas e será verdadeira se pelo menos uma for
verdadeira. A operação de negação sempre irá inverter o valor da expressão.

A disciplina Lógica Matemática mostra detalhadamente a aplicação dos operadores lógicos e das tabelas
verdade.

© 2014 - AIEC - Associação Internacional de Educação Continuada

50
101 – Algoritmos | Unidade 01

RESUMO
Neste módulo foram apresentados os operadores utilizados para manipular os dados em um algoritmo.
Vimos que a operação de atribuição permite que se forneça um valor numérico, literal ou lógico ou,
ainda, um valor numérico de uma expressão a uma variável. Estudamos também os operadores de
entrada e saída, que são utilizados para atribuir valores de entrada e mostrar valores de saída nos
algoritmos. Foram apresentados os operadores aritméticos que manipulam os valores numéricos, os
operadores relacionais que comparam valores e os operadores lógicos que comparam expressões
lógicas. Com esses conhecimentos é possível manipular valores e variáveis e compará-las logicamente.

© 2014 - AIEC - Associação Internacional de Educação Continuada

51
101 – Algoritmos | Unidade 02

UNIDADE 2 – ESTRUTURAS DE CONDIÇÃO, DECISÃO E REPETIÇÃO


MÓDULO 1 – ESTRUTURA DE CONDIÇÃO
01

1 - ESTRUTURAS DE CONDIÇÃO
Nos módulos anteriores foram apresentados alguns conceitos básicos sobre as estruturas e comandos
que são utilizados para construir um algoritmo simples. Entretanto, as possibilidades de construção de
algoritmos que temos até o presente momento são bastante limitadas, pois ainda não estamos aptos
a tomar decisões durante o tempo de execução do algoritmo, ou até mesmo de classificar
determinados valores de variáveis. Evoluiremos o módulo apresentando algumas estruturas de
condição.
• Estrutura de condição se-entao

É utilizada da seguinte forma:

se<expressão> então
<comandos>
fim-se

A estrutura de condição, que inicia e finaliza com as palavras se e fim-se, contém uma expressão que
deverá retornar um valor verdadeiro (V) ou de falso (F), e caso o resultado dessa expressão seja
verdadeiro, serão executados os comandos que estão dentro da estrutura. Caso seja falso, a execução
do programa ignora os comandos contidos dentro da expressão e continua na linha seguinte da
estrutura de condição.

Os comandos são sequência de códigos que serão executados até o fim-se, caso seja verdadeira a
expressão.

02

Alguns exemplos de expressões lógicas já foram vistos anteriormente, a seguir temos mais alguns
exemplos:

Se <18 > 20> então


Imprima na tela a palavra “maior”
Fim-se

O resultado então será falso e não acontecerá nada.

© 2014 - AIEC - Associação Internacional de Educação Continuada

1
101 – Algoritmos | Unidade 02

Se <45 = 45> então


Imprima na tela a palavra “igual”
Fim-se

O resultado será verdadeiro e será impresso a palavra “igual”

03

• Estrutura de condição se-entao-senão

Essa estrutura de condição oferece a possibilidade de executarmos uma determinada ação ou comando
se o resultado da expressão for verdadeiro ou falso. Para essas situações é utilizado o comando senão,
como mostrado nos exemplos abaixo.

se<expressão> então
<comandos>
Senão
<comandos>
fim-se

Exemplo no fluxograma

© 2014 - AIEC - Associação Internacional de Educação Continuada

2
101 – Algoritmos | Unidade 02

04

• Estrutura de condição encadeada

Dentro de uma estrutura se-então-senão é perfeitamente possível utilizarmos mais de uma linha de
comando, ou até mesmo outras estruturas se-então-senão. Existem situações em que os caminhos para
a tomada de uma decisão acabam formando uma espécie de árvore com ramificações diversas, onde
cada caminho é um conjunto de ações. Nesses casos podemos recorrer à utilização de várias estruturas
se-então-senão embutidas umas dentro das outras, comumente chamadas de ninhos.

Exemplo:

Se Aluno <= 17 então


seAluno no Ensino Médio então
imprima “Aluno em dia com estudos”
senão
imprima “Aluno atrasado com estudos”
fim-se
senão
seAluno no 3º ano do Ensino Médio então
imprima “Aluno continue estudando falta pouco”
senão
imprima “Aluno com possibilidade de entrar do EJA”
fim-se
fim-se

05

Nas estruturas de decisão encadeadas, uma estrutura de condição é aninhada dentro de outra. Para que
as condições internas sejam executadas é necessário que seja “Verdadeira” a condição de fora.

© 2014 - AIEC - Associação Internacional de Educação Continuada

3
101 – Algoritmos | Unidade 02

Exemplo no fluxograma

06

Estrutura de condição caso seja

Outra forma para trabalhar com comandos condicionados a um determinado valor é a estrutura caso
seja. Nessa estrutura o valor de uma determinada variável é avaliado e caso esse valor coincida com
determinado valor pré-estabelecido um determinado comando é executado. A estrutura de condição
caso é utilizada da forma mostrada a seguir:

caso variável seja


<bloco de comandos>

© 2014 - AIEC - Associação Internacional de Educação Continuada

4
101 – Algoritmos | Unidade 02

fim-se

07

2 - TESTE DE MESA

O teste de mesa ou chinês é um teste feito manualmente, analisando o algoritmo, com valores
que possam testar as suas diversas condições para que depois os resultados sejam comparados
com a execução do programa no computador. Havendo qualquer divergência entre os
resultados, o algoritmo deve ser analisado.

Para fazer um teste de mesa, siga passos descritos abaixo:

© 2014 - AIEC - Associação Internacional de Educação Continuada

5
101 – Algoritmos | Unidade 02

• Identifique as variáveis envolvidas em seu algoritmo;


• Crie uma tabela com linhas e colunas correspondentes ao número de
instruções observadas pelo teste de mesa e o número de variáveis envolvidas.
Utilize a primeira coluna para identificar os números das linhas correspondentes
às instruções observadas e identifique as demais colunas com o nome de uma
variável;
• De cima para baixo, preencha cada uma das linhas da tabela com o número da
linha que identifica cada instrução, seguida dos valores assumidos pelas variáveis
do programa após a execução daquela instrução.
o Para indicar que o valor de uma variável foi lido, envolva-o entre parênteses;
o Se o valor foi escrito pela instrução, envolva-o entre chaves;
o Para valores indefinidos, ou seja, aqueles que ainda não foram determinados
até uma dada instrução, utilize a interrogação.

08

Observe como um teste de mesa funciona por meio de um algoritmo simples:

Dadas duas variáveis a e b, inicialmente com valores v1 e v2, respectivamente, crie um algoritmo que
atribua o valor v2 à variável a e o valor v1 à variável b.

Suponhamos que sua primeira proposta de solução se pareça com o algoritmo a seguir:

Algoritmo 1

01 programa
02 var a, b: inteiro
03 //inicialização das variáveis
04 a ← v1
05 b ← v2
06 // troca dos valores das variáveis
07 a ← b
08 b ← a
09 fim

Analisando esse algoritmo, vejamos se ele produz o efeito desejado: perceba que a instrução da linha 7
altera o valor de a para v2, de forma que a atribuição da linha 8 não muda o valor armazenado em b,
pois depois da linha 7 o valor de a ficou igual ao valor de b. Isso pode ser visto em detalhes no teste de
mesa, onde omitimos as linhas de comentário, pois essas não afetam a execução:

Teste de mesa do Algoritmo 1.

© 2014 - AIEC - Associação Internacional de Educação Continuada

6
101 – Algoritmos | Unidade 02

Uma possível solução para esse problema é dada pelo algoritmo seguinte:
Algoritmo 2
01 programa
02 var a, b, aux: inteiro
03 //inicialização das variáveis
04 a ← v1
05 b ← v2
06 //troca dos valores das variáveis
07 aux ← a
08 a ← b
09 b ← aux
10 fim
Neste algoritmo, introduzimos a variável aux, responsável por armazenar o valor original de a,
permitindo que o acessemos mesmo depois da troca do valor de a. Esse é o procedimento padrão
utilizado para troca dos valores de duas variáveis. Veja, a seguir, o teste de mesa para esse novo
algoritmo:
Teste de mesa do Algoritmo 2.

Dessa forma, ao final do algoritmo a variável a tem valor v2 e a variável b tem valor v1, conforme
desejado.

© 2014 - AIEC - Associação Internacional de Educação Continuada

7
101 – Algoritmos | Unidade 02

09

Perceba como o teste de mesa torna a análise do algoritmo mais clara, ajudando o programador a
identificar falhas. O teste de mesa pode ser adaptado de acordo com o problema tratado, portanto,
utilize o esquema proposto como um guia geral e ajuste-o quando necessário.

Veja agora outro exemplo da validação do algoritmo com o teste de mesa.

Exemplo 2

#incluir <biblioteca>
principal()
início
real idade, R;
escreva(“Digite a idade”);
leia(idade);
se (idade >= 18)
escreva(“Maior de idade”);
fim

A tabela abaixo representa o resultado de um teste de mesa do algoritmo do exemplo anterior.

10

Para fixar bem o teste de mesa, clique para assistir ao vídeo abaixo.

https://www.youtube.com/watch?v=CUKuXzka_Xs

11

Agora faça o teste de mesa do algoritmo a seguir e clique no link para ver o resultado.

Exemplo 3

© 2014 - AIEC - Associação Internacional de Educação Continuada

8
101 – Algoritmos | Unidade 02

Elaborar um algoritmo que receba um


número e mostre o quíntuplo somente
quando o número digitado for maior
que trinta.

#incluir <biblioteca>
principal()
início
real N, R;
escreva(“Digite um número”);
leia(N);
R ← N;
se (N > 30)
R ← 5*N;
escreva(R);
fim

Teste de mesa

12

Exemplo 4

Elaborar um algoritmo que receba um


número e mostre a metade somente
quando o número digitado for maior
ou igual a cinquenta.

Vamos exercitar! Faça o algoritmo e o teste de mesa. Somente depois, clique para ver o resultado.

© 2014 - AIEC - Associação Internacional de Educação Continuada

9
101 – Algoritmos | Unidade 02

Algoritmo
Solução:
#incluir <biblioteca>
principal()
início
real N, R;
escreva(“Digite um número”);
leia(N);
R ← N;
se (N >= 50)
R ← N/2;
escreva(R);
fim

Teste de mesa

13

Exemplo 5

Elaborar um algoritmo que receba


um número e mostre o dobro
somente quando o número digitado
for maior que noventa e menor que
cem.

Algoritmo:
#incluir <biblioteca>
principal()
início
real N, R;
escreva(“Digite um número”);
leia(N);

© 2014 - AIEC - Associação Internacional de Educação Continuada

10
101 – Algoritmos | Unidade 02

R &larr N;
se (N > 90 && N < 100)
R ← 2*N;
escreva(R);
fim

Teste de mesa

14

Exemplo 6

Elaborar um algoritmo que


receba um número e mostre a
quinta parte somente quando o
número digitado for menor que
50 ou maior que 1000.

Algoritmo
#incluir <biblioteca>
principal()
início
real N, R;
escreva(“Digite um número”);
leia(N);
R ← N;
se (N < 50 || N > 1000)
R ← N/5;
escreva(R);
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

11
101 – Algoritmos | Unidade 02

Teste de mesa

15

3 - INTERPRETAÇÃO

Os comandos 1, 2, ...e N só serão executados se a condição for


verdadeira. As palavras início e fim serão necessárias apenas quando
dois ou mais comandos forem executados. Se a condição for falsa, o
programa executará o primeiro comando que vier após a estrutura
condicional.

Observe os exemplos a seguir.

Exemplo 7

Elaborar um algoritmo que verifique e informe se


um número é ímpar, se for calcular o seu
quíntuplo.

© 2014 - AIEC - Associação Internacional de Educação Continuada

12
101 – Algoritmos | Unidade 02
Algoritmo Fluxograma

#incluir <biblioteca>
principal()
início
real N, R;
escreva(“Digite um
número”);
leia(N);
R ← N;
se (N mod 2 = 1)
inicio
escreva(“O
número é ímpar”);
R ← 5*N;
fim
escreva(R);
fim

16

Exemplo 8

Analise o exemplo abaixo e, com os valores de entrada, verifique o resultado final do algoritmo.

Algoritmo

#incluir <biblioteca>
principal()
início
inteiro A, B, C, D;
leia(A);
leia(B); Teste de mesa
leia(C);
leia(D);
se (A < B || B < D)
inicio
A ← B * C – D;

© 2014 - AIEC - Associação Internacional de Educação Continuada

13
101 – Algoritmos | Unidade 02

B ← A – C * D;
C ← B – A * D;
D ← A + B * C – D;
A ← A * (D – C + B);
fim
escreva(A, B, C, D);
fim

17

Agora é sua vez. Tente resolver o que se pede e, em seguida, clique para verificar se você acertou.

Exemplo 9

Verifique o resultado final do algoritmo do exemplo anterior se a linha “se (A < B || B < D)” for
substituída por “se (A < B && B < D)”.

Teste de mesa

Exemplo 10

© 2014 - AIEC - Associação Internacional de Educação Continuada

14
101 – Algoritmos | Unidade 02

Elaborar um algoritmo que dado 2 números


apresente-os ordenados utilizando uma Variável
Auxiliar.

Algoritmo

Teste de Mesa

Teste de mesa

Algoritmo
#incluir <biblioteca>
principal()
inicio
inteiro a, b, aux;
limpatela();
escreva(“Digite os Números: “);
leia(a,b);
se (a < b)
inicio
aux ← a;
a ← b;
b ← aux;
fim
escreva(“Ordenados: “, b, a);
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

15
101 – Algoritmos | Unidade 02

Teste de mesa

18

RESUMO
Neste módulo aprofundamos mais nas estruturas de condição. Esses comandos fazem parte das técnicas
de programação que conduzem a estruturas de programas que não são totalmente sequenciais. Com as
instruções de DESVIO pode-se fazer com que o algoritmo proceda de uma ou outra maneira, de acordo
com as decisões lógicas tomadas e nos resultados anteriores. As principais estruturas de condição
apresentadas são: “se então”, “se então senão” e “caso seja”.

Outro aprendizado que tivemos foi o Teste de Mesa, muito chamado de chinês. No qual o usuário pode
executar manualmente o algoritmo proposto, seguindo as instruções do algoritmo de maneira precisa
para verificar se o procedimento utilizado está correto ou não, escrevendo todas as variáveis e
resultados em uma tabela.

UNIDADE 2 – ESTRUTURAS DE CONDIÇÃO, DECISÃO E REPETIÇÃO


MÓDULO 2 – ESTRUTURA DE DECISÃO
01

1 - ESTRUTURAS DE DECISÃO
Vimos nos módulos anteriores o conceito de estruturas de condição. Neste módulo aprofundaremos
mais apresentando os tipos de decisões que fazem parte do dia a dia dos algoritmos e dos programas.

Exemplo de estrutura de decisão simples utilizando Fluxograma

© 2014 - AIEC - Associação Internacional de Educação Continuada

16
101 – Algoritmos | Unidade 02

Sintaxe

se (condição)
comando_1;
senão
comando_2;

Interpretação

Se a condição for verdadeira, será executado o


comando_1; caso contrário, se a condição for falsa, será
executado o comando_ 2.

02

Observe os seguintes exemplos.

Exemplo 1

Elaborar um algoritmo que receba a idade


de uma pessoa e informe se ela é maior ou
menor de idade.

Linguagem algorítmica

#incluir <biblioteca>
principal()
início
real idade, R;
escreva(“Digite a idade”);
leia(idade);
se (idade >= 18)

© 2014 - AIEC - Associação Internacional de Educação Continuada

17
101 – Algoritmos | Unidade 02

escreva(“Maior de idade”);
senão
escreva(“Menor de idade”);
fim

03

Exemplo 2

Elaborar um algoritmo que decida qual a maior entre três


pessoas após informar suas estaturas.

© 2014 - AIEC - Associação Internacional de Educação Continuada

18
101 – Algoritmos | Unidade 02

Linguagem algorítmica
Fluxograma
#incluir <biblioteca>
principal( )
inicio
real a,b,c;
escreva(“Digite as 3 alturas: “);
leia(a,b,c);
se ((a > b)&&(a > c))
escreva("O Maior mede: ",a);
senão
se (b > c)
escreva("O Maior mede: ",b);
senão
escreva("O Maior mede: ",c);
fim

Teste de Mesa

04

Exemplo de estrutura de decisão composta utilizando fluxograma

© 2014 - AIEC - Associação Internacional de Educação Continuada

19
101 – Algoritmos | Unidade 02

Sintaxe

se (condição)
início
comando1;
comando2;
fim
senão
início
comando3;
comando4;
fim

05

2 - INTERPRETAÇÃO

Se a condição for verdadeira, o comando 1 e o comando 2


serão executados; caso contrário, se a condição for falsa,
o comando 3 e o comando 4 serão executados.

Observações:

• Os recuos devem ser usados sempre que se escrever um bloco de comandos, ou seja, após o
símbolo início, as instruções seguintes devem estar recuadas (à direita) de um ou mais espaços. O
símbolo fim, que termina o conjunto de instruções, deve estar alinhado ao início correspondente.

• O compilador sempre associa um senão ao se anterior mais próximo que ainda não possui um senão.

© 2014 - AIEC - Associação Internacional de Educação Continuada

20
101 – Algoritmos | Unidade 02

06

A estrutura de decisão se-senão pode ser utilizada na implementação da solução das equações
polinomiais do 2º e 3º grau. Veja a seguir.

Exemplo 3

Elaborar um algoritmo que resolva uma equação do


2o grau (ax2 + bx + c = 0).

Fluxograma

Algoritmo

#incluir<biblioteca>
principal()
inicio
inteiro a,b,c,x1,x2,delta;
escreva("Digite a, b, c:");
leia(a,b,c);
delta ← (b*b)-(4*a*c);
se (delta >= 0)
inicio
x1 = (-b - raiz(delta))/(2*a);
x2 = (-b + raiz(delta))/(2*a);
escreva("As raízes sao: “,x1,x2);
fim
senão
escreva("Não existe raízes reais”);
fim

07

A estrutura de decisão se-senão também pode ser utilizada na elaboração de um menu de opções. No
entanto, no próximo tópico veremos um comando melhor para a realização desta ação.

Exemplo 4

© 2014 - AIEC - Associação Internacional de Educação Continuada

21
101 – Algoritmos | Unidade 02

Elaborar um algoritmo que apresente um menu com as


opções de inclusão, alteração, exclusão e opção inválida.

Linguagem algorítmica

#incluir <biblioteca>
principal()
inicio
inteiro x;
escreva("1. Inclusao");
escreva("2. Alteracao");
escreva("3. Exclusao");
escreva("Digite sua opção: ");
leia(x);
se (x = 1) escreva("Escolheu inclusao\n");
se (x = 2) escreva("Escolheu alteracao\n");
se (x = 3) escreva("Escolheu exclusao\n");
se (x != 1 && x != 2 && x != 3) escreva("Opção invalida\n");
fim

08

3 - Comando Escolha

Diversas vezes é necessário escolher uma opção que se encontra numa lista de um menu. O
comando escolha() aparece como a melhor opção para esta necessidade.

Sintaxe

escolha (variável)
inicio
caso 1:
bloco de
comandos;
interrupção;
caso 2:
bloco de
comandos;

© 2014 - AIEC - Associação Internacional de Educação Continuada

22
101 – Algoritmos | Unidade 02

interrupção;
caso 3:
bloco de
comandos;
interrupção;
dúvida:
bloco de
comandos;
fim

Uma variável é testada sucessivamente contra uma lista de variáveis inteiras ou de caracteres. Depois
de encontrar uma coincidência, o bloco de comandos correspondente é executado. Se nenhuma
coincidência for encontrada, o bloco de comandos do caso dúvida será executado.

O comando interrupção serve para terminar o bloco de comandos em execução. Exemplo do


comando escolha utilizando fluxograma:

O comando interrupção é opcional e por isto, se for suprimido, permite que o próximo “caso” seja
executado, sem haver qualquer quebra na sequência do processamento. Observa-se que não é
necessário utilizar o comando início e o comando fim para delimitar o bloco de comandos.

09

Agora é sua vez. Faça o que se pede nos exemplos a seguir e depois verifique se você acertou.

Exemplo 5

© 2014 - AIEC - Associação Internacional de Educação Continuada

23
101 – Algoritmos | Unidade 02

Elaborar um algoritmo que apresente


um menu com as opções de inclusão,
alteração, exclusão e sair.

Linguagem algorítmica

Exemplo 6

Elaborar um algoritmo que apresente um menu


com as opções: 1 – multiplicar 3 números; 2 –
somar 3 números e 3 – sair.

Linguagem algorítmica

Fluxograma

Linguagem algorítmica:
#incluir <biblioteca>
principal()
inicio
inteiro x;
escreva("1. Inclusao");
escreva("2. Alteracao");
escreva("3. Exclusao");
escreva("4. Sair");
escreva("Digite sua opção: ");
leia(x);
escolha (x)
inicio
caso 1: escreva(“Escolheu inclusao”); interrupção;
caso 2: escreva(“Escolheu alteracao”); interrupção;
caso 3: escreva(“Escolheu exclusao”); interrupção;
caso 4: escreva(“Atualizando alterações”); interrupção;
dúvida: escreva(“Opção invalida”);
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

24
101 – Algoritmos | Unidade 02

Linguagem algorítmica
#incluir <biblioteca>
principal()
inicio
inteiro x;
real a, b, c, soma, prod;
escreva(“1. Somar 3 números”);
escreva(“2. Multiplicar 3 números”);
escreva(“3. Sair”);
escreva(“Digite sua opção: “);
leia(x);
escolha(x)
inicio
caso 1:
escreva(“Digite 3 números”);
leia(a,b,c);
soma = a + b + c;
escreva(“Soma = “, soma);
interrupção;
caso 2:
escreva(“Digite 3 números”);
leia(a,b,c);
prod = a * b * c;
escreva(“Produto = “, prod);
interrupção;
caso 3:
escreva(“Saindo !!!!”);
interrupção;
dúvida: escreva(“Opção invalida\n”);
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

25
101 – Algoritmos | Unidade 02

10

RESUMO
Nos módulos anteriores foram apresentados alguns conceitos básicos sobre as estruturas e comandos
que são utilizados para construir um algoritmo. Neste módulo foi apresentado o comando da estrutura
de decisão escolha, que possibilita ao usuário do sistema configurar uma lista em um menu de um
sistema qualquer.

Vimos também que no algoritmo você poderá realizar uma interrupção dos comandos que estão sendo
executados, usando o comando interrupção, que para a execução do algoritmo até a próxima ação do
usuário.

As possibilidades de construção de algoritmos que temos até o presente momento são bastante boas
para construirmos quase todo o tipo de algoritmo.

© 2014 - AIEC - Associação Internacional de Educação Continuada

26
101 – Algoritmos | Unidade 02

UNIDADE 2 – ESTRUTURAS DE CONDIÇÃO, DECISÃO E REPETIÇÃO


MÓDULO 3 - ESTRUTURA PARA
01

1- ESTRUTURAS DE REPETIÇÃO - PARA

Aprendemos no início do curso o conceito de Estrutura de Repetição. Nesse módulo e no próximo


módulo avançaremos mais sobre o assunto. Aprenderemos nesse módulo a estrutura de repetição
“Para”.

Vale lembrar que comandos de repetição são estruturas utilizadas no corpo de um algoritmo que
possibilitam ao computador repetir a mesma tarefa.

Os comandos de repetição são recursos muito importantes nas linguagens de programação devido ao
grande poder de processamento dos computadores, que permitem a execução de tarefas repetidas com
extrema rapidez.

A estrutura de repetição PARA é utilizada quando se sabe o número de vezes


que um trecho do algoritmo deve ser repetido.

A estrutura de repetição PARA, implementa um contador implicitamente. Veja como é o seu esquema:

PARA <variável contadora> DE <valor inicial> ATE <valor final> [PASSO <valor de
incremento>] FAÇA <instruções a serem executadas repetidamente até a <variável contadora> atingir o
valor final>

Exemplo de estrutura de repetição Para utilizando fluxograma com um comando

Sintaxe

para(i ← 1; i <= cond_lim; i ← i + 1)

© 2014 - AIEC - Associação Internacional de Educação Continuada

27
101 – Algoritmos | Unidade 02

comando_1;

Interpretação

O comando será executado utilizando a variável i como controle, cujo conteúdo vai variar do valor inicial
1 até o valor final cond_lim, de 1 em 1, incrementando automaticamente.

02

Verifique como ocorre esse comando, observando os exemplos a seguir.

Exemplo 1

Elaborar um algoritmo que realize a contagem de 1 a 100,


apresentando-a na tela.

Linguagem algorítmica

#incluir <biblioteca>
principal()
inicio
inteiro i;
para (i ← 1; i <= 100; i ← i + 1)
escreva(i, “ – “);
escreva(i);
fim

Observação: a penúltima linha escreva(i); irá escrever o último número (100), pois quando i for igual a
100, a condição (i<100) será falsa, portanto, a instrução dentro do laço não será executada.

03

Agora é sua vez. Faça o que é pedido nos exemplos a seguir e depois clique para verificar o resultado.

Exemplo 2

© 2014 - AIEC - Associação Internacional de Educação Continuada

28
101 – Algoritmos | Unidade 02

A tabuada é uma tabela contendo todos os produtos dos números


inteiros de 0 a 10. E laborar um algoritmo que imprima a tabuada de
um número fornecido pelo usuário.

Linguagem algorítmica

Teste de Mesa

Exemplo 3

Na matemática, o fatorial de um número natural n é o produto de todos


os inteiros positivos menores ou iguais a n. Isso é escrito como n! e lido
como "fatorial de n". A notação n! foi introduzida por Christian Kramp
em 1808. Elaborar um algoritmo que calcule o fatorial de um número
inteiro informado pelo usuário.

0! = 1
1! = 1
n!=n.(n-1)…3.2.1

Linguagem algorítmica

Teste de Mesa

Linguagem algorítmica
#incluir <biblioteca>
principal()
inicio
inteiro i,num;
escreva(“digite um numero: “);
leia(num);

© 2014 - AIEC - Associação Internacional de Educação Continuada

29
101 – Algoritmos | Unidade 02

para(i ← 0; i <= 10; i ← i + 1)


escreva(num, “*”, i, “=”, num * i);
fim

Teste de Mesa

Linguagem algorítmica
#incluir <biblioteca>
principal()
inicio
inteiro i, num, fat;
fat ← 1;
escreva(“digite um numero: “);
leia(num);
se (num = 0)
escreva(“o fatorial de”, num, “e’”, fat);
senão
início
para(i=1; i<=num ; i← ! i+1)
fat = fat*i;
escreva(“o fatorial de”, num, “e’”, fat);
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

30
101 – Algoritmos | Unidade 02

Teste de Mesa

04

Exemplo 4

Elaborar um algoritmo que calcule quantos múltiplos de um determinado


número fornecido pelo usuário existem no intervalo de 1 a 1000 e informe
quais são.

© 2014 - AIEC - Associação Internacional de Educação Continuada

31
101 – Algoritmos | Unidade 02

05

Exemplo 5

Criptografia é a codificação e descaracterização de mensagens para impedir o


acesso não autorizado ou a compreensão dos dados transmitidos. Uma
mensagem pode ser criptografada aplicando-se a ela um código numérico
secreto, denominado chave criptográfica. Em geral, muitos destes códigos
utilizam as propriedades da teoria dos números primos. Elaborar um algoritmo
que descubra se um determinado número inteiro informado pelo usuário é
primo ou composto.

Um número é primo se possui apenas 2 divisores


naturais, o número 1 e ele mesmo.
P = {2, 3, 5, 7, 11, 13, 17, 19, ...}

Linguagem algorítmica

Teste de mesa 1

Teste de mesa 2

Linguagem algorítmica:
#incluir <biblioteca>
principal()
inicio
inteiro i,num,cont;
escreva(“Digite um numero: “);
leia(num);
cont ← 0;
para(i=1; i <= num ; i ← !i + 1)
se(num mod i = 0)
cont ← cont + 1;
se(cont = 2)
escreva(“O número”, num, “é primo”);
senão
escreva(“O número”, num, “não é
primo”);
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

32
101 – Algoritmos | Unidade 02

Teste de Mesa

Teste de Mesa

06

Exemplo 6

Elaborar um algoritmo que some os números naturais até um


número informado pelo usuário.

© 2014 - AIEC - Associação Internacional de Educação Continuada

33
101 – Algoritmos | Unidade 02

n
∑i = 1+2+3+...+ n
i =1

Linguagem algorítmica

#incluir <biblioteca>
principal()
inicio
inteiro i,num,soma;
escreva(“Digite um numero: “);
leia(num);
soma ← 0;
para(i=1; i<=num ; i←i+1)
soma ← soma + i;
escreva(“Soma =”, soma);
fim

07

Exemplo 7

Número par é todo número inteiro que ao ser dividido pelo número dois resulta
em um número inteiro. Elaborar um algoritmo que apresente a soma dos N
primeiros números pares.

n
∑2.i = 2+4+6+...+ 2.n
i =1

© 2014 - AIEC - Associação Internacional de Educação Continuada

34
101 – Algoritmos | Unidade 02

Observação: no teste de mesa, o algoritmo soma os oito primeiros números pares, ou seja,
2+4+6+8+10+12+14+16.

08

Exemplo 8

Número ímpar é todo número inteiro que ao ser dividido pelo número dois resulta
em um número racional não inteiro. Elaborar um algoritmo que some todos os
números ímpares até 2005.

1003
∑2.i-1 = 1+3+5+...+ (2.1003-1)
i =1

#incluir <biblioteca>
principal()
inicio
inteiro i,num,soma;
soma←0;
para(i=1; i<=2005 ; i←i+2)

© 2014 - AIEC - Associação Internacional de Educação Continuada

35
101 – Algoritmos | Unidade 02

soma←soma + i;
escreva(“Soma =”, soma);
fim

Observação: no exemplo, o incremento da variável de controle i é 2 e não 1 (i←i+2), como nos demais
exemplos, o que significa que o i inicia em 1 e a cada passo pula os números pares: 1, 3, 5, ..., 2005.

09

2- ESTRUTURA PARA – BLOCO DE COMANDOS


Exemplo de estrutura de repetição Para utilizando Fluxograma com mais de um comando

Sintaxe:

para(i ← 1; i <= cond_lim; i ← i + 1)


inicio
comando-1;
comando-2;
fim
comando-3;

Interpretação:

Os comando1 e comando2 serão executados utilizando a variável i como controle, cujo conteúdo vai
variar do valor inicial 1 até o valor final cond_lim, de 1 em 1, incrementando automaticamente.

10

Exemplo 9

© 2014 - AIEC - Associação Internacional de Educação Continuada

36
101 – Algoritmos | Unidade 02

Exemplo: Elaborar um algoritmo que converta temperaturas


dadas na Escala Fahrenheit (1 a 300 ºF) para a Escala Celsius.

#incluir <biblioteca>
principal()
inicio
inteirofahr;
realcelsius;
para (fahr = 1; fahr<= 300; fahr = fahr + 1)
inicio
escreva(fahr);
celsius ← (5.0/9.0)*(fahr-32);
escreva(celsius);
fim
fim

11

Agora é sua vez. Tente resolver o que se pede e clique para ver o resultado.

Exemplo 10

Elaborar um algoritmo que receba quatro notas e calcule a média.

© 2014 - AIEC - Associação Internacional de Educação Continuada

37
101 – Algoritmos | Unidade 02

12

RESUMO
Caro aluno, estamos aos poucos evoluindo nas estruturas de repetição. Estruturas essas que compõem
os algoritmos e os programas que são construídos pelos programadores. Os comandos de repetição são
estruturas utilizadas no corpo de um algoritmo que possibilitam ao computador repetir a mesma tarefa
quantas vezes forem necessária para satisfazer a condição preestabelecida.

Nesse módulo evoluímos na estrutura de repetição PARA. O comando PARA é executado até a condição
do PARA for verdadeira, depois ela vai para o próximo comando.

A estrutura de repetição PARA pode ser utilizada para diversas necessidades de algoritmos como
tabuada, conversão de escala de temperatura dentre outros.

UNIDADE 2 – ESTRUTURAS DE CONDIÇÃO, DECISÃO E REPETIÇÃO


MÓDULO 4 - ESTRUTURA ENQUANTO E FAÇA-ENQUANTO
01

1- ESTRUTURA DE REPETIÇÃO - ENQUANTO

Essa estrutura de repetição é utilizada quando não se sabe o número de vezes


em que um trecho do algoritmo deve ser repetido, embora também possa ser
utilizada quando se sabe esse número.

Existem situações em que o teste condicional da estrutura de repetição, que fica no início, resulta em
um valor falso logo na primeira comparação. Nestes casos, os comandos de dentro da estrutura de
repetição não serão executados.

Sintaxe:

enquanto (condição)
inicio
comando_1;
comando_2;
fim

Fluxograma:

© 2014 - AIEC - Associação Internacional de Educação Continuada

38
101 – Algoritmos | Unidade 02

Interpretação:

Enquanto a condição for verdadeira, o comando-1 e comando-2 serão executados.

02

Observe o uso da estrutura enquanto nos exemplos a seguir.

Exemplo 1

Elaborar um algoritmo que apresente em ordem


decrescente os números de 100 até 11,
ordenados de 10 em 10 por linha.

Linguagem algorítmica

#incluir <biblioteca>
principal()
inicio
inteiro i;
i ← 100;
enquanto(i > 10)
inicio
escreva(i);
i ← i - 1;
se(i mod 10 = 0)

© 2014 - AIEC - Associação Internacional de Educação Continuada

39
101 – Algoritmos | Unidade 02

escreva(pula_linha);
fim
fim

Exemplo de estrutura de repetição ENQUANTO utilizando Fluxograma

Teste de Mesa

03

Agora, tente resolver os algoritmos a seguir e depois clique para verificar o resultado.

Exemplo 2

© 2014 - AIEC - Associação Internacional de Educação Continuada

40
101 – Algoritmos | Unidade 02

O máximo divisor comum entre dois números a e b (vulgarmente


abreviada como mdc(a,b)) é o maior número inteiro encontrado, que
seja fator dos outros dois. Elaborar um algoritmo para o cálculo do
máximo divisor comum entre 2 números.

04

Exemplo 3

Elaborar um algoritmo que calcule a média de 500 números


informados pelo usuário.

© 2014 - AIEC - Associação Internacional de Educação Continuada

41
101 – Algoritmos | Unidade 02

05

Exemplo 4

Sequência de Fibonacci é uma sequência de números inteiros


normalmente iniciada por 0 e 1 onde cada número seguinte
(número de Fibonacci) corresponde à soma dos dois elementos
anteriores. Elabore um algoritmo que liste os n primeiros
elementos da Sequência de Fibonacci, onde n deverá ser
informado pelo usuário.

Linguagem algorítmica

Fluxograma

Teste de mesa

© 2014 - AIEC - Associação Internacional de Educação Continuada

42
101 – Algoritmos | Unidade 02

Linguagem algorítmica:
#incluir <biblioteca>
principal()
inicio
inteiro i, num, res, n1, n2;
escreva("Digite o número de elementos: ");
leia(num);
i ← 3;
n1←0;
n2←1;
escreva(n1);
escreva(n2);
enquanto (i <= num)
inicio
res← n1 + n2;
escreva(res);
n1 ← n2;
n2 ← res;
i←i+1
fim
fim

Fluxograma

© 2014 - AIEC - Associação Internacional de Educação Continuada

43
101 – Algoritmos | Unidade 02

Teste de mesa

06

2 - ESTRUTURA DE REPETIÇÃO - FAÇA-ENQUANTO

Essa estrutura de repetição é semelhante à estrutura Enquanto, ou seja, é


utilizada quando não se sabe o número de vezes em que um trecho do
algoritmo deve ser repetido, embora também possa ser utilizada quando se
sabe esse número.

© 2014 - AIEC - Associação Internacional de Educação Continuada

44
101 – Algoritmos | Unidade 02

No entanto, o teste condicional da estrutura Faça-Enquanto é feito no fim do bloco de comando,


portanto, sempre ocorre a execução dos comandos.

Sintaxe:

faça
inicio
comando_1;
comando_2;
fim
enquanto (condição);

Exemplo de estrutura de repetição FAÇA ENQUANTO utilizando Fluxograma

Interpretação:

Enquanto a condição for verdadeira, os comando1 e comando2 serão executados.

07

Veja, no exemplo a seguir, como é usada a Estrutura Faça-Enquanto.

Exemplo 5

Elaborar um algoritmo que apresente um menu com as


opções de inclusão, alteração, exclusão e opção sair.

© 2014 - AIEC - Associação Internacional de Educação Continuada

45
101 – Algoritmos | Unidade 02

Linguagem algorítmica

#incluir <biblioteca>
principal()
inicio
inteiro op;
faça
inicio
escreva("1. Inclusao");
escreva("2. Alteracao");
escreva("3. Exclusao");
escreva("4. Sair");
escreva("Digite sua opção: ");
leia(op);
escolha(op)
inicio
caso 1: escreva("Escolheu inclusao"); interrupção;
caso 2: escreva("Escolheu alteracao"); interrupção;
caso 3: escreva("Escolheu exclusao"); interrupção;
caso 4: escreva("Sair"); interrupção;
dúvida: escreva("Opcao Inválida");
fim
fim
enquanto(op != 4);
fim

08

Agora é a sua vez. Faça o que se pede nos exemplos a seguir e depois clique para verificar o resultado.

Exemplo 6

Elaborar um algoritmo que leia o lado de um quadrado e calcule a sua


área evitando que o usuário informe valores negativos ou zero.

© 2014 - AIEC - Associação Internacional de Educação Continuada

46
101 – Algoritmos | Unidade 02

09

Exemplo 7

Elaborar um algoritmo que receba dois números positivos, e o


usuário escolha se quer calcular a soma, o produto ou a média
desses números.

© 2014 - AIEC - Associação Internacional de Educação Continuada

47
101 – Algoritmos | Unidade 02

10

Exemplo 8

Elaborar um algoritmo que receba o tipo de gasto (Cartão ou


Dinheiro) e o valor, no fim calcule o total para cada tipo de
gasto.

11

Exemplo 9

Elabore um algoritmo que some os votos de uma


eleição para 100 eleitores com 4 candidatos
possibilitando os votos branco e nulos.

11

© 2014 - AIEC - Associação Internacional de Educação Continuada

48
101 – Algoritmos | Unidade 02

12

RESUMO
Caro aluno, continuamos nesse módulo estudando as Estruturas de Repetição. Aprendemos duas
estruturas: ENQUANTO e FAÇA ENQUANTO. A grande diferença das duas é a execução dos comandos
que estão dentro dessa estrutura. No caso do FAÇA ENQUANTO, os comandos são executados e só após
é verificado se a condição ENQUANTO atende.

Aprendemos também que a utilização do ENQUANTO ocorre quando não sabemos o momento da
parada da repetição dos comandos.

Todas essas estruturas estudadas serão muito úteis no dia a dia da programação, então aproveite o
máximo possível o seu estudo.

© 2014 - AIEC - Associação Internacional de Educação Continuada

49
101 – Algoritmo | Unidade 03

UNIDADE 3 – FUNÇÕES, RECURSIVIDADE, FILA E


PILHA
MÓDULO 1 – FUNÇÕES DE INTERFACE E MATEMÁTICA
01

1 - FUNÇÕES DE INTERFACE E MATEMÁTICA


No início do semestre aprendemos algoritmos básicos, que foram ficando mais complexos com o
avançar do curso. Estamos crescendo e evoluindo a matéria à medida que você está fazendo os
exercícios e atividades.

Neste módulo aprenderemos que nos algoritmos existem comandos já predeterminados a executarem
uma ação. Esse comando já configurado é chamado de função.

Uma função é composta de um nome, uma lista de parâmetros entre parênteses ( ) e o bloco de código
associado.

Vimos anteriormente que podemos utilizar diversos operadores e funções nos nossos algoritmos.
Podemos, também, definir novas funções. A utilização de funções algorítmicas tem duas grandes
vantagens:

a) Possibilita tratar problemas complexos: um algoritmo grande pode ser dividido em partes, sendo cada
parte escrita como uma função.

b) Possibilita diminuir o custo/tempo de desenvolvimento de programas: podemos utilizar num


algoritmo funções previamente escritas para outros algoritmos.

02

No exemplo abaixo apresentamos uma função de leitura e uma de escrita. Essas duas funções já foram
apresentadas nos módulos passados.

leia (k), k=k+1, escreva (k)

No exemplo acima a função leia() irá receber um valor e a função escreva() apresentará na tela a soma
dos valores da variável k.

Note que uma semântica especial foi atribuída aos algoritmos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

1
101 – Algoritmo | Unidade 03

Essa atribuição descreve um significado previamente definido pelo interpretador, elas não podem ser
utilizadas para outro fim, senão aquele a que foi originalmente atribuída. O interpretador pode ser
qualquer um ou qualquer coisa que vá ler o algoritmo.

03

As funções são divididas em classes:

Existem, também, as funções de cadeia e funções de arquivo, as quais serão estudadas no próximo
módulo.

Apresentaremos a seguir algumas funções, com exemplos, que serão utilizadas para facilitar o trabalho
do dia a dia do profissional de TI, as quais simplificarão os algoritmos daqui por diante.

Exemplos de palavras reservadas:


registro, conjunto, arquivo, fluxo, se, senao, selecao, caso, repita, ateque, enquanto, para, ate, passo,
retorne, interrompa, continue.
Símbolos reservados:
+- * / % ^ := = <- == # > >= < <=
& | ! " ' . () {} [] , ;

Exemplos de funções de interface:


Tecla( ), Direitos( ), CopyRight( ), LimpaTela ( ); Imprima ( ); Linha ( ); Coluna ( ); CorDoTexto ( );
CorDoFundo ( )

São exemplos de funções matemáticas:


Seno( ), Coseno( ), Tangente( ), ArcoSeno ( ), ArcoCoseno ( ), ArcoTangente ( ), Exponencial( ), LogDec( ),
LogNeper( ), Logaritmo ( )

© 2014 - AIEC - Associação Internacional de Educação Continuada

2
101 – Algoritmo | Unidade 03

04

2 - SINTAXE DE ALGUMAS FUNÇÕES DE INTERFACE


Escreva( ) - A função tem por objetivo realizar a saída de informações para a tela. A
função escreva() não retorna valor. Quando colocado aspas irá apresentar na tela o texto que estiver
dentro. Para apresentar o valor de uma variável deve ser colocado sem as aspas. E se quiser mostrar
uma mensagem e o valor da variável deve colocar o sinal de vírgula após as aspas - escreva(”nº”, n).

Veja o exemplo abaixo:

inicio
inteiro maior,menor,res;
escreva("digite o maior número: ");
leia(maior);
escreva("digite o menor número: ");
leia(menor);
enquanto (menor != 0)
inicio
res ← maior mod menor;
maior ← menor;
menor ← res;
fim
escreva("o mdc entre os números é igual a", maior);
fim

05

Leia( ) - A função tem por objetivo realizar a entrada de informações para o processador. A
função leia() não retorna valor. Quando colocado aspas irá apresentar na tela o texto que estiver
dentro. Para apresentar o valor de uma variável deve ser colocado sem as aspas. E se quiser mostrar
uma mensagem e o valor da variável deve colocar o sinal de vírgula após as aspas - leia( ”nº”, n).

Veja o exemplo abaixo:

inicio
inteiro maior,menor,res;
escreva("digite o maior número: ");
leia(maior);
leia("digite o menor número: ", menor);
enquanto (menor != 0)
inicio

© 2014 - AIEC - Associação Internacional de Educação Continuada

3
101 – Algoritmo | Unidade 03

res ← maior mod menor;


maior ← menor;
menor ← res;
fim
escreva("o mdc entre os números é igual a", maior);
fim

06

Moldura( ) - A função tem por objetivo fazer um quadro com linhas duplas na tela. A
função moldura() não retorna valor.

Ela é chamada com a seguinte sintaxe:

Moldura ( exprN1, exprN2, exprN3, exprN4 ); onde exprN1, exprN2, exprN3 e exprN4 são expressões
numéricas do tipo inteiro, que representam as coordenadas dos cantos superior esquerdo e inferior
direito do quadro - Moldura (L1, C1, L2, C2). As coordenadas são especificadas em pares de números
inteiros, onde o primeiro representa a linha e o segundo representa a coluna.

Veja o exemplo abaixo:

inicio
Moldura (4, 5, 16, 60);
escreva("Bom dia aluno");
fim

07

Pausa( ) - A função tem por objetivo fazer uma interrupção na execução do algoritmo e aguardar a tecla
<enter> ser pressionada. A função pausa() não retorna valor. A função não recebe letras ou números,
somente o parêntese.

Veja o exemplo abaixo:

© 2014 - AIEC - Associação Internacional de Educação Continuada

4
101 – Algoritmo | Unidade 03

inicio
inteiro maior,menor,res;
escreva("digite o maior número: ");
leia(maior);
escreva("digite o menor número: ");
leia(menor);
enquanto (menor != 0)
inicio
res ← maior mod menor;
maior ← menor;
menor ← res;
fim
escreva(“aperte a tecla <enter> para continuar”); pausa();
escreva("o mdc entre os números é igual a", maior);
fim

08

LimpaTela( ) - A função tem por objetivo limpar a tela do vídeo. A função não retorna valor.

Veja o exemplo abaixo:

inicio
Moldura (4, 5, 16, 60);
escreva("Bom dia aluno");
LimpaTela();
fim

09

Imprima( ) - A função tem por objetivo enviar a saída de informações para a impressora. A
função imprima() não retorna valor.

Veja o exemplo abaixo:

© 2014 - AIEC - Associação Internacional de Educação Continuada

5
101 – Algoritmo | Unidade 03

inicio
inteiro maior,menor,res;
escreva("digite o maior número: ");
leia(maior);
leia("digite o menor número: ", menor);
enquanto (menor != 0)
inicio
res ← maior mod menor;
maior ← menor;
menor ← res;
fim
imprima("o mdc entre os números é igual a", maior);
fim

10

3 - SINTAXE DE ALGUMAS FUNÇÕES MATEMÁTICAS


Sinal( ) - A função retorna o valor inteiro 1 se o argumento passado à função for positivo e, retorna –1 se
o argumento passado à função for negativo. A função é chamada com a sintaxe S := Sinal ( exprN ); onde
exprN é uma expressão de classe numérica ( tipo inteiro ou real) e S é uma variável do tipo inteiro.

Veja o exemplo abaixo:

inicio
inteiro s, i, j;
real n;
i ← 0;
j ← 0;
enquanto (n != 0)
inicio
escreva("digite qualquer número: ");
leia(n);
S := sinal(n);
Se S = 1
i = i + 1;
senão
j=j+1
fim
imprima("foram digitados", i, “números positivos e “, j “números negativos”);
fim

11

© 2014 - AIEC - Associação Internacional de Educação Continuada

6
101 – Algoritmo | Unidade 03

ParteInteira( ) - A função retorna a parte inteira de seu argumento, isto é, os dígitos decimais são
ignorados. Ela é chamada com a sintaxe N := ParteInteira ( exprN );

Veja o exemplo abaixo:

inicio
inteiro s;
real n;
escreva("digite qualquer número: ");
leia(n);
S := ParteInteira(n);
imprima("Foi digitado o número", n, “e sua parte inteira é”, S);
fim

12

ParteDecimal( ) - função ParteDecimal() retorna a parte decimal de seu argumento, isto é, os dígitos
inteiros são ignorados.
Ela é chamada com a sintaxe N := ParteDecimal ( exprN );
Veja o exemplo abaixo:

inicio
inteiro s;
real n;
escreva("digite qualquer número: ");
leia(n);
S := ParteDecimal(n);
imprima("Foi digitado o número", n, “e sua parte decimal é”, S);
fim

Exemplo com as duas funções:

inicio
inteiro s, p;
real n;
escreva("digite qualquer número: ");
leia(n);
P := ParteDecimal(n);
S := ParteInteira(n);
imprima("Foi digitado o número", n, “e sua parte inteira é ”, S, “e sua parte decimal é “, P);
fim

13

© 2014 - AIEC - Associação Internacional de Educação Continuada

7
101 – Algoritmo | Unidade 03

Quociente( ) – a função retorna o quociente entre seus argumentos. O valor de retorno é do tipo real.
Ela é chamada com a sintaxe Q := Quociente ( exprN1, exprN2 ); onde exprN1 e exprN2 são expressões
numéricas e exprN2 deve ser diferente de zero. A função retorna o valor de exprN1 / exprN2.

Veja o exemplo abaixo:

inicio
inteiro i, j;
real Q
escreva("digite qualquer número que queira dividir: ");
leia(i);
escreva(“digite o denominador da divisão “, j)
Q := Quociente(i, j)
escreva("O quociente ou o resultado da divisão dos números ”, i, “e ”, j, “é”, Q);
fim

14

Resto( ) - a função retorna o resto da divisão inteira entre seus argumentos. O valor de retorno é do tipo
inteiro.
Ela é chamada com a sintaxe R := Resto ( exprN1, exprN2 ); onde exprN1 e exprN2 são expressões
numéricas e exprN2 deve ser diferente de zero. A função retorna o valor do resto de exprN1 / exprN2.
Veja os exemplos abaixo:

inicio
inteiro R, i, j;
escreva("digite qualquer número que queira dividir: ");
leia(i);
escreva(“digite o denominador da divisão “, j)
R := Resto(i, j)
escreva("O resto da divisão dos números”, i, “e ”, j, “é”, r);
fim

Exemplo com as duas funções:

inicio
inteiro R, i, j;
escreva("digite qualquer número que queira dividir: ");
leia(i);
escreva(“digite o denominador da divisão “, j)
Q := Quociente(i, j)
R := Resto(i, j)
escreva("O quociente ou o resultado da divisão dos números ”, i, “e ”, j, “é”, Q);

© 2014 - AIEC - Associação Internacional de Educação Continuada

8
101 – Algoritmo | Unidade 03

escreva("O resto da divisão dos números”, i, “e ”, j, “é”, r);


fim

15

Raiz( ) - a função retorna a raiz quadrada de seu argumento. O valor de retorno é do tipo real.
Ela é chamada com a sintaxe R := Raiz (exprN); onde exprN é expressão numérica e exprN deve ser
positivo.

Veja o exemplo abaixo:

inicio
inteiro n;
real: r;
escreva("Digite um número e descubra qual a sua raiz quadrada: ");
leia(n);
R := Raiz(n);
escreva("A raiz quadrada do número “, n, “é ", R);
fim

16

Potencia( ) - a função retorna a potenciação entre seus argumentos. O valor de retorno é do tipo real.
Ela é chamada com a sintaxe P := Potencia (exprN1, exprN2); onde exprN1 e exprN2 são expressões
numéricas. A função retorna o valor de exprN1 elevado a exprN2.

Veja o exemplo abaixo:

inicio
inteiro n, p, j;
escreva("digite o número que queira elevar, ou potencializar: ");
leia(n);
escreva("digite o número elevado ");
leia(j);
P:= potencia(n,j);
escreva("O resultado da potência foi”, P);
fim

17

RESUMO

© 2014 - AIEC - Associação Internacional de Educação Continuada

9
101 – Algoritmo | Unidade 03

Nessa Unidade evoluímos na arte da construção de algoritmos. Começamos a tratar das funções, que
ajudam e simplificam em muito os algoritmos e futuramente a programação. Vimos as diferentes classes
de funções:

Palavras reservadas - relacionadas com a definição de tipos de dados e também com as estruturas de
controle do fluxo; as palavras reservadas não podem ser utilizadas, pois já possuem as suas próprias
características.

Funções de interface - são as instruções que nos permitem realizar um diálogo entre nosso algoritmo e
o usuário.

Funções matemáticas – instruções que nos permitem utilizar de recursos matemáticos frequentemente
solicitados na resolução de algum tipo de problema. Com as funções matemáticas tornou mais fácil a
forma de realizar cálculos.

UNIDADE 3 – FUNÇÕES, RECURSIVIDADE, FILA E


PILHA
MÓDULO 2 – FUNÇÕES DE CADEIA E ARQUIVOS
01

1 – CONCEITOS
Depois de estudarmos as palavras reservadas, as funções de interface e as funções matemáticas,
continuaremos, neste módulo, a estudar as funções. Veremos agora outras igualmente importantes
para o dia a dia, que são funções de cadeia e funções de arquivos.

As funções em cadeia tratam das variáveis do tipo literal e caractere. Posteriormente aprenderemos o
uso de vetores e matrizes com as funções de cadeia, portanto, é importante que você compreenda bem
o conteúdo deste módulo, pois servirá de apoio para o estudo dos próximos módulos.

Estudaremos agora as seguintes funções:

© 2014 - AIEC - Associação Internacional de Educação Continuada

10
101 – Algoritmo | Unidade 03

Apresentaremos a seguir algumas funções, com exemplos, que serão utilizadas para facilitar o trabalho
do dia a dia do profissional de TI. Funções que simplificarão os algoritmos estudados nos dois primeiros
módulos.

São exemplos de funções em cadeia:


Compara( ), Maiusculas( ), Minusculas( ), Insere( ), SobrePoe( ), CadeiaParaInteiro( ), CadeiaParaReal(),
InteiroParaCadeia(), RealParaCadeia( ).

São exemplos de funções de arquivos:


Gravar ( ), Regravar ( ), Deletar (), Ler ( ), Posicionar ( ), FDA ()

02

2 - SINTAXE DE ALGUMAS FUNÇÕES DE CADEIA


Comprimento( ) – a função retorna o comprimento do conteúdo em quantidade de caracteres. O valor
retornado pela função é do tipo inteiro. O conteúdo está dentro dos parênteses (conteúdo).

Ela é chamada com a seguinte sintaxe:

C:= Comprimento (conteúdo); onde conteúdo é uma expressão do tipo cadeia (literal) e C representa
uma variável qualquer, de classe numérica, que receberá o valor retornado pela função.

Veja o exemplo abaixo:

inicio
inteiro C;
literal nome;
escreva("digite o seu nome: ");
leia(nome);
c:= Comprimento (nome);
escreva("seu nome possui ", c, “letras”);
fim

03

Concatena( ) - a função retorna os seus conteúdos concatenados em uma única cadeia, sem espaços
entre eles. O valor retornado pela função é do tipo cadeia (literal).

Ela é chamada com a seguinte sintaxe:

© 2014 - AIEC - Associação Internacional de Educação Continuada

11
101 – Algoritmo | Unidade 03

A:= Concatena( conteúdo, conteudo1,... ); onde conteúdo é uma expressão do tipo cadeia (literal) e A
representa uma variável qualquer, do tipo cadeia, que receberá o valor retornado pela função. As
reticências significam que a função pode receber vários conteúdos, sendo eles separados por vírgulas.

Veja o exemplo abaixo:

inicio
literal nome, sobrenome, c;
escreva("digite o seu primeiro nome: ");
leia(nome);
escreva("digite o seu sobrenome: ");
leia(sobrenome);
c := Concatena(nome, sobrenome)
imprima("Bom dia ”, c);
fim

04

SubCadeia( ) - a função retorna um conteúdo de seu sub conteúdo. O valor retornado pela função é do
tipo cadeia (literal).

Ela é chamada com a seguinte sintaxe:


L := SubCadeia(conteúdo, N1, N2); onde conteúdo é uma expressão do tipo cadeia da qual se deseja
uma sub conteúdo, N1 é uma valor ou resultado de uma expressão do tipo inteiro que representa a
posição do primeiro caractere do conteúdo e, N2 representa a quantidade de caracteres que deseja
capturar do conteúdo.

Veja o exemplo abaixo:

inicio
literal nome, sobrenome, N, S ;
escreva("digite o seu primeiro nome: ");
leia(nome);
N := SubCadeia(nome, 1, 1)
escreva("digite o seu sobrenome: ");
leia(sobrenome);
S := SubCadeia(sobrenome, 1, 1)
imprima("Bom dia”, nome, “seu sobrenome é”, sobrenome, “suas iniciais são ", N, S);
fim

05

Primeiros( ) - a função retorna uma subcadeia de seu conteúdo. O valor retornado pela função é do tipo
cadeia (literal).

© 2014 - AIEC - Associação Internacional de Educação Continuada

12
101 – Algoritmo | Unidade 03

Ela é chamada com a seguinte sintaxe:

S:= Primeiros (Conteúdo, N ); onde Conteúdo é uma expressão do tipo cadeia da qual se deseja uma
subcadeia, N é uma número ou resultado de uma expressão do tipo inteiro que representa a quantidade
de caracteres do Conteúdo, contados a partir de seu início, que se deseja retornar.

Veja o exemplo abaixo:

inicio
literal nome, N;
escreva("digite o seu primeiro nome: ");
leia(nome);
N := Primeiros(nome, 4)
imprima("As 4 primeiras letras iniciais do seu nome são”, N);
fim

06

Ultimos( ) - a função retorna uma subcadeia de seu conteúdo. O valor retornado pela função é do tipo
cadeia (literal).

Ela é chamada com a seguinte sintaxe:

N := Ultimos(Conteúdo, m); onde Conteúdo é uma expressão do tipo cadeia da qual se deseja uma
subcadeia, m é um número ou uma expressão do tipo inteiro que representa a quantidade de caracteres
do Conteúdo, contados a partir de seu final, que se deseja retornar.

Veja o exemplo abaixo:

inicio
literal nome, N;
escreva("digite o seu primeiro nome: ");
leia(nome);
N := Ultimos(nome, 2)
imprima("As duas letras finais do seu nome são”, N);
fim

07

Compara( ) - a função tem por objetivo comparar duas cadeia (duas variáveis literais) com relação a
ordem alfabética de seus conteúdos. Ela retorna um valor inteiro, negativo, nulo ou positivo de acordo
com a ordem de passagem de seus conteúdos.

Ela é chamada com a seguinte sintaxe:

© 2014 - AIEC - Associação Internacional de Educação Continuada

13
101 – Algoritmo | Unidade 03

S := Compara(nome1, nome2); onde nome1 e nome2 são expressões do tipo cadeia (literal). Se os
valores representados pelas expressões nome1 e nome2 forem iguais o valor de retorno é 0 (zero), se
nome2 for maior que nome1, isto é, nome2 representar um valor que está em uma posição à frente de
nome1, considerando a ordem alfabética, o valor de retorno será 1 (um), caso contrário o valor de
retorno será –1. Assim sendo, o valor de retorno será negativo se a ordem dos argumentos estiver
diferente da ordem alfabética dos mesmos.

Veja o exemplo abaixo:

inicio
inteiro N;
literal nome, nome1;
escreva("digite o primeiro nome: ");
leia(nome);
escreva("digite o segundo nome: ");
leia(nome1);
N := Compara(nome, nome1)
inicio
Se n = 0
Imprima(“nomes iguais”);
Se n = 1
Imprima(“Primeiro nome na ordem alfabética”, nome)
Se n =-1
Imprima(“Primeiro nome em ordem alfabética”,nome1)
fim
fim

08

Maiusculas( ) - a função tem por objetivo retornar o seu conteúdo transformado em maiúsculas. O valor
de retorno é do tipo cadeia (literal).

Ela é chamada com a seguinte sintaxe:

M := Maiusculas(nome); onde nome é uma expressão do tipo cadeia (literal).

Veja o exemplo abaixo:

inicio
literal nome, N;
escreva("digite o seu nome: ");
leia(nome);
N := Maiusculas(nome)

© 2014 - AIEC - Associação Internacional de Educação Continuada

14
101 – Algoritmo | Unidade 03

imprima("Bom dia, seu nome com caracteres em maiúsculo é ”, nome);


fim

09

Minusculas( ) - a função tem por objetivo retornar o seu conteúdo transformado em minúsculas. O
valor de retorno é do tipo cadeia (literal).

Ela é chamada com a seguinte sintaxe:

N := Minusculas(nome); onde nome é uma expressão do tipo cadeia (literal).

Veja o exemplo abaixo:

inicio
literal nome, N;
escreva("digite o seu nome: ");
leia(nome);
N := Minusculas(nome)
imprima("Bom dia, seu nome com caracteres em minúsculo é ”, nome);
fim

10

CadeiaParaInteiro( ) - a função tem por objetivo retornar um numérico do tipo inteiro correspondente a
cadeia numérica de seu conteúdo.

Ela é chamada com a seguinte sintaxe:

V := CadeiaParaInteiro(conteúdo); onde conteúdo é uma expressão do tipo cadeia (literal). Se a cadeia


especificada em conteúdo não puder ser convertida em inteiro, o valor de retorno será 0 (zero) e V
representa uma variável do tipo inteiro.

Veja o exemplo abaixo:

inicio
inteiro V;
literal N;
escreva("digite um número: ");
leia(N);
V := CadeiaParaInteiro(N)
Se V = 0
inicio
escreva(“Número não inteiro”)
senão

© 2014 - AIEC - Associação Internacional de Educação Continuada

15
101 – Algoritmo | Unidade 03

escreva("O número transformado para inteiro é: ", N);


fim
fim

11

3 - SINTAXE DE ALGUMAS FUNÇÕES DE ARQUIVO


Vincular( ) - a função tem por objetivo estabelecer uma ligação entre um identificador lógico que será
utilizado no texto do algoritmo e o correspondente identificador físico do arquivo em disco.

Ela é chamada com a seguinte sintaxe:

Vincular (nome arquivo, nome arquivo); onde nome arquivo representa o nome lógico do arquivo
utilizado no algoritmo e, nome arquivo representa o nome físico do arquivo no disco.

Veja o exemplo abaixo:

inicio
literal clientes ;
Criar (clientes);
Criar (“arq001.dat”);
Vincular(clientes, “arq001.dat”);
Abrir (clientes);
Gravar (clientes, “teste de gravação 1”);
Gravar (clientes, “teste de gravação 2”);
Posicionar (clientes, INICIO);
Gravar (clientes, “teste de gravação 0”);
Posicionar (clientes, FINAL);
Gravar (clientes, “teste de gravação 3”);
Fechar (clientes);
fim

12

Criar ( ) - a função tem por objetivo criar o arquivo físico no disco.

Ela é chamada com a seguinte sintaxe:

Criar (nome arquivo); onde nome arquivo representa o identificador lógico do arquivo ou o seu
identificador físico.

Veja o exemplo abaixo:

© 2014 - AIEC - Associação Internacional de Educação Continuada

16
101 – Algoritmo | Unidade 03

inicio
literal clientes ;
Criar (clientes);
Criar (“arq001.dat”);
Vincular (clientes, “arq001.dat”);
Abrir (clientes);
Gravar (clientes, “teste de gravação 1”);
Gravar (clientes, “teste de gravação 2”);
Posicionar (clientes, INICIO);
Gravar (clientes, “teste de gravação 0”);
Posicionar (clientes, FINAL);
Gravar (clientes, “teste de gravação 3”);
Fechar (clientes);
fim

13

Abrir ( ) - a função tem por objetivo abrir o arquivo físico no disco.

Ela é chamada com a seguinte sintaxe:

Abrir (nome arquivo); onde nome arquivo representa o identificador lógico do arquivo ou o seu
identificador físico.

Veja o exemplo abaixo:

inicio
literal clientes;
Criar (clientes ;
Criar (“arq001.dat”);
Vincular (clientes, “arq001.dat”);
Abrir (clientes);
Gravar (clientes, “teste de gravação 1”);
Gravar (clientes, “teste de gravação 2”);
Posicionar (clientes, INICIO);
Gravar (clientes, “teste de gravação 0”);
Posicionar (clientes, FINAL);
Gravar (clientes, “teste de gravação 3”);
Fechar (clientes);
fim

14

Fechar ( ) - a função tem por objetivo fechar o arquivo físico no disco.

© 2014 - AIEC - Associação Internacional de Educação Continuada

17
101 – Algoritmo | Unidade 03

Ela é chamada com a seguinte sintaxe:

Fechar (nome arquivo); onde nome arquivo representa o identificador lógico do arquivo ou o seu
identificador físico.

Veja o exemplo abaixo:

inicio
literal clientes;
Criar (clientes);
Criar (“arq001.dat”);
Vincular (clientes, “arq001.dat”);
Abrir (clientes);
Gravar (clientes, “teste de gravação 1”);
Gravar (clientes, “teste de gravação 2”);
Posicionar (clientes, INICIO);
Gravar (clientes, “teste de gravação 0”);
Posicionar (clientes, FINAL);
Gravar (clientes, “teste de gravação 3”);
Fechar (clientes);
fim

15

Gravar ( ) - a função tem por objetivo gravar as informações no arquivo físico.

Ela é chamada com a seguinte sintaxe:

Gravar (nome arquivo algoritmo, nome arquivo); onde nome arquivo algoritmo representa o
identificador lógico ou físico do arquivo e nome arquivo representa a informação que se deseja
armazenar.

Veja o exemplo abaixo:

inicio
literal clientes;
Criar (clientes);
Criar (“arq001.dat”);
Vincular (clientes, “arq001.dat”);
Abrir (clientes );
Gravar (clientes, “teste de gravação 1”);
Gravar (clientes, “teste de gravação 2”);
Posicionar (clientes, INICIO);
Gravar (clientes, “teste de gravação 0”);

© 2014 - AIEC - Associação Internacional de Educação Continuada

18
101 – Algoritmo | Unidade 03

Posicionar (clientes, FINAL);


Gravar (clientes, “teste de gravação 3”);
Fechar (clientes);
fim

16

Posicionar ( ) - a função tem por objetivo permitir o posicionamento em uma determinada informação
no arquivo físico.

Ela é chamada com a seguinte sintaxe:

Posicionar (nome, pos); onde nome representa o identificador lógico ou físico do arquivo e pos a posição
em que se deseja apontar no arquivo. Pode ser INÍCIO e FIM.

Veja o exemplo abaixo:

inicio
literal cliente;
Criar (clientes );
Criar (“arq001.dat”);
Vincular (clientes, “arq001.dat”);
Abrir (clientes );
Gravar (clientes, “teste de gravação 1”);
Gravar (clientes, “teste de gravação 2”);
Posicionar (clientes, INICIO);
Gravar (clientes, “teste de gravação 0”);
Posicionar (clientes, FINAL );
Gravar (clientes, “teste de gravação 3”);
Fechar (clientes);
Fim

17

RESUMO
Nesse módulo continuamos o estudo das funções. Vimos funções de cadeia e funções de arquivos. As
funções de cadeia são as instruções que nos permitem tratar sequência de caracteres. As cadeias são
recursos bastante utilizados na programação em geral. As funções para o tratamento de arquivo são as
instruções que nos permitem tratar informações que poderão ser armazenadas indefinidamente no
computador, mas necessariamente em arquivos.

UNIDADE 3 – FUNÇÕES, RECURSIVIDADE, FILA E


PILHA

© 2014 - AIEC - Associação Internacional de Educação Continuada

19
101 – Algoritmo | Unidade 03

MÓDULO 3 – PONTEIROS E RECURSIVIDADE


01

1 - PONTEIROS
Para entender o que são os ponteiros, imagine a seguinte situação: você trabalha no departamento de
Recursos Humanos de uma empresa há muito tempo, desde a sua criação, portanto, você sabe
exatamente em que local as pessoas trabalham e o que fazem. Assim, quando chega alguma encomenda
ou uma correspondência na empresa, sempre acabam recorrendo a você, que serve de referência,
apontando exatamente onde encontrar a pessoa que estão procurando.

Os ponteiros possuem exatamente a mesma ideia, ou seja, são eles que possuem o poder de armazenar
a localização onde estão guardadas determinadas informações.

Falando em termos de algoritmos, podemos entender um ponteiro como uma variável que armazena
um endereço de memória onde está localizado um valor.

02

Utilidades dos ponteiros

Os ponteiros são utilizados em diversas situações. Podemos citar, por exemplo, a atualização de valores
que são utilizados em várias partes dos algoritmos e que, por algum motivo, precisam ser atualizados ao
longo da vida útil do mesmo. Para solucionar esta situação, basta referenciarem-se estes valores em
uma função e aplicar sobre eles operações que alterem seus valores de forma pertinente e a replicação
ocorre automaticamente.

Quando um ponteiro contém o endereço de uma variável, dizemos que o ponteiro está "apontando"
para essa variável.

Na imagem abaixo apresenta as variáveis i, f e j com os seus respectivos valores 2450, 225.345 e 11331,
e os endereços de cada variável respectivamente 1002, 1004 e 1005.

03

© 2014 - AIEC - Associação Internacional de Educação Continuada

20
101 – Algoritmo | Unidade 03

Importante para o início da utilização

Para utilizarmos o ponteiro em nossos algoritmos devemos conhecer o seu comando, ou forma de
representar em um pseudocódigo.

Os símbolos abaixo são utilizados nessa representação de utilização dos ponteiros.

& significa “endereço de”


* significa “conteúdo do endereço para onde aponta”

Quando declaramos int i=240, estamos declarando para a memória reservar um espaço para valores do
tipo inteiro. Simultaneamente é atribuído o valor 240 à variável i, o que significa que no endereço de
memória associado à variável i é armazenado o valor 240.

Como dito anteriormente, o uso de ponteiros pode ser justificado quando é necessária a utilização da
variável em outros momentos dos algoritmos. Neste caso, poderiam existir vários apontadores ou
ponteiros espalhados pelo programa, apontando para essa variável, que deteria o conteúdo desejado (a
informação). Toda e qualquer modificação no dado seria feita no conteúdo da variável a que todos os
apontadores fariam a referência, ou seja, diferentes partes do programa sempre estariam acessando um
valor de dado atualizado.

Ponteiros ou apontadores são variáveis que armazenam um endereço de memória (isto é, o endereço
de outras variáveis). Eles fornecem um mecanismo para acessar diretamente e objetos e código de
modificação na memória. Os ponteiros são utilizados em muitas linguagens de programação, cada
ponteiro tem um tipo, podendo ser um tipo para cada tipo de linguagem ou um tipo definido pelo
programador. Dessa forma, podemos ter ponteiros para inteiros, ponteiros para real, ponteiros para
manipular cadeias de caracteres, para passar parâmetros para funções, manipulação matrizes de dados
e criação de listas ligadas e outras estruturas de dados complexas.

04

O acesso direto na memória proporciona uma melhora no desempenho da sua aplicação. Quando um
ponteiro contém o endereço de uma variável, dizemos que o ponteiro está "apontando" para essa
variável. Uma função a ser passada como um parâmetro para outra função. Um ponteiro de função
pode ser atribuído o endereço de uma das opções de funções, de modo que o ponteiro atua como uma
espécie de apelido. Linguagens de programação orientadas a objetos eliminaram a necessidade de
ponteiros de função com herança e polimorfismo.

Estes são exemplos de declarações de tipos de ponteiro:

© 2014 - AIEC - Associação Internacional de Educação Continuada

21
101 – Algoritmo | Unidade 03

O operador do ponteiro “*” pode ser usado para acessar o conteúdo no local apontado pela variável de
ponteiro. Por exemplo, considere a seguinte declaração:

Exemplo em pseudocódigo de função:

Inteiro *pont;
Inteiro x
início
x ← 10
*pont ← &x
Escreva(“O endereço de memória da variável ”,x”é”, &x);
Escreva(“O valor da memória apontada é ", pont*);
Fim

No trecho acima simplesmente foi criado um ponteiro, alocando a memória para ele, logo após
atribuindo um valor à variável e finalizando com a escrita na tela.

05

2 - RECURSIVIDADE (OU RECURSÃO)


Recursão é o processo de definir algo em termos de si mesmo e é, algumas vezes, chamado de
definição circular.

Pode-se dizer que o conceito de algo recursivo está dentro de si, que por sua vez está dentro de si e
assim sucessivamente, infinitamente, ou seja, se não tiver um mecanismo de saída ou de parada o
algoritmo entrará em loop.

O termo loop é usado na TI para coisas que ficam girando ou rodando sem fim.
O exemplo a seguir mostra a foto de um espelho de frente a outro espelho, onde representa a
recursividade no dia a dia.

© 2014 - AIEC - Associação Internacional de Educação Continuada

22
101 – Algoritmo | Unidade 03

06

Vamos examinar um exemplo coloquial de procedimento recursivo. Imaginemos ter que encontrar no
dicionário o significado da palavra "jururu". É claro que ninguém vai ler sequencialmente o dicionário
até chegar à palavra procurada.

Vamos definir o processo de achar uma palavra num dicionário em termos algorítmicos mais ou menos
livres procura-palavra (Dicionário, palavra-procurada):

abrir o dicionário nas palavras que iniciam com a letra “j”


ler sequencialmente duas páginas
se palavra procurada estiver nas páginas
fim da procura
se palavra procurada não estiver nas páginas
procura palavra nas próximas páginas
se palavra-procurada for encontrada
imprimir a sua definição fim do algoritmo
fim se
se palavra-não for encontrada
imprimir ("palavra procurada não existe")fim do algoritmo
fim se
fim se
fim da leitura sequencial
fim

O algoritmo é recursivo no sentido de que ele chama a ele mesmo. Note que ocorre a procura da
palavra várias vezes até encontrá-la, ou, caso depois da procura não se encontre o que deseja, ele
encerra o algoritmo. Nesse caso, o processo é finito, já que, a cada chamada, o universo de pesquisa é
menor. Na primeira vez, ele é todo o dicionário, na segunda vez, apenas a metade, na terceira vez, uma
quarta parte e assim por diante. Finalmente, há uma condição que estabelece o fim da pesquisa.

© 2014 - AIEC - Associação Internacional de Educação Continuada

23
101 – Algoritmo | Unidade 03

No exemplo do dicionário, vimos às três características que um problema recursivo tem que ter:

1. Um processo que chame a si mesmo.


2. A garantia de que a cada chamada, o universo de trabalho do processo será "menor".
3. Uma condição, que obrigatoriamente ocorrerá, que indique quando terminar.

07

Definições como “recursividade” são normalmente encontradas na matemática. O grande apelo que o
conceito da recursão traz é a possibilidade de dar uma definição infinita para um conjunto que pode ser
finito. Um bom exemplo é o cálculo do fatorial.

0! = 1
1! = 1
n!=n.(n-1)…3.2.1

Você já deve ter estudado, na matemática, a expressão fatorial: o fatorial de um número natural n é o
produto de todos os inteiros positivos menores ou iguais a n. Isso é escrito como n! e lido como
"fatorial de n". A notação n! foi introduzida por Christian Kramp em 1808.

O exemplo abaixo demonstra a fórmula do fatorial de qualquer número, onde n é um número inteiro
positivo:

F(n) = 1 se n = 0 ou n = 1

F(n) = n.F(n-1), se n>1

Esta propriedade é chamada de propriedade recursiva: o fatorial de um número pode ser calculado
através da multiplicação do número pelo fatorial de seu antecessor.

08

Ora, podemos utilizar esta propriedade para escrevermos uma rotina recursiva para o cálculo de
fatorial.

Vejamos: F(n) = n.F(n-1), se n>1

F(4) = 4.F(4-1)
F(3) = 3.F(3-1)
F(2) = 2.F(2-1)
F(1) = 1.F(1-1)

Temos então a fórmula, que é facilmente verificável:

n! = n . (n-1)!

© 2014 - AIEC - Associação Internacional de Educação Continuada

24
101 – Algoritmo | Unidade 03

Fatorial (4) = 4 * fatorial (4 – 1)


= 4 * fatorial (3)
= 4 * 3 * fatorial (3 - 1)
= 4 * 3 * fatorial (2)
= 4 * 3 * 2 * fatorial (2-1)
= 4 * 3 * 2 * fatorial (1)
= 4 * 3 * 2 * 1 * fatorial (1-1)
= 4 * 3 * 2 * 1 * fatorial (0)
=4*3*2*1*1
=24
09

Na computação o conceito de recursividade é amplamente utilizado, mas deve-se tomar cuidado em sua
utilização, pois necessita de uma condição para provocar o fim do ciclo recursivo. Essa condição deve
existir, pois, devido às limitações técnicas que o computador apresenta, a recursividade é impedida de
continuar eternamente.

Nos anos 90 grandes CPD (Centro de Processamento de Dados) possuíam salas com impressoras que
atendiam a várias equipes. Essas impressoras imprimiam 10 a 20 folhas por segundo e um programa que
entrava em loop, ou seja, em uma função recursiva sem saída, gerava milhares de páginas de erros do
programa. Como funcionava? O analista construía ou alterava um sistema e mandava rodar e imprimir
logo a seguir para ver o resultado. O técnico da sala de impressão ligava imediatamente quando dava
erro na impressão, algumas vezes tarde demais, e muitas folhas de papel iam para o lixo.

10

3 - VANTAGENS E DESVANTAGENS DA RECURSÃO

© 2014 - AIEC - Associação Internacional de Educação Continuada

25
101 – Algoritmo | Unidade 03

Muito importante realizar testes nas aplicações que estão sendo implantadas, principalmente nos
programas com rotinas recursivas. Os testes evitam problemas com códigos que não estão funcionando
adequadamente.

11

Exemplo de Recursividade utilizando Linguagem algorítmica

#incluir <biblioteca>
principal()
inicio
inteiro i, num, fat;
fat ← 1;
escreva(“digite um numero: “);
leia(num);
se (num = 0)
escreva(“o fatorial de”, num, “e’”, fat);
senão
início
para(i=1; i<=num ; i ← i+1)
fat = fat*i;
escreva(“o fatorial de”, num, “e’”, fat);
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

26
101 – Algoritmo | Unidade 03

12

Exemplo de recursividade utilizando teste de mesa

13

Exemplo de fatorial utilizando fluxograma

14

RESUMO

© 2014 - AIEC - Associação Internacional de Educação Continuada

27
101 – Algoritmo | Unidade 03

Nesse módulo vimos mais alguns recursos que podemos usar em algoritmos e consequentemente na
programação, ponteiros e recursividade, que facilitam a construção dos algoritmos mais complexos e
mais difíceis.

Podemos entender um ponteiro como uma variável que armazena um endereço de memória onde está
localizado um valor. Os ponteiros ajudam a entender como são armazenadas informações na memória,
como informações de arquivos dos sistemas.

Recursão ou recursividade é o processo de definir algo em termos de si mesmo e é, algumas vezes,


chamado de definição circular. A recursividade apresenta três características fundamentais:

1. Um processo que chame a si mesmo.


2. A garantia de que a cada chamada, o universo de trabalho do processo será "menor".
3. Uma condição, que obrigatoriamente ocorrerá, que indique quando terminar.

A recursividade está nos algoritmos e no nosso dia a dia, tudo o que se repete com certa constância é
chamado de recursivo.

UNIDADE 3 – FUNÇÕES, RECURSIVIDADE, FILA E


PILHA
MÓDULO 4 – LISTA, FILA E PILHA
01

1. LISTA
Vamos supor que você tenha feito uma lista de compras, ou seja, tem um pedaço de papel com diversos
itens, organizados conforme a ordem em que você ia lembrando o que precisava comprar.
Provavelmente essa ordem é a que você seguirá para efetuar as compras, do primeiro item até o último.
Se você é uma pessoa criteriosa, deve ter feito a lista segundo uma sequência lógica, listando os itens
conforme o setor: produtos de limpeza, alimentícios etc. Já no mercado, você vai verificar a lista
novamente, seguir a ordem dela, marcar o que comprou ou não, anotar os preços e verificar se comprou
algo a mais do previsto. A lista de compras, portanto, é um modo de organização, sem a qual você
correria o risco de comprar supérfluos ou deixar de comprar algo essencial.

© 2014 - AIEC - Associação Internacional de Educação Continuada

28
101 – Algoritmo | Unidade 03

No mundo da computação, alguns tipos de dados podem ser organizados em uma cadeia, seja de
números ou de caracteres, que denominamos de lista. É uma estrutura de dados abstrata que
implementa uma coleção ordenada de valores, onde o mesmo valor pode incidir mais de uma vez. Em
suma:

Uma lista é um conjunto ordenado de dados, geralmente do mesmo tipo e essa organização é feita
através da enumeração dos dados para melhor visualização da informação.

02

Inúmeros tipos de dados podem ser representados por listas. Suponhamos, por exemplo, que você
precise fazer um programa que cadastre um número indefinido de pessoas. Para isso, você não irá criar
uma matriz ou vetor, pois mesmo que você crie 1000 posições, isso irá consumir muita memória, desde
o início do processo, sem contar a possibilidade de se ter 900 pessoas, ou até mesmo 1500 pessoas, ou
seja, o valor é variável. Nesse caso, o ideal é criar uma lista encadeada, que é manipulada de forma
dinâmica. Outros exemplos de sistemas de informação que podem utilizar listas são: informações sobre
os funcionários de uma empresa, notas de alunos, itens de estoque etc.

As listas podem ser implementadas de várias maneiras, tanto em uma linguagem de programação
procedural como em uma linguagem de programação funcional.

As listas são estruturas dinâmicas, em oposição aos vetores (arrays), os quais são estruturas estáticas e
contém um conjunto específico de dados. Virtualmente, uma lista pode conter infinitos itens. As
operações sobre listas são limitadas ao tipo de dados que uma lista contém. Por exemplo, listas de
dados numéricos podem ser tratadas matematicamente, enquanto listas de caracteres podem ser
ordenadas, concatenadas. O conjunto de números [20, 13, 42, 23,54] é uma lista numérica de inteiros;
[‘a’, ‘d’, ‘z’, ‘m’, ‘w’, ‘u’] é uma lista de caracteres; e ["maçã”, "abacaxi”, "pera"] é uma lista de frutas.
Sendo que n>= 1, n1 é o primeiro item da lista e xn o último item da lista.

As listas são importantes, pois constituem uma forma simples de interligar os itens de um conjunto,
agrupando informações referentes a um conjunto de elementos que se relacionam entre si de alguma
forma.

As listas são úteis em aplicações tais como manipulação simbólica, em que se manipulam as variáveis
em expressões algébricas, a gerência de memória, que define as prioridades da memória do
computador ou outro dispositivo, simulação, e onde é possível juntar informações sequenciais ou
dinâmicas para realizar uma simulação e compiladores, que gravam uma sequência de procedimentos
para transformar o programa em um software executável.

Lista encadeada
Uma lista ligada ou lista encadeada é uma estrutura de dados linear e dinâmica. Ela é composta por
células que apontam para o próximo elemento da lista. Para "ter" uma lista ligada/encadeada, basta
guardar seu primeiro elemento, e seu último elemento aponta para uma célula nula. O esquema a

© 2014 - AIEC - Associação Internacional de Educação Continuada

29
101 – Algoritmo | Unidade 03

seguir representa uma lista ligada/encadeada com 5 elementos:

Célula 1 ----> Célula 2 ---> Célula 3 ---> Célula 4 ---> Célula 5 ---> (Nulo)

Programação procedural
Programação utilizada nas linguagens mais antigas, como o COBOL, onde possui estruturas que são
chamadas de procedimento ou procedure.

Programação funcional
Programação mais atual, como o ASP, PHP, etc, em que se utilizam funções para montar um aplicativo.
Como exemplo, função para validar CPF, função para buscar endereço pelo CEP, etc.

Estruturas dinâmicas
Uma lista mutável ou dinâmica pode permitir que itens sejam inseridos, substituídos ou excluídos
durante a existência da lista.

Estruturas estáticas
As estruturas de lista estáticas permitem apenas a verificação e enumeração dos valores.

Manipulação simbólica
A manipulação de símbolos é o manuseio da simbologia da matemática, serve assim para resolver
operações algébricas, é o manuseio das variáveis nas expressões matemáticas.

Simulação
É a técnica de estudar o comportamento e reações de determinados sistemas através de modelos. A
simulação computacional de sistemas, ou apenas simulação, consiste na utilização de certas técnicas
matemáticas, empregadas em computadores, as quais permitem imitar o funcionamento de,
praticamente qualquer tipo de operação ou processo do mundo real, ou seja, é o estudo do
comportamento de sistemas reais através do exercício de modelos.

Compiladores
Compilador é um programas que traduz o código fonte de uma linguagem de programação de alto nível
para uma linguagem de programação de baixo nível (por exemplo, Assembly ou código de máquina).
Contudo alguns autores citam exemplos de compiladores que traduzem para linguagens de alto nível
como C.

03

© 2014 - AIEC - Associação Internacional de Educação Continuada

30
101 – Algoritmo | Unidade 03

Características das Listas

As listas possuem operações que possibilitam a sua manipulação. Essa manipulação consiste em
operações para inserir, retirar e localizar itens em qualquer momento que for necessário. Algumas
operações influenciam no tamanho da lista, possibilitando o seu crescimento ou sua diminuição.

Outra característica é que as listas possibilitam também a concatenação de duas ou mais listas e
também a divisão de uma lista em mais listas. As listas podem ser adequadas quando não é possível
prever o tamanho da memória, permitindo a manipulação de quantidades imprevisíveis de dados, de
formato também imprevisível.

Pode-se destacar, também, que cada elemento da lista possui um índice, um número que identifica cada
elemento da lista. Usando o índice de um elemento da lista é possível buscá-lo ou removê-lo.

Tamanho da lista
Quando falamos em “tamanho da lista”, estamos nos referindo ao número de elementos presentes na
lista.

04

Classificação das Listas

Vimos então que podemos definir uma lista como um conjunto ordenado de elementos, geralmente do
mesmo tipo de dado. As listas podem ser classificadas em pilhas e filas, dependendo do tipo de acesso
que pode ser feito aos dados que ela contém.

© 2014 - AIEC - Associação Internacional de Educação Continuada

31
101 – Algoritmo | Unidade 03

05

2 - PILHA
É um tipo especial de lista, onde os elementos são ordenados como um empilhamento de dados,
denominados pilha.

As pilhas representam uma das estruturas mais importantes no processamento de dados. Embora sua
estrutura seja bastante simples, as pilhas desempenham um importante papel nas linguagens de
programação, pois são utilizadas como acumuladores em laços do programa e em chamadas de sub-
rotinas ou funções.

Uma pilha pode ser definida como um conjunto ordenado de dados, no qual se pode inserir e retirar
dados apenas em uma determinada ordem, ou seja, em uma posição denominada “topo da pilha”.

O exemplo acima apresenta um conjunto de pratos, ou seja, uma pilha de pratos, onde se tira
normalmente o primeiro prato até chegar ao último, que foi o primeiro a ser colocado.

06

As pilhas são estruturas muito comuns em algoritmos e o seu processo de atualização se divide
principalmente em duas partes:

© 2014 - AIEC - Associação Internacional de Educação Continuada

32
101 – Algoritmo | Unidade 03

Como visto anteriormente, o topo da pilha, que é a extremidade, serão inseridos e retirados os itens do
mesmo tipo. A pilha também é chamada de lista linear, onde todas as inserções e eliminações são feitas
em apenas uma das extremidades. As imagens acima mostram a representação de uma pilha.
Primeiramente inserindo itens e depois eliminando itens.

07

A estrutura de dados do tipo pilha tem como característica que a última informação a entrar é a
primeira a sair (LIFO - last in first out). A aplicação da estrutura de pilhas é mais frequente em
compiladores e sistemas operacionais, que a utilizam para controle de dados e alocação de variáveis na
memória. O problema no uso de pilhas é controlar o final da pilha. Isto pode ser feito de várias formas,
sendo a mais indicada criar um método para verificar se existem mais dados na pilha para serem
retirados.

Antes de programar a solução de um problema que usa uma pilha, é necessário determinar como
representar uma pilha usando as estruturas de dados existentes na linguagem de programação. Lembre-
se de que uma pilha é um conjunto ordenado de itens, na linguagem C já contém um tipo de dado que
representa um conjunto ordenado de itens, que é o vetor. Então, sempre que for necessário utilizar a
estrutura de pilhas para resolver um problema, pode-se utilizar o vetor para armazenar esta pilha. Vale
lembrar, porém, que a pilha é uma estrutura dinâmica e pode crescer infinitamente, enquanto um vetor
na linguagem C tem um tamanho fixo; contudo, pode-se definir este vetor com um tamanho
suficientemente grande para conter esta pilha.

Exemplo de Algoritmo de utilização de Pilha com tamanho definido

inicio
inteiro i;
real pilha[10], soma;

© 2014 - AIEC - Associação Internacional de Educação Continuada

33
101 – Algoritmo | Unidade 03

para(i←1; i<=10; i←i+1)


inicio
escreva(“Digite o número”, i,”:”);
empilha(pilha[i]);
fim
soma = 0;
para(i←1; i<=10; i←i+1)
escreva (pilha[i])
soma = soma + pilha[i];
escreva(“Soma = “, soma);
fim

08

Operações com Pilha

É possível realizar algumas operações básicas na estrutura de dados Pilha, as mais importantes são a
operação de empilhar (push) e desempilhar (pop). Mas para isso devemos executar outras operações
para que isso seja possível:

• Criar uma estrutura de Pilha;

• Empilhar;

• Desempilhar;

• Informar se a pilha está vazia;

• Informar se a pilha está cheia;

Toda vez que criamos uma estrutura de pilha, esta deve ser inicializada para garantir que não haja
nenhuma "sujeira" no local onde esteja montada. Importante elencar que:

Quando a pilha não está vazia não significa que ela esteja cheia, o que acontece também inversamente,
ou seja, quando a pilha não está cheia, não significa que ela esteja vazia.

Criar uma estrutura de Pilha


Para iniciar o processamento com pilhas é importante criar para iniciar o armazenamento dos dados.

Empilhar
Na estrutura de dados pilha, sempre que um novo item é inserido ele passa a estar no topo da pilha.

© 2014 - AIEC - Associação Internacional de Educação Continuada

34
101 – Algoritmo | Unidade 03

Desempilhar
Na estrutura de dados pilha, sempre o item a ser retirado será o que estiver no topo da pilha, ou seja, o
último que foi empilhado.

Informar se a pilha está vazia


Para verificar se uma pilha está vazia, basta verificar se o topo da pilha está vazio ou se o topo é igual a
0.

Informar se a pilha está cheia


Para verificar se uma pilha está cheia, caso não haja mais espaço para armazenar itens.

09

3 - FILA
Aprenderemos agora o comportamento das filas. Assim como listas e pilhas, as filas são estruturas de
dados que armazenam os elementos de maneira sequencial.

A fila é um conjunto ordenado de itens a partir do qual se podem eliminar itens em uma extremidade,
que é o início da fila, e que podem inserir itens na outra extremidade, que é o final da fila.

O que diferencia a fila da pilha é a ordem de saída dos itens. Relembrando o que já foi estudado,
enquanto na pilha o último item que entra é o primeiro item que sai, na fila o primeiro item que entra é
o primeiro item que sai (FIFO – first in, first out). Abaixo temos duas representações de Fila.

A ideia fundamental da fila é que só podemos inserir um novo elemento no final da fila e só podemos
retirar o elemento do início.

10

© 2014 - AIEC - Associação Internacional de Educação Continuada

35
101 – Algoritmo | Unidade 03

Você deve ter observado que a estrutura de fila é uma analogia natural ao conceito de fila que usamos
em nosso dia a dia: quem primeiro entra numa fila é o primeiro a ser atendido (a sair da fila).

No dia a dia, enfrentamos e até já nos acostumamos às filas em diversos lugares. Quando precisamos ir
ao banco, enfrentamos fila, quando vamos ao mercado, enfrentamos fila, no cinema também, e
infelizmente no hospital às vezes é o que mais demora, entre outros lugares. Mesmo assim as filas são
importantes, pois elas determinam a ordem de atendimento das pessoas. Como seria se não tivéssemos
fila?

A simplicidade de uma fila fica interessante quando começamos a analisá-la. As pessoas são atendidas
conforme a posição delas na fila. O próximo a ser atendido é sempre o primeiro da fila. Quando o
primeiro da fila é chamado para ser atendido, a fila diminui, ou seja, o segundo passa a ser o primeiro, o
terceiro passa a ser o segundo e assim por diante até a última pessoa. Significa que o último será
primeiro em algum momento. Sendo assim, a pessoa que entra em uma fila, estará neste momento na
última posição, ou seja, no fim da fila. Desta forma, quem chega antes tem prioridade.

11

Finalidade da Fila

A fila possui várias finalidades, citaremos aqui algumas:

• o atendimento de processos requisitados a um sistema operacional: os nossos micros, tablets,


celulares, notebooks possuem um sistema operacional que gerencia toda a interface de comunicação (o
que vemos na tela) e todos os serviços que solicitamos, por exemplo, quando mandamos salvar e
imprimir, o sistema operacional armazena em uma fila esses comandos e executa na ordem de chegada;

• buffer para gravação de dados em mídia: quando vamos gravar uma grande quantidade de
informações, como por exemplo, a cópia de um CD, o computador armazena isso em uma memória
temporária em formato de fila, depois do processamento ele começa a descarregar a fila gravando a
informação no local de destino.

• processos de comunicação em redes de computadores: os processos de envio de informações pela


rede obedecem também uma fila, para fazer uma analogia imagine sua caixa de saída de mensagens,
percebemos a fila quando temos problemas com o envio das mensagens, as mensagens ficam paradas

© 2014 - AIEC - Associação Internacional de Educação Continuada

36
101 – Algoritmo | Unidade 03

na caixa de saída. Quando o sistema normaliza as mensagens seguem conforme a fila, ou seja, seguem a
fila de chegada na caixa e começa a enviar as mensagens até esvaziar a fila de saída.

• implementação de uma fila de impressão: a maioria das empresas utilizam impressoras


compartilhadas por várias máquinas na rede, ou seja, várias pessoas enviam suas impressões para um
único local, uma única impressora. A fila de impressão possibilita a impressora tratar todas as
requisições com a mesma prioridade e imprimir os documentos na ordem em que foram submetidos,
sendo que o primeiro enviado é o primeiro a ser impresso.

Esses exemplos demonstram a utilidade do dia a dia, utilidades essas que às vezes nem imaginamos que
exista.

12

Operações com Fila

Para realizar as operações de uma fila, devemos ser capazes de inserir novos elementos em uma
extremidade, o fim, e retirar elementos da outra extremidade, oinício. Temos as seguintes operações:

• Criar uma estrutura de fila;

• Inserir um elemento no fim;

• Retirar um elemento do início;

• Verificar se a fila está vazia.

Toda vez que criamos uma estrutura de pilha, esta deve ser inicializada para garantir que não haja
nenhuma "sujeira" no local onde esteja montada. Do mesmo modo da pilha, quando a fila não está vazia
não significa que ela esteja cheia, o que acontece também quando a fila não está cheia não significa que
ela esteja vazia.

Criar uma estrutura de Fila


Para iniciar o processamento com filas é importante criar para iniciar o armazenamento dos dados.

Inserir um elemento no fim


Na estrutura de dados fila, sempre que um novo item é inserido ele passa a estar na última posição da
fila.

Retirar um elemento do início


Na estrutura de dados fila, sempre o item a ser retirado será o que estiver no início da fila, ou seja, o
primeiro que foi inserido.

© 2014 - AIEC - Associação Internacional de Educação Continuada

37
101 – Algoritmo | Unidade 03

Verificar se a fila está vazia


Para verificar se uma fila está vazia, basta verificar se o início da fila é igual a -1. As filas sempre
começam com o endereço 0.

13

RESUMO
Nesse módulo apresentamos as listas, as pilhas e as filas, que são tipos abstratos de dados que criamos
para gerenciar estrutura de dados. Uma lista é um conjunto ordenado de dados, geralmente do mesmo
tipo e essa organização é feita através da enumeração dos dados para melhor visualização da
informação. As pilhas e filas têm operações mais restritas do que as operações das listas. Nas filas e
pilhas seguem um rito de entrada e saída, sendo que, na fila o primeiro que entra é o primeiro que sai
(LIFO - Last In, First Out), e na Pilha o primeiro que entra é o último que sai (FIFO - First In, First Out).
Nas listas, os elementos são adicionados e removidos de qualquer posição.
As filas, listas e pilhas estão presentes em nosso dia a dia e em cada detalhe do mundo da TI e fora da
tecnologia também.

© 2014 - AIEC - Associação Internacional de Educação Continuada

38
101 – Algoritmo | Unidade 04

UNIDADE 4 – VETOR, MATRIZ, ORDENAÇÃO, PESQUISA E ÁRVORE


BINÁRIA
MÓDULO 1 – VETOR
01

1 - ESTRUTURAS DE DADOS HOMOGÊNEOS


Estudamos, ao longo da nossa disciplina, que uma variável é um espaço na memória, que é reservado
para armazenar determinados tipos de dados. Entretanto, até o momento, nós trabalhamos apenas com
dados básicos (reais, inteiros, caracteres, literais e lógicos) e variáveis simples para armazenar esses
dados. Só que os tipos de dados básicos nem sempre são suficientes para representar as estruturas de
dados necessárias para resolver todos os problemas que se apresentam.

Imagine, por exemplo, que você receba o nome e a nota de 100 alunos de uma escola, e depois precise
listar o nome de cada um, a média final de cada aluno e ainda a média da turma.

Agora imagine você declarando uma a uma, todas as 100 variáveis para o nome, depois as 100 variáveis
para as notas. O seu algoritmo ficaria semelhante a este:

inicio
caractere aluno1, aluno2, aluno3, aluno4, aluno5, aluno6, aluno7, aluno8, aluno9, aluno10,
aluno11, aluno12, aluno13, aluno14, aluno15, aluno16, aluno17, aluno18, aluno19, aluno20,
aluno21, aluno22, aluno23, aluno24, aluno25, aluno26, aluno27, aluno28, aluno29, aluno30,
aluno31, aluno32, aluno33, aluno34, aluno35, aluno36, aluno37, aluno38, aluno39, aluno40,
aluno41, aluno42, aluno43, aluno44, aluno45, aluno46, aluno47, aluno48, aluno49, aluno50,
aluno51, aluno52, aluno53, aluno54, aluno55, aluno56, aluno57, aluno58, aluno59, aluno60,
aluno61, aluno62, aluno63, aluno64, aluno65, aluno66, aluno67, aluno68, aluno69, aluno70,
aluno71, aluno72, aluno73, aluno74, aluno75, aluno76, aluno77, aluno78, aluno79, aluno80,
aluno81, aluno82, aluno83, aluno84, aluno85, aluno86, aluno87, aluno88, aluno89, aluno90,
aluno91, aluno92, aluno93, aluno94, aluno95, aluno96, aluno97, aluno98, aluno99, aluno100;
real nota1, nota2, nota3, nota4, nota5, nota6, nota7, nota8, nota9, nota10,
nota11, nota12, nota13, nota14, nota15, nota16, nota17, nota18, nota19, nota10,
nota21, nota22, nota23, nota24, nota25, nota26, nota27, nota28, nota29, nota10,
nota31, nota32, nota33, nota34, nota35, nota36, nota37, nota38, nota39, nota10,
nota41, nota42, nota43, nota44, nota45, nota46, nota47, nota48, nota49, nota10,
nota51, nota52, nota53, nota54, nota55, nota56, nota57, nota58, nota59, nota10,
nota61, nota62, nota63, nota64, nota65, nota66, nota67, nota68, nota69, nota10,
nota71, nota72, nota73, nota74, nota75, nota76, nota77, nota78, nota79, nota10,
nota81, nota82, nota83, nota84, nota85, nota86, nota87, nota88, nota89, nota10,
nota91, nota92, nota93, nota94, nota95, nota96, nota97, nota98, nota99, nota100;

Além do trabalho de declarar todas as variáveis, você deveria gerenciar as variáveis no algoritmo.
Provavelmente seu algoritmo iria ficar muito grande, o que poderia deixar lenta a aplicação.

Seria bem trabalhoso, não? É para casos como esse que usamos as estruturas de dados homogêneos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

1
101 – Algoritmo | Unidade 04

02

Estruturas de dados homogêneos são estruturas que permitem armazenar conjuntos de dados de um
mesmo tipo (daí o nome ‘homogêneos’) em uma única variável.

Essas estruturas são também chamadas de variáveis compostas homogêneas ou variáveis compostas
indexadas.

As estruturas de dados homogêneas são classificadas em dois tipos:

• os vetores (ou arrays), estruturas que armazenam os dados em uma única linha e várias colunas
(dizemos que são unidimensionais);

• as matrizes, estruturas que armazenam os dados em forma de tabela, com várias linhas e várias
colunas (são bidimensionais).

No presente módulo nosso objeto de estudo serão os vetores. As matrizes serão estudadas em outra
ocasião.

03

2 - VETOR: CONCEITO E CARACTERÍSTICAS


Vetor é um conjunto de valores do mesmo tipo, armazenados em locais contíguos na memória e
possuem o mesmo nome, ou seja, é uma variável que armazena diversas variáveis do mesmo tipo.

Suponha a seguinte situação: você precisa elaborar um algoritmo que receba dois números reais
fornecidos pelo usuário e forneça como resultado a soma dos mesmos. Rapidamente é possível pensar a
solução:

#incluir <biblioteca>
principal()
inicio
real a, b, soma;
escreva(“Digite os números: ”);
leia(a, b);
soma = a + b;
escreva(“Soma = “, soma);
fim

Vetores homogêneos são matrizes unidimensionais que armazenam dados de um mesmo tipo.

Veremos oportunamente o que é matriz, mas podemos dizer agora, de forma resumida, que uma matriz

© 2014 - AIEC - Associação Internacional de Educação Continuada

2
101 – Algoritmo | Unidade 04

seria vários vetores do mesmo tipo e do mesmo tamanho um em cima do outro, ou um do lado do
outro.

04

Declaração de um vetor

Os vetores precisam ser declarados antes de serem utilizados, assim como fazemos com as variáveis
simples. A declaração de um vetor, entretanto, é um pouco diferente da declaração de uma variável
comum, pois se trata de uma variável indexada. É como se declarássemos diversas variáveis dentro de
uma só, diferenciadas por um índice.

Essas variáveis correspondem aos elementos do vetor (em nosso exemplo, os nomes dos alunos). Já o
índice é um valor numérico do tipo inteiro, que sempre começa em 1 e corresponde à posição de cada
elemento no vetor. Observe a tabela a seguir.

Essa tabela representa um vetor de 5 elementos. Os elementos são os nomes (Carla, Cleide, Dalton,
Diana, Edson). Os números de 1 a 5 representam os índices, que são as posições de cada elemento no
vetor. Por exemplo, o elemento ‘Diana’ ocupa a posição ‘4’ do vetor.

Ao declarar um vetor, o seu ‘tamanho’ deve ser informado. O ‘tamanho’ de um vetor é a quantidade de
dados que será armazenada na variável. Na tabela acima, o tamanho do vetor é 5. No nosso exemplo
(dos nomes dos alunos), o tamanho do vetor é 100, pois queremos armazenar os nomes de 100 alunos.

Veja a sintaxe da declaração de um vetor:

<identificador> : vetor [tamanho] de <tipo>


Tamanho = [Vi..Vf], onde: Vi = valor inicial e Vf = valor final

Nosso exemplo:

nomes : vetor [1..100] de literal

No nosso exemplo, ao invés de declararmos diversas variáveis (aluno1, aluno2... aluno100), estamos
declarando diversos elementos (os nomes) em uma variável.

Variável indexada
É o conjunto de variáveis do mesmo tipo, referenciadas pelo mesmo nome e individualizadas por
índices. Podem ter um ou mais índices e ao número de índices necessários para a localização de um
elemento dentro da variável indexada dá-se o nome de dimensão.

© 2014 - AIEC - Associação Internacional de Educação Continuada

3
101 – Algoritmo | Unidade 04

05

Um vetor matematicamente é representado na forma:

Nesta representação cada dado é determinado por um índice na forma aij, sendo “a” a variável, “i” a
linha e “j” a coluna. No caso dos vetores, o índice j é constante e igual a 1 e, portanto, pode ser
desconsiderado. A tabela a seguir apresenta a representação dos elementos de um vetor.

SINTAXE:

tipo_da_variável nome_da_variável [tamanho];

Para acessar os conteúdos dos dados de um vetor basta escrever o índice em pesquisa.

SINTAXE:

vetor[1], vetor[2] ..., vetor[n]


06

Voltando ao problema apresentado anteriormente, ao usarmos o conceito de vetor, o problema de


somar 1000 números reais se simplifica e a solução é apresentada a seguir.

#incluir <biblioteca>
principal()
inicio
inteiro i;
real vetor[1000], soma;
para(i←1; i<=1000; i←i+1)
inicio
escreva(“Digite o número”, i,”:”);
leia(vetor[i]);
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

4
101 – Algoritmo | Unidade 04

soma = 0;
para(i←1; i<=1000; i←i+1)
soma = soma + vetor[i];
escreva(“Soma = “, soma);
fim

Às vezes, a quantidade total de dados armazenados é conhecida, portanto, é necessário criar algoritmos
que permitam a entrada de todos estes dados.

07

3 - APLICAÇÃO DE VETORES EM ALGORITMOS

Os vetores possuem seus tamanhos descritos logo no início, na declaração das variáveis, e seu endereço
interno dos valores na memória é declarado como “i”, também logo no início.

inteiro vetor[101];
inteiro i;

Para que possamos ler e escrever os valores de um vetor é necessário realizar a chamada do índice, no
caso o [i]. Assim serão lidos e apresentados na tela os valores contidos em cada vetor.

leia(vetor[i]);
escreva(vetor[i]);

O valor de [i] varia de acordo com o tamanho do vetor, essa leitura ou armazenamento depende da
mudança do valor do endereço. Para que essa mudança ocorra é necessário usar uma estrutura de
repetição. Lembrando que a estrutura de repetição PARA é utilizada quando se sabe o número de vezes
que um trecho do algoritmo deve ser repetido.

para (i ← 1; i <= 100; i ← i + 1)

Com esses elementos elencados acima temos condições de utilizar vetores em nossos algoritmos.

08

© 2014 - AIEC - Associação Internacional de Educação Continuada

5
101 – Algoritmo | Unidade 04

Exemplo 1
Foi realizada uma análise estatística sobre a idade de garotos de ruas em uma
determinada cidade. Elaborar um algoritmo que armazene até 100 destas idades
em um vetor e depois as apresente na ordem em que foram armazenadas.

Solução:

#incluir <biblioteca>
principal()
inicio
inteiro vetor[101];
inteiro i;
inteiro total;
para (i ← 1; i <= 100; i ←i + 1)
inicio
escreva ("Entre com um numero");
leia(vetor[i]);
total = i + 1;
fim
escreva("Os números que você digitou foram:");
para (i ← 1; i < total; i ←i + 1)
escreva(vetor[i]);
fim

09

Exemplo 2
A média aritmética é obtida dividindo-se a soma das observações pelo
número delas. Elaborar um algoritmo, para calcular a média aritmética das
50 notas de uma turma de alunos.

Solução:

#incluir <biblioteca>
principal()
inicio
real notas[50];
real soma;
inteiro i;
para(i ← 1; i <= 50; i ←i + 1)
inicio

© 2014 - AIEC - Associação Internacional de Educação Continuada

6
101 – Algoritmo | Unidade 04

escreva(“Digite a”, i, “nota do aluno: “);


leia(notas[i]);
fim
soma = 0.0;
para(i ← 1; i <= 50; i ←i + 1)
soma = soma + notas[i];
escreva(“Media aritmética das notas: “, soma/50);
fim

10

Exemplo 3
A média geométrica de um conjunto de números positivos é definida como
o produto de todos os membros do conjunto elevado ao inverso do
número de membros. Elaborar um algoritmo, para calcular a média
geométrica das 50 notas de 1 turma de alunos.

Solução:

#incluir <biblioteca>
principal()
inicio
real notas[50];
real prod;
inteiro i;
para(i ← 1; i <= 50; i ←i + 1)
inicio
escreva(“Digite a”, i, “nota do aluno: “);
leia(notas[i]);
fim
prod = 1.0;
para(i ← 1; i <= 50; i ←i + 1)
prod = prod*notas[i];
escreva(“Media geométrica das notas: “, pot(prod,1/50));
fim

11

Exemplo 4
O dinheiro é o meio usado na troca de bens, na compra de bens, serviços, força

© 2014 - AIEC - Associação Internacional de Educação Continuada

7
101 – Algoritmo | Unidade 04

de trabalho, divisas estrangeiras ou nas demais transações financeiras. É emitido e controlado pelo
governo de cada país, que é o único que tem essa atribuição. Elaborar um algoritmo que, dado um
determinado valor inteiro em reais, calcule a menor quantidade de cédulas de R$ 1,00; R$ 2,00; R$ 5,00;
R$ 10,00; R$ 20,00; R$ 50,00 e R$ 100,00 que representa tal valor.

Solução exemplo 4

#incluir <biblioteca>
principal()
inicio
inteiro i, valor, quant;
inteiro tab[7] ;
tab[1] = 100;
tab[2] = 50;
tab[3] = 20;
tab[4] = 10;
tab[5] = 5;
tab[6] = 2;
tab[7] = 1;
escreva(“Digite o valor em reais: “);
leia(valor);
para(i ← 1; i < 7; i ←i + 1)
inicio
quant = valor DIV tab[i];
se (quant> 0)
inicio
escreva(“Valor da nota = ”, tab[i]);
escreva(“Numero de notas = ”, quant);
fim
valor = valor MOD tab[i];
fim
fim

Exemplo 5
A tabuada é uma tabela contendo todos os produtos dos números inteiros de 1 a
9. Elaborar um algoritmo que apresente a tabuada de um dado valor t, utilizando
vetor.

© 2014 - AIEC - Associação Internacional de Educação Continuada

8
101 – Algoritmo | Unidade 04

Solução exemplo 5

#incluir <biblioteca>
principal
inicio
inteiro a[10], i, t;
escreva("Digite qual tabuada deseja pesquisar: ");
leia(t);
para(i ← 1; i<=10; i ←i + 1)
a[i] = i * t;
para(i ← 1; i<=10; i ←i + 1)
escreva(i, “x”, t, “=”, a[i]);
fim

12

Operações com Vetores

Não é possível operar diretamente todos os valores do vetor, como um conjunto todo, mas um
de cada vez. Vejamos a imagem abaixo:

Se quisermos somar um vetor com outro, deve-se somar separadamente cada valor, unitariamente. O
mesmo ocorre se quisermos somar os valores do mesmo vetor. A soma é de um elemento com outro.
Para isso, é necessário utilizar a estrutura de repetição, a qual possibilita percorrer todo o vetor e
realizar a soma.

Os vetores também podem realizar outras operações, tudo depende da necessidade de cada algoritmo.

Exemplo 6
Elaborar um algoritmo que imprima 100 números na ordem oposta em que
foram informados em um vetor.

#incluir <biblioteca>
principal()
inicio
inteiro i;
inteiro a[100];
para(i ← 1; i <= 100; i ←i + 1)

© 2014 - AIEC - Associação Internacional de Educação Continuada

9
101 – Algoritmo | Unidade 04

inicio
escreva(“Elemento “, i);
leia(a[i]);
fim
para(i ← 100; i>=1; i ←i - 1)
escreva(“Elemento : “, a[i]);
fim

13

Exemplo 7
Elaborar um algoritmo que imprima os elementos de posição ímpar de um vetor
de 100 elementos.

#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 1)
escreva(“Elemento: “, a[i]);
fim
fim

14

Exemplo 8
Elaborar um algoritmo que imprima os elementos pares de um vetor de 100
elementos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

10
101 – Algoritmo | Unidade 04

#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (a[i] MOD 2 = 0)
escreva(“Elemento: “, a[i]);
fim
fim

15

Exemplo 9
Elaborar um algoritmo que imprima os elementos ímpares de posição par de
um vetor de 100 elementos.

Solução Exemplo 9

#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 0 & a[i] MOD 2 = 1)
escreva(“Elemento: “, a[i]);
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

11
101 – Algoritmo | Unidade 04

Exemplo 10
Elaborar um algoritmo que imprima os elementos pares de posição ímpar e os elementos
múltiplos de 3 de posição par de um vetor de 100 elementos.

Solução Exemplo 10

#incluir <biblioteca>
principal()
início
inteiro i, a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 1 & a[i] MOD 2 = 0)
escreva(“Elemento:“, a[i], “de posição”, i);
se (i MOD 2 = 0 & a[i] MOD 3 = 0)
escreva(“Elemento:“, a[i], “de posição”, i);
fim
fim

Exemplo 11
Elaborar um algoritmo que carregue um vetor com dez números
inteiros. Calcule o quadrado dos valores e mostre em um vetor
resultante.

Solução Exemplo 11

#incluir <biblioteca>
principal()
inicio
inteiro vet1[10], vet2[10], i;
para (i ← 1; i <= 10; i ←i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

12
101 – Algoritmo | Unidade 04

para (i ← 1; i <= 10; i ←i + 1)


inicio
aux← vet1[i]*vet1[i];
vet2[i] ←aux;
fim
para (i ← 1; i <= 10; i ←i + 1)
escreva(vet2[i]);
fim

16

Para fixar o conceito de vetor e compreender melhor a aplicação de vetores em algoritmos, assista ao
vídeo abaixo.

https://www.youtube.com/watch?v=MWR37yk2uwo

17

RESUMO
Aprendemos até agora, que a execução dos comandos com as estruturas de controle utilizou tipos de
dados básicos, com variáveis simples dos tipos: real, inteiro, literal, caractere e lógico. Neste módulo
aprendemos situações em que os tipos de dados básicos não são suficientes para resolver os problemas,
assim, é necessário utilizar estruturas de dados homogêneas, que são estruturas que permitem
armazenar conjuntos de dados de um mesmo tipo (daí o nome ‘homogêneos’) em uma única variável.
Vimos que as estruturas de dados homogêneas são classificadas em dois tipos: os vetores (ou arrays,
que são estruturas que armazenam os dados em uma única linha e várias colunas) e as matrizes, que
são estruturas que armazenam os dados em forma de tabela, com várias linhas e várias colunas (são
bidimensionais). O vetor é um conjunto de valores do mesmo tipo, armazenados em locais contíguos na
memória e possuem o mesmo nome, ou seja, é uma variável que armazena diversas variáveis do mesmo
tipo.

UNIDADE 4 – VETOR, MATRIZ, ORDENAÇÃO, PESQUISA E ÁRVORE


BINÁRIA
MÓDULO 2 – MATRIZ
01

1 - CONCEITO
Aprendemos no módulo passado o conceito de vetores, que são estruturas de dados unidimensionais,
com variáveis indexadas referenciadas por um único índice. Você aprendeu que, armazenando os dados
em um vetor e acessando-o, em seguida, podemos exibir suas informações em uma lista. Vimos também

© 2014 - AIEC - Associação Internacional de Educação Continuada

13
101 – Algoritmo | Unidade 04

que os vetores lidam com apenas uma dimensão, ou seja, se fosse uma tabela, ela só teria uma coluna
com várias linhas ou uma linha com várias colunas, como podemos ver na tabela abaixo.

Neste módulo aprenderemos o conceito e a prática do uso de matrizes.

Exemplificamos no módulo anterior a declaração de um vetor com 1000 alunos. Infelizmente fica quase
inviável trabalhar com um vetor tão grande, por isso é indicado o uso de matriz, no caso para um vetor
de 1000 alunos teríamos uma matriz de 10x100 ou 100x10.

Vet [1000] = Mat [10][100] = Mat [100][10]

Para melhorar o exemplo, imagine um tabuleiro de damas ou de xadrez, podemos representar como um
vetor de 100 posições. Como você diria em qual posição está a peça branca mais avançada à direita? E
utilizando uma matriz? Caso você vá fazer as contas da posição da peça, lembre que a leitura deverá ser
da esquerda para direita, do ponto mais alto para o mais baixo.

Sendo assim, para melhor visualização e melhor forma de trabalhar nesse caso, é aconselhável utilizar
matriz, neste exemplo matriz 10x10.

Resposta: Vet[70] ou Mat[7][10]

02

Uma matriz é chamada de unidimensional, quando se trata de um vetor com um índice


apenas, bidimensional, quando possui dois índices e multidimensional, quando possui dois ou mais
índices.

A declaração do vetor ou matriz multidimensional é efetuada com múltiplos colchetes, que informam a
quantidade de elementos que a matriz poderá conter, podendo ser atribuídos valores aos itens em sua
declaração inicial ou, atribuídos valores durante a demanda do processamento da aplicação, de acordo
com as necessidades do algoritmo.

© 2014 - AIEC - Associação Internacional de Educação Continuada

14
101 – Algoritmo | Unidade 04

Vet [i] – matriz unidimensional


Mat[i][j] – matriz bidimensional ou multidimensional
Mat[i][j][k] – matriz multidimensional

Uma matriz pode ser definida como um conjunto de variáveis de mesmo tipo e identificadas pelo
mesmo nome. Essas variáveis são diferenciadas por meio da especificação de dois índices que definem
posições dentro dessa estrutura.

Vamos pegar como exemplo uma matriz bidimensional (duas dimensões linha X colunas). Podemos
considerar que ela será assim:

Consideramos que para acessarmos o valor um (1), localizamos o índice por sua linha (1) e coluna (1),
deste modo seu índice é (1,1). O valor 2 (dois), por exemplo, será (1, 2).

03

A declaração de uma matriz em português estruturado pode ser da seguinte forma:

tipo_da_variável nome_da_variável [linha][coluna];

Nesta estrutura, o índice da esquerda indexa as linhas e o da direita indexa as colunas. Ao preencher ou
ler uma matriz, o índice mais à direita varia mais rapidamente que o índice à esquerda.

Observe a matriz 3x2 abaixo: enquanto o índice à esquerda “i” fica fixo o índice a direita “j” fica variando
mais rapidamente.

Componente [i][j]

© 2014 - AIEC - Associação Internacional de Educação Continuada

15
101 – Algoritmo | Unidade 04

Componentes [1][1] <- Maria (linha 1,coluna 1)


Componentes [1][2] <- João (linha 1,coluna2)
Componentes [2][1] <- Fátima (linha 2coluna1)
Componentes [2][2] <- Francisco (linha 2 coluna 2)
Componentes [3][1] <- Fernanda (linha 3coluna1)
Componentes [3][2]<- José (linha 3coluna2)

Seguem os valores da matriz [3,2]:

04

2 - EXEMPLOS
Vejamos alguns exemplos de algoritmos utilizando matrizes.

Exemplo 1
Elaborar um algoritmo que construa uma matriz de dimensão 20 x 10, e armazene
em cada célula o valor de 1 a 200, sequencialmente ordenados por linha. O
programa deve mostrá-los na tela em formato tabular.

#incluir <biblioteca>
principal()
inicio
inteiro mtrx [20][10];
inteiro i,j,cont;
cont← 1;
para (i←1;i<=20;i←i+1)
para (j←1;j=10;j←j+1)
inicio
mtrx[i][j] ←cont;
cont←cont + 1;
fim
para (i←1;i<=20;i←i+1)

© 2014 - AIEC - Associação Internacional de Educação Continuada

16
101 – Algoritmo | Unidade 04

inicio
escreva(“|”);
para (j←1;j=10;j←j+1)
inicio
escreva(mtrx[i][j]);
fim
escreva(“|”);
escreva(pular linha);
fim
fim

05

Exemplo 2
Elaborar um algoritmo que carregue uma matriz 2 x 2, calcule e mostre uma
matriz resultante que será a matriz digitada multiplicada pelo maior elemento
da matriz.

#incluir <biblioteca>
principal()
inicio
inteiromat[2][2], resultado[2][2], i, j, maior;
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
escreva("Digite o elemento da linha”, i, “e coluna”, j);
leia(mat[i][j]);
fim
fim
maior←mat[i][j];
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
se (mat[i][j] > maior)
maior←mat[i][j];
fim
fim

© 2014 - AIEC - Associação Internacional de Educação Continuada

17
101 – Algoritmo | Unidade 04

para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
resultado[i][j] ← maior * mat[i][j];
fim
escreva("Imprimindo a matriz resultante ");
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
escreva(resultado[i][j]);
fim
fim
fim

06

Exemplo 3
Elaborar um algoritmo que carregue uma matriz 10 x 3 com as notas de
dez alunos em três provas. Mostre um relatório com o número do aluno
(número da linha) e a prova em que cada aluno obteve menor nota. Ao
final do relatório, mostre quantos alunos tiveram menor nota na prova
1, quantos alunos tiveram menor nota na prova 2 e quantos alunos
tiveram menor nota na prova 3.

#incluir <biblioteca >


principal()
inicio
real notas[10][3], menor;
inteiro q1, q2, q3, prova_menor, i, j;
para (i←1;i<=10;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
escreva("Digite a”, j ,”nota do aluno”, i);
leia(notas[i][j]);
fim
fim
q1← 0;
q2← 0;
q3← 0;

© 2014 - AIEC - Associação Internacional de Educação Continuada

18
101 – Algoritmo | Unidade 04

para (i←1;i<=10;i←i+1)
inicio
escreva("Aluno numero %d", i);
menor = notas[i][1];
prova_menor = 0;
para(j←1;j<=3;j←j+1)
inicio
se (notas[i][j] <= menor)
inicio
menor← notas[i][j];
prova_menor← j;
fim
fim
escreva("A menor nota do aluno”, i, “foi na”, prova_menor, prova.");
se (prova_menor = 1)
q1 = q1 + 1;
se (prova_menor = 2)
q2 = q2 + 1;
se (prova_menor = 3)
q3 = q3 + 1;
fim
escreva("Quantidade de alunos com menor nota na prova 1 = ", q1);
escreva("Quantidade de alunos com menor nota na prova 2 = ", q2);
escreva("Quantidade de alunos com menor nota na prova 3 = ", q3);
fim

07

Exemplo 4
Elaborar um algoritmo que carregue uma matriz 10 x 20 com
números inteiros e some cada uma das linhas, armazenando o
resultado das somas em um vetor. A seguir, multiplique cada
elemento da matriz pela soma da linha e mostre a matriz
resultante.

#incluir <biblioteca >


principal()
inicio
realmat[10][20], soma[10];
inteiro i, j;
para (i←1;i<=10;i←i+1)
inicio

© 2014 - AIEC - Associação Internacional de Educação Continuada

19
101 – Algoritmo | Unidade 04

para (j←1;j<=20;j←j+1)
inicio
escreva("Digite o elemento da lin=”, i, “e col=”, j, “da matriz");
leia(mat[i][j]);
fim
fim
para (i←1;i<=10;i←i+1)
inicio
soma[i] ← 0;
para (j←1;j<=20;j←j+1)
soma[i] ← soma[i] + mat[i][j];
fim
para (i←1;i<=10;i←i+1)
inicio
para (j←1;j<=20;j←j+1)
mat[i][j] ←mat[i][j] * soma[i];
fim
escreva("Imprimindo a matriz resultante");
para (i←1;i<=10;i←i+1)
inicio
escreva("Linha”, i);
para (j←1;j<=20;j←j+1)
escreva(mat[i][j]);
fim
fim

08

Exemplo 5
Uma matriz é uma série de variáveis do mesmo tipo referenciadas por um
único nome, onde cada variável é diferenciada por meio de um número
chamado índice. Elaborar um algoritmo que carregue uma matriz 3 x 3,
calcule e mostre uma matriz resultante que será a matriz digitada
multiplicada pelo menor elemento da matriz.

#incluir <biblioteca>
principal()
inicio
inteiromat[3][3], resultado[3][3], i, j, menor;
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)

© 2014 - AIEC - Associação Internacional de Educação Continuada

20
101 – Algoritmo | Unidade 04

inicio
escreva("Digite o elemento da linha”, i, “e coluna”, j);
leia(mat[i][j]);
fim
fim
menor←mat[i][j];
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
se (mat[i][j] < menor)
menor←mat[i][j];
fim
fim
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
resultado[i][j] ← menor * mat[i][j];
fim
escreva("Imprimindo a matriz resultante ");
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
escreva(resultado[i][j]);
fim
fim
fim

09

3 - MATRIZES MULTIDIMENSIONAIS
As matrizes multidimensionais possuem duas (mat [i][j]) ou mais dimensões (mat [i][j][k]), porém são
pouco utilizadas devido ao consumo de memória que exigem. O aumento é exponencial, pois guarda as
informações multidimensionais dinamicamente na memória. Conforme a necessidade do programa que
está sendo construído pode-se usar outros métodos para guardar as informações. Atualmente os
sistemas utilizam bancos de dados para isso. Bancos de dados são locais específicos onde se pode
armazenar todo o tipo de informação e recuperar, quando necessário.

© 2014 - AIEC - Associação Internacional de Educação Continuada

21
101 – Algoritmo | Unidade 04

SINTAXE:

tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN]

Podem-se inicializar matrizes, assim como é possível inicializar variáveis.

SINTAXE:

tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN] =


{lista_de_valores};

A lista de valores é composta por valores (do mesmo tipo da variável) separados por vírgula. Os valores
devem ser dados na ordem em que serão colocados na matriz.

Alguns exemplos de inicializações de matrizes:

Real vet [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };


Inteiro mat [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

OBSERVAÇÃO: O primeiro exemplo demonstra inicialização de vetores. O segundo exemplo demonstra a


inicialização de matrizes multidimensionais, onde mat está sendo inicializada com 1, 2, 3 e 4 em sua
primeira linha, 5, 6, 7 e 8 na segunda linha e 9, 10, 11 e 12 na última linha.

10

4 - ORDENAÇÃO E PESQUISA

Uma das formas de deixar o algoritmo mais rápido é ordenando os vetores e matrizes. Isso facilita, em
uma pesquisa, encontrar mais rapidamente o que se deseja. Imagine você com um baralho completo,
você sabe que são muitas cartas e estão desordenadas. Se alguém pedir a carta 7 de Copas, você deverá
procurar a carta em todo o baralho. Sua consulta será demorada e muito, pois dependerá da sorte para
que o 7 de Copas esteja logo no início da pilha. Se a carta procurada estiver na última posição, você
passará por todas as cartas do baralho para achar a carta desejada.

Se esse baralho estivesse ordenado por número ou por naipes, sua busca seria bem mais rápida. A
ordenação ajudaria em muito a sua consulta, reduzindo drasticamente o tempo de pesquisa.

Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem ascendente ou

© 2014 - AIEC - Associação Internacional de Educação Continuada

22
101 – Algoritmo | Unidade 04

descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto


ordenado.

11

Ordenação por Troca – Método Bolha

O método bolha ordena uma lista comparando valores entre pares consecutivos e rearranjando os
valores de acordo com a ordem.

Possui esse nome pelo fato de que se um valor, que deveria estar no topo da lista, estiver embaixo, ele
vai progredindo até o seu devido lugar.

Exemplo 6
Elabore um algoritmo que carregue um vetor com 100 números inteiros. Após
isto, o algoritmo deve ordenar de maneira crescente os dados.

#incluir <biblioteca>
principal()
inicio
inteiro vet[100], i, j, aux;
para (i ← 1; i <= 100; i ← i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim
para (i ← 1; i <= 100; i ← i + 1)
para (j ← 1; j <= 99; j ← j + 1)
se (vet[j] >vet[j+1])

© 2014 - AIEC - Associação Internacional de Educação Continuada

23
101 – Algoritmo | Unidade 04

inicio
aux←vet[j];
vet[j] ←vet[j+1];
vet[j+1] ←aux;
fim
para (i ← 1; i <= 100; i ← i + 1)
escreva(vet[i]);
fim

Para ordenar o vetor de forma decrescente é apenas necessário trocar o sinal de maior para o sinal de
menor na linha “se (vet[j] <vet[j+1])”

12

Pesquisa Linear ou Sequencial

Algoritmos de pesquisa de valores, assim como os de ordenação, também têm como objetivo a
recuperação de dados. Ambos os algoritmos evoluem conjuntamente com as tecnologias da
computação.

A pesquisa linear ou sequencial é o método mais intuitivo de busca, ele lê um valor sequencialmente e
compara com todos os elementos do vetor.

Voltando ao exemplo do baralho, seria como se nós passássemos carta a carta para achar o 7 de Copas,
respeitando a sequência das cartas. Esse método é utilizado quando há pequena quantidade de
elementos para pesquisar. Imagine que temos 10 cartas no baralho e nos é solicitada uma específica.
Iremos olhar as cartas uma a uma conforme sequência.

Exemplo 7
Elabore um algoritmo que carregue um vetor com 10 números de telefones. Após
isto, o algoritmo deve informar a posição de um determinado telefone.

#incluir <biblioteca>
principal()
inicio
inteiro i, j, aux;
literalvet[10], tel;
para (i ← 1; i <= 10; i ← i + 1)
inicio
escreva("Digite um telefone ");

© 2014 - AIEC - Associação Internacional de Educação Continuada

24
101 – Algoritmo | Unidade 04

leia(vet[i]);
fim
escreva("Pesquisa telefone ");
leia(tel);
para (i ← 1; i <= 10; i ← i + 1)
se (vet[i] == tel)
escreva("Telefone na posição ",i);
fim

13

Pesquisa Binária ou Logarítmica

A pesquisa binária é muito utilizada quando se quer ganhar tempo na pesquisa. Geralmente a pesquisa
binária é utilizada quando temos muitos elementos.

Se fôssemos aplicar a pesquisa binária no exemplo do baralho, deveríamos reparti-lo ao meio e verificar
se a carta que apareceu está antes ou depois daquela que estamos procurando. Caso estejamos longe
da carta procurada, devemos descartar a metade mais distante e repartir novamente o bolo do baralho.
E assim seguimos até encontrar a carta desejada. Veja que, para isso funcionar, o baralho deve estar na
ordem, ou gastaremos muito tempo na procura.

A pesquisa binária ou logarítmica é uma otimização do algoritmo simples, no entanto, neste caso, é
necessário que a lista esteja ordenada. A busca consiste em pegar o elemento central da lista e
comparar com o valor a ser buscado, caso o elemento esteja na parte superior da lista, a parte inferior
é descartada e o processo se repete.

A figura abaixo representa um elemento em uma lista a ser encontrado.

14

Exemplo 8
Elabore um algoritmo que carregue um vetor com 10 números inteiros.
Após isto, o algoritmo deve informar a posição de um determinado
número.

© 2014 - AIEC - Associação Internacional de Educação Continuada

25
101 – Algoritmo | Unidade 04

#incluir <biblioteca>
principal()
inicio
inteiro inicial, meio, final, i, num, vet[10];
para (i ← 1; i <= 10; i ← i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim
escreva("Pesquise o numero ");
leia(num);
inicial← 1
final← 10
enquanto (inicial <= final)
inicio
meio← (inicial + final)/2
se (num == vet[meio] )
inicio
escreva("Número na posição ",i);
inicial← final;
fim
senão
se (num <= vet[meio])
final← meio -1;
senão
inicial← meio + 1;
fim
fim

15

RESUMO

Aprendemos nesse módulo que as matrizes são conjuntos de vetores do mesmo tipo, ou melhor, são
estruturas de dados homogêneos de duas (ou mais) dimensões. As matrizes facilitam a forma de
representação das variáveis e também ajudam no armazenamento bidirecional dos dados. Aprendemos
os tipos de pesquisas e como realizar uma pesquisa linear e a pesquisa binária, que propõe agilizar uma
pesquisa quando temos muitos elementos. Não podemos esquecer que a ordenação é fundamental
para que as pesquisas possam ser rápidas e eficientes. Todas essas ferramentas ajudam no
desenvolvimento dos algoritmos e consequentemente dos futuros programas, que serão construídos
por programadores.

UNIDADE 4 – VETOR, MATRIZ, ORDENAÇÃO, PESQUISA E ÁRVORE


BINÁRIA
MÓDULO 3 – ÁRVORE BINÁRIA

© 2014 - AIEC - Associação Internacional de Educação Continuada

26
101 – Algoritmo | Unidade 04

01

1 - ESTRUTURAS

Antes de iniciarmos com o assunto “Árvores”, primeiro apresentaremos o conceito de estruturas, que
estará presente em quase todo o conteúdo desse módulo.

Buscamos nesse momento o apoio do dicionário Aurélio on-line, que descreve dessa forma a
palavra estrutura:

s.f. Maneira como um edifício ou uma coisa qualquer é construída, organizada e disposta. / Maneira
como as partes de um todo estão dispostas entre si: estrutura do corpo humano. / Armação, esqueleto,
arcabouço. / Ordem, disposição e relações das partes que compõem uma obra: a estrutura do poema. /
Geologia Natureza das camadas geológicas e disposição dessas camadas, umas em relação às outras. /
Matemática Caráter de um conjunto resultante das operações nele definidas e das propriedades dessas
operações: estrutura de grupo. / Psicologia Conjunto orgânico de formas que, segundo os gestaltistas,
seria percebido de imediato, antes da captação dos detalhes. // Reforma das estruturas, reformas
legislativas que modificam profundamente as estruturas administrativas, econômicas ou sociais de uma
coletividade. // Estrutura latente de um grupo, configuração dos membros de um grupo, que a análise
de um teste sociométrico permite pôr em evidência.

Percebemos então que a palavra estrutura pode ser usada para diversos aspectos, tudo depende da
visão e da necessidade. Necessidade essa de demonstrar as partes de um todo, que juntos formam uma
estrutura única. No exemplo abaixo é apresentada a estrutura de uma empresa, percebe-se que há uma
hierarquia funcional entre os cargos, que são representados por caixas. Essa hierarquia demonstra uma
precedência de regras e atividade do dia a dia. Na altura superior da estrutura está o Vice Presidente e
então vai descendo, explorando a área da Direção da TI, que possui três gerências no mesmo nível
hierárquico (Gerência de Infraestrutura e serviços, Gerência de Desenvolvimento e Gerência de
Arquitetura e Processos). Essas gerências estão subdivididas internamente, conforme características de
cada área.

© 2014 - AIEC - Associação Internacional de Educação Continuada

27
101 – Algoritmo | Unidade 04

Estrutura Organizacional

02

Logo abaixo, apresentamos um exemplo de árvore genealógica, onde os mais velhos precedem os mais
jovens: temos os bisavós, avós, pais e o filho. Na verdade essa árvore é de uma pessoa somente, pois
não está considerando outros parentes, como irmãos, primos, tios etc. Seria uma árvore gigantesca se
colocássemos todos os parentes.

© 2014 - AIEC - Associação Internacional de Educação Continuada

28
101 – Algoritmo | Unidade 04

Árvore genealógica

03

2 - ÁRVORES

As árvores são utilizadas para representar hierarquicamente estruturas, como demonstrado acima nos
exemplos da árvore genealógica e a estrutura organizacional. Na tecnologia as árvores podem ser
utilizadas para representar decisões, definições formais de linguagem ou mesmo para representar
hierarquia entre elementos.

Na programação de sistemas e na computação, a árvore é uma estrutura de dados que herda as


características das topologias. Na estrutura de árvore os dados estão dispostos de forma hierárquica,
como um conjunto de dados hierarquicamente subordinado a outro.

Descrevendo a estrutura árvore

Para melhor entendimento iremos pegar o exemplo de uma árvore, isso mesmo, só que você a colocará
de cabeça para baixo. Todas as árvores possuem raiz, a raiz é o um elemento principal da árvore, sem a
raiz não teríamos a árvore. Visualizando a imagem abaixo percebemos que a árvore além da raiz possui
outros elementos e outras ligações, que são denominados galhos ou filhos. Essas ramificações são
originadas dos nós. Os galhos levam a outros nós que também possuem outros galhos. O elemento que
não possui galhos é conhecido como folha ou nó terminal.

© 2014 - AIEC - Associação Internacional de Educação Continuada

29
101 – Algoritmo | Unidade 04

04

Árvore binária

Segundo Marcos Laureano:

Uma árvore binária é um conjunto finito de elementos que está vazio ou é particionada em três
subconjuntos.

Os subconjuntos da árvore são:

• raiz da árvore - elemento inicial (único);


• subárvore da esquerda - se vista isoladamente compõe uma outra árvore;
• subárvore da direita - se vista isoladamente compõe uma outra árvore.

A árvore pode não ter nenhum elemento (árvore vazia). A construção de uma árvore pode ser recursiva
e, devido a isso, muitas operações sobre árvores binárias utilizam recursão. Lembrando
que recursividade é o processo de definir algo em termos de si mesmo e é, algumas vezes, chamado de
definição circular. Assim, pode-se dizer que o conceito de algo recursivo está dentro de si, que por sua
vez está dentro de si e assim sucessivamente, infinitamente, ou seja, se não tiver um mecanismo de
saída ou de parada o algoritmo entrará em loop.

As árvores onde cada nó que não seja folha numa árvore binária tem subárvores esquerda e direita.

© 2014 - AIEC - Associação Internacional de Educação Continuada

30
101 – Algoritmo | Unidade 04

05

A figura abaixo apresenta um método convencional de representação de uma árvore. Nesta árvore, o
elemento A é a raiz da árvore, a subárvore da esquerda é o elemento B e a da direita é representada
pelo elemento C. Um nó sem ilhós é chamado de folha. Sendo A a raiz de uma árvore binária e B sua
subárvore, é dito que A é pai de B e que B é filho de A.

Representação de árvore

Sendo assim temos outras relações de parentesco conforme figura acima, onde B e C são filhos
de A, B e C são irmãos, D e E são irmãos e H e I são irmãos. Outra forma visualizada na figura é que C é
pai de F, que é pai de H e I.

As letras B, C, E, F são chamados de nós, e as letras D, G, H, I são nós sem filhos, que são chamados de
folhas.

06

Tamanho da árvore

O caminho da raiz de uma árvore até a sua folha final é calculada pela seguinte fórmula k – 1. Onde se
conta o número de nós do lado maior da árvore, que é a letra k e subtrai por um. Assim você terá o

© 2014 - AIEC - Associação Internacional de Educação Continuada

31
101 – Algoritmo | Unidade 04

tamanho de uma árvore. Veja a figura abaixo, K é igual a 4, usando a fórmula k – 1, o tamanho da árvore
é 3. Sendo assim a raiz não se conta.

07

Altura do nó

A altura do nó pode se confundir com o tamanho, mas não é. A altura do nó é comprimento do maior
caminho do nó até alguns de seus descendentes. Descendentes do nó são todos os nós que podem ser
alcançados caminhando-se para baixo a partir da raiz. A altura de cada uma das folhas é 1. Desta
maneira a altura de A é 4, a altura de C é 3 enquanto que de D, E e F são 2 e G, H e I são 1.

08

Outro ponto importante a observar é como medir o grau de saída de cada nó. Que é número de filhos
de um nó. Por exemplo, o nó B tem grau de saída 2, o nó C tem grau 1, o nó F grau 2.

© 2014 - AIEC - Associação Internacional de Educação Continuada

32
101 – Algoritmo | Unidade 04

09

Nível do nó

O nível de um nó pode ser definido, a partir do nó raiz, que é de nível 0. Os outros nós têm um nível que
é uma unidade a mais do que o nível do seu pai. Na árvore da figura abaixo temos:

Nível 0: A
Nível 1: B e C
Nível 2: D, E e F
Nível 3: G, H e I

10

Árvore Binária Completa

Uma árvore completa é uma árvore binária na qual todas as folhas estão no mesmo nível k. Sendo k a
profundidade da árvore (tamanho). Para se calcular o número total de nós utiliza a seguinte fórmula
(2k+1– 1) e para calcular número total de folhas utiliza a seguinte fórmula (k2).

© 2014 - AIEC - Associação Internacional de Educação Continuada

33
101 – Algoritmo | Unidade 04

Embora uma árvore binária completa possua muitos nós (o máximo para cada profundidade), a distância
da raiz a uma folha qualquer é relativamente pequena.

A árvore da figura abaixo tem profundidade 3, então utilizando a fórmula para calcular a quantidade de
nós:

(2k+1– 1)
(23+1– 1)
(24 - 1)
(16 – 1) = 15, então temos 15 nós.

Agora, para calcular a quantidade de folhas temos:


(k3)
(23) = 8, então temos 8 folhas.

11

Realizando Busca em Árvore Binária

Importante, primeiramente, antes de realizar uma busca em uma árvore é a organização dos dados
contidos na árvore. O objetivo de organizar é para facilitar a tarefa de procura de um determinado valor.
Lembrando que a busca em qualquer tipo de estrutura de dados é mais rápida quando os dados estão
ordenados.

A partir da raiz e de posse da informação a ser encontrada, é possível saber qual o caminho (galho) a ser
percorrido até encontrar o nó desejado. Para tanto, basta verificar se o valor procurado é maior, menor
ou igual ao nó que se está posicionando. Deve-se observar que não existe uma única forma de organizar
um conjunto de informações em uma árvore de busca binária, afinal, dependendo da escolha do nó raiz,
obtêm-se árvores diferentes.

12

3 – GRAFO

Primeiramente é bom registrar que grafo não é gráfico, apesar de os nomes serem parecidos e de o
grafo poder ser representado graficamente.

© 2014 - AIEC - Associação Internacional de Educação Continuada

34
101 – Algoritmo | Unidade 04

Segundo João Dovicchi:

Grafos são estruturas matemáticas usadas para representar ideias ou modelos, por intermédio de uma
ilustração, gráfico ou esquema.

Estritamente, em matemática, a teoria dos grafos é utilizada para representar o relacionamento entre
dois ou mais conjuntos, grandezas ou valores. A representação de um mapa de rotas, redes e outros
modelos semelhantes podem ser feita por meio do que se denominam grafos.

Vamos tomar, por exemplo, um mapa de rotas aéreas. Na figura abaixo, nota-se que existem várias
rotas de um ponto a outro, por exemplo, de Florianópolis a Brasília existem as possibilidades via
Curitiba, via São Paulo ou via Rio de Janeiro. Algumas rotas podem ter mais escalas, por exemplo, pode-
se ir a Brasília por São Paulo, passando por Curitiba, Rio e Belo Horizonte. Podemos ter também um voo
panorâmico, onde o avião sai de um lugar e volta para o mesmo lugar. Por exemplo, voo de São Paulo
para São Paulo, onde o avião sai do aeroporto de Congonhas sobrevoa a cidade e volta para Congonhas.

Neste exemplo, temos a linha que liga


cada dois pontos. Quando esse
movimento acontece chamamos
de laços. O mapa de rotas contém
pontos, que representam as cidades, e
estão ligados por linhas, que representam
as rotas aéreas. Cada um dos pontos de
um grafo é denominado nó e cada uma
das ligações é denominada arcos.

13

A representação de dados como estrutura de dados, pode ser aplicada em Mapas de distâncias, Mapas
Metabólicos, Diagramas e Fluxogramas, Redes de computadores, Redes Neurais, Estruturas químicas,
redes sociais etc.

© 2014 - AIEC - Associação Internacional de Educação Continuada

35
101 – Algoritmo | Unidade 04

No caso das redes sociais, por exemplo, Facebook, Orkut, Linkedin existe um relacionamento social e
negocial entre pessoas. Nesses relacionamentos as pessoas se interligam através da amizade e grupos
de interesse. Se A é amigo de B e B é amigo de C, indiretamente, A está "conectado" a C. Essas redes de
amigos são exemplos de um grafo. Você possui amigos e está "conectado" a eles. Estes, eventualmente
estão conectados a outras pessoas. Quando entramos no perfil de um amigo e entramos no perfil de
algum conhecido do nosso amigo, que você não conhece, vimos um caminho de pessoas, de você até o
amigo do amigo. Isso é um problema de grafo. Deve-se partir de uma pessoa (você) e, percorrendo seus
relacionamentos, encontrar um "caminho" até outra pessoa.

As pessoas que se relacionam entre si são chamados de nós do grafo. Cada relacionamento entre os nós
é chamado de aresta. Abaixo, temos uma imagem que representa um GRAFO simplesmente.

De acordo com a imagem do grafo, percebemos que


geralmente os nós são representados por círculos e as
arestas por linhas, que conectam esses círculos. Outro
detalhe interessante é que os nós da figura têm números
dentro deles. Esses números servem apenas para
distinguir os nós.

Os nós podem representar os números das casas no sistema de distribuição de água, poderia ser o nome
da cidade no mapa, lista de amigos do Facebook.

14

Observe esses exemplos de grafos.

© 2014 - AIEC - Associação Internacional de Educação Continuada

36
101 – Algoritmo | Unidade 04

© 2014 - AIEC - Associação Internacional de Educação Continuada

37
101 – Algoritmo | Unidade 04

Dá para perceber, a partir de todos esses exemplos, que o conceito de grafos é bastante abrangente e
pode ser utilizado para diversas coisas. Mas como assim “utilizar”? Uma das maneiras, citando o
exemplo das linhas do Metrô, como poderíamos aumentar o fluxo de pessoas em cada linha (nó)? Esse é
um grande problema hoje para as grandes cidades, como São Paulo e Rio de Janeiro. Aumentar o
número de pessoas que utilizam o metrô, tirando carros em circulação das ruas. Não é apenas construir
novos nós, ou novas estações, é um estudo de fluxo de pessoas, horários de picos, velocidade de cada
trem, temperatura etc.

É isso que torna a teoria dos grafos um campo tão estudado. As pessoas estudam esse modelo
matemático porque sabem que, se conseguirem desenvolver novos trabalhos em cima desse modelo
abstrato, esses trabalhos serão aplicáveis a inúmeros problemas reais. Imagine que você tenha
conseguido desenvolver um trabalho para aumentar o fluxo entre dois nós de um grafo. Esse seu
trabalho poderá ser aplicado a qualquer modelo, dentro das características de cada problema. É
importante então sempre levar em consideração todas as necessidades de cada problema.

Outro exemplo que podemos usar é a ampliação de casas com luz elétrica. Vejamos, expandir energia
elétrica para pessoas que não possuem pode tirar de quem já tem, ou prejudicar o funcionamento.
Ampliar e melhorar a distribuição da rede de energia elétrica é um desafio para o governo e as centrais
elétricas. Aumentar com responsabilidade.

São estudos que devem ser feitos para não prejudicar a distribuição para o restante da cidade. Estamos
vendo que não é o caso só de colocar mais postes e fios. Deve se ter um estudo de como atender a
demanda de melhoria, que é a expansão de energia para quem não tem.

© 2014 - AIEC - Associação Internacional de Educação Continuada

38
101 – Algoritmo | Unidade 04

15

RESUMO

As estruturas estão presentes no nosso dia a dia, no trabalho, na escola, entre outras. Na tecnologia as
árvores podem ser utilizadas para representar decisões, definições formais de linguagem ou mesmo
para representar hierarquia entre elementos. As árvores também são estruturas, que apoiam em vários
momentos o desenvolvimento do software. A construção de uma árvore pode ser recursiva, até atender
a necessidade do algoritmo.

Uma árvore binária é um conjunto finito de elementos que está vazio ou é particionada em três
subconjuntos: raiz da árvore; subárvore da esquerda e subárvore da direita.

Os grafos são estruturas matemáticas usadas para representar ideias ou modelos, por intermédio de
uma ilustração, gráfico ou esquema. O seu estudo é importante para ajudar na melhoria do cotidiano
das pessoas, não somente para a TI. Estudos de fluxos de transporte, distribuição de energia, cursos de
água e rotas e áreas são exemplos de grafos e estão, todos os dias, sendo avaliados em prol da
população.

© 2014 - AIEC - Associação Internacional de Educação Continuada

39

Das könnte Ihnen auch gefallen