Vous êtes sur la page 1sur 51

INFORMTICA

I - ALGORITMIA - Conceitos Bsicos

Linguagens de Programao

Para comunicar com um computador necessrio que ele entenda o utilizador e


que o utilizador o entenda. Isto um problema de comunicao que se resolve utilizan-
do uma linguagem (ou linguagens) que ambos sejam capazes de descodificar com
preciso. J se conhece uma linguagem que estabelece um primeiro nvel de comuni-
cao: o Sistema Operativo. Mas este no permite realizar uma infinidade de tarefas
especficas como, a contabilidade de uma empresa ou a sua facturao, o desenho da
planta de uma casa, a gesto dos scios de um clube, a resoluo de uma equao
matemtica, etc.. Para isso necessrio usar uma linguagem de programao que
permita criar uma aplicao (programa) que realize aquelas tarefas. Ento, pode dizer-
se, que uma aplicao assenta numa linguagem, ou seja, num modo especfico de
comunicao com a mquina.

Linguagens de programao so sistemas de escrita para


enunciar as operaes a executar por um computador.
ou
Conjunto de indicaes em cdigo que se transmitem a um
computador para dar resposta a um dado problema.

Como sistema de escrita, uma linguagem de programao (como qualquer outra


linguagem, como o Portugus, por exemplo) composta por:
Uma terminologia ou semntica - ou seja, um conjunto de termos, palavras, carac-
teres ou sinais que assumem determinados significados para o computador;
Um conjunto de regras ou sintaxe - que estipulam o modo correcto de utilizar os
termos da linguagem para formular instrues vlidas para a mquina.

Linguagem Mquina

J se sabe que tudo o que o computador faz sob as ordens de um programa e


que, a nica linguagem que o computador entende a dos bits. Esta linguagem consiste
na representao dos dados por sequncias de zeros e uns, que desencadeiam deter-
minadas aces no processador; por isso, esta linguagem conhecida por linguagem
mquina ou cdigo mquina.
As linguagens baseadas em cdigo mquina designam-se por linguagens de baixo
Antnio M. P. Sousa da Silva Algoritmia - 1
INFORMTICA
nvel, pois encontram-se ao nvel do hardware e so executadas directamente pela CPU
obedecendo a instrues que contm um cdigo de operao e um ou mais endereos
de memria.
Estas linguagens so pouco prticas e, a sua utilizao, implica o conhecimento
profundo da arquitectura da mquina, o que nem sempre vivel. A programao em
linguagem mquina bastante difcil, em particular porque:
O programador deve memorizar todos os cdigos de operao ou consultar cons-
tantemente um manual com tais cdigos;
O programador deve lembrar-se de todos os endereos de memria que contm
informao;
Como o programa e os dados so armazenados sequencialmente na memria
central, a introduo ou remoo de instrues no programa, pode acarretar a
alterao de todos os endereos e consequentemente a alterao de todo o
programa;
A programao est sujeita a muitos erros, pois a troca de zero por um ou vice-
versa muda o significado de uma instruo.
Assim, para facilitar a tarefa dos programadores foram criadas diversas lingua-
gens de programao.

Linguagem Simblica ou de Montagem

Inicialmente, na dcada de 1950, criou-se uma nova linguagem semelhante lin-


guagem mquina mas com os cdigos de operao substitudos por mnemnicas e com
os endereos de memria correspondentes aos dados, substitudos por nomes simbli-
cos. A esta linguagem simblica de montagem chamou-se Linguagem Assembly.
Um programa em linguagem Assembly convertido para linguagem mquina por
um tradutor (ou programa de montagem) denominado Assembler. Este tradutor recebe
o programa em linguagem Assembly, substitui cada uma das suas instrues pela instruo
equivalente em linguagem mquina e finalmente executa o programa em linguagem m-
quina. A verso em linguagem simblica do programa normalmente conhecida por
programa (ou cdigo) fonte, e a verso j traduzida em linguagem mquina conhecida
por programa (ou cdigo) objecto.
Esquematicamente:

PROGRAMA-FONTE TRADUTOR PROGRAMA-OBJECTO

Sob o ponto de vista da programao, esta linguagem apresenta as seguinte des-


vantagens:

Antnio M. P. Sousa da Silva Algoritmia - 2


INFORMTICA
Cada instruo executa uma operao muito simples (soma, subtraco, etc.)
dando origem a programas muito longos;
A linguagem orientada para a mquina em vez de ser orientada para as aplica-
es, isto , o programador tem que pensar em termos de organizao da m-
quina (registos internos, posies de memria, nmero de endereos, opera-
es bsicas) em vez de pensar em termos da aplicao que est a programar;
Um programa escrito para uma mquina no pode ser executado numa mquina
diferente.

Linguagens de Alto Nvel

Apareceram ento, na dcada de 1960, linguagens mais poderosas, de mais fcil


utilizao e compreenso: as linguagens de alto nvel, para que qualquer utilizador
possa programar sem dificuldade de maior.
As linguagens de alto nvel baseiam-se em linguagens correntes (sendo o Ingls a
mais utilizada), tm regras e sintaxe prprias e os conceitos e notaes deste tipo de
linguagens so mais apropriados para o tipo de problemas a resolver, que aqueles dita-
dos pela estrutura interna do computador. Isto torna a linguagem orientada para a pes-
soa e no para a mquina. Alm disso os programas so portteis; um programa desen-
volvido numa mquina pode correr perfeitamente noutra com uma arquitectura diferente,
se a linguagem utilizada for igual nos dois casos.
Entre as linguagens de alto nvel mais divulgadas encontram-se as seguintes:

FORTRAN (Formula Translation) - IBM 1956


Foi criada para aplicaes cientficas que envolvem muitos clculos, complexos,
precisos, e rapidamente executados, como por exemplo em problemas de astronomia .
Os dialectos mais conhecidas so o FORTRAN II e o FORTRAN IV.

COBOL (Common Bussiness Oriented Language) - EUA 1960


Linguagem introduzida por um grupo de grandes utilizadores de computadores,
fabricantes e rgos do governo norte-americano. Baseia-se mais que qualquer outra na
linguagem inglesa corrente. muito utilizada em aplicaes de ndole comercial com
clculos leves mas que utilizem grandes quantidades de informao, em virtude das
suas capacidades para manipular ficheiros. das linguagens mais utilizadas hoje em
dia.

ALGOL (Algoritmic Language)


Linguagem introduzida em 1960 por um comit internacional. Orientada para o
clculo cientfico e para a descrio formal de algoritmos.

Antnio M. P. Sousa da Silva Algoritmia - 3


INFORMTICA

PL1 (Programming Language 1) - IBM 1965


Propunha-se reunir as trs linguagens anteriores. Tinha por finalidade servir como
linguagem universal, aplicvel tanto a problemas cientficos como comerciais.

BASIC (Beginners All-Purpose Symbolic Instruction Code) - EUA 1965


Surgida para servir com facilidade interesses de no especialistas, mais interes-
sados na resoluo de problemas do que no estudo dos aspectos mais delicados da
programao. Utiliza o Ingls corrente e simbologia matemtica. orientada para os
microcomputadores, educao e pequenos problemas de gesto. H diversos dialectos:
M-BASIC, MS-BASIC, GW-BASIC, BASIC-1, BASIC-2, QUICK BASIC e TURBO BASIC.

PASCAL (em honra do matemtico Blaise Pascal) - Suia 1971


Linguagem orientada para aplicaes cientficas, tornando fcil o desenvolvimen-
to e manuteno de grandes programas. Influenciou a maioria das linguagens de progra-
mao e por apresentar uma estruturao lgica e modular tambm muito utilizada
para aprender a programar. Utiliza o Ingls e, dos muitos dialectos existentes, o mais
conhecido o TURBO PASCAL.

PROLOG (Programming Logic) - Frana 1972


Linguagem baseada na lgica dos predicados e utilizada em Inteligncia Artificial.
Foi a linguagem escolhida para o projecto japons da quinta gerao.

C - Bell Telephone 1972


Criada em ambiente UNIX para o desenvolvimento de software de sistemas, rapi-
damente se divulgou devido s suas potencialidades. A linguagem C considerada de
nvel mdio por ser composta por um conjunto mnimo de declaraes de controlo e
manipulao de dados (que no so normalmente acessveis em linguagens de alto
nvel) que os programadores podem utilizar para construir comandos de alto nvel. As
aplicaes mais complexas foram elaboradas nesta linguagem. O dialecto C++, actual-
mente considerada a linguagem mais poderosa, tem sido utilizada pela Microsoft para
produzir aplicativos do mais conhecido ambiente integrador grfico para PCs, o
WINDOWS. Foi utilizada para criar grficos e efeitos especiais em filmes como A Guerra
das Estrelas.

Program CalArea; MOV AL, DH 10101010100100101


Var raio, area : Real; DIV BL 01010000101111100
Begin ADD Al, DL HARDWARE
Write('Qual o raio?');
Programa numa linguagem de Programa em Assembly Programa em Linguagem-
alto nvel Mquina
Antnio M. P. Sousa da Silva Algoritmia - 4
INFORMTICA
Alm destas, muitas outras linguagens foram desenvolvidas: RPG, APL, CLIPPER,
LIST, MODULA 2, LOGO, JAVA, etc., com interfaces e ambientes de trabalho cada vez
mais amigveis (como o caso das linguagens visuais: Visual Basic, Visual C++ e Delphi)
permitindo a um programador escolher a linguagem de programao mais indicada para
a elaborao de uma aplicao particular. No entanto, como j se sabe, no basta o
programador conhecer a linguagem: necessrio torn-la legvel para o computador, o
que se consegue recorrendo a um programa tradutor.
H dois tipos de tradutores:

Compilador e Interpretador

Compilador
O programa-fonte escrito em linguagem de alto nvel traduzido integralmente em
linguagem-mquina (compilao). uma operao que se faz de uma s vez e que,
normalmente, indica os erros ou incorreces de sintaxe (caso existam), mas, que no
permite ir observando passo a passo, o que cada instruo do programa faz. Quando
isento de erros e depois de incorporadas ao programa-objecto as bibliotecas do utilizador
e do sistema, criado um programa (ficheiro com extenso EXE) que pode ser executa-
do independentemente do compilador. H vrios tipos de compiladores e cada um
classificado de acordo com o cdigo de sada que gera.

PROGRAMA-FONTE PROGRAMA-OBJECTO
TRADUTOR
(EM LINGUAGEM DE ALTO (PROGRAMA EM LINGUAGEM-
(COMPILADOR)
NVEL) -MQUINA)

Os compiladores tem a vantagem de compilar de maneira imediata, com execuo


rpida e com tamanho reduzido de cdigo. No entanto os programas devem ser total-
mente recompilados quando ocorrem alteraes.

Interpretadores
Traduzem o programa directamente no computador especfico, interpretando a
linguagem de alto nvel, instruo a instruo e chamando as bibliotecas apropriadas
quando requeridas.
ENTRADA
PROGRAMA-FONTE
TRADUTOR
(EM LINGUAGEM DE ALTO (EXECUO)
(INTERPRETADOR)
NVEL OU ASSEMBLY) SADA

Os interpretadores so fceis de se usar, permitem a correco imediata dos


erros e o desenvolvimento rpido de programas no muito complexos. No entanto, um
interpretador muito mais lento que um compilador.
Antnio M. P. Sousa da Silva Algoritmia - 5
INFORMTICA

Linguagens da quarta gerao

usual atribuir geraes s linguagens-mquina, assembly e de alto nvel. O


