Você está na página 1de 42

TÓPICOS DAS AULAS TEÓRICAS

de
Algoritmia e Programação

Algoritmia

por Maria da Conceição Neves

Conteúdos
1. Conceitos associados ao desenvolvimento de
software
2. Programação Procedimental: Algoritmo e
Estrutura de Dados
3. Metodologia da programação estruturada
4. Estruturas de controlo de fluxo
5. Dados, tipos de dados, operadores e expressões
6. Noções básicas de Lógica
7. Análise da descrição de alguns algoritmos e
traçagens manuais.

Maria da Conceição Neves

1
1. Desenvolvimento de Software
 O desenvolvimento de software é uma atividade
de crescente importância na sociedade actual –
Sociedade da Informação e do Conhecimento.

 A utilização de computadores nas mais diversas


áreas de conhecimento humano requer o
desenvolvimento de soluções computadorizadas
cada vez mais sofisticadas e complexas.

 À medida que a complexidade dos problemas


aumenta há necessidade de utilizar uma
abordagem baseada nos princípios de engenharia.
Maria da Conceição Neves

1. A Engenharia de Software
 Na década de 70 há o reconhecimento de um conjunto de
situações que são identificadas como “Crise de Software”.
Entre elas estão o crescimento dos custos de software e a
sua fraca fiabilidade.
 Era preciso transformar a tarefa de construir software
numa actividade com rigor comparável ao utilizado nas
diversas áreas de engenharia. Surge assim uma nova
disciplina a “Engenharia de Software”.
 A engenharia de software tem como objectivo a produção de
software de modo eficiente em termos de custo e
fiabilidade. A engenharia de software é a aplicação prática
do conhecimento científico nas fases de especificação,
análise, conceção (design), implementação, teste e
manutenção de software. Maria da Conceição Neves

2
1. Produzir software não é só Programar
 Do Levantamento e Especificação de Requisitos à
criação de um Produto de Software em funcionamento
há muito mais a fazer do que Programação
 Há vários paradigmas para abordar todo o processo como
sejam o paradigma procedimental ou o orientado a
objetos. Em qualquer deles as fases de Análise e
Conceção são muito relevantes.
 No entanto, na resolução de problemas simples no
paradigma procedimental, cujos requisitos estão
especificados, geralmente num texto, parte-se de
imediato para
 a análise do problema (o que fazer)
 a conceção da solução (como fazer) através de um algoritmo e
estrutura de dados
 codificação numa linguagem de programação.
 validação do programa utilizando um adequado plano de testes.

1. O objetivo de APROG

 Um dos objetivos da disciplina de APROG é iniciar


os estudantes na produção de software.
 Como primeira disciplina nesta área de
conhecimento começa-se por desenvolver
competências de raciocínio lógico através do
desenvolvimento de algoritmos e estruturação
de dados.

 Mas produzir software não é só programar …

Maria da Conceição Neves

3
1. Fases de Conceção e Programação
Concentremo-nos nas fases de Conceção e Programação baseando-nos
na metodologia da programação estruturada.
Faz-se a decomposição do problema em problemas mais simples, que
consiste em identificar os módulos (as funcionalidades) a serem
executadas e definir a estrutura de controlo entre eles.
O método de decomposição deve ser um método descendente (top
down) com as seguintes fases:
Decompor o problema em módulos integrando-os numa estrutura de controlo
(Descrever o respectivo algoritmo de integração dos módulos)
Para cada módulo
Se (o módulo é simples)
então
Programar o Módulo
(Descrever o respectivo algoritmo)
senão
Continuar a decompor o módulo segundo o mesmo princípio
Codificar segundo a metodologia da programação estruturada e Testar

Maria da Conceição Neves

1. Evolução do Desenvolvimento de Software

Custo

100%
Hardware

Software

1950 20..
Tempo

 A metodologia a usar
 Conceção Modular
 Refinamento gradual (top-down) do topo para a
base
 Programação Estruturada

Maria da Conceição Neves

4
2.Programação Procedimental

Programação orientada à Ação

PROGRAMA =

Algoritmo
+
Estrutura de Dados

Maria da Conceição Neves

2. O que é programar?

Programar é
Conceber algoritmos

Descrevê-los numa dada linguagem.

Maria da Conceição Neves

5
2. Modelação algorítmica

Especificação dos
requisitos e análise do
problema

Conceção
da solução Um algoritmo é uma
representação procedimental
de uma solução para um dado
ALGORITMO problema.

A definição da solução é
especificada numa sequência
Refinar e finita de acções.
codificar

PROGRAMA

Maria da Conceição Neves

2. Algoritmo
Um algoritmo é um conjunto finito e bem definido (não
ambíguo) de instruções que descreve os passos lógicos
para a realização de uma tarefa.

Um algoritmo correto é aquele que perante uma


entrada válida deve produzir a uma saída única e
correta.

Um algoritmo deve ser eficaz na resolução do problema


proposto e eficiente de modo a resolver o problema
com o melhor desempenho.
Maria da Conceição Neves

6
2. ALGORITMO
 Algoritmos – sequência de passos lógicos para a realização de uma tarefa
 Propriedades de um algoritmo
 Deve permitir comunicação com o exterior – Entrada de Dados

