Mestrado em Matemática Financeira



Documentos relacionados
Componentes da linguagem C++

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Engenharia de Software

CURSO DE PROGRAMAÇÃO EM JAVA

Curso de Programação Computadores

Guia e Utilização do Visual Studio 6.0

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente

Pesquisa e organização de informação

Algoritmos e Programação Estruturada

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C

20 Caracteres - Tipo char

SECUNDÁRIA DE CAMARATE Plataforma Office 365. Alojamento de ficheiros - OneDrive para Empresas

Aula 1 Tipo Abstrato de Dados

Relatório Preliminar de. Projecto em Contexto Empresarial I. VoIP Desenvolvimento de Aplicações em Plataformas Open Source

Organização de programas em Python. Vanessa Braganholo

Fundamentos de Programação II. Introdução à linguagem de programação C++

Seu manual do usuário EPSON LQ-630

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

Desenvolvendo Websites com PHP

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

CONVENÇÃO DE CÓDIGO JAVA

Lógica de Programação

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Unidade 7: Panes no Excel

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

O modelo do computador

ATIVIDADES PRÁTICAS SUPERVISIONADAS

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012

Folha de Cálculo (Excel)

Comandos Sequenciais if else, e Switch

Resumo da Matéria de Linguagem de Programação. Linguagem C

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

INTRODUÇÃO AO WINDOWS

MC-102 Aula 01. Instituto de Computação Unicamp

Conceitos básicos de programação

Guia de instalação e Activação

Manual de Utilização. Site Manager. Tecnologia ao serviço do Mundo Rural

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

Entendendo como funciona o NAT

A VISTA BACKSTAGE PRINCIPAIS OPÇÕES NO ECRÃ DE ACESSO

AMBIENTE DE PROGRAMAÇÃO PYTHON

Realizado por: Fábio Rebeca Nº6. Iuri Santos Nº8. Telmo Santos Nº23

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

PARANÁ GOVERNO DO ESTADO

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

EAmb V.1 ESPOSENDE AMBIENTE. GestProcessos Online. Manual do Utilizador

O Processo de Programação

3/19/2014. Compilador DEV C++ ENGENHARIAS LÓGICA DE PROGRAMAÇÃO Henry Lubanco/ Joelio Piraciaba

Programação de Computadores Primeiros Passos Práticos em C++

UNIVERSIDADE CATÓLICA PORTUGUESA

Realizado por: Fábio Rebeca Nº6. Iuri Santos Nº8. Telmo Santos Nº23

Implementando uma Classe e Criando Objetos a partir dela

Curso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente:

Manual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco

VM Card. Referência das Definições Web das Funções Avançadas. Manuais do Utilizador

Conceitos básicos da linguagem C

Guia de Estudo Folha de Cálculo Microsoft Excel

WEBSITE DEFIR PRO

Modelo Cascata ou Clássico

Como Gerar documento em PDF com várias Imagens

1. Lançamento em Contas Bancárias Liquidação de Clientes

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

O que é o JavaScript?

Sistemas Operacionais

Pilhas. Profa Morganna Diniz

Computação e Programação Aula prática nº 5. Enunciados dos problemas

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Projecto de Programação MEEC /2011-1ºSemestre. Mestrado Integrado em Engenharia Electrotécnica e de Computadores

Aplicações de Escritório Electrónico

Bases de Dados. Lab 1: Introdução ao ambiente

Programa ConsoleRPN. PUC-Rio CIV Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira

Tarefa Orientada 2 Criar uma base de dados

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO. SISTEMAS DE GESTÃO DE BASE DE DADOS Microsoft Access TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO

Conceitos Básicos de C

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

Referencial do Módulo B

ZS Rest. Manual Avançado. Instalação em Rede. v2011

Introdução à Programação

Algoritmos e Técnicas de

