Anda di halaman 1dari 31

Introduo Programao de Computadores

Modularizao de Algoritmos

Rotinas Procedimentos Funes

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Decomposio de problemas:
A decomposio de um problema em problemas menores
fator determinante para reduo da complexidade
Quando se decompe um problema em problemas menores
divide-se a complexidade, e por conseqncia, simplifica-se a
resoluo

Uma vantagem da decomposio que permite focar a


ateno em um problema pequeno de cada vez, o que ao final
produzir uma melhor compreenso do todo
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Critrios para decomposio:


Dividir o problema em suas partes principais
Analisar a diviso obtida para garantir coerncia
Se alguma parte ainda permanecer complexa, decompor
novamente
Analisar o resultado para garantir entendimento e coerncia
Tcnica chamada Refinamentos Sucessivos Top Down

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Modularizao dos algoritmos:


Para resolver os problemas menores so definidas subrotinas que implementam problemas menores independentes
do problema maior

Sub-rotinas so blocos de instrues que realizam tarefas


especficas
Para processar o problema completo preciso unir todas as
sub-rotinas em um programa que as relacionam de maneira a
resolver o problema complexo programa principal
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Sub-rotinas:
Conceitualmente as sub-rotinas podem ser procedimentos ou
funes algumas linguagens no diferenciam os dois
processos
Vantagens no cdigo:
Maior legibilidade
Desenvolvimento e teste independente
Reuso uma operao que repetida muitas vezes pode
ser definida uma nica vez

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Procedimentos:
Um grupo de instrues (cdigo) ao qual atribudo um
nome e vem no incio do algoritmo
A ativao ocorre atravs da referncia ao nome dado ao
procedimento (sob chamada), e ocorre em qualquer ponto do
programa
A execuo realizada como se o grupo de sentenas fosse
copiado para o ponto onde foi ativado

Ao final da execuo do procedimento o processamento do


programa volta ao ponto em que estava no momento da
chamado do procedimento

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Sintaxe algortmica de procedimento:


procedimento nome (lista de parmetros)
<declarao de variveis locais>
incio
<comandos>
fim;

fim procedimento;

Obs.: A lista de parmetros opcional


Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Exemplo procedimento:
Algoritmo para somar dois nmeros inteiros (sem passagem de
parmetros):
incio
inteiro: n1, n2, resultado;
procedimento soma()
inicio
leia (n1);
leia (n2);
resultado n1 + n2;
escreva (resultado);
fim;
fim procedimento;
soma();
soma();
fim.

// chama o procedimento soma


// chama o procedimento soma novamente

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Exemplo procedimento com parmetros:


Algoritmo para somar dois nmeros inteiros (com passagem de
parmetros):
incio
inteiro: valor1, valor2, valor3, valor4;
procedimento soma(n1, n2)
inteiro: resultado;
incio
resultado n1 + n2;
escreva (resultado);
fim;
fim procedimento;
leia(valor1, valor2, valor3, valor4);
soma(valor1, valor2);
// n1=valor1 e n2=valor2
soma(valor3, valor4);
// n1=valor3 e n2=valor4
fim.
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Funes:
Muito semelhante aos procedimentos, sendo tambm um
grupo de instrues (cdigo) ao qual atribudo um nome
A principal diferena est no fato da funo poder ser
utilizada nas expresses, como se fossem variveis pois
retornam valores que so associados ao seu nome preciso
declarar o tipo
preciso atribuir o resultado de uma funo uma varivel
ou comando que espera um parmetro sempre retorna um
valor ao algoritmo principal

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Sintaxe algortmica de funes:


funo nome(lista de parmetros): tipo
<declarao de variveis locais>
incio
<comandos>
nome retorno da funo

fim;
fim funo;

Obs.: A lista de parmetros opcional


Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Exemplo funo:

