1a aula
Transcrição
1a aula
Física Computacional 1. 2. Rápida revisão do C. a. b. c. Estrutura genérica de um programa. Tipos básicos, instruções. Ponteiros e estruturas. a. b. C (fopen) C++ (streams) Utilização de ficheiros externos [email protected] 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 1 y O C é uma linguagem criada nos anos 70: y O C++ foi desenvolvido nos anos 80: ◦ Interface muito próximo da máquina (velocidade, eficiência). ◦ Gestão de memória entregue ao utilizador (requer atenção). ◦ “Strongly typed” – cada variável possui um tipo bem definido e imutável (consistência) ◦ Globalmente conhecida e capaz de produzir bibliotecas partilhadas de alto desempenho que são utilizadas em linguagens de programação de nível mais alto (C++, PHP, Python, Java, etc.) ◦ 100% retrocompatível com C ◦ Introduz o conceito de programação orientada por objectos ◦ Simplifica, mas não elimina, a gestão dinâmica de memória. Revisão de C 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 2 y Instruções de pré-processador: y Protótipos: y Função main: ◦ #include <iostream> ◦ #define PI 3.14 ◦ void swap(int *old, int *new); ◦ int main(){ x int a=1, b=2; x a>b? std::cout << “False” << std::endl : std::cout << “True” << std::endl; y Mais funções: ◦ swap(int *old, int *new){ x int tmp = *old; x *old = *new; x *new = tmp; } Estrutura genérica de um programa 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 3 y Os tipos em C são válidos em C++ y Instruções em C e C++ podem ter várias vertentes: ◦ ◦ ◦ ◦ ◦ char, int, float e double com os respectivos modificadores de tamanho short e long. Modificadores de sinal: signed e unsigned. Não mutáveis const. Ponteiros ou vectors (ex: char *a, char a[10]) Outros modificadores dependentes da máquina (volatile, register, etc.) não serão abordados aqui. ◦ O C++ adiciona o tipo boolean. ◦ declarações: x int a = 3; x float mySin(float x){return sin(3*x);} x vector<int> myIntVector; ◦ Condicionais: x if x case x comparador ternário “1!=0?1:0” ◦ Atribuições (rever rvalues e lvalues!) x a = b+c (correcto) x a+b = c (errado!) ◦ Ciclos: x while ( count < 10) x for(int i=0;i<10;++i) x do{…} while(…) Tipos básicos, instruções 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 4 y Ponteiros ◦ Vectores ou variáveis dimensionadas: x int row[10]; int grid[10][20] ◦ Ponteiros (variáveis de dimensão dinâmica): x int *row = malloc(sizeof(int)*10) x int *row = new int [10] x vector<int> row; row.push_back(value); ◦ Ponteiros para ponteiro ou vectores: x int **a; x int *a[]; ◦ Ponteiros para funções (não explicado aqui). Ponteiros 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 5 y As estruturas são “containers”, uma estrutura lógica definida dentro em C onde podemos incluir vários tipos diferentes de variáveis. struct particle{ float px, py, pz, e; string name; int pdgid; }; y O C/C++ ainda nos permitem definir tipos personalizados de variáveis: y O C++ leva o conceito de estrutura mais além, utilizando classes, que numa descrição simplista, são estruturas com capacidades para incluir variáveis e funções. As estruturas em C podem ser gravadas num ficheiro de output usando a escrita em modo binário e podem ser lidas da mesma forma. A optimização do espaço de uma estrutura é fundamental para minimizar a quantidade de espaço em disco que esta ocupa. y ◦ typedef struct particle myparticle; ◦ typedef char[50] MyLabel; ◦ FILE f = fopen(“file.bin”,”wb”); ◦ MyLabel onelable = “A label”; ◦ fwrite(&onelabel, sizeof(mylabel), ntimes, f); Estruturas 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 6 y y y Para escrevermos o output dos nossos programas num ficheiro exterior, ou para obtermos o input a partir do mesmo suporte, é necessário recorrer a file descriptors ou streams. Exemplos de streams: ◦ cin (teclado, input) ◦ cout (ecrã, output) e cerr (ecrã, output). ◦ Estas streams podem ser redefinidas, i.e., o input e/ou output não precisa necessariamente de ser o vosso ecrã ou teclado. No entanto, podemos adicionar outros streams em vez de modificar os que já existem por default. Estes streams estão disponíveis através da biblioteca standard de C++ <iostream>, dentro do namespace std: #include <iostream> int main(){ } std::cout << “Ahoy, mates” << std::endl; return 0; Input/Output: C vs C++ 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 7 y Em C tinhamos uma estrutura especial, denominada FILE: FILE *in = fopen(“file.dat”, “r”); while(fscanf(in,”%f”,&a) != EOF) printf(“%f\n”,a); fclose(in); y As streams eram stdin, stdout e stderr. y O accesso a elas podia ser feito através de fprintf (ex: fprint(stderr,”ERROR detected!\n”)); Input/Output: C vs C++ (cont.) 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 8 y Em C++ este processo simplificou-se um pouco: ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ #include <fstream> #include <iostream> using namespace std; ofstream out; out.open(“data.txt”); ifstream in; in.open(“input.txt”); float a,b; for(int line=0;line<10;line++){ x in >> a >> b; x out << a*b << endl; ◦ out.close(); ◦ in.close(); y Existe uma outra stream, a fstream, que permite a escrita e leitura simultânea num mesmo ficheiro (não explicada hoje). Input/Output: C vs C++ (cont.) 28-09-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 9