avano das linguagens-mquina (primeira gerao) para as linguagens Assembly (se-
gunda gerao) trouxe aproximadamente um progresso de sete para um actividade do
programador. Um progresso semelhante ocorreu quanto as linguagens de alto nvel (ter-
ceira gerao) foram introduzidas. Actualmente, um grande nmero de programadores
est a desenvolver e a introduzir uma variedade enorme de instrumentos de aplicao
que podem oferecer ainda maiores progressos na produtividade. Tais rotinas (pequenos
programas) so frequentemente referidos, no seu conjunto, como linguagens de quarta
gerao - 4GL. Um programa 4GL actua interactivamente com o software de Sistema de
Gesto de Base de Dados (SGBD) para armazenar, tratar e recuperar os dados necess-
rios, para satisfazer as necessidades do utilizador. Uma linguagem de alto nvel
procedimental, isto , requer do programador a especificao dos passos do
processamento necessrios para atingir o resultado desejado. Uma 4GL no-
procedimental, isto , permite ao utilizador especificar simplesmente qual deve ser o tipo
sem ter que descrever todos os detalhes de como os dados devem ser manipulados para
produzir tal resultado.
No possvel dar uma definio clara de 4GL uma vez que cada rotina ou Lin-
guagem o produto de um programador especfico, e os vendedores no esto de
acordo relativamente a uma padronizao.
Uma linguagem com rotinas deste tipo o CLIPPER (linguagem para sistemas de
gesto de base de dados).

Linguagens de Quinta Gerao ou Naturais

Encontram-se ainda numa fase de desenvolvimento e destinam-se a facilitar, como


sempre, a comunicao entre o Homem (utilizador) e o computador. Trata-se da utiliza-
o, e compreenso por parte do computador, das linguagens naturais (como o ingls, o
portugus ou o japons). Espera-se que a introduo destas linguagens venha permitir,
entre outras coisas, a aprendizagem por parte do computador. Devido s necessidades
de grandes quantidades de memria e de velocidades de processamento muito eleva-
das, o desenvolvimento deste tipo de linguagens tinha-se limitado, at h pouco, aos
sistemas mainframes e aos supercomputadores. O rpido aumento de tais capacidades
nos microcomputadores, sobretudo aps o desenvolvimento dos microprocessadores
486 e Pentium, fez com que algumas casas de software comeassem a desenvolver
verses de linguagens naturais para os computadores pessoais.
Uma das vias de aplicao mais importante para estas linguagens sero os
interfaces de entrada de voz nos sistemas de computador.
Antnio M. P. Sousa da Silva Algoritmia - 6
INFORMTICA

Etapas do desenvolvimento de uma aplicao

Depois de se saber o que uma linguagem de programao, altura de comear


a concretizar o objectivo principal deste mdulo: como criar um programa para o compu-
tador e quais as ferramentas e mtodos para isso.
Um problema ou uma determinada tarefa, a resolver ou desenvolver por meios
informticos, requer a realizao dos seguintes passos :

1. Anlise; Fase de resoluo do problema


2. Concepo;
3. Implementao; Fase de implementao
4. Teste.

A concentrao e o investimento de tempo nos dois primeiros passos: fase de


resoluo do problema fundamental para a resoluo rpida e eficaz de um progra-
ma, uma vez que, preciso entender de um modo aprofundado aquilo que pedido
(anlise), para depois conceber a sua resoluo (concepo). nesta fase que elabo-
rado um algoritmo que visa a resoluo do problema proposto. S depois da formulao
de um algoritmo adequado, se passar sua implementao numa linguagem de progra-
mao para posterior execuo e teste: fase de implementao. Note-se que s nesta
ltima fase se faz uso do computador.

Anlise

O projecto de um sistema informtico ou de um simples programa requer uma


investigao preliminar: estudo terico do problema, elaborao de inquritos para se
obterem informaes sobre o sistema a informatizar, observao no local do modo de
funcionamento do sistema, registo e recolha de documentos que representem a informa-
o que anda em jogo, etc. Depois de compreendido todo o funcionamento (eventual-
mente retendo os aspectos positivos e propondo melhoramentos) passa-se
esquematizao, elaborando diagramas, onde de uma forma simples e bem documenta-
da se representam todas as entidades, processos, fluxos de informao e armazenamentos
de dados envolvidos. Tudo isto resulta num esquema genrico, que contm em si a
resoluo do problema. O aprofundamento da anlise depende da complexidade do sis-
tema ou problema, existindo mtodos e ferramentas prprios, cujo estudo sai do mbito
deste mdulo.

Antnio M. P. Sousa da Silva Algoritmia - 7


INFORMTICA

Concepo

Depois de compreendido e esquematizado o sistema ou problema, deve pensar-


se na melhor maneira de o resolver, passo a passo, de uma forma estruturada, clara,
eficiente e genrica tendo sempre presente que o problema para ser resolvido por
meios informticos e por isso os passos da resoluo no podem ser ambguos e tero
de ser em nmero finito.
Durante a concepo deve ser elaborado um dicionrio dos dados identificados
na anlise, onde sero descritos em termos de nome, tipo (se um nmero, um caracter,
etc.) e significado. Depois ser elaborado um algoritmo (cdigo de escrita em que se
utilizam representaes simblicas para indicar as instrues do programa) que no
mais que a resoluo do problema, passo a passo. Este algoritmo poder evoluir para
pseudocdigo onde se usam representaes simblicas que so um misto de palavras
da nossa linguagem natural com termos e notaes tpicas de uma linguagem de progra-
mao. O uso do pseudocdigo presta-se a uma aproximao sucessiva verso do
programa na linguagem de programao utilizada, ou seja, pode-se ir progressivamente
por fases, revendo o pseudocdigo e substituindo-o progressivamente por terminologia
prpria da linguagem de programao.

Implementao

Consiste em transcrever para o computador, usando a linguagem de programao


escolhida e um editor, a definio dos dados e o algoritmo, que transformado em
instrues dessa linguagem, gerando-se assim o cdigo-fonte. De seguida este cdigo
traduzido para cdigo-objecto com o auxlio de um tradutor (compilador ou interpretador).
O processo estar completo quando o cdigo-fonte estiver correctamente escrito de acordo
com as normas impostas pela linguagem. Se houver erros de sintaxe, o tradutor no os
deixar passar e o cdigo-fonte ter de ser revisto para poder gerar o cdigo objecto.
Esta fase de correco dos erros, quanto s normas impostas pela linguagem costuma
chamar-se de depurao (debugging).

Teste

Depois de obtido o cdigo-objecto, e de ter sido ligado (lincagem) a outros cdi-


gos-objecto (rotinas em bibliotecas da linguagem e do Sistema Operativo) fica-se com
um programa executvel em cdigo-mquina que dever ser testado para se verificar a
sua integridade e eficincia. Um programa pode estar escrito sem qualquer erro do
ponto de vista das normas da linguagem (isto sem erros de traduo) mas ter falhas do
ponto de vista dos objectivos que se pretendiam alcanar, por imprecises, deficiente
formulao algortmica, vcios de raciocnio, etc.
Antnio M. P. Sousa da Silva Algoritmia - 8
INFORMTICA
Estes testes devero ser realizados por vrios utilizadores e com dados diversifi-
cados. Qualquer erro detectado implica regressar de novo concepo ou anlise
para ser corrigido. Este processo repete-se at que no existam erros. A implementao
e teste de um programa ser objecto de estudo no mdulo seguinte.

Algoritmos

Tal como muitas das tarefas dirias so feitas com base em decises mais ou
menos elaboradas, tambm a electrnica sofisticada de um computador, de uma mqui-
na multibanco, de uma mquina de lavar, etc. executa sequncias de instrues de um
programa.
Aquelas tarefas podem escrever-se num papel em linguagem corrente, sendo muitas
vezes a sua descrio baseada num processo sequencial partindo-se depois para uma
traduo desses processos utilizando uma linguagem estruturada.
Considerando vrios nveis para a apreenso de uma linguagem, pode-se tomar
como base de referncia a linguagem natural, estando mais abaixo o processo cognitivo
(interiorizao de imagens, sons, etc., que rodeiam o ser humano), e acima representa-
es simblicas utilizadas na matemtica e na programao. Grande parte do trabalho
para a referida traduo pertence Algoritmia, pois necessrio partir de uma lingua-
gem em que o Homem se exprime e comunica quase sem regras, para um mundo de
regras e estruturas que regem o computador.
Cabe Algoritmia como tcnica de desenvolvimento de algoritmos, uma primeira
descrio das aces necessrias e suficientes para resolver um problema e obter resul-
tados, podendo-se considerar um algoritmo como o esquisso de um programa.

Um algoritmo pode ser definido como uma sequncia


ordenada, e sem ambiguidades, de passos (em nmero
finito) que levam resoluo de um problema.

Apesar do termo em si ser novo, o conceito bastante familiar: de uma forma


muitas vezes explcita recorre-se ao uso de algoritmos (por exemplo, a procura de um
nmero de telefone, a determinao de um caminho para um determinado lugar, a elabo-
rao de uma receita culinria, a pesquisa da avaria de uma viatura, etc.); e outras vezes
de uma forma implcita (por exemplo, por um CD a tocar, fazer um telefonema, etc.)
Embora o nmero e a sequncia de passos, associados a uma determinada tare-
fa, possa parecer de fcil compreenso enquanto agente executor dessa mesma tarefa,
j a linguagem e descrio ter de ser diferente para outro executor . Por exemplo, o
projecto e clculos envolvidos na elaborao da planta de uma casa resulta num algoritmo

Antnio M. P. Sousa da Silva Algoritmia - 9


INFORMTICA

com um conjunto de desenhos e indicaes para o executor-construtor executar; se a


tarefa de clculo e desenho for executada por um programa num executor-computador,
ento as descries das aces de clculo e desenho tm de ser refinadas num algoritmo
para converso em instrues de uma linguagem de programao.
De tudo o que foi dito, conclui-se que o uso de algoritmos tem como objectivo final
fazer uma descrio ao nvel do executor, isto , detalhar as aces em instrues ou
ordens de acordo com as possibilidades do agente executor (no caso o computador).
O seguinte exemplo trata, com um algoritmo, a obteno de uma chamada telef-
nica interurbana (numa rede automtica):

1 Levantar o auscultador
2 Marcar o indicativo e o nmero de telefone local
3 Aguardar at obter resposta humana
4 Se for obtida resposta humana ento
4.1 Falar
Caso contrrio
4.2 Pousar o auscultador

A sequncia de instrues finita e foram utilizadas representaes numricas e


de indentao das instrues (alinhamento do texto) para facilitar a distino de qual a
instruo seguinte a executar.
Para um executor que no soubesse o significado de marcar ou de sinal de
chamada, ou reconhecer todas as indicaes feitas, era necessrio avanar no grau de
detalhe. Finalmente, salienta-se que, a utilizao deste algoritmo no poderia ter xito,
se no se dispuser dos dados (de entrada) relativos ao indicativo da zona de destino e
nmero de telefone.
Foi usada a linguagem descritiva corrente, para apresentao do algoritmo pas-
so-a-passo, no entanto, eles podem ser expressos de outras formas.

Tipos de Algoritmos

1. Descrio narrativa;
2. Descrio detalhada em linguagem corrente dos passos para a resoluo;
3. Descrio detalhada em pseudocdigo dos passos para a resoluo;
4. Fluxogramas;

Veja-se, com o exemplo simples da soma de dois nmeros A e B, como construir


um algoritmo para cada um das quatro representaes anteriores.

Antnio M. P. Sousa da Silva Algoritmia - 10


INFORMTICA

Descrio narrativa
narrada, em linguagem corrente, a resoluo do problema.

Ler ou pedir dois nmeros chamados A e B. Em seguida calcular a sua


