1 / 22

MC102 - Algoritmos e Programação de Computadores

MC102 - Algoritmos e Programação de Computadores. 16ª Aula – Procedimentos e Funções Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005. Roteiro. Relembrando... Declaração, definição e uso Chamada a um procedimento - Ilustração Escopo Local Passagem de Parâmetros

mabli
Télécharger la présentation

MC102 - Algoritmos e Programação de Computadores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Roteiro • Relembrando... • Declaração, definição e uso • Chamada a um procedimento - Ilustração • Escopo Local • Passagem de Parâmetros • Valor vs. Referência • Vetores como parâmetros • Matrizes como parâmetros

  3. Declaração, definição e uso • Declaração • Quando são definidas as propriedades de uma função (tipo de retorno e lista de parâmetros): • Protótipos de Funções • Definição de Funções (declaração está implícita) • Definição • Quando uma função é detalhadamente descrita • Uso • Quando uma função é chamada por outra função

  4. Na declaração (protótipo e definição), cada parâmetro deve ser precedido por seu tipo de dado Relembrando... • Protótipo: tipo NomeDaFuncao (lista de parâmetros); • Definição: tipo NomeDaFuncao (lista de parâmetros) { declarações e comandos; } • Chamada NomeDaFuncao (lista parâmetros);

  5. Chamada a um Procedimento Programa Instrução Procedimento Instrução Instrução Procedimento Instrução Instrução Instrução Instrução

  6. Escopo Local • As variáveis que temos declarado até o momento são privativas ou locais as suas funções • Os parâmetros de uma função também são considerados variáveis locais a ela • Este 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. Escopo Local • Variá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 • Duas 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. 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. Passagem de Parâmetros • Passagem de parâmetros por valor • As funções cujos protótipos foram apresentados na transparência anterior são funções que recebem valores como parâmetros • Estes valores podem ser valores constantes, conteúdos de variáveis, resultados de expressões em geral • É importante que estes valores estejam de acordo com o tipo declarado para o parâmetro correspondente

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

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

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

  13. Passagem de Parâmetros void troca (long int *x, long int *y); • Passagem de parâmetros por referência • O protótipo acima, indica que o procedimento deve receber endereços para variáveis do tipo long int como parâmetros • O 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. 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. Vetores como Parâmetros • Vetores também podem ser passados como parâmetros para funções, mas são sempre passados por referência • Implicaçã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. Exemplo 3 (Protótipos) • Considere 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. Exemplo 3 (Protótipos) • Também são válidos os protótipos: void mostra_vetor (int v[], int n); void multiplica_escalar (int v[], int n, int e); • Ou ainda: void mostra_vetor (int *v, int n); void multiplica_escalar (int *v, int n, int e);

  18. 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. Matrizes como Parâmetros • Matrizes também podem ser passadas como parâmetros • Assim como vetores, são sempre passadas por referência

  20. Exemplo 4 (Protótipos) • Considere 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); • També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. 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. 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]; }

More Related