Aula 7 Instrução de iteração while. 2003/2004 Introdução à Programação 2 passo [G][G] [¬G][¬G] Início da actividade Fim da actividade Actividade Transição.

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Estruturas de Repetição
Linguagem II Walmor Cardoso Godoi, M.Sc.
Capitulo 6 Iterações.
Capítulo 1 – Conceitos Básicos 1 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados.
Recursividade Prof. Rosana Palazon.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INSTRUÇÕES DE CONTROLE – PARTE I Prof. Thiago Pereira Rique
Algoritmos e Programação Linguagens de Programação Teoria Aula 7 (19/05) Universidade Federal do Vale do São.
Introdução à Computação - Jorge Macêdo
Automato de Pilha.
Pascal comandos iterativos: FOR WHILE REPEAT Matrizes (tabelas)
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
Laboratório de Programação de Computadores II Aula 1 2S/2009.
Cronograma de SCII - 2o. Ano de STPD - Profs. Fátima e Paulo
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
Matrizes clássicas e vectores em C++
1 Aula 4 Ponteiros. 2003/2004 Programação Orientada para Objectos 2 Instâncias de um programa C++ int i = 10; Nome: i Tipo: int Valor: 10.
Aula 11 Tipos Abstractos de Dados II. 2003/2004 Introdução à Programação 2 Estrutura global do programa #include using namespace std; int mdc(int const.
Aula 10 Tipos Abstractos de Dados I. 2003/2004 Introdução à Programação 2 Flashback Lembram-se da Aula 4?
Modularização: funções e procedimentos (continuação)
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
Aula 8 Polimorfismo.
Metodologia de Dijkstra para desenvolvimento de ciclos
Programação Baseada em Objectos Desenho de TAD
Aula 6 Instruções de selecção e instruções condicionais.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
1 Aula 6 Classes que reservam recursos externos. 2003/2004 Programação Orientada para Objectos 2 PilhaDeInt : interface /** Representa pilhas de int.
Sobrecarga de nomes de rotinas Rotinas recursivas Invocação de rotinas
Aula 13 Tipos Abstractos de Dados IV. 2003/2004 Introdução à Programação 2 Estrutura global do programa (I) Construtores Inspectores.
Aula 9 Fases do desenvolvimento de software UML Diagramas de classes
2002/2003 Programação Orientada para Objectos 1 Aula 5 Memória livre e instâncias dinâmicas Criação de instâncias dinâmicas Destruição de instâncias dinâmicas.
Aula 10 UML (cont.).
2002/2003 Programação Orientada para Objectos 1 Aula 10 UML (continuação da aula 9) Diagramas de sequência Diagramas de actividade Desenvolvimento de um.
2002/2003 Programação Orientada para Objectos 1 Aula 4 Memória, unidade básica de memória e conceito de endereço Ponteiros Relação de ponteiros com matrizes.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Aula 2 Listas e iteradores.
O Portal do Estudante de Computação
Análise Semântica e Representação Intermédia
Introdução a Computação e Cálculo Numérico
Unidade I: “Dê um mergulho rápido”
Aula prática 4 Laços Monitoria de Introdução à Programação
Introdução à Programação Estruturas de Repetição
Material Didático Proposto
© 2003 Introdução à programaçãoComputadores e programação I Execução de instruções Aula nº4.
Estruturas de Repetição
© 2003 Introdução à programaçãoComputadores e programação I Linguagens de programação Introdução ao C (continuação)
PROGRAMAÇÃO I UNIDADE 4.
Programação II Estruturas de Dados Aula 02 - continuação
Métodos de Ordenação e Busca
Introdução à Programação de Computadores
JAVA Orientação a Objetos Sun Campus Ambassador Aula 5.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
INTRODUÇÃO.
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Aula 2 Igor Ebrahim (ies) if669 - Introdução à Programação Monitoria de IP.
Programação I Aula 5 (Instruções de Repetição) Prof. Gilberto Irajá Müller Última atualização 24/3/2009.
Uso de parâmetros na linha de comando. Parâmetros da função main:
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 07) Prof. Alessandro Bernardo.
2002/2003 Programação Orientada para Objectos 1 Aula 2 Noção de lista e de iterador Operações com listas e iteradores Classes embutidas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo VII Variáveis Indexadas Numéricas.
Estruturas de Controlo Repetitivas
Ambiente de desenvolvimento O ambiente Turbo C Editor Sistema de ajuda Execução passo-a-passo e watch Ficheiros *.bak.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 06) Prof. Alessandro Bernardo.
Ciclos for, while e do...while
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Aula Prática 2 Monitoria IP/CC (~if669).
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 09) Prof. Alessandro Bernardo.
Estruturas de repetição. While executa alguma coisa 0 ou mais vezes.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 08) Prof. Alessandro Bernardo.
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
Transcrição da apresentação:

Aula 7 Instrução de iteração while

2003/2004 Introdução à Programação 2 passo [G][G] [¬G][¬G] Início da actividade Fim da actividade Actividade Transição Entroncamento Ramificação Instrução while while( G ) passo Guarda

2003/2004 Introdução à Programação 3 potênciaDe() double potênciaDe(double const x, int const n) { int i = 1; double potência = x; while(i <= n) { potência *= x; ++i; } return potência; }

2003/2004 Introdução à Programação 4 potênciaDe(2.0, 3) xnipotênciai <= n while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 5 potênciaDe(2.0, 3) xnipotênciai <= n V 3 while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 6 potênciaDe(2.0, 3) xnipotênciai <= n V 34.0 while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 7 potênciaDe(2.0, 3) xnipotênciai <= n V while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 8 potênciaDe(2.0, 3) xnipotênciai <= n V 324.0V 2.03 while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 9 potênciaDe(2.0, 3) xnipotênciai <= n V 324.0V while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 10 potênciaDe(2.0, 3) xnipotênciai <= n V 324.0V while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 11 potênciaDe(2.0, 3) xnipotênciai <= n V 324.0V V 2.03 while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 12 potênciaDe(2.0, 3) xnipotênciai <= n V 324.0V V while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 13 potênciaDe(2.0, 3) xnipotênciai <= n V 324.0V V while(i <= n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 14 potênciaDe(2.0, 3) xnipotênciai <= n V 324.0V V F Errado! A guarda i n está errada.

2003/2004 Introdução à Programação 15 potênciaDe() double potênciaDe(double const x, int const n) { int i = 1; double potência = x; while(i < n) { potência *= x; ++i; } return potência; }

2003/2004 Introdução à Programação 16 potênciaDe(5.0, 0) xnipotênciai < n while(i < n) { potência *= x; ++i; }

2003/2004 Introdução à Programação 17 potênciaDe(5.0, 0) xnipotênciai < n F Errado! A inicialização está errada.

2003/2004 Introdução à Programação 18 potênciaDe() double potênciaDe(double const x, int const n) { int i = 0; double potência = 1.0; while(i < n) { potência *= x; ++i; } return potência; }

2003/2004 Introdução à Programação 19 Estrutura de um ciclo inic (inicialização) while( G ) passo Normalmente passo é { acção prog (progresso) } prog [G][G] [¬G][¬G] inic acção

2003/2004 Introdução à Programação 20 potênciaDe() E se alguém invoca potênciaDe(2.0, -1) ? potênciaDe() devolve erradamente 1.0 Porquê? Pré-condição; ou Implementação

2003/2004 Introdução à Programação 21 potênciaDe() /** Devolve a potência n de 0 potênciaDe = x n. */ double potênciaDe(double const x, int const n) { int i = 0; double potência = 1.0; while(i < n) { potência *= x; ++i; } return potência; }