soma e guard-la no nmero chamado C. Por ltimo escrever ou fornecer o
valor de C.

Descrio, passo a passo, em linguagem corrente


feita uma descrio detalhada recorrendo linguagem corrente, tentando man-
ter um certo rigor e clareza. Os passos so numerados e a escrita indentada para
facilitar a distino de qual o passo ou instruo a executar a seguir (como no algoritmo
da pgina anterior e no exerccio resolvido n 1)
.
Passo 1 : Pedir o nmero A
Passo 2 : Pedir o nmero B
Passo 3 : Fazer C tomar o valor de A + B
Passo 4 : Fornecer o nmero C

Pseudocdigo
utilizada uma sequncia de frases (em portugus) e uma simbologia muito pr-
xima da usada por uma linguagem de programao, para descrever as aces do algoritmo,
que se convencionam de uma forma abreviada em relao descrio em linguagem
corrente (tipo de algoritmo anterior). O pseudocdigo no pode ser implementado direc-
tamente no computador, mas o formalismo implcito muito semelhante a muitas lingua-
gens de programao (como por exemplo o PASCAL). Nada impede, no entanto, que
fosse construdo um compilador que aceitasse o mesmo (da o nome pseudocdigo).

Ler A
Ler B
CA+B
Escrever C

Fluxogramas
Consiste em representar de uma forma grfica a descrio de um algoritmo. Para
o efeito so utilizados smbolos geomtricos (diagramas) e setas (fluxos) indicando um
sentido de execuo da sequncia:

Antnio M. P. Sousa da Silva Algoritmia - 11


INFORMTICA

Incio INCIO OU FIM DO PROGRAMA Incio

A Ler A
LER A E B PELO TECLADO

Ler B
B ENTRADA/SADA
OU
C <- A + B PROCESSAMENTO INTERNO C <- A + B

C Escrever C
ESCREVER C NO MONITOR

Fim Fim

O problema do exemplo apresentado to simples, que poderia surgir a tentao


de o escrever directamente numa linguagem de programao. O tempo e a prtica vo
encarregar-se de demonstrar que mesmo em problemas pouco complexos uma viso
global, planeamento e respectivo algoritmo so indispensveis. A elaborao de um
algoritmo permite tambm a abstraco de certos conceitos e a no viciao num certo
estilo de programao prejudiciais boa anlise e resoluo do problema. Tal como em
outras actividades, a programao exige um certo grau de experincia e prtica, para
facilmente se encontrar o caminho mais indicado.
Como os algoritmos construdos destinam-se a serem codificados numa lingua-
gem de programao sero usados daqui em diante somente os fluxogramas e o
pseudocdigo.

Caractersticas de um Algoritmo

Qualquer algoritmo correctamente elaborado e algumas boas tcnicas de progra-


mao, devem transmitir ao programa as seguintes caractersticas desejveis:
Integridade Os clculos tero de ser correctamente efectuados.
Clareza Um programa deve ser facilmente lido e entendido tanto pelo pro-
gramador como por outro utilizador.
Simplicidade O programa dever ter uma estrutura simples e linear.
Eficincia Tem a ver com a velocidade de execuo e com a utilizao efectiva
de memria. Em programas complexos ter de existir um compro-
misso entre estas duas caractersticas.
Modularidade Os grandes programas devem ser divididos numa srie de subtarefas
identificveis. de boa prtica implementar cada uma destas
subtarefas em mdulos de programa separados.
Generalidade Quer-se um programa que seja to genrico quanto possvel, de
forma a abranger um grande nmero de tipo diferentes de dados.
Antnio M. P. Sousa da Silva Algoritmia - 12
INFORMTICA

O rigor imposto na descrio dos algoritmos bem como a insistncia em determi-


nados pormenores que possam parecer excessivos para o Homem como agente execu-
tor, indispensvel em linguagens de programao onde o agente executor o compu-
tador.
Interessa agora estudar cada elemento constituinte dos algoritmos e a simbologia
usada para os descrever.

Dados

Em qualquer linguagem de programao trabalha-se com dados que so identifi-


cados e descritos na fase de resoluo do problema. Viu-se tambm, que as trs fun-
es bsicas de um programa so:
ler (pedir ou introduzir) os dados de entrada (input);
processar os dados de entrada e eventualmente outros que so constantes
escrever (sair ou fornecer) os dados de sada (output)
por isso fundamental saber que tipos de dados existem e como os manipular.

Tipos de dados

Os dados podem ser simples e devem ser entendidos como representando um


nico valor de um determinado tipo (um nmero, um valor lgico, um caracter ou uma
cadeia de caracteres); ou estruturados e representam um conjunto de valores.
Podem resumir-se e classificar-se no seguinte quadro:

inteiros (integer)
numricos reais (real)
Simples lgicos ou booleanos (boolean)
um caracter (char)

cadeia de caracteres (string)


tabelas, quadros ou matrizes (array)
Estruturados registos (record)
ficheiros (file)

Dados Numricos
Podem ser nmeros inteiros (sem casas decimais) ou reais (com casas decimais).
Devem ser entendidos como o so na matemtica, exceptuando o intervalo de valores.
Enquanto que na matemtica o intervalo infinito, num programa de computador devido
s limitaes de memria, o intervalo finito. Assim, tipicamente, um dado inteiro
Antnio M. P. Sousa da Silva Algoritmia - 13
INFORMTICA
representado por 2 bytes, pelo que s pode ser usado, sem erro, se estiver no intervalo
16
de -32 767+1 a +32 767 (2 bytes do uma combinao de 2 nmeros = 65536; metade
para os nmeros negativos e a outra metade para os positivos). No caso dos nmeros
reais o intervalo muito maior pois utilizam 8 bytes de memria, suficientes para a mai-
oria das aplicaes numricas correntes.

Dados Lgicos ou Booleanos


Representam os dois valores lgicos: Verdadeiro (true) ou Falso (false). So usa-
dos em situaes em que s existam dois estados possveis (Sim/No, 0/1, Activado/
Desactivado, Ligado/Desligado, etc.). So a base da maior parte das estruturas
algortmicas de controlo.

Dados Caracter ou Cadeia de Caracteres


Uma cadeia de caracteres uma sequncia de caracteres (isto , letras dgitos e
caracteres especiais) entre plicas ( e ). So utilizados para representar texto, mensa-
gens, nomes, moradas, etc. O nmero mximo de caracteres que pode ser includo numa
cadeia tipicamente de 255, suficientes para a maioria das necessidades.

Tabelas
Representa uma estrutura de dados sob a forma de linhas e colunas (como numa
folha de clculo ou no jogo Batalha Naval). Quando uma tabela s tem uma linha (ou
uma s coluna) chamada de vector. Cada elemento da tabela referenciado por inter-
mdio de um ndice (nmero da linha e nmero da coluna). Por exemplo o elemento [2,1]
corresponde ao dado que est na interseco da linha 2 com a coluna 1.
Tipicamente, uma tabela constituda por elementos todos do mesmo tipo, e
usada em situaes em que a informao tem de ser guardada em memria para que se
possa trat-la como um bloco ou individualmente.

Registos
Representa uma estrutura de dados composta por elementos de diferentes tipos
conhecidos por campos (como numa base de dados). usada para representar uma
entidade (um livro, um cliente, um produto, etc.) caracterizada por diferentes atributos
(nome, morada, telefone, etc.).

Ficheiros
Pode ser de qualquer um dos tipos anteriormente descritos e serve para guardar
os dados em memria secundria, uma vez que todos os outros tipos de dados residem
na memria central que como se sabe voltil.

Antnio M. P. Sousa da Silva Algoritmia - 14


INFORMTICA
Identificadores

Qualquer dado (de entrada, de sada ou auxiliar) e outros elementos de programa-


o devem ser identificados no programa por um nome: identificador.

Um identificador um nome normalmente atribudo, pelo


programador ou utilizador, a um elemento com que se
pretende trabalhar dentro de um programa.

Este nome deve ser sugestivo, isto , deve estar de acordo com o seu significado ou
funo dentro do programa.
H tambm algumas regras a seguir para construir um identificador correctamente
quando for usada uma linguagem de programao em vez do pseudocdigo; para j
conveniente que os nomes compostos no levem espaos (por exemplo o
identificador nmero 1 dever ser nmero1 ou nmero_1).
A atribuio correcta de um nome fundamental para transmitir clareza ao algoritmo
e por conseguinte ao programa.
o dicionrio de dados elaborado na fase de resoluo do problema que os dever
descrever em termos de nome, tipo e significado.

Variveis e constantes

Como se sabe, uma das caractersticas de um programa a sua generalidade,


pelo que, ele no poder funcionar s para um valor especfico de dados. Por exemplo,
um programa que permita calcular a rea de um crculo no o poder fazer s para um
caso particular de um crculo com 2 metros de raio: ter de calcular a rea de qualquer
crculo (qualquer valor do raio). Assim, necessrio que o dado de entrada (o raio) seja
varivel (o mesmo acontece para o dado de sada, a rea, que depende do raio).

Um identificador cujo valor pode variar durante a execuo do


programa designado por varivel.

Do mesmo modo, h dados que so necessrios para o processamento mas cujo


valor no lido nem calculado: define-se e mantm-se constante durante a execuo do
programa. Por exemplo, para o clculo da rea de um crculo necessrio conhecer o
valor de (3,1416...) que sempre o mesmo qualquer que seja o crculo.

O identificador designado por constante se o elemento de informa-


o que representa se mantm inaltervel ao longo do programa.

Antnio M. P. Sousa da Silva Algoritmia - 15


INFORMTICA

Identificadores e Endereos de Memria

Quando se trata de uma varivel, um identificador ter de ser entendido de formas


diferentes:
No algoritmo e no cdigo-fonte do programa deve ser entendido como j foi referido:
representa simbolicamente um dado, isto , designa simbolicamente por meio de
uma letra ou palavra um endereo de memria.
Na compilao vai traduzir-se num endereo relativo de memria, ao qual ir
corresponder um determinado espao nessa mesma memria (2 bytes no caso da
varivel ser inteira) para armazenar o dado (o valor que a dita varivel assume a
qualquer momento) quando o programa for executado.
Na execuo, o identificador (que comeou por ser um endereo simblico e depois
passou a relativo) passa a representar um endereo absoluto, isto , torna-se efecti-
vamente um endereo de memria principal do computador mas ainda sem qualquer
valor. Quando o dado representado pelo identificador utilizado ao ser executado o
programa, o seu valor ficar armazenado na zona de memria correspondente.
Esquematicamente:

No algoritmo ou no cdigo-fonte tem-se a instruo:


Ler A A REPRESENTAO SIMBLICA DE UM DADO

Depois da compilao desta instruo:


1
CDIGO-MQUINA DO COMANDO LER ENDEREO RELATIVO DE A
No incio da execuo do programa tem-se na memria, alm do programa, uma zona de
dados com:
1 2 3 ... ENDEREOS ABSOLUTOS
CONTEDO

Quando a execuo chega a esta instruo pedido um valor ao utilizador (por exemplo
2,5) e a memria fica:
1 2 3 ... ENDEREOS ABSOLUTOS
2.5 CONTEDO

