Funções e pilha de chamadas – parâmetros, valores de retorno e escopo

ComputaçãoAlgoritmos e resolução de problemasIdades 15–16

Carregando…

Usar com minha turma ✨ Personalizar com IA Relatar um problema

Execute passo a passo programas que chamam procedimentos e funções e veja cada chamada empilhar um quadro: argumentos ligados aos parâmetros, variáveis locais e o valor de retorno que volta à linha que chamou. Compare variáveis locais e globais, passagem por valor e por referência, e recursão em Python ou pseudocódigo. Um modo biblioteca permite chamar rotinas prontas para explorar assinaturas e abstração.

Aula: Sub-rotinas: procedimentos, funções, parâmetros e escopo

O que mostra

Uma sub-rotina é um bloco de código com nome que pode ser chamado muitas vezes. Quando ela é chamada, o computador empilha um quadro com seus parâmetros e variáveis locais; os argumentos são ligados aos parâmetros, e return devolve um valor e desempilha o quadro. Variáveis locais só existem durante a chamada e podem esconder variáveis globais de mesmo nome. A recursão empilha muitos quadros da mesma função. Rotinas de biblioteca escondem seu código atrás de uma assinatura, e é assim que programas são divididos em módulos e APIs.

Como usar

Escolha um Exemplo e uma Linguagem e clique em Passo para executar uma linha por vez, ou em Executar para rodar o programa na Velocidade escolhida. Observe a pilha de chamadas, as notas em O que aconteceu neste passo e o gráfico de profundidade. Clique em Editar para mudar o código. Passe para Rotinas de biblioteca, escolha uma Rotina, digite os argumentos e clique em Chamar.

Parâmetros que você pode mudar

  • Modo Executar um programa, Rotinas de biblioteca
  • Exemplo Parâmetros e valores de retorno, Variáveis locais e globais, Funções que chamam funções, Procedimentos e funções, Recursão (fatorial), Passagem por valor e por referência
  • Linguagem Python, Pseudocódigo
  • Velocidade 0,5–10 passos/s

Perguntas para explorar

  1. Na chamada area(w, 3), quais valores são os argumentos e quais nomes são os parâmetros?
  2. Por que print(count) no programa principal ainda mostra 10 depois que double(3) foi executada?
  3. Quantos quadros há na pilha de chamadas quando factorial(4) chega ao caso base?