TÉCNICAS E LINGUAGENS DE PROGRAMAÇÃO

Conceitos Gerais - Operadores Aritméticos

 

 

 

 

As linguagens de programação dispões de uma variedade considerável de operadores aritméticos, e como veremos posteriormente, a linguagem C e C++  têm um grande conjunto de operadores.  Reportemo-nos por agora aos mais comuns.

 

Trataremos aqui de conhecer:

 

Operadores Aritméticos

 

Os operadores aritméticos estão implementados na generalidade das linguagens de programa, ainda que possam ter algumas ligeiras variações em alguns casos.

 

Os operadores podem subdividir-se em:

  • Operadores unários - por envolverem apenas um operador

  • Operadores binários - por envolverem dois operadores

  • Operadores de atribuição - por permitirem a atribuição de um valor a uma variável

  • Operadores especiais - existentes em algumas linguagens como a C e C++

 

Operadores unários (de sinal)

Operador

menos

mais

Símbolo

-

*

Exemplo

- x

+ x

Operação

negação de x

valor do operando

.

O operador de sinal não deve ser confundido com o operador subtracção e soma, pois apesar de utilizarem o mesmo símbolo, são operadores diferentes.

 

Assim nos seguintes exemplo:

supondo que m = 5

então  -m será igual a -5.

 

supondo a expressão j = 3 - - x

esta será interpretada como sendo J = 3 - ( -x )

 

Operadores binários

Operador

multiplicação

divisão

soma

subtracção

Símbolo

*

/

+

-

Exemplo

x * y

x / y

x + y

x - y

Operação

multiplica x por y

divide x por y

soma x a y

de x subtrai y

 

Em relação aos operadores de atribuição, a generalidade das linguagens implementa o operador igual, sendo que a linguagem C e C++ implementam outros que veremos posteriormente aquando do estudo das linguagens.

 

Operador de atribuição

Operador

igual

Símbolo

=

Exemplo

x = y

Operação

atribui o valor de Y a x

 

 

Operador especial

 

Algumas linguagens dispõem ainda de um operador ou função que permite calcular o resto da divisão inteira de dois números, .que representaremos por agora por resto(x,y).

 

assim por exemplo o resto(9,5) é 4

 

Veremos posteriormente algumas aplicações deste operador.

 

 

Expressões aritméticas

 

Uma das capacidades mais importante do computador é a facilidade de manipulação de expressões matemáticas mais ou menos complexas, pelo que é de importância capital a compreensão da forma como estas são tratadas.

 

Um programa depois de escrito passa, como vimos,  por um processo de compilação antes da sua execução efectiva.  No processo de compilação são executadas, entre outras tarefas a interpretação das declarações do programa e o estabelecimento da sequência de operações a serem executadas a propósito de cada uma delas.

No caso das expressões aritméticas este processo é executado tendo em atenção duas propriedades fundamentais, a precedência e a associação.  Estas propriedades afectam a forma como os operadores são aos operadores.

  • A precedência - estabelece que os operadores de maior precedência têm os seus operandos atribuídos antes dos de menor precedência, independentemente da ordem em que surjam na expressão.  Veja a tabela de precedências e associação.

Considere os seguintes exemplos:

 

2 + 3 * 4

3 * 4 + 2

 

Em ambos os casos a expressão é avaliada em 14.   Isto acontece porque primeiro é executada a multiplicação por ter maior precedência e só depois a soma.

  • A associação - estabelece, no caso dos operadores terem a mesma precedência, a ordem pela qual os operandos serão agrupado, da esquerda para a direita ou da direita para a esquerda.  Esta propriedade é estabelecida para cada operador. Veja a tabela de precedência e associação que se segue.

Considere o seguinte exemplo:

a + b - c

 

Esta expressão será agrupada da esquerda para a direita, de acordo com as suas propriedades de associação, pelo que a ordem será primeiro a soma e só depois a subtracção.

 

São também utilizados os parêntesis curvos para a criação de expressões matemáticas, que impõem uma determinada ordem de agrupamento.

 

Considere os seguintes exemplos:

 

( 2 - 3 ) * 4

2 - ( 2 * 4)

 

No primeiro exemplo seria avaliado primeiro o parêntesis ( 2 - 3 ) e só depois seria efectuada a multiplicação.

No segundo exemplo os parêntesis seriam desnecessários já que a multiplicação tem precedência relativamente à subtracção.  No entanto, é uma boa prática que, mesmo que irrelevantes sejam utilizados os parêntesis mesmo nas expressões mais simples.

 

No caso de expressões com parêntesis encaixados, a ordem de agrupamento é do mais interior ao mais exterior, sendo aplicada a propriedade da associatividade correspondente aos operadores envolvidos.

 

Assim na seguinte expressão  1 + ( ( 3 + 1 ) / ( 8 - 4 ) - 5 )  a ordem de agrupamento será:

 

1 + ( ( 3 + 1 ) / ( 8 - 4 ) - 5 )

1 + ( 4 / ( 8 - 4 ) - 5 )

1 + (4 / 4 - 5)

1 + ( 1 - 5 )

1 + - 4

- 3

 

 

Regras de Precedência e Associação

 

Classe do operador

unários

multiplicativo

aditivo

relacionais

igualdade

AND

OR

atribuição

Operadores da classe

-    +   !

 *    /    Resto()

+   -

<   <=  >   >=

=   ¹

&&

||

=

Associatividade

direita / esquerda

Esquerda / direita

esquerda  / direita

esquerda / direita

esquerda / direita

esquerda / direita

esquerda / direita

direita / esquerda

Precedência

maior

 

menor

 

Voltaremos a este assunto a propósito das linguagens de programação.

 

 

Regras de Avaliação

 

Como foi referido anteriormente, a avaliação é um processo distinto, constituindo uma propriedade importante.  Esta refere-se à ordem pela qual o compilador avalia os operadores.  Os compiladores reorganizam as expressões desde que esta não afecte o resultado.

 

Chama-se a atenção para o facto de a divisão poder levantar alguns problemas em alguns compiladores, especialmente quando estão envolvidos operandos de tipos diferentes ou operandos negativos.

No caso dos operandos serem de tipo diferente devemos forçar a conversão entre tipos.

Relativamente aos operandos negativos, estes devem ser evitados..

 

 

Poderá rever os seus conhecimentos executando os exercícios que se apresentam:

 

  Trataremos mais aprofundadamente esta questão nas considerações relativas aos tipos de variáveis nas várias linguagens, noomeadamente no que diz respeito à possibilidade de forçar a conversão antes de serem efectuadas algumas operações.:

  • Linguagem C

  • Linguagem C++