(geralmente) e Saída de Resultados


 Deve ser finito - Alcançar a solução em tempo finito
 Deve ser bem definido – Sem ambiguidade

 Conceção e descrição de Algoritmos - com base na Lógica da


Programação concebem-se soluções algorítmicas para os problemas. Os
algoritmos serão descritos numa linguagem de programação para serem
executados por um computador. Porque as linguagens de programação são
complexas numa fase inicial vamos descrevê-los utilizando Pseudocódigo ou
Fluxogramas pois são linguagens simples deixando o programador
concentrado essencialmente no problema.
 Há vários métodos de Verificação de Algoritmos, aqui usaremos
 Simulação de execução passo a passo (Traçagem manual) ,
 Implementação (numa Linguagem de Programação) e Testes

Maria da Conceição Neves

2. Um algoritmo manipula dados


 Os dados são de diversos tipos:
números (inteiros ou reais), caracteres,
cadeias de caracteres designadas por strings,
valores lógicos, …
Cada tipo de dados tem um conjunto de
operações associadas
 Estrutura de Dados define modo como os dados
estão organizados e como são acedidos e alterados .
Exemplos:
variáveis simples,
arrays mono e multi-dimensionais,
listas, filas, árvores, grafos, ... ,
ficheiros ( estruturas de dados em memória
Maria dasecundária).
Conceição Neves

7
2. Dados em memória central e em secundária
 Quando um programa está em execução os seus
dados estão em memória central. Quando o
programa termina, ou se desliga o computador, a
informação perde-se.
 Para guardar essa informação de modo
persistente devemos gravá-la em memória
secundária, num ficheiro.
 Os ficheiros são geralmente guardados em disco.
 Num disco os ficheiros estão geralmente
organizados em diretórios.
 Cada ficheiro é identificado por um nome único,
nome combinado com o nome do diretório.
Maria da Conceição Neves

2. Trabalhar com ficheiros


 Trabalhar com ficheiros texto é como trabalhar
com livros, o algoritmo tem que descrever as
operações
1. Abrir o ficheiro para leitura ou para escrita
2. Ir para a posição adequada
3. Ler ou Escrever no ficheiro
4. Fechar o ficheiro

 Quando se tenta ler informação de um ficheiro


que não existe ocorre uma exceção isto é um
erro na execução.

OBS: Este assunto vai ser abordado com detalhe na 9ª


semana do curso. Maria da Conceição Neves

8
2. Noção de Variável MEMÓRIA
CENTRAL
 Variável é uma posição de Endereço
1234
memória caracterizada por: 27.5
 Nome único que deve refletir o seu uso lado
(ex:lado)
 Endereço (ex:1234)
 Valor ou conteúdo que guarda (ex: 27.5)
 Variável é onde o programa guarda os dados
 Variável é um contentor de informação
 Variável tem associado um Tipo de Dados, que define:
 O conjunto de valores que a variável pode armazenar, e

 O tipo de operações em que as variáveis podem

ocorrer
 O tamanho da variável depende do tipo de valor que
armazena.

Maria da Conceição Neves

2. Constantes
 Constantes são variáveis especiais cujo valor é
fixo, não se modifica ao longo da execução de um
dado programa.
 Num programa em que há valores fixos eles
devem ser definidos como constantes
 Exemplos:
 O valor de ∏ deve ser definido como
const real pi=3.1415
 A Taxa de IVA para artigos de luxo
const real taxaIva=0.23
 Maioridade em Portugal
const int maioridade=18
Maria da Conceição Neves

9
2. Noção de Estrutura de Dados

A estrutura de dados de um programa refere-se à:

 Organização dos dados em variáveis


 Ao modo como se atribui valores às variáveis
 Ao modo como se acede ao valor das variáveis
 e outras operações associadas

Maria da Conceição Neves

2. Descrição Algoritmos - O nosso Pseudo-Código

Descrição da Estrutura de Dados ED //variáveis e tipos de dados

Descrição do Processo ALG (opcional)


Início

Fim

Instruções de Entrada e Saída ler( )

escrever( )

Instrução de atribuição a  b + c

Instruções de transferência de controlo de fluxo

Sequência, Decisão/Selecção e Repetição/Iteração (ver prox.)

Maria da Conceição Neves

10
2. Descrição de Algoritmos - Fluxogramas

 Representação Gráfica de um Algoritmo


Símbolos (Versão simplificada)

Inicio / Fim

Entrada (Input)  ler

Saída (Output)  escrever

Ações  atribuições

Decisão

Linhas de Fluxo
Maria da Conceição Neves

3. Metodologia da Programação Estruturada


 Foi na década de 70 que, motivado pela crise de
software existente, Dijkstra desenvolve uma
metodologia que visa o desenvolvimento de
programas fiáveis e de fácil manutenção.
 Esta metodologia foi designada por programação
estruturada e define um conjunto de regras para
elaboração de programas.
 A linguagem Pascal foi desenvolvida para dar
suporte a esta nova metodologia.

Maria da Conceição Neves