Algoritmo para somar dois nmeros inteiros (sem passagem de


parmetros):
incio
inteiro: n1, n2, total1, total2;
funo soma(): inteiro
inteiro: resultado;
inicio
leia (n1);
leia (n2);
resultado n1 + n2;
soma resultado;
fim;
fim funo;
total1 soma();
total2 soma();
escreva(total1, total2);
fim.
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Exemplo funo com parmetros:


Algoritmo para somar dois nmeros inteiros (com passagem de
parmetros):
incio
inteiro: valor1,valor2,valor3,valor4,total1,total2;
funo soma(n1, n2): inteiro
inteiro: resultado;
inicio
resultado n1 + n2;
soma resultado;
fim;
fim funo;
leia(valor1, valor2, valor3, valor4);
total1 soma(valor1, valor2);
total2 soma(valor3, valor4);
escreva(total1, total2);
fim.
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Escopo das variveis:


As variveis de um algoritmo podem ser classificadas quanto
ao seu escopo como globais ou locais
Variveis que so declaradas no incio do algoritmo possuem
um escopo global, ou seja, elas podem ser aplicadas em
qualquer ponto do programa so visveis em todos os blocos
Variveis locais so aquelas declaradas dentro dos
procedimentos e funes e s podem ser aplicadas dentro
destas estruturas visveis apenas em um bloco

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Escopo das variveis:


incio
inteiro: valor1,valor2, valor3, valor4,X,Y; // globais
funo soma(n1, n2): inteiro
inteiro: resultado; //varivel local
inicio
resultado n1 + n2;
soma resultado;
fim;
fim funo;
leia(valor1, valor2, valor3, valor4);
X = soma(valor1, valor2);
Y = soma(valor3, valor4);
escreva(X, Y);
fim.
Obs.: A varivel resultado no pode ser utilizada fora da funo porque
no foi declarada como uma varivel global
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Parmetros:
Parmetros so variveis ou valores que podem ser
transferidos do algoritmo principal para um mdulo que est
sendo chamado
A passagem de parmetros ocorre por meio da
correspondncia argumento/parmetro, em que os
argumentos so valores constantes ou variveis, informados
pelo programa principal
Os argumentos devem ser fornecidos na mesma ordem dos
parmetros

Os parmetros so passados por valor ou referncia


Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Passagem de parmetros por valor e referncia:


Passagem por valor: os parmetros da funo funcionam
como variveis locais, ou seja, no alteram os valores das
variveis globais
Passagem por referncia: as variveis passadas como
parmetros alteradas dentro da funo ou procedimento
tambm tem valor alterado globalmente

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Modularizao no Python:
As funes so muito teis para implementar cdigo que
ser utilizados muitas vezes, alm disso, facilita a modificao
do cdigo quando desejado
Em Python no existe diferenciao entre procedimento e
funo as sub-rotinas so denominadas funes

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Sintaxe de funes no Python:


def nome_da_funo(parmetro1, parmetro2, ...):

operaes sobre os parmetros


return <resultado>
Exemplo:
def soma(a,b):
return a+b

#calcula a soma de a e b

soma(2,9)
soma(7,8)

soma(10,15)
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Exemplos:
def cria_matriz(n):
M = [0]* n
for i in range(n):

M[i] = [0]* n
return M

#retorna uma matriz

>>> cria_matriz(3)
[[0,0,0], [0,0,0], [0,0,0]]
>>> y = cria_matriz(2) #guarda o resultado em y
[[0,0],[0,0]]
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Exemplos:
Tambm possvel definir uma funo onde o retorno dado
pela comando print:
def usuario(nome):
print Meu nome e', nome
>>> usuario(Tatiana)

Meu nome e' Tatiana


Neste caso o retorno vazio(None), ou seja, no adianta
guardar em uma varivel apenas aparece a impresso na
tela
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Passagem de parmetros no Python:


Passagem por valor: no alteram os valores das variveis globais
def potencia(x1,x2):
x3 = x1 ** x2
return x3

