programaÇÃo estruturada (modularizaÇÃo/subprogra maÇÃo) fabíola gonçalves universidade...

28
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO) Fabíola Gonçalves UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA CIVIL

Upload: internet

Post on 18-Apr-2015

118 views

Category:

Documents


1 download

TRANSCRIPT

PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)

Fabíola Gonçalves

UNIVERSIDADE FEDERAL DE UBERLÂNDIA

ENGENHARIA CIVIL

ROTEIRO

Introdução; Escopo das variáveis; Passagem de parâmetro; Argumentos; Função.

2

MODULARIZAÇÃOINTRODUÇÃO

Característica fundamental da programação estruturada: Modular a resolução do problema através da sua

divisão em subproblemas menores e mais simples; Neste processo, cada subproblema pode ser analisado

de forma individual e independente dos demais.

Objetivo: Facilitar o trabalho com problemas complexos; Permitir a reutilização de módulos.

Com a modularização de um programa, as partes que o compõem podem ser desenvolvidas por diferentes equipes.

3

MODULARIZAÇÃOINTRODUÇÃO

Refinamentos Sucessivos (top-down): Divisão do problema inicial em subproblemas, e

estes em partes ainda menores, sucessivamente, até que cada parte seja descrita através de um algoritmo claro e bem-definido. Um algoritmo que resolve um determinado

subproblema é denominado subalgoritmo.

4

MODULARIZAÇÃO

SUBALGORITMOS (MÓDULOS)

A subprogramação é uma ferramenta que contribui com a tarefa de programar:

Favorecendo a estruturação do programa;Facilitando a correção do programa;Facilitando a modificação do programa;Melhorando a legibilidade do programa;Divisão do problema a ser resolvido em partes

(modularização).

5

MODULARIZAÇÃO

SUBALGORITMOS (MÓDULOS)

Por convenção, um subalgoritmo deve ser declarado acima dos módulos que o chamam;

Todo subalgoritmo tem por objetivo a resolução de um determinado subproblema;

Portanto, mantém as mesmas características de um algoritmo comum: Pode ter dados de entrada; Dados de saída; e Conter qualquer tipo de comando aceito por um

algoritmo.

6

SUBPROGRAMAÇÃO As linguagens de programação oferecem

algum tipo de suporte à subprogramação.

Exemplos:Algol: bloco; FORTRAN: subrotina; Modula: co-rotinas; ADA: tarefas; C: funções; Visualg: procedimentos e funções. Pascal: procedimentos e funções.

SUBPROGRAMAÇÃO

Procedimentos Procedimento é uma forma de criar um sub-

programa; Quando um determinado conjunto de instruções tiver

que ser repetido dentro da solução de um problema, é conveniente colocá-lo dentro de um procedimento;

Para se criar um procedimento é necessário: Um identificador (o nome do procedimento);

Uma lista de parâmetros (que possibilitam a comunicação entre o programa principal e o procedimento);

As ações a serem executadas (que formam o corpo do procedimento).

8

SUBPROGRAMAÇÃO

Funções

Função também é uma forma de criar um sub-programa;

A função deve obrigatoriamente retornar um valor processado através do seu nome identificador;

Uma função deve ser ativada em um contexto de expressão.

9

SUBALGORITMOS (MÓDULOS)ESCOPO DAS VARIÁVEIS

Por serem tratados de forma independente dos demais módulos, cada subalgoritmo só pode manipular variáveis/constantes: Globais: declaradas no início do algoritmo

principal ; Fora de todas as funções; Elas são conhecidas e podem ser alteradas por todas

as funções do programa. Locais: declaradas no próprio subalgoritmo;

Só têm validade dentro do bloco no qual são declaradas.

10

SUBALGORITMOS (MÓDULOS)PASSAGEM DE PARÂMETRO

A passagem de parâmetros é o meio de comunicação entre as unidades de um programa, pode acontecer com um dos seguintes propósitos:

apenas fornecer um valor para que a subrotina realize um processamento;

apenas retornar um valor processado pela subrotina;

fornecer um valor para processamento pela subrotina, e também ser responsável pelo retorno de um valor processado.

11

SUBALGORITMOS (MÓDULOS)PASSAGEM DE PARÂMETRO

Existem duas formas de interagir com subalgoritmos: Explícita: quando a troca é feita através de

argumentos. Existem 2 modos de passar argumentos/parâmetros

para um subalgoritmo: Por valor: o argumento será uma variável

independente, ou seja, ocupará um espaço na memória durante a execução do módulo. Qualquer alteração no argumento, não afeta a variável.

Por referência: o argumento não ocupará espaço de memória, pois utilizará o espaço já alocado pela variável. Qualquer alteração realizada no subalgoritmo afetará a variável.

12

SUBALGORITMOS (MÓDULOS)PASSAGEM DE PARÂMETRO

Existem duas formas de interagir com subalgoritmos: Implícita: quando a troca é feita pela utilização

de variáveis globais. Esta forma funciona de modo similar à passagem de

argumentos por referência, pois não necessita de nova alocação de memória e qualquer alteração realizada durante a execução do módulo afeta o conteúdo da variável para os demais módulos.