11
3. Teorema Fundamental da Refere-se à ordem de
Programação Estruturada execução das instruções

É possível escrever qualquer programa utilizando


exclusivamente as três estruturas básicas de controlo
de fluxo:
 Sequência - a execução sequencial de instruções
 Selecção/Decisão - selecção em alternância de um ou
outro conjunto de ações por avaliação de uma condição
 Repetição/Iteração - permite a execução condicional
em ciclo fechado de um dado grupo de instruções. A
condição é testada em cada iteração para decidir se sair
ou não do ciclo.

Maria da Conceição Neves

4. Controlo de fluxo de um programa


 Um programa é uma sequência de instruções.

 Os programas podem permitir vários ramos, várias sequências de


instruções alternativas e ciclos.

 Para permitir um ou vários ramos existem estruturas ou instruções de


controlo de fluxo.
Ramo Único Vários Ramos Vários Ramos (com ciclos)

 As estruturas de controlo de fluxo são as unidades fundamentais de um


programa.

 As estruturas de controlo de fluxo podem ser usadas em combinação.

 Cada estrutura de controlo de fluxo tem um único ponto de entrada e um


Maria da Conceição Neves
único de saída.

12
4. Controlo de fluxo de um Algoritmo ou Programa
 O controlo de fluxo de um programa refere-se à
ordem pela qual são executadas as instruções.
 As estruturas básicas e fundamentais de controlo
são:
 Sequência (Instruções sequenciais)

 Seleção ou Decisão (Estrutura Condicional)


 Se (…) então

senão …
 Repetição ou Iteração (ciclos)
 Enquanto (…) …
 Repete ….. enquanto (…)

 Para(…) … Maria da Conceição Neves

4. Estrutura de Controlo - Sequência

Instução1

Instução2

Instução3

 Sequência é a estrutura de controlo mais simples


 Realiza uma instrução seguida de outra, pela
ordem em que aparecem no programa
 O fluxo normal de um programa é sequencial, a
não ser que seja dirigido de outro modo.

Maria da Conceição Neves

13
4. Estrutura de Controlo - Sequência

Fluxograma Pseudocódigo

Instrução 1
Instrução 1
Instrução 2

Instrução 2
OBS:
Se necessário separar
as instruções por ;

Maria da Conceição Neves

4. Exemplo
 Calcular a área de um quadrado

Start
ED
var real lado, area
lado
ALG
INICIO
ler(lado) area<- lado*lado
area  lado * lado
escrever(“Area Quadrado=“, area)
FIM
area

End

Maria da Conceição Neves

14
4. Estrutura de controlo - Decisão

 Se (condição) então ação1


 A condição é testada e de acordo com o teste
 Se verdadeira (então) ação1 é realizada
 Se falsa (senão) nada é feito.

Se
falso
condição

verdade

então ação1

Maria da Conceição Neves

4. Estrutura de controlo - Decisão

 Se (condição) então ação1 senão ação2


 A condição é testada e de acordo com o teste
 Se verdadeira (então) ação1 é realizada
 Se falso (senão) ação2 é realizada

Se falso
condition

verdade
ação2 senão
então ação1

Maria da Conceição Neves

15
4. Estrutura de controlo - Decisão
Fluxograma
Fluxograma

Se Se
falso
falso condition
condição
verdade
verdade ação2 senão
então ação1
então ação1

Pseudocódigo
Pseudocódigo
Se (condição) então
Se (condição) então
ação1
ação1
senão
FimSe
ação2
FimSe
Maria da Conceição Neves

4. Exemplo
 Calcular a área do quadrado depois de testar a
possibilidade
Start
Start

lado
lado If then else
If then

lado>0
lado>0
true
true
area<-
area<-
lado*lado Impossible
lado*lado
square
area
area

End
End
Maria da Conceição Neves

16
4. Decisão múltipla
 Se a condição de teste for sobre uma variável
false que toma um conjunto discreto de valores
condition
poderemos substituir a instrução SE pela
true
Instrução CASE – múltiplas alternativas
task1

false
condition

true
Caso x
task2
1 2 other
task1 task2 taskn

taskn

Maria da Conceição Neves

4. Decisão múltipla
 Instrução Case – múltiplas alternativas
Pseudo-Code
Flow Chart
Caso (variável)
seja valor1:
Case tasks1
1 2 n
task1 task2 taskn seja valor2:
tasks2

outros valores:
tasks3
FimCaso
Maria da Conceição Neves

17
4. DECISÃO MÚLTIPLA ( Exemplo )
Pseudocódigo Fluxograma

CASO mes SEJA


mes
1, 3, 5, 7, 8, 10, 12 : 1,3,5,7,8,10,12
outro
diasmes=31; 2

2: diasmes=31
4,6,9,11

diasmes=28; diasmes=28
4, 6, 9, 11:
diasmes=30
diasmes:30;
outro: Mês
escrever(“Mês incorrecto”); Incorreto

FIMCASO

E se o ano for bissexto? Maria da Conceição Neves

4. Estrutura de Controlo Repetição ou Iteração

 Esta estrutura também é designada por Ciclo

 É usada quando um conjunto de instruções de