2003/2004 Introdução à Programação 22 potênciaDe() /** Devolve a potência n de 0 potênciaDe = x n. */ double potênciaDe(double const x, int const n) { int i = 0; double potência = 1.0; while(i != n) { potência *= x; ++i; } return potência; }

2003/2004 Introdução à Programação 23 potênciaDe() /** Devolve a potência n de 0 potênciaDe = x n. */ double potênciaDe(double const x, int const n) { assert(0 <= n); int i = 0; double potência = 1.0; while(i != n) { potência *= x; ++i; } return potência; }

2003/2004 Introdução à Programação 24 A reter... Programação com cinto, liga e suspensórios Escrever sempre a especificação da rotina Demonstrar que os ciclos estão correctos

2003/2004 Introdução à Programação 25 potênciaDe() /**... */ double potênciaDe(double const x, int const n) { assert(0 <= n); 1 int i = 0; double potência = 1.0; 2 while(i != n) { 3 potência *= x; ++i; 4 } 5 return potência; }

2003/2004 Introdução à Programação 26 Asserções nas transições ++i; [ i n ] [ i = n ] int i = 0; double potência = 1.0; potência *= x; {PC: 0 n } {0 n i = 0 potência = 1} {0 n 0 i < n potência = x i } {0 n 0 < i n potência = x i } {0 n i = n potência = x n }

