Вы находитесь на странице: 1из 31

Programao

11543 : Engenharia Informtica


6619 : Tecnologias e Sistemas de Informao

Cap. 4 Algoritmos e Programao Estruturada

Algoritmos e Programao Estruturada

Algoritmos e Programao Estruturada

Objectivos:

Aprender o conceito de algoritmo e suas caractersticas fundamentais

Como resolver problemas atravs de algoritmos

Como desenhar algoritmos e programas

Distinguir as diferentes representaes de algoritmos

Como usar fluxogramas em programao visual

Como utilizar o mtodo cartesiano de dividir-para-conquistar em programao estruturada

Aprender a utilizar estruturas de controlo de fluxo: sequncia, seleco e repetio

Aprender a utilizar programao estruturada

Algoritmos e Programao Estruturada

Problemas e 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 a toda a informtica.

A construo de algoritmos para resolver os problemas uma das maiores dificuldades, mas
tambm um dos maiores desafios para quem programa computadores.

Algoritmos e Programao Estruturada

Noo de Problema
Exemplo: como 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.

Algoritmos e Programao Estruturada

Noo de Algoritmo

Entradas: ingredientes

Sadas: bolo

Algoritmo: receita

Farinha de Trigo
Acar
Ovos
Fermento
Leite

algoritmo

Manteiga

Um algoritmo opera sobre um conjunto de entradas (farinha ovos, fermento, etc. no caso do bolo) de modo a gerar
uma sada que seja til (ou agradvel) para o utilizador (o bolo pronto).

Assim, os passos ou aces dum algoritmo para confeccionar um bolo so os seguintes:


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.

Algoritmos e Programao Estruturada

Desenho ou Concepo de Algoritmos


para a Resoluo de Problemas

PROBLEMA

ALGORITMO

PROGRAMA

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

Algoritmos e Programao Estruturada

Passos na Concepo e 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 (manualmente) o algoritmo

Executar o algoritmo

Algoritmos e Programao Estruturada

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

Algoritmos e Programao Estruturada

Caractersticas Fundamentais dum Algoritmo

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.

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


Por exemplo, para ir de casa at o trabalho, podemos escolher diversos
meios de transportes em funo do preo, conforto, rapidez, etc..

Algoritmos e Programao Estruturada

Representaes de Algoritmos

Linguagem Natural
-

Fluxograma (ou Diagrama de Fluxo)


-

Os algoritmos so expressos directamente em linguagem natural (e.g. o portugus como no exemplo do


bolo).

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 pseudocdigo. 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.

Algoritmos e Programao Estruturada

Codificao em Linguagem Natural (1)

Problema:

Entradas:

dois valores reais, X e Y

Sadas:

Cculo da mdia aritmtica de dois valores reais?

a mdia M=(X+Y)/2

Algoritmo:
1.
2.
3.
4.
5.

Incio
Ler X,Y
Calcular a mdia M de X e Y
Escrever M
Fim

Algoritmos e Programao Estruturada

Codificao em Fluxograma (2)

Problema:

dois valores reais, X e Y

Sadas:

Incio

Entradas:

Cculo da mdia aritmtica de dois valores reais?

a mdia M=(X+Y)/2

Algoritmo:

Ler X

Ler Y

M=(X+Y)/2

Escreve M

Fim

Algoritmos e Programao Estruturada

Codificao em Pseudo-cdigo (3)

Problema:

Entradas:

dois valores reais, X e Y

Sadas:

Cculo da mdia aritmtica de dois valores reais?

a mdia M=(X+Y)/2

Algoritmo:
1.
2.
3.
4.
5.

Incio
Ler X,Y
Calcular a mdia M=(X+Y)/2
Escrever M
Fim

Algoritmos e Programao Estruturada

Codificao em C (4)

Problema:

Entradas:

dois valores reais, X e Y

Sadas:

Cculo da mdia aritmtica de dois valores reais?

a mdia M=(X+Y)/2

Programa:

#include <stdio.h>
main(){
float X, Y, M;
printf(Introduza o valor de X:\n);
scanf("%f", &X);
printf(Introduza o valor de Y:\n);
scanf("%f", &Y);
M=(X+Y)/2;
printf(A media M = %f\n,M);
}

Algoritmos e Programao Estruturada

Programao Visual com Fluxogramas

Um fluxograma uma 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/instrues

conector na mesma pgina


inicializao
teste e actualizao
conector para outra pgina

Algoritmos e Programao Estruturada

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.

entrance

entrance

entrance

exit

exit

SEQUNCIA

exit
SELECO

REPETIO

Algoritmos e Programao Estruturada


{}

Sequncia

Numa sequncia processado um conjunto


de instrues (ou aces) em srie.

No h qualquer possibilidade de alterar a


ordem de processamento das instrues, i.e.
aps processar a 1 instruo 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 }

entrance

exit

Algoritmos e Programao Estruturada


if-else

Seleco de 2-vias

Uma estrutura de seleco tambm


designada por estrutura de deciso.

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
processada.

Em C, uma estrutura de seleco com 2 vias


a instruo if-else.

