Anda di halaman 1dari 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 Farinha de Trigo


Ovos Acar
Sadas: bolo
Fermento Leite algoritmo
Algoritmo: receita 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
- 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.
Algoritmos e Programao Estruturada

Codificao em Linguagem Natural (1)

Problema:
Cculo da mdia aritmtica de dois valores reais?
Entradas:
dois valores reais, X e Y
Sadas:
a mdia M=(X+Y)/2
Algoritmo:
1. Incio
2. Ler X,Y
3. Calcular a mdia M de X e Y
4. Escrever M
5. Fim
Algoritmos e Programao Estruturada

Codificao em Fluxograma (2)

Problema:
Cculo da mdia aritmtica de dois valores reais? Incio

Entradas:
dois valores reais, X e Y Ler X

Sadas:
Ler Y
a mdia M=(X+Y)/2
Algoritmo:
M=(X+Y)/2

Escreve M

Fim
Algoritmos e Programao Estruturada

Codificao em Pseudo-cdigo (3)

Problema:
Cculo da mdia aritmtica de dois valores reais?
Entradas:
dois valores reais, X e Y
Sadas:
a mdia M=(X+Y)/2
Algoritmo:
1. Incio
2. Ler X,Y
3. Calcular a mdia M=(X+Y)/2
4. Escrever M
5. Fim
Algoritmos e Programao Estruturada

Codificao em C (4)

Problema:
Cculo da mdia aritmtica de dois valores reais?
Entradas:
dois valores reais, X e Y
Sadas:
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 teste e deciso

entrada e sada de dados 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
exit

SEQUNCIA 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
entrance
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 }

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 false true
(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.
Algoritmos e Programao Estruturada

Exemplo em C: if-else

Problema:
Calcular o maior de dois inteiros?
Entradas:
#include <stdio.h>
xey
int main()
{
int x, y, M;
Sadas: printf(Introduza x e y: \n);
scanf("%d%d", &x, &y);
M
if (x > y)
Programa: M = x;
else
M = y;

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 false true
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.
Algoritmos e Programao Estruturada

Exemplo em C: if

Problema:
Calcular o maior de dois inteiros?
Entradas:
x, y

#include <stdio.h>
Sadas: int main()
{
M int x, y, M;
printf(Introduza x e y: \n);
Programa: 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?
printf(Introduza x operador y: \n);
Entradas: scanf("%d %c %d", &x, &operacao, &y);

x, operacao, y switch (operacao) {


case + : resultado = x + y;
break;
case - : resultado = x - y;
Sadas: break;
case * : resultado = x * y;
resultado break;
case / : resultado = x / y;
Programa: }

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).
true
?
O teste (da expresso lgica) precede a
aco. Diz-se, por isso, que o teste cabea.
false
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.
Algoritmos e Programao Estruturada

Exemplo em C: while

Problema:
Calcular a soma dos inteiros no intervalo [1,100]?
Entradas:
N/A
Sadas: #include <stdio.h>
int main()
soma {
int soma, n=1;
Programa:
soma = 0; // inicializao da varivel soma
while (n <= 100) // teste de paragem
{
soma = soma + n; // actualizao da varivel soma
n = n + 1; // 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.
true
?

false
Algoritmos e Programao Estruturada

Exemplo em C: do-while

Problema:
Calcular a soma dos inteiros no intervalo [1,100]?
Entradas:
N/A
Sadas: #include <stdio.h>
int main()
soma {
int soma, n=1;
Programa:
soma = 0; // inicializao da varivel soma
do
{
soma = soma + n; // actualizao da varivel soma
n = n + 1; // actualizao da varivel de controlo
}
while (n <= 100); // 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 ?
true
aco ser processada.
Em C, uma estrutura de repetio deste tipo false
a instruo for.
Algoritmos e Programao Estruturada

Exemplo em C: for

Problema:
Calcular a soma dos inteiros no intervalo [1,100]?
Entradas:
N/A inicializao teste de paragem actualizao

Sadas: #include <stdio.h>


int main()
soma {
int soma, n;
Programa:
soma = 0; // inicializao da varivel soma
for (n=1; n<=100; n++)
soma = soma + n; // actualizao da varivel soma

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


return 0;
}
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