Você está na página 1de 90

FIAA-FACULDADES INTEGRADAS ANGLO-AMERICANO

CURSO DE SISTEMAS DE INFORMAO









Apostila de

Algoritmo Estruturado










4 edio Agosto de 2003
Prof
a
Salete Buffoni
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

2

Sumrio


CAPTULO 1 - PROGRAMAO ESTRUTURADA

1.1. Introduo...............................................................................................................................4
1.2. Conceitos Bsicos................................................................................................................4
1.2.1. Hardware.........................................................................................................................6
1.2.2. Software..........................................................................................................................7
1.3. O Desenvolvimento de Sistemas de Informao e o Programador........................................8

CAPTULO 2 - SOLUO DE PROBLEMAS: ALGORITMOS

2.1. Problemas e solues............................................................................................................10
2.2. Definio de Algoritmo........................................................................................................11
2.3. Tcnicas de Representao de Algoritmos...........................................................................12
2.4. Algoritmo x Programa..........................................................................................................14
2.5. Linguagem de Programao.................................................................................................14
2.6. Processo de Criao e Execuo de um Programa...............................................................15
2.7. Estratgias a serem Seguidas na Resoluo de Problemas...................................................17
2.7.1. Critrios de Qualidade de um Programa ........................................................................17
2.7.2. Metodologia de Soluo..................................................................................................17

CAPTULO 3 - ALGORITMOS: COMANDOS BSICOS

3.1. Identificadores, Constantes, Variveis e Tipos Bsicos.......................................................19
3.2. Declarao de Variveis.......................................................................................................20
3.2.1. Palavras Reservadas........................................................................................................21
3.3. Comando Simples.................................................................................................................21
3.4. Comando Composto.............................................................................................................21
3.5. Operadores............................................................................................................................22
3.6. Comandos de Entrada e Sada..............................................................................................24
3.7. Estrutura de um Algoritmo em Pseudo-Cdigo e DNS.......................................................25

CAPTULO 4 - ESTRUTURAS BSICAS DE CONTROLE

4.1. Seqncia..............................................................................................................................28
4.2. Seleo..................................................................................................................................28
4.2.1. Seleo Simples..............................................................................................................28
4.2.2. Seleo Composta...........................................................................................................29
4.2.3.Aninhamento de Selees................................................................................................30
4.3. Estruturas de Repetio- LAOS(LOOPS).........................................................................30
4.3.1. Lao Enquanto................................................................................................................30
4.3.2. Controlados por Contador...............................................................................................32
4.3.3. Repetio com Teste no Final.........................................................................................32
4.4. Escape do Lao....................................................................................................................33
4.5. Regras Prticas para a Construo de Algoritmos Legveis.................................................35


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

3


CAPTULO 5 - ESTRUTURAS DE DADOS HOMOGNEAS: VETORES E MATRIZES
5.1. Repetio com varivel de controle (Para)......................................................................51
5.2. Seleo dentre mltiplas alternativas...............................................................................53
5.3. Vetores.............................................................................................................................55
5.3.1.Declarao de Vetores.................................................................................................55
5.3.2.Trabalhando com Vetores............................................................................................56
5.4. Matrizes............................................................................................................................63
5.4.1. Declarao de Matrizes...............................................................................................63
5.4.2. Trabalhando com Matrizes..........................................................................................63

CAPTULO 6 - MODULARIZAO DE ALGORITMOS

6.1. Introduo........................................................................................................................69
6.2. Procedimentos..................................................................................................................69
6.3. Funes............................................................................................................................71
6.3.1. Prottipos de Funes.................................................................................................75
6.3.2. Escopo de Variveis...................................................................................................76
6.3.2.1. Variveis Locais....................................................................................................76
6.3.2.2. Parmetros Formais...............................................................................................77
6.3.2.3. Variveis Globais..................................................................................................77
6.3.3. Passagem de Parmetros por Valor e Passagem por Referncia................................78
6.4. Funes Recursivas..........................................................................................................80
6.5. Estruturao dos Mdulos de um Algoritmo....................................................................80

CAPTULO7 - ALGORITMOS DE PESQUISA E ORDENAO

7.1. Introduo............................................................................................................................81
7.2. Algoritmos de Pesquisa........................................................................................................81
7.2.1. Pesquisa Seqencial Simples..........................................................................................82
7.2.2. Pesquisa Seqencial Ordenada.......................................................................................83
7.2.3. Pesquisa Binria..............................................................................................................85
7.3. Algoritmos de Ordenao.....................................................................................................86
7.3.1. Mtodos de Seleo Direta.............................................................................................87
7.3.2. Mtodo de Insero Direta..............................................................................................88
7.3.3. Mtodo de Bolha.............................................................................................................88

REFERNCIAS.............................................................................................................................89








Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

4


CAPTULO 1 - PROGRAMAO ESTRUTURADA




1.1. INTRODUO

Programao de computadores uma atividade que vem se desenvolvendo h mais de 40
anos desde o surgimento das primeiras linguagens de programao. Inicialmente, aprendia-se a
programar utilizando-se a prpria linguagem como ferramenta. A linguagem Fortran, criada em
1954, e com seu primeiro compilador em 1957, foi durante muito tempo utilizada com este fim,
inclusive no Brasil. Nas dcadas de 60 e 70, com o aparecimento de algumas outras linguagens, o
Fluxograma, um mtodo grfico que hoje est em desuso, foi grandemente utilizado em
complemento ao anterior. Hoje em dia, depois de centenas de linguagens de programao criadas
e de vrios mtodos para se representar a soluo de problemas, aprende-se a programar
construindo e desenvolvendo algoritmos.
Na disciplina Algoritmos, com o auxlio desta apostila, voc vai aprender os passos bsicos
e as tcnicas para construo de algoritmos e programas, utilizando dois mtodos para sua
representao. Espera-se que com isso ao fim de um perodo de quatro meses, voc tenha
adquirido a capacidade de transformar qualquer problema de mdia complexidade e extenso em
um algoritmo de boa qualidade. Antes de entrarmos no assunto propriamente dito, vamos
apresentar alguns conceitos bsicos sobre construo de algoritmos e tecer breves consideraes
sobre os dois componentes do sistema de computao ou de processamento eletrnico de dados:
O Hardware e o Software. Se voc deseja saber algo sobre a histria da computao sugerimos
os captulos iniciais das referncias [1] e [3].
O objetivo desse curso a Lgica de Programao dando uma base terica e prtica,
suficientemente boa, para que, o aluno domine os algoritmos e esteja habilitado a aprender uma
linguagem de programao. Ser mostrado tambm um grupo de algoritmos clssicos para
tarefas cotidianas, tais como: ordenao e pesquisa.

1.2. CONCEITOS BSICOS
Dados: so elementos brutos que podem ser processados por um computador digital para
se obter alguma concluso ou resultado, ou seja, uma informao.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

5
Computador Digital: Mquina(hardware) muito rpida que pode processar dados,
realizando clculos e operaes repetitivas, se dotadas de programao adequada
(software), e que fornece resultados corretos e precisos.

Informao: o resultado do processamento dos dados pelo computador. Uma
informao pode ser considerada como dado para outro processamento e, por isso, muitas
vezes referenciada como dado de sada.
Hardware: um termo de origem americana que engloba todo o equipamento principal e
perifrico de um computador. O termo utilizado tambm para equipamentos sem
software. O hardware, normalmente, fixo e difcil de ser modificado.
Software: um outro termo de origem americana que engloba programas, documentao,
procedimentos e dados, utilizados em um computador para resoluo de um determinado
problema. O software, ao contrrio do hardware, malevel e por isso mais facilmente
modificvel pelo programador, para adaptao a novos dados, novos requisitos do
problema a ser resolvido, ou novo hardware onde vai funcionar (ser executado).
Programa de Computador: seqncia de instrues no ambgua e finita em uma
linguagem de programao especfica que, quando executada, resolve um problema
determinado.
Linguagem de mquina: a linguagem binria (composta de zeros e uns) utilizada pelos
computadores, para representar dados, programas e informaes. tediosa, difcil de se
compreender e fcil de gerar erros na programao.
Linguagem Assembler: uma linguagem particular para cada processador (computador),
que codifica as instrues em linguagem de mquina e facilita um pouco o trabalho do
programador. tambm considerada uma linguagem de baixo nvel, mas ainda hoje
utilizada.
Linguagem de programao de 3 gerao: tambm chamada de linguagem de alto
nvel, engloba todas as linguagens de programao que utilizam compiladores ou
interpretadores. Possuem instrues mais poderosas que a linguagem Assembler,
facilitando ainda mais o trabalho do programador.
Exemplos: Fortran, Cobol, Algol, PLI, Pascal, Modula2, Lips, C, ADA, etc.
Linguagem de programao de 4 gerao: so linguagens no procedurais, utilizadas
para sistemas de gerenciamento de banco de dados, planilhas e outros aplicativos que
utilizam comandos mais poderosos ainda que as linguagens de 3 gerao e, por isso, so
ainda mais fceis de programar. Exemplos: SQL, DBASE, CLIPPER, INGRES, etc.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

6
Compilador: um programa utilizado para traduzir os programas escritos pelo
programador nas linguagens de alto nvel (programa fonte) para a linguagem de mquina
(programa executvel), a fim de poder ser executado pelo computador.
Interpretador: um programa que traduz os programas escritos pelo programador para a
linguagem de mquina, no momento da execuo (no existindo assim o programa
executvel).

1.2.1. HARDWARE
O hardware de um computador, segundo a arquitetura bsica de Von Neumann,
composto de trs elementos principais :
A Unidade Central de Processamento (UCP ou CPU)
A Memria Principal (MP)
Os dispositivos de Entrada e Sada de Dados (E/S ou I/O)

A UCP composta de dois elementos principais:
A Unidade Aritmtica e Lgica (ULA ou ALU) que responsvel pela realizao de todas
as operaes lgicas e aritmticas no computador;
A Unidade de Controle (UC ou CU) que responsvel pelo controle de todos os
elementos do computador e dos perifricos, recebendo sinais de estado (status) destes e
gerando sinais de controle para estes.
Exemplos de UCP: 80.286, 80.386, 80.486, PENTIUM, POWER PC, 68.040, etc.

A MP o elemento que armazena os programas, os dados e as informaes (resultados)
durante a execuo de um programa. Cada posio da memria possui um endereo e um
contedo. Ao ser desligado o computador, todo o contedo da memria principal perdido.
Os perifricos, ou dispositivos de entrada e sada, como sugere o nome, so responsveis
pela entrada de dados para UCP/MP e a sada de informaes da UCP/MP. Os perifricos de E/S
esto, normalmente, relacionados memria secundria e podem ser de entrada, de sada ou de
emprego duplo (entrada e sada).

Exemplos: Unidade Controladora de Disco Flexvel, Unidade de Fita Magntica, Scanner, Mouse,
Plotter, Impressora, Monitor, Teclado, Modem, caneta tica, Unidade Controladora de disco
Rgido (winchester), Unidade de CD-ROM, etc.

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

7
A memria secundria (MS) responsvel pelo armazenamento, em carter permanente,
de programas e dados. onde se localizam os arquivos de dados, de programas ou de sada
(resultados).

Exemplos de MS so: discos flexveis (disquetes), discos rgidos (winchester), cartuchos (fitas
streamer), fitas magnticas, CD-ROM, etc.

Para os que desejarem, este assunto apresentado em maior profundidade na referncia [3]. A
Figura 1.1 abaixo ilustra o inter-relacionamento dos componentes acima citados:


Figura 1.1- O Computador segundo Von Neumann.

1.2.2. SOFTWARE
O software de um computador o que determina o seu uso e os resultados que sero
produzidos e apresentados. Em um computador digital existem diversos tipos diferentes de
software, em camadas, com finalidades e complexidades diferentes. Normalmente, quanto mais
relacionado e prximo ao hardware, mais complexo e difcil de se desenvolver e manter ele .
A Figura 1.2, que se segue, procura ilustrar o que foi dito. Partindo-se do hardware que est no
centro, o Sistema Operacional com seus diversos programas a primeira camada de software do
nosso computador. muito complexo desenvolver-se um sistema operacional como DOS, UNIX,
VMS, WINDOWS 2000 e outros que voc j deve ter ouvido falar.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

8
Externamente ao sistema operacional vamos encontrar os compiladores e interpretadores
das linguagens de programao que, de certa forma, traduzem os programas aplicativos para a
linguagem de mquina que o computador entende. Nesta segunda camada encontramos tambm
os processadores ou editores de texto (Wordstar, WordPerfect, Fcil, Carta Certa, Word, etc.), os
gerenciadores de bancos de dados (Dbase, Dialog, Paradox, FoxBase, Access, etc.), as planilhas
(Lotus123, Quattro, Excel, etc.) e muitos outros programas utilitrios (PCTools, Norton, Utilities,
Quik Link, etc.). Na camada mais externa encontramos os programas aplicativos que podem ser
desenvolvidos utilizando-se os recursos da camada anterior e nas linguagens de programao,
utilizando os interpretadores ou os compiladores para poderem ser executados.



Para o desenvolvimento destes programas que se faz uso das tcnicas de construo de
algoritmos, de forma a se garantir que os programas sero gerados com um mnimo de erro e
podero ser mantidos, sem dificuldade, por um programador, que no o tenha desenvolvido.
Ao contrrio do que muitos pensam, um computador no faz nada sozinho. Ele uma
mquina rpida, que resolve problemas bem definidos e repetitivos, mesmo complexos, mas
somente se for bem programado. Ou seja: se temos LIXO na entrada (quer na forma de maus
programas ou dados ruins), teremos LIXO na sada (nossos resultados).

Figura 1.2- As camadas de software em um computador.

1.3. O DESENVOLVIMENTO DE SISTEMAS DE INFORMAO E O PROGRAMADOR
Um sistema de informao pode ser definido como um sistema baseado em computador
que auxilia, automatiza e otimiza o funcionamento de qualquer atividade atravs da(o):
Reduo da participao do homem em atividades rotineiras e repetitivas; Aumento da
facilidade na coleta e armazenamento de dados e na rapidez de recuperao e manuseio;
Reduo do nmero de erros produzidos em operaes de coleta, arquivamento e
recuperao de dados e de informaes;
Aumento de facilidade e flexibilidade na gerao de relatrios, entre outros.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

9
Uma pergunta que muitos se fazem : Qual o papel do programador e do analista de sistemas no
desenvolvimento de sistemas de informao? Para respond-la, vejamos o Ciclo de Vida de um
sistema. Para desenvolvimento de qualquer sistema informatizado de boa qualidade h que se
passar pelas seguintes fases:
1 Fase: Estudo de Viabilidade (Estudos Iniciais)
2 Fase: Anlise detalhada do sistema (Projeto Lgico)
3 Fase: Projeto preliminar do sistema (Projeto Fsico)
4 Fase: Projeto detalhado do sistema (Algoritmos)
5 Fase: Codificao ou implementao (na linguagem escolhida)
6 Fase: Testes
7 Fase: Implementao, operao e manuteno

As trs primeiras fases normalmente so de responsabilidade dos Analistas de Sistemas.
Nas outras podem trabalhar indistintamente, dependendo da complexidade e da situao,
programadores, analistas ou programadores e analistas. A construo dos algoritmos aparece
ento na fase do projeto detalhado do sistema. Aps definidos e criados todos os algoritmos
temos de codific-los na linguagem escolhida. Para essa tarefa o programador dever conhecer a
mquina e o compilador a serem utilizados, e esse assunto ser coberto na matria de Linguagem
de Programao.
No desenvolvimento de um projeto, quanto mais tarde um erro detectado, mais dinheiro e
tempo se gasta para repar-lo. Assim, a responsabilidade do programador maior na criao dos
algoritmos do que na sua implementao pois, quando bem projetados, no se perde muito tempo
em refaze-los reimplant-los e retest-los, assegurando assim um final feliz e no prazo previsto
para o projeto. Entretanto, num projeto, o trabalho de desenvolvimento de algoritmos e programas
poder ter de ser todo refeito se houver problemas nas trs primeiras fases, mostrando assim a
importncia do trabalho do Analista de Sistemas.











Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

10
CAPTULO 2 - RESOLUO DE PROBLEMAS: ALGORITMOS




2.1. PROBLEMAS E SOLUES
Vamos supor que Temos que pregar um prego em um pedao de madeira. Para realizar
esta tarefa teremos que segurar o prego sobre a madeira e bater com o martelo tantas vezes
quantas forem necessrias at que o prego entre por inteiro.

Uma soluo para este problema seria:

