Skip to content

Latest commit

 

History

History
202 lines (171 loc) · 4.13 KB

parametros.org

File metadata and controls

202 lines (171 loc) · 4.13 KB

Parâmetros

1 Parâmetros – Conceitos

Parâmetros formais

  • Lista de parâmetros que o subprograma recebe (com tipos)
  • Estabelece nomes locais para a manipulação dos dados
    int soma (int a, int b);
        

\pause Parâmetros reais

  • Argumentos usados na chamada ao subprograma
  • Valores (reais) passados à unidade chamada
    soma (10, 2);
    soma (a, 2*a);
        

2 Parâmetros Formais

Elementos

  • Nome
  • Tipo
  • Modo de passagem do parâmetro (opcional, se há vários)
  • Inicialização do parâmetro (opcional, quando permitido)

Exemplos

int soma (int a, int b);
Procedure somar (a: integer; var b: integer);
- (void) getTune: (out Tune*) theSong;
int soma (int a = 0, int b = 10);

3 Parâmetros Formais versus Variáveis Locais

Em geral, ambos são alocados na pilha

Variáveis locais: no RA do subprograma

Parâmetros formais

  • Podem estar ou no RA do chamado, ou no do chamador
  • Outra implementação possível?

Exemplo \small

void trocaInteiro (int *u, int *v) {
  int t;
  t = *u;
  *u = *v;
  *v = t;
}
int main () {
  int a = 3, b = 5;
  trocaInteiro (&a, &b);
}

4 Parâmetros Reais (Argumentos)

Em geral, devem concordar com os parâmetros formais

  • Quantidade
  • Tipos
  • Ordem
  • Modo de passagem de parâmetros (valor, referência, etc)

\pause Considerando os seguintes parâmetros formais

void somaA (int a = 0, int b = 0);
Procedure somaB (a: integer; var b: integer);
  • x e y devem ser passados como inteiros \small
    somaA (x, y);
        
  • Assume que b = 0 \small
    somaA (10);
        
  • z é passado por referência \small
    somaB (10, z);
        

5 Vinculação de Parâmetros

Definir uma regra de vinculação entre formais e reais

  • Existem várias abordagens

6 Vinculação de Parâmetros

Posição sintática (mesma ordem, quantidade e tipo) \small

float pag (float p1, float p2, float p3);

\normalsize \pause Nome (conhecido também por palavras-chave) \small

proc1 (in out a, b, c)

proc1(a => x, b => y, c => z)

\normalsize \pause Mista \small

proc1(x, c => z, b=> y)     

\pause Valor Padrão \scriptsize (C++, devem aparecer por último) \small

float pag (float r, float imp=0.25, int isen=1);

calc = pag(2000f, 0.15);
calc = pag(2000f);

7 Vinculação de Parâmetros – Mais Exemplos

Nome (em Python)

def soma(lista, inicio, fim): 
#...
soma(inicio = 1, fim = 2, lista = [4, 5, 6])
soma([4, 5, 6], fim = 1, inicio = 2)

Valor Padrão (em Python)

def compute_pay(income, exemptions = 1, tax_rate):
#...
pay = compute_pay(20000.0, tax_rate = 0.15)

8 Número Variável de Argumentos

Exemplos? \pause Java \small

public class MLP {
  public static int soma (int...lista){
    int resultado = 0;
    for (int i:lista) resultado += i;
    return resultado;
  }


  public static void main (String[] args){
    soma(1);
    soma(1, 2, 3);
    soma(1, 2, 3, 5, 1000);
  }
}

9 Número Variável de Argumentos

Exemplos? C \small

int soma (const int nargs, ...) {
  int i, resultado = 0;
  va_list argp;
  va_start (argp, nargs);
  for (i = 0; i < nargs; i++){
     resultado += va_arg (argp, int);
  }
  va_end (argp);
  return resultado;
}

int main (){
  soma (2, 1, 2);
  soma (5, 1, 2, 4, 10);
}