22
Algoritmos e Programação Prof. Marcos Saúde [email protected]

Algop - aula 09

Embed Size (px)

Citation preview

Page 1: Algop - aula 09

Algoritmos e Programação

Prof. Marcos Saú[email protected]

Page 2: Algop - aula 09

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).

Page 3: Algop - aula 09

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.

Page 4: Algop - aula 09

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;

Page 5: Algop - aula 09

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.

Page 6: Algop - aula 09

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);

Page 7: Algop - aula 09

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

Page 8: Algop - aula 09

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

Page 9: Algop - aula 09

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;

Page 10: Algop - aula 09

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

Page 11: Algop - aula 09

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).

Page 12: Algop - aula 09

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;

Page 13: Algop - aula 09

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

Page 14: Algop - aula 09

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

Page 15: Algop - aula 09

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);

Page 16: Algop - aula 09

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;

Page 17: Algop - aula 09

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.

Page 18: Algop - aula 09

SUBPROGRAMAS

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

Page 19: Algop - aula 09

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.

Page 20: Algop - aula 09

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.

Page 21: Algop - aula 09

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);

Page 22: Algop - aula 09

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;