



Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Os operadores aritméticos na linguagem de programação portugol, com ênfase na adição, subtração, multiplicação e divisão de números inteiros. O texto explica as operações aritméticas possíveis, os operadores correspondentes e como escrever expressões aritméticas válidas na linguagem. Além disso, discute a importância da precedência de operadores e como eles são aplicados em uma expressão aritmética qualquer.
O que você vai aprender
Tipologia: Notas de aula
1 / 7
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Os operadores aritméticos definem as operações aritméticas que podem ser realizadas sobre os números inteiros e reais. Para os inteiros, as operações aritméticas são a adição, subtração, multiplicação e resto. Para os números reais, as operações aritméticas são a adição, subtração, multiplicação e divisão. Nesta aula, restringiremos nossa atenção aos números inteiros apenas. Na linguagem Portugol, os operadores aritméticos correspondentes às operações definidas so- bre os inteiros são
Com os operadores acima, podemos escrever expressões aritméticas que envolvem constantes e variáveis inteiras. Por exemplo, suponha que a, b e c sejam variáveis do tipo inteiro. Então, temos que a + b + c, a − b ∗ c % 2, e − 5 + 3 ∗ 8 \ 2
são todas expressões aritméticas válidas na linguagem Portugol.
Nos exemplos acima, tivemos o cuidado de usar operandos do mesmo tipo. A razão para tal é que, por definição, cada operador aritmético atua sobre valores de um mesmo tipo e o resultado da operação deve sempre ser um valor do mesmo tipo dos operandos. Logo, não faz sentido escrevermos algo como a + 2 quando a é uma variável ou constante do tipo real, pois existe uma ambigüidade em relação ao resultado da operação. No entanto, como veremos mais adiante, podemos definir regras semânticas associadas aos operadores que nos permitem interpretar, de forma única, o resultado da operação aritmética correspondente. Tais regras nos permitirão escrever expressões aritméticas envolvendo variáveis e constantes dos tipos inteiro e real.
Qual é o valor da expressão aritmética
5 ∗ 3 % 2?
Podemos dizer que o valor da expressão é igual a 1 , se avaliarmos 5 ∗ 3 primeiro e, depois, 15 % 2, ou podemos dizer que é igual a 5 se avaliarmos 3 % 2 primeiro e, depois, 5 ∗ 1. As duas respostas são igualmente válidas. No entanto, como não podemos permitir ambigüidades em algoritmos, devemos definir regras de precedência de operadores, que são regras para definir a ordem em que os operadores aritméticos que vimos são aplicados em uma expressão aritmética qualquer.
Na linguagem Portugol, os operadores possuem prioridades associadas com eles. A opera- ção associada a um operador com prioridade p é sempre executada antes da operação associada a um operador com prioridade q sempre que p > q. Quando p = q, a operação correspondente ao operador mais à esquerda é executado. O operador de maior prioridade é o menos unário , −. Em seguida, temos os operadores ∗, \ e %. Finalmente, com a prioridade mais baixa, temos os operadores + e −, onde + e − são os operadores de adição e subtração, respectivamente. A Tabela 5.1 resume essas prioridades.
Operador Símbolo Prioridade menos unário − mais alta multiplicação, divisão inteira e resto ∗, \ e % ↑ adição e subtração +, − mais baixa
Tabela 5.1: Operadores aritméticos sobre os inteiros e suas prioridades.
Por exemplo, em a + b + c ,
a operação a + b é realizada e, em seguida, o resultado dela é adicionado ao valor de c, pois os operadores possuem a mesma prioridade e, portanto, as operações são realizadas da esquerda para a direita.
Na expressão aritmética a − b ∗ c % 2 ,
a operação b ∗ c é efetuada primeiro e, em seguida, o resto da divisão de b ∗ c por 2 é calculado. Finalmente, o resto é subtraído de a. Note que a multiplicação foi efetuada antes da divisão, pois os operadores ∗ e % possuem a mesma prioridade, mas ∗ está mais à esquerda.
Uma boa forma de se familiarizar com os operadores aritméticos e as regras de precedência é escrevendo algoritmos para escrever o resultado de expressões aritméticas. O Algoritmo 5. calcula e escreve, usando a instrução escreval, o resultado de expressões envolvendo núme- ros inteiros. A instrução escreval faz o mesmo que a instrução escreva, mas gera um “salto de linha” após a escrita. Um algoritmo mais interessante, o Algoritmo 5.2, recebe, como en- trada, três inteiros quaisquer e calcula e escreve o resultado de algumas expressões aritméticas envolvendo os inteiros lidos.
a terceira operação realizada. Logo, os operadores são aplicados na ordem −, % e ∗. Usamos a notação (a − 1 b) ∗ 3 (c % 2 2) para indicar este fato. Isto é, os operadores possuem índices que indicam a ordem em que são aplicados. Algoritmo 5.2: Algoritmo para calcular algumas expressões aritméticas com variáveis inteiras.
1 algoritmo "Expressoes aritmeticas envolvendo variaveis e constantes" 2 var 3 a , b , c : inteiro 4 inicio 5 escreva( "Entre com o valor da variavel a: " ) 6 leia( a ) 7 8 escreva( "Entre com o valor da variavel b: " ) 9 leia( b ) 10 11 escreva( "Entre com o valor da variavel c: " ) 12 leia( c ) 13 14 escreval( "O resultado da expressao a (^) *** b % c e: ", a** (^) *** b % c ) 15 16 escreval( "O resultado da expressao -a** (^) *** b % c** (^) *** 8 e: ", -a** (^) *** b % c** (^) *** 8 ) 17 18 escreval( "O resultado da expressao -a - b - c** (^) *** 3 e: ", -a - b - c** (^) *** 3 ) 19 20 fimalgoritmo**
A expressão ((2 + 3) − (1 + 2)) ∗ 3 − (3 + (3 − 2)) é bem mais complexa do que a anterior, mas podemos determinar a ordem em que os opera- dores são aplicados da mesma forma que antes. O primeiro passo é substituir as expressões dentro dos parênteses por operandos a serem descobertos. Isto é feito para os parênteses mais externos: op 1 ∗ 3 − op 2. Agora, vemos que se os valores entre parênteses fossem conhecidos, haveria apenas duas ope- rações a serem realizadas: uma multiplicação e uma adição. A multiplição possui prioridade sobre a adição e ela precisa do valor op 1 para ser realizada. Então, considere a expressão cor- respondente a op 1 : (2 + 3) − (1 + 2). Esta expressão contém outras expressões dentro de parênteses e, assim como antes, ela pode ser vista como op 3 − op 4. onde op 3 e op 4 correspondem às expressões 2 + 3 e 1 + 2, respectivamente. Para realizarmos a operação de subtração acima, precisamos dos valores op 3 e op 4. Por estar à esquerda do
operador, o valor op 3 é descoberto primeiro. Isto implica que a primeira operação realizada é a adição 2 + 3
e a próxima é a adição 1 + 2.
Em seguida, temos a subtração op 3 − op 4 :
(2 + 3) − (1 + 2).
Depois que a subtração acima for realizada, o valor op 1 se torna conhecido e, consequente- mente, a multiplicação op 1 ∗ 3 pode ser realizada, tornando-se a quarta operação realizada. O resultado desta operação é o primeiro operando disponível da subtração em op 1 ∗ 3 − op 2. Mas, esta subtração não pode ser efetuada antes do valor op 2 ser conhecido, ou seja, antes da expressão 3 + (3 − 2)
ser avaliada. Assim como fizemos antes, podemos imaginar a expressão acima tendo a forma
3 + op 5 ,
onde op 5 é o valor da expressão, 3 − 2 , entre parênteses. A adição na expressão acima precisa do valor op 5 para ser realizada. Isto significa que a subtração 3 − 2 é a quinta operação reali- zada. Depois dela, a adição 3 + op 5 é realizada, tornando-se a sexta operação realizada. Logo em seguida, o valor op 2 se torna conhecido, o que possibilita a realização da sétima e última operação, que é a subtração em op 1 ∗ 3 − op 2. Usando a notação de subscrito, temos a seguinte ordem: ((2 + 1 3) − 3 (1 + 2 2)) ∗ 4 3 − 7 (3 + 6 (3 − 5 2)).
Quando utilizamos expressões aritméticas em nossos algoritmos, necessitaremos, muito freqüentemente, armazenar o valor da expressão em uma variável. Como vimos na Aula ?? , a atribuição de um valor a uma variável pode ser realizada através da instrução de leitura leia ou do operador de atribuição <-. A instrução leia é usada apenas quando o valor a ser atribuído à variável é fornecido como entrada para o algoritmo. Como o valor que queremos atribuir à variável é resultante da avaliação de uma expressão aritmética, devemos usar o operador de atribuição.
Por exemplo, suponha que o resultado da expressão
5 ∗ % 2
deva ser atribuído a uma variável inteira de nome resultado. Então, a atribuição pode ser reali- zada da seguinte forma: resultado <- 5 ∗ % 2
Para um exemplo mais concreto do uso do operador de atribuição, considere o Algo- ritmo 5.3, que lê dois números inteiros, calcula o quadrado da soma dos dois números lidos, atribui o resultado a uma variável inteira, usando o operador <-, e escreve o valor da variável.
quadrado <- a + b ∗ a + b
Você acha que o algoritmo continuará correto? Justifique sua resposta.
quadrado <- a + b
quadrado <- quadrado ∗ quadrado Você acha que o algoritmo continuará correto? Justifique sua resposta.