Escolar Documentos
Profissional Documentos
Cultura Documentos
de
Algoritmia e Programação
Algoritmia
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.
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.
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
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
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
4
2.Programação Procedimental
PROGRAMA =
Algoritmo
+
Estrutura de Dados
2. O que é programar?
Programar é
Conceber algoritmos
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
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.
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
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
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
ocorrer
O tamanho da variável depende do tipo de valor que
armazena.
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
escrever( )
Instrução de atribuição a b + c
10
2. Descrição de Algoritmos - Fluxogramas
Inicio / Fim
Ações atribuições
Decisão
Linhas de Fluxo
Maria da Conceição Neves
11
3. Teorema Fundamental da Refere-se à ordem de
Programação Estruturada execução das instruções
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)
Instução1
Instução2
Instução3
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 ;
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
14
4. Estrutura de controlo - Decisão
Se
falso
condição
verdade
então ação1
Se falso
condition
verdade
ação2 senão
então ação1
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
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
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
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( … ) …
enquanto
Condição de teste
falso
verdade
tarefas fazer
19
4. Estrutura repetitiva – Enquanto (…) Fazer…
Fluxograma Pseudocódigo
verdade tarefas
tarefas fazer
FimEnquanto
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
Repete
Repete
tarefas
tarefas
true
enquanto
Condição de teste
while (condition)
false
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
end
Maria da Conceição Neves
22
4. Estrutura repetitiva – Para(…) fazer …
Fluxograma Pseudocódigo
tarefas
FimPara
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
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
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
25
5. Operações Aritméticas
Operandos:
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
27
6. Cálculo Proposicional Básico
Cálculo Proposicional faz o estudo das operações
lógicas sobre proposições.
Implicação =>
Equivalência
6. Operação Negação
Operador NOT (operador unário)
Tabela de Verdade:
Seja p uma proposição
NOT p
Propriedades
NOT ( NOT p ) p
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
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)
Se n=45 1 1 0 1 1
Se n=-5 0 1 1 0 1
Se n=105 1 0 0 0 1
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
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
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
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.
ALG
INICIO
contador 0 iniciar contador
soma 0 iniciar acumulador
ler (nota)
enquanto (nota <> sentinela) fazer
contador contador +1 incrementar contador
ler (nota)
fimenquanto
media soma /contador Atenção à divisão por 0
escrever(media)
FIM
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
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
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
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
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
INICIO
ler(nalunos)
soma 0 iniciar acumulador
para (i1 até nalunos passo 1) fazer
ler (nota)
soma soma +nota actualizar acumulador
fimpara
media soma /nalunos
escrever(media)
FIM
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.
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.
37
7. Qual a função do seguinte programa escrito em pseudo-código?
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 */
Início
Então
Senão
Fim
Maria da Conceição Neves
38
7. Qual a função do seguinte programa escrito em pseudo-código?
Fim
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
40
7. Determinação do máximo divisor comum entre dois números
(Um algoritmo mais eficiente)
7. A Resolução de Problemas
Há basicamente dois tipos de problemas:
41
7. Notas Finais
A descrição de problemas reais inclui um conjunto de detalhes
supérfluos. Deve-se identificar o problema abstrato.
7. Notas Finais
42