2003/2004 Introdução à Programação 27 Condição Invariante Condição verdadeira Depois de inicialização Antes do passo Depois do passo Depois do ciclo Condição correspondente à união dos conjuntos definidos pelas asserções 2, 3, 4 e 5 CI: 0 i n potência = x i.

2003/2004 Introdução à Programação 28 Correcção parcial de um ciclo 1. Descobrir condição invariante (CI) 2. Provar que init estabelece veracidade de CI 3. Provar que CI G seguida de passo CI 4. Provar que CI ¬G CO

2003/2004 Introdução à Programação 29 init estabelece veracidade de CI init: int i = 0; double potência = 1.0; CI: 0 i n potência = x i. 0 0 n 1.0 = x 0. 0 n 1.0 = 1.0. V V V Dada a PC, 0 n, é V.

2003/2004 Introdução à Programação 30 CI G seguida de passo CI: demonstração directa while(i != n) { // CI G: 0 i n potência = x i i n // CI G: 0 i < n potência = x i potência *= x; // 0 i < n potência = x i x // 0 i < n potência = x i i; // 0 ( i - 1) < n potência = x ( i - 1) + 1 // 1 i < n + 1 potência = x i // // CI : 0 i n potência = x i }

2003/2004 Introdução à Programação 31 CI G seguida de passo CI: demonstração inversa while(i != n) { // CI G: 0 i n potência = x i i n // CI G: 0 i < n potência = x i // 0 i + 1 n potência x = x i + 1 // -1 i n - 1 potência x = x i + 1 // -1 i < n potência x = x i + 1 potência *= x; // 0 i + 1 n potência = x i i; // CI: 0 i n potência = x i } Implica

2003/2004 Introdução à Programação 32 CI ¬G CO CI: 0 i n potência = x i. G: i n. CI ¬G: 0 i n potência = x i i = n CI ¬G: 0 n n potência = x n i = n CI ¬G: 0 n potência = x n i = n CO: potência = x n

2003/2004 Introdução à Programação 33 E o ciclo termina sempre? i começa em 0 (zero) Pré-condição: 0 n Guarda: i n Progresso: ++i Se 0 = n, 0 0 é F e o ciclo não é executado Se 0 < n, como i começa em 0 e avança de 1 em 1, n é atingido ao fim de n iterações

2003/2004 Introdução à Programação 34 A reter... PC das rotinas tão fraca quanto possível Bom para consumidor Complicado para produtor PC ideal: V CO das rotinas tão fortes quanto possível Bom para consumidor Complicado para produtor Guardas dos ciclos tão fracas quanto possível Violação da PC dá origem a ciclo infinito que facilita detecção de erros ao produtor CI dos ciclos tão forte quanto possível Explica funcionamento do ciclo

2003/2004 Introdução à Programação 35 Aula 7: Sumário Instrução while Sintaxe Semântica Exemplo de ciclos simples Inicialização, guarda, passo (acção e progresso) Condição invariante Demonstração da correcção de ciclos Importância da fraqueza das guardas