PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

33
PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC

Transcript of PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Page 1: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

PROGRAMAÇÃO MODULAR

(com uso de subprogramas)

prof. Luis Otavio AlvaresINE/UFSC

Page 2: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

A repetição de trechos de código idênticos em um programa pode ser um procedimento fácil e rápido, mas facilmente tende a produzir erros.

Tanto a manutenção quanto a alteração de programas com trechos repetidos tende a ser mais trabalhosa e sujeita a erros.

Com frequência alterações de trechos iguais que se repetem não são realizadas em todas as ocorrências do trecho ou são realizadas de forma incompleta em alguma ocorrência, com resultados bastante danosos.

A solução para esta questão são os subprogramas.

Page 3: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Principal Objetivo:

Facilitar a solução de problemas complexos.

“A arte de programar consiste na arte de organizar e dominar a complexidade dos sistemas”

Dijkstra, 1972

Page 4: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Baseada na estratégia:Dividir para conquistar

Divisão de um problema original em subproblemas (módulos) mais fáceis de resolver e transformáveis em trechos mais simples, com poucos comandos (subprogramas).

Page 5: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Subprogramas

• Trechos de código independentes, com estrutura semelhante àquela de programas, mas executados somente quando chamados por outro(s) trecho(s) de código.

• Devem executar UMA tarefa específica, muito bem identificada (conforme a programação estruturada).

• Ao ser ativado um subprograma, o fluxo de execução desloca-se do fluxo principal para o subprograma. Concluída a execução do subprograma, o fluxo de execução retorna ao ponto imediatamente após onde ocorreu a chamada do subprograma.

Page 6: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Vantagens do uso de subprogramas:

Maior facilidade de depuração e teste, já que subprogramas podem ser testados separadamente. Possibilidade de reutilização de código.

Estrutura lógica mais clara.

Maior controle sobre a complexidade.

Page 7: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Implementados através de FUNÇÕES e

PROCEDIMENTOS

Subprogramasna linguagem Pascal

Page 8: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Funções: exemplos

Ex: …. readln(A,B); X:=SQRT(A) + SQRT(B);

SQRT é uma função pré-definida que calcula a raiz quadrada

Ex: …. X:=2*Y; writeln(‘cosseno de ‘, X, ‘ = ‘,cos(X));

Cos é outra função pré-definida

Page 9: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Funções

Uma função é um subprograma que retorna um valor no próprio nome da função. Com isso pode ser utilizada em expressões.

Dito de outra forma:•Funções devolvem somente 1 valor no ponto de chamada da função• o valor calculado é usado diretamente pelo programa

Page 10: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Function NomeFuncao [( <lista de parâmetros formais> )] : < tipo > ; [ <declaração de variáveis locais>; ]begin ... NomeFuncao := < expressão >; ...end;

opcionais

Funções definidas pelo usuário

Page 11: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

function conv_dolar_para_reais(dolar:real):real;

function soma_valores (valor1, valor2:integer): integer;

function divide_valores (valor1:real; valor2:integer): real;

Exemplos de cabeçalhos de funções

Page 12: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Funções definidas pelo usuário: exemplo

Program ExemploDeFuncao;{declaração da função}Function Fat(X:integer): real;var I:integer;begin fat:=1; for I:= 1 to X do Fat:=Fat*I;End;

{programa principal }var A:integer;Begin Write('Digite um numero inteiro positivo: '); readln(A); Write('O fatorial de ',A,' eh: ',Fat(A):5:0); Readln;end.

Declaração da função

Page 13: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

A função Fat é do tipo real, isso significa que quando ela é chamada, no lugar de sua chamada retorna um valor real.Para executar essa função é necessário fornecer um parâmetro, do tipo inteiro.

Funções definidas pelo usuário

Page 14: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Execução de uma função

A função é ativada e os itens locais à função são criados (os parâmetros e os itens declarados internamente à função).

