Baixe o app para aproveitar ainda mais
Prévia do material em texto
N575 - Algoritmos e Programação de Computadores Modelo Algorítmico - Operações Aritméticas e Lógicas Prof. Raphael Torres Santos Carvalho N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 1 Roteiro Objetivo Expressões Aritméticas Operadores Aritméticos Expressões Lógicas e Relacionais Operadores Relacionais Operadores Lógicos Operadores bit-a-bit N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 2 Objetivo Identificar os conceitos básicos para a construção de algoritmos. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 3 Relembrando... Vimos que nada “entra ou sai” do computador sem passar pela memória principal Vimos que algoritmos manipulam dados, sejam eles de entrada, parte do processamento ou dados de saída Esses dados são armazenados na memória principal Para acessarmos os dados na memória fazemos uso do conceito de variável Uma VARIÁVEL é um espaço em memória Possui um NOME e um TIPO Seu CONTEÚDO pode variar ao longo do tempo (execução do programa) o Embora seu valor possa mudar ao longo do tempo, ela só pode armazenar um valor a cada instante N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 4 Relembrando... Variável: identificador, tipo e conteúdo O IDENTIFICADOR uma abstração do endereço => é mais fácil usarmos um nome para nos referirmos a uma variável do que seu endereço (numérico) O TIPO informa ao tradutor da linguagem quanto de espaço deve ser reservado para a variável. Em Linguagem C temos os tipos int, char, float e double. O CONTEÚDO é o valor de dado armazenado => pode ser alterado (lido ou escrito) durante o processamento N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 5 Operador atribuição Atribuição É a operação mais simples do C, e consiste em atribuir um valor constante ou valor de uma expressão a uma variável. Sintaxe: variável = expressão; Observações: Não confundir este operador com o sinal aritmético de igualdade. Reparar qual o tipo de variável que vai receber a atribuição. O que está do lado direito do operador de atribuição deve ser do mesmo tipo do que está do lado esquerdo. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 6 Expressões Expressões combinam variáveis, operadores e constantes para produzir um resultado Variáveis representam posições de memória onde estão dados que serão processados. Constantes são símbolos usados para representar dados. Operadores são usados para combinar as variáveis e constantes fornecendo um valor como resposta. Expressões Será muito comum o uso de expressões (fórmulas) aritméticas e lógicas, uma vez que na sua maioria todo trabalho computacional está relacionado e envolve a utilização de cálculos. Estas expressões são definidas pelo relacionamento existente entre variáveis e constantes numéricas através de operadores específicos. Exemplos: Média = (1* Media_NP1 + 2* Media_NP2) / 2 4%3 + 5 A > B N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 8 Expressões Aritméticas Uma expressão aritmética é aquela cujos operadores são aritméticos (+, - , *, /, ... ) e cujos operandos são constantes e variáveis do tipo numérico (inteiro e/ou real). Exemplo: ¼ - resultado 0.25 (2+4)/(3+7) – resultado 0.6 10%3 – resultado 1 N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 9 Operadores Aritméticos Operadores aritméticos são o conjunto de símbolos que representam as operações básicas da matemática. Estas operações guardam entre si uma hierarquia, que determina em que ordem devem ser resolvidas em uma expressão aritméticas. As expressões que têm prioridade maior devem ser resolvidas primeiramente. Para as operações de mesma prioridade, primeiro resolvemos as operações mais à esquerda e depois as mais à direita da expressão. Para alterar a prioridade das operações, utilizamos parênteses. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 10 Operadores Aritméticos Em nossos algoritmos os operadores aritméticos são representados pelos símbolos a seguir. O operador / (divisão) quando aplicado a variáveis inteiras, nos fornece o resultado da divisão inteira; quando aplicado a variáveis em ponto flutuante nos fornece o resultado da divisão "real". N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 11 Operador Ação + Soma (inteira e ponto flutuante) - Subtração ou Troca de sinal (inteira e ponto flutuante) * Multiplicação (inteira e ponto flutuante) / Divisão (inteira e ponto flutuante) % Resto de divisão (de inteiros) ++ Incremento (inteiro e ponto flutuante) -- Decremento (inteiro e ponto flutuante) P reced ên cia Operadores Aritméticos Operadores Incrementais/Descrementais em expressões Quando um operador de decremento (ou incremento) precede seu operando, o C executa a operação de decremento (ou incremento) antes de usar o valor do operando. Se o operador estiver após seu operando, o C usará o valor do operando, antes de decrementá-lo (ou incrementá-lo). Exemplos: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 12 char x, y; x = 10; y = ++x; printf("x = %d, y = %d\n",x, y); x = 10; y = x++; printf("x = %d, y = %d\n",x, y); char a, b, c, i = 3; a = i++; b = ++i; c = --i; printf("a = %d, ", a); printf("b = %d, ", b); printf("c = %d\n", c); Operadores Aritméticos Exemplo: int a = 17, b = 3; int x, y; float z = 17. , z1, z2; a++; x = a / b; y = a % b; z1 = z / b; z2 = a/b; Quais os valores das variáveis x, y, z1 e z2 após a execução deste trecho de programa? N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 13 Expressão Lógicas e Relacionais Uma expressão lógica é aquela cujo resultado é VERDADEIRO ou FALSO, 1 ou 0, ligado ou desligado. Nestas expressões estão envolvidas comparações, que são feitas com o uso de operadores relacionais, e a formação de novas proposições usando operadores lógicos. A idéia de verdadeiro e falso é a base dos conceitos dos operadores rela-cionais e lógicos. Em C, qualquer valor inteiro pode assumir um valor lógico. Em C, VERDADEIRO é qualquer valor diferente de zero. Zero é FALSO N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 14 Operadores Relacionais São operadores binários (demesma prioridade) que somente retornam os valores lógicos V ou F. Observações: Os símbolos '≥' , '≤' , '≠' não são operadores e sim caracteres ASCII. Não confundir o operador de atribuição = com o operador relacional ==. São operadores binários e sempre enxergarão os operandos como sendo variáveis numéricas. O resultado de uma operação relacional sempre será um valor lógico. Operador Comparação > Maior que < Menor que >= Maior ou igual <= Menor ou igual == Igual != Diferente Operações Relacionais Operando == operando Retorna verdadeiro quando os operandos forem iguais. Exemplo: Operando != operando Retorna verdadeiro quando os operandos forem diferentes. Exemplo: Operações Relacionais Operando >= operando Retorna verdadeiro quando o operando da esquerda tiver valor maior ou igual que o operando da direita. Exemplo: Operando <= operando Retorna verdadeiro quando o operando da esquerda tiver valor menor ou igual que o operando da direita. Exemplo: Operações Relacionais Operando > operando Retorna verdadeiro quando o operando da esquerda tiver valor maior que o operando da direita. Exemplo: Operando < operando Retorna verdadeiro quando o operando da esquerda tiver valor menor que o operando da direita. Exemplo: Operações Relacionais Expressão >= expressão Retorna verdadeiro quando a expressão da esquerda tiver valor maior ou igual que a expressão da direita. Exemplo: Expressão <= expressão Retorna verdadeiro quando a expressão da esquerda tiver valor menor ou igual que a expressão da direita. Exemplo: Operadores Lógicos São usados para combinar expressões relacionais e lógicas. Também retornam como resultado valores lógicos V ou F. Observações: Os operadores lógicos sempre enxergarão o(s) operando(s) como sendo variáveis lógicas. O resultado de uma operação lógica sempre será um valor lógico. Operador Tipo Operação ! Unário Operador unário de negação || Binário Operador que resulta VERDADEIRO quando um dos seus operandos lógicos for verdadeiro && Binário Operador que resulta VERDADEIRO somente se seus dois operandos lógicos forem verdadeiros. Operações Lógicas Sejam a, b e c três variáveis lógicas (podem assumir verdadeiro ou falso). int a, b, c; Sejam também as seguintes diretivas de compilação definidas: #define TRUE 1 #define FALSE 0 Operação NOT (negação) Sintaxe: o variável = !operando; Exemplo: o a = FALSE; o b = !a; N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 21 a !a FALSE TRUE TRUE FALSE Operações Lógicas Operação AND Sintaxe: o variável = operando1 && operando2; Exemplo: o a = FALSE; b= TRUE; o c = a && b; Operação OR Sintaxe: o variável = operando1 || operando2; Exemplo: o a = FALSE; b= TRUE; o c = a || b; N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 22 a b a && b FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE a b a || b FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE Operadores bit-a-bit Sejam p e q dois bits de dois inteiros distintos, então os operações bit-a-bit podem ser resumidas segundo a tabela a baixo: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 23 Operação Operador Precedência ~ Complemento (inversão dos bits) maior & Condição E (AND) ^ Condição OU EXCLUSIVO (XOR) | Condição OU (OR) << Deslocamento Lógico a Esquerda >> Deslocamento Lógico a Direita menor p q p & q p | q ~p p ^ q 0 0 0 0 1 0 0 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 0 0 Operadores bit-a-bit Deslocamentos Lógicos à Esquerda ( << ) e à Direita ( >> ) N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 24 0x17 << 1 → 0x2E 0x17 >> 1 → 0x0B Operadores bit-a-bit Exemplos: Sejam a = 0x08 e b = 0x48 dois números inteiros: ~a ~(0000 1000) 1111 0111 0xF7 a & 0xF0 (0000 1000) & (1111 0000) 0000 0000 0x00 a ^ b (0000 1000) ^ (0100 1000) 0100 0000 0x40 0x0F | b (0000 1111) | (0100 1000) 0100 1111 0x4F a >> 0x02 (00 0000 10) 00 0000 0010 0x02 b << 0x01 0 (100 1000 0) 1001 0000 0x90 N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 25 Operadores bit-a-bit Uma das principais aplicações dos operadores bit-a-bit é realizar certas operações aritméticas. O que acontece quando você toma um número binário e multiplica por dois? Vamos fazer pelo caminho mais longo para ver exatamente o que se passa. Primeiro, escolha um número binário aleatório, digamos 0010 1101. Em seguida, escreva-o como uma soma de potências de dois, como vimos no início deste curso: 0010 1101 = (1 * 25) + (1 * 23) + (1 * 22) + (1 * 20) Eliminar os casos em que o bit é 0, porque as multiplicações por 0 não afetam a soma. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 26 Operadores bit-a-bit Agora, suponha que nós tomamos essa soma de produtos e multipliquemos por dois. O que temos, mais uma vez na notação expandida: 0010 1101 * 2 = 2(1 * 25) + 2(1 * 23) + 2(1 * 22) + 2(1 * 20) 0010 1101 * 2 = (1 * 26) + (1 * 24) + (1 * 23) + (1 * 21) Observe o que o nosso resultado é: uma vez que o número original foi escrito como uma soma de potências de dois vezes os bits do número - tudo o que acontece é que os expoentes nos 2s aumentam em um cada. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 27 Operadores bit-a-bit Veja onde eu quero chegar! O resultado da multiplicação é ainda uma soma de potências de dois, e como tal, pode ser diretamente reduzido a um número binário. 0010 1101 * 2 = (1 * 26) + (1 * 24) + (1 * 23) + (1 * 21) = 0101 1010 Observe qualquer coisa estranha sobre o resultado? É isso mesmo - é o número original, deslocado para a esquerda em uma posição. Isto é porque um deslocamento para a esquerda aumenta o peso em cada bit em um, o qual é o mesmo que aumentar os expoentes sobre os 2s de forma expandida, que é o mesmo que multiplicar por dois. Assim, você pode multiplicar por qualquer potência de dois, deslocando para a esquerda o mesmo número de posições. Por exemplo, se você quisesse multiplicar um número por 16, que é 24, você poderia simplesmente deslocá-lo para esquerda quatro posições. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 28 Operadores bit-a-bit Os seguintes pares de afirmações são todos equivalentes uns aos outros: x = y * 8; /* = 23 */ x = y << 3; x = y * 64; /* = 26 */ x = y << 6; x = y * 32768; /* = 215 */ x = y << 15; Você deve estarse perguntando, se deslocamento para a esquerda é equivalente à multiplicação por dois, o deslocamento a direita é equivalente à divisão por 2? A resposta é SIM! O deslocamento simplesmente diminui o peso de cada bit, o que significa que os expoentes nos 2s diminuem todos em um. Note que esta é apenas uma divisão inteira, você não pode obter um valor fracionário ou um resto utilizando este artifício N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 29 Operadores bit-a-bit Os seguintes pares de afirmações são todos equivalentes uns aos outros: x = y / 4; /* = 22 */ x = y >> 2; x = y / 32; /* = 25 */ x = y >> 5; N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 30 Dúvidas? N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 31
Compartilhar