• Nenhum resultado encontrado

Manipulando Arquivos e Plotando Grácos

N/A
N/A
Protected

Academic year: 2021

Share "Manipulando Arquivos e Plotando Grácos"

Copied!
5
0
0

Texto

(1)

Manipulando Arquivos e Plotando Grácos

por Vitor Pereira Bezzan 24/02/10

1 Objetivos

O objetivo deste documento é familiarizar o aluno com os métodos necessários para imprimir dados em arquivo utilizando-se as linguagens de programação C/C++ e depois utilizar estes dados de forma consistente no programa de grácos xmgr. Para tanto é necessário um compilador C/C++, como o gcc (várias distro Linux e Windows) e o programa xmgr que está disponível para várias distro Linux e Mac OS X.

2 Manipulando arquivos

Para manipular arquivos em C/C++ é necessário apontar ao compilador uma variável que receberá a locação do arquivo e seu nome. Para tanto, utilizaremos um tipo ponteiro de arquivo, cuja denição está disponível em stdio.h:

FILE *arquivo1;

Com o ponteiro criado, é necessário agora fazer com que ele "aponte" para alguma direção, ou seja, nosso arquivo.

2.1 fopen()

Façamos agora com que nosso ponteiro aponte para o arquivo que necessitamos. Trataremos de arquivos localizados no mesmo diretório por praticidade. Para tanto, utilizaremos a função

fopen(nome_do_arquivo,modo_de_trabalho);

Onde "nome do arquivo" é uma string que contém o nome do arquivo a ser criado/editado/aberto e "modo de trabalho é uma string que guarda os detalhes especícos de como o programa vai manipular o arquivo. Por exemplo, r abre um arquivo existente no modo somente leitura, w cria um arquivo vazio pronto para ser editado e a entra no modo append, o que signica que a edição começa do nal do arquivo já existente. Portanto o código seguinte, arquivo1=fopen("saida.dat","w");

faz com que o ponteiro arquivo1 aponte para o arquivo saida.dat no modo de escrita (ou seja, um novo arquivo será criado no mesmo diretório do programa executável).

2.1.1 Prevendo erros em fopen()

Todo acesso ao disco rígido é suscetível a erros e portanto pode ocorrer do arquivo não ser aberto com sucesso por fopen. Neste caso, o programa retornará um ponteiro nulo, que pode ser detectado pelo seguinte código de exemplo:

if(!arquivo){

cout<<"Erro na abertura de arquivo! Dados nao serao salvos!"<<endl; ...

}else{ ... }

(2)

2.2 Adicionando informação ao arquivo

Para exibir informações na tela, usa-se em C as tradicionais funções printf() e em C++ usa-se a linha de comando cout. Para escrever em arquivos, o procedimento é totalmente análogo através das funções

fprintf(ponteiro_de_arquivo,string_a_ser_escrita,argumentos...); fscanf(ponteiro_de_arquivo,string_a_ser_escrita,argumentos...);

Onde os mesmos caracteres de controle e os mesmos tipos de argumentos utilizados em printf() podem ser utilizados em fprintf() (com o cuidado de setar sempre o arquivo a escrever por meio de "ponteiro de arquivo"):

printf("Esta mensagem será escrita na tela\n %d",numero1);

fprintf(arquivo1,"Esta mensagem será escrita no arquivo1\n %d",numero1);

Trabalhar com posicionamento no arquivo pronto em C/C++ é muito dícil e anti-intuitivo. Então é recomendado que a formatação esteja perfeita desde a escrita para evitar trabalho desnecessário.

2.3 Fechando o arquivo

Ao terminar o processo de escrita no arquivo, é necessário fechá-lo antes de nalizar o programa. Finalizar um programa sem antes fechar o arquivo pode ocasionar na perda dos dados já gravados e talvez danos ainda piores na superfície de seu disco rígido. Para tanto, o comando fclose("ponteiro") é utilizado.

int fecha_arquivo=fclose(arquivo);

Onde a função retorna 0 se o arquivo foi fechado corretamente ou um outro número qualquer se houve erro. 2.3.1 Prevendo erros em fclose()

Baseado nas informações anteriores, o seguinte código pode detectar um erro no processo de fechamento de arquivo: if(fecha_arquivo!=0){

cout<<"Erro no fechamento do arquivo!"<<endl; ...

}else{ ... }

2.4 Código-Exemplo

A seguir um código-exemplo de um programa que imprime em arquivo os primeiros 100 inteiros e seus respectivos quadrados, separados por tabulações:

#include "stdio.h" #include "math.h" #include <iostream> using namespace std;

int _tmain(int argc, _TCHAR* argv[]) {

FILE *arquivo1;

arquivo1=fopen("teste.txt","w"); //Testa abertura

if(!arquivo1)

cout<<"Erro na abertura de arquivo!"<<endl; //Procede...

for(int num=0;num<=100;num++){

fprintf(arquivo1,"%d\t%d\n",num,pow(num,2)); }

(3)

int fecha_arquivo=fclose(arquivo1); if(fecha_arquivo!=0)

cout<<"Erro no fechamento de arquivo!"<<endl; return 0;

}

