Procedimentos e Funções Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 1
MÓDULOS São blocos de instruções que realizam tarefas específicas. Carregado uma vez e pode ser executado quantas vezes for necessário. Podem ser usadas para economizar espaço e tempo de programação já que podem ser usadas várias vezes num mesmo programa. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 2
MÓDULOS Cada módulo, além de ter acesso às variáveis do programa que o chamou (são as variáveis globais), pode ter suas próprias variáveis (são as variáveis locais), que existem apenas durante sua chamada. Ao se chamar um módulo, também é possível passar-lhe determinadas informações que recebem o nome de parâmetros. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 3
MÓDULOS Vantagens Dividir e estruturar um algoritmo em partes logicamente coerentes; Facilidade de testar os trechos em separado; Evitar repetição do código-fonte; Maior legibilidade de um algoritmo. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 4
Tipos de subprogramas: ALGORITMOS I Procedimentos e Funções Procedimentos - são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. Funções - tipo especial de procedimento onde depois de executada a chamada, o valor calculado é retornado no nome da função que passa a ser uma variável da expressão. Função Recursiva são aquelas que chamam a si próprias. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 5
Procedimentos e Funções Funções e procedimentos permitem modularizar algoritmos. As funções são chamados dentro do corpo do programa principal como se fossem comandos. Após seu término, a execução continua a partir do ponto onde foi chamado. Cada função, tem acesso às variáveis do programa que o chamou (são as variáveis globais), e tem acesso as suas próprias variáveis (são as variáveis locais), que existem apenas durante sua chamada. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 6
Funções Recursivas Uma função recursiva possui: Um passo básico (ou mais) cujo resultado é imediatamente conhecido. Um passo recursivo tenta resolver um subproblema do problema inicial. A execução de uma função recursiva consiste em resolver subproblemas sucessivamente mais simples até se atingir o caso mais simples de todos, cujo resultado é imediato. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 7
Procedimentos e Funções Variável global é vista pelo programa principal e por todos os módulos pertencentes a ele. Variável local é visível ao módulo em que ela foi declarada e aos módulos hierarquicamente inferiores. Ao se chamar um módulo, também é possível passar-lhe determinadas informações que recebem o nome de parâmetros. Parâmetros - são valores que, na linha de chamada, ficam entre os parênteses e que estão separados por vírgulas. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 8
Procedimentos e Funções Declaração de um procedimento: procedimento <nome-de-procedimento> [(<seqüência-de-declarações-de-parâmetros>)] var // Seção de Declarações Internas inicio // Seção de Comandos fimprocedimento Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 9
Exemplo: Procedimento 1. Retornar soma de dois números ALGORITMO SOMA DOIS NUMEROS PROCEDIMENTO soma ( a, b: INTEIRO) inicio result <- a + b FIM_PROCEDIMENTO Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 10
Exemplo: Procedimento 1. Retornar soma de dois números (CONT) // Programa principal var x,y, result : inteiro INICIO escreva ("entre com dois numeros: ") LEIA (x,y) soma(x,y) escreval ("Resultado", result) FIMALGORITMO Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 11
Exemplo: Procedimento Ling. C 1. Retornar soma de dois números ALGORITMO SOMA DOIS NUMEROS int result; // variável global PROCEDIMENTO soma ( a, b: INTEIRO) inicio LING. C #include <stdio.h> #include <stdlib.h> // Declaração do Procedimento int soma ( int a, int b ) { result <- a + b FIM_PROCEDIMENTO result = a + b; } // FIM_PROCEDIMENTO Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 12
// Programa principal var x,y, result : inteiro ALGORITMOS I Exemplo: Procedimento Ling C 1. Retornar soma de dois números (CONT) INICIO int main() { int x,y; escreva ("entre com dois numeros: ") LEIA (x,y) soma(x,y) escreval ("Resultado", result) printf("entre com dois numeros: "); scanf("%d %d", &x,&y); soma(x,y); printf( Resultado %d ", result); FIMALGORITMO system("pause"); } Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 13
Declaração de uma função: ALGORITMOS I Procedimentos e Funções funcao <nome-de-função> [(<seqüência-dedeclarações-de-parâmetros>)]: <tipo-de-dado> var // Seção de Declarações Internas inicio // Seção de Comandos fimfuncao Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 14
ALGORITMO (função) Exemplo: Função 1. Retornar soma de dois números Declaração da função funcao soma: inteiro var result: inteiro inicio result <- x + y retorne result fimfuncao Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 15
Exemplo: Função 1. Retornar soma de dois números (cont) ALGORITMO (prog. Princ) // Programa principal VAR x,y: INTEIRO INICIO ESCREVA ("entre com dois numeros: ") LEIA (x,y) ESCREVA ("Resultado", soma) FIMALGORITMO Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 16
Exemplo: Função Ling C 1. Retornar soma de dois números ALGORITMO (função) LING C #include <stdio.h> #include <stdlib.h> int result; // VARIÁVEL GLOBAL Declaração da função funcao soma: inteiro int soma (int a, int b) { var result: inteiro inicio int result; // INICIO result <- x + y result = a + b; retorne result return result; fimfuncao } // FIM DA FUNÇÃO SOMA Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 17
Exemplo: Função Ling C 1. Retornar soma de dois números (cont) ALGORITMO (prog. Princ) LING C // Programa principal int main() VAR x,y: INTEIRO INICIO ESCREVA ("entre com dois numeros: ") LEIA (x,y) ESCREVA ("Resultado", soma) FIMALGORITMO int x,y; // INICIO printf("entre com dois numeros: "); scanf("%d %d", &x,&y); printf("soma %d \n", soma(x,y)); system("pause"); } // FIMALGORITMO Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 18
Exercício de fixação Lista 1 Utilizando funções - Faça os algoritmos 1 - Escreva uma função para calcular se um dado inteiro é par ou ímpar. 2 - Escreva uma função para calcular o fatorial de um dado inteiro. 3 Escreva uma função que retorne o menor número de um vetor (números reais); 4 - Implemente uma calculadora (números reais) com suas funções básicas: soma, subtração, multiplicação e divisão. 5 Escreva uma função para calcular a distancia entre dois pontos (x1, y1) e (x2, y2). Obs.: os valores de x1, x2, y1 e y2 são inteiros, mas a saída é ponto-flutuante. Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 19
Exercício de fixação Lista 1 Utilizando funções - Faça os algoritmos 6 - Escreva uma função de potenciação, em que os dados de entrada são: base e expoente (inteiros). 7 - Escreva uma função recursiva para calcular o fatorial de um dado inteiro. 8 - O que faz a seguinte função recursiva? SE ( b = 0 ) entao a SENAO a <- a+1 b <- b-1 FIMSE Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 20