Buscar

Linguagem de programação - Subprogramas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal do Ceará – Campus Russas
Linguagens de Programação
Prof. Ms. Rafael Ivo
Lista de Exercícios 5 – Subprogramas
1) Quais os motivos para se criar uma função?
2) Normalmente, qual a diferença entre um procedimento e uma função?
3) Diferencie argumento e parâmetro.
4) Quais as principais formas de passar um argumento para uma função? Explique cada uma delas.
5) Descreva as formas como apelidos podem ocorrer com argumentos passados por referência.
6) O que é ligação de um subprograma?
7) O que é registro de ativação?
8) Por que uma instância de registro de ativação de cada função presente em um programa não é previamente
instanciada e armazenada na memória em tempo de compilação?
9) Explique a diferença do ponteiro de ligação dinâmica do ponteiro de retorno em um registro de ativação.
10) Explique a diferença do ponteiro de ligação estática e do ponteiro de ligaçao dinâmica em um registro de
ativação.
11) Por que programas recursivos utilizam mais memória do que programas iterativos.
12) Analise o seguinte programa em uma linguagem similar a C:
void swap(int[] list, int i, int j){
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
void main(){
int x[3] = {5,2,4};
swap(x,1,2);
}
Qual o valor da matriz x para cada uma dos seguintes mecanismos de passagem de parâmetros?
a) O argumento x é passado por valor.
b) O argumento x é passado por referência.
c) O argumento x é passado por resultado-valor.
13) Considere o seguinte programa escrito na sintaxe estilo-C:
void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
void main(){
int value = 2, list[5] = {1,3,5,7,9};
swap(value, list[0]);
swap(list[0], list[1]);
swap(value, list[value]);
}
Para cada um dos seguintes métodos de passagem de parâmetros, quais são todos os valores das variáveis
value e list após cada uma das três chamadas de swap?
a) Passagem por valor.
b) Passagem por referência.
c) Passagem por resultado-valor.
14) Considere o seguinte programa escrito na sintaxe estilo-C:
void fun(int first, int second){
first += first;
second += second;
}
void main(){
int list[2] = {1,3};
fun(list[0],list[1]);
}
Para cada um dos seguintes métodos de passagem de parâmetros, quais são todos os valores do vetor list
após a execução?
a) Passagem por valor.
b) Passagem por referência.
c) Passagem por resultado-valor.
15) Mostre a pilha de execução com todos os registros de ativação, incluindo as ligações estáticas e
dinâmicas, quando a execução atinge a posição 1 no seguinte programa em Ada.
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure Main is
procedure A is
procedure B is
begin -- inicio de B
... ← ← ← ← ← ← ← ← ← ← ← ← posição 1
end; -- final de B
procedure C is
begin -- inicio de C
...
B;
...
end; -- final de C
begin -- inicio de A
...
C;
...
end; -- final de A
begin -- inicio de Main
...
A;
...
end; -- final de Main
16) Mostre a pilha de execução com todos os registros de ativação, incluindo as ligações estáticas e
dinâmicas, quando a execução atinge a posição 1 no seguinte programa em Ada.
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
procedure Main is
M : Float;
L : Float;
procedure A is
X : Integer;
procedure B(S : Float) is
Y, Z : Float;
begin -- inicio de B
...
C(Z);
...
end; -- final de B
begin -- inicio de A
...
B(X);
...
end; -- final de A
procedure C(P : Float) is
begin -- inicio de C
... ← ← ← ← ← ← ← ← ← ← ← ← posição 1
end; -- final de C
begin -- inicio de Main
...
A;
...
end; -- final de Main
17) Mostre a pilha de execução com todos os registros de ativação, incluindo as ligações estáticas e
dinâmicas, quando a execução atinge a posição 1 no seguinte programa em Ada.
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
procedure Main is
procedure A(Flag : Boolean) is
procedure B is
begin -- inicio de B
...
A(false);
end; -- final de B
begin -- inicio de A
if Flag
then B;
else C;
...
end; -- final de A
procedure C is
procedure D is
begin -- inicio de D
... ← ← ← ← ← ← ← ← ← ← ← ← posição 1
end; -- final de D
begin -- inicio de C
...
D;
end; -- final de C
begin -- inicio de Main
...
A(true);
...
end; -- final de Main
18) Seja o código abaixo escrito em uma linguagem como C. Mostre a pilha de execução com todos os
registros de ativação cada vez que a execução atinge a linha 13. Cada registro de ativação deve possuir
apenas o nome da função, as variáveis locais da função e a linha da próxima instrução a ser executada após o
término da execução da função (para funcionar como endereço de retorno).
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
void ordena(int n, int v[]){
 int i, temp;
 if(n > 1){
 ordena(n-1,v);
 i = n;
 while(i > 0 && v[i-1] > v[i]){
 temp = v[i];
 v[i] = v[i-1];
 v[i-1] = temp;
 i--;
 }
 }
 //ponto de analise
}
void main(){
 int dados[] = {3,1,2};
 ordena(3,dados);
}
Obs1: As variáveis são passadas usando o mecanismo de resultado-valor.
Obs2: A expressão booleana da linha 6 e avaliada usando a avaliação de curto-circuito.
19) Considere o seguinte programa abaixo escrito na linguagem Ada. Suponha que o compilador implemente
escopo estático. Mostre a pilha de execução do programa cada vez que uma instrução de escrita é chamada.
O formato de cada registro de ativação está mostrado a direita do código. Obs: A instrução Put(x,y,z)
escreve os valores de x, y e z visíveis.
01. procedure Main is
02. x, y, z: Integer;
03. procedure procB is
04. y: Integer; 
05. begin -- início de procB
06. y = 0;
07. x = z + 1;
08. z = y + 2;
09. Put(x,y,z);
10. end; -- final de procB
11. procedure procC is
12. z: Integer;
13. procedure procD is
14. x : Integer;
15. begin -- início de procD
16. x = z + 1;
17. y = x + 1;
18 Put(x,y,z);
19. procB;
20. end; -- final de procD
21. begin -- início de procC
22. z = 5;
23 Put(x,y,z);
24. procD;
25. end; -- final de procC
26. begin -- início de main
27. x = 10;
28. y = 11;
29. z = 12;
30. procC;
31. end; -- final de main
Pont. Ligação Estática Pont. Ligação Dinâmica
Variável
...
Variável
Linha de retorno
20) O programa C/C++ a seguir resolve o problema das Torres de Hanói para três discos:
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
void moveTorre(int discos, char inicio, char final, char meio){
if(discos == 1)
cout << "Move um disco de " << inicio << " para " << final << endl;
else{
moveTorre(discos-1,inicio,meio,final);
cout << "Move um disco de " << inicio << " para " << final << endl;
moveTorre(discos-1,meio,final,inicio);
}
}
void main(){
int nDiscos = 3;
moveTorre(nDiscos,'A','B','C');
}
Mostre o estado da pilha de execução com os registros de ativação a cada vez que uma instrução de escrita é
chamada.

Outros materiais