Iteração – Capítulo 5 Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Integrantes: Alex Motta Carlos Nascimento Paulo Maia.

Slides:



Advertisements
Apresentações semelhantes
Programação de Computadores
Advertisements

Estruturas de Controle
UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA CIVIL
Estruturas de Repetição
Linguagem II Walmor Cardoso Godoi, M.Sc.
Elementos de Lógica Matemática
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INSTRUÇÕES DE CONTROLE – PARTE II Prof. Thiago Pereira Rique
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INSTRUÇÕES DE CONTROLE – PARTE I Prof. Thiago Pereira Rique
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Operadores Aritméticos
Casos típicos para o Enquanto-Faça
Algoritmos Escher.
THOBER CORADI DETOFENO, MSC. Aula 07
Rodrigo de Toledo (original: Claudio Esperança)
04(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Recorrências.
Lógica de Programação Módulo II
O Portal do Estudante de Computação
OO-SC (Meyer) - Cap 121 OO-SC (MEYER) Quando o contrato é quebrado: tratamento de exceções.
Linguagem de Programação I Parte III
Material Didático Proposto
PROGRAMAÇÃO I UNIDADE 4.
Estruturas de Dados Módulo 3 – Controle de Fluxo
Lógicas e Inferência para IA
Atribuição e Composição Sequencial Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Capítulo 3 Grupo:João Collier de Mendonça Lucas Carneiro.
©André Santos, 2000 Concorrência e Sincronização André Santos CIn-UFPE Concorrência.
Introdução à Programação de Computadores
ALGORITMOS.
Estrutura de Decisão e Repetição
Aula 4 – Java – Prof. Marcelo Heitor
Capítulo 5 Structures. A - Sequence E - Formula Node B - Case F - Variável Global C - For Loop G - Variável Local D - While Loop ABCD FG E.
Linguagem de Programação JAVA
Módulo I Capítulo 4: Operador de Repetição
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Atribuição e Composição Sequencial Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Capítulo 3.
Algoritmos e Estrutura de Dados I
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Introdução à Linguagem C
Algumas notas sobre a linguagem de programação C
Algoritmos e Estruturas de Dados I – Estruturas de Controle de Fluxo
Algoritmos Comandos de repetição.
JAVASCRIPT Tutorial Básico Aden Soares OBS: NÃO CONFUNDIR JAVASCRIPT COM JAVA ► O que é JavaScript? É uma linguagem de programação utilizada para.
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
Refinamento Motivação e Objetivos –Tornar especificações mais concretas (mais próximas de uma implementação) que as desenvolvidas inicialmente –Aumentar.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Fundamentos de linguagens de programação
Recursividade Profs. De Prog2 e Lab2.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Programação de Computadores - 1
Estudo de Caso: Raiz Quadrada Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 7] Equipe: Alysson Barros Cleber Ribeiro.
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel.
Introdução a Programação
Estudo de caso: Insertion Sort Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Capítulo 10.
Programação I Aula 07 Autor: Francisco Airton Professor: André L. R. Didier 1.
ALGORITMOS Profº Antonio Carlos Marcelino de Paula.
Semântica em Linguagens de Programação Semântica Denotacional
Profa. Maria Augusta Constante Puget
Fundamentos de Programação Aula 4. 2 Conteúdo Estruturas Básicas de Programação –Repetição, laço, loop ou iteração Exercícios.
UNIP UNIVERSIDADE PAULISTA Professor: Yure de Queiroz Lima
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Comandos de Repetição (While, Do..While e For)
Programação para Web I AULA 4 ESTRUTURAS DE CONTROLE.
Laço ou loop e repetição
CONDICIONAL IF Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
Programação I Aula 06 Autor: Francisco Airton Professor: André L. R. Didier 1.
ALGORITMOS Profº Antonio Carlos Marcelino de Paula 1.
1 CCO 016 FUNDAMENTOS DE PROGRAMAÇÃO Universidade Federal de Itajubá Prof. Dr. Edison Oliveira de Jesus.
Conteúdo de Laços de Repetição para os alunos do 7º ano EVL.
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel.
Módulo I Capítulo 4: Operador de Repetição
Transcrição da apresentação:

Iteração – Capítulo 5 Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Integrantes: Alex Motta Carlos Nascimento Paulo Maia

Descrição Operacional Iteração = repetição; Um comando é executado enquanto uma certa condição é válida; Estrutura: do G 0 → prog 0 ║G 1 → prog 1... ║ G n → prog n od.

Descrição Operacional “Loops” infinitos Ex : do true → skip od “Loop” infinito = abort Uma iteração finaliza quando todas as suas guardas forem falsas Pode não ocorrer em certos estados iniciais

Descrição Operacional  Ex : Do 2 | n → n := n ÷ 2 od Iterações podem ser desmembradas sem afetar seu significado: do G 0 → prog = if G 0 then prog; do G 0 → prog od fi