Programação Visual 04/05 - EstMedia. Manual do Utilizador. Realizado por Gustavo Patrício nº 4757 António Espingardeiro nº 4328

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Prof. Esp. Adriano Carvalho

Orientação a Objetos Programação em C++

TIC Unidade 2 Base de Dados. Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado.

Vamos Criar um Ponto de Restauro no Windows

Descrição de Como Utilizar

LINGUAGEM C UMA INTRODUÇÃO

Dadas a base e a altura de um triangulo, determinar sua área.

Aplicação Prática de Lua para Web

Programação científica C++

Usando o Excel ESTATÍSTICA. A Janela do Excel Barra de título. Barra de menus. Barra de ferramentas padrão e de formatação.

Grupo I [4v] b. [0,6v] De que forma é que o escalonador do Linux tenta minimizar o impacto desta limitação?

Transcrição:

Programação Mestrado em Matemática Financeira http://moodle.fc.ul.pt Luís Sequeira 03 de Janeiro de 2014 Bom dia! 2 Contactos......................................................... 3 Abstracção!....................................................... 4 Bibliografia........................................................ 5 Laboratório........................................................ 6 Vamos ao trabalho! 7 Programar... com classe(s)............................................. 8 Mãos na Massa!.................................................... 9 Os programas que (não) fazemos........................................ 10 Desde a fonte...................................................... 11 Desde a fonte... (cont.).............................................. 12 Hello, World!..................................................... 13 What s in a program................................................ 14 Comentários...................................................... 15 E aquelas linhas ao princípio?.......................................... 16 Torres de Hanoi 17 Hanoi!.......................................................... 18 Hanoi!!......................................................... 19 Hanoi!!!......................................................... 20 Hanoi a função.................................................. 21 Ainda Hanoi...................................................... 22 E pur... si muove!.................................................. 23 Classes, Classes! 26 Programar... com classe(s)............................................ 27 Programador-utilizador............................................... 28 TPC 1........................................................ 29 TPC 2........................................................ 30 1

Bom dia! 2 Contactos Docente: Luís Fernando Sequeira lfsequeira@fc.ul.pt 217500288 Página da cadeira: alojada no serviço moodle da FCUL: http://moodle.fc.ul.pt Acesso: com credenciais FCUL (fcnnnnn@alunos.fc.ul.pt) como guest Prog 3 Abstracção!... the only mental tool by which a very finite piece of reasoning can cover a myriad cases is called abstraction Edsjer W. Dijsktra Prog 4 Bibliografia Página da cadeira Apontamentos das aulas disponíveis em PDF Programas usados nas aulas (são para compilar e experimentar em casa!) Links instalação de software; bibliografia online TPCs Pedro Guerreiro, Programação com Classes em C++, 2 a Edição, FCA, 2003 C++ tutorial http://www.cplusplus.com/doc/tutorial/ The internet at large! Prog 5 2

Laboratório Aulas práticas:... não temos (EXCEPÇÃO: Hoje) Exercícios: são para fazer na máquina, em casa Dúvidas: pessoalmente ou por mail Não esperem uma semana Não digam só deu erro Tentem perceber a mensagem de erro Sempre que possível, enviem o vosso código Prog 6 Vamos ao trabalho! 7 Programar... com classe(s) Usaremos a linguagem C++ Criada por Bjarne Stroustrup Disponível em qualquer plataforma Utilizada por milhares de programadores Estende a linguagem C com conceitos de programação orientada por objectos objectos e classes Mãos na Massa! Aprende-se a programar... Programando! Exercícios e exemplos são para correr na máquina Software necessário gratuito indicado na página da cadeira Prog 8 Prog 9 3

