Uma classe para vectores

Slides:



Advertisements
Apresentações semelhantes
Curso de aprofundamento na linguagem C
Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Classes C++ Class nome da classe { private: membros privados
Algoritmos de Ordenação
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
1. Classes 2. Membros estáticos 1.1. Palavra chave this
Vamos abordar o exemplo
Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005.
TAD Deque ATAI.
LEIC/FEUP Tecnologia de Sistemas de Gestão de Bases de Dados
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Out/2005 Core C++: Uma abordagem.
Projeto de Sistemas de Software Trabalho de Padrões de Projeto
Filas circulares.
Templates Traduzido de:
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
Sobrecarga de Operadores
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Walfredo Cirne walfredo.dsc.ufpb.br
Modificadores de tipos e Arquivos
Modularização: funções e procedimentos
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++
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.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
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.
A linguagem C#.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Revisão /*======================================================*/
Const member functions
Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia com as estruturas,
Curso C++ (J. Seixas) Primeiro exemplo: classe node Uma classe representando um ponto de uma rede (node) typedef long coord; typedef long seq; typedef.
1 Classes Uma classe é um objecto composto por dados e operações sobre esses dados. É uma generalização da noção de estrutura. Uma classe define um novo.
Revisão de Orientação a Objetos e C++
+ Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Capítulo 1 Tipo enumerado.
Procedural vs. OO (Figuras Geométricas: Área do triângulo)
1 C# O tipo System.String Sharp Shooters.NET Universidade Federal de Pernambuco Centro de Informática Recife, 05/09/2002 Autor: Marden Menezes Costa.
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
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.
Java Kickstart, day 2 Semelhanças com linguagem C.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula Prática 5 05/05/2010. //Estrutura do método public int subtrair (int a, int b){ //Calcule a operação desejada. int resultado = a – b; //Retorne o.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP .NET Framework
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Aprendendo como funciona o NHibernate Elvis Medeiros Programador .NET
Programação estruturada unidade 2
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Algoritmos de Pesquisa
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Orientação a Objetos - Programação em C++ Slides 13: A classe Predefinida String. OO – Engenharia Eletrônica Prof. Jean Marcelo SIMÃO.
Matemática Financeira Prof. Elisson de Andrade
01/07/ B 1. Atividades Preparatórias 2. Ofertas
Orientação a Objetos - Programação em C++
Introdução a Programação
Singleton e Template Method
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Transcrição da apresentação:

Uma classe para vectores #ifndef __SIMPLEARRAY__ #define __SIMPLEARRAY__ #include <iostream> using namespace std; template<class T> class SimpleArray { template<class U> friend ostream &operator <<(ostream&, const SimpleArray<U>&); public: SimpleArray(int n); // Create array of n elements SimpleArray(); // Create array of 0 elements SimpleArray(const SimpleArray<T>&); // Copy array ~SimpleArray(); // Destroy array T& operator[](int i); // Subscripting int numElts(); // Number of elements SimpleArray<T>& operator=(const SimpleArray<T>&); // Array assignment SimpleArray<T>& operator=(T); // Scalar assignment void setSize(int n); // Change size private: int num_elts; // Number of elements T* ptr_to_data; // Pointer to built-in array of elements void copy(const SimpleArray<T>& a); // Copy in elements of a }; #endif Curso C++ (J. Seixas)

Overloading de operadores Primeiro: nem todos os operadores são passíveis de overloading. Segundo: não é possível alterar nem a precedência, nem a associatividade dos operadores. Terceiro: Os operadores iniciais ficam inacessíveis! Não há garantia quanto à ordem segundo a qual os operandos são avaliados. Quarto: O significado dos operadores para os tipos pré-definidos não pode ser alterado. Não alterar operadores como , &, && ou || Operadores que podem ser overloaded + - * / = < > += -= *= /= << >> <<= >>= == != <= >= ++ -- % & ^ ! | ~ &= ^= |= && || %= [] () , ->* -> new delete new[] delete[] Operadores que não podem ser overloaded :: .* . ?: Curso C++ (J. Seixas)

Uma classe para vectores Overloading do operador []: template<class T> SimpleArray<T>::~SimpleArray() { delete [] ptr_to_data; } T& SimpleArray<T>::operator[](int i) { return ptr_to_data[i]; int SimpleArray<T>::numElts() { return num_elts; Curso C++ (J. Seixas)

Uma classe para vectores Overloading do operador =: (assignment) template<class T> SimpleArray<T>& SimpleArray<T>::operator=(const SimpleArray<T>& rhs) { if ( ptr_to_data != rhs.ptr_to_data ) { setSize( rhs.num_elts ); copy(rhs); } return *this; Os operadores = retornam uma referência: não é necessário criar e destruir uma cópia temporária do resultado. Como retornam uma referência ao objecto da esquerda permitem pôr a=b=c; Curso C++ (J. Seixas)

Uma classe para vectores Overloading do operador <<: (assignment) template<class T> ostream &operator <<(ostream& stream, const SimpleArray<T>& v){ for(int i=0; i < v.num_elts ;++i) stream << v.ptr_to_data[i] << " "; return stream; } Os operadores << retornam uma referência a ostream e assim podemos por cout << v << u << endl; Curso C++ (J. Seixas)

Uma classe para vectores Uma função com o qualificativo friend, seja ela membro de outra classe ou global, pode aceder a membros não públicos da classe que a classificou como friend. A classificação de friend a uma dada função só se aplica a essa função, não a todas com o mesmo nome! Se se declarar uma classe como friend todas as suas funções serão friend. A posição onde a declaração de friend está na definição da classe é irrelevante. Os especificadores de acesso private e public não têm qualquer efeito em friend. Curso C++ (J. Seixas)

Uma classe para vectores Implementação (I): template<class T> SimpleArray<T>::SimpleArray(int n) { num_elts = n; ptr_to_data = new T[n]; } SimpleArray<T>::SimpleArray() { num_elts = 0; ptr_to_data = 0; SimpleArray<T>::SimpleArray(const SimpleArray<T>& a) { num_elts = a.num_elts; ptr_to_data = new T[num_elts]; copy(a); // Copy a's elements void SimpleArray<T>::copy(const SimpleArray<T>& a) { // Copy a's elements into the elements of *this T* p = ptr_to_data + num_elts; T* q = a.ptr_to_data + num_elts; while (p > ptr_to_data) *--p = *--q; Curso C++ (J. Seixas)

Uma classe para vectores Implementação (II): template<class T> SimpleArray<T>::~SimpleArray() { delete [] ptr_to_data; } T& SimpleArray<T>::operator[](int i) { return ptr_to_data[i]; int SimpleArray<T>::numElts() { return num_elts; Curso C++ (J. Seixas)

Uma classe para vectores Implementação (III): template<class T> SimpleArray<T>& SimpleArray<T>::operator=(const SimpleArray<T>& rhs) { if ( ptr_to_data != rhs.ptr_to_data ) { setSize( rhs.num_elts ); copy(rhs); } return *this; void SimpleArray<T>::setSize(int n) { if (n != num_elts) { delete [] ptr_to_data; // Delete old elements, num_elts = n; // set new count, ptr_to_data = new T[n]; // and allocate new elements Curso C++ (J. Seixas)

Uma classe para vectores Implementação (IV): template<class T> SimpleArray<T>& SimpleArray<T>::operator=(T rhs) { T* p = ptr_to_data + num_elts; while (p > ptr_to_data) *--p = rhs; return *this; } Curso C++ (J. Seixas)

Exemplo: O modelo de Ising O modelo de Ising (estudado inicialmente pelo físico Ernst Ising por sugestão do seu orientador de doutoramento Wilhelm Lenz) é um modelo matemático em Física Estatística, muito importante para estudar fenómenos como o ferromagnetismo. Teve e tem um papel fundamental na moderna teoria das transições de fase e fenómenos críticos. Curso C++ (J. Seixas)

Exemplo: O modelo de Ising O modelo mais simples consiste numa cadeia de “spins” Si cada um só podendo tomar os valores ±1. A energia do sistema para uma dada configuração de spins é dada por Cada configuração de spins é uma “fotografia” do sistema num dado instante Curso C++ (J. Seixas)

Exemplo: O modelo de Ising O objectivo da Física Estatística é determinar o valor das grandezas termodinâmicas macroscópicas a partir da dinâmica microscópica do sistema. A energia do sistema em cada instante é dada pela expressão anterior. A energia média ao longo do tempo é dada por Curso C++ (J. Seixas)

Exemplo: O modelo de Ising Calcular <E> para todas as possíveis configurações é possível, mas: Será que todas as configurações têm a mesma importância no processo? Será que no intervalo de tempo (mesmo longo) em que estamos a observar todas elas aparecem? Se não, como determinar <E> tendo em vista a distribuição de configurações mais frequentes? Como determinar a frequência com que as configurações aparecem? … O objectivo da Física Estatística é dar respostas a estas perguntas Curso C++ (J. Seixas)

Exemplo: O modelo de Ising 1ª pergunta: Como calcular a frequência (probabilidade) com que aparece uma dada configuração? Resposta (1ª parte): Há muitas configurações que têm a mesma energia associada sobretudo se há simetrias no sistema. Exemplo (modelo de Ising ferromagnético): Existe uma simetria Z2: trocar s→-s fornece o mesmo resultado para E. Existem configurações com energia menor do que outras. Em física temos sempre de tender para um mínimo de energia. Curso C++ (J. Seixas)

Exemplo: O modelo de Ising 1ª pergunta: Como calcular a frequência (probabilidade) com que aparece uma dada configuração? Resposta (2ª parte): Configurações todos os spins para baixo excepto 1: N; Configurações todos os spins para baixo excepto 2: N(N-1); desordenado N(N-1)/2! Configurações todos os spins para baixo excepto k: N!/(N-k)!; desordenado N!/k!(N-k)! Curso C++ (J. Seixas)

Exemplo: O modelo de Ising 1ª pergunta: Como calcular a frequência (probabilidade) com que aparece uma dada configuração? Resposta (2ª parte): A probabilidade de ter N spins e colocá-los N1 na caixa 1, N2 na caixa 2, … Nk na caixa k é Se houver degenerescência, o número de maneiras de preencher uma caixa i é gi então a expressão anterior é Curso C++ (J. Seixas)

Exemplo: O modelo de Ising 1ª pergunta: Como calcular a frequência (probabilidade) com que aparece uma dada configuração? Resposta (3ª parte): Qual é o valor máximo da probabilidade, ou seja, qual o conjunto {Ni} para os quais W é máxima? Na realidade, essa é a configuração mais provável, ou seja, a que aparecerá mais vezes. Resposta: Usar multiplicadores de Lagrange minimizando Curso C++ (J. Seixas)

Exemplo: O modelo de Ising 1ª pergunta: Como calcular a frequência (probabilidade) com que aparece uma dada configuração? Resposta (3ª parte): Usando a aproximação de Stirling e pondo igual a 0 a derivada em ordem a Ni temos Curso C++ (J. Seixas)

Exemplo: O modelo de Ising 1ª pergunta: Como calcular a frequência (probabilidade) com que aparece uma dada configuração? Resposta (3ª parte): Função de partição: e logo Função de partição Curso C++ (J. Seixas)

Exemplo: O modelo de Ising 2ª pergunta: O comportamento do sistema não é portanto possível de seguir em detalhe analiticamente. Se as configurações não são todas equiprováveis, como escolher as melhores de forma a não perder tempo com as que são mais improváveis? Resposta (entre outras): Algoritmo de Metropolis Curso C++ (J. Seixas)