Você está na página 1de 15

Cap.2.

5:
Design de Algoritmos e
Programao Estruturada

Algoritmos, fluxogramas e
pseudo-cdigo

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

1
Problemas & Algoritmos
Para resolver um problema atravs dum computador necessrio
encontrar em primeiro lugar uma maneira de descrev-lo de uma
forma clara e precisa.
tambm preciso que encontremos uma sequncia de passos que
conduzam sua resoluo. Esta sequncia de passos designada
por algoritmo.
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.

Problema:
Fazer um bolo?
Farinha de Trigo
Ovos Acar
Fermento Leite receita
Manteiga

Uma receita uma descrio dum conjunto de passos ou


aces que fazem a combinao dum conjunto de ingredientes
com vista a obter um produto gastronmico particular.

2
Um algoritmo opera sobre um conjunto de
entradas (farinha ovos, fermento, etc. no caso do

Algoritmo: bolo) de modo a gerar uma sada que seja til


(ou agradvel) para o utilizador (o bolo pronto).

Como fazer um bolo?


Farinha de Trigo
Ovos Acar
Fermento Leite Instrues
Manteiga

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.

Desenho de
algoritmos/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 uma
linguagem de programao especfica.
H, pois, que ter em considerao que existem trs fases distintas na
elaborao 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


6

3
Passos na construo de
algoritmos
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 do dividir-para-conquistar
observar regras e limitaes
identificar todas as aces a realizar
eliminar ambiguidades
Construir o algoritmo
Testar o algoritmo
Executar o algoritmo

Mtodo Cartesiano
de Dividir-Para-Conquistar
Tambm o conhecido por mtodo descendente (top-down method) ou
mtodo de refinamento 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 prximo


comece.
Exemplo: impossvel ver telejornal antes de executar por inteiro o
passo anterior de ligar a TV
8

4
Caractersticas fundamentais
dum 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 princpio
executadas com preciso em um tempo finito por um ser humano usando papel e
lpis.

NOTA: Pode haver mais do que um algoritmo para resolver um problema.

Por exemplo, para ir de casa at o trabalho, posso escolher diversos


meios de transportes em funo do preo, conforto, rapidez, etc..
9

Representaes de algoritmos
Linguagem Natural
Os algoritmos so expressos directamente em linguagem natural (e.g. o
portugus como no exemplo do bolo).

Fluxograma (ou Diagrama de Fluxo)


Esta um representao grfica que emprega formas geomtricas
padronizadas para indicar as diversas aces e decises que devem ser
executadas para resolver o problema.

Pseudo-linguagem
Emprega uma linguagem intermediria entre a linguagem natural e uma
linguagem 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 ou
pseudo-cdigo. Esta forma de representao tem a vantagem de o algoritmo seja escrito de
uma forma que est prxima de uma linguagem de programao de computadores.
10

5
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

11

Fluxograma:
clculo do zero da equao ax+b=0
Incio

Ler a

Ler b

No
a0

Sim

x=-b/a

Imprime Imprime No
valor de x existe zero

Fim 12

6
Pseudo-cdigo:
clculo do zero da equao ax+b=0

1. Incio de programa
2. ler a, b
3. se a0 ento
x=-b/a
imprimir valor do zero x
seno
imprimir No h zero
fim de se
4. Fim de programa

13

Cdigo C:
clculo do zero da equao ax+b=0
#include <stdio.h>

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);
} 14

7
Fluxogramas & programao
visual
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 teste e deciso

entrada e sada de dados outras aces/sinstrues

conector na mesma pgina


inicializao
teste e actualizao
conector para outra pgina

15

Estruturas lgicas de
programao:
estruturas de controlo
Uma estrutura (de controlo) a unidade bsica da lgica de
programao.
Em meados da dcada de 60, alguns matemticos provaram que
qualquer programa podia ser construdo atravs da combinao de 3
estruturas bsicas: sequncia, seleco e repetio.
entrada entrada
entrada

exit

exit
exit

SEQUNCIA SELECO REPETIO


16

8
{}

Sequncia
Numa sequncia processado um conjunto de
aces (ou instrues) em srie.
entrada

No h qualquer possibilidade de alterar a


ordem de processamento das aces, i.e. aps
processar a 1 aco processa-se a 2, depois
da 2 processa-se a 3, e assim por diante at
processar a ltima aco.

Em C, uma sequncia um bloco de instrues


que comea com { e termina com }
exit

fluxograma duma sequncia

17

if-else

Seleco com 2 vias


Uma estrutura de seleco tambm
designada por estrutura de deciso.
false true
?
Neste caso, o fluxo de processamento segue
por 1 das 2 vias, dependendo do valor lgico
(verdadeiro ou falso) da expresso avaliada no
incio da estrutura.

Se o fluxo de processamento s passa por 1