Em tempo de execução, ao ser encontrada uma chamada de uma função, a execução é desviada para o trecho de código da função.

A função é executada até que seu término seja atingido.Concluída a execução da função, todos os elementos locais à função que foram criados no momento de sua ativação são destruídos e a execução retorna ao fluxo principal, ao ponto imediatamente seguinte àquele onde ocorreu a chamada da função.

Page 15: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Function Fat(X:integer): real;var I:integer;begin fat:=1; for I:= 1 to X do Fat:=Fat*I;End;

Variáveis locais

Os parâmetros que aparecem no cabeçalho das funções e as variáveis e constantes declaradas internamente a funções são locais à função. Na função Fat, o I é uma variável local a essa função.

Page 16: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Variáveis locais:

Importante:

As variáveis declaradas em uma função são ditas locais à função porque:

– só podem ser referenciadas por comandos que estão dentro da função em que foram declaradas;

– existem apenas enquanto a função em que foram declaradas está sendo executada. São criadas quando a função é ativada e são destruídas quando a função encerra.

Page 17: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

vara, k:integer;….a:=4; k:=9;... chamada de x...

... chamada de x...

Subprograma XPrograma principal

4

a

9

k

a k

Variáveis locais :• uma função tem acesso somente às variáveis locais• não altera valor de variáveis de outras funções

Var a, k:integer;

...a := 0; k := 5; ...

0 5

Criação e destruição de variáveis locais a um subprograma:

Page 18: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Criação e destruição de variáveis locais a um subprograma:

vara, k:integer;….a:=4; k:=9;...Chamada de x...

...Chamada de x...

Subprograma XPrograma principal

4

a

9

k

a k

Var a, k:integer;

...a := 0; k := 5; ...

0 5

Page 19: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Reforçando:

Os nomes das variáveis declaradas no cabeçalho de uma função são independentes dos nomes das variáveis usadas para chamar a mesma função.

PARÂMETROS

As declarações de uma função são locais a essa função. Os parâmetros declarados no cabeçalho de uma função existem somente dentro da função onde estão declarados.

Page 20: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

20

Chamada de X;

Chamada de Y;

Programa principal Subprograma X

Subprograma Y

Vários níveis de chamadasVários níveis de chamadas

Subprograma Z

Chamada de Z;

Page 21: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Exercício

Escreva o código de uma função que calcule a média aritmética de dois valores informados como parâmetros

Escreva um programa que use esta função

Page 22: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

program funcaomedia;{ declaracao da funcao media}function media(n1:real;n2:real):real;begin media:=(n1+n2)/2;end;

{programa principal}var v1,v2,m:real;begin writeln ('Informe os numeros: '); readln(v1,v2); m:=media(v1,v2); writeln('a media dos numeros eh: ', m:1:3); readln;end.

Page 23: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Escreva uma função potencia que recebe como entrada

dois parâmetros (real e inteiro) e fornece como saída o

valor correspondente ao primeiro parâmetro elevado ao

segundo.

Escreva um programa que utilize esta função.

Exercício

Page 24: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

program FuncaoPotencia;

{declaração da função}function potencia(base:real;exp:integer):real;var I:integer;begin potencia:=1; for I:=1 to exp do potencia:=potencia*base;end;

{programa principal}var B:real; E:integer;begin writeln('informe a base e o expoente: '); readln(B,E); writeln('resultado: ',B:1:3,' elevado a ',E,' = ', potencia(B,E):1:5); readln;end.

Page 25: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

. . Fazer um programa completo que leia dois valores, N e P, e calcule a combinação de N elementos, P a P.

Fórmula: n!/(p! * (n-p)!), onde n! é o fatorial de n

Use duas funcões, uma para calcular o fatorial e outra para calcular a combinação.

Exercício

Page 26: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Program CalculaCombinacoes;

{ Declaração da função Fatorial }Function Fatorial(X:integer):real;var I:integer; fat:real;begin fat:=1; for I:= 1 to X do Fat:=Fat*I; fatorial:=fat;End;

