Algop - aula 09

Preview:

Citation preview

Algoritmos e Programação

Prof. Marcos Saúdemarcosr@pitagoras.com.br

SubprogramaçãoSubprogramação 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).

SubprogramaçãoSubprogramação Com a modularização de um programa,

as partes que o compõem podem ser desenvolvidas por diferentes equipes;

Para isto deve-se estabelecer antes padrões de programação;

Deve-se definir também que dependência haverá entre os vários subprogramas.

SubprogramaçãoSubprogramação A dependência entre os sub-programas

deve ser a mínima possível;

Um subprograma é um grupo de instruções arranjadas de forma lógica, que executem uma ação bem definida;

A subprogramação tende a diminuir a complexidade da resolução de um problema já que, por um instante, a atenção é voltada apenas para uma parte do problema;

SubprogramaçãoSubprogramaçã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; Pascal: procedimentos e funções.

SubprogramaçãoSubprogramaçã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);

Funções

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

Procedimento e Função podem ambos retornar valores através de seus parâmetros;

Entretanto, 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.

SubprogramaçãoSubprogramação

Existem problemas mais adequados ao uso de funções, enquanto outros adequam-se melhor ao uso de procedimentos;

Tudo que um procedimento pode fazer, uma função também pode;

Dicas para escolha do tipo de subprograma:

Se o valor que é processado na unidade será reutilizado em uma expressão, existem grandes possibilidades de que uma função seja mais adequada;

Se o objetivo da unidade é apenas fazer uma mudança de estado (valor) em um ou mais objetos, adote um procedimento.

SubprogramaçãoSubprogramação

SubprogramaçãoSubprogramação

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;

SubprogramaçãoSubprogramaçã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:

Cp=nn!

p! (n-p)!

com n p

SubprogramaçãoSubprogramaçã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, Calcular o fatorial de N (armazenar numa variável,

ex: FatN);ex: FatN);

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

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

E finalmente calcular a expressão: E finalmente calcular a expressão: FatN/(FatP*FatNP).FatN/(FatP*FatNP).

Subprogramação

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

Esta seqüê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:

Como poderíamos fazer istoComo poderíamos fazer isto??

Subprogramação

Função FAT (x: inteiro):inteiro;

I,Fatorial:inteiro; Inicio

Fatorial 1; Para I 1 até x Faça Fatorial Fatorial * I; Fim-Para;

FAT Fatorial;Fim;

Cor

po

Identificado

rParâmetro(s

)

Subprogramação

SubprogramaçãoSubprogramação em PASCAL

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

Na linguagem PASCAL 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 (apenas executa

comandos);

Procedimento em PASCAL Sintaxe

procedure nome (lista-de-parâmetros);declaração de variáveis locais;

begincomandos;

end;

Exemplo:procedure Troca (var A,B: real);var aux: real;begin

aux:=A;A:=B;B:=aux;

end;

Função em PASCAL Sintaxe

function nome (lista-de-parâmetros): tipo;declaração de variáveis locais;

begincomandos;nome:=<valor a ser retornado>;

end;

Exemplo:function Hipotenusa (A,B: real): real;begin

Hipotenusa:= sqrt( sqr(A) + sqr(B) );end;

Obs: a função sqrt retorna a raiz quadrada de um valor numérico.

SUBPROGRAMAS

Em Pascal, dentro do Programa Principal, os SUBPROGRAMASSUBPROGRAMAS devem ser definidos depois da declaração das variáveis;

SUBPROGRAMAS

Dentro do Programa Principal, os SUBPROGRAMAS devem ser definidos depois da declaração das variáveis

program NOME;Relação das Unidades Utilizadas

Definição de Tipos de Dados Definição de ConstantesDeclarações de VariáveisDefinição de Funções e ProcedimentosDefinição de Funções e Procedimentos

{Programa Principal}

begin

comandos

end.

program COMBINACAO; uses crt; var N,K:integer; C:real;

function FAT(X:integer):integer; var I,P:integer; begin P:=1; for I:= 1 to X do begin P:=P*I; end; FAT := P; end;

Begin {Programa Principal} clrscr; {limpa a tela} write('FORNECA O VALOR DE N: '); readln(N); write('FORNECA O VALOR DE K: '); readln(K); C := FAT(N)/(FAT(K)*FAT(N-K)); writeln('COMBINACAO DE ',N,',',K,': ',C:5:0); readkey;end.

Exercícios 1) Escrever uma função para determinar se um número inteiro é par.

Usar a função no programa principal;

2) Faça um procedimento chamado POTENCIA que contenha dois parâmetros de entrada: o número inteiro que se deseja elevar à potência e a potência. O procedimento deve mostrar na tela o cálculo resultante de se elevar o número à potência. Faça um programa que lê dois números X,Z e usa o procedimento indicado para mostrar o cálculo de Xz;

3) Faça um subprograma para verificar se um ano é bissexto ou não. Utilize a regra: Um ano é bissexto se é divisível por 4, mas não por 100, ou

então se é divisível por 400. Exemplo: 1988 é bissexto pois é divisível por 4 e não é por 100; 2000 é

bissexto porque é divisível por 400;

4) Faça uma função que recebe um número inteiro como parâmetro de entrada e retorna verdadeiro se ele for par e falso se for ímpar;

5) Escreva uma função que recebe as 3 notas de um aluno e uma letra. Se a letra for ‘A’ a função calcula e retorna a média aritmética das notas do aluno, se for ‘P’, a sua média ponderada (pesos: 5, 3 e 2);

Exercícios 6) Faça um programa que leia dois números e mostre na tela as

seguintes opções (1-Somar; 2-Multiplicar; 3-Subtrair; 4-Sair do Programa;). Crie um procedimento que tenha como parâmetro de entrada a opção digitada e os dois números, e mostre o resultado da operação na tela. O programa deve repetir o procedimento até que o usuário digite a opção 4. Neste caso o programa finaliza sem chamar o procedimento;

7) Faça uma função que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias;

8) Faça uma função que verifique se um valor é perfeito ou não. Um valor é dito perfeito quando ele é igual a soma dos seus divisores excetuando ele próprio. (Ex: 6 é perfeito, 6 = 1 + 2 + 3, que são seus divisores). A função deve retornar um valor booleano;

9) Faça uma função que recebe, por parâmetro, um valor inteiro e positivo e retorna o número de divisores desse valor;

10) Dado a fórmula matemática f(x) = x2 - 3x + 5. Faça um programa que leia um número na variável X e use a função f(X) para exibir o resultado;