via, ento s uma das aces realizada ou
fluxograma
processada. duma seleco de 2 vias

Em C, uma estrutura de seleco com 2 vias


a instruo if-else.

18

9
Problema: Calcular o maior de
dois nmeros inteiros x e y.

Exemplo em C: if-else
#include <stdio.h>
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);
}

19

if

Seleco com 1 via


Neste caso, se a expresso lgica tiver
resultado false, nenhuma aco processada false
?
true

dentro da estrutura de seleco.

S processada uma aco dentro da


estrutura de seleco se a expresso lgica for
true; da, o nome de seleco com 1 via.

Em C, uma estrutura de seleco com 1 via a


instruo if.
fluxograma
duma seleco de 1 via

20

10
Problema: Ler e escrever uma
nota entre 0 e 20.0 valores.
Caso a nota esteja no intervalo
[9.0,9.5[, ela deve ser

Exemplo em C: if rectificada para 9.5.

#include<stdio.h>
void main()
{
int nota;
printf(Introduza o valor da nota: );
scanf(%f,&nota);
if ( (nota >= 9.0) && (nota < 9.5) )
nota = 9.5;
printf(A nota = %f\n, nota);
}

21

switch

Seleco c/ n-vias
Neste caso, a deciso no feita com base numa
expresso lgica porque h mais do que 2 resultados fluxograma
duma seleco de n vias
possveis.
Tambm s so processadas a aco ou as aces
encontradas numa via.
Em C, uma estrutura de seleco com n vias a
instruo switch com break. No entanto, se no ?

usarmos o break, h a possibilidade de executar as


aces de vrias vias.

...

22

11
Exemplo em C: switch
#include <stdio.h>
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);
}
}

23

while

Repetio c/ teste cabea


Neste caso, tambm h a necessidade de
tomar uma deciso com base no valor lgico
duma expresso.

No entanto, a mesma aco ser executada


repetidamente enquanto o resultado da
expresso lgica se mantiver verdadeiro (true). true
?

O teste (da expresso lgica) precede a aco.


false
Diz-se, por isso, que o teste cabea.

O teste importante porque funciona como


uma condio de paragem (a false) dos ciclos fluxograma
duma repetio c/ teste cabea
or repeties.

Em C, uma estrutura de repetio deste tipo


a instruo while. 24

12
Exemplo em C: while
#include <stdio.h>
void main()
{
int sum, k=1;
sum = 0; // inicializacao da soma
while (k <=100)
{
sum = sum + k;
k = k + 1; //actualiza a variavel do ciclo
};
printf(A soma =%i\n,sum);
}

25

do-while

Repetio c/ teste cauda


Esta estrutura de repetio em tudo idntica
anterior. A diferena que o teste feito
aps o processamento da aco

O teste (da expresso lgica) sucede a aco.


Diz-se, por isso, que o teste cauda.

Em C, uma estrutura de repetio deste tipo ?


true

a instruo do-while.
false

fluxograma
duma repetio c/ teste cauda

26

13
Exemplo: do - while
#include <stdio.h>
main()
{
int sum, k=1;

sum = 0; // inicializacao da variavel do ciclo


do
{
sum = sum + k;
k = k + 1; //actualiza a variavel do ciclo
}
while (k<=100);
printf(A soma =%i\n,sum);
}

27

Repetio for

c/ nmero pr-definido de ciclos


Esta estrutura de repetio em tudo idntica
s anteriores.

O teste feito cabea.

true
A diferena que logo partida especificado ?
o nmero de ciclos (ou iteraes) que sero
efectuados, i.e. o nmero de vezes que a false

aco ser processada.


fluxograma
Em C, uma estrutura de repetio deste tipo duma repetio c/ pr-definido de ciclos
a instruo for.

28

14
Exemplo em C: for
#include <stdio.h>
void main()
{
int i; // variavel do ciclo
int sum;
sum = 0; // inicializacao da soma
for (i=1; i <=100; i++)
sum = sum + i;
printf(A soma = %i\n,sum);
}

actualizao
teste de paragem
inicializao
29

Programao estruturada
1. Correspondncia entre fluxograma e programa;
2. Uso das 3 estruturas fundamentais de controlo:
Sequncia-Seleco-Repetio;
3. As estruturas usadas devem ter um incio e um final;
4. Programa escrito com identao (realce), espaos em branco e
comentrios para facilitar a leitura do mesmo;
5. Eliminao das transferncias incondicionais (os gotos do Fortran);
6. Desenho descendente e segmentao em mdulos (ou funes);
7. Construo de mdulos (ou funes) de tamanho adequado;
8. Declarao do domnio (scope) de aco das variveis locais (dentro das
funes) e globais (o programa inteiro);
9. Documentao do programa.

30 FIM

15

Você também pode gostar