13

PASSAGEM DE PARÂMETROS

Passagem por valor: Apenas o valor é transferido. Então, as alterações feitas nos parâmetros formais (da subrotina) não alteram os reais (unidade ativadora).

Por referência: O endereço do parâmetro real é transferido. Então, as alterações nos parâmetros formais da subrotina na verdade estão sendo feitas sobre os parâmetros reais.

Declaração

PASSAGEM DE PARÂMETROS POR VALOR

Quando e porque passagem por valor:

apenas fornecer um valor à subrotina para que ela realize um determinado processamento;

utilizados somente para “valores de entrada”;protegem automaticamente o parâmetro real;deve ser explorado sempre que possível.

PASSAGEM DE PARÂMETROS POR REFERÊNCIA

Quando e porque passagem por referência:

Quando e porque passagem por :quando a unidade ativada (subrotina) necessitar retornar um valor a ser utilizado pela unidade ativadora;

seu uso deve ser cuidadoso.

SUBALGORITMOS (MÓDULOS)ARGUMENTOS

Na escrita de um subalgoritmo, os dados necessários para a resolução do subproblema podem ser informados na declaração do módulo.

Ex: real expoente( real BASE, int FATOR)

resultado ← expoente(NRO, EXP);

17

SUBALGORITMOS (MÓDULOS)FUNÇÕES

Sintaxe:tipo_retornado nome_funcao (tipo arg1, tipo arg2,

... , tipo argN)<declaração de variáveis/constantes

locais>inicio

<bloco de comandos>fim

fim-funcao

iniciovar ← nome_funcao(var1, var2, ... , varN);

fim

18

SUBPROGRAMA

Um subprograma pode ser ativado em qualquer parte do programa (em algumas linguagens somente depois de definido);

Sua ativação se dá através do uso de seu identificador como uma instrução;

SUBALGORITMOS (MÓDULOS)FUNÇÕES Exemplo:

int Square (int a)inicio

return(a*a);fim

inicioint num;escreva("Entre com um numero: ");leia (num);num <- Square(num);escreva("O seu quadrado vale: ", num);

fim

20

SUBPROGRAMAÇÃO Exemplo de aplicação: Fazer um algoritmo para

calcular a combinação (análise combinatória) de N elementos tomados P a P. Sabe-se que isto é possível através da seguinte expressão:

SUBPROGRAMAÇÃO A solução deste problema pelos métodos vistos até

agora (sem o uso da subprogramação) teria N e P como argumentos de entrada e C como argumento de saída;

Seriam necessários os seguintes passos: Calcular o fatorial de N (armazenar numa variável, ex:

FatN); Calcular o fatorial de P (armazenar numa segunda

variável, ex: FatP); Calcular o fatorial de N-P (armazenar numa terceira

variável, ex:FatNP); E finalmente calcular a expressão: FatN/(FatP*FatNP).

SUBPROGRAMAÇÃO

Note que nesta solução teríamos que descrever várias vezes uma mesma sequência de ações que são utilizadas para o cálculo do fatorial de um número;

Esta sequência tem um comportamento padrão.

Suponha que tivéssemos à disposição um procedimento genérico, chamado FAT, para calcular o fatorial de um número qualquer:

.....

SUBPROGRAMAÇÃO

Uma subrotina é um subprograma com variáveis e comandos próprios e que, para ser executada, precisa ser chamada pelo programa principal.

Existem dois tipos de subrotinas: Procedimento (procedure) Função (function)

Diferença entre elas: A função retorna um valor O procedimento não retorna valor

EXERCÍCIOS

1. Crie um programa que leia três números. Para cada número, imprima o dobro. Use uma função que recebe como parâmetro um número inteiro e devolve o seu dobro. O valor calculado deve ser impresso na função principal.

2. Faça um programa receba dois números e execute as seguintes funções:

Verificar se o número digitado é positivo ou negativo. Sendo que o valor de retorno será 1 se positivo, 0 se negativo ou -1 se for igual a 0.

Receber dois números inteiros positivos por parâmetro e retorne a soma dos N números inteiros existentes entre eles.

26

EXERCÍCIOS3. Faça uma função que receba por parâmetro dois

valores X e Z. Calcule e retorne o resultado de X^Z para o programa principal. Atenção não utilize nenhuma função pronta de exponenciação.

4. Crie um programa que receba a nota de 10 alunos obtida ao longo do semestre (foram realizadas quatro avaliações). Elabore funções para:

Calcular a média aritmética de todos os alunos; Indicar o aluno que deverá fazer recuperação, ou seja,

aqueles com média inferior a 6. Dica:

Opção 1 – ler as 10 notas dentro a função de média (sejam em variáveis ou vetor);

Opção 2 – criar 10 variáveis no programa principal e passar como argumento;

Opção 3 – ler um vetor de tamanho 10 e passar o vetor como parâmetro para a função.

27

REFERÊNCIAS

Martins, L. G. A., Silva, A. J. Introdução à Algoritmos. Apostila da FACOM-UFU. 28