1 repetir a seguinte seqncia de aes:
segurar o prego sobre a madeira com a mo esquerda;
bater com o martelo no prego, com a mo direita;
verificar se o prego j est todo dentro da madeira.
O qual pode se notar nesse exemplo que haver uma repetio de aes at que uma
determinada condio esteja satisfeita (o prego esteja dentro da madeira).

Suponha que voc precise realizar uma seleo de candidatos para um emprego e h dois
requisitos a serem preenchidos. Voc dever contratar os que preencherem os dois requisitos,
anotar os dados de quem preencher apenas um dos requisitos e dispensar os que no
preencherem nenhum dos dois requisitos. Poderamos escrever uma soluo para este problema
da seguinte forma:
1 chamar o candidato;
2 se preencher os dois requisitos ento contratar;
3 caso contrrio, se preenche um ou outro requisito ento anotar seus dados;
4 seno dispens-lo.

O que se pode observar nesta soluo que estamos fazendo uma seleo do candidato
que satisfaz as duas condies (requisitos) para o emprego, e tambm uma segunda seleo
(possivelmente para uso futuro) dos candidatos que satisfazem apenas uma das condies.
Estas seqncias de passos, que resolvem cada um dos exemplos propostos o que pode
ser chamado de algoritmo para soluo do problema. Elas esto a exemplificar as trs formas
bsicas de se definir uma soluo para qualquer problema:


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

11
SEQUNCIA
REPETIO
SELEO
Naturalmente que os algoritmos para problemas resolvidos com o auxlio de computadores
no sero to simples e nem apresentados com os exemplos mostrados. Veremos isto nos
captulos que se seguem, mas a figura abaixo d uma idia da utilidade dos Algoritmos.

Figura 2.1- A soluo de problema com o uso do computador.

2.2. DEFINIO DE ALGORITMO
O conceito central da programao e da Cincia da Computao o conceito de
algoritmos, isto , programar basicamente construir algoritmos.
a descrio, de forma lgica, dos passos a serem executados no cumprimento de
determinada tarefa.
O algoritmo pode ser usado como uma ferramenta genrica para representar a soluo de
tarefas independente do desejo de automatiz-las, mas em geral est associado ao
processamento eletrnico de dados, onde representa o rascunho para programas
(Software).
Serve como modelo para programas, pois sua linguagem intermediria linguagem
humana e s linguagens de programao, sendo ento, uma boa ferramenta na validao
da lgica de tarefas a serem automatizadas.
Um algoritmo uma receita para um processo computacional e consiste de uma srie de
operaes primitivas, interconectadas devidamente, sobre um conjunto de objetos. Os
objetos manipulados por essas receitas so as variveis.
Algoritmo pode ter vrios nveis de abstraes de acordo com a necessidade de
representar ou encapsular detalhes inerentes s linguagens de programao.
Como qualquer modelo, um algoritmo uma abstrao da realidade. A abstrao o
processo de identificar as propriedades relevantes do fenmeno que esta sendo modelado.
Usando o modelo abstrato, podemos nos centrar unicamente nas propriedades relevantes
para ns, dependendo da finalidade da abstrao, e ignorar as irrelevantes.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

12
a forma pela qual descrevemos solues de problemas do nosso mundo, afim de,
serem implementadas utilizando os recursos do mundo computacional. Como este
possu severas limitaes em relao ao nosso mundo, exige que, sejam impostas
algumas regras bsicas na forma de solucionar os problemas, para que, possamos utilizar
os recursos de hardware e software disponveis. Pois, os algoritmos, apesar de servirem
para representar a soluo de qualquer problema, no caso do Processamento de Dados,
eles devem seguir as regras bsicas de programao para que sejam compatveis com as
linguagens de programao.
Um algoritmo formalmente uma seqncia finita de passos que levam a execuo de
uma tarefa. Podemos pensar em algoritmo como uma receita, uma seqncia de
instrues que do cabo de uma meta especfica. Estas tarefas no podem ser
redundantes nem subjetivas na sua definio, devem ser claras e precisas. Como
exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio,
multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os
manuais de aparelhos eletrnicos, como um videocassete, que explicam passo a passo
como, por exemplo, gravar um evento.
De um modo informal, um algoritmo um procedimento computacional bem definido que
toma como parmetro de entrada um valor (ou um conjunto de valores) e que produz como
sada um valor (ou um conjunto de valores). Ou seja, uma seqncia de passos
computacionais que transformam um "input" num "output". Sob um outro ponto de vista um
algoritmo uma ferramenta que permite resolver um problema computacional especfico.
Um Algoritmo a descrio de um padro de comportamento, expresso em termos de um
repertrio bem definido e finito de aes primitivas, as quais damos por certo que podem
ser executadas [2].
As definies acima mostram que um algoritmo, para ser assim definido, precisa:
1. Ter incio e fim
2. Ser descrito em termos de aes no ambguas e bem definidas
3. Que as aes sigam uma seqncia ordenada
Exemplos de algoritmos (muitos podem ser retirados do nosso dia a dia):
As instrues de operao de um equipamento;
Uma receita de bolo ou de algum prato;
Instrues de montagem;

2.3.TCNICAS DE REPRESENTAO DE ALGORITMOS
Os algoritmos podem ser representados de diversas formas, a saber:
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

13
1. Em uma lngua (portugus, ingls): utilizado nas receitas, instrues , etc. Para soluo de
problemas em computao apresenta um inconveniente: a ambigidade de alguns termos.
2. Uma linguagem de programao (Pascal, Cobol, C, etc.): utilizada por alguns
programadores j experientes, porm apresenta alguns inconvenientes: utiliza apenas as
instrues existentes na linguagem especfica e muito detalhada nas preocupaes com a
sintaxe, desviando a ateno do programador da soluo do problema em si.
3. Representaes grficas: so bastante recomendveis j que um desenho muitas substitui,
com vantagem, mil palavras. Alguns exemplos (ver Figura 2.2 abaixo):

a) fluxograma (hoje em dia esto caindo em desuso)
b) diagramas de Nassi-Scheniderman (utilizaremos no nosso curso)
c) mtodo de Jackson
d) diagramas de Warnier-Or

Figura 2.2 - Mtodos grficos para representao de algoritmos

2.3.1- PSEUDO-CDIGO
Os algoritmos so descritos em uma linguagem chamada pseudo-cdigo. Este nome
uma aluso posterior implementao em uma linguagem de programao, ou seja, quando
formos programar em uma linguagem, por exemplo Visual Basic, estaremos gerando cdigo em
Visual Basic. Por isso os algoritmos so independentes das linguagens de programao. Ao
contrrio de uma linguagem de programao no existe um formalismo rgido de como deve ser
escrito o algoritmo.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

14
O algoritmo deve ser fcil de se interpretar e fcil de codificar. Ou seja, ele deve ser o
intermedirio entre a linguagem falada e a linguagem de programao. Utilizaremos em nosso
curso um pseudo-cdigo que chamaremos de nosso pseudo-cdigo. Existem vrias
pseudolinguagens de programao como mostra a referncia [2] que utiliza o Portugol(
Portugus + Algol +Pascal), para o estudo dos algoritmos.

2.4. ALGORITMO X PROGRAMA
Um algoritmo uma seqncia lgica de aes a serem executadas para se executar uma
determinada tarefa. Um Programa a formalizao de um algoritmo em uma determinada
linguagem de programao, segundo suas regras de sintaxe e semntica, de forma a permitir que
o computador possa entender a seqncia de aes.

2.5. LINGUAGEM DE PROGRAMAO
Conjunto de smbolos ( comandos, identificadores, caracteres etc ....) e regras de sintaxe
que permitem a construo de sentenas que descrevem de forma precisa aes compreensveis
e executveis para o computador.

2.5.1. LINGUAGEM DE PROGRAMAO = SMBOLOS + REGRAS DE SINTAXE
Uma linguagem de programao uma notao formal para descrio de algoritmos que
sero executados por um computador. Como todas as notaes formais, uma linguagem de
programao tem dois componentes: Sintaxe e Semntica. A sintaxe consiste em um conjunto de
regras formais, que especificam a composio de programas a partir de letras, dgitos, e outros
smbolos. Por exemplo, regras de sintaxe podem especificar que cada parnteses aberto em uma
expresso aritmtica deve corresponder a um parnteses fechado, e que dois comandos
quaisquer devem ser separados por um ponto e vrgula. As regras de semntica especificam o
significado de qualquer programa, sintaticamente vlido, escrito na linguagem.

2.5.2. TIPOS DE LINGUAGENS DE PROGRAMAO
Existem diversas linguagens de programao, cada uma com suas caractersticas
especficas e com nveis de complexidade e objetivos diferentes:
Linguagem de Mquina nica compreendida pelo computador. Especfica de
cada computador.
Linguagens de Baixo Nvel Ex.: Assembly
Linguagens de Alto Nvel Utiliza instrues prximas da linguagem humana de
forma a facilitar o raciocnio.

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

15
Ex.: Uso Cientfico : Fortran
Propsito Geral : Pascal, C, Basic
Uso Comercial : Cobol, Clipper


2.6. PROCESSO DE CRIAO E EXECUO DE UM PROGRAMA
Embora seja teoricamente possvel a construo de computadores especiais, capazes de
executar programas escritos em uma linguagem de programao qualquer, os computadores,
existentes hoje em dia so capazes de executar somente programas em linguagem de baixo nvel,
a Linguagem de Mquina.
As Linguagens de Mquina so projetadas levando-se em conta os seguintes aspectos:
Rapidez de execuo de programas
Custo de sua implementao
Flexibilidade com que permite a construo de programas de nvel mais alto.
Por outro lado, linguagens de programao de alto nvel so projetadas em funo de :
Facilidade de construo de programas
Confiabilidade dos programas

O PROBLEMA : Como a linguagem de nvel mais alto pode ser implementada em um
computador, cuja linguagem bastante diferente e de nvel mais baixo ?

SOLUO : Atravs da traduo de programas escritos em linguagens de alto nvel para a
linguagem de baixo nvel do computador.
Para isso existem trs tipos de programas tradutores : Montadores, Interpretadores e
Compiladores.

MONTADOR Efetua a traduo de linguagem de montagem ( Assembly ) para a linguagem de
mquina.
1. Obtm prxima instruo do Assembly
2. Traduz para as instrues correspondentes em linguagem de mquina
3. Executa as instrues em linguagem de mquina
4. Repete o passo 1 at o fim do programa

INTERPRETADOR Efetua a traduo a de uma linguagem de alto nvel para linguagem de
mquina da seguinte forma:
1. Obtm prxima instruo do cdigo-fonte em linguagem de alto nvel
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

16
2. Traduz para as instrues correspondentes em linguagem de mquina
3. Executa as instrues em linguagem de mquina
4. Repete o passo 1 at o fim do programa

COMPILADOR Efetua a traduo de todo o cdigo-fonte em linguagem de alto nvel para as
instrues correspondentes em linguagem de mquina, gerando o cdigo-objeto do programa. Em
seguida necessrio o uso de um outro programa ( Link-Editor ) que responsvel pela juno
de diversos cdigos-objeto em um nico programa executvel.

2.6.1. POSSIBILIDADES DE ERROS NUM PROGRAMA
Erros de Compilao : Erros de digitao e de uso da sintaxe da linguagem
Erros de Link-Edio : Erro no uso de bibliotecas de sub-programas necessrias ao
programa principal.
Erros de Execuo : Erro na lgica do programa (algoritmo).
2.7. ESTRATGIAS A SEREM SEGUIDAS NA RESOLUO DE PROBLEMAS
2.7.1. CRITRIOS DE QUALIDADE DE UM PROGRAMA
Refere-se preciso das informaes manipuladas pelo programa, ou seja, os resultados
gerados pelo processamento do programa devem estar corretos, caso contrrio o programa
simplesmente no tem sentido.

Clareza : Refere-se facilidade de leitura do programa. Se um programa for escrito com clareza,
dever ser possvel a outro programador seguir a lgica do programa sem muito esforo, assim
como o prprio autor do programa entend-lo aps ter estado um longo perodo afastado dele.

Simplicidade : A clareza e preciso de um programa so normalmente melhoradas tornando as
coisas o mais simples possvel, consistentes com os objetivos do programa. Muitas vezes torna-se
necessrio sacrificar alguma eficincia de processamento, de forma a manter a estrutura do
programa mais simples.

Eficincia : Refere-se velocidade de processamento e a correta utilizao da memria. Um
programa deve ter performance SUFICIENTE para atender s necessidade do problema e do
usurio, bem como deve utilizar os recursos de memria de forma moderada, dentro das
limitaes do problema.

Modularizao : Durante a fase de projeto, a soluo do problema total vai sendo fatorada em
solues de subproblemas, o que permite geralmente dividir o problema em forma natural em
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

17
mdulos com subfunes claramente delimitadas, que podem ser implementados separadamente
por diversos programadores de uma equipe, ou seja, a modularizao consiste no
particionamento do programa em mdulos menores bem identificveis e com funes especficas,
de forma que o conjunto desses mdulos e a interao entre eles permite a resoluo do
problema de forma mais simples e clara.

Generalidade : interessante que um programa seja to genrico quanto possvel de forma a
permitir a reutilizao de seus componentes em outros projetos.

2.7.2. METODOLOGIA DE SOLUO

1-Entender o problema;
2- Formular um esboo da soluo;
3- Fazer uma primeira aproximao das variveis necessrias;
4- Rever os passos originais, detalhando;
5- Se o algoritmo estiver suficientemente detalhado, testar com um conjunto de dados
significativos;
6- Implementar numa linguagem de programao.

Utilizaremos em nosso curso uma pseudolinguagem de programao chamada PORTUGOL,
cujo objetivo obter-se uma notao para algoritmos a ser utilizada na definio, na criao,
no desenvolvimento e na documentao de um programa, e no criar mais uma linguagem de
programao.














Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

18

CAPTULO 3 - ALGORTMOS




3.1. IDENTIFICADORES, CONSTANTES, VARIVEIS E TIPOS BSICOS
Identificadores: Representam os nomes escolhidos para rotular as variveis,
procedimentos e funes, normalmente, obedecem as seguintes regras :
Letra
Letra
Dgito


1. O primeiro caracter deve ser uma letra
2. Os nomes devem ser formados por caracteres pertencentes ao seguinte conjunto :
{a,b,c,..z,A,B,C,...Z,0,1,2,...,9,_}
3. Os nomes escolhidos devem explicitar seu contedo.
EX: A, B1, BC3D,SOMA, CONTADOR
obs.: Um exemplo de identificador invlido seria 2AB ou qualquer outro iniciado por um dgito
CONSTANTE (constant) Uma constante (Const), como sugere o nome, um
identificador que armazena um valor fixo e imutvel, durante a execuo de um algoritmo
ou programa. Podemos associ-lo a uma posio de memria (endereo) que tem um
contedo fixo. Este contedo poder ser um nmero (real ou inteiro), uma cadeia de
caracteres (texto) ou um valor lgico (ser definido abaixo).
VARIVEL (variable) Uma varivel (Var) um identificador que, como sugere o
nome, possui o contedo varivel durante a execuo de um algoritmo ou programa.
Podemos associar uma varivel a uma posio da memria (endereo) e poderemos
armazenar (guardar) neste endereo qualquer valor do conjunto de valores de um tipo
bsico associado a ela. Uma varivel pode assumir vrios valores diferentes ao longo da
execuo do programa, mas, em um determinado momento, possui apenas um valor.
Unidades bsicas de armazenamento das informaes a nvel de linguagens de
programao. Os tipos de dados e variveis utilizados dependem da finalidade dos
algoritmos, mas, podemos definir alguns, pelo fato de serem largamente utilizados e
implementados na maioria das linguagens:
Esse tipo bsico poder ser:


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

19

INTEIRO (int, short int ou long int): : qualquer nmero inteiro, negativo, nulo ou positivo.
Ex: -2, -1, 0...
Operaes: soma(+), subtrao(-), multiplicao(*), diviso inteira(/), resto(%) e comparaes.

REAL (float ou double): qualquer nmero real, negativo, nulo ou positivo.
Ex: 2.5, 3.1
Operaes: soma(+), subtrao(-), multiplicao(*), diviso exata(/) e comparaes.

CARACTER (char): qualquer conjunto de caracteres alfanumricos.
Ex: A, B, "ABACATE "
Operaes: comparaes

TEXTO OU CADEIA DE CARACTERES (STRING): uma varivel deste tipo poder armazenar
uma cadeia de caracteres de qualquer tamanho. Caso seja imprescindvel para o entendimento
pode-se acrescentar, entre parnteses, a quantidade mxima de caracteres. (Exemplo: texto (10)).
Obs.: Os textos devero ser representados sempre entre apstrofes para que no se confundam
com os valores numricos. Veja que o inteiro 5, diferente do texto 5.

