Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
Sub-programas
Sub-programas
• Mecanismo de composição de programas
Sub-programa está para peça de LEGO assim como um programa está para a construção.
Sub-programa e funções matemáticas
• Mecanismo de composição de programas• Como na matemática– Possui entrada (argumentos) e saída (resultado)– Define relação entre entrada e saída– Uma entrada está associada a um único resultado
• Diferente da matemática– O valor é calculado– Programa possui estado. Funções (em Pascal)
podem modificar este estado
Exemplo na matemática
• Para qualquer x e y int., f(x,y) = x * y
f é a função de multiplicação. Válida para qualquer par de inteiros.
Exemplo na matemática
• Para qualquer x e y int., f(x,y) = x * y
program Main;type ...{declarações de tipo}var a,b: int; {declarações de variáveis}function mult(x,y: integer): integer;begin mult := x * y;end;Begin readln(a, b); println(‘o resultado da multiplicacao eh: ’, mult(a,b)); end.
Por que definir funções em programas?
Por que definir funções em programas?
É importante organizar código em módulos!
Por que definir funções em programas?
• Modularizar permite:– Dividir esforço• Uma vez que a interface de uma função (entrada, saída,
e comportamento) é definida, pode-se distribuir esforço (dividir para conquistar)
– Evitar cópia• Re-usar mesma implementação de uma funcionalidade
em várias partes do programa permite focalizar manutenção do programa.
Procedimentos
Procedimentos em Pascal
program Main;type ...var ...procedure proc1() ...procedure proc2() ...procedure procN() ...begin ...end.
definições
usos
Procedimentos em Pascal
procedure nome(argumentos); var {aqui colocamos as variáveis que serão usadas só neste procedimento} begin {aqui vai a parte executável, a lógica do procedimento} end;
Visibilidadeprogram Main;type ...{declarações de tipo}var a,b: int; {declarações de variáveis}function mult(x,y: integer): integer;begin mult := x * y;end;function add(x,z: integer): integer;var t : integer;begin t := x + z; add := t;end;begin readln(a, b); println(‘o resultado da multiplicacao eh: ’, mult(a,b)); end.
variáveis locais
parâmetros
variáveis globais
Passagem de parâmetro por cópia e referência
program Referencia;var k : integer;procedure AddRef(var i : integer);begin i := i + 1;end;procedure AddRef2(i : integer);begin i := i + 1;end;begin k := 0; AddRef(k); writeln('>',k); AddRef2(k); {no side effect on k} writeln('>',k); readln()end.
passagem por cópia
passagem por referência
Exemploprogram Matrizes; uses crt; { biblioteca auxiliar } type matriz = array[1..10,1..10] of integer; var a,b:matriz; n:integer; procedure lermatriz(x:char; var c:matriz); var i,j:integer; begin clrscr; write('Entre com a matriz-> ', x); for i:=1 to n do for j:=1 to n do begin gotoxy(1+(j-1)*4,i+3); read(c[i,j]); end; end; ...
program Matrizes; uses crt; { biblioteca auxiliar } type matriz = array[1..10,1..10] of integer; var a,b:matriz; n:integer; procedure lermatriz(x:char; var c:matriz); var i,j:integer; begin clrscr; write('Entre com a matriz-> ', x); for i:=1 to n do for j:=1 to n do begin gotoxy(1+(j-1)*4,i+3); read(c[i,j]); end; end; ...
Exemplo
variáveis locais
x e c são parâmetros de entrada, mas c é passado por referência
Exercício
• Defina um procedimento para calcular e imprimir o valor da exponenciação de um número a por outro b.
Funções
Definição
• Em pascal, tipo especial de procedimento que retorna um valor
Sintaxe
function nome(argumentos): tipo;var {aqui colocamos as variáveis que serão usadas só neste procedimento} begin {aqui vai a parte executável, a lógica do procedimento} end;
Sintaxe
function nome(argumentos): tipo;var {aqui colocamos as variáveis que serão usadas só neste procedimento} begin {aqui vai a parte executável, a lógica do procedimento} end;
Note que uma função possui tipo!
Exercício 1
• Escreva um programa que receba duas frações (quatro inteiros) ordinárias e mostre o resultado em forma de fração
Exercício 2
• Modifique o programa anterior para simplificar a fração resultado pelo máximo divisor comum
Exercício 3
• Implemente uma função que calcule o fatorial de um numero inteiro “n” (maior que 0)
• Definição informal de fatorial: factorial(n) = 1 * 2 * ... * (n-1) * n
Exercício 4
• Implemente uma função que calcule o fatorial de um número.
• Definição:– Fac(n) = 1, n = 1– Fac(n) = n * f(n-1), n > 1
Exercício 5
• Implemente uma função Pascal que retorne o número de fibonacci n.
• Definição:– Fib(n) = 1, se n = 1 ou n = 2– Fib(n) = fib(n-1) + fib(n-2), se n > 2
Exercício 6
• A função booleana “ehPar” indica se um número inteiro (maior que zero) é par. Implemente duas versões desta função.– Usando a função mod– Usando apenas os operadores de subtração e
comparação