Pode, tipicamente, atribui-se um valor a uma varivel (colocar um valor na zona de


memria reservada a essa varivel) de duas formas (como se ver adiante):
lendo o seu valor com uma instruo de leitura (por exemplo, Ler A)
por intermdio de uma instruo de atribuio (por exemplo, C (A + B)

Antnio M. P. Sousa da Silva Algoritmia - 16


INFORMTICA

Quando o identificador uma constante deve ser entendido no algoritmo e no


cdigo-fonte do mesmo modo que uma varivel no sendo, no entanto, candidato a en-
dereo de memria uma vez que o valor da constante fica incorporado no cdigo do
programa durante a compilao. H no entanto linguagens de programao que no
fazem distino entre variveis e constantes nos termos antes descritos: ao programa-
dor que cabe a tarefa de ter cuidado em no alterar, inadvertidamente, o valor que consi-
derou constante.

Operaes com os Dados

A maior parte das vezes, os dados (variveis e constantes) e outros elementos de


programao tero de ser operacionados. Segue-se um resumo das operaes usuais,
e sua simbologia, aplicveis aos diferentes tipos de dados simples.

TIPO DE DADOS OPERADOR DESCRIO TIPO DE RESULTADO

+ ADIO INTEIRO
- SUBTRACO INTEIRO
* MULTIPLICAO INTEIRO
INTEIROS / DIVISO REAL REAL
**, ^ POTENCIAO INTEIRO
DIV DIVISO INTEIRA INTEIRO
MOD, % RESTO DA DIVISO INTEIRA INTEIRO
+ ADIO REAL
- SUBTRACO REAL
REAIS * MULTIPLICAO REAL
/ DIVISO REAL
**, ^ POTENCIAO REAL
AND, E CONJUNO VALOR LGICO
LGICOS OR, OU DISJUNO VALOR LGICO
NOT, NO NEGAO VALOR LGICO
CARACTERES + CONCATENAO CARACTER

Uma operao, na sua forma simples, constituda por dois (binria) ou um (unria)
operandos e um operador, e fornece um resultado de um determinado tipo.
Existe ainda uma classe importante de operadores, que podem ter como operandos
qualquer tipo de dados simples. So os operadores relacionais que permitem estabele-
cer uma relao de ordem (comparao) entre dados do mesmo tipo e, por isso, o resul-
tado sempre um valor lgico.
A tabela seguinte resume este tipo de operadores:

Antnio M. P. Sousa da Silva Algoritmia - 17


INFORMTICA

OPERADOR DESCRIO

= COMPARAO (IGUALDADE)
<>, # COMPARAO (DESIGUALDADE)
> COMPARAO (MAIOR QUE)
< COMPARAO (MENOR QUE)
>= COMPARAO (MAIOR OU IGUAL QUE)
<= COMPARAO (MENOR OU IGUAL QUE)

Expresses

Os diferentes tipos de dados juntamente com as suas operaes podem ser liga-
dos para formar expresses.

Uma expresso um conjunto de operandos (nmeros,


constantes, variveis, etc.) agrupados por certos operadores
( * , + , etc.) constituindo formas algbricas que represen-
tam um valor, isto , um elemento de informao simples.

Conforme o tipo de valor que gera, uma expresso pode ser classificada como,
inteira, real, lgica (booleana ou condio) ou de caracter. Exemplos:
2 + 5 * 3 - 4, uma expresso numrica (inteira) com o valor 13;
(X = 2) AND (5 > 7), uma expresso booleana com valor FALSO;
A < B, uma expresso booleana com valor VERDADEIRO (ver tabela ASCII).

Existem algumas regras que devem ser seguidas para construir correctamente
uma expresso em pseudocdigo (e numa linguagem de programao):
1. No so permitidos dois operadores sucessivos. Podem contudo ser usados parntesis
para separar operadores sucessivos ou para clarificar uma expresso, mesmo que
eles no sejam necessrios;
2. Uma expresso pode consistir num nico identificador que usado como constante ou
varivel ou num literal (um nmero, valor lgico ou caracter explicitamente indicado);
3. O nome de uma funo pode ser usado no lugar de um identificador de constante ou
de varivel dentro de uma expresso (as funes sero estudadas mais frente).
4. Os identificadores no definidos e/ou sem um valor em memria, no podem aparecer
numa expresso (isto , antes de o usar deve-se atribuir-lhe um valor);
5. Um identificador precedido dum sinal menos equivalente multiplicao por -1.
Assim -a*b equivalente a -1*a*b;

Antnio M. P. Sousa da Silva Algoritmia - 18


INFORMTICA

6. No podem aparecer dois operadores aritmticos consecutivos. A expresso a*-b


incorrecta, mas a*(-b) j correcta;
7. As operaes aritmticas no podem estar implcitas (como na notao matemtica).
A expresso 2(x+y) est incorrecta, mas 2*(x+y) correcta;
8. O nmero de parntesis abertos ( esquerda) tem de ser igual ao nmero de parntesis
fechados ( direita);

Uma expresso pode por vezes tornar-se bastante complexa devido presena
de mltiplos operadores. Nestes casos necessrio especificar a ordem pela qual essas
operaes so efectuadas (ordem de precedncia). Assim:

PRECEDNCIA OPERADOR(ES)

1 (MAIS ELEVADO) A PRIMEIRA A REALIZAR NOT


2 * / DIV MOD AND
3 + - OR
4 (MAIS BAIXO) AS LTIMAS A REALIZAR = <> < <= > >=

As operaes dentro de parntesis devem ser as primeiras a ser realizadas e


dentro de cada grupo de precedncia so efectuadas medida que aparecem, isto , da
esquerda para a direita (esta ordem pode ser diferente conforme as linguagens).

Instrues

Uma instruo uma frase que indica uma ordem, ou um conjunto de ordens, que
ir obrigar o computador a efectuar certas aces ou operaes.
Existem dois tipos bsicos de instrues: as simples, que so instrues nicas
ou incondicionais que executam uma ou mais tarefas; e as estruturadas, que so forma-
das por vrias instrues que podem ou no ser executas repetidamente ou no caso de
se verificar uma condio. Umas e outras so formadas por comandos, que so, nor-
malmente, palavras em portugus (no pseudocdigo) ou em Ingls (no cdigo-fonte),
abreviaturas ou conjunto de caracteres que sugerem a aco que desempenhada.
Por exemplo:

Ler (read), Escrever (write), Imprimir (print), etc.

De aqui em diante, os comandos sero escritos em negrito para se distinguirem.

Antnio M. P. Sousa da Silva Algoritmia - 19


INFORMTICA

de leitura/escrita
Simples de atribuio
de chamada de um mdulo de programao (assunto a tratar)
salto para outra parte do programa (goto)

compostas
Estruturadas repetitivas
condicionais

Instruo de Leitura

As entradas de dados tm de ser indicadas ao agente executor com instrues no


algoritmo. A entrada obriga o executor (computador) a recolher do exterior (pelo teclado,
discos, rato, etc.) o valor necessrio para atribuir um valor a uma varivel, com uma
frase do tipo:

Ler lista de variveis separadas por vrgulas

Instruo de Escrita

As sadas de dados tm tambm de ser indicadas ao agente executor com


instrues no algoritmo. Vo obrigar o agente executor a mostrar os resultados (conte-
dos das variveis) e/ou mensagens ao utilizador. Ser utilizada uma frase do tipo:

Escrever lista de identificadores separados por vrgulas e/ou


mensagens (entre plicas) separadas por vrgulas

Instruo de Atribuio ou de Afectao

Fornece outra forma de alterar/atribuir um valor a uma varivel, sem ser por leitu-
ra (por exemplo um clculo). Ser utilizada uma frase do gnero:

varivel expresso

Ao executar esta instruo, o agente executor ter primeiro de obter o valor cor-
respondente expresso (lado esquerdo do sinal de afectao) e coloc-la na varivel
(lado direito do sinal de afectao). Se a varivel possuir um valor antes desta instruo,
ele ser perdido, ficando no seu lugar o valor da expresso. necessrio que a varivel
e a expresso sejam do mesmo tipo. Por exemplo, a instruo:

Antnio M. P. Sousa da Silva Algoritmia - 20


INFORMTICA
Area 3.1416 * raio * * 2
vai obrigar o valor da expresso 3.1416 * raio ** 2 a ser atribudo varivel Area.

Exemplo

Com tudo o que j foi dito pode-se, por exemplo, resolver completamente e por
meios informticos (construindo um programa) o problema do clculo da rea de crcu-
los.

Anlise
Sendo o problema bastante simples bastar atender ao seguinte:
2
1. Matematicamente, a frmula para o clculo da rea de um crculo dada por: A = r
sendo r o raio do crculo, A a sua rea e um valor constante igual a 3.1416... (com
mais ou menos casas decimais conforme a preciso pretendida para a rea e de
acordo com a preciso do raio)
2. Sero necessrios 3 passos para resolver o problema:
Entra o raio Calcula a Sai a rea
rea

Concepo
Dicionrio (declarao) dos dados:

E/S/A ou Const Nome Tipo Descrio


Entrada raio real raio do crculo
Sada area real rea do crculo a calcular
Constante pi real = 3.1416

Pseudocdigo Fluxograma
Incio

Escrever Introduza o valor do Raio:


Introduza o valor do raio
Ler raio
area pi * raio ** 2 raio

Escrever A rea :, area area <- pi * raio ** 2

A rea :

area

Testes Fim

O algoritmo s se deve dar como finalizado depois de ser testado com dados de
entrada para os quais se tenha a certeza de qual o resultado correcto. Este processo
conhecido por traagem (trace). Por exemplo, fcil de reconhecer que se o valor do
raio for de uma unidade o resultado ser o valor de Pi. Confirmando:
Antnio M. P. Sousa da Silva Algoritmia - 21
INFORMTICA

Ler raio raio = 1


area pi *raio*raio area = 3.1416*1*1
area = 3.1416
Escrever area 3.1416

Sendo assim, o programa teria o seguinte output (a menos da apresentao do


resultado):

Introduza o valor do raio: 1


A rea : 3.1416

Finalmente, como reviso dos conceitos estudados mostrado o quadro seguinte


que identifica todos os elementos de programao conhecidos e que fazem parte da
estrutura do pseudocdigo do exemplo anterior. Note-se que as cadeias de caracteres
(entre plicas) e o nmero (2), so parte intrnseca da linguagem e por isso so automati-
camente reconhecidos por ela. Estes elementos so muitas vezes designados por lite-
rais como j antes se referiu.

Dados Variveis raio e area


Constantes pi
Operaes Reais * e **
Expresso Real Pi * raio ** 2
Comandos Escrever e Ler
Instrues Leitura Ler raio
Escrita Escrever Introduza o valor do raio.'
Escrever A rea : , area
Atribuio area <- pi * raio **2

Antnio M. P. Sousa da Silva Algoritmia - 22


INFORMTICA

Melhoramento de um algoritmo

Para uma melhor apresentao e compreenso do algoritmo e tambm para o


aproximar ainda mais a uma linguagem de programao estruturada (no caso o PASCAL)
costume acrescentar-lhe o seguinte:

Limites

Convenciona-se que os algoritmos so delimitados por duas palavras para o efei-


to: Incio e Fim, para se saber onde comea e onde acaba (como j se fez no caso dos
fluxogramas)

Comentrios

Em muitas situaes, quando surgem instrues de difcil compreenso, costu-


me coment-las com um texto delimitado por duas chavetas ( { e } ). Isto permite tambm
entender melhor o algotitmo quando mais tarde se pretender melhor-lo (criar nova ver-
so).

Declarao dos dados

Os dados do programa, em vez de serem descritos unicamente no dicionrio de


dados, podem ser declarados no incio do algoritmo. Isto torna-o mais parecido com o
futuro cdigo-fonte.

Com tudo que foi dito, o pseudocdigo do exemplo ficaria como:

{Algoritmo para calcular a rea de um crculo}


Incio
{ Declarao dos dados}
area, raio Reais
pi = 3.1416
{Instrues}
Escrever Introduza o valor do Raio :
Ler raio
{clculo da rea}
area pi * raio ** 2
Escrever A rea :, area
Fim
Antnio M. P. Sousa da Silva Algoritmia - 23
INFORMTICA

II - ALGORITMIA - Estruturas de Controlo

Em todos os algoritmos estudados at agora, cada instruo era executada de


uma nica vez, pela mesma ordem em que aparecia no programa formando uma se-
quncia de instrues simples. No entanto, este tipo de algoritmos na prtica pouco
frequente, uma vez que no inclui nenhuma estrutura de controlo, como:
. Testes para determinar se certas condies so verdadeiras ou falsas para deci-
dir se se deve executar uma ou outra instruo;
. Execuo repetida de grupos de instrues um certo nmero de vezes ou en-
quanto se verificar uma condio;
. Conjunto de instrues que se repete em diversos pontos do programa, tornando-
se ento til passar a trat-lo como um mdulo de programao (rotina ou
subprograma).
Isto , necessrio alterar a sequncia normal da execuo das instrues do
programa utilizando uma sequncia de instrues estruturadas. (Convm, para me-
lhor compreender o que se segue, relembrar a noo de instruo, tipos de instrues,
expresses booleanas e os operadores relacionais e lgicos.)

Instruo Composta

um conjunto de instrues, geralmente englobadas entre dois delimitadores e/


ou escritas de uma forma indentada, considerado como um bloco. Esta forma de estruturar
instrues no existe de uma forma explcita em todas as linguagens de programao.
No entanto, como o PASCAL (e o C) as utilizam so aqui abordadas.
Segue-se um exemplo esquemtico de uma instruo composta:

Instruo 1
Instruo 2
instruo 2.1
instruo 2.2 INSTRUO COMPOSTA
instruo 2.3
Instruo 3
Instruo 4

Deve indentar-se a estrutura para definir o seu mbito de actuao, isto , desloc-
la em relao margem esquerda. No exemplo entende-se perfeitamente que as instrues
2.1, 2.2 e 2.3 esto subordinadas instruo 2. Alm de tornar mais claros os algoritmos,
o uso da indentao torna desnecessrio utilizar palavras, parntesis ou caracteres es-
peciais para indicar o incio o e fim da estrutura. No entanto (como se ver no caso do
Antnio M. P. Sousa da Silva Algoritmia - 24
INFORMTICA
PASCAL), a maior parte das linguagens de programao estruturadas usa delimitadores
para indicar o incio e o fim das instrues compostas.
Nas linguagens de programao em que possvel criar mdulos de programa
(rotinas ou subprogramas), pode optar-se por transformar uma instruo composta (prin-
cipalmente se ela se repete vrias vezes ao longo do programa) num mdulo, que
descrito algures fora da sequncia normal, sendo depois chamado onde antes estaria a
referida instruo composta.

Instruo SE (IF)

uma estrutura condicional de controlo, que permite ao agente executor reali-


zar uma aco, unicamente se uma expresso booleana tiver um determinado valor (ver-
dadeiro ou falso). Esta estrutura das mais difundidas e existe em todas as linguagens
de programao, folhas de clculo e em outras aplicaes. Pode apresentar as formas:

Instruo selectiva simples SE-ENTO (IF-THEN)


a forma mais simples da estrutura SE, cuja forma geral :

SE expresso booleana ENTO instruo FSE

A parte relativa instruo ser executada se e s se a expresso booleana for


verdadeira. Se a expresso booleana for falsa, a parte relativa instruo ser ignorada.
No esquecer que a instruo pode ser simples ou estruturada, sendo normalmente uma
instruo composta. Segue-se o diagrama de fluxo desta estrutura.

SE

falsa ESTA INSTRUO PODE SER LIDA ASSIM:


expresso
booleana SE A EXPRESSO BOOLEANA TIVER O VALOR

ENTO
verdadeira VERDADEIRO EXECUTADA A INSTRUO. SE
TIVER O VALOR FALSO NO EXECUTADA A
instruo
INSTRUO.
FSE

Exemplos
1. SE raio <= 0 ENTO Escrever Valor incorrecto para o raio FSE
2. SE raio > 0 ENTO
area pi * r ** 2
Escrever area
FSE
Antnio M. P. Sousa da Silva Algoritmia - 25
INFORMTICA
3. SE fim ENTO
Escrever FIM DO PROGRAMA
FSE

No primeiro exemplo, a instruo de leitura s ser executada se a varivel raio


for menor ou igual a 0. No segundo exemplo executada uma instruo composta se a
varivel raio for maior que 0. No ltimo exemplo a expresso booleana ou condio (fim)
ela prpria uma varivel do tipo booleano (tem o valor verdadeiro ou falso) e por isso s
ser executada a instruo de escrita se ela tiver o valor VERDADEIRO. Note-se que o
exemplo 1 poderia ser escrito com o formato usado no exemplo 3 uma vez que s
executada uma instruo simples. J no caso do exemplo 2, o uso da indentao ilustra
a natureza subordinada da instruo composta dentro da estrutura SE.
Finalmente, ser convencionado que as palavras chave da estrutura sero escri-
tas em negrito e em maisculas porque so palavras reservadas, isto , mais nenhum
elemento de programao poder ser identificado com palavras deste tipo.

Instruo selectiva com alternativa SE-ENTO-SENO (IF-THEN-ELSE)


outra forma da estrutura SE (que engloba a anterior), utilizada quando neces-
srio seleccionar, uma de entre duas alternativas em curso de aco. Tem a seguinte
forma geral e respectivo fluxograma:
SE

SE expresso booleana ENTO verdadeira


expresso
falsa
booleana
instruo1
ENTO SENO
SENO
instruo 1 instruo 2
instruao2
FSE
FSE

Neste caso, a instruo1 ser executada se a expresso booleana for verdadeira,


seno ser executada a instruo 2. Ou seja, executada uma ou outra instruo, mas
nunca as duas ao mesmo tempo.

Exemplos
1. SE db >= 1000 ENTO taxa 0.2 SENO taxa 0.1 * salario FSE
ou com a apresentao mais conveniente para fcil leitura:
SE db >= 1000 ENTO
taxa 0.2
SENO
taxa 0.1 * salario
FSE

Antnio M. P. Sousa da Silva Algoritmia - 26


INFORMTICA

2. SE a >= b ENTO
Escrever a, maior ou igual a, b
SENO
Escrever a, menor que , b
FSE

3. A estrutura SE-ENTO-SENO s uma maneira de fornecer um meio mais rpido e


claro de programar, uma vez que, ela pode perfeitamente ser construda com duas
instrues SE simples:
SE expresso booleana ENTO instruo 1
SE NO expresso booleana ENTO instruo 2

4. Ver exerccio resolvido n 2

Instrues SE encaixadas
As estruturas SE podem ser encaixadas (nexted) umas nas outras. Seguem-se
algumas formas de encaixe, onde eb1,eb2, ... so expresses booleanas e i1, i2, ... so
instrues.
1. SE eb1 ENTO
SE eb2 ENTO
i1 executa i3 (outra instruo SE)
SENO = i3 se eb1 verdadeira, seno no faz nada
i2
FSE
FSE

Note-se que este caso no mais que a substituio de uma instruo por uma
estrutura SE-ENTO-SENO. Seguindo com este processo podem-se substituir as
instrues representadas por i1 e i2 por outras estruturas SE. Seria assim obtida um
encaixe multinvel.

2. SE eb1 ENTO
SE eb2 ENTO
i1 executa i4 se eb1 verdadeira,
SENO = i4 seno executa i3
i2
FSE
SENO
i3
FSE
Antnio M. P. Sousa da Silva Algoritmia - 27
INFORMTICA

3. SE eb1 ENTO SE eb2 ENTO i1 SENO i2 FSE FSE


Em cada uma das formas anteriores, a natureza subordinada da estrutura interior
SE indicada pela sua indentao. Neste caso, no claro qual a expresso booleana
que est associada com SENO. contudo, a expresso eb2 que lhe est associada
pelo que esta forma equivalente ao primeiro caso apresentado.
Se se quisesse associar a parte SENO com eb1 e no eb2, isto , se i2 s deve
ser executada quando eb1 for falsa, ficaria:

SE eb1 ENTO
SE eb2 ENTO
i1
FSE
SENO
i2
FSE

Exemplo

Calcular o maior de trs nmeros inteiros dados.


Anlise
Se os nmeros forem identificados por a, b e c, para que um deles seja maior que
os outros dois tem de ser comparado dessa forma, isto :
Para que a seja maior que b e c ter de ser a > b e a > c. Se no se verificarem
estas condies porque o maior nmero ou b ou c e por isso devem eles tambm ser
comparados. Obviamente que a comparao poderia ser iniciada com b ou c em vez de
a, tendo o problema a mesma resoluo.
Se nenhuma destas condies se verificar porque os nmero so iguais dois a
dois ou so os trs iguais, isto , se a igual a b e so os dois maiores que c o maior
nmero escrito pelo algoritmo b; se b igual a c e so os dois maiores que a, o maior
nmero escrito c; se so os trs iguais o maior nmero escrito pelo algoritmo c.

Concepo
Dicionrio de dados

E/S Nome Tipo Descrio


E a inteiro 1 nmero dado
E b inteiro 2 nmero dado
E c inteiro 3 nmero dado
S a ou b ou c inteiro o valor de sada o maior dos trs
Antnio M. P. Sousa da Silva Algoritmia - 28
INFORMTICA

Pseudocdigo
Inicio
{declarao de variveis}
a, b, c inteiros
{instrues}
Escrever Introduza os trs nmero a comparar:
Ler a,b,c
SE a > b e a > c ENTO
Escrever O maior nmero , a
SENO
SE b > c ENTO
Escrever O maior nmero , b
SENO
Escrever O maior nmero , c
FSE
FSE
Fim

Fluxograma
Incio

Ler a, b, c

Sim No
a>b e a>c

Sim No
Escrever 'o maior nmero ', a
b>c

Escrever 'o maior nmero ', b

Escrever 'o maior nmero ', c

Fim

Output
Introduza os trs nmeros a comparar: 7 10 1

O maior nmero 10

Antnio M. P. Sousa da Silva Algoritmia - 29


INFORMTICA

Este problema poderia ser resolvido de outra forma (que a usada, como se ver,
quando existem muitos nmeros e no possvel definir variveis para todos eles).
Assim, pode-se definir uma varivel, que partida ter um valor muito pequeno,
(ou pelo menos que se saiba que menor que os nmeros a comparar), e depois cada
nmero comparado com ela. Quando for encontrado um nmero maior que o valor
dessa varivel, esse nmero ser atribudo varivel, que no fim do processamento
conter o maior dos nmeros:

Inicio
{declarao de variveis}
a, b, c inteiros
maior inteiro
{instrues}
maior -32767 {menor nmero inteiro}
Escrever Introduza os trs nmero a comparar
Ler a,b,c
SE a > maior ENTO
maior a
FSE
SE b > maior ENTO
maior b
FSE
SE c > maior ENTO
maior c
FSE
Escrever O maior nmero , maior
Fim

Instruo de Seleco Mltipla CASO (CASE)

uma instruo estruturada de controlo condicional que permite ao agente exe-


cutor fazer uma seleco mltipla, isto , permite que uma instruo sejam escolhida
de entre vrias disponveis. A seleco baseada no valor corrente de uma expresso
referida como selector. O selector pode ser de qualquer tipo simples no real e toma
muitas vezes a forma de uma nica varivel simples.
Esta estrutura existe em muitas linguagens de programao para tornar mais cla-
ros os programas/algoritmos e para facilitar o trabalho do programador, uma vez que,
com instrues SE-ENTO-SENO pode construir-se a estrutura CASO.

Antnio M. P. Sousa da Silva Algoritmia - 30


INFORMTICA
A forma geral desta estrutura :

CASO expresso SEJA


lista de etiquetas de caso 1 : instruo1
lista de etiquetas de caso 2 : instruo2
..... . ........ . .... . ...........
lista de etiquetas de caso n : instruo n
A PARTE DA ESTRUTURA DELIMITADA
[SENO PELOS PARNTESIS RECTOS OPCIONAL,

instruo alternativa ] ISTO , PODE SER USADA OU NO

FCASO CONFORME AS NECESSIDADES.

Cada etiqueta de caso representa um dos valores permitidos pela expresso. As-
sim, se a expresso de um certo tipo simples, as etiquetas de caso representam valo-
res do mesmo tipo que caiam dentro de uma gama permitida. Se tal no acontecer a
estrutura CASO ou ignorada ou executada a instruo alternativa, se existir a clusu-
la SENO. Seguem-se algumas regras de uso das etiquetas de caso.
1. Podem aparecer por qualquer ordem;
2. As etiquetas podem aparecer numa s lista, executando-se a instruo corresponden-
te logo que o selector tome um dos valores da lista.
3. As instrues podem ser simples ou estruturadas. vulgar o uso de instrues com-
postas. As instrues no necessitam de ser nicas, isto , a mesma instruo pode
ser usada com duas ou mais listas de etiquetas de caso.

Exemplo (ver tambm exerccio resolvido n 3) Incio

... Ler notaQuantitativa

Ler NotaQuantitativa Sim


NotaQuantitativa >= 1 e
NotaQualitativa <- 'Mau'
NotaQuantitativa <= 4
CASO NotaQuantitativa SEJA
No
1,2,3,4 : NotaQualitativa Mau
Sim
NotaQuantitativa >= 5 e
5,6,7,8,9 : NotaQualitativa Medocre NotaQuantitativa <= 9
NotaQualitativa <- 'Medocre'

10,11,12,13 : NotaQualitativa Suficiente No

14,15,16,17 : NotaQualitativa Bom NotaQuantitativa >= 10 e


Sim
NotaQualitativa <- 'Suficiente'
NotaQuantitativa <= 13

18,19,20 : NotaQualitativa Muito Bom


No
SENO Sim
NotaQuantitativa >= 14 e
NotaQualitativa <- 'Bom'
Escrever Nota invlida NotaQuantitativa <= 17

FCASO No

... NotaQuantitativa >= 18 e


NotaQuantitativa <= 20
Sim
NotaQualitativa <- 'Muito Bom'

No

Escrever 'Nota invlida

Fim

Antnio M. P. Sousa da Silva Algoritmia - 31


INFORMTICA

Neste exemplo lida uma nota quantitativa (de 0 a 20) e conforme o seu valor
definida uma nota qualitativa (cadeia de caracteres que fica guardada na varivel
NotaQualitativa). Se a nota no estiver na gama permitida no h correspondncia com
nenhuma etiqueta de caso e executada a parte SENO da estrutura CASO.
Como j se disse, a estrutura CASO uma simplificao de estruturas SE,
encadeadas e que testam igualdades ou intervalos de valores. Mostra-se a seguir o
mesmo troo do algoritmo, construdo desta forma, para se verificar que mais pesado e
mais difcil de ser entendido.
...
Ler NotaQuantitativa
SE NotaQuantitativa >= 1 e NotaQuantitativa <= 4 ENTO
NotaQualitativa Mau
SENO
SE NotaQuantitativa >= 5 e NotaQuantitativa <= 9 ENTO
NotaQualitativa Medocre
SENO
SE NotaQuantitativa >= 10 e NotaQuantitativa <= 13 ENTO
NotaQualitativa Suficiente
SENO
SE NotaQuantitativa >= 14 e NotaQuantitativa <= 17 ENTO
NotaQualitativa Bom
SENO
SE NotaQuantitativa >= 18 e NotaQuantitativa <= 20 ENTO
NotaQualitativa Muito Bom
SENO
Escrever Nota invlida
FSE
FSE
FSE
FSE
FSE
...

Instrues Repetitivas ou Ciclos (loops)

Frequentemente necessrio que o agente executor repita uma certa instruo


ou conjunto de instrues um determinado nmero de vezes ou enquanto se verificar
uma certa condio. Essa repetio, na maior parte das vezes, no tem que ser uma
repetio exacta das mesmas operaes, pois pode haver pelo meio certos dados (vari-
veis) que se vo alterando medida que o ciclo vai decorrendo.
Antnio M. P. Sousa da Silva Algoritmia - 32
INFORMTICA
Em algumas linguagens existe apenas uma instruo ou estrutura de controlo,
enquanto que noutras podem existir duas ou at trs como no caso do PASCAL. A esco-
lha da estrutura a usar vai depender das caractersticas do ciclo.

Instruo ENQUANTO-EXECUTAR (WHILE-DO)


uma estrutura de controlo, repetitiva, usada para efectuar ciclos condicionais.
A sua forma geral :

ENQUANTO

Falsa
Expreso
ENQUANTO expresso booleana EXECUTAR Booleana
Verdadeira
instruo EXECUTAR

FENQUANTO Instruo

FENQUANTO

A parte da estrutura correspondente instruo, ser executada repetidamente,


enquanto a expresso booleana se mantiver verdadeira. Esta instruo pode ser simples
ou estruturada, apesar de geralmente ser uma instruo composta que inclui uma carac-
terstica que pode alterar o valor da expresso booleana.
Como o teste da expresso booleana realizado antes da possvel execuo da
instruo, a estrutura ENQUANTO ser executada nenhuma ou mais vezes, dependen-
do do valor lgico da referida expresso booleana.
preciso ter cuidado em no criar uma repetio infinita, isto , a expresso
booleana nunca tomar o valor falso para parar o ciclo.

Exemplos
1. ...
1 contador 1
2 soma 0
3 ENQUANTO contador <= 20 EXECUTAR
3.1 Ler classificao
3.2 soma soma + classificao
3.3 contador contador + 1
FENQUANTO
...

Este troo de um algoritmo tem a finalidade de calcular a soma de 20 classifica-


es lidas. A varivel contador permite controlar este ciclo de modo a ter um nmero de
repeties igual ao nmero de classificaes a processar, isto , vai contando as classi-
ficaes at 20. So fundamentais as instrues 1 e 3.3; a primeira para iniciar o conta-
dor (correspondente primeira classificao) de modo que a expresso booleana (con-
Antnio M. P. Sousa da Silva Algoritmia - 33
INFORMTICA
tador <= 20) seja correctamente avaliada na primeira repetio do ciclo; a segunda para
ir somando ao contador uma unidade (correspondente 2, 3, ..., 20 classificaes) de
modo que o ciclo termine quando estiverem as 20 classificaes processadas. O mes-
mo acontece para o clculo da soma: so fundamentais as instrues 2 e 3.2; a primeira
para inicializar a varivel soma com zero (elemento neutro da adio) de modo que a
expresso soma + classificao seja correctamente avaliada na primeira repetio do
ciclo (notar que proibido usar variveis que no tenham um valor definido); a segunda
para ir acumulando a soma das classificaes.

2. ...
1 contador 1
2 maior -32767
3 ENQUANTO contador <= 3 EXECUTAR
3.1 Ler numero
3.2 SE numero > maior ENTO
maior numero
FSE
3.3 contador contador + 1
FENQUANTO
...
3. Ver exerccio resolvido n 4

Este troo de um algoritmo tem a finalidade de determinar o maior de trs nmeros


lidos ( a outra forma de resolver o problema descrito na pgina 174). Quanto o ciclo
controlado pela varivel contador terminar (depois de trs repeties correspondentes
aos trs nmeros lidos) a varivel maior conter o valor do maior dos trs nmeros lidos.

Instruo REPETIR-AT (REPEAT-UNTIL)


outra instruo estruturada, repetitiva de controlo, usada para efectuar ciclos
condicionais. semelhante estrutura ENQUANTO-EXECUTAR e, em alguns aspec-
tos, estas duas estruturas completam-se uma outra. A sua forma geral :

REPETIR

REPETIR Sequncia de
Instrues
sequncia de instrues
AT
Falsa
AT expresso booleana Expreso
Booleana
Verdadeira

Antnio M. P. Sousa da Silva Algoritmia - 34


INFORMTICA

A sequncia de instrues ser executada at que a expresso booleana se torne verda-


deira (ou dito de outra forma, enquanto a expresso booleana for falsa).
A sequncia de instrues ser sempre executada pelo menos uma vez, dado que
a expresso booleana testada s no fim da estrutura de controlo.
Com o que ficou dito anteriormente, podem-se tirar as diferenas entre as estrutu-
ras ENQUANTO e REPETIR:
1. Com ENQUANTO tem-se uma instruo a executar (embora possa ser composta),
enquanto que com REPETIR tem-se uma sequncia de instrues.
2. A instruo em ENQUANTO no ser executada se a expresso booleana for falsa,
uma vez que o teste feito no incio, enquanto que a sequncia de instrues em
REPETIR executada pelo menos uma vez, pois o teste feito no fim.

Exemplos
1. ...
contador 1
soma 0
REPETIR
Ler classificao
soma soma + classificao
contador contador + 1
AT contador > 20
...
2. contador 1
maior -32767
REPETIR
Ler numero
SE numero > maior ENTO
maior numero
FSE
contador contador + 1
AT contador > 3
...
3. Ver exerccio resolvido n 5

Comparando com o mesmos exemplos construdos com a estrutura ENQUANTO


pode ver-se que a nica diferena a expresso booleana ser a negao da usada com
aquela estrutura.
Pode ento concluir-se que a escolha de uma destas duas estruturas repetitivas
geralmente uma questo de preferncia pessoal. Contudo, a escolha influenciada pela
vantagem de testar a expresso booleana no princpio ou no fim da estrutura de controlo.
Antnio M. P. Sousa da Silva Algoritmia - 35
INFORMTICA

Instruo PARA-AT-EXECUTAR (FOR-TO-DO)


uma instruo estruturada, repetitiva de controlo, usada para efectuar ciclos
incondicionais, isto , esta estrutura permite que uma aco seja repetida um nmero
especificado de vezes. Pode apresentar vrias formas. A mais usada :

PARA varivel de controlo valor inicial AT valor final EXECUTAR


instruo
FPARA

Esta estrutura de repetio controlada por uma varivel (varivel de controlo)


que parte de um determinado valor inicial e incrementada (soma de uma unidade se for
do tipo inteiro) at um determinado valor final, isto , inicialmente, varivel de controlo
atribudo o valor especificado por valor inicial , depois esta varivel toma o valor se-
guinte, automaticamente, cada vez que a instruo repetida, at atingir e tomar o valor
especificado por valor final. Veja-se o fluxograma desta estrutura para melhor se compre-
ender o seu funcionamento.

PARA

Varivel de controlo<- valor inicial

No
Varivel de controlo <=
valor final
AS ATRIBUIES INDICADAS NO FLUXOGRAMA SO
AUTOMATICAMENTE IMPLEMENTADAS PELA
EXECUTAR
Sim ESTRUTURA , PELO QUE , NO DEVEM SER
ESPECIFICADAS NO ALGORITMO/PROGRAMA.
Instruo

varivel de controlo <- varivel de controlo + 1

FPARA

Seguem-se algumas consideraes a ter em conta no uso desta estrutura:


1. A parte da instruo da estrutura pode ser simples ou estruturada, embora seja tipica-
mente uma instruo composta que pode incluir outras estruturas de controlo. Esta
instruo ser executada para cada um dos vrios valores consecutivos atribudos
(repare-se no sinal de atribuio ) varivel de controlo;
2. O nmero de valores atribudos varivel de controlo, determina o nmero de vezes
que a instruo executada (este nmero : valor final - valor inicial + 1 no caso da
varivel ser inteira);
3. A varivel de controlo deve ser uma varivel simples de qualquer tipo diferente de real
(geralmente inteira);
4. Valor inicial e valor final podero ser constantes, variveis ou expresses;

Antnio M. P. Sousa da Silva Algoritmia - 36


INFORMTICA

5. Valor inicial e valor final devero ser do mesmo tipo que a varivel de controlo;
6. O valor inicial deve ser menor do que valor final, se se pretender que a instruo seja
executada mais do que uma vez. Se valor inicial e valor final forem iguais, a instruo
ser executada somente uma vez; se valor inicial for maior que valor final, a instruo
no chegar a ser executada.

Exemplos
1. ...
soma 0
PARA contador 1 AT 20 EXECUTAR
Ler classificao
soma soma + classificao
FPARA
...
2. maior -32767
PARA contador 1 AT 3 EXECUTAR
Ler numero
SE numero > maior ENTO
maior numero
FSE
FPARA
...
3. Ver exerccio resolvido n 6

Comparando com os mesmos exemplos construdos com as outras duas estrutu-


ras repetitivas pode concluir-se que a estrutura PARA a mais indicada uma vez que se
sabe partida quantas repeties vo ser necessrias e, a que envolve um menor
nmero de instrues (em virtude da inicializao e incrementao do contador serem
feitas automaticamente). Mas se no se soubesse logo de incio quantas classificaes
iriam ser somadas ou quantos nmeros iriam ser comparados, isto , se no se soubesse
quantas repeties iria ter o ciclo, teria de ser usada uma estrutura repetitiva condicional
(ENQUANTO ou REPETIR).
frequente a estrutura FOR aparecer de outras duas formas diferentes:
1. Em vez de a varivel de controlo partir de um valor inicial menor que um valor final, para
ser incrementada, pode partir de um valor inicial maior que um valor final para ser
decrementada, isto , subtrair uma unidade (no caso de ser inteira).
2. Em vez da incrementao/decrementao ser de uma unidade, pode ser de outro valor
qualquer. Para indicar isso costume acrescentar-se estrutura a clusula COM PASSO
(steep) com o valor dessa incrementao/decrementao.

Antnio M. P. Sousa da Silva Algoritmia - 37


INFORMTICA

Exemplo (para escrever os nmeros pares de 20 a 0)


...
PARA contador 20 AT 0 COM PASSO 2 EXECUTAR
Escrever contador
FPARA
...

Validao de dados

Nos vrios exemplos j mencionados, alguns algoritmos no funcionam correcta-


mente se no forem feitas certas restries entrada de dados, isto , os valores de
entrada devem ser testados antes de serem utilizados. Esta operao, de verificar se os
dados so aceitveis ou no para o algoritmo, designa-se por validao dos dados.
Perante uma deteco de dados invlidos h que indicar ao agente executor qual a
deciso a tomar. Por exemplo:
1. Emitir uma mensagem de erro (ver exemplo estudado para a estrutura CASO) e inter-
romper a execuo ;
2. Emitir uma mensagem de erro e voltar a pedir os dados;
3. Efectuar uma correco automtica dos dados, se possvel.
As estruturas repetitivas podem ser usadas para validar os dados de entrada. Por
exemplo, o clculo da rea de um crculo no tem sentido se o utilizador introduzir um
valor para o raio menor ou igual a zero. Nestas condies o algoritmo com a validao
do dados de entrada ficaria (ver tambm o exerccio resolvido n 7):

{Algoritmo para calcular a rea de um crculo}


Incio
{ Declarao dos dados}
area, raio Inteiros
pi = 3.1416
{Instrues}
REPETIR
Escrever Introduza o valor do raio :
Ler raio
SE raio <= 0 ENTO
Escrever Valor incorrecto para o raio. Tente novamente
SENO
area pi * raio ** 2
Escrever A rea :, area
FSE
AT raio > 0
Fim
Antnio M. P. Sousa da Silva Algoritmia - 38
INFORMTICA

Exerccios Resolvidos

Para complementar os exemplos at agora estudados seguem-se alguns exercci-


os resolvidos abordando vrias tcnicas de programao.

Exerccio n 1 - Procurar uma palavra no dicionrio para obter o seu significado.

Uma primeira descrio algortmica desta tarefa pode ser feita com a seguinte
sequncia de instrues:

1 Anotar a palavra a procurar


2 Abrir o dicionrio na primeira pgina e procurar
3 Repetir a seguinte aco at encontrar a palavra ou
at encontrar palavras de ordem alfabtica superior ou
at chegar ao fim do dicionrio
3.1 Procurar na pgina seguinte
4 Se a palavra for encontrada ento
4.1 Recolher o seu significado
Seno
4.1 Avisar que a palavra no consta no dicionrio

Pode, partida, questionar-se a eficincia deste algoritmo, pois se para pequenas


tarefas (pequeno dicionrio) a sua utilizao pode ser aceitvel o mesmo j no se pode
dizer para um grande volume de informao (grande dicionrio). Na prtica no utiliza-
do o processo de pesquisa sequencial, como foi descrito na primeira verso do algoritmo,
mas sim uma tcnica (que muitas vezes se usa neste casos) conhecida por pesquisa
dicotmica. Desta forma pode construir-se uma segunda verso do algoritmo:

1 Anotar a palavra a procurar


2 Segurar no molho de folhas que formam o dicionrio
3 Repetir a seguinte aco at reduzir o molho a uma folha
3.1 Abrir o molho em duas partes quaisquer
3.2 Se a palavra a procurar for anterior palavra do 2 semi-molho ento
3.2.1 Segurar apenas no segundo semi-molho
Seno
3.2.1 Segurar apenas no 1 semi-molho
4 Procurar a palavra na folha seleccionada

Antnio M. P. Sousa da Silva Algoritmia - 39


INFORMTICA
5 Se a palavra for encontrada ento
5.1 Recolher o seu significado
Seno
5.1 Avisar que a palavra no consta no dicionrio

Assume-se neste algoritmo que o agente executor sabe executar o procedimento


de procurar uma palavra, caso contrrio teria de ser detalhado.

Exerccio n 2 - Resoluo de um sistema de equaes lineares a duas incgnitas.

Anlise
Esto envolvidos neste problema aces de clculo numrico e conceitos de ma-
temtica. A resoluo ter como objectivo final a soluo de um sistema do tipo:
ax + by = c
dx + ey = f , apresentado na forma cannica, com as incgnitas x e y e os coe-
ficientes a, b, c, d, e, f.
Para se determinar o valor de x e y (se for possvel a resoluo) basta conhecer os
valores numricos dos coeficientes e aplicar as seguintes regras algbricas:
x = (ce - bf) / (ae - bd)
y = (af - cd) / (ae - bd)
Ter de ter-se em conta um aspecto importante que resulta tambm da anlise
matemtica do sistema:
a) se o denominador, nas expresses que do as solues, for zero e o numerador for
diferente de zero, a equao impossvel;
b) se o denominador, nas expresses que do as solues, for zero e o numerador for
tambm zero, a equao indeterminada.
Assim, basicamente, o problema resume-se a entrar com os coeficientes, calcular
as solues fazendo os testes antes indicados e fornecer as solues. Esquematicamente:

