SlideShare a Scribd company logo
1 of 32
Download to read offline
Expressões e a declaração de
atribuição
Prof. Iális Cavalcante

Engenharia da Computação – UFC/Sobral
0. Sumário
 Introdução
 Expressões Aritméticas
 Operadores Sobrecarregados
 Conversões de Tipo
 Expressões Relacionais e Booleanas
 Avaliação Curto-Circuito
 Instruções de Atribuição
 Atribuição de Modo Misto
1. Introdução
 Expressões:
 ◦ meio fundamental de especificar computações em
   uma linguagem de programação
 Para entender a avaliação de expressões é
 necessário estar familiarizado com a ordem de
 avaliação de operadores e de operandos
 A essência das linguagens de programação
 imperativas é dada pelo papel predominante das
 instruções de atribuição, cujo objetivo é mudar
 o valor de uma variável
2. Expressões Aritméticas
 A avaliação automática de expressões
 aritméticas foi uma das principais metas
 das primeiras linguagens de programação
 Expressões aritméticas consistem de
 operadores, operandos, parênteses e
 chamadas a função
2. Expressões Aritméticas
 Questões de projeto
 ◦   Regras de precedência de operadores
 ◦   Regras de associatividade dos operadores
 ◦   Ordem de avaliação dos operandos
 ◦   Efeitos colaterais da avaliação dos operandos
 ◦   Sobrecarga de operadores
 ◦   Mesclagem de modos nas expressões
2. Expressões Aritméticas
 Operadores
 ◦ Unário
 ◦ Binário
 ◦ Ternário
2.1. Precedência e Associatividade
 Como deve ser avaliada a seguinte
 expressão: a+b*c**d**e/f ?
 Deveria ser
  ◦ ((((a+b)*c)**d)**e)/f
  ◦ a+(((b*c)**d)**(e/f))
  ◦ a+((b*(c**(d**e)))/f)
 A última opção é usada por Fortran
2.2. Ordem de avaliação dos
operadores
 As regras de precedência para avaliação de
 expressões definem a ordem na qual
 operadores adjacentes de diferentes níveis
 de precedência são avaliados
 Níveis de precedência comuns
 ◦   Parênteses
 ◦   operadores unários
 ◦   ** (se a linguagem o suporta)
 ◦   *, /
 ◦   +, -
2.3. Regras de associatividade
 Regras de associatividade para avaliação de
 expressões definem em qual ordem operadores
 adjacentes de mesma precedência são avaliados
 Regras de associatividade comuns
 ◦ Da esquerda para a direita, exceto **, o qual é da
   direita para a esquerda
 Em APL todos os operadores têm precedência
 iguais e são associativos da direita para a
 esquerda
 Regras de precedência e de associatividade
 podem ser substituídas pelo uso de parênteses
2.4. Expressões Condicionais
 Operador ternário ?
 C, C++ e Java
 ◦ Um exemplo:
    average = (count == 0)? 0 : sum/count
 if-then-else equivalente
  if (count == 0)
     average = 0
  else average = sum /count
2.5. Ordem de avaliação dos
operandos
1.       Variáveis
     •    São avaliadas buscando seus valores na memória
2.       Constantes
     •    Algumas vezes são avaliadas da mesma forma;
     •    Outras vezes podem fazer parte da instrução em
          linguagem de máquina
3.       Expressões entre parênteses
     •    Todos os operadores devem ser avaliados antes que
          seu valor possa ser usado como um operando
2.5.1. Efeitos Colaterais
 Quando uma função altera um de seus
 parâmetros ou uma variável global
 Exemplo
 ◦ Quando uma função é chamada em uma
   expressão e altera outro operando da
   expressão:
   a = 10;
   /* assume that fun changes its parameter */
   b = a + fun(a);
2.5.1. Efeitos Colaterais
  Duas soluções possíveis
1. O projetista da linguagem poderia impedir que
   a avaliação da função afetasse o valor das
   expressões
     •   Vantagem: funciona
     •   Desvantagem: inflexibilidade
