FIMEE-ELECTRÓNICA, UNICA
Trabajo de investigación
Demostración
fstream
#include <fstream> // Para ofstream
#include <iostream> // Para cout
using namespace std;
int main()
{
ofstream fich("ejemplo.dat");
if (!fich)
{
cout << "Error al abrir ejemplo.dat\n";
exit(EXIT_FAILURE);
}
for (int i = 0; i < 10; ++i)
fich << i << endl;
}
Creación de objetos fstream: Puedes crear objetos fstream para trabajar con archivos. Hay tres tipos principales de objetos fstream:
-
ifstream (entrada): Para lectura de archivos.
-
ofstream (salida): Para escritura en archivos.
-
fstream (entrada/salida): Para lectura y escritura en archivos.
ofstream fich("ejemplo.dat");
ofstream es una clase que permite crear la instancia fich para escribir en un fichero. En este caso, se crea un fichero para escritura llamado "ejemplo.dat".
if (!fich){...}
Verificar si se ha creado el objeto fich. Si hay error, el operador ! devuelve true.
exit(EXIT_FAILURE);
En general, y en el marco de la asignatura, en presencia de un error al intentar abrir el fichero, se optará por dar por finalizado el programa. Otra opción podría ser volver a solicitar el nombre del fichero al usuario del programa.
fich << i << endl;
A la hora de trabajar con el fichero, la operativa es idéntica a la que se usa con cout. En este caso, el papel del objeto estándar para la salida cout se sustituye por fich, y los datos, en lugar de dirigirse hacia la consola, se almacenan en el fichero "ejemplo.dat". Nótese que basta sustituir fich por cout para visualizar el aspecto que tendrán en el archivo los datos.
functional
std::string es un tipo de dato no nativo del espacio de nombres std, que permite almacenar y manipular cadenas de caracteres.
​
-
tipo: indica el tipo de valor (int, float, etc.) devuelto por la función.
-
nombre_funcion: es el identificador usado para la función.
-
la lista de argumentos es una secuencia de declaración de parámetros separados por comas y encerrados entre paréntesis. Son los llamados parámetros formales de la función.
-
return expresion es un salto incondicional que permite evaluar una expresión y devolver su valor a la función llamante.
// Calculo de la media de dos numeros
#include <iostream>
using namespace std;
double calcula_media(double, double); // Declaracion
int main()
{
double numero1, numero2;
cout << "Introduzca el primer numero: ";
cin >> numero1;
cout << "Introduzca el segundo numero: ";
cin >> numero2;
double resultado = calcula_media(numero1, numero2); // Llamada
cout << "La media de "<< numero1 << " y " << numero2
<< " es " << resultado << ".\n";
}
// Definicion double calcula_media(double num1, double num2)
{
double media;
media = (num1+num2)/2.;
return media;
}
iomanip
​// Tabla de multiplicar
#include <iostream>
#include <iomanip> // para setw()
using namespace std;
int main()
{
cout << "Introduce valor: ";
int valor;
cin >> valor;
// Primera fila
cout << " "; // Hueco de 4 espacios
for (int i = 1; i <= valor; ++i)
{
cout << setw(4) << i;
} // Fin primera fila
cout << endl << endl;
for (int i = 1; i <= valor; ++i)
{
cout << setw(4) << i; // Primera columna
for (int j = 1; j <= valor; ++j)
{
cout << setw(4) << i*j;
}
cout << endl;
}
}
-
Bucles anidados
-
Con cierta frecuencia la solución de un problema exige el uso de bucles que están contenidos dentro de otros. Los bucles anidados pueden tener tantos niveles como se quiera.
-
La idea clave es: en cada iteración de un bucle externo, ocurren todas las iteraciones posibles de los bucles internos.
-
En el ejemplo de creación de una tabla de multiplicar es ilustrativo de este proceso. En este caso, se tienen dos bucles anidados implementados mediante for.
-
El bucle externo recorre todos los enteros en el intervalo [1, valor] usando el contador i y el interno recorre el mismo rango, pero utilizando un segundo contador j. Así, en la primera iteración del bucle externo, cuando i tiene el valor 1, el bucle interno agota todas las posibles iteraciones, con j barriendo todos los valores del rango [1, valor]. Y así sucesivamente.
-
Para visualizar por pantalla la tabla con cierta estética, se utiliza un formato para alinear correctamente las columnas. Es el objetivo de la función setw(n), que reserva al menos n espacios para el flujo de caracteres al que afecta. Necesita que se incluya el archivo de cabecera iomanip, que forma parte de la biblioteca estándar iostream.