Aula 05 subprogramas

593 visualizações

Publicada em

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
593
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
26
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aula 05 subprogramas

  1. 1. INTRODUÇÃO A LINGUAGEM PASCAL Profº.: Tácito Henrique tacito.graca@gmail.com CEMA – Centro Educacional Miguel Alves Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  2. 2. SUBPROGRAMAS Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  3. 3. O que são subprogramas? • O programa Ordena3 contém algumas sequências de comandos idênticas como: begin Aux := x; x := y; y := Aux; end; begin Aux := x; x := z; z := Aux; end; begin Aux := y; y := z; z := Aux; end • Os objetivos é permutar os conteúdos das variáveis: x e y, na primeira sequência; x e z na segunda e y e z na terceira sequência. Ou seja, estas sequências tinham o mesmo objetivo: permutar conteúdos de variáveis. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  4. 4. Porque usar subprogramas? • Para evitar repetições de sequências idênticas • Melhor legibilidade do programa • O programa pode ser desenvolvido em equipe, cada membro se encarregando do desenvolvimento de alguns dos seus subprogramas. • A validação do programa através de testes pode ser realizada testando-se cada um dos subprogramas isoladamente, o que facilita a detecção e identificação de erros de lógica. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  5. 5. Porque usar subprogramas? • Atualizações posteriores do programa (atos chamados genericamente de manutenção do programa) são facilitadas, pelo fato de que apenas atualizações em alguns subprogramas são requeridas. • Quando há necessidade de que o programa determine a mesma grandeza para valores diferentes. Exemplos: média aritmética, mediana, desvio médio, desvio padrão Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  6. 6. Procedimentos (Procedures) • Os procedimentos devem ser definidos antes do programa principal utilizando-se a seguinte sintaxe: procedure Identificador(var lista de parâmetros : tipo de dado); declarações e definições begin sequência de comandos end; • Sendo as regras para o estabelecimento do identificador as mesmas utilizadas para a escolha do identificador do programa e a indicação var para os parâmetros é opcional. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  7. 7. Procedimentos (Procedures) • Os parâmetros de um procedimento servem para permitir que o mesmo seja "executado" para conjuntos de dados diferentes • Os parâmetros devem ser fornecidos no momento da “ativação” ou “declaração” • Os dados que substituirão os parâmetros quando o procedimento for executado são chamados de argumentos • Os argumentos obrigatoriamente deve ser do mesmo tipo de dado do parâmetro. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  8. 8. Exercícios Resolvidos Exercício 1 program Ordena3; var x, y, z : real; begin Aux := x; x := y; y := Aux; end; begin Aux := x; x := z; z := Aux; end; begin Aux := y; y := z; z := Aux; end Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  9. 9. Exercícios Resolvidos Exercício 1 program Ordena3; var x, y, z : real; {procedimento que permuta os conteúdos de duas variáveis} procedure Troca(var v1, v2 : real); //Declaração da procedure var Aux : real; begin Aux := v1; v1 := v2; v2 := Aux; end; {programa principal} begin write('Digite os três números'); readln(x, y, z); writeln('Valores dados: x = ', x:0:2, ', y = ', y:0:2, ' e z = ', z:0:2); if (x > y) or (x > z) then if y > z then Troca(x, z) //Chamada da procedure else Troca(x, y); //Chamada da procedure if y > z then Troca(y, z); //Chamada da procedure writeln('Valores dados, agora ordenados: x = ', x:0:2, ', y = ', y:0:2, ‘ e z = ', z:0:2); end. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  10. 10. Procedimentos (Procedures) • Observações importantes • A ativação da procedure é feita com a simples referência ao seu identificador junto com os argumentos; • Os comentários são essenciais para facilitar a identificação do objetivo da procedure; • Os comandos readln e writeln são exemplos de procedimentos predefinidos da linguagem; Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  11. 11. Funções (functions) • As funções, além de poderem executar ações genéricas, podem retornar valores; • A declaração segue de acordo com a seguinte sintaxe : function Identificador(var lista de parâmetros : tipo de dado) : tipo de dado; declarações e definições begin seqüência de comandos; end; Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  12. 12. Funções (functions) • Se a função deve retornar um valor, este valor será do tipo de dado fixado na sua declaração, que é necessariamente um tipo de dado simples ou uma string Exemplo: function mediaAritmetica(var a,b,c : integer) : real; • É necessário que haja uma atribuição a um tipo compatível com o retorno da função; Exemplo: Var Resultado : real; begin resultado := mediaAritmetica(10, 7, 5); end. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  13. 13. Exercícios Resolvidos Exercício 2 {Programa que soma das frações ordinárias} program SomaFracoes; var Num1, Den1, Num2, Den2, Num, Den: integer; begin writeln('Digite as fracoes'); readln(Num1, Den1, Num2, Den2); Num := Num1 * Den2 + Num2 * Den1; Den := Den1 * Den2; writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (', Num, '/', Den, ')'); end. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  14. 14. Exercícios Resolvidos Exercício 2 {Programa que soma das frações ordinárias} program SomaFracoes; var Num1, Den1, Num2, Den2, Num, Den: integer; begin writeln('Digite as fracoes'); readln(Num1, Den1, Num2, Den2); Num := Num1 * Den2 + Num2 * Den1; Den := Den1 * Den2; writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (', Num, '/', Den, ')'); end. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  15. 15. Exercícios Resolvidos Exercício 2 program SomaFracoes; var Num1, Den1, Num2, Den2, Num, Den, Mdc: integer; {função que retorna o maximo divisor comum de dois inteiros dados} function MaxDivComum(x, y : integer) : integer; var Resto : integer; begin Resto := x mod y; while Resto <> 0 do begin x := y; //Corpo da função y := Resto; Resto := x mod y; end; MaxDivComum := y; end; {programa principal} begin writeln('Digite as fracoes'); readln(Num1, Den1, Num2, Den2); Num := Num1 * Den2 + Num2 * Den1; Den := Den1 * Den2; Mdc := MaxDivComum(Num, Den); //Chamada da função e associação do resultado à variável Mdc Num := Num div Mdc; Den := Den div Mdc; writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (', Num, '/', Den, ')'); end. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  16. 16. Passagem de Parâmetros • No procedimento Troca do exemplo 1, as definições dos parâmetros eram precedidas da palavra reservada var • Mas nas definições dos parâmetros da função MaxDivComum isso não acontecia. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  17. 17. Passagem de Parâmetros • No procedimento Troca do exemplo 1, as definições dos parâmetros eram precedidas da palavra reservada var • Mas nas definições dos parâmetros da função MaxDivComum isso não acontecia. • Porque? O que há de diferente entre esses dois subprogramas? Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  18. 18. Passagem de Parâmetros • No primeiro, se pretendia que o procedimento tivesse influência nos conteúdos das variáveis passadas como argumentos; • Enquanto que, no segundo, os conteúdos das variáveis passadas como argumentos não deveriam ser modificados pelos comandos da função; • Quando isso é útil? • Quando um subprograma precisa modificar uma variável global Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  19. 19. Passagem de Parâmetros • Quando não se pretende que comandos do subprograma não interfiram em conteúdos de variáveis globais, a declaração dos parâmetros não é precedida da palavra var e o parâmetro recebe um elemento do seu tipo de dado; 1. constantes do tipo de dado do parâmetro respectivo; 2. conteúdos de variáveis do mesmo tipo de dado; 3. expressões cujos resultados sejam daquele tipo. • Neste caso, a passagem de parâmetros é dita por valor. • Exemplos: Procedure atualizarRamal(var ramalNovo, ramalAntigo:char) • Passagem por referência (Interfere nas variáveis globais) Function atualizarRamal(ramalNovo, ramalAntigo:char) • Passagem por valor (Não interfere nas variáveis globais) • Um outro aspecto interessante é que a passagem de parâmetros por referência permite que se substitua uma função por um procedimento. Basta que se utilize um parâmetro por referência para retornar o valor para uma variável global. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal
  20. 20. Exercícios de Fixação • Para cada problema a seguir, crie uma função e codifique um programa para testá-la: 1. Dado um número natural, determine se ele é par ou ímpar. 2. Dados dois números reais, determine o máximo entre eles. 3. Dados quatro números reais, determine a média aritmética entre eles. Profº.: Tácito Henrique ::: Introdução a linguagem Pascal

×