2.5 Biblioteca C/C++

Tendo em mente como arquivos são tratados em C/C++, segue abaixo uma lista de funções que podem ser utilizadas para o mesmo propósito. Todas elas são análogas as funções de impressão na tela.

int fputs ( const char * str, FILE * stream ); int fputc ( int character, FILE * stream );

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); int fscanf ( FILE * stream, const char * format, ... );

Muitas outras funções alem destas podem ser encontradas na referência padrão para a linguagem, que está localizada no sítio http://www.cplusplus.com.

3 Plotando grácos

Para plotar grácos utilizaremos a ferramenta xmgr, que está disponível para várias plataformas, incluindo Linux e Mac OS X, necessitando-se apenas de uma pequena alteração no Makele. Segue abaixo uma visão geral do programa depois de instalado.

Antes de começarmos, precisamos saber como os dados tem que ser escritos no arquivo (que pode ser .txt ou .dat). Eles devem estar posicionados preferencialmente em colunas, separados por espaço ou tabulações. Tendo isso em mãos, vamos adicionar estes dados no gráco.

3.1 Adicionando dados

Tendo os dados tabulados de maneira correta, basta seguir no menu "File" (colorido com roxo) e entrar no submenu "Read"->"Block Data". A seguinte janela deve aparecer:

(4)

Neste menu basta especicar o caminho do arquivo que servirá de base dos dados. Para tanto, selecione o caminho em "selection". Feito isso, chegamos a hora da verdade:

Basta então selecionar as colunas do arquivo correspondentes a cada um dos eixos. Para adicionar barras de erro, basta selecionar as colunas referentes a "E". Terminado o processo, basta clicar em "Accept". O gráco será desenhado na tela.

(5)

3.2 Scaling

Depois de adicionados os dados, o gráco ainda está determinado em [0, 1] × [0, 1]. Para exibi-lo todo, basta apertar o botão de automatic-scaling, que formatará o gráco corretamente. Tal botão é o que aparece na gura inicial circundado de azul na esquerda. Os outros botões são auto-explicativos. As setas movimentam o gráco, a lupa é responsável pelo zoom (após uma seleção com o mouse na área do gráco).

3.3 Adicionando títulos e legendas

Para adicionar títulos e legendas, basta clicar duas vezes nas áreas do gráco em vermelho e verde. Quando a janela aparecer, basta digitar o desejado nas áreas resevadas a texto. Para modicar o alfabeto utilizado, usa-se uma barra invertida acompanhada por um número. Por exemplo, para escrever caracteres em letras gregas, usa-se 8. Para o alfabeto latino, 4. Para superscrito usa-se S, subscrito s e para retornar N.

3.4 Transformações

A razão deste programa ser utilizado não é somente sua utilidade em plotar grácos. Em "Data"->"Transformations" é possível realizar várias operações com os dados presentes nos grácos, desde Splines e Tranformadas de Fourier (DFT e FFT). Estas operações são apresentadas em sistema user-friendly e não serão discutidas com detalhe aqui. Além disso, é possível fazer várias operações com os grácos, e avaliar expressões analíticas complexas.

References

[1] Referência Padrão da linguagem C/C++, http://www.cplusplus.com [2] Referência Padrão do xmgr, http://plasma-gate.weizmann.ac.il/Xmgr/

Referências

Documentos relacionados

O ponto de partida da sua obra são as estruturas antropológicas do imaginário, que se apresentam como uma classificação sistemática das «imagens arquetípicas» (imagens

Corograpliiu, Col de Estados de Geografia Humana e Regional; Instituto de A lta C ultura; Centro da Estudos Geográficos da Faculdade de Letras de Lisboa.. RODRIGUES,

Mas nem sempre a prática das aulas de educação física de forma direta ou indireta, exerce influência na composição corporal dos adolescentes analisados uma vez que foi provado,

Apenas a paixão de Frey re pela descrição e pelo detalhe, colocada a serv iço de uma empresa tão árdua quanto apresentar um painel da formação da família e da sociedade

NOME DO MEDICAMENTO VETERINÁRIO Evalon suspensão e solvente para spray oral para galinhas.. COMPOSIÇÃO QUALITATIVA E QUANTITATIVA

De acordo com a morfologia interna visualizada nas radiografias, as sementes foram classificadas em quatro categorias: sementes perfeitas, sementes com pequenos danos (menos

Equipamentos de emergência imediatamente acessíveis, com instruções de utilização. Assegurar-se que os lava- olhos e os chuveiros de segurança estejam próximos ao local de

Com base nesse princípio, o relator decidiu por bem não aceitar o pedido de atuação do Amicus Curiae, tendo concluído encontrar-se o processo suficientemente