>>> a = 2
>>> b = 3

>>> potencia(a,b)

#x1 assume valor de a e x2 valor de b

Aps chamar a funo potencia os valores de a e b no so alterados

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Passagem de parmetros no Python:


Passagem por referncia: as variveis passadas como parmetros tem
seu valor alterado globalmente

No Python as variveis mutveis vetores, matrizes e listas so

parmetros passados por referncia, ou seja, tem seu valor alterado


globalmente

Variveis simples so parmetros passados por valor

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Passagem de parmetros no Python:


Passagem por referncia:
def vetor_em_um(V):
for i in range(len(V)): #funo len retorna o tamanho de V
V[i] = 1

return V
>>> X = [1,2,3]
>>> vetor_em_um(X)

Aps chamar a funo vetor_em_um o vetor X que foi passado como


parmetro est alterado:
>>> X
>>> [1,1,1]
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores


Exemplo 1:
def cria_matriz(n):
M = [0] * n

#cria vetor de linhas

for i in range(n):
M[i] = [0] * n

#cria vetores de colunas para cada linha

return M
def modifica(A, n): #funo para alterar valores da diagonal da matriz A
for i in range(n):
A[i][i] = 100
print A

#retorna a matriz A modificada

## Programa principal
Y = cria_matriz(5)

modifica(Y,5)

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores


Exemplo 2: funes para trabalhar com crculo

import math
def perimetro(r):
p = float(r) * 2 * math.pi

return p
def area(r):
a = math.pi * (r ** 2)
return a
##### programa principal
x = input('Digite o raio do circulo: ')
p = perimetro(x)
z = area(x)
print 'Perimetro: ', p, 'Area: ', z
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores


Exemplo 3: programa para mostrar os primos do intervalo 1..N

def primo(x):
primo = True
for i in range(2,x):
if x % i == 0:

primo = False
if primo:
print x , "e' um numero primo."
#####################
N = input('Digite o valor de N: ')
if N > 3 :
for i in range(1, N+1):

if i == 1 or i==2:
print i, " e' um numero primo."
else:
primo(i)
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores


Exemplo 4: manipulao de matrizes
import random
def cria(n):
M = [0] * n
for i in range(n):
M[i] = [0] * n
return M
def preenche(A):
for i in range(len(A)):
for j in range(len(A)):
A[i][j] = random.randint(1, 10)
return A
def soma (A,B):
n = len(A)
C = cria(n)
for i in range(n):
for j in range(n):
C[i][j]= A[i][j] + B[i][j]
return C
Professora: Tatiana Renata Garcia

Introduo Programao de Computadores


Exemplo 4:
def subtrai (A,B):
n = len(A)
C = cria(n)
for i in range(n):
for j in range(n):
C[i][j]= A[i][j] - B[i][j]
return C
####### Programa principal
x = input('Digite valor: ')
A = cria(x)
B= cria(x)
A = preenche(A)
B = preenche(B)
print 'A: ', A, 'B: ', B
C = soma(A,B)
print 'A + B: ', C
D = subtrai(A,B)
print 'A - B: ', D

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores

Funes Recursivas:
Uma funo pode chamar a si mesma, e quando isso ocorre temos uma

funo recursiva

Um exemplo tpico que pode ser resolvido recursivamente o clculo do


fatorial. Se n o nmero que ser calculado o fatorial, a definio recursiva
dada por:
fatorial (n) = n * fatorial (n 1);

A condio de sada: fatorial (n) = 1, para 0 <= n <= 1

Professora: Tatiana Renata Garcia

Introduo Programao de Computadores


def fatorial(n):
if n == 0 or n == 1:
return 1
else:
return n * fatorial(n-1)

####### Programa principal

x = input('Digite valor: ')


print 'Fatorial de ', x , ' = ', fatorial(x)

Professora: Tatiana Renata Garcia

Anda mungkin juga menyukai