Prácticas de C++ Practica Nº 9 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante
INDICE 1.1 EJERCICIO 1: GRABANDO A DISCO CON FORMATOS.... 1 1.2 EJERCICIO 2: AGREGANDO MÁS COSAS AL FICHERO.... 2 1.3 EJERCICIO 3: LEYENDO MIS FICHEROS... 2 1.4 EJERCICIO 4: CURVA DE CARGA DE UN CONDENSADOR... 3 1.5 EJERCICIO 5: SIMULACIÓN II... 4 1.6 EJERCICIO 6: SIMULACIÓN GRÁFICA DEL SENO... 4 Introducción. Nos acercamos al final de la asignatura, lo cual significa que no podemos terminar el curso sin poder escribir todos los datos de nuestros programas en un fichero. En esta práctica va a hacer ejercicios de formatos, para escribir en ficheros de texto y poder leerlos con cualquier editor de texto, ejemplo Notepad, o incluso leerlos y graficar los datos con Excel. 1.1 Ejercicio 1: Grabando a disco con formatos. Este ejercicio consiste en hacer un programa que vaya pidiendo al usuario un nombre y la edad para ir generando un fichero que los escriba con el siguiente formato: Rafael...38 Juan...22 Ricardo...25 Carla...5 El nombre del fichero en el que desea guardar los datos también se le pide al usuario. A continuación se muestra el código del programa. Debes crear el proyecto Ejer1 y el fichero DiscoOut.cpp, en el que vas a copiar el siguiente código: // DiscoOut.cpp #include <fstream.h> #include <string.h> int main(int argc, char* argv[]) { char nombre[80],filename[80]; int edad; cout << "Nombre del fichero a grabar:"; cin >> filename; ofstream fout(filename); //abrir el fichero if (!fout) { cerr << "Error.."; return -1; fout.fill('.'); while(true){ cout << "Nombre (salir-termina):"; cin >> nombre; if ( strcmp(nombre,"salir") == 0) break; cout << "Edad:"; cin >> edad; fout.width(15); fout.setf(ios::left); fout << nombre; fout.unsetf(ios::left); fout.width(4); fout << edad << endl; //escribe datos a disco //escribe datos a disco fout.close(); cout << "Datos grabados en: " << filename << endl; return 0;
Practica Nº 09 Programación en C++ Pág. 2 El fichero generado puedes abrirlo con el Notepad o con el mismo VisualStudio y verificar que obtienes los datos con el formato establecido. 1.2 Ejercicio 2: Agregando más cosas al fichero. Modificar el programa anterior para que pida además del nombre y de la edad, la dirección y el número de teléfono y que escriba en el fichero con el siguiente formato: Carla...5..Aizkorri 84...943215678 Juan...28..Manuel Lardizabal 15...943212800 Reservar para la dirección 30 caracteres (en la escritura, no en la variable) y para el teléfono 10 caracteres. Usar como variable para el teléfono un long. Para pedir la dirección, no se puede hacer con cin, ya que éste no acepta espacios. Hay que utilizar la función getline de cin: cin.getline(char *,int n): char dir[80]; long telefono;... cout << "Direccion:"; cin.getline(dir,80);... Antes de usar getline, hay que usar la función ignore() para atrapar el enter que se queda en el buffer de entrada. Puedes compilar el programa y crear tus nuevos ficheros, los cuales puedes ver con un editor de texto. 1.3 Ejercicio 3: Leyendo mis ficheros. Este ejercicio consiste en crear un programa que te permita leer un fichero del disco, cuyo nombre lo debes pedir al usuario, y sacarlo por la consola. Para esto debes usar la función getline(..), para que puedas leer una línea completa. char tmp[120]; char filename[80]; cout << "Nombre del fichero a leer:"; cin >> filename; ifstream fin(filename,ios::in ios::nocreate);//abrir fichero if (!fin) { cerr << "Error.."; return -1; while(true) { fin.getline(tmp,120); if ( fin.eof() ) break; //termina la lectura cout << tmp << endl; fin.close(); //escribir en la consola Crea un proyecto Ejer3 y el fichero DiscoIn.cpp, en el cual copiarás el código anterior. Para ejecutarlo, puedes darle como nombre del fichero a leer el mismo DiscoIn.cpp.
Practica Nº 09 Programación en C++ Pág. 3 1.4 Ejercicio 4: Curva de Carga de un Condensador En este ejercicio se va a realizar la simulación de la curva de carga de un condensador, en un circuito RC convencional., tal como se puede ver en la figura siguiente. La fórmula de carga de un condensador es: t R*C Vc = E *(1 e ) A continuación se muestra el programa que sirve para grabar los datos de la simulación en un fichero (*.csv) del disco, el cual puede ser leído por Excel y hacer la gráfica correspondiente. Los ficheros con extension *.csv tienen los datos separados por comas. //Ficheros Escritura *.csv #include <fstream.h> #include <math.h> #include <string.h> void main() { char name[80]; double R,C,E,dt,Vc=0,t=0; cout << "Dar R(KOhm):"; cin >> R; cout << "Dar C(uF):"; cin >> C; cout << "Dar E(v):"; cin >> E; cout << "Dar dt(ms):"; cin >> dt; R *= 1e3; C *= 1e-6; dt *= 1e-3; cout << "Nombre del fichero (sin extension):"; cin >> name; strcat(name,".csv"); fstream fout(name,ios::out); fout << "Valores, R:" << R << "C:" << C << "E:" << E << endl; fout << "Time,Vc" << endl; while( Vc < E*0.9){ //10% de E Vc = E*(1-exp(-t/(R*C))); fout << t << ", " << Vc << endl; t += dt; fout.close(); cout << "File " << name << " Grabado bien. Adios "<<endl; Para completar el ejercicio, debe ejecutar Excel y tratar de cargar el fichero que acaba de crear y hacer la gráfica. Para compilar y ejecutar el programa debe crear un proyecto Ejer4 y el fichero Carga.cpp para escribir el código fuente en él. 12 10 8 6 4 2 Time Vc en 0 1 4 7 10 13 16 19 22 25
Practica Nº 09 Programación en C++ Pág. 4 1.5 Ejercicio 5: Simulación II Este ejercicio consiste en mejorar el ejercicio anterior, lo cual consiste en que el programa debe verificar primero si existe el fichero y preguntarle al usuario que el fichero elegido ya existe, si desea sobrescribirlo o ponerle un nombre nuevo. Vea el ejemplo de lo que debe salir por consola: 1.6 Ejercicio 6: Simulación Gráfica del Seno Haga un programa para que dibuje la gráfica del Seno. El programa debe pedir la amplitud y el número de ciclos que desea ver y el nombre del fichero (con la extensión.csv) para que luego pueda verlos en Excel. La gráfica a obtener puede ser algo así: Seno 6 4 2 0-2 1 5 9 131721252933374145495357616569737781 Seno -4-6