Vous êtes sur la page 1sur 38

Lgica de Programao

Programao Estruturada ou Modular

Prof. Vincius Breda

Programao Estruturada ou
Modular

No geral, problemas complexos exigem algoritmos


complexos. Mas sempre possvel dividir um
problema grande em problemas menores.
Esse processo de diviso de um programa em partes
menores chamado de Modularizao ou
Programao Estruturada.
Desta forma, cada parte menor tem um algoritmo mais
simples, e esse trecho menor que chamado de
sub-rotina.

Sub-rotinas

Uma sub-rotina na verdade um programa, e


programa
poder
efetuar
diversas
computacionais (entrada, processamento e
dever ser tratada como foram os programas
at este momento.

sendo um
operaes
sada) e
projetados

As sub-rotinas so utilizadas na diviso de algoritmos


complexos, permitindo assim possuir a modularizao de
um determinado problema, considerado grande e de difcil
soluo.
Uma sub-rotina pode ser dividida em outras tantas quantas
forem necessrias, buscando uma soluo mais simples
de uma parte do problema maior. O processo de dividir
sub-rotinas em outras denominado Mtodo de
Refinamento Sucessivo.

O Mtodo Top-Down

Um mtodo bastante adequado para a programao


de um computador trabalhar com o conceito de
programao estruturada, pois grande parte das
linguagens de programao tambm so, o que
facilita a aplicao deste processo. O mtodo mais
adequado para a programao estruturada o TopDown (de cima para baixo), o qual se caracteriza
basicamente por:
Antes de iniciar a construo do programa, o
programador dever ter em mente as tarefas
principais que este dever executar. No necessrio
saber como funcionaro, somente saber quantas so.

O Mtodo Top-Down

Conhecidas todas as tarefas a serem executadas, tem-se


em mente como dever ser o programa principal, o qual
vai controlar todas as outras tarefas distribudas em suas
sub-rotinas.
Tendo definido o programa principal, iniciado o processo
de detalhamento para cada sub-rotina. Desta forma so
definidos vrios algoritmos, um para cada rotina em
separado, para que se tenha uma viso do que dever ser
executado em cada mdulo de programa. Existem
programadores que estabelecem o nmero mximo de
linhas de programa que uma rotina dever possuir. Se o
nmero de linhas ultrapassa o limite, a rotina dividida em
outra sub-rotina (mtodo de refinamento sucessivo).

O Mtodo Top-Down

A figura abaixo ilustra a ideia do mtodo Top-Down.

O Mtodo Top-Down: Algumas


Vantagens

Permite que seja efetuado cada mdulo de programa em


separado. Desta forma cada um pode ser testado
separadamente garantindo que o programa completo
estaja sem erro ao seu trmino.
Muitas vezes existem em um programa trechos de cdigos
que so repetidos vrias vezes. Esses trechos podero ser
utilizados como sub-rotinas, proporcionando um programa
menor e mais fcil de ser alterado num futuro prximo.
Criao de rotinas exclusivas. Por exemplo, uma rotina
somente para entrada, outra para a parte de
processamento e outra para a sada dos dados.

Funes Simples

Dividiremos nosso estudo de sub-rotinas em fues


simples, com retorno, com parmetros, e com
referncias. Focaremos agora nas sub-rotinas do tipo
simples.
Um procedimento um bloco de programa contendo incio
e fim e ser identificado por um nome, por meio do qual
ser referenciado em qualquer parte do programa principal
ou de programa chamador da rotina.
Quando uma sub-rotina chamada por um programa, ela
executada e ao seu trmino o controle de processamento
retorna automaticamente para a primeira linha de instruo
aps a linha que efetuou a chamada da sub-rotina

Funes Simples
Programa Principal

Sub-rotina
Chamada da Sub-rotina

Funes Simples - Diagrama de


Blocos
Chamada da Sub-rotina
Pelo programa principal
Incio

Programa da Sub-rotina
Sub-rotina1

Cdigo do
programa
Cdigo da
sub-rotina
Cdigo do
programa
Fim

Retorna

Funes Simples Pseudocdigo


As sub-rotinas devem ser
declaradas fora do programa
principal, da seguinte forma:
Funo <nome_subrotina>
Incio
Var <declarao das variveis>

Chamada da sub-rotina pelo


