26
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

Embed Size (px)

Citation preview

Page 1: 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-programas

Page 2: 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-programas

• Mecanismo de composição de programas

Sub-programa está para peça de LEGO assim como um programa está para a construção.

Page 3: 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

Page 4: 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

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.

Page 5: 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

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.

Page 6: 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

Por que definir funções em programas?

Page 7: 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

Por que definir funções em programas?

É importante organizar código em módulos!

Page 8: 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

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.

Page 9: 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

Procedimentos

Page 10: 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

Procedimentos em Pascal

program Main;type ...var ...procedure proc1() ...procedure proc2() ...procedure procN() ...begin ...end.

definições

usos

Page 11: 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

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;

Page 12: 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

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

Page 13: 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

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

Page 14: 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

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

Page 15: 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

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

Page 16: 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

Exercício

• Defina um procedimento para calcular e imprimir o valor da exponenciação de um número a por outro b.

Page 17: 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

Funções

Page 18: 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

Definição

• Em pascal, tipo especial de procedimento que retorna um valor

Page 19: 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

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;

Page 20: 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

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!

Page 21: 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

Exercício 1

• Escreva um programa que receba duas frações (quatro inteiros) ordinárias e mostre o resultado em forma de fração

Page 22: 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

Exercício 2

• Modifique o programa anterior para simplificar a fração resultado pelo máximo divisor comum

Page 23: 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

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

Page 24: 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

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

Page 25: 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

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

Page 26: 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

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