// Programación en C++ para Ingenieros, Ed. Thomson Paraninfo, 2006 // Capítulo 10: Ficheros // Inclusión de librerías #include <iostream> #include <fstream> #include <stdlib.h> using namespace std; // Declaración tipos typedef struct{ char simbolo[4]; float posX, posY, posZ; }molecula; void leerXYZ(int& numAtomos, molecula* mol) { int i; ifstream fichero; char linea[250]; fichero.open("graphite.xyz"); if (!fichero) { cout << "No puedo abrir el fichero" << endl; exit(1); } // Cabecera fichero >> numAtomos; // Leemos el resto de la línea fichero.getline(linea, 249); // Leemos los comentarios fichero.getline(linea, 249); cout << numAtomos << endl << linea << endl; // Primero reservamos el espacio mol = new molecula[numAtomos]; // Leemos los átomos for (i = 0; i < numAtomos; i++) { fichero >> mol[i].simbolo; fichero >> mol[i].posX >> mol[i].posY >> mol[i].posZ; } } int main(void) { int numAtomos, i; molecula* mol; leerXYZ(numAtomos, mol); for (i = 0; i < numAtomos; i++) { cout << mol[i].simbolo << " " << mol[i].posX << " "; cout << mol[i].posY << " " << mol[i].posZ << endl; } return 0; } void escribirXYZ(int nAtomos, molecula* mol, char* descrip) { int i; ofstream fichero; fichero.open("molecula.xyz"); if (!fichero) { cout << "No puedo abrir el fichero" << endl; exit(1); } // Escribimos la cabecera, el número de átomos // y la descripción fichero << nAtomos << endl; fichero << descrip << endl; // Escribimos los átomos for (i = 0; i < nAtomos; i++) { fichero << mol[i].simbolo << " "; fichero << mol[i].posX << " "; fichero << mol[i].posY << " "; fichero << mol[i].posZ << endl; } }