2.   Declarar, na definição da linguagem, que os
     operandos devem ser avaliados em uma
     ordem particular
     •   Desvantagem: limita alguns procedimentos de
         otimização dos compiladores
3. Operadores Sobrecarregados
Usar um operador para mais do que um
propósito
Alguns são comuns
 ◦ + para int e para float
Alguns representam problemas em potencial
 ◦ Perda da capacidade de detectar erros
    Omissão de um operador
 ◦ Podem ser evitados pela introdução de novos
   símbolos
    Exemplo: div para divisão de inteiros no Pascal
3. Operadores Sobrecarregados
 C++ e Ada permitem que usuários
 definam sobrecarga de operadores
 Problemas:
 ◦ Usuários podem definir operadores sem
   significado lógico
 ◦ A capacidade de leitura pode ser prejudicada
4. Conversões de Tipo
 Uma conversão de estreitamento
 transforma um valor para um tipo que
 não pode armazenar todos os valores do
 tipo original
 ◦ float para int
 Uma conversão de alargamento
 transforma um valor para um tipo que
 pode incluir, pelo menos, aproximações de
 todos os valores do original
 ◦ int para float
4.1. Coerção para Expressões
 Uma expressão de modo misto é aquela que
 possui operandos de tipos diferentes
 Uma coerção é uma conversão de tipo implícita
 Desvantagem de coerção:
 ◦ Diminui poder do compilador na detecção de erros
 Na maioria das linguagens, todos os tipos
 numéricos são convertidos (coerced) em
 expressões, usando coerção de alargamento
 Em Ada, praticamente, não é permitida coerção
 em expressões
4.2. Conversão de Tipo Explícita
 Chamada de casting em linguagens
 baseadas em C
 Exemplos
 ◦ C: (int) angle
 ◦ Ada: Float (sum– sum)


 Note que a sintaxe em Ada é similar
 a chamada de funções
4.3. Erros em Expressões
 Causas
 ◦ Limitações inerentes à aritmética
    Divisão por zero
 ◦ Limitações da aritmética computacional
    Overflow
5. Expressões Relacionais e
Booleanas
 Expressões Relacionais
  ◦ Possui dois operandos e um operador
    relacional
  ◦ Seu valor é booleano
  ◦ Os símbolos de operadores variam bastante
    entre linguagens
     !=
     /=
     .NE.
     <>
     #
5. Expressões Relacionais e
Booleanas
 Expressões Booleanas
  ◦ Operandos são booleanos e seu resultado é
    booleano
  ◦ Exemplos de operadores

    FORTRAN 77   FORTRAN 90   C       Ada

       .AND.        and       &&      and

       .OR.          or       ||       or

       .NOT.        not       !       not
5. Expressões Relacionais e
Booleanas
 C não dispõe de um tipo booleano
 ◦ Usa o tipo int com valor 0 para falso e valores não-
   zero para verdadeiro
 Características de expressões em C
 ◦ a<b<c
 ◦ é um expressão legal
 ◦ mas o resultado não é o esperado
    Operador mais a esquerda é avaliado produzindo 0 ou 1
    O resultado da avaliação é então comparado com o terceiro
    operando (i.e., c)
6. Avaliação Curto-Circuito
 Uma expressão que tem seu resultado
 determinado sem avaliar todos os
 operandos e/ou operadores
 ◦ Exemplo: (13*a) * (b/13–1)
 ◦ Se a é zero, não existe necessidade de avaliar
   (b/13-1)
6. Avaliação Curto-Circuito
 Problema se a avaliação não for realizada
 com curto-circuito
    index = 0;
    while (index < length) && (LIST[index] != value)
          index++;
 ◦ Quando index=length, LIST [index] causará um
   problema de indexação (assumindo que LIST
   tem length -1 elementos)
6. Avaliação Curto-Circuito
 C, C++ e Java
 ◦ Usam avaliação curto-circuito para operadores
   booleanos comuns (&& e ||)
 ◦ Mas os operadores booleanos bitwise não são
   avaliados curto-circuito (& e |)
 Ada:
 ◦ O programador pode especificar (curto-circuito é
   especificado com and then e or else)
 Avaliação curto-circuito expõe efeitos
 colaterais em expressões
 ◦ (a > b) || (b++ / 3)
