SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 

Semelhante a Unidade06

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
 

Semelhante a Unidade06 (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 - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Java
JavaJava
Java
 
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
 

Mais de 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
 

Último

Atividade português 7 ano página 38 a 40
Atividade português 7 ano página 38 a 40Atividade português 7 ano página 38 a 40
Atividade português 7 ano página 38 a 40vitoriaalyce2011
 
Junho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na IgrejaJunho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na IgrejaComando Resgatai
 
A NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdf
A NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdfA NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdf
A NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdfmarcos oliveira
 
História do Brasil e Geral - Cláudio Vicentino
História do Brasil e Geral - Cláudio VicentinoHistória do Brasil e Geral - Cláudio Vicentino
História do Brasil e Geral - Cláudio VicentinoThayaneLopes10
 
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]ESCRIBA DE CRISTO
 
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docxAtividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docxSolangeWaltre
 
OFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdf
OFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdfOFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdf
OFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdfAndriaNascimento27
 
curso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdfcurso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdfLeandroTelesRocha2
 
Evangelismo e Missões Contemporânea Cristã.pdf
Evangelismo e Missões Contemporânea Cristã.pdfEvangelismo e Missões Contemporânea Cristã.pdf
Evangelismo e Missões Contemporânea Cristã.pdfPastor Robson Colaço
 
Apresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantilApresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantilMariaHelena293800
 
Apresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimentoApresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimentoPedroFerreira53928
 
Apresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao AssédioApresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao Assédioifbauab
 
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdfProjeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdfBibliotecas Infante D. Henrique
 
manual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdf
manual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdfmanual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdf
manual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdfrarakey779
 
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdfARIANAMENDES11
 
Slides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptx
Slides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptxSlides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptx
Slides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptxLuizHenriquedeAlmeid6
 
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básicoPowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básicoPereira801
 
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...IsabelPereira2010
 
Fotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anosFotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anosbiancaborges0906
 
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdfcurso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdfLeandroTelesRocha2
 

Último (20)

Atividade português 7 ano página 38 a 40
Atividade português 7 ano página 38 a 40Atividade português 7 ano página 38 a 40
Atividade português 7 ano página 38 a 40
 
Junho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na IgrejaJunho Violeta - Sugestão de Ações na Igreja
Junho Violeta - Sugestão de Ações na Igreja
 
A NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdf
A NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdfA NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdf
A NEUROPEDAGOGIA NO PROCESSO DE ENCINAGEM.pdf
 
História do Brasil e Geral - Cláudio Vicentino
História do Brasil e Geral - Cláudio VicentinoHistória do Brasil e Geral - Cláudio Vicentino
História do Brasil e Geral - Cláudio Vicentino
 
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
 
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docxAtividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
Atividades-Sobre-o-Conto-Venha-Ver-o-Por-Do-Sol.docx
 
OFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdf
OFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdfOFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdf
OFICINA - CAFETERIA DAS HABILIDADES.pdf_20240516_002101_0000.pdf
 
curso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdfcurso-de-direito-constitucional-gilmar-mendes.pdf
curso-de-direito-constitucional-gilmar-mendes.pdf
 
Evangelismo e Missões Contemporânea Cristã.pdf
Evangelismo e Missões Contemporânea Cristã.pdfEvangelismo e Missões Contemporânea Cristã.pdf
Evangelismo e Missões Contemporânea Cristã.pdf
 
Apresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantilApresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantil
 
Apresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimentoApresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimento
 
Apresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao AssédioApresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao Assédio
 
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdfProjeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
Projeto aLeR+ o Ambiente - Os animais são nossos amigos.pdf
 
manual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdf
manual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdfmanual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdf
manual-de-introduc3a7c3a3o-ao-direito-25-10-2011.pdf
 
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
 
Slides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptx
Slides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptxSlides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptx
Slides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptx
 
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básicoPowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
PowerPoint Folha de cálculo Excel 5 e 6 anos do ensino básico
 
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
DeClara n.º 76 MAIO 2024, o jornal digital do Agrupamento de Escolas Clara de...
 
Fotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anosFotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anos
 
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdfcurso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
curso-de-direito-administrativo-celso-antonio-bandeira-de-mello_compress.pdf
 

Unidade06

  • 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