Post on 09-Apr-2018
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
1/15
1
1
Algoritmos, fluxogramas epseudo-cdigo
Cap.2.5:Design de Algoritmos eProgramao Estruturada
2
Sumrio Problemas e algoritmos Desenho de algoritmos/programas Passos na construo de algoritmos Mtodo Cartesiano de Dividir-Para-Conquistar Caractersticas fundamentais dum algoritmo Representao de algoritmos Fluxogramas e programao visual Estruturas de controlo de fluxo: sequncia, seleco e repetio Programao estruturada
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
2/15
2
3
Problemas & Algoritmos Para resolver umproblema atravs dum computador necessrio
encontrar em primeiro lugar uma maneira de descrev-lo de umaforma clara e precisa.
tambm preciso que encontremos uma sequncia de passos queconduzam sua resoluo. Esta sequncia de passos designadaporalgoritmo.
A noo de algoritmo central para toda a informtica. A criao de algoritmos para resolver os problemas uma das
maiores dificuldades, mas tambm um dos desafios mais atractivos,dos iniciados em programao em computadores.
4
Problema:Fazer um bolo?
Uma receita uma descrio dum conjunto de passos ouaces que fazem a combinao dum conjunto de ingredientescom vista a obter um produto gastronmico particular.
Farinha de TrigoOvos
Manteiga
AcarreceitaFermento Leite
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
3/15
3
5
Algoritmo:Como fazer um bolo?
Algoritmo (receita de bolo):1) Bater duas claras em castelo;2) Adicionar duas gemas;3) Adicionar um xcara de acar;4) Adicionar duas colheres de manteiga;5) Adicionar uma xcara de leite de coco;6) Adicionar farinha e fermento;7) Colocar numa forma e levar ao forno em lume brando.
Farinha de TrigoOvos
Manteiga
AcarInstruesFermento Leite
Um algoritmo opera sobre um conjunto de
entradas (farinha ovos, fermento, etc. no caso dobolo) de modo a gerar uma sada que seja til (ou agradvel) para o utilizador (o bolo pronto).
6
Desenho dealgoritmos/programas
De um modo geral, considera-se que um algoritmo uma descrio, passo-a-passo, de uma metodologia que conduz resoluo de um problema ou execuo de uma tarefa.
A programao consiste na codificao precisa desse algoritmo, segundo umalinguagem de programao especfica.
H, pois, que ter em considerao que existem trs fases distintas naelaborao de programas: a anlise do problema (especificao do problema, anlise de requisitos,
pressupostos, etc.) a concepo do algoritmo a traduo desse algoritmo na linguagem de programao
PROBLEMA ALGORITMO PROGRAMA
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
4/15
4
7
Passos na construo dealgoritmos
Compreender o problema Identificar os dados de entrada Identificar os dados de sada Determinar o que preciso para transformar dados de entrada em dados de
sada:usar a estratgia dodividir-para-conquistarobservar regras e limitaesidentificar todas as aces a realizareliminar ambiguidades
Construir o algoritmo Testar o algoritmo Executar o algoritmo
8
Mtodo Cartesianode Dividir-Para-Conquistar
Tambm o conhecido pormtodo descendente (top-down method) oumtodo derefinamento passo-a-passo
Este mtodo consiste em dividir um problema em partes menores (ou sub-problemas) de modo a que seja mais fcil a sua resoluo.
Exemplo: Fazer sumo de laranja? Lavar laranja; Partir laranja ao meio; Espremer laranja; Filtrar o sumo; Servir o sumo.
Passo-a-passo, significa que cada passo completado antes que o prximocomece.
Exemplo: impossvel ver telejornal antes de executar por inteiro opasso anterior de ligar a TV
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
5/15
5
9
Caractersticas fundamentaisdum algoritmo
Um algoritmo deve ter 5 caractersticas fundamentais: Finitude: um algoritmo deve sempre terminar aps um nmero finito de passos. Definio: cada passo de um algoritmo deve ser precisamente definido. As aces
devem ser definidas rigorosamente e sem ambiguidades. Entradas: um algoritmo deve ter zero ou mais entradas, isto quantidades que lhe
so fornecidas antes do algoritmo iniciar. Sadas: um algoritmo deve ter uma ou mais sadas, isto quantidades que tem uma
relao especfica com as entradas. Eficincia: Um algoritmo deve ser eficiente. Isto significa que todas as operaes
devem ser suficientemente bsicas de modo que possam ser em princpioexecutadas com preciso em um tempo finito por um ser humano usando papel elpis.
NOTA: Pode haver mais do que um algoritmo para resolver um problema.
Por exemplo, para ir de casa at o trabalho, posso escolher diversosmeios de transportes em funo do preo, conforto, rapidez, etc. .
10
Representaes de algoritmos Linguagem Natural
Os algoritmos so expressos directamente em linguagem natural (e.g. oportugus como no exemplo do bolo).
Fluxograma (ou Diagrama de Fluxo)Esta um representao grfica que emprega formas geomtricaspadronizadas para indicar as diversas aces e decises que devem ser executadas para resolver o problema.
Pseudo-linguagemEmprega uma linguagem intermediria entre a linguagem natural e umalinguagem de programao para descrever os algoritmos.
No existe consenso entre os especialistas sobre qual a melhor maneira de representar um algoritmo.Actualmente a maneira mais comum de representar algoritmos atravs de uma pseudo-linguagem oupseudo-cdigo. Esta forma de representao tem a vantagem de o algoritmo seja escrito deuma forma que est prxima de uma linguagem de programao de computadores.
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
6/15
6
11
Cdigo natural:clculo do zero da equao ax+b=0
1. Incio de programa 2. ler a, b 3. se a diferente de 0 ento
calcula o valor de x (ax+b=0) imprimir valor de x
seno
imprimir No h zero 4. Fim de programa
12
Fluxograma:clculo do zero da equao ax+b=0
Ler a
Ler b
a 0
Imprime Noexiste zero
x=- b / a
Imprimevalor de x
Sim
No
Incio
Fim
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
7/15
7
13
Pseudo-cdigo:clculo do zero da equao ax+b=0
1. Incio de programa2. ler a, b3. se a 0 ento
x=-b/aimprimir valor do zero x
seno
imprimir No h zerom de se4. Fim de programa
14
Cdigo C:clculo do zero da equao ax+b=0
#include
main(){
float a, b; printf("Entre com os coeficientes da equacao.\n");
scanf("%f %f", &a, &b);
if (a != 0){
x = -b/a; printf(O valor de x = %f\n,x);
}else
printf(No existe zero);}
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
8/15
8
15
Fluxogramas & programaovisual
Representao grfica de um algoritmo. Programao visual: a utilizao de diagramas na programao. Descrevem o fluxo dum algoritmo atravs de um conjunto de figuras
geomtricas padronizadas ligadas por setas de fluxo.
incio e fim de fluxograma
entrada e sada de dados
teste e deciso
outras aces/sinstrues
conector na mesma pgina
conector para outra pgina
inicializaoteste e actualizao
16
Estruturas lgicas deprogramao:estruturas de controlo
Umaestrutura (de controlo) a unidade bsica da lgica deprogramao.
Em meados da dcada de 60, alguns matemticos provaram quequalquer programa podia ser construdo atravs da combinao de 3estruturas bsicas:sequncia , seleco e repetio .
entrada entradaentrada
exit exit
exit
SEQUNCIA SELECO REPETIO
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
9/15
9
17
Sequncia{}
entrada
exit
Numa sequncia processado um conjunto deaces (ou instrues) em srie.
No h qualquer possibilidade de alterar aordem de processamento das aces, i.e. apsprocessar a 1 aco processa-se a 2, depoisda 2 processa-se a 3, e assim por diante atprocessar a ltima aco.
Em C, uma sequncia um bloco de instruesque comea com{ e termina com}
fluxograma duma sequncia
18
Seleco com 2 vias Uma estrutura deseleco tambm
designada por estrutura dedeciso .
Neste caso, o fluxo de processamento seguepor 1 das 2 vias, dependendo do valor lgico(verdadeiro ou falso) da expresso avaliada noincio da estrutura.
Se o fluxo de processamento s passa por 1via, ento s uma das aces realizada ouprocessada.
Em C, uma estrutura de seleco com 2 vias a instruoif -else .
if-else
truefalse ?
fluxogramaduma seleco de 2 vias
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
10/15
10
19
Exemplo em C: if-else#include
void main(){
int x, y,maior;
scanf(%d%d\n,&x,&y);if (x > y)
maior = x;else maior = y;printf(O maior dos dois inteiros = %d\n,maior);
}
Problema: Calcular o maior dedois nmeros inteiros x e y.
20
Seleco com 1 viaif
?truefalse
Neste caso, se a expresso lgica tiverresultadofalse , nenhuma aco processadadentro da estrutura de seleco.
S processada uma aco dentro daestrutura de seleco se a expresso lgica fortrue ; da, o nome de seleco com 1 via.
Em C, uma estrutura de seleco com 1 via ainstruoif .
fluxogramaduma seleco de 1 via
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
11/15
11
21
Exemplo em C: if #include
void main(){
int nota;
printf(Introduza o valor da nota: );scanf(%f,¬a);
if ( (nota >= 9.0) && (nota < 9.5) )nota = 9.5;
printf(A nota = %f\n, nota);}
Problema: Ler e escrever umanota entre 0 e 20.0 valores.Caso a nota esteja no intervalo[9.0,9.5[, ela deve serrectificada para 9.5.
22
Seleco c/ n-viasswitch
?
. . .
Neste caso, a deciso no feita com base numaexpresso lgica porque h mais do que 2 resultadospossveis.
Tambm s so processadas a aco ou as acesencontradas numa via.
Em C, uma estrutura de seleco com n vias ainstruoswitch com break. No entanto, se nousarmos o break, h a possibilidade de executar asaces de vrias vias.
fluxogramaduma seleco de n vias
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
12/15
12
23
Exemplo em C: switch#include
void main(){
int count;
scanf(%d,&count);
switch count{ case 5: printf(5\n); break;
case 4: printf(4\n); break;case 3: printf(3\n); break;case 2: printf(2\n); break;case 1: printf(1\n);
}}
24
Repetio c/ teste cabeawhile
true
false
?
Neste caso, tambm h a necessidade detomar uma deciso com base no valor lgicoduma expresso.
No entanto, a mesma aco ser executadarepetidamente enquanto o resultado daexpresso lgica se mantiver verdadeiro (true).
O teste (da expresso lgica) precede a aco.Diz-se, por isso, que oteste cabea .
O teste importante porque funciona comouma condio de paragem (a false) dos ciclosor repeties.
Em C, uma estrutura de repetio deste tipo a instruowhile.
fluxogramaduma repetio c/ teste cabea
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
13/15
13
25
Exemplo em C: while#include
void main(){
int sum, k=1;
sum = 0; // inicializacao da somawhile (k
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
14/15
14
27
Exemplo: do - while#include
main(){
int sum, k=1;
sum = 0; // inicializacao da variavel do ciclodo{
sum = sum + k;k = k + 1; //actualiza a variavel do ciclo}while (k
8/8/2019 Algoritmos_fluxogramas e pseudo-cdigo
15/15
15
29
Exemplo em C: for#include
void main(){
int i; // variavel do cicloint sum;
sum = 0; // inicializacao da somafor (i=1; i