Archivo de Datos
Archivo de Datos
Archivo de Datos
Definicin:
Dev-C++ es un compilador y entorno de desarrollo para C/C++
Consiste en un editor de mltiples ventanas integrado con un compilador que nos
permitir una compilacin, un enlace y una ejecucin de aplicaciones rpida y de
fcil uso.
C/C++ son lenguajes de programacin, donde c++ fue creado para extender el
lenguaje de programacin c y as dar la posibilidad de usar manipulacin de
objetos.
A diferencia de DFD que habamos visto antes de comenzar con Dev-C++, pues
no usa smbolos ( ver entrada sobre los smbolos en DFD ) as como en los
diagramas de flujo que aprendimos, si no que usa cdigos para reemplazar
aquellos smbolos, por eso es importante saber hacer un diagrama de flujo /
algoritmo, para poder realizar bien un programa en c, c++, o cualquier programa
que use lenguaje de programacin con cdigo, porque la idea sigue siendo la
mismo solo cambian los smbolos por palabras restringidas en dicho lenguaje.
Primero se debe declarar un puntero de tipo FILE para poder guardar la direccin
de memoria del archivo de texto que se quiere crear, sobrescribir o leer (segn
como se defina lo que se quiera hacer, cosa que veremos ms adelante)
Ejemplo:
# include <stdio.h>
# include <conio.h>
FILE *doc;
int main(){
doc = fopen("prueba.txt","w");
printf("ponga los nombres de los jugadores");
char jug[15];
char resp;
int n = 0;
do{
printf("\nfJugador %d : ",n);
scanf("%s",jug);
fprintf(doc,"%s \n",jug);
n++;
printf("\nIngresar nuevo jugador? (s/n)");
resp = getch();
}while( resp == 's' || resp == 'S');
fclose(doc);
return 0;
}
entrada.open("datos_empleados.txt",ios::out|ios::app);//LLAMAR EL ARCHIVO
if (entrada.fail())//PREGUNTAR SI EL ARCHIVO EXISTE
{
cout<< "ERROR AL ABRIR EL ARCHIVO"<<endl;
}
else
{
do
{
cout<<"******datos de empleados*******"<<endl;
cout<<endl;
cout<<"CODIGO: ";
cin>> codigo;
cout<<"NOMBRE: ";
cin>>nombre;
cout<<"APELLIDOS: ";
cin>>apellidos;
cout<<"SUELDO: ";
cin>>sueldo;
entrada<<codigo<<" "<<nombre<<" "<<apellidos<<"
"<<sueldo<<endl;//GUARDAR LOS DATOS
cout<<endl;
cout<<"desea continuar ingresando datos s/n"<<endl;
cin>>opc;
opc=toupper(opc);
}while (opc == 'S');
}
entrada.close();
system ("pausa");
return (0);
}
#include <fstream.h>
int main()
{
ofstream archivo("Letras.txt");
return 0;
}
El cdigo genera un alfabeto en el archivo llamado Letras.txt, ahora utilizaremos el
programa archiv06.cpp para "navegar" por el contenido del archivo y generar una
palabra amigable en pantalla:
#include <fstream.h>
int main()
{
char letra;
fstream letras("Letras.txt", ios::in|ios::out);
letras.seekg(-4, ios::end);
while(!letras.eof())
cout.put((char)letras.get());
letras.close();
return 0;
}
Declaracin de estructuras
En contra de lo que ocurre con el resto de los tipos, que estn pre-definidos en el
lenguaje. Por ejemplo, al declarar char ch; ya se sabe exactamente que cosa es
ch, en este caso hay que definir previamente el tipo. Los tipos estructura se
declaran mediante la palabra clave struct. Sera algo as como:
struct Punto;
struct Punt2 {int x; int y; int z; };
La primera sentencia es una declaracin incompleta (ver ms abajo); la segunda
es una definicin completa de una nueva clase tipo struct denominado Punt2; tiene
tres componentes perfectamente definidos (tres int: x, y, z respectivamente).
Ya hemos sealado que en C++ las estructuras son un tipo de clases; entonces, si
nos referimos a la terminologa de la POO diramos que en esta fase estamos
definiendo la clase. El conjunto de declaraciones dentro de los corchetes {...; ...; ...;
} declara los nombres y tipos de sus miembros. Los miembros pueden ser de
cualquier tipo con una excepcin:
-Un miembro no puede ser la estructura que se declara porque dara lugar a una
declaracin circular (lo definido est dentro de su definicin). Ejemplo:
struct mystr { mystr s }; // Ilegal
-Uno, o varios, de los miembros puede ser un puntero a la estructura que se est
declarando. Ejemplo:
struct mystr { mystr *ps } // Ok: Correcto
Nota: constituye la base de estructuras auto referenciadas; una tcnica de
programacin que tiene amplias posibilidades de aplicacin. Por ejemplo, listas
enlazadas y rboles
Tambin es posible que los miembros de una estructura sean a su vez estructuras
previamente definidas, dando lugar a estructuras anidadas. Por ejemplo:
struct Punto {
int x; int y;
};
struct Linea {
struct Punto p1;
struct Punto p2;
} c1;
Nota: un miembro no puede ser del tipo "funcin devolviendo...". Es decir, las
funciones no pueden ser miembros de la estructuras C (de lo contrario seran
clases). En cambio, s estn admitidos los "punteros a funcin devolviendo..." (ya
que son variables, no mtodos). Las estructuras C++ s pueden incluir funciones
miembro (de hecho son clases), adems, en C++ la palabra struct puede omitirse.
rear un objeto (instanciar la clase)
Un segundo paso es declarar una variable como perteneciente al nuevo tipo. Del
mismo modo que para declarar una variable ch como de tipo char declarbamos:
char ch;, en este caso, para declarar una variable st como estructura tipo punto se
utiliza:
struct Punto pt; // C y C++
En C++ no es necesario sealar que Punto es una estructura (suponemos que ya
lo sabe el compilador por las sentencias anteriores), de forma que si no existe
ninguna otra variable punto en el mismo mbito de nombres, no hay ambigedad y
se puede poner directamente:
Usando la terminologa de la POO diramos que estamos instanciando la clase, es
decir, creando un objeto concreto pt, con espacio en memoria, que pertenece a (es
derivado de) dicha clase. Dichos objetos s pueden ser asignados con valores
concretos en sus miembros.
Advertir que cada declaracin de (tipo de) estructura introduce un nuevo tipo,
distinto de los dems (una nueva clase), de forma que las declaraciones:
struct StA {
int i,j;
} a, a1;
struct StB {
int i,j;
} b;
Definen dos tipos de estructura distintas: StA y StB; los objetos a y b1 son del tipo
StA, pero a y b son de tipo distinto.
Desde la ptica de la POO la frase anterior se enunciara como sigue: "definen dos
clases distintas, StA y StB; los objetos a y b1 son instancias de StA, pero b lo es
de la clase StB. Por tanto, a y b son objetos de tipo distinto.
Iniciar el objeto
Un tercer paso es inicializar dicha variable. Del mismo modo que para iniciar ch se
realizaba una asignacin del tipo: ch = 'x', en este caso se utiliza la asignacin
(anloga a la de matrices):
st = { 12, 25, 3};
Los pasos 2 y 3 se pueden realizar en la misma sentencia. Por ejemplo:
struct punto st = { 12, 25, 3};
Tambin puede realizarse los tres pasos en una misma sentencia:
struct punto { int x; int y; intz; } p1 = { 12, 25, 3};
Una vez definido el nuevo tipo, pueden declararse punteros y matrices de
estructuras de dicho tipo. Por ejemplo:
struct stA { ... }; // define la estructura tipo stA
struct stA st, *pst, arst[10];
La segunda lnea declara que st es una estructura de tipo stA; que pst es un
puntero a dicho tipo, y que arst es un array de 10 estructuras tipo stA.
Como se ver a continuacin , es posible incluso declarar estructuras sin asignar
un nombre al tipo correspondiente. Por ejemplo:
struct { ... } st, *pst, arst[10];
Ejemplo
goto s;
...
s: // L.3 Etiqueta
struct s { // L.4 OK: nombres de tipo_de_estructura y etiqueta en
// espacios diferentes
int s; // L.6 OK: nombres miembro de estructura en espacio privado
float s; // L.7 ILEGAL: nombre de miembro duplicado
} s; // L.8 OK: nombre_de_estructura en espacio diferente de
// nombre de etiqueta (L.3) y de tipo_de_estructura (L4)
// En C++, esto solo es posible si s no tiene un constructor
union s { // L.11 ILEGAL: nombre duplicado con el de tipo s (L.4)
int s; // L.12 OK: nuevo espacio de miembros
float f;
} f; // L.14 OK: espacio diferente que el de miembros (ver L.8)
struct t {
int s; // L.16 OK: nuevo espacio de miembros
...
} s; // L.18 ILEGAL: nombre duplicado con el de estructura s (L8)
Libreras Estndar
Para poner un poco de orden, el Estndar C++ define la denominada Librera
Estndar
Ficheros Funcionalidad/funciones
<iomanip> Manipuladores.
<iostream> Parte del a STL que contiene los algoritmos estndar de E/S.
<iterator> Parte de la STL relacionada con iteradores ,un tipo de puntero que
permite utilizar los algoritmos de la Librera con las estructuras de
datos representadas por los contenedores.
<stdexcept> Parte de la STL relativa a las clases de las que derivan los objetos
lanzados por las excepciones ocasionadas en los algoritmos de la
propia STL y otras expresiones. Estas clases son utilizadas para
reportar errores detectados durante runtime. Los usuarios tambin
pueden utilizar excepciones para reportar errores en sus propios
programas