Os programas que (não) fazemos Os programas que faremos Não têm uma interface gráfica Têm interacção simples Input teclado Output ecrã Ficheiros Portáveis o mesmo programa corre em qualquer plataforma (apenas recompilar) Podem ser combinados com outros (e.g. resultados importados para criar um gráfico em Excel) Desde a fonte... O C ++ é uma linguagem compilada. Prog 10 Programa (código) fonte o programa, tal como o escrevemos (e.g. hello.cpp) Programa objecto o resultado da tradução do programa fonte pelo compilador (e. g. hello.o) Programa executável resultado da ligação do programa objecto com outros objectos e libraries. Prog 11 Desde a fonte... (cont.) Programa fonte hello.cpp Compilador Programa objecto hello.o Mais objectos libraries linker Programa executável hello[.exe] g++ -c hello.cpp g++ -o hello hello.o... Prog 12 4

Como compilar Os programas em C++ que nós fazemos podem ser compilados usando uma interface gráfica ou uma interface de linha de comandos. Numa interface de linha de comandos, a compilação e ligação dos programas é geralmente feita com variantes do mesmo comando (normalmente, g++): Compilamos com g++ -c hello.cpp Ligamos com g++ -o hello hello.o Executamos com hello Num ambiente gráfico, como o Dev-C++, os comandos para compilar, ligar e executar os programas estão disponíveis através de botões, como visto na aula. Ambiente de programação integrado Prog note 1 of slide 12 Os programas podem ser escritos em qualquer editor de texto ASCII, mas é de toda a conveniência a utilização de um editor vocacionado para a programação. Melhor ainda é utilizar um ambiente de desenvolvimento integrado que inclui não só um editor de texto mas as ferramentas necessárias para compilar e executar os programas. Nesta cadeira, sugere-se a utilização de um tal ambiente Dev-C++ que é fornecido como software gratuito e que os alunos devem descarregar da internet e instalar nos seus próprios computadores. Hello, World! Como não podia deixar de ser... // o meu primeiro programa em C++ #include<iostream> #include<cstdlib> using namespace std; Prog note 2 of slide 12 int main() { } cout << "Hello, World!" << endl; system("pause"); Vamos lá ver isto em acção!!! Prog 13 5

Compilar e executar em Dev-C++ Figura 1: O botão de compilação está assinalado Figura 2: O botão de execução está assinalado Prog note 1 of slide 13 6

Compilar programas mais complexos Os programas desta primeira aula são pequenos, mas a maior parte dos programas interessantes são bastante maiores e, por várias razões que começaremos a ver na próxima aula, compõe-se geralmente de vários ficheiros diferentes. Para produzir os programas executáveis nestes casos, é necessário compilar as várias peças. Para tornar este processo automático, recorreremos ao conceito de projecto. Um projecto é um conjunto de ficheiros relacionados, os quais são necessários para construir um programa. Num ambiente de linha de comandos, cada projecto tem um ficheiro Makefile que descreve os ficheiros envolvidos, as suas interdependências e os comandos necessários para construir o executável. Num ambiente gráfico como o Dev-C++, este processo é muito facilitado, como veremos. What s in a program Um programa em C++ é constituído por uma ou mais funções. Todo o programa inclui uma (e uma só) função chamada main. A execução do programa começa no início da função main. A primeira instrução do programa hello é cout << "Hello, World!" << endl; Prog note 2 of slide 13 que tem como efeito escrever no ecrã a cadeia de caracteres Hello, World! e mudar de linha. A instrução system("pause"); evita que o programa termine imediatamente (*). * Prog 14 Estritamente falando, a instrução system("pause"); não faz parte da lógica do nosso programa. Quando um programa é executado a partir do ambiente do Dev-C++, assim que o programa termina regressamos à janela de edição e a janela de execução do programa desaparece. O efeito da instrução system("pause"); é parar o programa (escrevendo no ecrã uma mensagem explicativa), dando-nos oportunidade de ver o seu output, antes que a janela se feche. Se retirarmos esta instrução, o programa termina tão rapidamente que não chegamos a ver que ele, de facto, escreveu Hello, World. (Nota: em versões mais recentes, esta instrução já não é necessária) Prog note 1 of slide 14 7