um programa tem que ser executado repetidas
vezes.

 Envolve sempre o teste de um dada condição,


em cada iteração, para verificar quando
terminar o ciclo.

Maria da Conceição Neves

18
4. Vários tipos de estruturas iterativas
 Envolve sempre o teste de um dada condição
para verificar se se faz ou não nova iteração
no ciclo.
 Se o teste da condição é feita à entrada do ciclo
teremos a estrutura
 Enquanto (…) fazer ……. While … do …
 Se o teste da condição é feita à saída do ciclo
teremos a estrutura
 Repete ……… enquanto (…) Do … while …
 Se se conhece os valores de início e fim do ciclo e a sua
progressão podemos especificar os limites e o passo.
Um contador é usado para indicar o progresso ao longo
do ciclo. A estrutura será
 Para (i=…; … ; …..) …. For( … ) …

Maria da Conceição Neves

4. Estrutura repetitiva – Enquanto (…) Fazer…


 O teste da condição é feita à entrada do ciclo
 No caso do teste ser verdadeiro realiza uma
iteração, as tarefas do ciclo, e volta ao teste
novamente.
 Se o resultado da condição de teste for falsa sai
do ciclo.

enquanto

Condição de teste
falso
verdade

tarefas fazer

Maria da Conceição Neves

19
4. Estrutura repetitiva – Enquanto (…) Fazer…

Fluxograma Pseudocódigo

enquanto Enquanto (condição) fazer


Condição de teste

verdade tarefas
tarefas fazer

FimEnquanto

Maria da Conceição Neves

4. Exemplo
 Calcular a soma de uma sequência de números positivos
terminada por nº não positivo.

start

valor

valor >0
verdade
soma<- soma +valor

valor

soma

end
Maria da Conceição Neves

20
4. Estrutura repetitiva – Repete … enquanto (…)
 Inicia o ciclo realizando as tarefas de uma
iteração e no final da iteração testa a
condição para verificar se faz nova iteração ou
se termina o ciclo
 Se o resultado do teste for verdade faz as
tarefas de nova iteração
 Se o resultado do teste for falso termina o ciclo.
Repete
tasks

true
Condição de teste enquanto

false
Maria da Conceição Neves

4. Estrutura repetitiva – Repete … enquanto (…)

Fluxograma Pseudo Code

Repete
Repete
tarefas
tarefas
true
enquanto
Condição de teste
while (condition)
false

Maria da Conceição Neves

21
4. Exemplo
 Calcula o valor da primeira potência de um número que é
maior do que um determinado valor.

start

numero, valor

potencia<- 1

potencia<- potencia * numero


true
potencia <= valor

potencia

end
Maria da Conceição Neves

4. Estrutura repetitiva – Para(…) fazer …

 Esta estrutura é usada quando se conhece os


valores de início e fim do ciclo e a sua progressão.
 Esta estrutura requer que se especifique os
limites do ciclo.
 Um contador é usado para indicar o progresso ao
longo do ciclo.
 É necessário indicar o passo do ciclo (ou como o
contador é atualizado).

Maria da Conceição Neves

22
4. Estrutura repetitiva – Para(…) fazer …

Fluxograma Pseudocódigo

Para (i=inicio; i<fim; i= i+ passo)


i=inicio
i= fim ?
passo tarefas

tarefas
FimPara

Maria da Conceição Neves

4. Estruturas de controlo Repetitivas (ciclos)


 Que tipo de ciclo usar?
 Enquanto ( …) fazer …

 Esta é usada quando o número de iterações não é


conhecido. O teste da condição para decidir se
parar ou não o ciclo deve ser feita no início antes
de realizar cada iteração.
 Repete … enquanto (…)
 Esta é usada quando o número de iterações não é
conhecido. O teste de uma condição para decidir
parar ou não o ciclo deve ser feita no fim do ciclo
após realizar cada iteração.
 Para(…;…;…) fazer …
 Esta é usada quando se conhece o número de
iterações a realizar.
Maria da Conceição Neves

23
4. Estruturas de Repetição (Ciclos)

Em Síntese:
Ciclo controlado à
entrada do ciclo
enquanto ( cond ) fazer
...
fimenquanto Ciclo controlado à
saída do ciclo
ou
repete
...
enquanto ( cond )
Ciclo controlado
por contador
ou

para (atrib_ inic; condic_final; increm ) fazer


...
fimpara

Maria da Conceição Neves

5. Representação da informação usada em Pseudo-código


 As linguagens de programação fornecem a possibilidade de
representar e manipular vários tipos de informação como por
exemplo: inteiros, reais, valores lógicos (Verdadeiro ou Falso),
valores alfanuméricos (caracteres e sequências de caracteres).
 Cada Tipo de Dados tem associado um conjunto de operações ou
operadores para os manipular.
 Por exemplo:
Tipos de Dados Operadores Aritméticos

INTEIRO + adição
- subtracção
* multiplicação
DIV divisão inteira (quociente)
MOD resto da divisão
REAL + adição
- subtracção
* multiplicação
/ divisão (quociente)
Maria da Conceição Neves