Entram os coeficientes Clculo Saem as solues


das
Solues
Concepo
Dicionrio de dados
E/S Nome Tipo Descrio
E a,b,c,d,e,f reais coeficientes do sistema
S x,y reais solues do sistema

Algoritmos -Para este exerccio vo ser apresentados trs tipos diferentes de


algoritmos estudados, no entanto, daqui em diante, somente o pseudocdigo e s vezes
o fluxograma sero elaborados, pelo facto de estarem mais vocacionados para a
implementao do problema numa linguagem de programao.
Antnio M. P. Sousa da Silva Algoritmia - 40
INFORMTICA
Descritivo

1 Incio
2 Pedir os valores dos coeficientes: a, b, c, d, e, f
3 Se o resultado de (ae - bd) for nulo ento
3.1 Se o resultado de (ce - bf) for nulo ento
3.1.1 Dizer que o sistema indeterminado
Seno
3.1.1 Dizer que o sistema impossvel
Seno
3.1 Calcular o valor de x utilizando a expresso
3.2 Calcular o valor de y utilizando a expresso
3.3 Fornecer a soluo (valores de x e y)
4 Fim

Pseudocdigo

Incio
Ler a, b, c, d, e, f
SE (a*e - b*d) = 0 ENTO
SE (c*e - b*f) = 0 ENTO
Escrever 'O sistema indeterminado'
SENO
Escrever 'O sistema impossvel'
FSE
SENO
x (c*e - b*f) / (a*e - b*d)
y (a*f - c*d) / (a*e - b*d)
Escrever ' A soluo do sistema : x = ', x, ' e y = ', y
FSE
Fim