LGICO (BOOLEAN): tipo especial de varivel que armazena apenas os valores V e F, onde V
representa VERDADEIRO e FALSO
Ex: e, ou, no
Operaes: Verdadeiro ou Falso

3.2. DECLARAO DE VARIVEIS
Consiste na definio dos nomes e valores das constantes e dos nomes e tipos das
variveis que sero utilizadas pelos algoritmos, previamente sua utilizao, incluindo
comentrio, quando se fizerem necessrios.
Na maioria das linguagens de programao, quando o computador est executando um
programa e encontra uma referncia a uma varivel ou a uma constante qualquer, se esta no
tiver sido previamente definida, ele no saber o que fazer com ela. Da mesma forma, um
programador que estiver implementando um algoritmo, em alguma linguagem de programao,
ter o seu trabalho simplificado se todas as constantes e variveis referenciadas no algoritmo
tiverem sido previamente declaradas. As constantes so declaradas antes das variveis. Vejamos
os formatos da declarao e alguns exemplos.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

20
O significado da declarao de variveis corresponde criao de locais na memria rotulada
com o nome da varivel (identificador) e marcada com o tipo de valores que ela pode conter. Para
que os programas manipulem valores, estes devem ser armazenados em variveis e para isso,
devemos declar-las de acordo com a sintaxe:

; dor identifica
lgico
caracter
real
inteiro


Ex:
Inteiro X1;
obs.: X1 o nome de um local de memria que s pode conter valores do tipo inteiro
real SOMA, MDIA;
caracter frase, nome;
inteiro X1;
real A,B;
lgico TEM;

3.2.1. PALAVRAS RESERVADAS
So palavras que tero uso especfico no nosso pseudo-cdigo e que no devero ser
usadas como identificadores, para no causar confuso na interpretao.

Exemplo: Algoritmo, Programa, Bloco, Procedimento, Inteiro, Real, Texto, Const,
Var, Tipo, Incio, Imprima, Se, Ento, Seno, Enquanto, Repita, Variando,
Faa, Caso, At, Vetor, Matriz, Registro, Fim, Execute, Procedimento, Funo, etc....
O significado de cada um desses termos ser visto e entendido nos itens e captulos que se
seguem.

3.3. COMANDO SIMPLES
uma instruo simples.
leia(x);

3.4. COMANDO COMPOSTO
um grupo de comandos simples que executam alguma tarefa.

,
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

21
Incio
leia(x);
y = 2*x;
fim.

3.5. OPERADORES
Na soluo da grande maioria dos problemas necessrio que as variveis tenham seus
valores consultados ou alterados e, para isto, devemos definir um conjunto de OPERADORES,
sendo eles:
OPERADOR DE ATRIBUIO

Identificador Expresso aritmtica
Expresso lgica
Expresso literal

Ex: O valor da expresso atribudo ao identificador(varivel).
X = 2; y = 5-x;
Este comando permite que se fornea ou altere o valor de uma determinada varivel, onde o tipo
desse valor seja compatvel ao tipo de varivel na qual est sendo armazenado, de acordo com o
especificado na declarao.
NUM = 8 {A varivel NUM recebe o valor 8}
NOME = Guilherme {A varivel NOME recebe o valor Guilherme}
CONT = 0
AUXNOME = NOME {A varivel AUXNOME recebe o contedo da varivel NOME}
ACHOU = falso {A varivel ACHOU recebe o valor falso}
OPERADORES ARITMTICOS:
+ = Adio / = Quociente da diviso de inteiros
5/2=2
* = Multiplicao % = Resto da diviso de inteiros
5%2=1
- = Subtrao ou inverso do sinal. a**b = Exponenciao a
b

/ = Diviso TRUNCA(A) - A parte inteira de um nmero
Fracionrio.
SINAL(A) - Fornece o valor -1, +1
ou zero conforme o valor de A seja
negativo, positivo ou igual a zero.
ARREDONDA (A) - Transforma por
arredondamento, um nmero fracionrio em
inteiro.
;
=
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

22
Obs. FUNES PRIMITIVAS: As funes mais comuns de matemtica so tambm definidas e
vlidas no nosso Pseudo Cdigo.
Exemplos:
LOG (X) , {d o logaritmo na base 10 de X}
SEN (X), {d o seno de X}
ABS (X), {d o valor absoluto de X}
INT (X), {d a parte inteira de um real X}
ARREDONDA (x), {arredonda um real para inteiro}
RAIZ (X), {d a raiz quadrada de X} etc. ...

OPERADORES RELACIONAIS:
So utilizados para relacionar variveis ou expresses, resultando num valor lgico
(Verdadeiro ou Falso), sendo eles:
== igual
!= diferente de
< menor > maior
<= menor ou igual >= maior ou igual

Exemplos:
NUM = 3
NOME = DENISE
NUM > 5 falso (0) {3 no maior que 5}
NOME < DENIZ verdadeiro (1) {DENISE vem antes de DENIZ}
(5 + 3) > = 7 verdadeiro
NUM != (4 1) falso {lembre-se que NUM recebeu 3}

OPERADORES LGICOS:
So utilizados para avaliar expresses lgicas, sendo eles:
e ("and") : conjuno
ou ("or") :disjuno
no ("not") : negao
Exemplos:
ACHOU = falso
NUM =9
(4>5) e (5>3) =>falso e verdadeiro (1) = falso (0)
no ACHOU =>verdadeiro

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

23
PRIORIDADE DE OPERADORES:
Durante a execuo de uma expresso que envolve vrios operadores, necessrio a
existncia de prioridades, caso contrrio poderemos obter valores que no representam o
resultado esperado.
A maioria das linguagens de programao utiliza as seguintes prioridades de operadores :

1 - Efetuar operaes embutidas em parnteses "mais internos"
2 - Efetuar Funes
3 - Efetuar multiplicao e/ou diviso
4 - Efetuar adio e/ou subtrao
5 - Operadores Relacionais
6 - Operadores Lgicos
Ou seja,
Primeiro: Parnteses e Funes
Segundo: Expresses Aritmticas
1)+, - (Unitrios)
2) **
3) *,/
4)+,- (binrio)

Terceiro: Comparaes
Quarto: No
Quinto: e
Sexto: ou
OBS: O programador tem plena liberdade para incluir novas variveis, operadores ou funes
para adaptar o algoritmo as suas necessidades, lembrando sempre, de que, estes devem ser
compatveis com a linguagem de programao a ser utilizada.

3.6. COMANDOS DE ENTRADA E SADA
No algoritmo preciso representar a troca de informaes que ocorrer entre o mundo da
mquina e o nosso mundo, para isso, devemos utilizar comandos de entrada e sada, sendo que,
a nvel de algoritmo esses comandos representam apenas a entrada e a sada da informao,
independe do dispositivo utilizado (teclado, discos, impressora, monitor,...), mas, sabemos que
nas linguagens de programao essa independncia no existe, ou seja, nas linguagens de
programao temos comandos especficos para cada tipo de unidade de Entrada/Sada.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

24
Comando de Entrada de Dados
Para que possamos obter dados do meio exterior para uso do computador (memria principal),
estes tm de vir atravs dos dispositivos de entrada. Da mesma forma, as informaes que so
produzidas, tem de ser levadas ao meio externo (um arquivo, um a impressora, uma tela etc.)
atravs de um dispositivo de sada. Para isso, utilizamos dois comandos assim definidos:

Comando Leia(scanf no c): l, do meio externo, a prxima informao disponvel para leitura e
armazena na(s) varivel(eis) discriminada(s) aps o comando, entre parnteses. Mais tarde
aprenderemos como especificar a leitura de um dado que est armazenado em um arquivo e de
que arquivo est sendo lido o dado.

Leia(varivel_1, varivel_2,...);
identificador

Ex: leia (v); O valor da varivel (v) dado por um dispositivo de entrada.

Comando de Sada de Dados
Comando Imprima (printf no c): Imprime (na tela ou na impressora) o contedo da(s)
varivel(eis) especificada(s) aps o comando, entre parnteses. No ser preocupao nossa a
formatao de relatrios, mas o comando permite a impresso de texto (entre ), se for necessria
para clareza ou especificao do que est sendo impresso.
identificador
expresso

Ex: imprima (x); O valor atual da varivel (x) informado para um dispositivo de sada.

3.7. ESTRUTURA DE UM ALGORITMO EM PSEUDO-CDIGO E DNS
As estruturas de controle introduzidas nesta unidade facilitaro a expresso de algoritmos e
permitiro que exemplos mais significativos sejam apresentados e propostos, visando o
aperfeioamento do desenvolvimento do processo de aprendizado da construo de algoritmos.
Descreveremos a seguir os blocos e os comandos bsicos de controle do PORTUGOL. Sero
introduzidos paralelamente os fluxogramas de CHAPIN criados por Ned Chapin a partir dos
Leia ( ) ;
,
Imprima

)
,
; (
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

25
trabalhos de Nassi & Shneiderman e o fluxograma tradicional, como formas alternativas de
descrio da estrutura dos comandos.

PORTUGOL
Algoritmo
Incio
<declaraes de variveis>;
<comandos>;
Fim.

DNS


TRADICIONAL







O diagrama tradicional uma forma padronizada para representar os passos lgicos de
um determinado processamento.
Com o diagrama podemos definir uma seqncia de smbolos, com significado bem
definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um
processamento.
Blocos pr-definidos (teste, desvio, impresso);
Muita flexibilidade;
Descrio do raciocnio por meio de smbolos grficos.




INCIO
FIM
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

26

Problemas
Desenhos confusos e complexos;
Difcil manuteno (perigosa);
No utilizado na prtica;
Observaes:
1 - As declaraes tm o mesmo formato tanto para o PC, DNS e fluxograma , e
por isso no foram repetidas acima.
2 - Quando fazemos um programa, uma boa idia usar comentrios que ajudem a elucidar o
funcionamento do mesmo. Os comentrios devem vir entre /* */
Ex=
/* Um Primeiro Programa */. O compilador C desconsidera qualquer coisa que esteja
comeando com /* e terminando /*.

3.8. DOCUMENTAO
Alguns princpios bsicos abaixo mencionados, devero ser usados desde a criao do
primeiro algoritmo:
Ao criar as constantes e variveis, utilizar nomes significativos e comentar, se necessrio
for;
Utilizar identao (trs espaos como sugesto), para mostrar a estrutura lgica e
seqncia de comandos, quando usando o nosso pseudo-cdigo. Com o DNS no
preciso;
Utilizar, opcionalmente, um dicionrio de dados que especifique formalmente o contedo
de cada constante e varivel de todo algoritmo ou programa;
Utilizar parnteses para evitar ambigidade nas expresses;







Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

27
CAPTULO 4 - ESTRUTURAS BSICAS DE CONTROLE

No captulo anterior, foram apresentados exemplos das trs estruturas necessrias para
representao da soluo de qualquer algoritmo: a seqncia, a seleo e a repetio. Em se
tratando de algoritmo para computadores, as trs tambm formam a base das estruturas de
controle de execuo. Vejamos como formalizaremos a representao e o uso dessas estruturas
no nosso pseudo-cdigo e nos Diagramas de Nassi-Schneiderman.

4.1. SEQNCIA
Grupo de comandos em que so executados um aps o outro.

Nosso Pseudo-cdigo

Incio
comando1;
comando2;
.
.
comandoN;
Fim.

DNS


4.2. SELEO
Tambm chamada de estrutura de deciso ou de processamento condicional, a estrutura
de seleo utilizada quando a execuo de um comando (ou uma seqncia de comandos)
depende de um teste anterior (uma ou mais comparaes). A seleo pode ser simples ou
composta.

4.2.1. SELEO SIMPLES
Quando a execuo de um comando (ou de uma seqncia de comandos) depender de uma
condio verdadeira, e no h comandos a executar se a condio for falsa.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

28
Nosso Pseudo-cdigo
Se <condio> Ento
(comandos);
Fim Se;

DNS

onde a CONDIO poder ser tambm uma expresso lgica.
Exemplo1: leia um nmero inteiro e o imprima se ele for diferente de 0 (ZERO)
Exemplo2:
Se (a<5) Ento
a=5;
Fim Se;

4.2.2. SELEO COMPOSTA
Quando se executa um comando (ou seqncia de comando) se uma condio
verdadeira, e se executa um outro comando (ou seqncia de comandos) se a condio falsa.
Nosso Pseudo-Cdigo
Se <condio> Ento
(Comandos);
Seno
(comandos);
Fim Se;
DNS


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

29
4.2.3. ANINHAMENTO DE SELEES
A estrutura de Seleo permite o aninhamento, ou seja, o comando a ser executado dentro
de uma seleo (por exemplo, no "Seno") pode ser uma outra seleo. Outro aninhamento
poder ocorrer tambm com esta ltima seleo e assim por diante. Nos casos de vrios
aninhamentos subseqentes, uma boa identao ser fundamental para o entendimento de
algoritmo quando utilizando pseudo-cdigo.
Nosso Pseudo-Cdigo

Incio
-
Se CONDIO_A Ento {V}
comando1;
Seno {F}
Se CONDIO_B Ento
comando2;
Seno
comando3;
Fim Se;
Fim se;
-
-
Fim.

DNS

obs: o comando se equivalente ao if na linguagem c.
4.3. ESTRUTURAS DE REPETIO - LAOS(LOOPS)
4.3.1. LAO ENQUANTO(WHILE)
A estrutura de repetio (enquanto) utilizada quando um conjunto de comandos deve ser
executado repetidamente, enquanto uma determinada condio (expresso lgica) permanecer
verdadeira. Dependendo do resultado do teste da condio, o conjunto de comandos poder no
ser executado nem uma vez (se for falsa no primeiro teste), ou ser executado vrias vezes
(enquanto for verdadeira). Chama-se a isso um lao ("loop").




Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

30
Da mesma forma que a estrutura de seleo, ela permite o aninhamento de repeties, ou
seja, a existncia de uma estrutura de repetio dentro de outra. Podero haver tambm
aninhamentos de selees dentro de estruturas repetitivas e vice-versa. Dois cuidados ao criar
estruturas de repetio (enquanto):
1. Inicializar a(s) varivel(eis) que controla(m) o lao antes do incio do lao;
2. Inicializar a(s) varivel(eis) que controla(m) o lao dentro do lao (seja por leitura ou por
atribuio), pois se isto no for feito cairemos no que chamamos um lao infinito e de l o
nosso programa no sair.
Nosso Pseudo-Cdigo
Enquanto <Condio> Faa
(Comandos);
Fim Enquanto;

DNS

Exemplo:
Incio
Inteiro x;
x = 2;
Enquanto (x<10) Faa
Imprima (x);
x=x+1;
Fim Enquanto;
Imprima(x);
Fim.

Exerccio: faa um trecho de algoritmo para ler e imprimir o nome e a idade de vrias pessoas, at
encontrar algum com 65 anos, quando dever ser impresso, alm do nome, uma mensagem
informando o fato.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

31
4.3.2. CONTROLADOS POR CONTADOR
Uma varivel fornecida com o n. de vezes que ser repetido o lao.
Algoritmo Abono_por_Contador
Incio
Leia (Numero_de_Funcionrios);
Contador = 0;
Enquanto Contador < Nmero_de_Funcionrios Faa
Leia (Nome);
Contador = Contador+1;
Fim Enquanto;
Fim.

4.3.3. REPETIO COM TESTE NO FINAL
Quando se deseja executar a srie de comandos uma vez pelo menos, pode se fazer o
teste no final. Essa variao tem um uso bastante efetivo na validao de dados de entrada, pelo
teclado, mas pode ser sempre substituda por um enquanto. Uma vantagem do repita que no
preciso inicializar a(s) varivel(eis) de controle do lao antes de entrar no mesmo. Deve-se,
contudo, ter o cuidado de modific-la(s) dentro do lao para que no caiamos em um lao infinito.
Executa uma instruo e faz um teste lgico. Dependendo da resposta, fica repetindo o processo
at o teste lgico dar Verdadeiro.
Nosso Pseudo-Cdigo
repita
C1;
C2;
.
.
Cn;
at <condio>;

DNS
C1
C2
.
.
Cn
<condio>
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

32
Significado deste comando:
Os comandos C1, C2,....,Cn so executados pelo menos uma vez. Quando a condio
encontrada, ela testada, se for verdadeira o comando seguinte ser executado, se for falsa, os
comandos C1, C2,...,Cn so reexecutados at que a condio se torne verdadeira.
O comando repita-at equivalente ao comando enquanto, conforme ser mostrado no
exemplo abaixo.
- Repita at
Incio
Inteiro x;
X = 2;
Repita
Imprima(x);
X = x+1;
At (x>=10);
Imprima(x);
Fim.
- Enquanto (while)
Incio
Inteiro: x;
x2;
Enquanto x<10 faa
Imprima (x);
xx+1;
Fim Enquanto;
Imprima (x);
Fim.
Observa-se que a utilizao de um comando repita no lugar de um comando enquanto
corresponde a utilizar como <condio> para o repita a negao da <condio> do enquanto.
Numa estrutura Enquanto, os comandos so executados 0 ou mais vezes. Numa estrutura
Repita, os comandos so executados 1 ou mais vezes.

4.4. ESCAPE DO LAO-Abandone(exit)
Comando Abandone: Fora uma sada de um lao de repetio.
Nosso Pseudo-Cdigo
abandone

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

33
CHAPIN



Exemplo:
Enquanto (a>b) faa
Leia(a,b);
Imprima(a,b);
Se b==0
Ento abandone;
Seno a=a/b;
Fim Enquanto;

O comando abandone s tem sentido dentro de um comando de repetio (enquanto, repita,
para). Alm disso, estar sempre associado ao teste de uma condio com comando se.
Significado do comando abandone: quando o abandone encontrado, o prximo
comando a ser executado o primeiro comando logo aps o fim do comando de repetio
mais interno onde aparece o abandone.

4.5. Sinalizador ('Flags')
O sinalizador ou 'flag' um valor que, quando lido, sinaliza a sada de um lao, o fim de um
programa, o fim de uma lista de dados, ou o fim de um arquivo. Para identific-lo iremos defini-lo
como uma constante nos nossos algoritmos.

Exemplo: faa um trecho de algoritmo utilizando o DNS que leia e imprima uma lista de nmeros
inteiros terminada pelo nmero 999.
{Declaraes:}
Constante FLAG = 999;
Inteiro : NUM;





ABANDONE
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

34
4.6. REGRAS PRTICAS PARA A CONSTRUO DE ALGORITMOS LEGVEIS

1- Procure incorporar comentrios no algoritmo, pelo menos para descrever o significado das
variveis utilizadas.

Exemplo: /* Clculo da mdia */

2- Escolha nomes de variveis que sejam significativos, isto , que traduzam o tipo de
informao a ser armazenada na varivel.

Exemplo: NOTA
MATRCULA

3- Procure alinhar os comandos de acordo com o nvel a que pertenam, isto , destaque a
estrutura na qual esto contidos.

Exemplo:
B=A*C;
Enquanto P==1 Faa
P=P+1;
F=X+NOTA/2;
Fim Enquanto;
Imprima (F,NOTA);
.
.4)- Tenha em mente que seus algoritmos devero ser lidos e entendidos por outras pessoas ( e
por voc mesmo) de tal forma que possam ser corrigidos, receber manuteno e serem
modificados.