programa pricipal
Algoritmo <nome>
Incio
Var <declarao das variveis>
<cdigo>

<cdigo>
<nome_subrotina>;
Fim
<cdigo>
Fim

Funes Simples - C
As sub-rotinas devem ser
declaradas antes do programa
principal, da seguinte forma:
void <nome_subrotina>( )
{
<declarao das variveis>

Chamada da sub-rotina pelo


programa pricipal
int main( )
{
<declarao das variveis>
<cdigo>

<cdigo>
<nome_subrotina>( );
}
<cdigo>
}

Exemplo 1

Criar um programa calculadora que apresente um menu de


selees no programa principal. Esse menu dever dar ao
usurio a possibilidade de escolher uma entre duas
operaes aritmticas (multiplicao e diviso). Escolhida
a opo desejada, dever ser solicitada a entrada de dois
nmeros, e processada a operao dever ser exibido o
resultado, retornando ao menu.

Exemplo 1 - Algoritmo

Esse programa dever ser um conjunto de trs rotinas,


sendo uma principal e duas secundrias. A rotina pricipal
efetuar o controle das duas rotinas secundrias, que por
sua vez, pediro a leitura de dois valores, faro a operao
e apresentaro o resultado obtido.
1 Multiplicao
2 Diviso
3 Fim de programa

Rotina 1
Multiplicao

Rotina 2
Diviso

Exemplo 1 - Algoritmo
Programa Principal
1 Apresentar um menu de seleo com trs opes:
1 Multiplicao
2 Diviso
3 Fim do Programa
2 Ao ser selecionado um valor, a rotina correspondente
dever ser executada;
3 Ao escolher o valor 3, o programa dever ser
encerrado.
Rotina 1 Multiplicao
1 Ler dois valores, no caso as variveis A e B;
2 Efetuar a multiplicao das variveis A e B,
implicando o resultado na varivel R;
3 Apresentar o valor da variver R.

Exemplo 1 - Algoritmo
Rotina 2 Diviso
1 Ler dois valores, no caso as variveis A e B;
2 Efetuar a diviso das variveis A e B, implicando o
resultado na varivel R;
3 Apresentar o valor da variver R.
Observe que em cada rotina sero utilizadas as mesmas
variveis, mas elas no sero executadas ao mesmo tempo
para todas as operaes. Sero utilizadas em separado e
semente para a rotina escolhida.

Exemplo 1 - Diagrama de Blocos


Parte 1
Incio
Opcao == 1

Opcao = 0
Opcao != 3
Menu:
1 Multiplicao
2 Diviso
3 Fim de programa
Opcao

Fim

Opcao == 2

Exemplo 1 - Diagrama de Blocos


Parte 2
Multiplicao

Diviso

A, B

A, B

R=A*B

R=A/B

Retorno

Retorno

Exemplo 1 Pseudocdigo Parte 1


Funo Multiplicao
Incio
Var real A, B, R;
Leia(A, B);
R = A*B;
Escreva(R);
Fim

Funo Diviso
Incio
Var real A, B, R;
Leia(A, B);
R = A/B;
Escreva(R);
Fim

Exemplo 1 Pseudocdigo Parte 2


Algoritmo Calculadora
Incio
Var int Opcao;
Opcao = 0;
Enquanto (opcao != 3) faa
Escreva(Menu);
Escreva(1 Multiplicao);
Escreva(2 Diviso);
Escreva(3 Fim de Programa);
Leia(Opcao);
Se (Opcao == 1) ento
Multiplicao;
Fim_se

Se (Opcao == 2) ento
Diviso;
Fim_se
Fim_enquanto
Fim

Exemplo 1 C parte 1
#include<stdlib.h>
#include<stdio.h>

R = A/B;
printf("%f\n", R);
}