false

true

Algoritmos e Programao Estruturada

Exemplo em C: if-else

Problema:

Entradas:

xey

Sadas:

Calcular o maior de dois inteiros?

#include <stdio.h>
int main()
{
int x, y, M;
printf(Introduza x e y: \n);
scanf("%d%d", &x, &y);
if (x > y)
M = x;
else
M = y;

Programa:

printf("O valor maior = %d\n", M);


return 0;
}

Algoritmos e Programao Estruturada


if

Seleco de 1-via

Neste caso, se a expresso lgica tiver


resultado false, nenhuma aco processada
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.

false

true

Algoritmos e Programao Estruturada

Exemplo em C: if

Problema:

Entradas:

x, y

Sadas:

Calcular o maior de dois inteiros?

Programa:

#include <stdio.h>
int main()
{
int x, y, M;
printf(Introduza x e y: \n);
scanf("%d%d", &x, &y);
M = x;
if (y > M)
M = y;
printf("O valor maior = %d\n", M);
return 0;
}

Algoritmos e Programao Estruturada


switch

Seleco de n-vias

Neste caso, a deciso no feita com base


numa expresso lgica porque h mais do que
2 resultados 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.

...

Algoritmos e Programao Estruturada

Exemplo em C: switch

#include <stdio.h>
int main()
{
Problema:
int x, y, resultado;
Calculadora aritmtica com as 4 char operacao;

operaes bsicas?

Entradas:

switch (operacao) {
case + :
resultado
break;
case - :
resultado
break;
case * :
resultado
break;
case / :
resultado
}

x, operacao, y

Sadas:

printf(Introduza x operador y: \n);


scanf("%d %c %d", &x, &operacao, &y);

resultado

Programa:

= x + y;
= x - y;
= x * y;
= x / y;

printf("O resultado = %d\n", resultado);


return 0;
}

Algoritmos e Programao Estruturada

Repetio com 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).

O teste (da expresso lgica) precede a


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

O teste importante porque funciona como


uma condio de paragem (a false) dos ciclos
or repeties.

Em C, uma estrutura de repetio deste tipo


a instruo while.

false

true

Algoritmos e Programao Estruturada

Exemplo em C: while

Problema:

Entradas:

N/A

Sadas:

Calcular a soma dos inteiros no intervalo [1,100]?

soma

Programa:

#include <stdio.h>
int main()
{
int soma, n=1;
soma = 0;
while (n <= 100)
{
soma = soma + n;
n = n + 1;
}

// inicializao da varivel soma


// teste de paragem
// actualizao da varivel soma
// actualizao da varivel de controlo

printf("O valor da soma = %d\n", soma);


return 0;
}

Algoritmos e Programao Estruturada

Repetio com 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


a instruo do-while.
?

false

true

Algoritmos e Programao Estruturada

Exemplo em C: do-while

Problema:

Entradas:

N/A

Sadas:

Calcular a soma dos inteiros no intervalo [1,100]?

soma

Programa:

#include <stdio.h>
int main()
{
int soma, n=1;
soma = 0;
do
{
soma = soma + n;
n = n + 1;
}
while (n <= 100);

// inicializao da varivel soma


// actualizao da varivel soma
// actualizao da varivel de controlo
// teste de paragem

printf("O valor da soma = %d\n", soma);


return 0;
}

Algoritmos e Programao Estruturada

Repetio com N Pr-definido de Ciclos

Esta estrutura de repetio em tudo idntica


s anteriores.

O teste feito cabea.

A diferena que partida se especifica o


nmero de ciclos (ou iteraes) que sero
efectuados, i.e. o nmero de vezes que a
aco ser processada.

Em C, uma estrutura de repetio deste tipo


a instruo for.

?
false

true

Algoritmos e Programao Estruturada

Exemplo em C: for

Problema:

Entradas:

inicializao

N/A

Sadas:

Calcular a soma dos inteiros no intervalo [1,100]?

soma

Programa:

teste de paragem

#include <stdio.h>
int main()
{
int soma, n;
soma = 0;
for (n=1; n<=100; n++)
soma = soma + n;

// inicializao da varivel soma


// actualizao da varivel soma

printf("O valor da soma = %d\n", soma);


return 0;
}

actualizao

Algoritmos e Programao Estruturada

Programao Estruturada

Correspondncia entre fluxograma e programa;

Uso das 3 estruturas fundamentais de controlo: Sequncia-Seleco-Repetio;

As estruturas usadas devem ter um incio e um final;

Programa escrito com identao (realce), espaos em branco e comentrios para facilitar a leitura
do mesmo;

Eliminao das transferncias incondicionais (os gotos do Fortran);

Desenho descendente e segmentao em mdulos (ou funes);

Construo de mdulos (ou funes) de tamanho adequado;

Declarao do domnio (scope) de aco das variveis locais (dentro das funes) e globais (o
programa inteiro);

Documentao do programa.

Algoritmos e Programao Estruturada

Sumrio:

Resoluo de problemas atravs de algoritmos

Concepo de algoritmos e programas

Passos na concepo e 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

FIM