5) Escreva comentrios no momento em que estiver escrevendo o algoritmo. Um algoritmo no
documentado um dos piores erros que um programador pode cometer.

6) Use comentrios no incio para explicar o que o algoritmo faz. Alguns comentrios seriam;
- Uma descrio do que faz o algoritmo
- Como utiliz-lo
- Explicao do significado das variveis mais importantes
- Estrutura de dados utilizadas
- Os nomes de quaisquer mtodos especiais utilizados
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

35
- Autor
- Data da escrita

7) Utilize espaos em branco para melhorar a legibilidade. Espaos em branco, inclusive linhas
em branco so valiosssimos para melhorar a aparncia de um algoritmo.

8) Escolha nomes representativos para suas variveis.

9) Um comando por linha suficiente
- O algoritmo fica mais legvel
- O algoritmo fica mais fcil de ser depurado.
-
Exemplo:
A=14,2;I=1;enquanto I<10 faa X=X+1;K=I*K;I=I+1; fim enquanto
O mesmo exemplo com cada comando em uma linha

A=14,2;
I=1;
Enquanto I<10 Faa
X=X+1;
K=I*K;
I=I+1;
Fim Enquanto;

10) Utilize parnteses para aumentar a legibilidade e prevenir-se contra erros.

Exemplos:
Com poucos parnteses Com parnteses extras
A*B*C/(C*D*E) (A*B*C)/(C*D*E)
A**B**C (A**B)**C
A+B<C (A+B)<C

11) Toda vez que uma modificao for feita no algoritmo, os comentrios devem ser alterados




Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

36

4.7. UMA REFLEXO ANTES DE RESOLVER DE PROBLEMAS
Passo1 Leia cuidadosamente a especificao do problema at o final
Passo 2- Caso no tenha entendido o problema, pergunte.
Passo 3- levantar e analisar todas as sadas exigidas na especificao do problema (impresses)
Passo 4- levantar e analisar todas as entradas citadas na especificao do problema(leituras)
Passo 5- Verificar se necessrio gerar valores internamente ao algoritmo e levantar as variveis
necessrias e os valores iniciais de cada uma;
Passo 6- Levantar e analisar todas as transformaes necessrias para, dadas as entradas e
valores gerados internamente, produzir as sadas especificadas;
Passo 7- Testar cada passo do algoritmo
Passo 8 Avaliao geral, elaborando o algoritmo e revendo comentrios
























Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

37
FACULDADES I NTEGRADAS ANGLO-AMERI CANO
TRABALHO DE ALGORITMOS ENTREGA: Dia da TV1
PROFESSORA: SALETE BUFFONI

1-Como ocorre o armazenamento de uma informao na memria de um computador?

2-Caracterize as geraes de computadores quanto a:
- tamanho;
- velocidade de operao;
- custo;
- consumo de energia;

3- Caracterize os sistemas de computadores quanto a sua arquitetura bsica de Hardware e
Software.

4- Cite e comente 3 dispositivos de entrada de dados

5- Cite e comente 3 dispositivos de sada de dados.

6- Comente os tipos de memrias existentes no ambiente de informtica.

7- Atravs de um desenho, identifique as principais partes de um disquete e cite alguns
cuidados em seu manuseio.

8- Atravs de um DIAGRAMA DE BLOCOS, descreva um computador em termos de partes
fundamentais.

9- Conceitue as linguagens quanto ao seu nvel.






Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

38

EXERCCIOS INTRODUTRIOS - I

1) O resultado da expresso 3 + 6 * 13 = 117 ou 81 ?

2) Sendo A,B,C e D variveis do tipo inteiro, cujos contedos so: A=3, B=4, C=13 e D=4. Quais
os valores fornecidos por cada uma das expresses aritmticas abaixo?

a) 100*(B/A)+C d) (C+D)/C**2

b) A%5 - D/2 e) B%(A+1)

c) trunca(0,3+5)*2 f) sinal(D-C)

3) Qual a primeira operao executada em cada um dos comandos abaixo?

a) X+Y-Z; b)A+B/C**2;

c) JOO+JOS/JOEL; d) X+Y+B**2+R*3

4) Avalie a seguinte expresso aritmtica: 6+4/2*3. O resultado desta expresso 15; 12; 24?

5) Qual o resultado das seguintes expresses

a. 1 + 7 * 2 ** 2 - 1 = 28
b. 3 * (1 - 2) + 4 * 2 = 5

6) Avalie as expresses abaixo sabendo que X = 2 e Y = 3

a. 3 * y - x ** 2 * (7 - y ** 2)
b. 2 * x * (3 - y) / (x ** 2 - y )

7) Identifique as entradas e sadas das expresses abaixo. Escreva-as em forma computacional
a. b.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

39
8) Quais valores sero impressos aps a execuo do seguinte trecho de algoritmo

I=0;
Enquanto I<20 Faa
Imprima (I,I**2);
I=I+1;
Fim Enquanto;
Imprima (I=,I);
Imprima (UFA! CHEGUEI AQUI); /*CUIDADO*/

9) Dado o algoritmo abaixo, que calcula o volume de uma esfera de raio R:

Incio
Real VOLUME, PI, R;
Constante PI = 3,1416;
R=0;
Enquanto R<= 6 Faa
VOLUME=4/3*PI*(R**3);
Imprima (R,VOLUME);
R=R+2;
Fim Enquanto;
Fim.

Completar os demais valores que sero impressos

R VOLUME DA ESFERA
0 0
2 33,51


10) Identifique o tipo de cada uma das constantes abaixo:
a) 21
b) "BOLA"
c) "VERDADEIRO"
d) 0,21x10
2

e) falso

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

40
11) Sendo A, B, X e Y variveis do tipo numrico, quais os resultados fornecidos por cada uma
das seguintes funes, onde A= 10, B=3, X=2 e Y=1,2
a) A/B e A%B

b) X/2 e X%2

c) SINAL(X+Y-A), SINAL(A-B**2+Y) e SINAL(A-4*X)

d) ARREDONDA(A-X), ARREDONDA(B+Y) e ARREDONDA(Y-X)

e) TRUNCA(X-3,2) e TRUNCA(A/3+1)

f) ABS(A-B**3) e ABS(A-B)

d) (B+Y)/(X+1)













Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

41
EXERCCIOS INTRODUTRIOS - II
1- Sendo P, Q, R e S variveis do tipo numrico, cujos contedos so iguais a 2, 3, 12 e 4.5,
respectivamente, quais os valores fornecidos por cada uma das expresses aritmticas abaixo?
a) 100*Q/P+R
b) P*R%5 -Q/2
c) SINAL(S-R)
d) sqrt(R+P**2)+ARREDONDA(S)
e) S%(P+1)-Q*R
f)1+sqrt(p**3+2*R)-TRUNCA(S-1)
g)1+(R+S)/(Q**2)*SINAL(2*P*Q-R)
2- Dadas as variveis numricas X, Y e Z e as variveis literais NOME e COR, observar os
resultados obtidos para as relaes a partir dos valores atribudos a estas variveis


VARIVEIS

RELAES

X Y Z COR NOME X**2+Y>Z
COR=="AZUL"
NOME<>"JOS"
1 2 5 "AZUL" "PAULO"
4 3 1 "VERDE" "JOS"
1 1 2 "BRANCO" "PEDRO"
1 2 1 "AZUL" "JOS"




Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

42
3- Sendo
Real SOMA, NUM, X;
Caracter NOME, COR,DIA;
Lgico TESTE,COD,TUDO;
Assinalar os comandos de atribuio considerados invlidos:
a)NOME = 5; f)X = X+1;
b) SOMA = NUM+2*X; g) NUM = "*ABC*"
c) TESTE = COD ou X**2 != SOMA h) SOMA+2 = X**2;
e)TUDO = SOMA i) X = NOME



















Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

43
Reviso de Avaliao de Expresses e Exerccios
ATRIBUIO E EXPRESSES

As variveis podem ter seus valores alterados durante a execuo do algoritmo, isto feito
atravs de uma operao chamada atribuio.
Em uma atribuio temos dois elementos fundamentais: o primeiro o elemento para o
qual estaremos realizando a atribuio e o segundo elemento o que nos fornece o valor
a ser atribudo. O primeiro elemento sempre uma varivel e o segundo uma expresso
O tipo da varivel deve ser respeitado durante uma atribuio, ou seja, a varivel deve ser
compatvel com o valor a ser atribudo. Inicialmente o valor a ser atribudo varivel pode
vir de outra varivel ou de uma expresso.
Ex.:
X = 0 ;
X = Y;
x = 1 + Y;

EXPRESSES
Quando juntamos vrios operadores, operandos e funes temos uma expresso.
As expresses so classificadas de acordo com o tipo de valor resultante de sua
avaliao.
Tambm podem ser de 3 tipos: aritmticas, lgicas e literais

Expresso Aritmtica
O resultado de sua avaliao um valor numrico
Expresso aritmtica:
uma constante numrica.
Ex: 4
Uma varivel numrica.
Ex: x*y*z
Uma funo numrica.
Ex: cos(a)
Uma combinao das anteriores atravs dos op. Aritmticos.
Ex: 4 + x*y*z * cos(a)


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

44
Prioridade das operaes (ou precedncia de operadores)
Avalie a seguinte expresso aritmtica:
6+4/2*3 Qual o resultado desta expresso? 15; 12; 24;

Desta forma necessrio estabelecer uma prioridade para avaliar as expresses.
Ordem de prioridade:
1
o
. efetuar as funes
2
o
. efetuar as potncias e razes
3
o
. efetuar as multiplicaes e divises
4
o
. efetuar as adies e subtraes
Operaes com mesma prioridade so executadas da esquerda para a direita. Para
modificar a ordem de prioridades da pr-definida, utilizam-se parnteses. As operaes
entre parnteses devem ser avaliadas em 1
o
. lugar. No exemplo anterior, para obter o
resultado 15 a expresso deveria ser: (6 + 4) / 2 * 3 e para obter o resultado 24: (6 + 4 / 2)
* 3

Exerccios:
1- Calcule
a) sen(180) b)abs(-1) c)abs(2) d)sqrt(4) e)4%2 f) 5%2
g) 3%2 h) 7%7 i)6%3 j)4 / 2 = 2 k)5/2 l)6/3
2- Qual o resultado das seguintes expresses:
a. 1 + 7 * 2 ** 2 - 1
b. 3 * (1 - 2) + 4 * 2

3- Avalie as expresses abaixo sabendo que X = 2 e Y = 3
a. 3 * y - x ** 2 * (7 - y ** 2)
b. 2 * x * (3 - y) / (x ** 2 - y )








Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

45
EXERCCIOS COMPLEMENTARES - I

1. Faa um algoritmo que leia quatro idades e calcule a mdia das mesmas

2. Altere o algoritmo de media de idade para ler tambm os nomes e ao final mostrar a mensagem
com os trs nomes mais a mdia de suas idades.

3. Construa um algoritmo que calcule a mdia do TV1 da turma de lgica de programao.

4. Faa um algoritmo que faa a soma dos nmeros inteiros de 1 a 18

5. Faa um programa que leia 4 nmeros inteiros e apresente:
Mdia dos mpares
Maior nmero par
Diferena do maior menos o menor nmero

6. Faa um programa que leia o nome e a idade de 3 pessoas e apresente:
Maior idade
Nome da pessoa mais nova
Mdia das idades

7. Faa um programa que leia a medida do lado de um quadrado e calcule e apresente a rea e o
permetro desta figura. Obs: Permetro a soma de todos os lados de uma figura geomtrica.

8. Faa um programa que leia o raio de uma circunferncia e calcule e apresente sua a rea e
permetro.

9. Faa um programa que leia o valor dos lados de um tringulo retngulo e calcule e apresente a
sua rea.
rea = (base*altura)/2






Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

46
EXERCCIOS COMPLEMENTARES - II
1- Identificar o tipo de cada uma das constantes abaixo:
a) " Barbara" b) 2 c) 2.33

2) O que est errado no trecho de algoritmo abaixo
Incio
Inteiro N,PAR,X;
Leia(N);
xN % 2;
Se X==0 Ento
PAR=verdadeiro;
Seno PAR=falso;
Fim Se;
Fim.
3) Uma pesquisa sobre algumas caractersticas fsicas da populao de uma determinada regio
coletou os seguintes dados referentes a cada habitante para serem analisados
Sexo (masculino, feminino)
Cabelos(Louros, preto, castanho, ruivo)
Cor dos Olhos (Azul, verde, castanho)
Idade em anos
Para cada habitante foi digitada uma linha com esses dados e a ltima linha, que no corresponde
a ningum conter o valor de idade igual a -1. Fazer um algoritmo que determine e imprima:
a) A maior idade dos habitantes
b) A porcentagem de indivduos do sexo feminino cuja idade est entre 18 e 35 anos inclusive e
que tenham olhos verdes e cabelos louros

4) Faa um algoritmo que calcule a soma dos nmeros pares de 100 at 200

5) Num frigorfico existem 90 bois. Cada boi traz preso em seu pescoo um carto contando seu
nmero de identificao e seu peso. Fazer um algoritmo que escreva o nmero e peso do boi
mais gordo e do boi mais magro.

6) Faa um algoritmo que calcule a soma dos nmeros inteiros de 1 at 18

7) Fazer um algoritmo que: Leia um nmero indeterminado de linhas contendo cada uma a idade
de um indivduo . A ltima linha que no entrar nos clculos contm o valor da idade igual a zero.
Calcule e imprima a idade mdia deste grupo de indivduos.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

47

EXERCCIOS COMPLEMENTARES - III

1) Faa um algoritmo que leia um nmero indeterminado de nmeros, o algoritmo encerra
quando for digitado o nmero 99. O algoritmo deve fornecer ao final o percentual de nmeros
pares e mpares digitados.

