5. Expressões aritméticas 5.1. Conceito de Expressão O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis e constantes numéricas se relacionam por meio de operadores aritméticos compondo uma fórmula que, uma vez avaliada, resulta num valor. Por exemplo, a fórmula de cálculo da área do triângulo da figura anterior é dada por: ÁREA = 0.5 × B × H Esta fórmula utiliza três variáveis: B e H, que contêm as dimensões do triângulo, e ÁREA, onde é guardado o valor calculado (resultado da avaliação da expressão). Há, também, uma constante (0.5) e um operador de multiplicação (×), que aparece duas vezes na expressão. O conceito de expressão aplicado à computação assume um conceito mais amplo: uma expressão é uma combinação de variáveis, constantes e operadores, e que, uma vez avaliada, resulta num valor. Uma vez que já temos os dados e as variáveis podemos então passar à criação de expressões. No entanto, para que uma expressão esteja completa são necessários operadores que possam ser aplicados a estes dados. Os operadores são basicamente os mesmos encontrados noutras linguagens de programação. Assim, existem basicamente três tipos de expressões: • Expressões Aritméticas; • Expressões Lógicas; • Expressões Literais. Cada um destes três tipos de expressões tem os seus próprios operadores. ___________________________________________ Algoritmos Carla Alves (Equiparada a Assistente do 2º Triénio) - 26 - 5.2. Operadores Operadores são elementos funcionais que actuam sobre operandos e que produzem um determinado resultado. Por exemplo, a expressão 3 + 2 relaciona dois operandos (os números 3 e 2) por meio do operador (+) que representa a operação de adição. De acordo com o número de operandos sobre os quais os operadores actuam, os operadores podem ser classificados em: - Binários, quando actuam sobre dois operandos. Exemplo: Operadores das operações aritméticas básicas (adição, subtracção, multiplicação e divisão); - Unários, quando actuam sobre um único operando. Exemplo: O sinal de (-) à frente de um número (sinal posicional matemático), cuja função é inverter o seu sinal. Outra classificação dos operadores é feita considerando-se o tipo de dado dos seus operandos e o valor resultante da sua avaliação. Segundo esta classificação, os operadores dividem-se em aritméticos, lógicos e literais. Esta divisão está directamente relacionada com o tipo de expressão onde aparecem os operadores. Casos especiais são os dos operadores relacionais, que permitem comparar pares de operandos de tipos de dados iguais, resultando sempre num valor lógico. 5.3. Expressões Aritméticas Grande parte do processamento em qualquer programa é numérica. As linguagens de programação trabalham com a aritmética um pouco do mesmo modo que nós, na escola. Os componentes básicos das expressões aritméticas são: constantes, variáveis e operadores. As expressões são classificadas de acordo com o tipo de valor resultante da sua avaliação. Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo numérico, quer seja inteiro ou real, dependendo dos operandos e operadores. Nas expressões deste tipo só é permitido o uso de operadores aritméticos e variáveis numéricas. ___________________________________________ Algoritmos Carla Alves (Equiparada a Assistente do 2º Triénio) - 27 - Os operadores aritméticos relacionados com as operações aritméticas básicas estão sumariados na tabela seguinte. Operador Tipo Operação Prioridade + * / \ ** Binário Binário Binário Binário Binário Binário Adição Subtracção Multiplicação Divisão Divisão inteira Exponenciação 4 4 3 3 3 2 + mod Unário Unário Binário Manutenção de sinal Inversão de sinal Módulo (Resto da divisão inteira) 1 1 2 A prioridade entre operadores define a ordem pela qual devem ser avaliados dentro de uma mesma expressão. Quanto menor é o número maior é a prioridade da operação. O caractere (*) é adoptado na maioria das linguagens de programação para representar a operação de multiplicação, ao invés do caractere (×), devido à possibilidade da ocorrência do mesmo no nome das variáveis. Pela mesma razão, o símbolo (**) é adoptado para representar a operação de exponenciação. Algumas linguagens de programação adoptam o símbolo (^) (circunflexo) para esta finalidade, mas é pouco frequente. As variáveis usadas em expressões aritméticas só podem ser do tipo inteiro ou real. Se todas as variáveis que aparecem numa expressão são do tipo inteiro, então o valor resultante da expressão é também do tipo inteiro. Se pelo menos uma das variáveis da expressão aritmética for do tipo real, então o valor resultante da avaliação da expressão é necessariamente do tipo real. Isto pode parecer estranho a princípio, mas este procedimento reflecte a forma como as operações são executadas pelos processadores. Por exemplo, o resultado da operação 1/5 é 0, porque os dois operadores são inteiros. Caso a expressão tivesse sido escrita como 1.0/5 então o resultado correcto seria 0.2. Seguem-se alguns exemplos de expressões aritméticas. Nos exemplos seguintes, assumiremos que: - A, B e C são variáveis do tipo inteiro; - X, Y e Z são variáveis do tipo real. Assim: 1) A + B * C - ___________________________________________ Algoritmos Carla Alves (Equiparada a Assistente do 2º Triénio) expressão de resultado inteiro - 28 - 2) A + B + Y - expressão de resultado real 3) A \ B - expressão de resultado inteiro 4) X / Y - expressão de resultado real Apesar de no terceiro exemplo ser apresentada uma expressão onde se dividem dois números inteiros e se obtém como resultado um valor inteiro o resultado da divisão entre dois números inteiros não é necessariamente inteiro. Na verdade, a operação representada no terceiro item é a divisão inteira, onde o resto da divisão é desprezado. Observe-se que as expressões somente podem ser escritas de forma linear, isto é, o sinal de divisão é uma barra inclinada. Portanto as fracções somente podem ser escritas conforme o exemplo acima (a/b). Outro ponto importante é a ordem de avaliação das expressões, as prioridades mostradas na Tabela dos operadores não é suficiente para resolver todas as situações e precisamos de apresentar algumas regras adicionais: 1. Primeiro deve-se observar a prioridade dos operadores conforme a Tabela dos operadores, ou seja, os operadores com maior prioridade (números menores) são avaliados primeiro. Caso haja empate na ordem de prioridade deve-se resolver a expressão da esquerda para a direita. 2. Os parênteses servem para mudar a ordem de prioridade de execução das operações, dando prioridade às que se encontram entre parênteses. Quando houver parênteses aninhados (parênteses dentro de parênteses) as expressões dentro dos mais internos são avaliadas primeiro. Vamos considerar alguns exemplos para mostrar como estas regras são aplicadas. Considere as seguintes variáveis: • A = 2.0 • B = 4.0 • C = 1.0 Vamos então analisar expressões com estas variáveis e os seus resultados. 1. A*B-C 2. A*(B-C) 3. B+A/C+5 4. (B+A)/(C+5) ___________________________________________ Algoritmos Carla Alves (Equiparada a Assistente do 2º Triénio) - 29 - A primeira expressão tem como resultado o valor 7.0, como era de se esperar. Na segunda expressão a ordem de avaliação é alterada pelo parênteses e primeiro é feita a subtracção e o resultado passa a ser 6.0. A primeira operação na terceira expressão é a divisão que tem maior prioridade. Neste caso o resultado final é 11.0. Na última expressão as somas são realizadas primeiro e por último a divisão, ficando o resultado igual a 1.0. Até agora só vimos expressões com constantes. Na maioria das vezes, porém, haverá expressões que combinarão variáveis e constantes. Quando houver uma variável numa expressão, o cálculo deve ser feito usando-se o valor da variável naquele momento. Como exemplo, veja os algoritmos a seguir: Comandos 1) Var A : Numérico Comentários Declaração da variável A ← 3 Atribuição de valor Escreva A * 5 Será exibido o valor 15, pois A = 3, logo 3*5 = 15 2) Var A, B : Numérico A ← 10 B ← A * 3 O valor de B é 30 (10*3) Escreva B - A + 1 Será exibido o valor 21 (30 - 10 + 1) B ← 40 Novo valor para B Escreva B - A + 1 Agora será exibido o valor 31 (40 - 10 + 1), pois o valor de B mudou 3) Var A : Numérico A ← 3 * 2 O valor de A é 6 A ← A + 1 Agora o valor de A passa a ser 7 (6, o valor anterior, mais 1) Escreva A * A Será exibido o valor 49 (7 * 7) 4) Var X : Numérico Escreva "Digite um número:" Leia X Obtenha um número qualquer do usuário Escreva X * 2 Será exibido o dobro do número digitado (qualquer que ele seja) Pelos exemplos anteriores, nota-se que podemos usar uma expressão no comando Escreva. Ela é calculada, e o seu resultado é exibido ___________________________________________ Algoritmos Carla Alves (Equiparada a Assistente do 2º Triénio) - 30 -