Buscar

Manipulação de arquivos em C++ e gráfico em Python

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal de Itajubá - Campus de Itabira
ENGENHARIA DE CONTROLE E AUTOMAÇÃO
12 de setembro de 2021
ATIVIDADE 01 - ECOI04
Larissa Gabriela Xavier Clemente - RA: 2020012414∗
E-mail: larissagxc@unifei.edu.br
Resumo— Oferecendo a oportunidade dos alunos utilizarem conceitos sobre arquivos em C/C++, programação
de funções multimodais, gráficos em Python, escrita de artigos em LaTeX, além de promover a integração entre
linguagens (C/C++ e Python), o desenvolvimento da Atividade 01, proposta pelo prof. Sandro Izidoro Carvalho,
para a turma 03 da disciplina ECOi04 - Algoritmos e Estrutura de Dados I, será apresentado o longo deste
documento.
Palavras-chave — Manipulação de Arquivos, C/C++, Python, Funções Multimodais
1 Introdução
Inseridas em um amplo campo de estudo, as fun-
ções multimodais possuem várias inflexões em sua su-
perf́ıcie, caracterizando múltiplos pontos de mı́nimo
ou máximo e, portanto, sendo definida como uma
função-objetivo, isto é, que deve ser minimizada por
um algoritmo de otimização.
A otimização, por sua vez, é definida como a
busca da melhor solução para um dado problema den-
tro de um conjunto finito ou infinito de posśıveis solu-
ções. O processo de busca pode partir de uma solução
inicial ou de um conjunto delas, realizando melhora-
mentos progressivos até chegar a um outro conjunto
que contenha uma ou todas as melhores soluções pos-
śıveis dentro do espaço de busca (OLIVEIRA, 2001).
Sem estender para o entendimento do processo
de otimização, o objetivo desta atividade é aplicar
conceitos de programação para gerar o gráfico de uma
dada função multimodal.
2 Referencial Teórico
Nesta seção, serão apresentados brevemente os
conceitos utilizados, abrangendo as áreas de manipu-
lação de arquivos em C/C++ e gráficos em Python,
bem como a integração entre essas linguagens, além
de alguns comandos básicos necessários para o desen-
volvimento da atividade.
2.1 Manipulação de Arquivos
Os arquivos – files – são, geralmente, definidos
como estruturas organizadas, armazenadas e mani-
puladas em um dispositivo de memória secundária,
sendo lidos ou escritos por um programa. Em C++,
o conceito se estende para dispositivos de entrada e
sáıda, sendo os arquivos tratados como um stream,
isto é, um fluxo de caracteres.
2.1.1 Comandos e Funções em C/C++
A partir da inclusão da biblioteca fstream, é per-
mitido o uso de comandos e funções necessários para a
leitura de um arquivo, bem como para salvar os dados
obtidos em um segundo arquivo de sáıda, conforme so-
licitado. Assim, a manipulação dos arquivos em C++,
parte da estipulação do tipo do fluxo seguido da de-
finição de uma variável qualquer para manipular esse
fluxo e, por fim, têm-se a associação de um arquivo
com a variável, através de uma função open.
Os fluxos podem ser dados como de entrada - in-
put filestream - ou de sáıda - output filestream - e as
variáveis serão declaradas a partir destes tipos, con-
forme apresentado abaixo. Vale destacar que o Có-
digo 1 não é funcional, sendo apenas um modo de
ilustrar determinadas funções de linhas de código es-
senciais para a manipulação dos arquivos.
Código 1: Comandos de fluxo para manipulação de arquivos.
1 #include <fstream > // biblioteca necess ária
2
3 ifstream arq_entrada; // declara uma vari ável
para controlar o fluxo de entrada
4 ofstream arq_saida; // declara uma vari ável
para controlar o fluxo de sa ı́da
5 arq_entrada.open("arquivo.txt"); //abre o
arquivo indicado se ele existir
6 arq_entrada.close(); // fecha o arquivo
7 arq_saida.open("arquivo2.txt"); //cria um
arquivo com este nome se ele n~ao existir
ou atualiza as informa ç~oes contidas nele
8 arq_saida.close(); // fecha o arquivo
Outros comandos e funções podem ser integra-
dos ao código para realizar a manipulação desejada,
como, por exemplo, a leitura linha a linha pelo uso
do .getline, incluso na biblioteca padrão como função
membro do objeto de entrada.
2.1.2 Comandos e Funções em Python
Com funções semelhantes às indicadas para C++,
abaixo são apresentadas as principais linhas de có-
digo necessárias para a manipulação de arquivos em
Python, sendo dispostas de forma ilustrativa.
Código 2: Comandos para manipulação de arquivos em Python
1 arql = open(’arquivo1.txt’, ’r’) #abre um
arquivo para leitura
2 cont = arql.readlines () #lê o conte údo do
arquivo
3
4 arqe = open(’arquivo2.txt’, ’w’) #abre um
arquivo para escrita
5 arqe.write() #escreve conte údo no arquivo
6
7 arquivo.close() #fecha o arquivo
O formato de arquivo denominado CSV (Comma
Separated Values) é o formato de importação e expor-
tação mais comum para planilhas e bancos de dados,
sendo utilizado para o desenvolvimento deste traba-
lho, cuja forma de leitura estará especificada a seguir:
Código 3: Leitura de arquivo de extensão .csv
1 import csv #biblioteca necess ária para
manipula ç~ao de arquivo csv
2
3 csv.reader(open("arquivo.csv", "r"),
delimiter=",") #sele ç~ao de leitor csv
antes da abertura do arquivo // o
delimitador pode variar de acordo com o
conte údo do arquivo
2.2 Gráficos em Python
Aplicados em diversas áreas de estudos, os gráfi-
cos são representações visuais de um conjunto de in-
formações facilitando a análise de dados ao proporci-
onar uma impressão mais ágil e viva do fenômeno em
questão, o que favorece a compreensão do comporta-
mento e tendência dos dados.
Dentre os diversos tipos de gráficos, têm-se a plo-
tagem de superf́ıcie – representação tridimensional de
um conjunto de dados – que descreve uma relação
funcional entre duas variáveis independentes X e Y
e uma variável dependente designada Z, ao invés de
mostrar os pontos de dados individuais, criando uma
topologia para a superf́ıcie a ser visualizada.
2.2.1 Matplotlib
OMatplotlib é uma biblioteca para a visualização
de dados em Python que apresenta uma API orien-
tada a objetos que permite a criação de gráficos em
2D de uma forma simples e com poucos comandos,
auxiliando a biblioteca matemática NumPy. A ferra-
menta disponibiliza diversos tipos de gráficos, como
em barra, em linha, em pizza, histogramas entre ou-
tras opções.
Para a criação de gráficos utiliza-se o módulo Py-
Plot e, para a plotagem 3d, é preciso importar o pa-
cote de ferramentas Mplot3d, incluso no Matplotlib.
Para utilizá-los é necessário fazer a importação:
Código 4: Importação do módulo PyPlot do Matplotlib
1 import matplotlib.pyplot as plt
Código 5: Importação do pacote de ferramentas Mplot3d
1 from mpl_toolkits import mplot3d
Existem outras maneiras de criar gráficos com
esta e outras bibliotecas do Python e, com opções
mais complexas e com outros módulos, é posśıvel criar
gráficos ainda mais sofisticados.
3 Metodologia
A atividade foi dividida em quatro tarefas:
• Tarefa 1: Implementar uma rotina em C/C++
para importar os dados do arquivo disponibili-
zado no SIGAA (nome do arquivo: arq01.txt);
• Tarefa 2: Implementar uma função multimodal
em C/C++ (Função 1) utilizando os dados do
arquivo aberto na Tarefa 1;
f(x, y) = x · y · sin (x) · sin (y) (1)
• Tarefa 3: Implementar uma rotina em C/C++
para salvar em um arquivo os dados gerados a
partir da Tarefa 2;
• Tarefa 4: Implementar uma rotina em Python
para importar os dados salvos pela rotina da Ta-
refa 3 e gerar um gráfico com esses dados.
Assim, o seu desenvolvimento está disposto em
duas etapas: sabendo que as Tarefas 1, 2 e 3 pode-
riam ser desenvolvidas em um mesmo programa, estas
serão apresentadas conjuntamente em 3.1 - Rotina em
C/C++, enquanto a Tarefa 4 estará disposta em 3.2
- Rotina em Python.
3.1 Rotina em C/C++
Seguindo os conceitos apresentados anteriormente
na seção 2, foi desenvolvido o Código 6, cujas funções
aplicadas estão devidamente comentadas para com-
preensão adequada do que foi realizado na rotina.
Código 6: Rotina em C/C++1 /*
2 Cr é ation: mercredi , 8 septembre 2021
3 Atividade 01 - ECOi04 - Tarefas 01 a 03
4 Larissa Gabriela Xavier Clemente (2020012414)
5 */
6
7 #include <fstream >
8 #include <stdlib.h>
9 #include <cmath >
10 #include <iostream >
11 using namespace std;
12
13 /*
14 * fun ç~ao para troca de vı́ rgulas para pontos
15 */
16 void trocav(char v[3])
17 {
18 int i;
19 for (i = 0; i < 3; i++)
20 {
21 if (v[i] == ’,’)
22 v[i] = ’.’;
23 }
24 }
25
26 /*
27 * fun ç~ao multimodal
28 */
29 void multimodal(double f[101][101] , double *x
, double *y)
30 {
31 for (int i = 0; i < 101; i++)
32 {
33 for (int j = 0; j < 101; j++)
34 f[i][j] = (x[i] * y[j]) * (sin(x[
i])) * (sin(y[j])); // realiza a opera ç~ao
para cada valor de x e cada valor de y,
de acordo com a fun ç~ao 1
35 }
36 }
37
38 int main()
39 {
40 double x[101], y[101];
41 double f[101][101];
42 char linha [255];
43
44 ifstream arq_entrada; // define nome do
comando para leitura de arquivos
45 ofstream arq_saida; // define nome do
comando para um arquivo de sa ı́da dos
dados
46
47 arq_entrada.open("arq01.txt"); //lê o
arquivo dado pela atividade
48
49 if (arq_entrada.is_open ())
50 {
51 int l = 0;
52 while (arq_entrada.getline(linha ,
255))
53 {
54 trocav(linha);
55 x[l] = atof(linha);
56 y[l] = atof(linha);
57 l++;
58 }
59 }
60 else
61 {
62 cout << "Impossivel abrir o arquivo."
;
63 arq_entrada.close();
64 }
65
66 multimodal(f, x, y); // implementa a fun ç~a
o para os valores de x e y do arq01.txt
67
68 arq_saida.open("resultados_funcao.csv");
// cria um arquivo .csv se n~ao houver ,
sobrescreve um arquivo de mesmo nome se j
á existir
69
70 // transfere os resultados obtidos para um
novo arquivo .csv (101 x101)
71 for (int i = 0; i < 101; i++)
72 {
73 for (int j = 0; j < 101; j++){
74 if (j==100) // evita cé lulas
vazias no arquivo dos resultados para
cada linha
75 arq_saida << f[i][j];
76 else
77 arq_saida << f[i][j] << ", "; //
uso de vı́ rgula para separar os valores
78 }
79 if (i<100)
80 arq_saida << endl; // evita linha
vazia ao final do arquivo
81 }
82
83 arq_saida.close();
84
85 return 0;
86 }
Após executar a rotina em C/C++ conforme ori-
entado, foi gerado um arquivo de extensão .csv com os
resultados para a função multimodal dada pela Fun-
ção 1, totalizando 10201 valores para f(x, y), tomado
como z, haja vista que o arquivo“arq01.txt”dado para
a realização da atividade, continha 101 valores para
x e 101 valores para y.
3.2 Rotina em Python
Tendo em mãos o arquivo“resultados funcao.csv”
com os valores necessários para o desenvolvimento da
Tarefa 4, aplica-se os conceitos apresentados anterior-
mente nas seções 2.1.2 e 2.2, realizando a rotina em
Python, demonstrada no Código 7.
Código 7: Rotina em Python
1 #Cr é ation: mercredi , 8 septembre 2021
2 #Atividade 01 - ECOi04 - Tarefa 04
3 #Larissa Gabriela Xavier Clemente
(2020012414)
4
5 from mpl_toolkits import mplot3d
6 import numpy as np
7 import matplotlib.pyplot as plt
8 import csv
9
10 #declara ç~ao dos dados
11 #linspace (s, f, n): distribui n valores
entre um ponto de partida s e um ponto de
parada f de modo uniforme.
12 x = np.linspace(6, 16, 101)
13 y = np.linspace(6, 16, 101)
14 z = np.array(list(csv.reader(open("
resultados_funcao.csv", "r"), delimiter="
,"))).astype("float") #os dados estavam
sendo lidos como string , precisando de um
comando para repassar os valores como
float
15
16 X, Y = np.meshgrid(x,y)
17 Z = z
18
19 ax = plt.axes(projection=’3d’) #define a
proje ç~ao 3d
20 ax.plot_surface(X,Y,Z, cmap = ’hot’) #plota o
gr áfico da superf ı́cie
21
22 #Informa ç~oes do gr áfico: tı́tulo e valores
para os eixos
23 ax.set_title(’Tarefa 04 - Gr áfico da Fun ç~ao
Multimodal ’)
24 ax.set_xlabel(’x’)
25 ax.set_ylabel(’y’)
26 ax.set_zlabel(’z’)
27
28 plt.show()
Durante a declaração dos dados x e y, não foi re-
alizada a leitura do arquivo“arq01.txt”, como feito na
primeira etapa desta atividade. A alternativa encon-
trada foi a aplicação da função linspace que, a partir
de um dado ponto inicial e de parada, assim como
a quantidade de valores, distribui os dados uniforme-
mente em uma matriz NumPy, ou seja, retorna nú-
meros espaçados de modo uniforme em um intervalo.
Dessa forma, a função em questão torna muito mais
prática a visualização de dados e declaração de eixos
durante a plotagem.
4 Resultados
Ao final da atividade, obteve-se a Figura 1, refe-
rente à plotagem de um gráfico 3D a partir da função
multimodal dada em Função 1.
Figura 1: Imagem gerada ao final da Atividade 01
5 Referências
3D Surface plotting in Python using Matplotlib.
ln: GeeksforGeeks. 30 abr. 2020. Dispońıvel em:
https://www.geeksforgeeks.org/3d-surface-plotting-
in-python-using-matplotlib/. Acesso em: 08 set 2021.
Arquivos. In: Bac004. Dispońıvel em:
http://bac004.wikidot.com/arquivos. Acesso em: 06
set. 2021.
CSV File Reading and Writing. In: The
Python Standard Library. Dispońıvel em:
https://docs.python.org/3/library/csv.html. Acesso
em: 09 set. 2021.
LIMA, Stefani. Visualização de dados 3D
em Python. 01 ago. 2018. Dispońıvel em:
https://stefanilima.com.br/2018/08/01/visualizacao-
de-dados-3d-em-python/. Acesso em: 11 set. 2021.
OLIVEIRA, A. C. M. Algoritmos Evolutivos
para Problemas de Otimização Numérica com
Variáveis Reais. Monografia de Exame de qua-
lificação CAP/INPE, 2001. Dispońıvel em:
http://www.lac.inpe.br/∼lorena/monografia-
alexandre.pdf. Acesso em: 11 set. 2021.

Continue navegando