Comentários Comentários anotações ou observações que se destinam ao leitor humano. são ignorados pelo compilador de uma linha: // comentário vai até ao fim da linha mais extensos: /* este comentário prolonga-se até aparecer o símbolo que indica o seu fim */ Prog 15 E aquelas linhas ao princípio? O programa hello.cpp começa com #include <iostream> #include <cstdlib> using namespace std; #include é uma directiva para o pré-processador para incluir o conteúdo de um ficheiro em iostream estão definidos os objectos necessários para o input e output (sem isso não poderíamos escrever no ecrã) A linha using namespace std; poderia ser omitida, mas então teríamos, e.g., de escrever std::cout << "Hello, World!"; (sobre este assunto, ver http://www.cplusplus.com/doc/tutorial/namespaces.html) Prog 16 8

Torres de Hanoi 17 Hanoi! No jogo das torres de Hanoi, pretende-se mover todos os discos do primeiro poste para o terceiro, respeitando as seguintes regras: Só se move um disco de cada vez Não se pode sobrepor um disco maior a um disco menor Hanoi!! #include <iostream> using namespace std; int main() { int n; Prog 18 } cout << "Programa Torres de Hanoi!!!" << endl; cout << " Quantos discos (1-10)? "; cin >> n; Hanoi(n,1,3); Repare-se na instrução cin >> n, que serve para aceitar um valor do teclado e guardá-lo na variável n. Temos aqui o primeiro exemplo de ABSTRACÇÃO (procedimental). O processo de resolução do problema está abstraído pela função Hanoi. Não importa como ela é programada, mas o que ela faz! Prog 19 9

ABSTRACÇÃO, ABSTRACÇÃO!!! A abstracção é ESSENCIAL em programação. Aqui estamos perante o primeiro exemplo disso. O nosso programa estará correcto, desde que a função Hanoi faça aquilo que esperamos dela, mas NÃO NOS IMPORTA como é que ela o faz. No nosso ponto de vista actual, apenas nos interessa o quê: a função deve descrever os movimentos necessários para resolver as torres de Hanoi com n discos. Claro que, para termos um programa completo e a funcionar correctamente, teremos de ter uma função Hanoi. Mas é responsabilidade de quem programar a função decidir como o faz. É perfeitamente possível até uma tal função ser programada por uma pessoa diferente da que fez o resto do programa. Hanoi!!! Prog note 1 of slide 19 Para programarmos esta função, temos de delinear uma estratégia de resolução do jogo. Como não se pode pôr um disco maior sobre um disco menor, só se pode deslocar o disco n quando A pilha 3 está vazia Os outros discos estão todos na pilha 2 Assim, a estratégia é: Mover n-1 discos da pilha 1 para a pilha 2 Mover o disco n da pilha 1 para a pilha 3 Mover n-1 discos da pilha 2 para a pilha 3 Hanoi a função Prog 20 void Hanoi( int n, int from, int to) { if (n==0) return ; else { Hanoi(n 1,from,6 from to ); Move(n,from, to ); Hanoi(n 1,6 from to, to ); } } A função Hanoi é recursiva: ela invoca-se a si mesma. Prog 21 10

Ainda Hanoi Analisemos em pormenor o que faz a função Hanoi: A instrução if testa se o número de discos é igual a zero e, se assim for, a função termina a sua execução (return). Caso contrário:! a instrução Hanoi(n-1,from,6-from-to) executa a movimentação de n-1 discos para a pilha auxiliar; executa-se o movimento do disco n (Move(n,from,to);); movem-se os n-1 discos da pilha auxiliar para a pilha final (Hanoi(n-1,6-from-to,to);). Prog 22 Repare que a comparação de igualdade é feita com o sinal ==. Não confundir com o operador de atribuição, =. E pur... si muove! Prog note 1 of slide 22 A função Move é responsável pela movimentação dos discos. Neste caso, apenas queremos registar quais os movimentos, pelo que a função tem este aspecto: void Move(int n, int from, int to) { cout << from << > << to << endl ; }! Prog 23 A mesma estratégia podia ser aqui usada para efectuar o mesmo movimento numa interface gráfica, deslocando visualmente os discos no ecrã; apenas mudaria o código da função Move. Prog note 1 of slide 23 O que se segue... 24 Mas afinal isto também se fazia em C! Pois é... mas já a seguir começaremos a ver onde o C++ vai (muito) mais além... vamos trabalhar com CLASSES. Prog 25 11

