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

Documentos relacionados