Fluxograma

Inicio

Ler a,b,c,d,e,f

(ESTE SMBOLO SIGNIFICA QUE O FLUXOGRAMA


1
CONTINUA NA PGINA SEGUINTE.)

Antnio M. P. Sousa da Silva Algoritmia - 41


INFORMTICA

No Sim
(a*e-b*d)=0

No Sim
x <- (c*e - b*f) / (a*e - b*d) (c*e-b*f)=0
y <- (a*f - c*d) / (a*e - b*d)

Escrever Escrever
Escrever x, y
' Sistema Impossvel' ' Sistema Indeterminado'

Fim

Nota: Como o clculo da expresso a*e - b*d efectuado vrias vezes, o algoritmo
ficaria mais eficiente se s o fosse uma nica vez. Para isso, deve definir-se uma varivel
auxiliar, por exemplo com o nome Denominador, para ficar logo de incio com o valor da
expresso, isto , deve incluir-se a instruo Denominador a*e - b*d e no resto do
algoritmo, substitui-se a*e - b*d pela varivel denominador. Com esta optimizao e a
declarao de dados tem-se o seguinte pseudocdigo:

Incio
{declarao dos dados}
a,b,c,d,e,f reais
denominador real
x,y reais
{instrues}
Escrever ' Introduza os coeficientes do sistema: '
Ler a, b, c, d, e, f
denominador a*e - b*d
SE denominador = 0 ENTO
SE (c*e - b*f) = 0 ENTO
Escrever 'O sistema indeterminado'
SENO
Escrever 'O sistema impossvel'
FSE
SENO
x (c*e - b*f) / denominador
y (a*f - c*d) / denominador
Escrever ' A soluo do sistema : x = ', x, ' e y = ', y
FSE
Fim