7. Instruções de Atribuição
 Sintaxe geral
 <target_var> <assign_operator> <expression>
 Operadores de atribuição
 ◦ = FORTRAN, BASIC, PL/I, C, C++, Java
 ◦ := ALGOLs, Pascal, Ada
 = pode ser inadequado quando é
 sobrecarregado para o operador
 relacional de igualdade
7.1. Alvos Condicionais
 Alvos condicionais (C, C++ e Java)
  (flag)? total : subtotal = 0
 Que é equivalente a
  if (flag)
     total = 0
  else
     subtotal = 0
 Em Algol é possível fazer:
  a := if b <> 0 then a/b else 0;
7.2. Operadores Compostos
 É um método abreviado de especificar
 uma forma de atribuição
 Introduzido em ALGOL; adotado por C
 Exemplo
  a=a+b
 É escrito como
  a += b
7.3. Operadores Unários
 Linguagens baseadas em C combinam
 operações de incremento e de
 decremento com atribuição
 Exemplos
   sum = ++count (count incrementado, adicionado a sum)
   sum = count++ (adicionado a sum, count incrementado)
   count++ (count incrementado)
   -count++ (count incrementado então negado)
7.4. A atribuição como uma
expressão
 Em C, C++ e Java, a instrução de
 atribuição produz um resultado, que é o
 mesmo valor atribuído ao alvo
 Um exemplo:
   while ((ch = getchar())!= EOF){…}


ch = getchar() é obtido; o resultado
  (atribuído a ch) é usado como um valor
  condicional na instrução while
8. Atribuição de Modo Misto
 Instruções de atribuição podem ser de modo
 misto, por exemplo
   int a, b;
   float c;
   c = a / b;
 Em Pascal, variáveis inteiras podem ser
 atribuídas a variáveis reais, mas variáveis reais
 não podem ser atribuídas a variáveis inteiras
 Em Java, apenas conversão de alargamento são
 permitidas
9. Resumo
 Expressões
 Precedência e associatividade de
 operadores
 Sobrecarga de operadores
 Expressões de modo misto
 Várias formas de atribuição

More Related Content

What's hot

Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem cvingue
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem cJefferson Bessa
 
Introdução ao c++
Introdução ao c++Introdução ao c++
Introdução ao c++Jonas Silva
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresAnderson Favaro
 
Aula 9 propriedadedas linguagensregulares
Aula 9   propriedadedas linguagensregularesAula 9   propriedadedas linguagensregulares
Aula 9 propriedadedas linguagensregulareswab030
 
5. introducao a linguagem c
5. introducao a linguagem c5. introducao a linguagem c
5. introducao a linguagem cEugenio Caetano
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativoTony Alexander Hild
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem csergiocrespo
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalGustavo Coutinho
 

What's hot (19)

Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
Compiladores 7
Compiladores 7Compiladores 7
Compiladores 7
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
 
Introdução ao c++
Introdução ao c++Introdução ao c++
Introdução ao c++
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
Aula 9 propriedadedas linguagensregulares
Aula 9   propriedadedas linguagensregularesAula 9   propriedadedas linguagensregulares
Aula 9 propriedadedas linguagensregulares
 
5. introducao a linguagem c
5. introducao a linguagem c5. introducao a linguagem c
5. introducao a linguagem c
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 

Similar to Expressões e atribuições

Curso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressõesCurso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressõesDaniel Araújo
 
Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Elvis Araújo
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxMarceloRosenbrock1
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...Fabio Souza
 
Introdução+à+linguagem+c
Introdução+à+linguagem+cIntrodução+à+linguagem+c
Introdução+à+linguagem+cThiago Freitas
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoDenis L Presciliano
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoDenis L Presciliano
 
