Tutorial dev cpp 002 - criação, leitura e alteração de arquivos

1,518 views

Published on

Algoritmos e Estruturas de Dados III

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,518
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tutorial dev cpp 002 - criação, leitura e alteração de arquivos

  1. 1. Flávio Augusto de FreitasAlgoritmos e Estruturas de Dados III usando C/C++http://flavioaf.blogspot.comC/C++Tutorial 2 (usando Dev-C++ versão 4.9.9.2) 2012
  2. 2. 3.2 OBTENDO O TEMPO DECORRIDO1 INTRODUÇÃO // obtendo tempo decorrido usando difftimeEsta série de tutoriais foi escrita usando o #include <stdio.h>Microsoft Windows 7 Ultimate e o Bloodshed #include <time.h>Dev-C++ versão 4.9.9.2, que pode ser baixada emhttp://www.bloodshed.net. int main () { time_t start,end; char szInput[256];2 ENTRADA E SAÍDA DE DISCO double dif;Agora que já relembramos o uso do DevC++ e umpouquinho de linguagem C/C++, vamos ao que time(&start);realmente interessa nesse tutorial, ou seja, printf("Por favor, digite seu nome completo: ");trabalhar com arquivos em disco. gets(szInput); time(&end);Se você ainda não está familiarizado com dif = difftime(end, start);arquivos em disco, leia novamente o Tutorial 1. printf("Oi %s.n", szInput); printf("Você levou %.2lf segundos para digitar3 FUNÇÕES DE DATA E HORA seu nome.n", dif);As funções de data e hora servem para obtermos return 0;o relógio atual do computador. Usaremos essas }funções para obtermos dados de funcionamento edesempenho de nossos programas. Emalgoritmos de ordenação essa é uma medida do 4 LENDO O ARQUIVO DE DADOSdesempenho e pode ser usada para compararalgoritmos entre si. FORNECIDO NO BLOG Baixe o arquivo clicando emPor exemplo, em um algoritmo de ordenação o http://flavioaf.blogspot.com/2012/02/10000-modo mais simples é obter a hora de início antes dez-mil-numeros-inteiros.html. Salve-o na Áreada chamada à função de ordenação e depois, a de Trabalho (Desktop).hora de término. Em seguida, calculamos otempo decorrido e, assim, podemos comparar Este arquivo contém 10000 números inteirosdiversos métodos de ordenação e verificar qual é aleatórios (randômicos), dispostos em 2000o mais rápido. Ou ainda, podemos ordenar o linhas de 5 colunas cada. Cada número podemesmo conjunto de dados para diferentes variar entre 0 e 99999.algoritmos, alterando-se a quantidade de dadosem cada execução do algoritmo e depois Primeiramente, para trabalhar com esses dadoscompará-los entre si, conseguindo informações a precisaremos de um grande vetor de inteiros.respeito do desempenho dos algoritmos de acordo Infelizmente o maior inteiro sem sinal em C/C++,com a quantidade de dados a ser ordenada. Isto unsigned int, pode armazenar valores até 65535.nos permitirá, por exemplo, decidir qual Precisamos usar um tipo maior, por exemplo,algoritmo se sai melhor com determinada unsigned long int, que pode armazenar valoresquantidade de dados. até 4294967296. Este tipo usa 4 bytes de espaço em memória. São então 4 x 10000 = 40000 bytes ou 40 KB, ou ainda, pouco mais de 39 KiB.3.1 OBTENDO A HORA ATUAL// obtendo a hora local usando localtime#include <stdio.h> 4.1 LENDO E IMPRIMINDO O ARQUIVO#include <time.h> #include <cstdlib>int main () { #include <iostream> time_t rawtime; #include <time.h> struct tm * timeinfo; using namespace std; time(&rawtime); timeinfo = localtime (&rawtime); printf("Tempo local: %s", asctime(timeinfo)); const char fPath[100] = "C:"; // altere isto return 0; const char fName[20] = "10000int.txt";}
  3. 3. int main(int argc, char *argv[]) { FILE *fp; 5 ARQUIVOS COM FORMATOS int x; ESPECIAIS int n; int l; 5.1 GERANDO UM ARQUIVO time_t start; time_t end; 5.1.1 GERANDO UM A RQUIVO PARA double dif; I MPORTAÇÃO EM PLANILHA ELETRÔNICA char fFullName[200]; O programa a seguir grava um arquivo de texto struct tm *timeinfo; chamado momento.csv no disco. Digite-o no DevC++ e salve-o na sua pasta Área de Trabalho time(&start); (Desktop). strcpy(fFullName, fPath); Note que o programa usa uma vírgula entre os strcat(fFullName, fName); valores gravados. strcat(fFullName, "0"); #include <stdio.h> fp=fopen(fFullName, "rt"); // rt? Tutorial 1 #include <stdlib.h> if(fp != NULL) float momento(float f, float d) { printf("Arquivo aberto com sucesso.n"); return (f * d); else printf("Nao foi possivel abrir o } arquivo.n"); int main(void) { for(l=0;l<1000;l++) { FILE *arq; for(n=0;n<10;n++) { float d, f, m; fscanf(fp, "%d", &x); printf("%dt", x); arq = fopen(“momento.csv”,”w”); } if (arq == NULL) { } printf(“Erro ao criar o arquivo.n”); fclose(fp); exit(1); } time(&end); fprintf(arq,“%s, %sn”,”dist”,”momento”); dif = difftime(end, start); f=12.0; for (d=0.0; d <= 10.0; d = d + 0.5) { printf("nnProcessado o arquivo: %sn", m = momento(f, d); // calcula fName); fprintf(arq,“%f, %fn”,d,m); // grava printf("Local: %snn", fPath); } timeinfo = localtime(&start); fclose(arq); printf("Hora de inicio...: %s", printf(“Arquivo gravado com sucesso!n”); asctime(timeinfo)); return (0); timeinfo = localtime(&end); } printf("Hora de termino..: %sn", asctime(timeinfo)); printf("Tempo decorrido..: %f segundos nn", dif); system("PAUSE"); return EXIT_SUCCESS; }1
  4. 4. Use o BrOffice.org Calc para abrir o arquivo recém-criado momento.csv. Deixe a janela de importação como na figura abaixo e clique no botão OK. Salve a pasta de trabalho, e feche o BrOffice.org Calc. 5.1.2 GERANDO UM A RQUIVO PARA EXIBIÇÃO EM UM BROWSER Você já deve saber como criar um arquivo contendo marcas (tags) HTML para ser aberto em um browser (navegador). Se não souber, dê uma olhada em http://www.freewebs.com/aprenderhtml/. Agora verá uma adaptação do programa anterior para salvar os dados em uma tabela dentro de Ainda, o DevC++ usa um ponto no lugar de uma uma página HTML. As marcas <table> e </table> vírgula para separar a parte inteira da parte delimitam uma tabela. Dentro delas, isto é, entre decimal de um número, o que também deve ser elas, as marcas <tr> e </tr> (de table row) informado ao BrOffice.org Calc. Assim que os delimitam uma linha da tabela. Dentro de uma dados aparecerem na planilha, clique no menu linha, as marcas <td> e </td> delimitam uma Editar e escolha a opção Localizar e substituir…. célula (coluna). Você pode usar também as No campo Localizar digite . (ponto) e no campo marcas <th> e </th> para delimitar uma célula Substituir por digite , (vírgula). Use a figura de uma linha de cabeçalho da tabela com um abaixo como referência. formato diferente do corpo. O trecho abaixo mostra o código HTML para criar uma tabela com uma linha de cabeçalho e uma linha de dados, ambas com duas colunas. O parâmetro border dentro da marca <table> indica a largura desejada para a borda da tabela. <table border=”1”> <tr> <th>Dist</th> <th>Momento</th> </tr> <tr> <td>0.0</td><td>0.0</td> </tr> </table> O programa a seguir grava um arquivo de texto Clique no botão Substituir todos e depois no chamado momento.htm no disco. Digite-o no botão Fechar. DevC++ e salve-o na sua pasta Área de Trabalho (Desktop). No BrOffice.org Calc selecione os dados arrastando o mouse sobre eles, desde a célula A1 Execute o programa. Usando o atalho Meu até a célula B22. Clique no menu Inserir e Computador, localize o ícone do arquivo escolha Gráfico…. Deixe a janela Assistente de momento.htm que seu programa acabou de gráficos como na figura a seguir e clique no botão criar. Dê um duplo clique nele para abri-lo no Concluir. navegador Web padrão.2
  5. 5. Veja que os dados aparecem dentro de uma do parafuso é igual a 2 mm/volta e que a tabela. Clique com o botão direito do mouse em velocidade do motor é de 1800 rpm (lembre algum ponto da página e selecione a opção Exibir que 1800 rpm = 30 voltas por segundo), código fonte, para ver o código da página. Lembre escreva um programa em linguagem C que que esse conteúdo foi escrito pelo programa em calcule a posição (distância da origem) do linguagem C. Feche a janela de exibição do carro em 11 instantes de tempo iniciando código fonte e a janela do Navegador. com t = 0s e terminando em t = 60s e grave os pares de valores (instante de tempo, posição #include <cstdlib> do carro) em um arquivo de texto chamado #include <iostream> movimento.csv. Considere que o carro está na origem no instante t = 0s. Cada par de using namespace std; valores deve ser gravado em uma linha do arquivo e os valores devem ser separados por float momento(float f, float d) { um caractere de tabulação (ASCII 9 ou ‘t’). return (f * d); 2. Escreva outro programa que grave os valores } calculados em uma página HTML chamada movimento.htm. A página deve apresentar int main(void) { os dados dentro de uma tabela. Lembre que FILE *arq; 1800 rpm = 30 voltas por segundo. Usando o float d, f, m; BrOffice.org Calc, produza um gráfico do arq = fopen(“momento.htm”,”w”); movimento do carro no período de tempo if (arq == NULL) { considerado pelo seu programa. printf(“Erro ao criar o arquivo.n”); 3. Escreva um programa que gere um gráfico da exit(1); função x3, de forma que fique com um } aspecto parecido com a figura a fprintf(arq,”<html>nn<head>n”); seguir. O gráfico deve ser fprintf(arq,”<title>Momento</title>n”); gerado em um arquivo fprintf(arq,”</head>n<body>n”); denominado grafico.txt. No fprintf(arq,”<table border=1>n”); lugar da linha azul você deverá fprintf(arq,”<tr>n”); usar o símbolo *. A variável x fprintf(arq,”<th>Dist.</th><th>Momento</th>n”); deve variar de -8 a 8, em fprintf(arq,”</tr>n”); intervalos 2 décimos. X varia de /* fica calculando o momento e gravando */ cima para baixo no arquivo f = 12.0; gerado. Cada linha do arquivo for (d=0.0; d <= 10.0; d = d + 0.5) { gerado terá no máximo 80 colunas. Os eixos m = momento(f, d); /* calcula */ também deverão ser traçados. A dificuldade fprintf(arq,“<tr>n”); neste exercício está em ter de fazer tudo ao fprintf(arq,”<td>%f</td><td>%f</td>n”,d,m); mesmo tempo, ou seja, traçar a função, fprintf(arq,”</tr>n”); desenhar os eixos e escrever os valores junto } aos eixos nos lugares corretos só pode ser fprintf(arq,”</table>n</body>n</html>n”); realizado de forma contínua. Não há como fclose(arq); retornar e fazer cada parte em separado. Seu printf(“Arquivo gravado com sucesso!n”); código deve ser parametrizado, de tal forma system(“PAUSE”); que seja possível traçar o gráfico de qualquer return (0); função solicitada, por exemplo, x3 - x5. Se } precisar, digite a função, por exemplo, x^3 - x^5 na busca do Google para ter uma noção 6 EXERCÍCIOS de como o gráfico ficará. 1. Um carro des- liza sobre tri- 7 TERMINAMOS lhos movido Terminamos por aqui. Clique no menu Arquivo, por um para- depois clique na opção Sair. Corra para o fuso acoplado próximo tutorial. a um motor. Sabendo que o passo da rosca3

×