Antnio M. P. Sousa da Silva Algoritmia - 42


INFORMTICA

Output
Introduza os coeficientes do sistema: 2 1 4 2 2 1

A soluo do sistema : x = 3.5 e y = -3 (RESOLVA O SISTEMA USADO NO TESTE


DO ALGOTITMO PARA CONFIRMAR O
RESULTADO DO OUTPUT.)

Exerccio n 3 - Efectuar, a partir de dois nmeros inteiros fornecidos, uma das


quatro operaes aritmticas bsicas (adio, subtraco, multiplicao e diviso) con-
forme a escolha do utilizador.

Anlise
Este o caso tpico de problema que necessita de um menu para se proceder
escolha de uma aco de entre vrias disponveis (seleco mltipla). Assim, o utilizador
ter de escolher uma opo num menu para efectuar uma das quatro operaes com os
dois nmeros. Esquematicamente:
Entram dois nmeros
Sai resultado
Efectuar operao
Escolher opo conforme a opo que entra
Menu

Concepo
Dicionrio de dados
E/S Nome Tipo Descrio
E opo inteiro opo do menu
E n1, n2 inteiros nmeros a operacionar
S resultado inteiro resultado da operao

Pseudocdigo
Incio
{declarao dos dados}
opo inteiro
n1,n2 inteiros
resultado inteiro
{instrues}
Escrever ' Introduza os nmeros :'
Ler n1,n2
Escrever ' MENU'
Escrever ' 1- Adicionar '