2) Faa um algoritmo que leia um nmero e escreva a mensagem " primo" ou "no primo".
Nmero primo: Nro divisvel por 1 e por ele prprio.

3) Faa um algoritmo que leia 2 nmeros inteiros de cada vez. A leitura deve ser feita enquanto
no for digitado o nmero 0. Os nmeros lidos devero ser apenas nmeros mpares e,
quando forem consecutivos devero ser multiplicados. Ao finalizar o algoritmo dever escrever
a soma das multiplicaes.

4) Faa um algoritmo que leia um valor e some 10 valores pares a partir do valor lido,
escrevendo no final o resultado obtido. OBS: o valor lido pode ser mpar.

5) Faa um algoritmo que fique lendo valores at encontrar o valor zero, com cada valor lido faa
a soma de 10 valores subseqentes e mostre a soma e a mdia desses valores.

6) Fazer um algoritmo que fique lendo valores, um de cada vez e faa o seguinte:
se for 0 (zero) escreva "desligue tudo" e termine o algoritmo;
se for 1 (um) escreva "ligar TV";
se for 2 (dois) escreva "ligar rdio";
se for 3 (trs) escreva "ligar a luz".
Se for outro valor escreva "tente novamente"
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

48
7) Escrever um algoritmo que l 10 valores, um de cada vez, e conta quantos deles esto no
intervalo fechado entre 10 e 20 e quantos deles esto fora do intervalo, no final escreva estes
resultados.
8) Escrever um algoritmo que l o nro de matrcula dos vendedores de uma empresa, seu salrio
fixo e o total de vendas de cada vendedor. Cada vendedor recebe um salrio fixo, mais uma
comisso proporcional as vendas por ele efetuadas. A comisso de 3 % sobre o total de
vendas at 1.000 e 5 % sobre o que ultrapassa este valor. Escrever o nro do vendedor, o total
de suas vendas, seu salrio fixo e seu salrio total. OBS: A leitura deve ser encerrada quando
ler a matrcula do vendedor nro 99.

9) Escreva os 20 primeiros termos da srie: 1,3,9,27,...

10) Faa um algoritmo que leia vrios valores, um de cada vez e mostre quantos destes nros
foram negativos, quantos positivos, bem como a soma dos nros positivos e a soma dos nros
negativos. O valor lido 0 (zero) significa fim de algoritmo.

11) Leia o nome e altura, um de cada vez, para as moas inscritas em um concurso de beleza. Ao
final do algoritmo escreva tambm as duas maiores alturas e nome das moas que a
possuem. O algoritmo termina quando o nome da moa lido for FIM.

12) Tem-se um conjunto de dados contendo altura e sexo de 50 pessoas, fazer um algoritmo que
calcule e escreva:
a) a maior e a menor altura do grupo
b) mdia de altura das mulheres
c) o nro de homens

13) Uma pesquisa sobre algumas caractersticas fsicas da populao coletou os seguintes dados:
sexo (masc, fem), cor dos olhos (azuis, verdes, castanhos); cor dos cabelos (louros,
castanhos, pretos); e idade em anos. Para cada habitante, foi digitada uma linha com esses
dados e a ltima linha, que no corresponde a ningum, conter o valor de idade igual a -1.
Fazer um algoritmo que determine e escreva :
a) a maior idade dos habitantes
b) percentual de indivduos do sexo feminino, cuja idade est entre 18 e 30 anos inclusive, e que
tenham olhos verdes e cabelos louros.
c) percentual de indivduos do sexo masculino
d) somatrio das idades
e) mdia de idade da populao
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

49

14) Fazer um algoritmo que calcula o preo vista e o preo no carto de crdito de uma
mercadoria. Sendo que sobre o preo vista dado um desconto de (5%) e para o
pagamento a prazo embutido acrscimo de 30% sobre o preo da mercadoria.






EXERCCIOS PARA RESOLUO EM SALA DE AULA

1) Construir um algoritmo para calcular as razes de uma equao do segundo grau sendo que
os valores A, B e C so lidos a partir de um arquivo de entrada
2) Sendo
N
1
4
1
3
1
2
1
1 H + + + + + = L , fazer um algoritmo para gerar o nmero H. O nmero N
lido em carto.

3) Fazer um algoritmo que:
- leia um nmero real x de um carto
- determine e imprima o seguinte somatrio
...
! 3
X
! 2
X
! 1
X
X S + + = Usando os 20 primeiros termos da srie

4) O valor aproximado de pode ser calculado usando-se a srie
K
3 3 3 3
9
1
7
1
5
1
3
1
1 S + + =
3
32 * S =

5) Faa um algoritmo para um programa que calcule e imprima o valor de usando os 51
primeiros termos da srie acima

6) Fazer um algoritmo para calcular o valor de S dado por :
1
N
2
1 N
2 N
3
1 N
2
N
1
S +

+ +

+ = L
Sendo N lido a partir de um arquivo de entrada
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

50

7) Implementar um algoritmo capaz de encontrar o maior dentre 3 nmeros inteiros quaisquer.
Suponha todos serem distintos.

8) Implementar um algoritmo que leia 3 nmeros quaisquer e os imprima em ordem crescente.





CAPTULO 5- ALGORTMOS BASEADOS EM ESTRUTURAS DE DADOS HOMOGNEAS:
VETORES E MATRIZES

Antes de tratarmos das estruturas de dados homogneas, vejamos algumas novas
estruturas de controle, que faremos uso quando trabalharmos com vetores e matrizes.

5.1- REPETIO COM VARIVEL DE CONTROLE PARA (for)
Repete uma instruo um pr-determinado nmero de vezes.

para v de i at l passo p faa

onde:
v: varivel de controle.
i: valor inicial de v.
l: valor final de v.
p: valor do incremento de v.

sintaxe do comando:
Nosso Pseudo-Cdigo
Para v de i at l passo p Faa
C1;
C2;
.
.
Cn;
Fim Para;

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

51
DNS
v de i at l passo p
C1
C2
.
.
Cn



Significado do comando: v, i, l, p so variveis quaisquer e que, de acordo com as regras da
programao estruturada, no devem ser modificadas nos comandos C1, C2, . . ., Cn. O
comando para , na verdade, o comando enquanto utilizando-se uma varivel de controle, escrito
numa notao compactada. Neste caso existir sempre uma inicializao da varivel de controle,
um teste para verificar se a varivel atingiu o limite e um acrscimo na varivel.

Exemplo para comparao entre Enquanto e Para
Incio
Inteiro x;
X = 1 /*inicializao*/
Enquanto x<=10 Faa /*teste*/
Leia(v[x]);
x = x+1; {acrscimo}
Fim Enquanto;
Fim.

equivale a:

Incio
Inteiro x;
Para x de 1 at 10 Passo 1 Faa
Leia(v[x]);
Fim Para
Fim.

Nota:
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

52
1) Assim como no comando enquanto, se o valor inicial (i) j for superior ao limite (l), os
comandos C1, C2,...,Cn no sero executados.
2) Toda vez que o fim para encontrado, a varivel de controle (i) incrementada pelo passo p
e o teste (v<=l) feito.
3) O valor da varivel de controle torna-se indefinido assim que executado o comando para.
Neste aspecto o comando para diferente do comando enquanto. Por exemplo, com o trecho
de algoritmo seguinte



Para I de 1 at 10 Passo 1 Faa
Imprima (I);
Fim Para;
Imprima (I);
sero impressos dentro do comando para: 1,2,3,4,5,6,7,8,9,10 e fora do comando para ser
impresso um valor indefinido
Quando o passo (p) for igual a 1, no ser necessrio escrever esta especificao no comando.
No exemplo acima teramos:

Para I de 1 at 10 Faa
Imprima (I);
Fim Para;

5.2. SELEO DENTRE AS MLTIPLAS ALTERNATIVAS-CASO (CASE)
Em nossos algoritmos, quando uma varivel ou expresso aritmtica puder assumir vrios
valores diferentes, e a execuo do programa for diferente dependendo do valor obtido ou
assumido por esta varivel ou expresso, poderemos utilizar a estrutura que se segue, ao invs
de vrios "Se" aninhados.
Nosso Pseudo-Cdigo
Incio
Conforme
Caso IDENTIFICADOR = Valor_1
comando1;
Caso IDENTIFICADOR = valor_2
comando2;
Caso IDENTIFICADOR = valor_3
comando3;
-
Seno
comandoN;
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

53
Fim Conforme;
-
-
Fim.

DNS

Onde: - valor_1, valor_2, etc, pode ser um nico valor ou uma faixa de valores discretos. Os testes
de cada caso so feitos em seqncia, de cima para baixo em PC e da esquerda para a direita no
DNS.
1. Aps obter-se um valor verdadeiro para um dos casos, cessam os testes dos casos e o
prximo comando a ser executado o que vem a seguir do Fim Conforme.
Esta estrutura tambm pode ser utilizada testando-se as condies ao invs de valores, para
determinar qual o comando a ser executado aps o teste de cada condio (Ver exemplo b). Em
programao, uma aplicao sempre interessante desta estrutura no tratamento de Menus de
Opes, quando para cada seleo feita pelo usurio do programa, haver uma seqncia de
aes diferentes a ser executada. Outra aplicao na impresso de diferentes mensagens de
erro.
Exemplos:
a) Incio {trecho de algoritmo para tratamento de trs possveis erros conhecidos na execuo de
um programa}
Conforme
Caso ERRO = 1
Imprima (MSG1);
Caso ERRO = 2
Imprima (MSG2);
Caso ERRO = 3
Imprima (MSG3);
Seno
Imprima (ERRO NO CONHECIDO);
Fim Conforme;
b) Incio {trecho de algoritmo para impresso da situao de um aluno a partir da MDIA obtida ao
fim do curso}

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

54
Conforme
Caso MDIA > 7.0
Imprima (APROVADO COM DIPLOMA);
Caso MDIA > = 5.0
Imprima (APROVADO COM CERTIFICADO);
Seno
Imprima (REPROVADO);
Fim Conforme;


5.3. VETORES
Um vetor ou agregado homogneo, ou ainda varivel composta homognea, uma estrutura
de dados que contm elementos de mesmo tipo, que podem ser referenciados como um todo. Ao
declararmos um vetor, estamos reservando na memria principal do computador uma srie de
clulas para uso da varivel daquele tipo. O nome do vetor aponta para a base das clulas e o
seu incio d a posio relativa do elemento referenciado ao primeiro (base).
Nem sempre os tipos bsicos (inteiro, real, caracter e lgico) so suficientes para exprimir
estruturas de dados em algoritmos. Por exemplo consideremos um problema em que um
professor com 5 alunos deseja imprimir a nota e a mdia de seus alunos. Nesse caso seria
necessrio se considerar cinco variveis reais para contar as notas dos cinco alunos. Imagine que
o nmero de alunos da turma seja 80. S a declarao destas variveis tornaria impraticvel a
redao do algoritmo. Da a necessidade de novos tipos serem criados. Um destes tipos, o vetor,
ser estudado.
Os vetores podem ser unidimensionais ou multi-dimensionais (matrizes). Um vetor
unidimensional, como uma lista de notas dos 50 alunos de uma turma, tem apenas um ndice. Se
existirem porm vrias turmas poderemos utilizar um vetor com dois ndices (o nmero da turma e
o nmero do aluno da turma). Abordaremos este assunto ainda neste captulo.

5.2. DECLARAO DE VETORES
tipo_da_varivel nome_da_varivel [li:lf];
li - Posio Inicial do Vetor
lf - Posio Final do Vetor
Quando o C v uma declarao como esta ele reserva um espao na memria
suficientemente grande para armazenar o nmero de clulas especificadas em tamanho. Por
exemplo, se declararmos:

float exemplo [20];
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

55
o C ir reservar 4x20=80 bytes. Estes bytes so reservados de maneira contgua. Na
linguagem C a numerao comea sempre em zero. Isto significa que, no exemplo acima, os
dados sero indexados de 0 a 19. Para acess-los vamos escrever:
exemplo[0]
exemplo[1]
.
.
exemplo[19]
Mas ningum o impede de escrever:
exemplo[30]
exemplo[103]
Por qu? Porque o C no verifica se o ndice que voc usou est dentro dos limites vlidos.
Este um cuidado que voc deve tomar. Se o programador no tiver ateno com os limites de
validade para os ndices ele corre o risco de ter variveis sobrescritas ou de ver o computador
travar. Bugs terrveis podem surgir. Vamos ver agora um exemplo de utilizao de vetores:

Exemplo:
Real Notas[1:80];

O nmero de elementos de um vetor dado por: lf-li+1

Isto significa que as posies do vetor so identificadas a partir de li, com incrementos unitrios,
at lf:

li li+1 .................... lf


Exemplo: Qual o nmero de elementos e o que representa a especificao e declarao abaixo?

Caracter Nome[5:9]

Soluo:
O vetor tem 9-5+1=5 elementos e pode ser representado como na Figura 5.1.

NOME

5 6 7 8 9
Figura 5.1 - Representao da estrutura de um vetor.

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

56
Cada elemento de um vetor tratado como se fosse uma varivel simples. Para referncia a um
elemento do vetor, utiliza-se o nome do vetor e a identificao do elemento (ndice) entre
colchetes. Por exemplo, se desejarmos atribuir o valor FMI ao elemento identificado pelo ndice
6 do vetor anterior, teremos:


NOME[6] FMI que produzir
FMI
5 6 7 8 9

Ex.: Algoritmo para ler as notas de 3 alunos e imprimir os nomes daqueles cujas notas forem
maior que a mdia.
Algoritmo Notas {Sem Vetor}
Incio
Caracter Nome1, Nome2, Nome3;
Leia(Nome1, Nota1);
Leia (Nome2, Nota2);
Leia (Nome3, Nota3);
Mdia = (Nota1+Nota2+Nota3)/3.0 ;
Se Nota1 > Mdia Ento
Imprima (Nome1);
Fim Se;
Se Nota2 > Mdia Ento
Imprima (Nome2);
Fim Se;
Se Nota3 > Mdia Ento
Imprima (Nome3);
Fim Se;
Fim.
Algoritmo Notas {Com Vetor}
Incio
Caracter Nome[0:2]
Real Nota[0:2];
Para I de 0 at 2 Faa
Leia (Nome[I], Nota[I]);
Fim Para;
/*Clculo da Mdia*/
Soma = 0.0 ;
Para I de 0 at 2 Faa
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

57
Soma = Soma + Nota [I] ;
Fim Para;
Mdia = Soma/3.0;
Para I de 0 at 2 Faa
Se Nota[I] > Mdia Ento
Imprima (Nome[I]);
Fim Se;
Fim Para;
Fim.



1- Para inicializar um vetor com valores diferentes, utilizamos um comando construtor
NOTA ={ 5.7, 9.5, 10.0, ..., 7.5}; que equivale a: NOTA [0] = 5.7, NOTA[2] =10.0;....etc.

1) Dado o vetor CRR de caracteres abaixo,
CRR
! U O T R E C A
0 1 2 3 4 5 6 7

Qual ser a sua configurao depois de executados os comandos:
Para I de 0 at 3 passo 1 Faa
AUX =CRR[I];
CRR[I]=CRR[6-I+1];
CRR[6-I+1] =AUX;
Fim Para;

2) Dados dois vetores R[9] e S[19], escreva um algoritmo que: Leia os vetores R e S e Gere o
vetor X correspondente unio dos vetores R e S.

Incio
inteiro R[0:9],S[0:19],X[0:29];
Inteiro I;
Leia (R , S);
Para I de 0 at 9 Passo 1 Faa
X[I] = R[I];
Fim Para
Para I de 0 at 19 Passo 1 Faa
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

58
X[I+10] = S[I];
Fim Para;
Imprima (X);
Fim.






a) Gere o vetor Y com os elementos comuns de R e S
Incio
inteiro R[0:9],Y[0:9],S[0:19],I,J;
leia (R,S);
Y = 0
para I de 0 at 9 faa
K = 1;
para J de 0 at 19 faa
se R[I] == S[J]
ento enquanto K<=I faa
se Y[K] != R[I];
ento se Y[K]==0;
ento Y[K] =R[I];
fim se;
seno abandone;
fim se;
K =K+1;
fim enquanto;
fim se;
se Y[K]==R[I] ento abandone;
fim se;
fim para;
fim para;
imprima (Y);
Fim.

3) Um armazm trabalha com 100 mercadorias diferentes identificadas pelos nmeros inteiros
de 1 a 100. O dono do armazm anota a quantidade de cada mercadoria vendida durante o
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

