Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Linguagens de Programao
Linguagem Mquina
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)
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
Anlise
Concepo
Implementao
Teste
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.
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
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;
Descrio narrativa
narrada, em linguagem corrente, a resoluo do problema.
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:
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
Caractersticas de um Algoritmo
Dados
Tipos de dados
inteiros (integer)
numricos reais (real)
Simples lgicos ou booleanos (boolean)
um caracter (char)
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.
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.
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
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
+ 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:
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.
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;
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)
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:
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
Instruo de Escrita
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:
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:
Pseudocdigo Fluxograma
Incio
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
Melhoramento de um algoritmo
Limites
Comentrios
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)
SE
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
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
2. SE a >= b ENTO
Escrever a, maior ou igual a, b
SENO
Escrever a, menor que , b
FSE
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
SE eb1 ENTO
SE eb2 ENTO
i1
FSE
SENO
i2
FSE
Exemplo
Concepo
Dicionrio de dados
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
Fim
Output
Introduza os trs nmeros a comparar: 7 10 1
O maior nmero 10
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
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.
FCASO No
No
Fim
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
...
ENQUANTO
Falsa
Expreso
ENQUANTO expresso booleana EXECUTAR Booleana
Verdadeira
instruo EXECUTAR
FENQUANTO Instruo
FENQUANTO
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
...
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
REPETIR
REPETIR Sequncia de
Instrues
sequncia de instrues
AT
Falsa
AT expresso booleana Expreso
Booleana
Verdadeira
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
PARA
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
FPARA
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
Validao de dados
Exerccios Resolvidos
Uma primeira descrio algortmica desta tarefa pode ser feita com a seguinte
sequncia de instrues:
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:
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
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
Output
Introduza os coeficientes do sistema: 2 1 4 2 2 1
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 '
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
Fim
Output
Introduza os nmeros : 12 6
MENU'
1- Adicionar '
2- Subtrair'
3- Multiplicar'
4- Dividir'
Qual a opo ? 1
A soma 18
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
Fluxograma Incio
Ler n
divisor <- 2
No
n <> 1
Sim
No
n mod divisor <> 0
Sim
Escrever divisor
Fim
Output
Introduza o nmero a decompor: 140
factores primos de 140:
2
2
5
7
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.
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).
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
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
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
...
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
...