24
5. EXPRESSÕES
Com operandos e operadores constroem-se
expressões.
Uma expressão é uma sequência de operandos
e operadores.
 Vamos organizar os operadores em :
 OPERADOR DE ATRIBUIÇÃO

 OPERADORES ARITMÉTICOS

 OPERADORES RELACIONAIS

 OPERADORES LÓGICOS

Maria da Conceição Neves

5. OPERADORES
 OPERADOR DE ATRIBUIÇÃO
 Exemplo: valor  18*32

 OPERADORES ARITMÉTICOS
+ - * /
adição subtração multiplicação divisão
DIV MOD
quociente da divisão inteira resto da divisão inteira
 OPERADORES RELACIONAIS
< > <= >= = !=
menor maior menor_ou_igual maior_ou_igual igual diferente

 OPERADORES LÓGICOS ou BOOLEANOS


AND OR NOT
conjunção disjunção negação

Maria da Conceição Neves

25
5. Operações Aritméticas
 Operandos:

 são números ou expressões numéricas


 Operadores:
 Adição +
 Subtracção -
 Multiplicação *
 Divisão /
 Resto da Divisão Inteira MOD
 Quociente Inteiro DIV
 Tabuadas das Operações
 Propriedades das operações

5. Aritmética de vírgula flutuante


 Os números de vírgula flutuante são
representados no hardware de um computador
como frações binárias.
 A fração decimal 0.125 tem o valor
1/10 + 2/100 + 5/1000
 A fração binária 0.001 tem o valor 0/2+0/4+1/8
 Têm o mesmo valor mas a primeira está escrita na base
2 e a outra na base 10
 A maioria das frações decimais não podem ser
representadas exatamente como frações
binárias.
 As linguagens de programação que suportam
aritmética de vírgula flutuante lidam com valores
aproximados. Maria da Conceição Neves

26
6. Noções Básicas de Lógica
 Numa linguagem uma expressão com significado
ou é uma designação ou uma afirmação.
 Designação é uma expressão com significado que
designa um objecto
2 7-3 a
 Afirmação é uma expressão com significado que traduz
uma afirmação
2>7 5+1=6
 Em Lógica consideram-se apenas as afirmações
sobre as quais se pode dizer se são
verdadeiras ou falsas.
Estas afirmações designam-se por
proposições.
 Toda a proposição tem um e um só valor que é
Verdadeiro (1) ou Falso. (0) Maria da Conceição Neves

6. Proposições
 Proposições Simples
 2+3 = 5 Valor lógico Verdadeiro
 4 é número ímpar Valor lógico Falso

 Proposições Compostas – combinam duas ou mais


proposições usando operadores lógicos
 (2+1 > 2) AND (3 < 5) Valor lógico Verdadeiro
 (7 <= 2) OR ( 3 >2 ) Valor lógico Verdadeiro
 (3+1 = 2) AND ( 3 >2 ) Valor lógico Falso
 NOT ( 5>9 ) Valor lógico Verdadeiro
Valor lógico Verdadeiro denota-se 1
Valor lógico Falso denota-se 0

Maria da Conceição Neves

27
6. Cálculo Proposicional Básico
 Cálculo Proposicional faz o estudo das operações
lógicas sobre proposições.

 Operandos são valores lógicos de proposições

 Operações Lógicas ou Booleanas:


 Conjunção AND
 Disjunção OR
 Negação NOT (operador unário)

 Implicação =>
 Equivalência 

6. Operação Negação
 Operador NOT (operador unário)
 Tabela de Verdade:
Seja p uma proposição
NOT p

p 0 1 Se p for falso NOT p é verdadeiro


Se p for verdadeiro NOT p é falso
1 0

 Propriedades
NOT ( NOT p )  p

Maria da Conceição Neves

28
6. Operação Conjunção (AND)
Sejam p, q e r proposições
 Tabela de verdade
P AND q
q
AND 0 1
p AND q é verdadeira se e só se
p 0 0 0 p for verdadeiro e q for verdadeiro.
1 0 1

 Propriedades da operação Conjunção


Comutativa
p AND q  q AND p
Associativa
(p AND q) AND r  p AND (q AND r)
Elemento neutro 1 p AND 1  1 AND p  p
Elemento absorvente 0 p AND 0  0 AND p  0

6. Operação Disjunção (OR)


Sejam p, q e r proposições
 Tabela de verdade

p OR q q

OR 0 1 p OR q é verdadeira
se pelo menos uma das proposições o for.
0 0 1
p
1 1 1
 Propriedades da operação Disjunção
Comutativa
p OR q  q OR p
Associativa
(p OR q) OR r  p OR (q OR r)
Elemento neutro 0 p OR 0  0 OR p  p
Elemento absorvente 1 p OR 1  1OR p  1

29
6. Primeiras Leis de Morgan
Sejam p, q e r proposições
1. A negação da conjunção de proposições tem
como consequência a disjunção das proposições
negadas
NOT ( p AND q)  (NOT p) OR (NOT q)

2. A negação da disjunção de proposições tem


como consequência a conjunção das proposições
negadas
NOT ( p OR q)  (NOT p) AND (NOT q)

Maria da Conceição Neves