Java 03 Tipos Dados Operadores
Java 03 Tipos Dados OperadoresJava 03 Tipos Dados Operadores
Java 03 Tipos Dados OperadoresRegis Magalhães
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 
Google android p/ Noobs - SUPER 2014 - UPE
Google android p/ Noobs - SUPER 2014 - UPEGoogle android p/ Noobs - SUPER 2014 - UPE
Google android p/ Noobs - SUPER 2014 - UPELevi Saturnino
 

Similar to Expressões e atribuições (20)

Operadores aritméticos
Operadores aritméticosOperadores aritméticos
Operadores aritméticos
 
Curso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressõesCurso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressões
 
Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Introdução+à+linguagem+c
Introdução+à+linguagem+cIntrodução+à+linguagem+c
Introdução+à+linguagem+c
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Java 03 Tipos Dados Operadores
Java 03 Tipos Dados OperadoresJava 03 Tipos Dados Operadores
Java 03 Tipos Dados Operadores
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Cap 2
Cap 2Cap 2
Cap 2
 
Cap 2
Cap 2Cap 2
Cap 2
 
Java
JavaJava
Java
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Google android p/ Noobs - SUPER 2014 - UPE
Google android p/ Noobs - SUPER 2014 - UPEGoogle android p/ Noobs - SUPER 2014 - UPE
Google android p/ Noobs - SUPER 2014 - UPE
 
02 controle de fluxo
02   controle de fluxo02   controle de fluxo
02 controle de fluxo
 

More from Ialis Cavalcante (15)

Assembleia com os Discentes - SACEC
Assembleia com os Discentes - SACECAssembleia com os Discentes - SACEC
Assembleia com os Discentes - SACEC
 
Minicurso Ercemapi 2011
Minicurso Ercemapi 2011Minicurso Ercemapi 2011
Minicurso Ercemapi 2011
 
Unidade7 1
Unidade7 1Unidade7 1
Unidade7 1
 
Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Introducao ao greenfoot
Introducao ao greenfootIntroducao ao greenfoot
Introducao ao greenfoot
 
Dinamicas
DinamicasDinamicas
Dinamicas
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
Unidade05
Unidade05Unidade05
Unidade05
 
Unidade04
Unidade04Unidade04
Unidade04
 
Unidade03
Unidade03Unidade03
Unidade03
 
Unidade02
Unidade02Unidade02
Unidade02
 
Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009
 
CCT 23Maio2009 Sobral
CCT 23Maio2009 SobralCCT 23Maio2009 Sobral
CCT 23Maio2009 Sobral
 
Introducao ao LaTeX
Introducao ao LaTeXIntroducao ao LaTeX
Introducao ao LaTeX
 

Recently uploaded

ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresLilianPiola
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdfJorge Andrade
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasCasa Ciências
 

Recently uploaded (20)

ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de Partículas
 