59
ms. Ele tem uma tabela que indica para cada mercadoria o preo de venda. Escreva o
algoritmo para calcular o faturamento mensal de armazm, isto :

( )

=
=
100
1 i
I I
PREO * QUANTIDADE O FATURAMENT

A tabela de preo e quantidade so fornecidas em dois conjuntos, sendo que um conjunto contm
a quantidade vendida e o outro o preo de cada mercadoria.




Soluo
Incio
/* calcula o faturamento*/
real QUANTIDADE[0:99], PREO[0:99]/*Tabela de qtdes vendidas e Preo*/
real FATURAMENTO;
inteiro I; /* indexador*/
FATURAMENTO = 0;
leia (QUANTIDADE, PREO);
para I de 0 at 99 faa
FATURAMENTO = FATURAMENTO +QUANTIDADE[I]*PREO[I];
fim para;
imprima (FATURAMENTO);
Fim.


EXERCCIOS SOBRE VETORES

1. Faa um algoritmo que leia 18 nmeros inteiros e calcule e imprima a soma dos mesmos.

2. Faa um algoritmo que leia 18 nmeros inteiros e calcule e imprima a mdia dos mesmos

3. Faa um programa que leia 4 nmeros inteiros e apresente:
Mdia dos mpares
Maior nmero par
Diferena do maior menos o menor nmero
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

60

4. Faca um programa que leia um contedo com 100 nmeros inteiros e apresente a media dos
nmeros.

5. Faca um programa que leia 2 conjuntos com 50 nmeros inteiros e gere um terceiro conjunto
com a media dos elementos de A e B. Apresente o C.

6. Faca um programa que leia um conjunto A com 30 nmeros inteiros e que armazene em um
conjunto B do mesmo tipo os elementos de A multiplicados por 3. apresente o conjunto B.

7. Faa um programa que leia um conjunto A com 100 nmeros inteiros e que gere um conjunto B
com os elemento de A de acordo com a seguinte regra. Se o elemento de A for par, armazene em
B multiplicando por 5. Se o elemento de A for impar, armazene em B somando 5.

8. Faa um programa que leia dois conjuntos A e B com 20 inteiros e troque os valores de A com
B.

9. Faa um programa que leia dois conjuntos A e B com 15 nmeros inteiros e gere um conjunto
de 30 elementos, onde os 15 primeiros elementos so de A e o resto de B. Apresente o
conjunto C.
EXERCCIOS COMPLEMENTARES
1) Faa um programa que leia dois nmeros e apresente o maior deles.

2) Fazer um algoritmo que descubra o maior valor de um vetor de 20 posies

3) Faa um algoritmo que calcule o fatorial de um nmero.

4) Implementar um algoritmo que, a partir da rea de um quadrado lido, fornea, como sada, o
comprimento do lado de um quadrado com metade de sua rea.

5) Implementar um algoritmo que calcule o menor caminho a ser percorrido entre trs cidades,
passando somente uma vez por cada uma delas e comeando em qualquer uma. Como entrada
so fornecidas as distncias entre pares de cidades. Exemplo: Entre 3 cidades A, B e C devem
ser lidas as distncias entre AB, AC e BC ( claramente dispensvel ler as distncias BA, CA e
CB, j que so iguais a AB, AC e BC, respectivamente).
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

61
Dica : Para saber qual a distncia total percorrida em um caminho basta somar duas
distncias lidas. Exemplo : AB e BC atende resoluo do problema, j que inicia-se em A,
passando por B e chegando em C. A distncia do caminho AB, BC exatamente a mesma de
BC, AB (invertendo origem e destino), logo no necessrio somar a distncia do caminho
nas duas direes.

6) Construa um algoritmo que receba trs nmero e mostre o maior deles.




5.4 - MATRIZES
Definio: Conjunto de dados referenciados por um mesmo nome e que necessita de mais de
um ndice para ter seus elementos individualizados.
Quando temos mais de uma dimenso ento utilizamos as matrizes, que de diferente no
uso e na declarao s tem estas dimenses a mais explcitas :
A sintaxe a seguinte:
<Tipo bsico> identificador [l
i1
:l
f1
,l
i2
:l
s2
,......l
in
:l
fn
] ;
Esta especificao corresponde apenas criao do modelo, e, para efetivar a estrutura de
dados dentro do algoritmo, necessria uma declarao dando um nome varivel que segue o
modelo.
Ex:
Real MAT[1:3,1:4];
ou seja,
MAT
1 2 3 4




O nmero de dimenses da matriz ser igual ao nmero de vrgulas ( , ) da declarao
mais 1. O nmero de elementos igual ao produto do nmero de elementos de cada
dimenso: (l
f1
-l
i1
+1)*(l
f2
-l
i2
+1)*...*(l
fn
-l
in
+1)
Exerccios
1) Qual o nmero de elementos e dimenses das matrizes especificadas abaixo:
a) real MAT1[0:2,1:5];
1

2

3
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

62
b) Caracter MAT2[1:3, 2:4, 3:4]
Para referenciar um elemento da matriz so necessrios tantos ndices quantas so as dimenses
da matriz. Numa matriz bidimensional (duas dimenses) o primeiro ndice indica a linha e o
segundo, a coluna. No exemplo anterior, MAT1[1,3] se refere ao elemento da linha nmero 1
(segunda linha no caso) e coluna nmero 3 (terceira coluna)
MAT1
1 2 3 4 5

Tttttttt

Para matrizes com trs dimenses, repete-se a estrutura bidimensional tantas vezes quantos so
os elementos da terceira dimenso, numerando-as de acordo com os limites especificados na
declarao de tipo.

Exemplo1:O que ser impresso no algoritmo abaixo:

incio
inteiro M1[1:3,1:2];
inteiro: I, J;
M1[1,1] = 1;
M1[1,2] = 2;
M1[2,1] = 3;
M1[2,2] = 4;
M1[3,1] = 5;
M1[3,2] = 6;
Imprima(M1);
Para I de 1 at 2 Faa
Para J de 1 at 3 Faa
Imprima (M1[J,I]);
Fim Para;
Fim Para;
Fim.

Exemplo 2:

Dada a matriz MAT abaixo

0

1

2
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

63

MAT
1 2 3 4
O Q * I
E A E S
R E U T
A * * S




Qual ser a configurao de MAT depois de executado o algoritmo:
Incio
Inteiro I, J;
Caracter AUX;
Caracter M1[1:4,1:4];
Leia (MAT);
Para I de 1 at 4 Passo 1 Faa
Para J de I+1 at 4 Passo 1 Faa
AUX = MAT[I,J];
MAT[I,J] = MAT[J,I];
MAT[J,I] = AUX;
Fim Para;
Fim Para;
AUX=MAT[1,1];
MAT[1,1]=MAT[4,4];
MAT[4,4]= AUX;
AUX = MAT[2,2];
MAT[2,2] = MAT[3,3];
MAT[3,3] = AUX
Fim.
Notas:
1- Para percorrer a matriz linha por linha:
Fixar a linha
Variar a coluna
2- Para percorrer a matriz coluna por coluna
Fixar a coluna

1

2

3
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

64
Variar a linha
Inteiro exemplo[1:3,0:4];
1. I =1;
Enquanto I<=3 Faa
J=0;
Enquanto J<= 4 Faa
exemplo[I,J] =I+J;
J=J+1;
Fim Enquanto;
I=I+1;
Fim Enquanto;
2. J =0;
Enquanto J<=4 Faa
I=1;
Enquanto I<= 3 Faa
exemplo[I,J] =I+J;
I=I+1;
Fim Enquanto;
J=J+1;
Fim Enquanto;

ou ento

Para j de 0 at 4 Passo 1 Faa
Para I de 1 at 3 Passo 1 Faa
exemplo[I,J]I+J;
Fim Para;
Fim Para;

Como no caso de vetores, tambm para matrizes podemos ter comandos concisos para
inicializao, leitura e impresso.

Por exemplo, seja MAT definida por:

Inteiro MAT[1:10,1:8];

O comando:
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

65
Leia (MAT);

equivalente ao seguinte trecho:
Para i de 1 at 10 Passo 1 Faa
Para j de 1 at 8 Passo 1 Faa
leia (MAT[I,J];
Fim Para;
Fim Para;
Do mesmo modo, pode-se inicializar uma matriz com todos os seus elementos iguais a um
determinado valor escrevendo
MAT =0;
Exerccios Resolvidos

1) Dada uma matriz MAT de 4 x 5 elementos, faa um algoritmo para somar os elementos de cada
linha gerando o vetor SOMALINHA. Em seguida, somar os elementos do vetor SOMALINHA na
varivel TOTAL que deve ser impressa no final:
Exemplo

