Algop - aula 09

401 visualizações

Publicada em

Material de apoio para Algoritmos e Programação da Faculdade Pitágoras em Linhares – 2010

Publicada em: Engenharia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
401
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Algop - aula 09

  1. 1. Algoritmos e Programação Prof. Marcos Saúde marcosr@pitagoras.com.br
  2. 2. SSuubbpprrooggrraammaaççããoo  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).
  3. 3. SSuubbpprrooggrraammaaççããoo  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.
  4. 4. SSuubbpprrooggrraammaaççããoo  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;
  5. 5. SSuubbpprrooggrraammaaççããoo  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.
  6. 6. SSuubbpprrooggrraammaaççããoo  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);
  7. 7. SSuubbpprrooggrraammaaççããoo  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.
  8. 8. SSuubbpprrooggrraammaaççããoo  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.
  9. 9. SSuubbpprrooggrraammaaççããoo  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;
  10. 10. SSuubbpprrooggrraammaaççããoo  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: Cpn= n! p! (n-p)! com n ³ p
  11. 11. SSuubbpprrooggrraammaaççããoo  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:  CCaallccuullaarr oo ffaattoorriiaall ddee NN ((aarrmmaazzeennaarr nnuummaa vvaarriiáávveell,, eexx:: FFaattNN));;  CCaallccuullaarr oo ffaattoorriiaall ddee PP ((aarrmmaazzeennaarr nnuummaa sseegguunnddaa vvaarriiáávveell,, eexx:: FFaattPP));;  CCaallccuullaarr oo ffaattoorriiaall ddee NN--PP ((aarrmmaazzeennaarr nnuummaa tteerrcceeiirraa vvaarriiáávveell,, eexx::FFaattNNPP));;  EE ffiinnaallmmeennttee ccaallccuullaarr aa eexxpprreessssããoo:: FFaattNN//((FFaattPP**FFaattNNPP))..
  12. 12. 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;
  13. 13. Subprogramação  Suponha que tivéssemos à disposição um procedimento genérico, chamado FAT, para calcular o fatorial de um número qualquer: CCoommoo ppooddeerrííaammooss ffaazzeerr iissttoo??
  14. 14. 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; Corpo Identificador Parâmetro(s)
  15. 15. SSuubbpprrooggrraammaaççããoo 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);
  16. 16. Procedimento em PASCAL  Sintaxe procedure nome (lista-de-parâmetros); declaração de variáveis locais; begin comandos; end;  Exemplo: procedure Troca (var A,B: real); var aux: real; begin aux:=A; A:=B; B:=aux; end;
  17. 17. Função em PASCAL  Sintaxe function nome (lista-de-parâmetros): tipo; declaração de variáveis locais; begin comandos; 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.
  18. 18. SUBPROGRAMAS  Em Pascal, dentro do Programa Principal, os SSUUBBPPRROOGGRRAAMMAASS devem ser definidos depois da declaração das variáveis;
  19. 19. SUBPROGRAMAS program NOME; Relação das Unidades Utilizadas Definição de Tipos de Dados Definição de Constantes Declarações de Variáveis DDeeffiinniiççããoo ddee FFuunnççõõeess ee PPrroocceeddiimmeennttooss {Programa Principal} begin  Dentro do Programa Principal, os SUBPROGRAMAS devem ser definidos depois da declaração das variáveis comandos end.
  20. 20. 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.
  21. 21. 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);
  22. 22. 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;

×