void Multiplicacao( )
{
float A, B, R;
scanf("%f %f", &A, &B);
R = A*B;
printf("%f\n", R);
}
void Divisao( )
{
float A, B, R;
scanf("%f %f", &A, &B);

int main()
{
int opcao;
opcao = 0;
while(opcao !=3)
{
printf("Menu:\n");
printf("1 - Multiplicacao\n");
printf("2 - Divisao\n");

Exemplo 1 C Parte 2
printf("3 - Fim de Programa\n");
scanf("%d", &opcao);
if (opcao == 1)
Multiplicacao( );
if (opcao == 2)
Divisao( );
}
}

Estrutura de Controle com Mltipla


Escolha
O programa anterior apresenta a aplicao da tcnica de
programao estruturada, permitindo assim construir
programas mais elaborados. Porm, no tocante ao
selecionamento das sub-rotinas foi utilizada a instruo se.
Observe que se o programa possuir um menu com 15 opes,
devero ser definidas 15 instrues do tipo se para verificar a
esclha do operador.
Quando houver a necessidade de construir um programa no
qual seja necessrio utilizar uma sequncia grande de
instrues do tipo se, sejam estas uma aps a outra ou mesmo
encadeadas, poder ser simplificada com a utilizao da
instruo caso...fim_caso.

Estrutura de Controle com Mltipla


Escolha Diagrama de Blocos
<varivel> == <valor1>

<varivel> == <valor2>

Instrues 1

Instrues 1

...
<varivel> == <valorN>

Instrues

Instrues 1

Estrutura de Controle com Mltipla


Escolha - Pseudocdigo
caso (<varivel>)
seja <valor1> faa
<instrues1>
seja <valor2> faa
<instrues2>

seja <valorN> faa


<instruesN>
seno
<instrues>
fim_caso

Estrutura de Controle com Mltipla


Escolha - C
switch (<varivel>)
{
case <valor1> :
<instrues1>
break;
case <valor2> :
<instrues2>
break;

case <valorN> :
<instruesN>
break;
default :
<instrues>
}

Exemplo 1 utilizando Estrutura de


Mltipla Escolha Diag. Blocos
Incio

Opcao != 3

Opcao = 0
Opcao == 1

Opcao != 3
Fim
Menu:
1 Multiplicao
2 Diviso
3 Fim de programa
Opcao

V
Opcao == 2

Opcao Invlida

Exemplo 1 utilizando Estrutura de


Mltipla Escolha - Pseudocdigo
Algoritmo Calculadora
Incio
Var int Opcao;
Opcao = 0;
Enquanto (opcao != 3) faa
Escreva(Menu);
Escreva(1 Multiplicao);
Escreva(2 Diviso);
Escreva(3 Fim de Programa);
Leia(Opcao);
Se (Opcao != 3) ento
Caso (Opcao == 1) faa Multiplicao;
Caso (Opcao == 2) faa Diviso;
Seno escreva(Opo invlida);

Fim_caso
Fim_se
Fim_enquanto
Fim

Exemplo 1 utilizando Estrutura de


Mltipla Escolha - Pseudocdigo
int main()
{
int opcao;
if(opcao != 3)
opcao = 0;
{
while(opcao !=3)
switch(opcao)
{
{
printf("Menu:\n");
case 1: Multiplicacao( ); break;
printf("1 - Multiplicacao\n");
case 2: Divisao( ); break;
printf("2 - Divisao\n");
default: printf("Opcao invlida\n");
printf("3 - Fim de Programa\n");
}
}
scanf("%d", &opcao);
}
}

Variveis Globais e Locais


Em um programa, as variveis declaradas podem ser dividas em
duas classes: variveis globais e locais.
Variveis Globais: so acessveis a qualquer sub-rotina do
programa, bem como ao programa principal. Em pseudocdigo
devem ser declaradas antes da palavra incio do programa
principal. Em C, devem ser declaradas fora das rotinas e antes
delas, um bom lugar no incio do cdigo, aps os #includes.
Variveis Locais: so variveis acessveis apenas s suas
respectivas sub-rotinas, programa principal, ou bloco de
programa. Todas as variveis utilizadas at agora foram deste
tipo.

Variveis Globais e Locais


No exemplo anterior as variveis A, B e R foram declaradas
nas duas sub-rotinas, porm se as declarssemos como
globais, no precisaramos declar-las nas sub-rotinas:
Algoritmo Calculadora
Var real A, B, R;
Incio
Var int Opcao;
Opcao = 0;
Enquanto (opcao != 3) faa
.

Funo Multiplicao
Incio
Leia(A, B);
R = A*B;
Escreva(R);
Fim
Funo Diviso
Incio
Leia(A, B);
R = A/B;
Escreva(R);
Fim

Variveis Locais
Podemos declarar variveis locais em blocos de programa,
como os blocos condicionais ou de repetio. Estas variveis
devem ser declaradas no incio do bloco e existiram somente
dentro desse bloco e dos hierarquicamente inferiores.

Enquanto (x < 10) faa


Var inteiro i;
i = 10;
se ( x == 5 ) ento
Var inteiro k;
k = i + x;
escreva(k);
fim_se
x = x + 1;
fim_enquanto
...

A varivel k existe somente dentro do


bloco se.
A varivel i existe somente dentro do
bloco enquanto e se, pois o bloco se
est dentro do bloco enquanto.
J a varivel x existe em todo o corpo do
cdigo, pois foi declarada em uma
hierarquia superior.

Escopo de Variveis
O escopo das variveis est relacionado com a sua
visibilidade pelas sub-rotinas e blocos do programa. Uma
varivel global possui um escopo global, pois vista por todo
o programa.
O escopo de uma varivel local pertence somente ao bloco de
cdigo que ela abrange, ou seja, o escopo de uma varivel
declarada dentro de uma sub-rotina toda a sub-rotina. O
escopo de uma varivel declarada dentro de um bloco do
programa toda a hierarquia daquele bloco.
A varivel local s existe dentro do seu escopo.

Escopo de Variveis
Podemos ter variveis com o mesmo nome, desde que tenham
escopos diferentes, ou seja, desde que estejam declaradas em
lugares com hierarquia diferente.
Duas variveis com o mesmo nome com escopos diferentes
no so a mesma. O programa sempre utilizar a varivel do
escopo local que estiver sendo executado.
Por exemplo, tem-se uma varivel global X e uma sub-rotina
com uma varivel local X. Ambas so diferentes, porm
dentro da sub-rotina X corresponder a sua varivel local.

Escopo de Variveis
Programa

X, Y

Sub-rotina 1

A,X
Bloco de repetio

A,B
Sub-rotina 2

A, X
Rotina principal

A, B

As variveis X, Y so globais, porm X s


acessvel na rotina principal, visto que todas as
outras possuem uma varvel X local. Y
acessvel a todo o programa.
As variveis dentro das sub-rotinas e da rotina
principal existem somente dentro delas, sendo
diferentes, embora possuam o mesmo nome.
Na sub-rotina 1, a varivel X diferente da
varivel global, e est dentro do escopo do
bloco de repetio. J a sua varivel A est fora
do escopo do bloco de repetio, pois este
implementa a sua prpria varivel A e B, que s
existem dentro desse bloco.

Refinamento Sucessivo
O refinamento sucessivo uma tcnica de programao que
possibilita dividir uma sub-rotina em outras sub-rotinas.
O programa calculadora apresentado anteriormente permite
que seja aplicada esta tcnica, pois existem nas duas subrotinas de clculo, instrues que efetuam as mesmas tarefas.
Por exemplo: a entrada e a sada so efetuadas com as
mesmas variveis.
A soluo definir as variveis A, B e R como globais e
construir mais duas sub-rotinas, uma para entrada e a outra
para sada. As sub-rotinas de clculo sero diminudas em
nmero de linhas, pois tudo o que se repete ser retirado.

Refinamento Sucessivo
Algoritmo Calculadora
Var real A, B, R;
Incio
Var int Opcao;

Seno escreva(Opo invlida);


Fim_caso
Fim_se
Fim_enquanto
Fim

Opcao = 0;
Enquanto (opcao != 3) faa
Escreva(Menu);
Escreva(1 Multiplicao);
Escreva(2 Diviso);
Escreva(3 Fim de Programa);
Leia(Opcao);
Se (Opcao != 3) ento
Caso (Opcao == 1) faa Multiplicao;
Caso (Opcao == 2) faa Diviso;

Refinamento Sucessivo
Funo Entrada
Incio
Escreva(Entre um valor para A:);
Leia(A);
Escreva(Entre um valor para B:);
Leia(B);
Fim

Funo Multiplicao
Incio
Escreva(Multiplicao);
Entrada;
R = A*B;
Sada;
Fim

Funo Sada
Incio
Escreva(O resultado de A com B = , R);
Fim

Funo Diviso
Incio
Escreva(Diviso);
Entrada;
R = A/B;
Sada;
Fim

Vous aimerez peut-être aussi