SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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 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
 

Similar 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
 

Más 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

Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptjricardo76
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...Francisco Márcio Bezerra Oliveira
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxandrenespoli3
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosLucianoPrado15
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPaulaYaraDaasPedro
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxReinaldoMuller1
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioDomingasMariaRomao
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 

Último (20)

Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medio
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.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