6.Expressões com Variáveis - Condições


Chama-se expressão proposicional ou condição
a qualquer expressão com variáveis que se transforma em
proposição (verdadeira ou falsa) sempre que se atribuem
valores (dos respectivos domínios) às variáveis
Condições Lógicas

N>0 N<100 NOT(N>0) (N>0) AND (N<100) (N>0) OR (N<100)

Se n=45 1 1 0 1 1

Se n=-5 0 1 1 0 1

Se n=105 1 0 0 0 1

Exemplos de Negação de Condições


Condição Condição negada
N>0 N<=0
(N>0) AND (N<=100) (N<=0) OR (N>100)
(N>=0) OR (N<100) (N<0) AND (N>=100)
Maria da Conceição Neves

30
7.Algoritmo para Determinação da area de um triângulo
 ED
var real base, altura, area
 ALG
INICIO
ler(base, altura)
area <- base*altura /2
escrever(“Area do Triângulo=“, area)
FIM
A validação dos dados de entrada é fundamental.
Qual a alteração a fazer ao algoritmo para garantir os dados válidos?
repetir
ler(base, altura) ler(base, altura)
enquanto (base <=0 OR altura<=0)
Nos algoritmos apresentados neste documento, para simplificar, assumimos
que os dados a introduzir serão sempre válidos. No entanto poderiam os
algoritmos ter a responsabilidade de validar os dados procedendo de modo
análogo ao apresentado. Maria da Conceição Neves

7.Algoritmo para Determinação da área de um rectângulo


 ED
var real lado1, lado2, area

 ALG
INICIO
ler(lado1,lado2) ;
area  lado1 * lado2 ;
se (lado1=lado2)
então escrever(“Area Quadrado=“, area);
senão escrever(“Area Rectângulo“,area);
fimse
FIM

Plano de Testes
Traçagem

Maria da Conceição Neves

31
7. Outros Exercícios
1. Descreva um algoritmo que dada a sua idade e a idade do
seu amigo determine a relação de idades
ED int minhaIdade, amigoIdade
ALG
Inicio
ler(minhaIdade, amigoIdade);
se (minhaIdade= amigoIdade)
então escrever(“São da mesma idade”)
senão se (minhaIdade > amigoIdade)
então escrever(“O seu amigo é mais novo”)
senão escrever(“ O seu amigo é mais velho”)
fimse
fimse
Fim

2. Faça um programa que dadas as medidas dos três lados de


um triângulo o classifique quanto aos lados.

Maria da Conceição Neves

7. Estrururas de decisão encaixadas


EXEMPLO: Faça um programa que dados 3 números inteiros determine o maior e o menor deles.
Obs: (Considere que se os números forem 5,5,5 a resposta Maior 5 e Menor 5 é válida)
E.D. var int n1,n2,n3

INICIO
ler(n1,n2,n3);
SE (n1>n2)
ENTÃO /* n1>n2 */
SE (n1>n3)
ENTÃO /* n1>n2 and n1>n3*/
escrever (“O MAIOR é ” , n1);
SE (n2>n3)
ENTÃO /*n1>n2 and n1>n3 and n2>n3*/
escrever (“O MENOR é ”, n3);
SENÃO /*n1>n2 and n1>n3 and n2<=n3*/
escrever (“O MENOR é ”, n2);
FIMSE
SENÃO /* n1>n2 and n1<=n3*/
escrever (“O MAIOR é ” , n3);
escrever (“O MENOR é ”, n2);
FSE
SENAO /* n1<=n2 */
SE (n2>n3)
ENTÃO /* n1<=n2 and n2>n3*/
escrever (“O MAIOR é ” , n2);
SE (n1>n3)
ENTÃO /*n1<=n2 and n2>n3 and n1>n3*/
escrever (“O MENOR é ”, n3);
SENÃO /*n1<=n2 and n2>n3 and n1<=n3*/
escrever (“O MENOR é ”, n1);
FIMSE
SENÃO /* n1<=n2 and n2<=n3*/
escrever (“O MAIOR é ” , n3);
escrever (“O MENOR é ”, n1);
FIMSE
FIMSE
FIM
Maria da Conceição Neves

32
7. Desafio (Raciocínio lógico)
 Considere que tem oito esferas aparentemente
iguais, mas o peso de uma delas (só uma) é
diferente do das outras.
Pretende-se identificar qual a esfera diferente e
se ela é mais leve ou mais pesada.
Para tal dispõe exclusivamente de uma balança de
pratos sem pesos e só pode fazer três pesagens.

 Descreva um algoritmo que permita realizar


aquela tarefa.

Maria da Conceição Neves

7. Repetição controlada à entrada


Determinar a média de uma sequência de números terminada por
“sentinela”
E.D. var real nota, soma, media var int contador

ALG
INICIO
contador  0 iniciar contador
soma  0 iniciar acumulador

ler (nota)
enquanto (nota <> sentinela) fazer
contador  contador +1 incrementar contador

soma  soma +nota actualizar acumulador

ler (nota)
fimenquanto
media  soma /contador Atenção à divisão por 0
escrever(media)
FIM

Maria da Conceição Neves