C vs C++ Essencialmente, tudo o que fizemos até agora foi C (embora a forma de escrever no ecrã em C seja diferente da que aqui usámos). Aprendemos alguns conceitos básicos e alguma notação. Com a função Hanoi, usámos um importante tipo de ABSTRACÇÃO a abstracção procedimental e atrevemo-nos a usar a recursividade a função Hanoi invoca-se sucessivamente a si mesma, com parâmetros mais simples. Na segunda parte da aula, começaremos a abordar outro tipo mais abrangente de abstracção. A noção de classe permite abstrair ao mesmo tempo dados e operações. Vai ser a programação com classes que nos vai ocupar durante todo o curso. Prog note 1 of slide 25 Classes, Classes! 26 Programar... com classe(s) Uma classe Contém em si mesma dados Atributos e funções que operam sobre os dados Métodos É um tipo de dados podemos declarar variáveis da classe Tem membros privados e membros públicos Pode herdar atributos de outras classes A declaração é separada da implementação * * Prog 27 Aqui emerge mais um aspecto importante de ABSTRACÇÃO. Para usar correctamente uma classe não é necessário conhecer a forma como ela está programada (a sua implementação), mas apenas quais os métodos que a própria classe disponibiliza para sermos UTILIZADORES de classes fornecidas por outros, precisamos apenas de conhecer a sua declaração. Prog note 1 of slide 27 12

Programador-utilizador A ABSTRACÇÃO permite-nos trabalhar com classes sem saber como elas foram programadas. Só precisamos de saber o que elas fazem, e não como. Exemplo Vamos usar uma classe (Rational) que foi disponibizada na internet. Sabendo que com objectos do tipo Rational é possível ler (e.g., cin >> r; ) escrever (e.g., cout << s; ) comparar (e.g., a<=b, (menor ou igual), a==b (igual), a!=b (diferente)) fazer operações aritméticas (e.g., a+b, a*(b-c)) podemos escrever um programa como teste-rational.cpp (*) e muitos outros, sem precisar de saber COMO foi implementada a classe Rational. Isto é mais uma ocorrência da ABSTRACÇÃO. (**) Prog 28 (*) O programa teste-rational.cpp está disponível, tal como os ficheiros da classe Rational, na página da cadeira, na secção Programas e Código. O mesmo acontecerá, daqui para a frente, com todos os programas que formos fazendo nas aulas, sem necessidade de qualquer chamada de atenção para esse facto. (**) Prog note 1 of slide 28 Note-se que precisamos de saber quais as capacidades de que a classe dispõe, embora não precisamos de saber como ela as faz. É em parte por esse motivo que, como veremos em pormenor na próxima aula, uma classe é sempre escrita em dois ficheiros distintos (no nosso caso, eles são Rational.h e Rational.cpp). Precisamos de os ter a ambos, mas a informação que nos interessa quando estamos a usar a classe, como é o caso i.e., a de quais as funcionalidades da classe está no ficheiro.h. O ficheiro.cpp contém a implementação da classe o como. Prog note 2 of slide 28 TPC 1 Fazer o download do software (os links estão na página da cadeira...) e instalá-lo. Copiar, compilar e executar os programas que fizemos na aula de hoje. TPC 2 Página da cadeira, na secção TPC, Aula 1. Prog 29 Prog 30 13