260 likes | 370 Vues
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)
E N D
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 • Programapossuiestado. Funções (em Pascal) podemmodificaresteestado
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 programMain; type ...{declarações de tipo} var a,b: int; {declarações de variáveis} functionmult(x,y: integer): integer; begin mult:= x * y; end; Begin readln(a, b); println(‘o resultado da multiplicacaoeh: ’, mult(a,b)); end.
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 em Pascal programMain; type ... var ... procedureproc1() ... procedureproc2() ... procedureprocN() ... begin ... end. definições usos
Procedimentos em Pascal procedurenome(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;
Visibilidade programMain; type ...{declarações de tipo} var a,b: int; {declarações de variáveis} functionmult(x,y: integer): integer; begin mult:= x * y; end; functionadd(x,z: integer): integer; var t : integer; begin t := x + z; add := t; end; begin readln(a, b); println(‘o resultado da multiplicacaoeh: ’, mult(a,b)); end. variáveis globais parâmetros variáveis locais
Passagem de parâmetro por cópia e referência program Referencia; var k : integer; procedureAddRef(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 sideeffecton k} writeln('>',k); readln() end. passagem por referência passagem por cópia
Exemplo program Matrizes; usescrt; { biblioteca auxiliar } type matriz = array[1..10,1..10] ofinteger; var a,b:matriz; n:integer; procedurelermatriz(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 program Matrizes; usescrt; { biblioteca auxiliar } type matriz = array[1..10,1..10] ofinteger; var a,b:matriz; n:integer; procedurelermatriz(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; ... x e c são parâmetros de entrada, mas c é passado por referência variáveis locais
Exercício • Defina um procedimento para calcular e imprimir o valor da exponenciação de um número a por outro b.
Definição • Em pascal, tipo especial de procedimento que retorna um valor
Sintaxe functionnome(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 Note que uma função possui tipo! functionnome(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;
Exercício 1 • Escreva um programaquerecebaduasfraçõ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