Antnio M. P. Sousa da Silva Algoritmia - 43


INFORMTICA
Escrever ' 2- Subtrair'
Escrever ' 3- Multiplicar'
Escrever ' 4- Dividir'
Escrever ' Qual a opo ? '
Ler opo
CASO opo SEJA
1 : resultado n1 + n2
Escrever ' A soma ', resultado
2 : resultado n1 - n2
Escrever ' A diferena ', resultado
3 : resultado n1 * n2
Escrever ' O produto ', resultado
4 : resultado n1 DIV n2
Escrever ' O quociente ', resultado
SENO
Escrever ' Opo invlida '
FCASO
Fim

Fluxograma Incio

Ler n1,n2

Escrever menu

Ler opo

Sim
opo = 1 Resultado <- n1 + n2

No
Escrever resultado

Sim
opo = 2 Resultado <- n1 - n2

No
Escrever resultado

Sim
opo = 3 Resultado <- n1 * n2

No
Escrever resultado

Sim
opo = 4 Resultado <- n1 / n2

No
Escrever resultado

Escrever 'Opo invlida'

Fim

Antnio M. P. Sousa da Silva Algoritmia - 44


INFORMTICA

Output
Introduza os nmeros : 12 6
MENU'
1- Adicionar '
2- Subtrair'
3- Multiplicar'
4- Dividir'
Qual a opo ? 1
A soma 18

Exerccio n 4 - Decomposio de um nmero inteiro positivo em factores primos.

Anlise
Se se designar por n o nmero a decompor, ento pretende-se encontrar o con-
junto de factores primos cujo produto igual a n.
Para encontrar os factores primos de um nmero deve determinar-se o menor
nmero inteiro, superior unidade, por forma que a sua diviso pelo nmero dado d
quociente inteiro (isto , resto nulo). Repete-se o processo para o quociente obtido at
que seja atingido o valor 1 como quociente. Por exemplo, o nmero 140 tem a seguinte
decomposio em factores primos:

140 2

70 2
A sequncia de factores primos obtida (2, 2, 5 e
7), convertida no produto 2x2x5x7 vai dar o n-
35 5

7 7
mero 140.

Concepo
Dicionrio de dados
E/S/Aux Nome Tipo Descrio
E/Aux n inteiro nmero a decompor em factores primos
e depois os sucessivos quocientes
S divisor inteiro sucessivos divisores de n

Pseudocdigo

Incio
{declarao dos dados}
n, divisor inteiros
Antnio M. P. Sousa da Silva Algoritmia - 45
INFORMTICA

{instrues}
Escrever 'Introduza o nmero a decompor: '
Ler n
Escrever 'factores primos de ', n
divisor 2
ENQUANTO n <> 1 EXECUTAR
ENQUANTO n MOD divisor <> 0 EXECUTAR
divisor divisor + 1
FENQUANTO
Escrever divisor, ' '
n n DIV divisor
FENQUANTO
Fim

O ciclo interior permite detectar qual o primeiro nmero (a comear em 2) divide


exactamente (n MOD divisor) o nmero dado, isto , enquanto o resto da diviso inteira
do nmero dado pelo divisor no for zero, soma uma unidade a divisor. Este ciclo termina
quando for encontrado um divisor, que pode ser o prprio nmero se ele for primo. De-
pois o divisor encontrado escrito e em seguida actualizado o nmero n para que todo
o processo se repita (ciclo exterior) mas agora com o novo quociente (n DIV divisor). A
factorizao termina quando no for possvel dividir mais, isto , quanto n for 1.

Fluxograma Incio

Ler n

divisor <- 2

No
n <> 1

Sim

No
n mod divisor <> 0

Sim

divisor <- divisor + 1

Escrever divisor

n <- n div divisor

Fim

Antnio M. P. Sousa da Silva Algoritmia - 46


INFORMTICA

Output
Introduza o nmero a decompor: 140
factores primos de 140:
2
2
5
7

Exerccio n 5 - Controlo de paragem de um algoritmo/programa

Todos os algoritmos at agora estudados, resolviam os diferentes problemas exac-


tamente uma vez, quer isto dizer que, quando ele fosse implementado numa linguagem
de programao, um novo clculo com outros dados implicaria executar o programa todo
desde o incio. Na prtica tal no sucede, isto , o programa continua at que o utilizador
decida termin-lo. preciso ento construir um controlo de paragem.
A melhor forma de o fazer com uma estrutura REPETIR-AT, uma vez que, se
supe que pelo menos uma vez o programa calcula o pretendido. Por exemplo, o exerc-
cio anterior com um controlo de paragem teria o seguinte pseudocdigo:
Incio
{declarao dos dados}
n, divisor inteiros
terminar caracter
{instrues}
REPETIR
Escrever 'Introduza o nmero a decompor: '
Ler n
Escrever 'factores primos de ', n
divisor 2
ENQUANTO n <> 1 EXECUTAR
ENQUANTO n MOD divisor <> 0 EXECUTAR
divisor divisor + 1
FENQUANTO
Escrever divisor, ' '
n n DIV divisor
FENQUANTO
Escrever ' Quer terminar ? (S/N) '
Ler terminar
AT terminar = 'S'
Fim
Antnio M. P. Sousa da Silva Algoritmia - 47
INFORMTICA

Foi necessrio definir uma nova varivel do tipo caracter chamada terminar para
controlar a estrutura repetitiva do controlo de paragem. Quando o utilizador introduzir a
letra S a expresso booleana da clusula AT fica verdadeira terminando o ciclo, e por-
tanto o programa; outra letra qualquer torna a expresso booleana falsa e o programa
continua. Note-se que a varivel terminar poderia ser de outro tipo qualquer, por exemplo
inteiro, podendo neste caso a mensagem ser: ' 0 para continuar; 1 para sair' e a expres-
so booleana: terminar = 1.
Nos casos em que exista um menu, a mensagem deve ser mais uma opo do
mesmo. Por exemplo, no exerccio n3, o menu poderia ter uma 5 opo com: 5 - Sair e
seria a varivel opo que controlaria a estrutura REPETIR-AT do controlo de para-
gem.

Exerccio n 6 - Dado um certo nmero de notas calcular: a sua mdia, a maior e


a menor das notas.

Anlise
Se for n o nmero total de notas, a mdia obtida somando as notas todas e
dividindo essa soma por n. O mtodo usado para efectuar uma adio sucessiva (sendo
o agente executor o computador) e para determinar o maior (e o menor) de uma lista de
nmeros, j foi estudado.

Concepo
Dicionrio de dados
E/S/Aux Nome Tipo Descrio
E n inteiro nmero total de notas
E nota real cada uma das notas
Aux soma real soma das notas
Aux contador inteiro contador para o ciclo que representa a
ordem de cada uma das notas (1, 2,...)
S mdia real mdia das notas
S maior real a maior das notas
S menor real a menor das notas

Note-se que ter de se usar um ciclo cujo nmero de repeties conhecido (n)
para processar cada uma das notas. Por isso, a varivel notas vai representar na 1
repetio a 1 nota, na 2 repetio a 2 nota, ... e na ensima repetio a ensima nota.
O problema ter de ser resolvido assim, uma vez que no teria sentido definir uma vari-
vel para cada nota pois o algoritmo, para ser geral, no sabe partida quantas so (
o utilizador que introduzir o valor de n).

Antnio M. P. Sousa da Silva Algoritmia - 48


INFORMTICA
Pseudocdigo
Incio
{declarao dos dados}
n, contador inteiros
nota, soma reais
mdia, maior, menor reais
{instrues}
maior 0
menor 20
soma 0
Escrever 'Introduza o total de notas: '
Ler n
PARA contador 1 AT n EXECUTAR
Escrever 'Introduza a ', contador, ' nota: '
Ler nota
{calcula a soma das notas}
soma soma + nota
{determina a maior nota}
SE nota > maior ENTO
maior nota
FSE
{determina a menor nota}
SE nota < menor ENTO
menor nota
FSE
FPARA
{calcula a mdia}
mdia soma / n
Escrever ' A mdia das notas : ', mdia
Escrever ' A maior nota : ', maior
Escrever ' A menor nota : ', menor
Fim

Para cada nota que lida dentro do ciclo feita uma acumulao da soma, isto ,
na 1 repetio do ciclo a 1 nota somada a zero (valor inicial da soma), na 2 repetio
a 2 nota somada 1, na 3 repetio a 3 nota somada soma da 1 com a 2, etc.
No final do ciclo tem-se a soma de todas as notas guardada na varivel soma. O mesmo
acontece para o clculo da maior (e da menor) notas, s que em vez de uma acumulao
realizada uma troca de valores.
Para este algoritmo executar correctamente os clculos necessrio que as no-
tas lidas estejam todas no intervalo [0, 20]. Como acontece com frequncia o utilizador
enganar-se a introduzir os dados era necessrio modificar o algoritmo para os validar
(este assunto ser estudado no exerccio seguinte).
Antnio M. P. Sousa da Silva Algoritmia - 49
INFORMTICA

Incio
Fluxograma

maior <- 0

menor <- 20

soma <- 0

ler n

Traagem contador <- 1

Valores iniciais:
n=3 No
maior = 0 contador <= n
menor = 20 Sim
soma = 0
Ler nota
1 repetio (contador = 1)
nota = 8
soma = 0 + 8 = 8 soma <- soma + nota
maior = 8
menor = 8 No
nota > maior
2 repetio (contador = 2) Sim
nota = 14
maior <- nota
soma = 8 + 14 = 22
maior = 14
menor = 8
No
3 repetio (contador = 3) nota > menor
nota = 17 Sim
soma = 22 + 17 = 39
maior = 17 menor <- nota
menor = 8

Escrita:
mdia = 39 / 3 = 13 contador <- contador +1
maior = 17
menor = 8

Escrever mdia

Escrever maior

Escrever menor

Fim

Faa o teste ao algoritmo para 3 notas: 8, 14 e 17 para verificar que realmente


escrita a mdia 13, a maior nota 17 e a menor nota 8, conforme se demonstra ao lado do
fluxograma.

Antnio M. P. Sousa da Silva Algoritmia - 50


INFORMTICA

Output
Introduza o total de notas: 3
Introduza a 1 nota: 8
Introduza a 2 nota: 14
Introduza a 3 nota: 17
A mdia das notas : 13
A maior das notas : 17
A menor das notas : 8

Exerccio n 7 - Validao dos dados do exerccio anterior.

Como j se referiu, o exerccio anterior no seria correctamente resolvido, nem


traduziria a realidade, se por acaso o utilizador introduzisse notas menores que 0 e
maiores que 20 valores. Assim o troo do algoritmo onde as notas so lidas deve ser
alterado como a seguir se exemplifica:

...
PARA contador 1 AT n EXECUTAR
REPETIR
Escrever 'Introduza a ', contador, ' nota: '
Ler nota
SE nota < 0 ou nota > 20 ENTO VALIDAO DOS DADOS
Escrever ' Nota invlida. Tente de novo'
FSE
AT nota > 0 e nota < 20
{calcula a soma das notas}
soma soma + nota
{determina a maior nota}
SE nota > maior ENTO
maior nota
FSE
{determina a menor nota}
SE nota < menor ENTO
menor nota
FSE
FPARA
...

Antnio M. P. Sousa da Silva Algoritmia - 51