33
7. Exemplo
Faça um programa que a partir de alguns registos com o número de kms
percorridos e da respectiva gasolina gasta determine o consumo médio
de gasolina aos 100km. Os dados de entrada terminam quando for
introduzido zero para o nº km.
ED var real km, litros, somakm, somalitros, media
ALG
INICIO
somakm
0; somalitros
0
ler(km);
ENQUANTO (km>0) FAZER
ler(litros)
somakm
somakm+km
somalitros
somalitros+litros
ler(km)
FIMENQUANTO;
media
 somalitros/somakm*100
escrever(media)
FIM
Maria da Conceição Neves

7. Repetição controlada à saída


Determinar a primeira potência de um dado número
inteiro positivo que é maior do que N

E.D. var int numero, N, potencia


ALG.
INICIO
ler(numero)
ler(N);
potencia  1 iniciar variável
REPETE
potencia  potencia * numero
ENQUANTO (potencia <= N)
escrever(potencia)
FIM Atenção
É preciso alterar o algoritmo de
modo a tratar os casos excepcionais
potências de 0 ou de 1

Maria da Conceição Neves

34
7. Exemplo Repetição
Faça um programa permita escrever em sequência os algarismos das
unidades, dezenas, ... de um número inteiro. Considere que dispõe
das operações div e mod que calculam respectivamente o quociente
e o resto da divisão inteira

ED var int n, d

ALG TRAÇAGEM
INICIO início

ler(n) n=453
REPETIR
d=453 mod 10=3 d=45 mod 10=5 d=4 mod 10=4
d n mod 10
3 5 4
escrever (d) n=453 div 10 =45 n=45 div 10 =4 n=4 div 10 =0
n  n div 10
ENQUANTO (n!=0); 45 ≠ 0? Sim 4 ≠ 0? Sim 0 ≠ 0? Não

FIM fim

Maria da Conceição Neves

7. Exemplo Repetição
Faça um programa que dado um número inteiro constrói um novo
número constituído pelos mesmos algarismos, mas por ordem
inversa.
Exemplo: Entrada: 453 Saída: 354

ED var int n,novo,y

ALG TRAÇAGEM
INICIO início

ler(n) n=453
novo<-0 novo=0
REPETIR
y=453 mod 10=3 y=45 mod 10=5 y=4 mod 10=4
y n mod 10
novo=0*10+3=3 novo=3*10+5=35 novo=35*10+4=354
novo novo*10+y
n  n div 10 n=453 div 10 =45 n=45 div 10 =4 n=4 div 10 =0
45 ≠ 0? Sim 4 ≠ 0? Sim 0 ≠ 0? Não
ENQUANTO (n!=0);
Novo=354
escrever(“Novo=“,novo)
fim
FIM

Maria da Conceição Neves

35
7. Repetição controlada por contador
Determinar a media da nota de ingresso dos n alunos de uma turma
E.D. var real nota, soma, media var int contador, nalunos
INICIO
ler(nalunos)
contador  0 iniciar contador
soma  0 iniciar acumulador
enquanto (contador < nalunos) fazer
ler (nota)
contador  contador +1 incrementar contador
soma  soma +nota actualizar acumulador
fimenquanto;
media  soma /contador
escrever(media)
FIM
Maria da Conceição Neves

7. Repetição controlada por contador


( com nº de iterações definido)

Determinar a media da nota de ingresso dos n alunos


de uma turma
E.D. var real nota, soma, media var int i, nalunos

INICIO
ler(nalunos)
soma  0 iniciar acumulador
para (i1 até nalunos passo 1) fazer
ler (nota)
soma  soma +nota actualizar acumulador
fimpara
media  soma /nalunos
escrever(media)
FIM

Maria da Conceição Neves

36
7.Exemplo
Faça um programa que dada uma sequência de números, não vazia,
terminada por 0 determine qual é o maior número.

ED var num, maior


ALG
INICIO
ler(num)
maiornum
ENQUANTO (num<>0) FAZER
SE (num > maior)
ENTAO
maior
num Altere o algoritmo
FIMSE de modo a calcular
ler(num) também o menor
FIMENQUANTO número
escrever(maior)
FIM
Maria da Conceição Neves

7. Outros exemplos:
1. Faça um programa que permita escrever a tabuada de um
dado número
ED var int num, i
ALG
INICIO
ler(num)
PARA( i=1 ATE 10 PASSO 1)
escrever(num,”x”,i ,“=“, num*i)
FIMPARA
FIM
2. Faça um programa que permita escrever numa folha A4 as
tabuadas do 1 até ao 9.

Obs. Pretende-se formatação usual das


antigas tabuadas organizadas em
blocos de 3 tabuadas.

Maria da Conceição Neves

37
7. Qual a função do seguinte programa escrito em pseudo-código?

E.D. var real Lado1, Area

ALG
Início
ler (Lado1) // Instrução de entrada de dados
Area  Lado1* Lado1 //Instrução de atribuição
/* Instrução de saída de resultados */

escrever( “Area do quadrado =“, Area);


Fim

1. O que aconteceria se fosse introduzido um número negativo?


2. Qual a alteração que faria no algoritmo?

