(→Tópicos) |
(→Problema) |
||
Line 3: | Line 3: | ||
Processamento semântico e geração de código Postfix (não optimizado). | Processamento semântico e geração de código Postfix (não optimizado). | ||
− | == | + | == Exercício 1 == |
+ | Considere em C uma variável declarada '''static''' no corpo de uma função: | ||
+ | |||
+ | # Indique justificadamente qual a área de memória de dados a que pertence. | ||
+ | # Comente justificadamente se o valor desta variável pode ser modificado a partir de outra função. | ||
+ | # Caso a função que contém a variável '''static''' seja invocada recursivamente, quantas instâncias da variável existem e, caso existam múltiplas, os valores são iguais ou distintos? Justifique. | ||
+ | # Indique justificamente se uma função pode devolver o endereço de uma variável declarada static sem criar ''dangling references''. | ||
+ | |||
+ | == Exercício 2 == | ||
+ | Discuta as diferenças, se existirem, entre as variáveis '''x''' e '''y''', declaradas como se segue, na linguagem C: | ||
+ | |||
+ | <c> | ||
+ | char *x = "cadeia de caracteres"; | ||
+ | char y[] = "cadeia de caracteres"; | ||
+ | </c> | ||
+ | |||
+ | == Exercício 3 == | ||
+ | Indique justificadamente se a linguagem C possui algum tipo de polimorfismo. Em caso afirmativo, apresente exemplos. | ||
+ | |||
+ | == Exercício 4 == | ||
+ | Considere a tabela de símbolos fornecida com a CDK. Que modificações seriam necessárias se fosse necessário permitir a definição de espaços de nomes distintos para variáveis, funções e constantes? | ||
+ | |||
+ | == Exercício 5 == | ||
+ | Considere uma função, denominada '''raizes''', que recebe três argumentos correspondentes aos factores de uma equação de 2º grau ''(ax²+bx+c)'' e que calcula o número de raizes. | ||
+ | |||
+ | Escreva a sequência de instruções Postfix correspondentes à implementação da função '''raizes'''. | ||
+ | |||
+ | == Exercício 6 == | ||
+ | Traduza para código Postfix a seguinte função escrita em C: | ||
+ | |||
+ | <c> | ||
+ | int main() { | ||
+ | int n = 45, i = 0, j = 1, *seg = &i; | ||
+ | while (n-- > 0) { | ||
+ | print(*seg = i + j); | ||
+ | seg = (seg == &i) ? &j : &i; | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | </c> | ||
== Resolução == | == Resolução == |
Processamento semântico e geração de código Postfix (não optimizado).
Considere em C uma variável declarada static no corpo de uma função:
Discuta as diferenças, se existirem, entre as variáveis x e y, declaradas como se segue, na linguagem C:
<c> char *x = "cadeia de caracteres"; char y[] = "cadeia de caracteres"; </c>
Indique justificadamente se a linguagem C possui algum tipo de polimorfismo. Em caso afirmativo, apresente exemplos.
Considere a tabela de símbolos fornecida com a CDK. Que modificações seriam necessárias se fosse necessário permitir a definição de espaços de nomes distintos para variáveis, funções e constantes?
Considere uma função, denominada raizes, que recebe três argumentos correspondentes aos factores de uma equação de 2º grau (ax²+bx+c) e que calcula o número de raizes.
Escreva a sequência de instruções Postfix correspondentes à implementação da função raizes.
Traduza para código Postfix a seguinte função escrita em C:
<c> int main() {
int n = 45, i = 0, j = 1, *seg = &i; while (n-- > 0) { print(*seg = i + j); seg = (seg == &i) ? &j : &i; } return 0;
} </c>
As ligações acima contêm as soluções para os exercícios propostos.
Procurar resolver sem consultar.