=
=
=
= =
4
1 I
i
5
1 j
ij i
SOMALINHA TOTAL
) 4 , 3 , 2 , 1 i ( MAT SOMALINHA

47 TOTAL
11
19
10
7
5 4 3 2 1
2 3 1 5 8
0 2 4 3 1
3 2 1 2 1

(
(
(
(


Soluo:
Incio
Real MAT[1:4, 1:5];
Real SOMALINHA[1:4];
Real: TOTAL;
Inteiro: I, J;
SOMALINHA=0;
TOTAL=0;
Leia (MAT);
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

66
Para I de 1 at 4 Faa
Para J de 1 at 5 Faa
SOMALINHA[I]= SOMALINHA[I]+MAT[I,J];
Fim Para;
TOTAL=TOTAL+SOMALINHA[I];
Fim Para;
Imprima (TOTAL=, TOTAL);
Fim.



2) Escreva um algoritmo que leia duas matrizes reais de dimenso 3 x 5, calcule e imprima a
soma das matrizes.
Incio
Real A[1:3,1:5], B[1:3,1:5], C[1:3,1:5];
Inteiro: I, J;
Leia (A,B);
I=1;
Enquanto I<=3 faa
J=1
Enquanto J<=5 faa
C[I,J] =A[I,J]+B[I,J];
J=J+1;
Fim Enquanto;
I=I+1;
Fim Enquanto;
Imprima ( C= ,C );
Fim.

3) Escreva um algoritmo para um programa que leia uma matriz quadrada 20 x 20 de elementos
reais, divida cada elemento de uma linha da matriz pelo elemento da diagonal principal desta linha
e imprima a matriz assim modificada.
Obs.
(

#
#
Elementos da diagonal principal ; M[1,1], M[2,2], M[3,3], M[4,4]
Incio
real M[1:20,1:20];
Inteiro: I, J;
Real: DIAGONAL;
Leia (M);
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

67
Para I de 1 at 20 Faa
DIAGONAL =M[I,I];
Para J de 1 at 20 Faa
M[I,J] =M[I,J]/DIAGONAL;
Fim Para;
Fim Para;
Imprima (M=,M);
Fim.




10. Dadas as declaraes abaixo, indicar as dimenses e o nmero de elementos:
a) a[0:2,1:3]
b) beta [1:2, 1:1, 5:6];
c) alfa[2:10];
11. dada a matriz
(
(
(
(

S * * A
T U E R
S E * E
I * Q O
MAT
Qual ser a configurao MAT depois de executado o algoritmo:
Incio
Inteiro: I, J;
Caracter: AUX;
Caracter MAT[1:4, 1:4];
Para I de 1 at 4 Faa
Para j de I+1 at 4 Faa
AUX=MAT[I,J];
MAT[I,J] =MAT[J,I];
MAT[J,I] =AUX
Fim Para;
Fim Para;
AUX =MAT[1,1];
MAT[1,1] =MAT[4,4];
MAT[4,4] =AUX;
AUX=MAT[2,2];
MAT[2,2] =MAT[3,3];
MAT[3,3] =AUX;
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

68
Fim.
Exerccio Proposto
1. A matriz dada a seguir contm, em cada linha, as cinco notas de provas obtidas por um aluno
durante o perodo letivo. O ndice das linhas corresponde ao nmero do aluno. Assim, por
exemplo, o aluno nmero 3 obteve as notas, 8,9 3,8 8,7 6,0 6,5
(
(
(
(
(
(

0 , 9 0 , 9 5 , 9 0 , 10 0 , 10
5 , 6 0 , 6 7 , 8 8 , 3 9 , 8
5 , 7 8 , 8 6 , 8 4 , 3 0 , 8
0 , 8 5 , 2 0 , 5 0 , 7 0 , 6
M M M M M
NOTAS

A turma contm 30 alunos
As notas so lidas a partir de um arquivo de entrada, sendo que cada linha da matriz contm as
cinco notas de provas obtidas por alunos.
Faa um algoritmo que calcule a mdia de cada aluno e a mdia geral da turma e que imprima o
resultado da seguinte forma.
M M M
XXX 60 , 7 2
XXX 63 , 7 1
TURMA / MDIA ALUNO / MDIA Aluno do N

















Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

69
CAPTULO 6 - MODULARIZAO DE ALGORITMOS


6.1. INTRODUO
Vimos que os algoritmos estruturados so desenvolvidos levando-se em conta algumas
premissas bsicas:
1) Desenvolver o algoritmo em diferentes fases de detalhamento crescente, do geral ao particular,
por refinamentos sucessivos (desenvolvimento "top-down" ou de cima para baixo).
2) Decompor o algoritmo em mdulos funcionais, organizados de preferncia em um sistema
hierrquico. Esses mdulos trazem vantagens adicionais para testes, pois testa-se um mdulo (ou
seja, uma parte do programa) de cada vez, independentemente; e para reutilizao de um mdulo
em outros algoritmos e programas, no futuro.
Passaremos agora a formalizar a utilizao de mdulos nos nossos algoritmos e verificar as
vantagens que os mesmos trazem para entendimento, construo, codificao, teste e reutilizao
dos mesmos. A grande maioria das linguagens de programao que so utilizadas, tem esta
facilidade, seja com o nome de Sub-rotinas, Subprogramas, Procedimentos, Funes, Mdulos,
Blocos, etc., sempre possvel subdividir-se um programa de modo a facilitar o entendimento,
permitir a reutilizao, evitando-se a repetio de blocos dos programas. No nosso pseudo-cdigo
definiremos dois tipos de mdulos: Os procedimentos ("procedures") e as funes ("functions").
Os procedimentos e funes so normalmente definidos antes de serem
utilizados(chamados) pelo programa principal. Em se tratando de algoritmos, entretanto,
poderemos definir nossos procedimentos e funes em qualquer parte do algoritmo principal ou
depois dele, adotando os formatos que se seguem e as normas de documentao.



6.2. PROCEDIMENTOS
Um procedimento uma seqncia de comandos precedida por uma seqncia de
declaraes que possui um identificador (nome do procedimento), uma lista de parmetros
opcional e pode realizar qualquer tipo de processamento que o programador ou analista deseje.
As variveis, os tipos e as constantes declaradas dentro de um procedimento s so acessveis
dentro dos comandos do procedimento. So chamadas variveis locais. Em um Algoritmo, as
variveis, tipos e constantes declaradas logo aps o identificador do algoritmo, so acessveis e
visveis dentro de qualquer procedimento que esteja sendo usado pelo algoritmo. So chamadas
variveis Globais. uma boa tcnica ao se construir um procedimento, no fazer uso no mesmo,
de variveis globais e referenciar e utilizar apenas as variveis locais e os parmetros do
procedimento. Isso far com que cada procedimento, ao ser modificado, no afete outras partes
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

70
do Algoritmo, e da mesma forma as variveis globais podero ser modificadas sem que haja
efeitos colaterais nos procedimentos.
Sintaxe de declarao
Procedimento < nome do Procedimento>
Incio
<declaraes>;
C1;
C2;
.
Cn;
Fim { nome do procedimento}.

Exemplo: O que ser impresso no algoritmo abaixo?
Incio
Inteiro: X,Y,A,B,C,D;
Procedimento troca;
Incio
Inteiro: AUX,X;
AUXX;
XY;
YAUX;
Fim troca.
A5;
B3;
Imprima(A, B);
XA;
YB;
Troca;
AX;
BY;
Imprima(A, B);
C4;
D9;
Imprima(C, D);
XC;
YD;
Troca;
CX;
DY;
Imprima(C, D);
Fim.

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

71

Os mdulos que estivemos utilizando na apostila, nos captulos anteriores, so procedimentos
sem parmetros, ou seja, que fazem uso de variveis globais e sua nica importante vantagem
facilitar o entendimento e a soluo do algoritmo.
Utilizando parmetros e no variveis globais dentro do procedimento, podemos, por assim
dizer, isol-lo do meio exterior e obter vantagens adicionais na codificao, pois, uma vez que
foram bem definidos os parmetros, um programador poder desenvolver seu procedimento sem
se preocupar com o algoritmo que o vai chamar. Poderemos tambm test-lo individualmente e
isoladamente para verificar sua correo. Isto ser comprovado na disciplina LP. A isto se
denomina Encapsulamento. Uma lista de parmetros consiste em uma lista de variveis e seus
respectivos tipos.

Procedimento < nome do Procedimento> (<lista de parmetros>)
< especificao de parmetros>
Incio
<declarao de variveis locais>
C1;
C2;
.
.
Cn;
Fim. { nome do procedimento}

Exemplo de Procedimento:
Procedimento TROCAINTEIROS (Inteiro NUM1,inteiro NUM2)
Incio
Inteiro AUXNUM;
AUXNUM = NUM1;
NUM1 = NUM2;
NUM2 = AUXNUM;
Fim.

6.3. FUNES
Funes so as estruturas que permitem ao usurio separar seus programas em blocos. Se
no as tivssemos, os programas teriam que ser curtos e de pequena complexidade. Para
fazermos programas grandes e complexos temos de constru-los bloco a bloco.
Uma funo um mdulo que tem por objetivo calcular e retornar ao algoritmo,
procedimento ou funo "chamador" um valor. A chamada de uma funo para execuo feita
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

72
apenas citando-se o seu identificador no meio de uma expresso. Vide as funes previamente
existentes no nosso pseudo-cdigo. Uma funo dita recursiva quando chama a ela prpria.
Uma funo no C tem a seguinte forma geral:
tipo_de_retorno nome_da_funo (declarao_de_parmetros)
Incio
corpo_da_funo
Fim.
Aqui no nosso Pseudo-Cdigo utilizaremos a seguinte forma

Pseudo - Cdigo
Tipo-de-retorno<nome da funo>(<declarao dos parmetros>)
Incio
Corpo da Funo
Fim.

Onde:
A lista de parmetros semelhante dos procedimentos
Antes do nome da funo d o tipo do valor que a funo retorna ao algoritmo ou
procedimento chamador.

O tipo-de-retorno o tipo de varivel que a funo vai retornar. O default o tipo inteiro
(int), ou seja, uma funo para qual no declaramos o tipo de retorno considerada como
retornando um inteiro. A declarao de parmetros uma lista com a seguinte forma geral:
tipo nome1, tipo nome2, ... , tipo nomeN
Repare que o tipo deve ser especificado para cada uma das N variveis de entrada. na
declarao de parmetros que informamos ao compilador quais sero as entradas da funo
(assim como informamos a sada no tipo-de-retorno).
O corpo da funo a sua alma. nele que as entradas so processadas, sadas so
geradas ou outras coisas so feitas.

O Comando retorna (return)
O comando return tem a seguinte forma geral:
retorna valor_de_retorno; ou retorna;
Digamos que uma funo est sendo executada. Quando se chega a uma declarao
retorna (return) a funo encerrada imediatamente e, se o valor de retorno informado, a
funo retorna este valor. importante lembrar que o valor de retorno fornecido tem que ser
compatvel com o tipo de retorno declarado para a funo.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

73
Uma funo pode ter mais de uma declarao retorna (return). Isto se torna claro quando
pensamos que a funo terminada quando o programa chega primeira declarao retorna
(return). Abaixo esto dois exemplos de uso do retorna (return):
Exemplo de funo:
Inteiro VALORABSOLUTO (inteiro X)
Incio
Se X > = 0 Ento
VALORABSOLUTO =X;
Seno
VALORABSOLUTO = (-X);
Fim Se;
Fim.
Exerccio para casa: Escrever e executar em C o programinha acima
- Algoritmo para calcular o quadrado de um nmero
Em Pseudo-Cdigo
Inteiro Square(inteiro a)
Incio
retorna (a*a);
Fim.

Algoritmo Principal
Incio
inteiro num;
imprima ("Entre com um numero: ");
leia (num);
num=Square(num);
imprima ("O seu quadrado vale:", num);
Fim
Em C
#include <stdio.h>
int Square (int a)
{
return (a*a);
}
int main ()
{
int num;
printf ("Entre com um numero: ");
scanf ("%d",&num);
num=Square(num);
printf ("\n\nO seu quadrado vale: %d\n",num);
return 0;
}


- Algoritmo para verificar de um nmero a divisvel por 2.

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

74
Em Pseudo-Cdigo
inteiro EPar (inteiro a)
incio
se (a%2) ento /* Verifica se a e divisivel por dois */
return 0; /* Retorna 0 se nao for divisvel, a%1=1 */
seno
return 1; /* Retorna 1 se for divisivel , a%0=0*/
fim se;
fim.

Algoritmo Principal
Incio
inteiro num;
imprima ("Entre com numero: ");
leia (num);
se (EPar(num)) ento
imprima ("O numero e par.");
seno
imprima ("O numero e impar.");
fim se;
Fim.


Em C
#include <stdio.h>
int EPar (int a)
{
if (a%2) /* Verifica se a e divisivel por dois */
return 0; /* Retorna 0 se nao for divisivel */
else
return 1; /* Retorna 1 se for divisivel */
}
int main ()
{
int num;
printf ("Entre com numero: ");
scanf ("%d",&num);
if (EPar(num))
printf ("\n\nO numero e par.\n");
else
printf ("\n\nO numero e impar.\n");
return 0;
}

importante notar que, como as funes retornam valores, podemos aproveit-los para
fazer atribuies, ou mesmo para que estes valores participem de expresses. Mas no podemos
fazer:
func(a,b)=x; /* Errado! */

6.3.1. Prottipos de Funes
At agora, nos exemplos apresentados, escrevemos as funes antes de escrevermos a
funo principal, main(). Isto , as funes esto fisicamente antes da funo principal main().
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

75
Isto foi feito por uma razo. Imagine-se na pele do compilador. Se voc fosse compilar a funo
main(), onde so chamadas as funes, voc teria que saber com antecedncia quais so os
tipos de retorno e quais so os parmetros das funes para que voc pudesse gerar o cdigo
corretamente. Foi por isto que as funes foram colocadas antes da funo main(): quando o
compilador chegasse funo main() ele j teria compilado as funes e j saberia seus
formatos. Mas, muitas vezes, no poderemos nos dar ao luxo de escrever nesta ordem. Muitas
vezes teremos o nosso programa espalhado por vrios arquivos. Ou seja, estaremos chamando
funes em um arquivo que sero compiladas em outro arquivo. Como manter a coerncia? A
soluo so os prottipos de funes. Prottipos so nada mais, nada menos, que declaraes de
funes. Isto , voc declara uma funo que ir usar. O compilador toma ento conhecimento do
formato daquela funo antes de compil-la. O cdigo correto ser ento gerado. Um prottipo
tem o seguinte formato:
tipo_de_retorno nome_da_funo (declarao_de_parmetros);
onde o tipo-de-retorno, o nome-da-funo e a declarao-de-parmetros so os mesmos
que voc pretende usar quando realmente escrever a funo. Repare que os prottipos tm uma
ntida semelhana com as declaraes de variveis. Vamos implementar agora um dos exemplos
da seo anterior com algumas alteraes e com prottipos:
Em Pseudo-Cdigo
inteiro Square (inteiro a);
Algoritmo Principal
incio
inteiro num;
imprima ("Entre com um numero: ");
leia (num);
num=Square(num);
imprima ("O seu quadrado vale:", num);
retorna (0);
fim.
inteiro Square (inteiro a)
incio
retorna (a*a);
fim.
Em C
#include <stdio.h>
int Square (int a);
int main ()
{
int num;
printf ("Entre com um numero: ");
scanf ("%f",&num);
num=Square(num);
printf ("\n\nO seu quadrado vale: %f\n",num);
return 0;
}
int Square (int a)
{
return (a*a);
}
Observe que a funo Square() est colocada depois do algoritmo principal, mas o seu
prottipo est antes. Sem isto este programa no funcionaria corretamente.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

76
Usando prottipos voc pode construir funes que retornam quaisquer tipos de variveis.
bom ressaltar que funes podem tambm retornar ponteiros sem qualquer problema. Os
prottipos no s ajudam o compilador. Eles ajudam a voc tambm: usando prottipos, o
compilador evita erros, no deixando que o programador use funes com os parmetros errados
e com o tipo de retorno errado, o que uma grande ajuda!

6.3.2. Escopo de Variveis
O escopo o conjunto de regras que determinam o uso e a validade de variveis nas
diversas partes do programa.
6.3.2.1. Variveis locais
O primeiro tipo de variveis que veremos so as variveis locais. Estas so aquelas que s
tm validade dentro do bloco no qual so declaradas. Podemos declarar variveis dentro de
qualquer bloco. S para lembrar: um bloco comea quando abrimos uma chave e termina quando
fechamos a chave. At agora s tnhamos visto variveis locais para funes completas. Mas um
comando para(for) pode ter variveis locais e que no sero conhecidas fora dali. A declarao
de variveis locais a primeira coisa que devemos colocar num bloco. A caracterstica que torna
as variveis locais to importantes justamente a de serem exclusivas do bloco. Podemos ter
quantos blocos quisermos com uma varivel local chamada x, por exemplo, e elas no
apresentaro conflito entre elas.
A palavra reservada do C auto serve para dizer que uma varivel local. Mas no
precisaremos us-la pois as variveis declaradas dentro de um bloco j so consideradas locais.
Abaixo vemos um exemplo de variveis locais:
Em Pseudo-Cdigo
funcao1 (...)
Incio
inteiro abc,x;
...
Fim.

funcaq (...)
Incio
inteiro abc;
...
Fim.

inteiro principal ()
Incio
inteiro a,x,y;
para (...)
{
real a,b,c;
...
}
...
Fim.

Em C
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

77
func1 (...)
{
int abc,x;
...
}
func (...)
{
int abc;
...
}
int main ()
{
int a,x,y;
for (...)
{
float a,b,c;
...
}
...
}
No programa acima temos trs funes. As variveis locais de cada uma delas no iro
interferir com as variveis locais de outras funes. Assim, a varivel abc de func1() no tem
nada a ver (e pode ser tratada independentemente) com a varivel abc de func2(). A varivel x de
func1() tambm completamente independente da varivel x da funo principal main(). As
variveis a, b e c so locais ao bloco para(for). Isto quer dizer que s so conhecidas dentro
deste bloco e so desconhecidas no resto da funo Principal(main()). Quando usarmos a
varivel a dentro do bloco para (for) estaremos usando a varivel a local ao para(for) e no a
varivel a da funo main().

6.3.2.2. Parmetros formais
O segundo tipo de varivel que veremos so os parmetros formais. Estes so declarados
como sendo as entradas de uma funo. No h motivo para se preocupar com o escopo deles.
fcil: o parmetro formal uma varivel local da funo. Voc pode tambm alterar o valor de um
parmetro formal, pois esta alterao no ter efeito na varivel que foi passada funo. Isto
tem sentido, pois quando o C passa parmetros para uma funo, so passadas apenas cpias
das variveis. Isto , os parmetros formais existem independentemente das variveis que foram
passadas para a funo. Eles tomam apenas uma cpia dos valores passados para a funo.

6.3.2.3.Variveis globais
Variveis globais so declaradas, como j sabemos, fora de todas as funes do programa.
Elas so conhecidas e podem ser alteradas por todas as funes do programa. Quando uma
funo tem uma varivel local com o mesmo nome de uma varivel global a funo dar
preferncia varivel local. Vamos ver um exemplo no nosso pseudo-Cdigo:



inteiro z,k;
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

78
func1 (...)
{
inteiro x,y;
...
}

func2 (...)
{
inteiro x,y,z;
...
z=10;
...
}

principal
{
inteiro count;
...
}
No exemplo acima as variveis z e k so globais. Veja que func2() tem uma varivel local
chamada z. Quando temos ento, em func2(), o comando z=10 quem recebe o valor de 10 a
varivel local, no afetando o valor da varivel global z.
Evite ao mximo o uso de variveis globais. Elas ocupam memria o tempo todo (as locais
s ocupam memria enquanto esto sendo usadas) e tornam o programa mais difcil de ser
entendido e menos geral.

6.3.3. Passagem de parmetros por valor e passagem por referncia
J vimos que, na linguagem C, quando chamamos uma funo os parmetros formais da
funo copiam os valores dos parmetros que so passados para a funo. Isto quer dizer que
no so alterados os valores que os parmetros tm fora da funo. Este tipo de chamada de
funo denominado chamada por valor. Isto ocorre porque so passados para a funo apenas
os valores dos parmetros e no os prprios parmetros. Veja o exemplo abaixo:
Exemplo
Em Pseudo-Cdigo
real sqr (real num);
int main ()
{
real num,sq;
imprima ("Entre com um numero: ");
leia (num);
sq=sqr(num);
imprima ("O numero original e:",num);
imprima ("O seu quadrado vale:",sq);
}

real sqr (real num)
{
num=num*num;
retorna num;
}
Em C
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

79
#include <stdio.h>
float sqr (float num);
void main ()
{
float num,sq;
printf ("Entre com um numero: ");
scanf ("%f",&num);
sq=sqr(num);
printf ("\n\nO numero original e: %f\n",num);
printf ("O seu quadrado vale: %f\n",sq);
}
float sqr (float num)
{
num=num*num;
return num;
}
No exemplo acima o parmetro formal num da funo sqr() sofre alteraes dentro da
funo, mas a varivel num da funo principal main() permanece inalterada: uma chamada por
valor.
Outro tipo de passagem de parmetros para uma funo ocorre quando alteraes nos
parmetros formais, dentro da funo, alteram os valores dos parmetros que foram passados
para a funo. Este tipo de chamada de funo tem o nome de "chamada por referncia". Este
nome vem do fato de que, neste tipo de chamada, no se passa para a funo os valores das
variveis, mas sim suas referncias (a funo usa as referncias para alterar os valores das
variveis fora da funo).
O C s faz chamadas por valor. Isto bom quando queremos usar os parmetros formais
vontade dentro da funo, sem termos que nos preocupar em estar alterando os valores dos
parmetros que foram passados para a funo. Mas isto tambm pode ser ruim s vezes, porque
podemos querer mudar os valores dos parmetros fora da funo tambm. O C++ tem um recurso
que permite ao programador fazer chamadas por referncia. H entretanto, no C, um recurso de
programao que podemos usar para simular uma chamada por referncia. Quando queremos
alterar as variveis que so passadas para uma funo, ns podemos declarar seus parmetros
formais como sendo ponteiros. Os ponteiros so a "referncia" que precisamos para poder alterar
a varivel fora da funo. O nico inconveniente que, quando usarmos a funo, teremos de
lembrar de colocar um & na frente das variveis que estivermos passando para a funo. Veja um
exemplo:
#include <stdio.h>
void Swap (int *a,int *b);
void main (void)
{
int num1,num2;
num1=100;
num2=200;
Swap (&num1,&num2);
printf ("\n\nEles agora valem %d %d\n",num1,num2);
}
void Swap (int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

80
No muito difcil. O que est acontecendo que passamos para a funo Swap o
endereo das variveis num1 e num2. Estes endereos so copiados nos ponteiros a e b. Atravs
do operador * estamos acessando o contedo apontado pelos ponteiros e modificando-o. Mas,
quem este contedo? Nada mais que os valores armazenados em num1 e num2, que, portanto,
esto sendo modificados!

6.4. FUNES RECURSIVAS
Existem casos em que um procedimento ou funo chama a si prprio. Diz-se ento que o
procedimento ou funo recursivo. Por exemplo, o fatorial de um nmero n pode ser definido
recursivamente, ou seja:

( )

=

=
0 n se 1
! 1 n n
! n

inteiro fat(inteiro n)
Incio
Se n==0 Ento
fat=1;
Seno
fat=n*fat(n-1);
Fim Se;
Fim.
Por exemplo, o fatorial de 3 ser calculado a partir da chamada funo pelo comando
x =fat(3) que retornar em fat o valor 6.

6.5. ESTRUTURAO DOS MDULOS DE UM ALGORITMO
Um procedimento nada mais que um algoritmo hierarquicamente subordinado a um outro
algoritmo, comumente chamado de Mdulo principal ou programa principal ou ainda algoritmo
principal.
Da mesma forma, um procedimento poder conter outros procedimentos (e tambm funes)
aninhados. Assim, ao definirmos as fases do nosso algoritmo, no processo de refinamentos
sucessivos, se transformarmos as mesmas em procedimentos e os refinamentos de
cada procedimento em outros procedimentos, obteremos, ao fim do processo de criao, um
algoritmo estruturado, com mdulos hierarquicamente subordinados e muito menos suscetvel a
erros de lgica na fase de codificao do programa.



Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

81
CAPTULO 7 - ALGORITMOS DE PESQUISA E ORDENAO




7.1. INTRODUO
Quando temos um Vetor (ou Matriz) com muitos elementos e precisamos descobrir se um
determinado elemento que procuramos se encontra no vetor, uma soluo que certamente nos
vem mente comparar o elemento que procuramos com cada elemento do vetor, at que
encontremos ou at que concluamos que o elemento procurado no est no vetor.
Esta a base do raciocnio dos algoritmos de pesquisa ou busca ("Search"), que como
sugere o nome, "Pesquisam", em um vetor, a existncia ou no existncia de um elemento
procurado. A diferena entre um e outro algoritmo de busca, fica por conta da rapidez com que
"varremos" o vetor para encontrar o elemento ou para concluirmos que ele no existe.
Um fator que influencia em muito nessa rapidez a disposio dos elementos no vetor. Se
esto desordenados, seguramente teremos que verificar do primeiro ao ltimo elemento para
concluir, com certeza, que o elemento no existe. J se esto ordenados, ao encontrarmos um
elemento maior (ou menor) que o elemento procurado, poderemos concluir pela sua no
existncia. Os algoritmos de ordenao ou classificao ("Sort"), por sua vez, so utilizados para
ordenar os elementos de um vetor de forma a facilitar a pesquisa posterior de um elemento, no
conjunto de elementos existentes.
Existem algoritmos para pesquisa e ordenao para as mais variadas estruturas de dados. Na
nossa disciplina, entretanto, trataremos apenas os algoritmos de pesquisa e ordenao em
vetores, que tambm podem ser utilizados em matrizes, desde que sofram pequenos ajustes.

7.2. ALGORITMOS DE PESQUISA
Para fazermos qualquer pesquisa em vetor (ou matriz) precisamos de quatro parmetros:
a) O vetor no qual realizaremos a pesquisa
b) O nmero de elementos desse vetor que devem ser pesquisados. (Lembre-se que muitas
vezes um vetor de 1000 elementos, s tem 700 carregados, e podemos evitar tratamento de 300
elementos com "lixo").
c) O elemento procurado
d) Um ndice que vai ser preenchido com a posio onde o elemento foi encontrado ou retornar
com 0 (zero) caso o elemento no exista.



Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

82
Como os algoritmos de pesquisa podero ser utilizados muitas vezes na soluo de diferentes
problemas, vamos defini-los como Procedimentos de um Algoritmo Principal hipottico, com os
seguintes argumentos:

Declaraes:
Const
MAXELEM = 10000 {Nmero mximo de elementos do vetor, apenas para limitar o tamanho do
vetor}
<Tipo bsico> Nome do vetor[1:MAXELEM]
inteiro TOTELEM {Corresponde ao parmetro b) Total de elementos a ser pesquisado}
<Tipo bsico> ELEMPROC {Corresponde ao Parmetro c) Elemento procurado}
Inteiro POS {Corresponde ao Parmetro d) Posio em VET onde ELEMPROC foi encontrado, ou
0 se no o foi}

7.2.1. PESQUISA SEQENCIAL SIMPLES

Na pesquisa seqencial simples, como o vetor a ser pesquisado no est ordenado pelo
elemento procurado, teremos de comparar um a um o ELEMPROC com cada elemento de VET.
Portanto para um elemento inexistente teremos de fazer TOTELEM testes e para um elemento
existente faremos, na mdia, TOTELEM/2 testes.

Procedimento PESQSEQ (<tipo bsico>VET);
Incio
Inteiro TOTELEM, POS, J;
<Tipo bsico> ELEMPROC;
Leia(ELEMPROC);
/*Executa a Pesquisa da primeira ocorrncia de ELEMPROC em VET e
retorna em POS o ndice onde foi encontrada ou 0 se no existe*/
Enquanto (Pos==0) e (J<=TOTELEM) Faa
Se VET[J]==ELEMPROC Ento
POS = J;
Seno
J = J+1;
Fim Se;
Fim Enquanto;
Fim.

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

83
Se precisamos determinar todas as ocorrncias de um elemento em um vetor, o problema se
simplifica, pois teremos que, obrigatoriamente, varrer o vetor at o fim (Elimina-se do lao o teste
POS = =0), mas teremos de guardar em um vetor todas as posies onde o elemento foi
encontrado ou, o que mais usual, processaremos a ocorrncia dentro do procedimento (aps
POS = J). O trecho de procedimento abaixo exemplifica:

Pesquisa Seqencial com Repetio

Trata todas as ocorrncias de um elemento procurado no vetor

Incio
POS = 0; /*Indicar ao algoritmo chamador a no ocorrncia*/
J = 1;
Enquanto J < = TOTELEM Faa
Se VET[J] == ELEMPROC Ento
POS = J;
/*Imprime, Acumula, etc.*/
Fim Se;
J = J + 1;
Fim Enquanto;
Fim.

7.2.2. PESQUISA SEQENCIAL ORDENADA

Para se utilizar a Pesquisa Seqencial Ordenada, o vetor de busca tem de estar ordenado
pelo campo chave da pesquisa. Com isso, ao se encontrar no vetor, um elemento maior do que o
elemento procurado, poderemos abandonar a busca pois, com certeza, no mais o
encontraremos. Devido a isso o nmero de testes para elementos existentes ou inexistentes ser,
na mdia, de TOTELEM/2, e, por isso, melhor que o anterior para o caso de elemento inexistente.








Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

84
Procedimento PESQORD (<tipo bsico> VET, Inteiro TOTELEM, inteiro POS, <Tipo bsico>
ELEMPROC);
Incio
Inteiro J;
/*Executa a Pesquisa da primeira ocorrncia de ELEMPROC em VET e
retorna em POS o ndice onde foi encontrada ou 0 se no existe. VET
tem de estar ordenado pelo campo chave*/
POS = 0;
J = 1;
Enquanto J<=TOTELEM e POS==0 Faa
Se VET[J]>=ELEMPROC Ento
Se VET[J] == ELEMPROC Ento
POS=J;
Seno
Imprima(" O elemento no est na lista");
Abandone;
Fim Se;
Seno
J=J+1;
Fim Se;
Fim Enquanto;
Fim.
Exerccio resolvido - Dado um vetor A de 128 elementos, verificar se existe um elemento igual a K
(chave) no vetor. Se existir, imprimir a posio onde foi encontrada a chave; se no, imprimir:
chave K no encontrada . O vetor A e chave K so lidos de cartes.
incio
inteiro A[1:128] inteiro;
inteiro I,K;
lgico ACHOU;
leia (K);
leia (A);
ACHOU = falso;
para I de 1 at 128 passo 1 faa
se A[I]==K ento
imprima (K, Est na posio , I);
ACHOU = verdadeiro;
abandone;
fim se;
fim para ;
se no ACHOU ento
imprima (A CHAVE, K,NO EST NO VETOR);
fim se;
fim.

Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

85
Neste exemplo, a pesquisa a um elemento ficar mais eficiente se utilizarmos a pesquisa binria,
desde que o vetor j esteja ordenado. Nesta pesquisa procuramos o elemento K dividindo o vetor
em duas partes e testando em qual das duas ele deveria estar. Procedendo da mesma forma para
a parte provvel, e assim sucessivamente:
K

K

K

7.2.3. PESQUISA BINRIA
A pesquisa binria um mtodo que tambm s se aplica a vetores previamente ordenados.
A sua grande vantagem a rapidez e, por isso, ela muito recomendada para vetores grandes.
Neste mtodo, a primeira comparao feita com o elemento do meio do vetor, eliminando-se
assim metade do mesmo para a busca. Seguem-se comparaes sucessivas ao elemento do
meio do segmento onde pode estar o elemento procurado. Assim, a cada comparao feita,
metade do vetor eliminada.
Procedimento PESQBIN (V: VET, Inteiro: TOTELEM, POS;<Tipo bsico> :
ELEMPROC)
Incio
/*Executa a Pesquisa binria da primeira ocorrncia da ELEMPROC em VET
e retorna em POS se o ndice foi encontrado ou 0 se no existe. VET
tem de estar ordenado pelo campo chave*/
Inteiro: PRI, ULT, MED {primeiro, ltimo e elemento do meio}
POS = 0;
PRI = 1;
ULT = TOTELEM;
Enquanto (PRI < = ULT) e (POS == 0) Faa
MED = (PRI + ULT)/2 /*quociente da diviso inteira*/
Se VET[MED] == ELEMPROC Ento
POS = MED;
Seno Se VET[MED] > ELEMPROC Ento
/*O ELEMPROC est na primeira metade*/
ULT = MED - 1;
Seno
/*O ELEMPROC est na Segunda metade*/
PRI = MED + 1;
Fim Se;
Fim Se;
Fim Enquanto;
Fim.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

86
Exerccio 1 do item 7.2.2 utilizando-se pesquisa binria.

incio /*pesquisa binria*/
inteiro COMEO, /*indicador do primeiro elemento da parte do vetor a
considerar*/
FIM, /*indicador do ltimo elemento da parte do vetor a
considerar*/
MEIO, /*indicador do elemento do meio da parte do vetor
Considerada*/
K; /*elemento procurado*/
Inteiro A[1:128];
leia (A,K);
COMEO =1;
FIM=128;
repita
MEIO= (COMEO+FIM)/2;
se K<A[MEIO] ento
FIM=MEIO-1
seno
COMEO=MEIO+1;
fim se
at A[MEIO]==K ou COMEO >FIM;
se A[MEIO]!=K ento
imprima ( No existe o elemento);
seno
imprima ( Est na posio: , MEIO);
fim se
fim.

7.3. ALGORITMOS DE ORDENAO
Como j foi dito, o propsito dos algoritmos de ordenao o de facilitar e acelerar a
busca posterior de um elemento no vetor. Os algoritmos de ordenao so utilizados
normalmente uma vez em cada execuo do programa, ou poucas vezes, se comparados
com os de Pesquisa, por isso o uso de mtodos elementares e demorados no to
problemtico como nas pesquisas. Na nossa disciplina, veremos trs algoritmos para
classificao interna de vetores, que tm tempo de execuo proporcional ao quadrado do
nmero de elementos a serem ordenados:
Ordenao por seleo (mtodo seleo direta)
Ordenao por insero (mtodo insero direta)
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

87

Ordenao por troca (mtodo da bolha)
Para fazermos qualquer ordenao em vetor (ou matriz) precisaremos de dois parmetros:
a) O vetor que ser ordenado;
b) O nmero de elementos desse vetor que devem ser ordenados. (Novamente para evitar
tratamento de "lixo")
Da mesma forma que os algoritmos de pesquisa, os algoritmos de ordenao podero ser
utilizados muitas vezes na soluo de diferentes problemas e tambm vamos defini-los como
um Procedimento do mesmo Algoritmo Principal, hipottico, com os seguintes argumentos:
Declaraes
Constante MAXELEM = 1000; /*Nmero mximo de elementos do vetor, apenas limitar
o tamanho do vetor*/
<tipo bsico> VET[1: MAXELEM];/*Corresponde ao Parmetro a) o vetor a ser
ordenado*/
Inteiro TOTLEM /*Corresponde ao Parmetro b)*/

7.3.1. MTODO DE SELEO DIRETA
Este um dos mais simples mtodos existentes. Primeiro descobre-se o menor
elemento do vetor e troca-se com o primeiro elemento. A partir da, com os elementos
remanescentes, repete-se o processo at que todo o vetor esteja ordenado. Um exemplo
bastante elucidativo o de algumas cartas de baralho na mesa viradas para cima ( vista).
Seleciona-se a menor (ou maior) para coloc-la na primeira posio. Depois, seleciona-se,
sucessivamente, a menor carta dentre as remanescentes e se a coloca sobre a primeira.
Procedimento SELEO_DIRETA (V: VET, Inteiro: TOTELEM)
Incio
/*Faz a ordenao crescente de TOTELEM elementos de um vetor VET*/
Inteiro MIN, I, J; /*ndices*/
<Tipo Bsico> AUX;
Para K de 1 at (TOTELEM - 1) Faa
MIN K;
Para J de (K + 1) at TOTELEM Faa
Se VET[J] < VET [MIN] Ento
MIN = J;
Fim Se;
Fim Para;
AUX = VET[MIN];
VET[MIN] = VET[K];
VET[K] = AUX;
Fim Para;
Fim.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

88
7.3.2. MTODO DE INSERO DIRETA
Nesse mtodo, considera-se que um elemento do vetor (o primeiro) est ordenado E
"insere-se" os demais considerando os anteriores j ordenados. Voltando-se ao exemplo do
baralho como se agora as cartas sobre a mesa esto com a face para baixo e cada carta
arrumada ordenadamente na mo em relao as que j esto na mo.
Este mtodo pode ser utilizado, com vantagem, quando se est lendo elementos de
um arquivo para serem posteriormente ordenados. Bastam leves modificaes no algoritmo,
que leremos o arquivo e j o armazenaremos na memria ordenadamente.

Procedimento INSERO_DIRETA (V: VET, Inteiro : TOTELEM)
Incio
/*Faz a ordenao de TOTELEM elementos de um vetor VET*/
<Tipo bsico> AUX;
Inteiro K, J; /*ndice*/
Para K de 2 at TOTELEM Faa
AUX = VET[K];
J = K - 1;
Enquanto (J > 0) Faa
Se AUX < VET[J] Ento
VET [J + 1] = VET [J];
J = J - 1;
Seno
Abandone;
Fim Se;
Fim Enquanto;
VET [J + 1] = AUX;
Fim Para;
Fim.

7.3.3. MTODO DA BOLHA
Este mtodo caracteriza-se por efetuar a comparao sucessiva de pares
subseqentes de elementos, trocando-os de posio, se estiverem fora de ordem. Dos trs
este o menos eficiente, j que cada troca de elementos exige trs comandos e o nmero de
trocas (TOTELEM-1) vezes maior que no mtodo de seleo direta, por exemplo. Alm
disso o mtodo mais complicado de entender que o de seleo direta. Segue-se exemplo
de uma implementao de algoritmo de pesquisa utilizando-se esse mtodo.


Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

89
Procedimento BOLHACRESCENTE (V: VET, Inteiro: TOTELEM)
Incio
/*Faz o ordenamento de TOTELEM elementos de um valor VET*/
Inteiro P,J; /*contador de passadas e ndice*/
<Tipo bsico> AUX;
Para P de 1 at (TOTELEM - 1) Faa
Para J de 1 at (TOTELEM - P) Faa
Se VET[J + 1]<VET[J] Ento
AUX = VET[J]; /*Troca dos elementos*/
VET[J] =VET[J + 1];
VET[J + 1] =AUX;
Fim Se;
Fim Para;
Fim Para;
Fim.

- Exerccio Resolvido
1) Classificar um vetor numrico VET de 6 elementos em ordem crescente:
incio /*mtodo da bolha*/
inteiro VET[1:6]
inteiro: AUX, /* auxiliar para troca de elementos*/
BOLHA, /* indicador de mais alto elemento fora de ordem*/
LSUP, /*indicador do tamanho do vetor a ser pesquisado, sendo o
valor inicial igual a 6*/
J; /*indicador do elemento do vetor*/
leia (VET);
LSUP = 6;
enquanto LSUP>1 faa
BOLHA = 0;
para J de 1 at LSUP-1 faa
se VET[J]>VET[J+1] ento /* troca elemento j com j+1*/
AUX = VET[J];
VET[J] = VET[J+1];
VET[J+1] = AUX;
BOLHA = J;
fim se;
fim para
LSUP = BOLHA; /*aponta para ltima posio trocada*/
fim enquanto;
imprima (VET);
fim.
Apostila de Algoritmo Estruturado Prof
a
Salete Buffoni

90
REFERNCIAS

[1] Farrer H. et ali. Algoritmos Estruturados., Editora Guanabara S. A., Rio de Janeiro, 1985.

[2] Guimares, Angelo M & Lages, Newton A. de C. Algoritmos e Estrutura de dados. LTC -
Livros Tcnicos e Cientficos Editora S.A.; 216 1985

[3] Tremblay, J. P; Bunt R. Cincia dos Computadores - Uma Abordagem Algortmica. Editora
McGraw Hill do Brasil, so Paulo, 1983.

[4] Villas, Marcos V, & Villasboas, Luiz F.P. Programao Conceitos, Tcnicas e Linguagens.
Ed. Campus; 195 p. 1988.

[5] Filho, Jos Vanni, Construo de Algoritmos. PUC-Rio . 4 edio Setembro de 95

[6] Manzano, J. ; Oliveira, J. Algoritmos . Editora rica. Dcima Quarta Edio. 2002.

[7] Santos, H. Curso de Linguagem C UFMG. 2003