Expressões e atribuições

  • 1. Expressões e a declaração de atribuição Prof. Iális Cavalcante Engenharia da Computação – UFC/Sobral
  • 2. 0. Sumário Introdução Expressões Aritméticas Operadores Sobrecarregados Conversões de Tipo Expressões Relacionais e Booleanas Avaliação Curto-Circuito Instruções de Atribuição Atribuição de Modo Misto
  • 3. 1. Introdução Expressões: ◦ meio fundamental de especificar computações em uma linguagem de programação Para entender a avaliação de expressões é necessário estar familiarizado com a ordem de avaliação de operadores e de operandos A essência das linguagens de programação imperativas é dada pelo papel predominante das instruções de atribuição, cujo objetivo é mudar o valor de uma variável
  • 4. 2. Expressões Aritméticas A avaliação automática de expressões aritméticas foi uma das principais metas das primeiras linguagens de programação Expressões aritméticas consistem de operadores, operandos, parênteses e chamadas a função
  • 5. 2. Expressões Aritméticas Questões de projeto ◦ Regras de precedência de operadores ◦ Regras de associatividade dos operadores ◦ Ordem de avaliação dos operandos ◦ Efeitos colaterais da avaliação dos operandos ◦ Sobrecarga de operadores ◦ Mesclagem de modos nas expressões
  • 6. 2. Expressões Aritméticas Operadores ◦ Unário ◦ Binário ◦ Ternário
  • 7. 2.1. Precedência e Associatividade Como deve ser avaliada a seguinte expressão: a+b*c**d**e/f ? Deveria ser ◦ ((((a+b)*c)**d)**e)/f ◦ a+(((b*c)**d)**(e/f)) ◦ a+((b*(c**(d**e)))/f) A última opção é usada por Fortran
  • 8. 2.2. Ordem de avaliação dos operadores As regras de precedência para avaliação de expressões definem a ordem na qual operadores adjacentes de diferentes níveis de precedência são avaliados Níveis de precedência comuns ◦ Parênteses ◦ operadores unários ◦ ** (se a linguagem o suporta) ◦ *, / ◦ +, -
  • 9. 2.3. Regras de associatividade Regras de associatividade para avaliação de expressões definem em qual ordem operadores adjacentes de mesma precedência são avaliados Regras de associatividade comuns ◦ Da esquerda para a direita, exceto **, o qual é da direita para a esquerda Em APL todos os operadores têm precedência iguais e são associativos da direita para a esquerda Regras de precedência e de associatividade podem ser substituídas pelo uso de parênteses
  • 10. 2.4. Expressões Condicionais Operador ternário ? C, C++ e Java ◦ Um exemplo: average = (count == 0)? 0 : sum/count if-then-else equivalente if (count == 0) average = 0 else average = sum /count
  • 11. 2.5. Ordem de avaliação dos operandos 1. Variáveis • São avaliadas buscando seus valores na memória 2. Constantes • Algumas vezes são avaliadas da mesma forma; • Outras vezes podem fazer parte da instrução em linguagem de máquina 3. Expressões entre parênteses • Todos os operadores devem ser avaliados antes que seu valor possa ser usado como um operando
  • 12. 2.5.1. Efeitos Colaterais Quando uma função altera um de seus parâmetros ou uma variável global Exemplo ◦ Quando uma função é chamada em uma expressão e altera outro operando da expressão: a = 10; /* assume that fun changes its parameter */ b = a + fun(a);
  • 13. 2.5.1. Efeitos Colaterais Duas soluções possíveis 1. O projetista da linguagem poderia impedir que a avaliação da função afetasse o valor das expressões • Vantagem: funciona • Desvantagem: inflexibilidade 2. Declarar, na definição da linguagem, que os operandos devem ser avaliados em uma ordem particular • Desvantagem: limita alguns procedimentos de otimização dos compiladores
  • 14. 3. Operadores Sobrecarregados Usar um operador para mais do que um propósito Alguns são comuns ◦ + para int e para float Alguns representam problemas em potencial ◦ Perda da capacidade de detectar erros Omissão de um operador ◦ Podem ser evitados pela introdução de novos símbolos Exemplo: div para divisão de inteiros no Pascal
  • 15. 3. Operadores Sobrecarregados C++ e Ada permitem que usuários definam sobrecarga de operadores Problemas: ◦ Usuários podem definir operadores sem significado lógico ◦ A capacidade de leitura pode ser prejudicada
  • 16. 4. Conversões de Tipo Uma conversão de estreitamento transforma um valor para um tipo que não pode armazenar todos os valores do tipo original ◦ float para int Uma conversão de alargamento transforma um valor para um tipo que pode incluir, pelo menos, aproximações de todos os valores do original ◦ int para float
  • 17. 4.1. Coerção para Expressões Uma expressão de modo misto é aquela que possui operandos de tipos diferentes Uma coerção é uma conversão de tipo implícita Desvantagem de coerção: ◦ Diminui poder do compilador na detecção de erros Na maioria das linguagens, todos os tipos numéricos são convertidos (coerced) em expressões, usando coerção de alargamento Em Ada, praticamente, não é permitida coerção em expressões
  • 18. 4.2. Conversão de Tipo Explícita Chamada de casting em linguagens baseadas em C Exemplos ◦ C: (int) angle ◦ Ada: Float (sum– sum) Note que a sintaxe em Ada é similar a chamada de funções
  • 19. 4.3. Erros em Expressões Causas ◦ Limitações inerentes à aritmética Divisão por zero ◦ Limitações da aritmética computacional Overflow
  • 20. 5. Expressões Relacionais e Booleanas Expressões Relacionais ◦ Possui dois operandos e um operador relacional ◦ Seu valor é booleano ◦ Os símbolos de operadores variam bastante entre linguagens != /= .NE. <> #
  • 21. 5. Expressões Relacionais e Booleanas Expressões Booleanas ◦ Operandos são booleanos e seu resultado é booleano ◦ Exemplos de operadores FORTRAN 77 FORTRAN 90 C Ada .AND. and && and .OR. or || or .NOT. not ! not
  • 22. 5. Expressões Relacionais e Booleanas C não dispõe de um tipo booleano ◦ Usa o tipo int com valor 0 para falso e valores não- zero para verdadeiro Características de expressões em C ◦ a<b<c ◦ é um expressão legal ◦ mas o resultado não é o esperado Operador mais a esquerda é avaliado produzindo 0 ou 1 O resultado da avaliação é então comparado com o terceiro operando (i.e., c)
  • 23. 6. Avaliação Curto-Circuito Uma expressão que tem seu resultado determinado sem avaliar todos os operandos e/ou operadores ◦ Exemplo: (13*a) * (b/13–1) ◦ Se a é zero, não existe necessidade de avaliar (b/13-1)
  • 24. 6. Avaliação Curto-Circuito Problema se a avaliação não for realizada com curto-circuito index = 0; while (index < length) && (LIST[index] != value) index++; ◦ Quando index=length, LIST [index] causará um problema de indexação (assumindo que LIST tem length -1 elementos)
  • 25. 6. Avaliação Curto-Circuito C, C++ e Java ◦ Usam avaliação curto-circuito para operadores booleanos comuns (&& e ||) ◦ Mas os operadores booleanos bitwise não são avaliados curto-circuito (& e |) Ada: ◦ O programador pode especificar (curto-circuito é especificado com and then e or else) Avaliação curto-circuito expõe efeitos colaterais em expressões ◦ (a > b) || (b++ / 3)
  • 26. 7. Instruções de Atribuição Sintaxe geral <target_var> <assign_operator> <expression> Operadores de atribuição ◦ = FORTRAN, BASIC, PL/I, C, C++, Java ◦ := ALGOLs, Pascal, Ada = pode ser inadequado quando é sobrecarregado para o operador relacional de igualdade
  • 27. 7.1. Alvos Condicionais Alvos condicionais (C, C++ e Java) (flag)? total : subtotal = 0 Que é equivalente a if (flag) total = 0 else subtotal = 0 Em Algol é possível fazer: a := if b <> 0 then a/b else 0;
  • 28. 7.2. Operadores Compostos É um método abreviado de especificar uma forma de atribuição Introduzido em ALGOL; adotado por C Exemplo a=a+b É escrito como a += b
  • 29. 7.3. Operadores Unários Linguagens baseadas em C combinam operações de incremento e de decremento com atribuição Exemplos sum = ++count (count incrementado, adicionado a sum) sum = count++ (adicionado a sum, count incrementado) count++ (count incrementado) -count++ (count incrementado então negado)
  • 30. 7.4. A atribuição como uma expressão Em C, C++ e Java, a instrução de atribuição produz um resultado, que é o mesmo valor atribuído ao alvo Um exemplo: while ((ch = getchar())!= EOF){…} ch = getchar() é obtido; o resultado (atribuído a ch) é usado como um valor condicional na instrução while
  • 31. 8. Atribuição de Modo Misto Instruções de atribuição podem ser de modo misto, por exemplo int a, b; float c; c = a / b; Em Pascal, variáveis inteiras podem ser atribuídas a variáveis reais, mas variáveis reais não podem ser atribuídas a variáveis inteiras Em Java, apenas conversão de alargamento são permitidas
  • 32. 9. Resumo Expressões Precedência e associatividade de operadores Sobrecarga de operadores Expressões de modo misto Várias formas de atribuição