A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

MC102 - Algoritmos e Programação de Computadores 16ª Aula – Procedimentos e Funções Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005.

Apresentações semelhantes


Apresentação em tema: "MC102 - Algoritmos e Programação de Computadores 16ª Aula – Procedimentos e Funções Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005."— Transcrição da apresentação:

1 MC102 - Algoritmos e Programação de Computadores 16ª Aula – Procedimentos e Funções Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

2 04/05/20052 Roteiro zRelembrando... yDeclaração, definição e uso yChamada a um procedimento - Ilustração zEscopo Local zPassagem de Parâmetros yValor vs. Referência yVetores como parâmetros yMatrizes como parâmetros

3 04/05/20053 Declaração, definição e uso zDeclaração yQuando são definidas as propriedades de uma função (tipo de retorno e lista de parâmetros): xProtótipos de Funções xDefinição de Funções (declaração está implícita) zDefinição yQuando uma função é detalhadamente descrita zUso yQuando uma função é chamada por outra função

4 04/05/20054 Relembrando... zProtótipo: tipo NomeDaFuncao (lista de parâmetros); zDefinição: tipo NomeDaFuncao (lista de parâmetros) { declarações e comandos; } zChamada NomeDaFuncao (lista parâmetros); Na declaração (protótipo e definição), cada parâmetro deve ser precedido por seu tipo de dado

5 04/05/20055 Chamada a um Procedimento Instrução Procedimento Instrução Programa Procedimento

6 04/05/20056 Escopo Local zAs variáveis que temos declarado até o momento são privativas ou locais as suas funções zOs parâmetros de uma função também são considerados variáveis locais a ela zEste tipo de variável passa a existir somente quando a função é chamada e deixa de existir somente quando a função termina e, por isso, são denominadas variáveis automáticas

7 04/05/20057 Escopo Local zVariáveis automáticas não retêm seus valores de uma chamada para outra e se não forem inicializadas contêm um valor desconhecido zDuas ou mais variáveis não podem ser declaradas com o mesmo nome se fazem parte da mesma função, mas elas podem ter o mesmo nome se forem declaradas em funções diferentes (neste caso farão referência a endereços de memória distintos, ou seja, são variáveis diferentes)

8 04/05/20058 Passagem de Parâmetros long int somatorio (long int m, long int n); double produtorio (long int m, long int n); double potencia (float x, int y); double fatorial (int n); double Pn (int n); double Ank (int n, int k); double Cnk (int n, int k);

9 04/05/20059 Passagem de Parâmetros zPassagem de parâmetros por valor yAs funções cujos protótipos foram apresentados na transparência anterior são funções que recebem valores como parâmetros yEstes valores podem ser valores constantes, conteúdos de variáveis, resultados de expressões em geral yÉ importante que estes valores estejam de acordo com o tipo declarado para o parâmetro correspondente

10 04/05/ Passagem de Parâmetros Considere os trechos de código a seguir: soma = somatorio (0, 1); soma = somatorio (a, b); produto = produtorio (somatorio (a,b), a*b); printf (%d, somatorio (a, 2*b)); Suponha que as variáveis soma, a e b tenham sido declaradas como sendo do tipo long int Suponha que a variável produto tenha sido declarada como double Suponha que as variáveis soma, a e b tenham sido declaradas como sendo do tipo long int Suponha que a variável produto tenha sido declarada como double

11 04/05/ Exemplo 1 /* Uma definição para a função somatório */ long int somatorio (long int m, long int n) { long int i, soma = 0; for (i = m; i <= n; i++) soma += i; return (soma); } As variáveis m e n, ambas parâmetros do tipo long int, são variáveis que pertencem ao escopo da função: long int somatorio (long int m, long int n); As variáveis m e n, ambas parâmetros do tipo long int, são variáveis que pertencem ao escopo da função: long int somatorio (long int m, long int n);

12 04/05/ Exemplo 1 /* Outra definição para a função somatório */ long int somatorio (long int m, long int n) { long int soma = 0; while (m <= n) soma += m++; return (soma); } Alterações na variável m, local à função long int somatorio (long int m, long int n); são percebidas apenas no escopo da função Alterações na variável m, local à função long int somatorio (long int m, long int n); são percebidas apenas no escopo da função

13 04/05/ Passagem de Parâmetros void troca (long int *x, long int *y); zPassagem de parâmetros por referência yO protótipo acima, indica que o procedimento deve receber endereços para variáveis do tipo long int como parâmetros yO trecho a seguir ilustra o uso desse procedimento: if (a > b) troca (&a, &b); Suponha que as variáveis a e b tenham sido declaradas como sendo do tipo long int

14 04/05/ Exemplo 2 /* Definição da função cujo protótipo foi exibido na transparência anterior */ void troca (long int *x, long int *y) { long int aux; aux = *x; /* variável aux recebe conteúdo do endereço apontado por x */ *x = *y; /* endereço apontado por x recebe o conteúdo do endereço apontado por y */ *y = aux; /* endereço apontado por y recebe o conteúdo da variável aux */ } As variáveis x e y são ambas do tipo ponteiro para long int

15 04/05/ Vetores como Parâmetros zVetores também podem ser passados como parâmetros para funções, mas são sempre passados por referência yImplicação: ao alterar valores dos elementos de um vetor passado como parâmetro, as alterações são percebidas no escopo da função chamadora

16 04/05/ Exemplo 3 (Protótipos) zConsidere os protótipos a seguir: void mostra_vetor (int v[LIM], int n); void multiplica_escalar (int v[LIM], int n, int e); Suponha que LIM é uma constante inteira definida no início do programa

17 04/05/ Exemplo 3 (Protótipos) zTambém são válidos os protótipos: void mostra_vetor (int v[], int n); void multiplica_escalar (int v[], int n, int e); zOu ainda: void mostra_vetor (int *v, int n); void multiplica_escalar (int *v, int n, int e);

18 04/05/ Exemplo 3 (Definições) void mostra_vetor (int v[LIM], int n) { int i; for (i = 0; i < n; i++) printf (%d, v[i]); } void multiplica_escalar (int v[], int n, int e) { int i; for (i = 0; i < n; i++) v[i] = e*v[i]; }

19 04/05/ Matrizes como Parâmetros zMatrizes também podem ser passadas como parâmetros zAssim como vetores, são sempre passadas por referência

20 04/05/ Exemplo 4 (Protótipos) zConsidere os protótipos a seguir: void mostra_matriz (int m[LIM][LIM], int i, int j); void multiplica_escalarM (int m[LIM][LIM], int i, int j, int e); zTambém são válidos os protótipos: void mostra_matriz (int m[][LIM], int i, int j); void multiplica_escalarM (int m[][LIM], int i, int j, int e); Apenas a primeira dimensão da matriz pode ser omitida

21 04/05/ Exemplo 4 (Definições) void mostra_matriz (int m[][LIM], int i, int j) { int auxi, auxj; for (auxi = 0; auxi < i; auxi++) { for (auxj = 0; auxj < j; auxj++) printf (%d, m[auxi][auxj]); printf (\n); }

22 04/05/ Exemplo 4 (Definições) void multiplica_escalarM (int m[LIM][LIM], int i, int j, int e) { int auxi, auxj; for (auxi = 0; auxi < i; auxi++) for (auxj = 0; auxj < j; auxj++) m[auxi][auxj] = e*m[auxi][auxj]; }


Carregar ppt "MC102 - Algoritmos e Programação de Computadores 16ª Aula – Procedimentos e Funções Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005."

Apresentações semelhantes


Anúncios Google