Descrição Operacional = if G 0 then prog; if G 0 then prog; do G 0 → prog od fi

Definição de Invariante Abstrair o número de repetições Fórmula que, se inicialmente for verdadeira, também será verdadeira a cada iteração, inclusive no final A iteração mantém a invariante e estabelece adicionalmente a negação das guardas

Invariante - Exemplo do 2 | n -> n := n ÷ 2 od Qual a invariante? pt n = ( ∃ k : N n = 2 ^ k)

Invariante - Alguns Raciocínios Formalmente: inv é um invariante de do G  prog od se w: [inv  G, inv]  prog Assumindo-se terminação: w: [inv, inv  G]  do G  prog od

Lei de Refinamento: Informalmente Exemplo: n :[ pt n, pt n  2 | n)]   do 2 | n  n := n  od

Lei de Refinamento: Informalmente Terminação tem que ser considerada Por causa disso w :[ true ^ true, true ]  skip  concluímos que w :[ true, true ^ false ]  do true -> skip od >>>>>> absurdo!

Terminação de Iterações: Variantes Variante: Exemplo: do 2 | n  n := n  od termina porque Cada repetição decrementa n e n não pode se tornar negativo >>>>> n é o variante da iteração Expressão inteira que é decrementada por cada repetição, mas nunca abaixo de um limite inferior fixo (geralmente 0).

Especificando o Decréscimo do Variante Um comando que decrementa uma variável inteira n := n - 1 Especificação n :[n = n - 1] X n :[n < n] X n :[n = N, n < N]

Especificando o Decréscimo do Variante Variáveis com subscrito 0 (variáveis iniciais) n :[ n < n 0 ] Novas leis de refinamento Lei 5.1 Fortalecimento da pós-condição Se pre[w\w 0 ]  pos’  pos, então w :[ pre, pos]  w :[ pre, pos’] Lei 5.2 Atribuição Se (w = w 0 )  x = x 0  pre  pos[w\E], então w,x:[ pre, pos]  w := E

Especificando o Decréscimo do Variante Lei 5.3 Comando skip Se (w = w 0 )  pre  pos, então w :[ pre, pos]  skip As leis anteriores ainda valem

Variáveis Iniciais e o Quadro Se uma variável x não está no quadro, então ela pode ser referenciada na pós condição tanto como x quanto como x o Lei 5.4 Contração do quadro w,x :[ pre, pos]  w :[ pre, pos[x 0 \ x] ]

Refinamento da Regra para Iteração Lei Iteração: seja inv, o invariante, qualquer fórmula; seja V, o variante, qualquer expressão inteira. Então se GG é a disjunção das guardas, w: [inv, inv Λ ¬ GG]  do ( ž i. G i  w: [inv, inv Λ G i, inv Λ (0 ≤ V < V 0 )]) od. inv e G i → não possuem variáveis iniciais. V = V[w\w 0 ].

Refinamento da Regra para Iteração Lei 5.5 – Iteração (abreviada): w: [inv, inv Λ ¬ GG]  do ( ž i. G i  w: [G i, inv Λ (0 ≤ V < V 0 )]) od. Lei 5.6 – Especificação do variante: seja inv, o invariante, qualquer fórmula; seja V, o variante, qualquer expressão inteira. Então se GG é a disjunção das guardas, w: [pre, inv, post]  w: [pre Λ inv, inv Λ post].

Lista de Verificação da Iteração Características das iterações: A invariante é verdade inicialmente O invariante e a negação da guarda são suficientes. O corpo da iteração mantém a invariante, contanto que a guarda seja verdadeira O variante é decrementado pela execução do corpo da iteração, contanto que a guarda e a invariante sejam verdadeiras O variante não pode ficar menor que zero pelo corpo da iteração, contanto que a guarda e a invariante sejam verdadeiras

Exercício de Fixação Desenvolver o seguinte programa usando cálculo de refinamento: do 2 | n  n := n  od Invariante: pt n, onde pt n = ( ∃ k : N n = 2 ^ k) Variante: n

Exercício de Fixação n : [ pt n, n = 1 ]  Lei 1.1 (Lei do Fortalecimento da pós) n : [ pt n, pt n ^ ¬ (2 | n )] Obrigação de Prova: pt n ^ ¬ (2 | n )]  n = 1  Lei 5.5 (Lei da Iteração) do 2 | n  n : [ 2|n ^ pt n, pt n ^ 0 ≤ n < n 0 ] od

Exercício de Fixação  Lei 5.6 (Lei da especificação da invariante) do 2 | n  n : [ 2|n, pt n, 0 ≤ n < n 0 ] od  Lei 5.2 (Lei da atribuição com variável inicial) n := n  2 Obrigação de Prova: ( n = n 0 ) ^ (2 | n ) ^ pt n  pt (n  2  ^ (0 ≤ n  < n ) [ n\ n  2  ]