Buscar

Lisra - Expressões Parte 1

Prévia do material em texto

Linguagens de Programação – Expressões parte 1
Maria Beatriz de Almeida Batista - 383870
Qual o resultado da seguinte expressão em C: +a+++ ++b+ ---c; Forneça o código que você utilizou em C
O resultado foi 3.
#include <stdio.h>
int main()
{
 int soma, a = 2, b = 6, c = 7;
 soma = +a+++(++b)+-(--c);
 printf("Soma bugada : %d", soma);
 return 0;
}
O que é a semântica das expressões?
Significado de cada operação e operando numa expressão, tendo em atenção a ordem pela qual as operações são executadas e sua afectações.
Defina expressões aritméticas e cite alguns exemplos.
Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo numérico, seja ele inteiro ou real. Somente o uso de operadores aritméticos e variáveis numéricas é permitido em expressões deste tipo. Soma, multiplicação, divisão, subtração, mod, etc.
Quais são as principais questões de projeto para Expressões?
Quais são as regras de precedência de operadores?
Quais são as regras de associatividade de operadores?
Qual é a ordem da avaliação dos operandos? 
Existem restrições acerca de efeitos colaterais na avaliação de operandos?
A linguagem permite a sobrecarga de operadores definida pelo usuário?
Que tipo de mistura de tipos é permitida nas expressões?
Quais são os tipos de operadores? Cite cada um e complemente sua resposta usando a linguagem C.
Unário – possui apenas um operando;
Binário – possui dois operandos;
Ternário – possui três operandos;
O que são regras de precedência dos operadores?
O valor de uma expressão depende ao menos parcialmente da ordem de avaliação dos operadores na expressão.
Qual a ordem de avaliação de operandos?
As variáveis em expressões são avaliadas por meio da obtenção de seus valores a partir da memória. As constantes são algumas vezes avaliadas da mesma maneira. Em outros casos, uma constante pode ser parte da instrução de linguagem de máquina e não requerer uma busca em memória. Se um operando é uma expressão entre parênteses, todos os operadores que ela contém devem ser avaliados antes de seu valor poder ser usado como um operando. Se nenhum dos operandos de um operador tiver efeitos colaterais, a ordem de avaliação dos operandos é irrelevante. Logo, o único caso interessante surge quando a avaliação de um operando tem efeitos colaterais.
Disserte sobre o problema do efeito colateral de funções. Mostre exemplo em C para complementar sua resposta.
Um efeito colateral de uma função, chamado de um efeito colateral funcional, ocorre quando a função modifica um de seus parâmetros ou uma variável global. 
Ex em C:
Int a = 5;
Int fun1() {
	a = 17;
	return 3;
}	// fim de fun1 
void main() {
	a = a + fun1();
} //fim de main
Quais são as possíveis soluções para o problema mencionado na questão anterior?
Existem duas soluções possíveis para o problema da ordem de avaliação de operandos e efeitos colaterais. Primeiro, o projetista da linguagem poderia proibir que a avaliação afetasse o valor das expressões simplesmente pela proibição de efeitos colaterais funcionais. O segundo método de evitar o problema é dizer na definição da linguagem que os operandos em expressões devem ser avaliados em uma ordem específica e exigir que os implementadores garantam essa ordem.
O que é sobrecarga de operadores?
Sobrecarga de operadores nada mais é do que alterar o comportamento de um operador da linguagem, como +, -, etc. A função dele é mais cosmética, voltada para a simplificação da leitura e entendimento do código. Mas permite simplificar o gerenciamento de memória em alguns casos (em especial de classes imutáveis de tamanho arbitrário, como strings). Internamente, ele é implementado como um método tradicional, e, portanto, permite todas as otimizações e cabíveis de um método (além de poder ser simplesmente substituído por um).

Continue navegando