Maria da Conceição Neves

7. Qual a função do seguinte programa escrito em pseudo-código?

E.D. var real Lado1, Area


ALG

Início

ler (Lado1) /* Instrução de entrada de dados */

Se ( Lado1<= 0) /* Instrução de decisão */

Então

escrever( “Quadrado impossível”) /*Inst saída resultados */

Senão

Area <-- Lado1* Lado1 /* Instrução de atribuição*/

escrever( “ Area do quadrado =“, Area) /*Inst saída result */

FimSe /* Fim de estrutura de decisão*/

Fim
Maria da Conceição Neves

38
7. Qual a função do seguinte programa escrito em pseudo-código?

E.D. var real Lado1, Area


ALG
Início
ler (Lado1)
Enquanto ( Lado1>0) /* Ciclo com teste à entrada */
Area <-- Lado1* Lado1
escrever( “ Area do quadrado =“, Area)
ler (Lado1)
FimEnquanto /* Fim de ciclo*/
Fim

Maria da Conceição Neves

7. Qual a função do seguinte programa escrito em pseudo-código?

E.D. var int num, quad


ALG
Início
Repete /* Ciclo com teste à saída */
ler (num)
quad <-- num* num
escrever( “ O quadrado de”, num, “=“,quad)
enquanto (quad < 1000) /*teste à saída */

Fim

Maria da Conceição Neves

39
7.Determinação do mínimo múltiplo comum
entre dois números inteiros positivos
ED int num1, num2, i
Alg
INICIO
ler(num1, num2)
SE (num1>num2)
ENTÃO
x=num1; num1=num2; num2=x;
FIMSE
i=1;
ENQUANTO (num2*i mod num1 < > 0) FAZER
i=i+1
FIMENQUANTO
escrever ("O menor múltiplo comum entre", num1, "e",
num2 ,"é ", num2*i)
FIM

Maria da Conceição Neves

7. Determinação do máximo divisor comum entre dois inteiros positivos

ED int num1, num2, x, div, enc;


ALG
INICIO
ler(num1, num2)
SE (num1=num2)
ENTÃO escrever (“ O máximo divisor comum é”,num1)
SENÃO
SE (num1 > num2)
ENTÃO x=num1; num1=num2; num2=x
FIMSE
enc=0
div=num1
ENQUANTO (enc=0) FAZER
SE (num1 mod div =0)
ENTÃO
SE (num2 mod div =0) ENTAO enc=1
SENÃO div= div-1
FIMSE
SENÃO div =div -1
FIMSE
FIMENQUANTO
escrever ("O mdc entre", num1, "e", num2 ,"é ", div)
FIMSE
FIM Maria da Conceição Neves

40
7. Determinação do máximo divisor comum entre dois números
(Um algoritmo mais eficiente)

ED int num1, num2, x, div;


ALG
INICIO
ler(num1, num2)
SE (num1=num2)
ENTÃO escrever (“ O máximo divisor comum é”,num1)
SENÃO
SE (num1>num2)
ENTÃO
x=num1; num1=num2; num2=x
FIMSE
div=num1
ENQUANTO (num1 MOD div <> 0 OR num2 MOD div <> 0)
div <- div-1
FIMENQUANTO
escrever ("O mdc entre", num1, "e", num2 ,"é ", div)
FIMSE
FIM

Maria da Conceição Neves

7. A Resolução de Problemas
 Há basicamente dois tipos de problemas:

1. Aqueles para os quais é possível descrever um procedimento


determinístico que garante o sucesso.

2. Aqueles que, não sendo possível descrever um procedimento


que garante a solução, exigem uma pesquisa da solução.
A resolução deste tipo de problemas é amplamente estudada
no domínio da Inteligência Artificial. Várias estratégias de
pesquisa de solução são propostas.

Maria da Conceição Neves

41
7. Notas Finais
 A descrição de problemas reais inclui um conjunto de detalhes
supérfluos. Deve-se identificar o problema abstrato.

 A abstração permite soluções comuns para os problemas que são


semelhantes.

 A especificação dos algoritmos e estruturas de dados pode ser


realizada em qualquer linguagem. É preciso evitar ambiguidade.

 Precisamos de seleccionar e projectar as estruturas de dados.

 Um algoritmo define um processo. O processo é especificado em


termos de instruções simples. Cada passo do processo tem que ser
implementado através de uma instrução ou por algum outro algoritmo.

 Algoritmo correto – produz corretos “outputs” (estados finais) em


presença de “inputs” (estados iniciais) válidos.

Maria da Conceição Neves

7. Notas Finais

 Atendendo à complexidade das linguagens de programação como o por


exemplo o JAVA, devemos começar por descrever os algoritmos em
pseudocódigo ou fluxograma focando-nos assim na conceção do
algoritmo.

 Codificar ou programar é implementar numa linguagem de


programação as estruturas de dados e os algoritmos.

 Um programa não é só para ser executado é também para ser lido.


A adequada indentação do código é muito importante pois ajuda a
visualizar a estrutura do programa e compreender melhor a semântica
associada.

Maria da Conceição Neves

42

Você também pode gostar