{declaração da função combinacoes}Function Combinacoes (N, P: integer) : real;{ Função que devolve as combinações de N elementos, P a P }{ fórmula: n!/(p! * (n-p)!) } { Utiliza a função Fatorial }var FN, FP, FN_P: real;begin FN:=Fatorial (N); FP:=Fatorial (P); FN_P:=Fatorial (N-P); Combinacoes := FN / ( FP * FN_P );end; { Combinacoes }

Page 27: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

{programa principal}var N, P: integer;begin write('informe N: '); readln (N); write('informe P: '); readln (P); writeln('combinacao de ',N,' elementos ',P, ' a ',P,' = ',combinacoes(N,P):1:0); readln;end.

Page 28: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

O número 3025 possui a seguinte característica:

30 + 25 = 55

552 = 3025

Faça um programa que pesquise e mostre todos os números de quatro algarismos que apresentam tal característica. Utilize uma função para determinar se um número apresenta esta característica.

Exercício

Page 29: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Escreva uma função que calcule o cosseno de um ângulo entre 0 e pi/2 radianos utilizando os primeiros 30 termos da série:

cosseno(x) 12 4 6 8

2 4 6 8x x x x! ! ! !

...

Faça um programa que utilize esta função para mostrar na tela o cosseno dos ângulos de 0 a 1, com incrementos de 0,1.

Exercício

Page 30: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Passagem de arrays como parâmetro não aceita “: array [ 1 .. 5 ] of ...” na declaração dos parâmetros formais

de funções e procedimentos

É necessário declarar um tipo (type) específico para o array. Exemplo:

program TesteFuncaoVetor;type tipoVetor = array[1..10] of integer;function maiorElemento(M:tipoVetor):integer; var I:integer; begin maiorElemento:=M[1]; for I:= 1 to 10 do if M[I] > maiorElemento then maiorElemento:=M[I]; end;var vet:tipoVetor; I:integer;begin writeln('informe os 10 valores do vetor: '); for I:=1 to 10 do readln(vet[I]); writeln('o maior elemento do vetor eh: ',maiorElemento(vet)); readln;end.

Page 31: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Profa. Maria Aparecida C. Livi v. 531

Units (não cai na prova)

• Units em Pascal são bibliotecas de funções e procedures. Algumas já vem com o compilador, como a unit CRT, que tem funções para a saída em vídeo.

• As funções e procedures definidas pelo usuário podem ser salvas em uma unit e desta forma utilizadas em qualquer programa.

Page 32: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Profa. Maria Aparecida C. Livi v. 532

Exemplo de definição de unitunit minhaUnit;

interfaceFunction Fat(X:integer): real;function Pot(base:real;exp:integer):real;

implementationFunction Fat(X:integer): real;var I:integer;begin fat:=1; for I:= 1 to X do Fat:=Fat*I;End;

function Pot(base:real;exp:integer):real;var I:integer;begin Pot:=1; for I:=1 to exp do Pot:=Pot*base;end;end.

Page 33: PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof. Luis Otavio Alvares INE/UFSC.

Profa. Maria Aparecida C. Livi v. 533

Exemplo de uso de unit{calcula o cosseno de um angulo do 1. quadrante dado em radianos}uses minhaUnit; {é uma declaração}function cos1quad(A:real):real;var I,sinal:integer; cos:real;begin cos:=1; sinal:=-1; I:=2; while I<= 60 {30 termos da serie} do begin cos:=cos+sinal*(Pot(A,I)/fat(I)); sinal:=sinal*-1; I:=I+1; end; cos1quad:=cos;end;{--- programa principal ---}var angulo: real;begin write(‘informe o angulo do 1. quadrante em radianos’); readln(angulo); writeln('o cosseno de ',angulo,' eh aproximadamente ', cos1quad(angulo):1:6); readln;end.