Sie sind auf Seite 1von 20

COLEGIO NACIONAL DE EDUCACION PROFESIONAL TECNICA.

PLANTEL AGUASCALIENTES
Mdulo: Programacin orientada a objetos.
Maestra: L.I. Yolanda Catalina Navarrete Beas.
Nombre del alumno: Alexia Valeria Hernndez Rosales.
Carrera: Informtica.
Semestre: IV.
Grupo: 410
Ciclo escolar: Febrero-Julio 2017.
Aguascalientes, Ags, a 24 de marzo de 2017
ndice

Nmeros aleatorios.

Libreras

Funciones

Manejos de extractores..

Manejo de archivos

Fuentes.
NUMEROS ALEATORIOS

Un nmero aleatorio es aquel obtenido al azar, es decir, que todo nmero tenga la misma probabilidad de ser
elegido y que la eleccin de uno no dependa de la eleccin del otro. El ejemplo clsico ms utilizado para
generarlos es el lanzamiento repetitivo de una moneda o dado ideal no trucado.

PARA QU SIRVEN?

Los nmeros aleatorios permiten a los modelos matemticos representar la realidad. En general cuando se
requiere una impredecibilidad en unos determinados datos, se utilizan nmeros aleatorios Los seres humanos
vivimos en un medio aleatorio y nuestro comportamiento lo es tambin. Si deseamos predecir el
comportamiento de un material, de un fenmeno climatolgico o de un grupo humano podemos inferir a partir
de datos estadsticos. Para lograr una mejor aproximacin a la realidad nuestra herramienta predictiva debe
funcionar de manera similar: aleatoriamente. De esa necesidad surgieron los modelos de simulacin. En la vida
cotidiana se utilizan nmeros aleatorios en situaciones tan dispares como pueden ser los juegos de azar, en el
diseo de la cada de los copos de nieve, en una animacin por ordenador, en test para localizacin de errores
en chips, en la transmisin de datos desde un satlite o en las finanzas.

CMO PUEDO GENERAR NMEROS ALEATORIOS?

La lgica nos hace pensar que las personas somos generadores aleatorios imperfectos, hay estudios que
demuestran que existen tendencias claras en los humanos para la elaboracin de secuencias sesgadas y estn
relacionadas con caractersticas personales, con los conocimientos o informaciones previas o con la edad.
Podemos aprovecharnos de situaciones reales para obtener una tabla de nmeros aleatorios, como la lista de
los nmeros de Lotera Nacional premiados a lo largo de su historia, pues se caracterizan por que cada dgito
tiene la misma probabilidad de ser elegido, y su eleccin es independiente de las dems extracciones. Mtodos
manuales, lanzamiento de monedas, lanzamientos de dados, dispositivos mecnicos, dispositivos electrnicos.
Mtodos de computacin analgica, son mtodos que dependen de ciertos procesos fsicos aleatorios, por
ejemplo, el comportamiento de una corriente elctrica. Mtodos de computacin digital, cuando se usa el
ordenador digital. Tablas de bibliotecas, son nmeros aleatorios que se han publicado; de los cuales podemos
encontrar listas en los libros de probabilidad y tablas de matemticas. Estos nmeros fueron generados por
alguno de los mtodos de computacin analgica.

CODIGO

Nmeros aleatorios en C++

Veamos un ejemplo que genere nmeros aleatorios del 1 al 20.

//Ejemplo generar numeros aleatorios del 1 al 20.


#include <iostream>
#include <cstdlib> //tiene la definicion de la funcion RAND (random)
using std::cout;
using std::endl;
using std::cin;
int main ()
{
int cantidad;
cout << "Cuantos nmeros quiere generar?" << endl;
cin >> cantidad;
for (int contador =1 ; contador <= cantidad ; contador++)
{
cout << (1 + rand() % 20); //mostramos por pantalla los numeros generados del 1 al 20
cout << endl; //salto de linea para separlos
}
return 0 ;
} //fin de main.
Veamos la lnea que nos interesa: cout << (1 + rand() % 20);
La sentencia rand() por si sola devuelve enteros entre 0 y un nmero tope de 32,767 aproximdamente. Para
limitar nuestro rango utilizamos: rand() % 20 que nos va a estar dando los enteros del 0 al 19.

Entonces antes de mandarlo al cout, le sumamos uno, para que lo que salga por pantalla sean los enteros del 1
al 20.

LIBRERIAS DE DEV

Junto con los compiladores de C y C++, se incluyen ciertos archivos llamados bibliotecas ms comnmente
libreras. Las bibliotecas contienen el cdigo objeto de muchos programas que permiten hacer cosas comunes,
como leer el teclado, escribir en la pantalla, manejar nmeros, realizar funciones matemticas, etc.

Las bibliotecas estn clasificadas por el tipo de trabajos que hacen, hay bibliotecas de entrada y salida,
matemticas, de manejo de memoria, de manejo de textos y como imaginars existen muchsimas libreras
disponibles y todas con una funcin especifica.

Nota: Existe una discusin sobre el nombre de estos archivos. Muchos personas consideran que el nombre
adecuado archivos de biblioteca, y estan en lo correcto. Sin embargo, la mayora llamamos a estos archivos
libreras, y tambin me incluyo entre estos. El error proviene del nombre en ingls, que es library. Este trmino
se traduce como biblioteca, y no como librera. De este modo a lo largo de esta seccin las llamar de
cualquiera de las dos formas, para estr mas claros.

Hay un conjunto de bibliotecas (o libreras) muy especiales, que se incluyen con todos los compiladores de C y
de C++. Son las libreras (o bibliotecas) ANSI o estndar. Tambin hay libreras que no son parte del estndar
pero en esta seccin slo usaremos algunas bibliotecas (o libreras) ANSI.

Nota 2: S que esto pinta aburrido, pero es muy til y realmente las libreras nos facilitan enormemente el
trabajo de programar. Recuerda que antes de hablar libreras y dems es necesario dominar algunos conceptos
de fundamentacin en general y otros temas importantes (ciclos, condicionales y dems) Ahora veamos
algunas libreras y como es su sintaxis.

Qu son exactamente las libreras?


En C++, se conoce como libreras (o bibliotecas) a cierto tipo de archivos que podemos importar o incluir en
nuestro programa. Estos archivos contienen las especificaciones de diferentes funcionalidades ya construidas y
utilizables que podremos agregar a nuestro programa, como por ejemplo leer del teclado o mostrar algo por
pantalla entre muchas otras ms.

Al poder incluir estas libreras con definiciones de diferentes funcionalidades podremos ahorrarnos gran
cantidad de cosas, imaginemos por ejemplo que cada vez que necesitemos leer por teclado, debamos entonces
crear una funcin que lo haga (algo realmente complejo), al poder contar con las libreras en C++, podremos
hacer uso de una gran variedad de funciones que nos facilitaran la vida y aumentarn la modularidad de
nuestros cdigos.

Las libreras no son nicamente archivos externos creados por otros, tambin es posible crear nuestras propias
libreras y utilizarlas en nuestros programas. Las libreras pueden tener varias extensiones diferentes, las ms
comunes son: .lib, .bpl, .a, .dll, .h y algunas ms ya no tan comunes.

En conclusin: Las librearas son archivos (no siempre externos) que nos permiten llevar a cabo diferentes
tareas sin necesidad de preocuparnos por cmo se hacen sino simplemente entender cmo usarlas. Las
librearas en C++ permiten hacer nuestros programas ms modulares y reutilizables, facilitando adems crear
programas con funcionalidades bastante complejas en unas pocas lneas de cdigo.

Sintaxis para declarar Libreras en C++


La declaracin de libreras, tanto en C como en C++, se debe hacer al principio de todo nuestro cdigo, antes
de la declaracin de cualquier funcin o lnea de cdigo, debemos indicarle al compilador que libreras usar,
para el saber que trminos estaran correctos en la escritura de nuestro cdigo y cules no. La sintaxis es la
siguiente: #include <nombre de la librera> o alternativamente #include "nombre de la librera". Cualquiera de
las 2 formas es vlida en C++ (no estoy seguro si en C sea vlido), ten en cuenta que siempre el nombre de la
librera debe ir entre " y " o entre < y >. En tu cdigo puedes declarar todas las libreras que quieras aunque en
realidad no tienen sentido declarar una librera que no vas a usar en tu programa, sin embargo no existe lmite
para esto.

Libreras Estandar de C++ (Standar Template Library o STL)

A continuacin pondr algunas de las libreras de uso ms comn de C++ y que forman parte de las libreras
estandar de este lenguaje.

o fstream:

Flujos hacia/desde ficheros. Permite la manipulacin de archivos desde el programar, tanto leer como escribir
en ellos.

o iosfwd:

Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estndar. Por ejemplo
ostream.

o iostream:

Parte del a STL que contiene los algoritmos estndar, es quiz la ms usada e importante (aunque no
indispensable).

o La biblioteca list:

Parte de la STL relativa a contenedores tipo list; listas doblemente enlazadas

o math:

Contiene los prototipos de las funciones y otras definiciones para el uso y manipulacin de funciones
matemticas.

o memory:

Utilidades relativas a la gestin de memoria, incluyendo asignadores y punteros inteligentes (auto_ptr).

"auto_ptr" es una clase que conforma la librera memory y permite un fcil manejo de punteros y su destruccin
automaticamente.

o Biblioteca new:

Manejo de memoria dinmica

o numeric:

Parte de la librera numrica de la STL relativa a operaciones numricas.

o ostream:

Algoritmos estndar para los flujos de salida.


o queue:

Parte de la STL relativa a contenedores tipo queue (colas de objetos).

o Librera stdio:

Contiene los prototipos de las funciones, macros, y tipos para manipular datos de entrada y salida.

o Librera stdlib:

Contiene los prototipos de las funciones, macros, y tipos para utilidades de uso general.

o string:

Parte de la STL relativa a contenedores tipo string; una generalizacin de las cadenas alfanumricas para
albergar cadenas de objetos. Muy til para el fcil uso de las cadenas de caracteres, pues elimina muchas d
elas dificultades que generan los char

o typeinfo:

Mecanismo de identificacin de tipos en tiempo de ejecucin

o
o vector:

Parte de la STL relativa a los contenedores tipo vector; una generalizacin de las matrices unidimensionales
C/C++

o forward_list

Esta librera es til para implementar con gran facilidad listas enlazadas simples.

o list

Permite implementar listas doblemente enlzadas (listas enlazadas dobles) facilmente.

o iterator

Proporciona un conjunto de clases para iterar elementos.

o regex

Proporciona fcil acceso al uso de expresiones regulares para la comparacin de patrones.

o thread

til para trabajar programacin multihilos y crear mltiples hilos en nuestra aplicacin.

Nota: Para ms informacin sobre las libreras estandar de C++ y STL puedes ingresar aqu

Cmo declarar una librera en C++?


Veamos a continuacin como se hara la declaracin de unas cuantas libreras conocidas, recuerda que ese
pueden declarar todas las libreras necesarias y siempre debe hacerse al comienzo del cdigo fuente
#include "iostream"
#include "string"
#include <math.h>
#include <conio.h>

using namespace std;

Con esto debi quedar claro, como declarar libreras C++ al interior de un cdigo fuente. Lo nico adicional, es
la lnea que dice using namespace std; esta lnea nos ayuda a declarar un espacio de nombre que evita tener
que usarlo cada que accedemos a alguna funcin especifica de una librera. Teniendo este namespace
declarado podemos llamar por ejemplo el comando cout >>, que pertenece a la librera iostream, sin embargo
sin este namespace sera std::cout >>, imagina tener que hacer esto cada vez que uses algn comando o
funcin de las libreras, sera bastante tedioso.

Acerca del namespace std


Todas las libreras estndar de C++ contienen una declaracin del espacio de nombre std, es decir que todas
las libreras que hacen parte del estndar de C++ colocan entidades dentro de este espacio de nombre.

Por esta razn cuando declaramos el uso del espacio de nombre std por medio de "using namespace std;",
podemos evitar estar escribiendo std::cout o std::cin, etc en nuestro cdigo.

El espacio de nombre std como tal no es una librera sino simplemente un namespace, por esta razn no
reemplaza la declaracin de las libreras del cdigo, simplemente facilita la escritura de ste al momento de
usar las entidades de las libreras estndar. Sin embargo si vamos a hacer uso de una o varias libreras
estndar de C++ es recomendable que declaremos el namespace std, para no tener que estar constantemente
escribiendo cosas similares a las que puse hace unas lneas como std::cin o similares, dado que nicamente se
puede acceder a la entidades de las libreras estndar por medio del espacio nombre std.

LIBRERA STRING

C pone a nuestra disposicin una librera centrada en el tratamiento de cadenas, la librera string.h, con ella
podremos realizar prcticamente cualquier tipo de operacin con cadenas. Tambin cuenta con procedimientos
para manejar memoria as que cuidado con las funciones que se invocan.

La especificacin de la librera es la siguiente:

Nombres Descripcin

Busca una direccin de memoria dada y devuelve un puntero al primero encontrado o NULL si no
memchr se ha encontrado nada.

memcmp Realiza una comparacin entre los primeros n caracteres entre dos celdas de memoria.

memcpy Copia un nmero determinado de bytes entre dos reas de memoria, no es posible solaparlas.

memmove Igual que memcpy pero con la posibilidad de solapar las reas de memoria.

memset Sobrescribe en una celda de memoria un conjunto de bytes dados.

strcat Concatena (es decir, aade) una cadena dada al final de otra.
strchr Busca un carcter dado en una cadena desde el principio.

strcmp Compara dos cadenas alfabticamente, hace distincin entre maysculas y minsculas.

strcoll Compara dos cadenas alfabticamente, no hace distincin entre maysculas y minsculas.

strcpy Copia una cadena en otra.

Devuelve la posicin del primer carcter que coincide con alguno de los caracteres de otra
strcspn cadena dada.

strerror Dado un nmero de error, devuelve la cadena con el mensaje de error.

strlen Devuelve la longitud de una cadena.

strncat Aade un nmero determinado de caracteres de una cadena al final de otra

Compara los primeros n caracteres de dos cadenas alfabticamente, hace distincin entre
strncmp maysculas y minsculas.

strncpy Copia los primeros n caracteres de una cadena en otra.

Busca y encuentra la primera ocurrencia de alguno de los caracteres de una cadena dada en
strpbrk otra.

strrchr Busca un carcter dado en una cadena desde el final.

strrev Invierte una cadena.

Devuelve la posicin del primer carcter de una cadena que no coincide con ninguno de los
strspn caracteres de otra cadena dada.

strstr Busca una cadena dentro de otra

strtok Divide una cadena en una secuencia de tokens

Transforma la cadena apuntada, colocando los primeros n caracteres de otra cadena apuntada
strxfrm (tambin copia el carcter nulo).

Funciones Asociadas al Manejo de cadenas de caracteres

Aunque C no incorpora en su definicin operadores para el manejo de cadenas de caracteres, todo compilador
de C proporciona una librera estndar (string.h) con funciones para facilitar su utilizacin. Destacar algunas de
ellas:

strcpy: La funcin strcpy se encuentra en la biblioteca <string.h> y se utiliza para copiar una cadena de
caracteres (fuente) en el lugar que ocupaba otra (destino). Esta copia es destructiva, o sea, que todos los
caracteres que estaban en la cadena destino desaparecen, aunque la cadena destino fuera ms larga que la
cadena fuente .La cadena destino se pone como primer argumento de la funcin y la cadena fuente como
segundo. Vamos a verlo con un ejemplo.
#include<stdio.h>
#include<string.h>

int main()
{
char texto1[]="corta";
char texto2[]="mediana";
char texto3[]="larguisima";

strcpy(texto2,texto1);
printf("%s\n",texto2);
strcpy(texto2,texto3);
printf("%s\n",texto2);
getch();
return 0;
}

strcat: En el programa anterior vimos que la funcin strcpy es desctructiva, pero hay otra funcin en la
librera <string.h> que copia una cadena (fuente) en otra (destino) sin destruir sta, es decir, que copia una
cadena detrs de la otra esta funcin es conocida como strcat. Vamos a hacer un ejemplo:
#include<stdio.h>
#include<string.h>
int main()
{
char texto1[]="Don Pepito";
char texto2[]=" y ";
char texto3[]="Don Jose";printf("%s\n",texto1);

strcat(texto1,texto2);
printf("%s\n",texto2);
strcat(texto1,texto3);
printf("%s\n",texto2);
getchar();
return 0;
}

strlen: esta funcin devuelve el total (entero) de caracteres que conforman una cadena (excluyendo el caracter
nulo \0). Vamos a hacer un ejemplo:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define MAXLON 80

int main(void)
{
char a[MAXLON+1];
int longitud;

clrscr();
printf ("Introduce una cadena (max. %d caracteres): ", MAXLON);
scanf("%s",&a);
longitud = strlen(a);
printf ("\nLongitud de la cadena: %d\n", longitud);
getch();
return 0;
}

strcmp: strcmp (abreviatura de ((string comparison))). La funcin strcmp recibe dos cadenas, a y b, devuelve un
entero. El entero que resulta de efectuar la llamada strcmp(a, b) codifica el resultado de la comparacin:
es menor que cero si la cadena a es menor que b,

es 0 si la cadena a es igual que b, y

es mayor que cero si la cadena a es mayor que b.

Naturalmente, menor significa que va delante en orden alfabtico, y mayor que va detrs.

#include <stdio.h>
#include <string.h>
int main()
{
char s1[6] = "Abeja";
char s2[6] = "abeja";
int i;

printf( "s1=%s\t", s1 );
printf( "s2=%s\n", s2 );

i = strcmp( s1, s2 );
printf( "s1 es " );
if( i < 0 ) printf( "menor que" );
else if( i > 0 ) printf( "mayor que" );
else printf( "igual a" );
printf( " s2\n" );

return 0;
}

Otras Funciones tiles para operar cadenas de caracteres.

No slo string.h contiene funciones tiles para el tratamiento de cadenas. En ctype.h se encuentran unas
funciones que permiten hacer cmodamente preguntas acerca de los caracteres, como si son maysculas,
minsculas, dgitos, etc:

isalnum(caracter): devuelve cierto (un entero cualquiera distinto de cero) si caracter es una letra o dgito, y falso
(el valor entero 0) en caso contrario.

isalpha(caracter): devuelve cierto si caracter es una letra, y falso en caso contrario.

isblank(caracter): devuelve cierto si caracter es un espacio en blanco o un tabulador.

isdigit(caracter) devuelve cierto si caracter es un digito, y falso en caso contrario.

isspace(caracter): devuelve cierto si caracter es un espacio en blanco, un salto de lnea, un retorno de carro, un
tabulador, etc., y falso en caso contrario.

islower(caracter): devuelve cierto si caracter es una letra minscula, y falso en caso contrario.

isupper(caracter): devuelve cierto si caracter es una letra mayscula, y falso en caso contrario.

toupper(caracter): devuelve la mayscula asociada a caracter, si la tiene; si no, devuelve el mismo caracter.

tolower(caracter): devuelve la minscula asociada a caracter, si la tiene; si no, devuelve el mismo caracter.
MANEJO DE ESTARCTORES

Cuando definimos una clase queremos mostrar las componentes de cada vector, tenemos que definir una
funcion de lectura y otra de escritura para leer y mostrar datos de este tipo. Pero ahora se acabo el definirlas ! (
igual que en el anuncio de la tele ). Para no tener que definirlas usamos la sobrecarga de insertores y
extractores. Los extractores son los churros >> y los insertores son los << . La forma de definir la sobrecarga de
insertor es: friend ostream &operator(ostream &stream, tipo_clase objeto) Se debe definir como funcion amiga
porque si no no podria acceder a las partes privadas de la clase ( es decir a los componentes del vector) y no
podria mostrar ni guardar dichas componentes. Las dos funciones devuelve un flujo con los datos para que
pueda ser utilizado por cin o cout. ostream & operator<>(istream &stream, tipo_clase &objeto) y la definicion de
la funcion tambien: istream &operator>>(istream &stream, tipo_clase &objeto) { // Aqui va el codigo return
stream; } En esta funcion pasamos objeto por referencia ( con el simbolo & ) y esto es porque como vamos a
guardar los datos en dicho objeto. Mientras ejecutemos la funcion el objeto va a contener los valores que le
metemos nosotros, pero al finalizar como es una copia del objeto original, esta se destruiria y se perderian los
valores. Todo esto, aunque parezca mentira tiene una utilidad. Sirve para que cuando nosotros ponemos en el
main cout<<< a siendo a un entero ). Las funciones sobrecargadas de insercion y extraccion no pueden
ser miembros de la clase, pueden ser como mucho funciones amigas ( para poder acceder a los datos
privadas de dicha clase ) o funciones independientes.

MANEJO DE ARCHIVOS SECUENCIALES Y DIESECTOS

Archivos de acceso secuencial

3.1. fopen

3.2. fclose

3.3. fcloseall

3.4. putc

3.5. getc

3.6. fscanf

3.7. fprintf

4. Gestin de un archivo secuencial de estructuras

5. Acceso directo a archivos

relacionado con la creacin y gestin de archivos, tanto binarios como de texto. Los archivos son una de

las ms importantes, por no decir la ms importante, de las partes de un programa, ya que nos ayudan a

almacenar datos necesarios sin que se pierdan al apagar el equipo.

Veremos muchas de las funciones de manejo de archivos, aunque no todas, pero si las ms importantes y

relevantes, as como las formas de recorrer un archivo de la cabeza a los pies.

2. Definicin de archivo

Un archivo en sentido global puede ser desde un monitor hasta una impresora, pasando por un archivo en

disco.

La idea ms comn del concepto de archivo es un conjunto de posiciones de memoria situadas en un

disco de los dispositivos externos de almacenamiento del sistema, en las cuales podemos almacenar y
recuperar informacin.

El lenguaje C nos proporciona un acceso secuencial y un acceso directo a los registros de un archivo, pero

no soporta el acceso indexado a un registro dado.

Los archivos en C los podemos clasificar, segn la informacin que contengan, en dos grupos: archivos

de texto y archivos binarios.

Los archivos de texto se caracterizan por estar compuestos por una serie de caracteres organizados en

lneas terminadas por un carcter de nueva lnea (carcter '\n'). Esto nos hace pensar en la idea de usar la

impresora como si fuese un archivo de texto.

Por otro lado, los archivos binarios constan de una secuencia de bytes. Podemos decir que cualquier

archivo que no sea de texto, ser binario.

A la hora de trabajar con archivos, tendremos que especificar antes de usarlos, si sern de texto o binarios.

Podemos establecer una segunda clasificacin de los archivos, atendiendo al modo de acceso a su

Informacin. De este modo, distinguiremos entre archivos secuenciales y archivos directos.

Los archivos de acceso secuencial se basan en el hecho de que, para acceder a una determinada posicin

de los mismos, hemos de recorrer desde el principio todas las posiciones hasta llegar a la deseada. Las

impresoras son un claro ejemplo de acceso secuencial, as como las cintas magnticas.

Con el uso de archivos de acceso directo podemos acceder de forma directa a la posicin que queramos

sin tener que pasar por las posiciones anteriores. El dispositivo de acceso directo por excelencia es el dico

magntico.

El lenguaje C trata a los archivos como punteros. En realidad un archivo es un puntero a una estructura de

nombre predefinido FILE, cuyas componentes son las caractersticas de la variable archivo declarada.

Cada archivo deber tener una estructura FILE asociada. La estructura FILE se encuentra definida en el archivo
de cabecera stdio.h, con lo cual es necesario

incluirla en todos los programas que trabajen con archivos mediante la directiva #include <stdio.h>

La forma de declarar variables de tipo FILE es la siguiente:

FILE *f, *f1, ...

Como podemos observar se trata de punteros que apuntan a estructuras de tipo FILE. En realidad lo que

ocurre con el tipo FILE, es que redefine a una estructura de la siguiente forma:

typedef struct

short level;

unsigned flags;
char fd;

unsigned char hold;

short bsize;

unsigned char *buffer, *curp;

unsigned istemp;

short token;

} FILE;

Esta estructura la podrs ver editando el archivo <stdio.h>. El programador no tendr que definirla puesto

que ya existe.

A continuacin vamos a ver las operaciones que podemos realizar con archivos secuenciales y directos.

3. Archivos de acceso secuencial

La primera operacin despus de declarar un archivo y antes de cualquier otra operacin con l es abrirlo.

3.1 # fopen

<variable_archivo> = fopen (<nombre_archivo>, <modo_acceso>);

Donde:

* variable_archivo es la variable declarada de la forma: FILE *<variable_archivo>

* nombre_archivo es el nombre que tendr el archivo en el dispositivo usado. Podr ser variable o

constante.

* modo_acceso es el modo de apertura del archivo, mediante el cual le diremos al compilador si se trata

de un archivo de texto o binario, y si vamos a leer o escribir en el archivo.

Los distintos modos de abrir un archivo son los siguientes:

Modo: Significado

r : Abre un archivo de texto para solo lectura. Si el archivo no existe, devuelve un error

w : Abre el archivo de texto para solo escritura. Si el archivo no existe, lo crea, y si existe lo machaca.

a : Abre el archivo de texto para aadir al final. Si el archivo no existe, lo crea.

r+: Abre el archivo de texto para lectura/escritura. Si el archivo no existe, da un error

w+: Abre el archivo de texto para lectura/escritura. Si el archivo no existe, lo crea, y si existe lo machaca.

a+: Abre el archivo de texto para aadir al final, con opcin de lectura. Si el archivo no existe, lo crea.

UNIVERSIDAD TECNOLOGICA NACIONAL Ctedra de Informtica I

Pgina 4 de 11

rb: Abre un archivo binario para solo lectura. Si el archivo no existe, devuelve un error

wb: Abre el archivo binario para solo escritura. Si el archivo no existe, lo crea, y si existe lo machaca.
ab: Abre el archivo binario para aadir al final. Si el archivo no existe, lo crea.

rb+: Abre el archivo binario para lectura/escritura. Si el archivo no existe, da un error

wb+: Abre el archivo binario para lectura/escritura. Si el archivo no existe, lo crea, y si existe lo machaca.

ab+: Abre el archivo binario para aadir al final, con opcin de lectura. Si el archivo no existe, lo crea.

Decir que los archivos de texto se pueden referenciar tambin como "rt", "wt", "at", "rt+", "wt+" y "at+",

pero para facilitar ms las cosas, cuando no especificamos si queremos abrir un archivo de texto o binario,

por defecto se supone que es de texto, es por ello que los modos "r", "w" y "a" se refieren a archivos de

texto.

Hemos de tener cuidado con los modos de apertura de los archivos por que al abrir con cualquier modo

"w", si ya exista el archivo, se borrar la informacin que contuviese. Si no existe, lo crear. Por el

contrario con el modo "a" tambin lo crear si no existe el archivo, pero si ya existe, aadir al final del

mismo los datos que escribamos.

Podemos saber si un archivo ha sido abierto correctamente o no. Debido a que los archivos son punteros a

estructuras tipo FILE, podemos conocer su valor al hacer que apunten a ellas. La forma de hacerlo es

comparando el puntero con la constante predefinida NULL. De esta forma, cuando el puntero valga

NULL (no apunta a ninguna variable o posicin de memoria), es porque ha habido algn problema al

abrir el archivo.

Este problema se puede deber a que no existe el archivo que intentamos abrir para lectura, que no hay

espacio suficiente en el disco al tratar de crear el archivo, que la unidad de disco no est preparada, que el

disco est daado fsicamente o que la impresora no est conectada. Veamos en ejemplo del testeo de la

existencia de un archivo de texto.

FILE *f;

es

f = fopen ("texto.txt", "r");

if (f == NULL)

printf ("Error, el archivo no existe\n");

else ...

O de esta otra manera

FILE *f;
f = fopen ("texto.txt", "r");

if (!f)

printf ("Error, el archivo no existe\n");

else ...

O bien, de forma abreviada

FILE *f;

if ((f = fopen ("texto.txt", "r")) == NULL)

printf ("Error, el ficnero no existe\n");

else ...

# fclose

<valor> = fclose (<variable_archivo>);

Donde:

* valor es el valor que nos dir si ocurre algn error cerrando el archivo. 0 indica que todo ha ido bien.

* variable_archivo es la variable declarada de la forma: FILE *<variable_archivo>

Cuando terminemos de trabajar con un archivo hemos de realizar la operacin de cierre del archivo. Si no

lo hacemos podemos ocasionar la prdida de todos los datos del mismo. Si se necesitan cerrar varios

archivos a la vez, nos podemos ahorrar varios fclose utilizando la funcion fcloseall.

3.3 # fcloseall

<numero_archivos> = fcloseall();

Donde:

* numero_archivos es una variable entera que indica el nmero de archivos cerrados, o EOF si ha

ocurrido un error.

Ahora veamos unas funciones para escribir y leer datos de un archivo de texto.

3.4 # putc

Esta funcin escribe un carcter en un archivo de texto. Devuelve un entero si la escritura es correcta. De

otra forma devuelve el valor EOF que indica que ha habido un error. Su formato es:

putc (<carcter>, <var_fich>);

Donde:

* carcter es el carcter que se desea escribir en el archivo.

* var_fich es la variable declarada como FILE.

Ejemplos:
* putc ('a', f1);

* c = 'G'; putc (c, f1);

Ni que decir tiene que cuando usemos funciones para escribir en archivos, estos tendrn que haber
sido

abiertos en modo escritura o para aadir datos.

3.5 # getc

Esta funcin lee un carcter de un archivo de texto abierto en modo lectura. Devuelve un entero si la

lectura es correcta. De otra forma devuelve el valor EOF que indica que hemos llegado al final del

archivo. Su formato es:

<carcter> = getc (<var_fich>);

UNIVERSIDAD TECNOLOGICA NACIONAL Ctedra de Informtica I

Pgina 6 de 11

Donde:

* carcter es la variable que contendr el carcter ledo del archivo.

* var_fich es la variable declarada como FILE.

Ejemplos:

* c = getc (f1);

Un ejemplo del uso de estas dos funciones sera leer todos los caracteres de un archivo de texto y

escribirlos en otro archivo de texto y por pantalla a la vez para comprobar la correcta ejecucin:

#include <stdio.h>

main ()

FILE *f_in, *f_out;

char c;

clrscr();

if ((f_in = fopen ("prueba.c", "r")) == NULL)

printf ("Error de apertura del archivo\n");

exit (1);
}

if ((f_out = fopen ("salida.c", "w")) == NULL)

printf ("Error de creacin del archivo\n");

exit (1);

do

c = getc(f_in);

putchar(c) /* escritura en pantalla */

putc(c, f_out); /* escritura en el archivo */

while (c != EOF);

fclose (f_in);

fclose (f_out);

Aparece en este ejemplo una nueva funcin, la funcin exit(). Esta funcin provoca que acabe el

programa con lo que la funcin main() devuelve un valor, en este caso el valor 1. Recordamos que
toda

funcin devuelve un valor.

3.6 # fscanf

Esta funcin trabaja de la misma manera que scanf, pero leyendo los datos formateados de un
archivo. Su

sintaxis es:

fscanf (<var_fich>, <cadena_de_control>, <lista_variables>);

Donde:

* var_fich es la variable declarada como FILE.

* cadena_de_control son las cadenas de control que se desean leer, tales como %d, %s, %f, %x,
etc...

* lista_variables son las variables que contendrn los valores de la lectura del archivo que deben

coincidir con sus respectivas cadenas de control.


Ejemplos:

* fscanf (fich, "%s%d%f", nombre, &edad, &altura);

3.7 # fprintf

Esta funcin trabaja de la misma manera que printf, pero escribiendo los datos formateados sobre un

archivo. Su sintaxis es:

fprintf (<var_fich>, <cadena_de_control>, <lista_variables>);

Donde:

* var_fich es la variable declarada como FILE.

* cadena_de_control son las cadenas de control que se desean escribir, tales como %d, %s, %f,
etc...

* lista_variables son las variables que contendrn los valores para la escritura en el archivo que
deben

coincidir con sus respectivas cadenas de control.

Ejemplos:

* fprintf (fich, "%s%d%f", nombre, edad, altura);

4. Gestin de un archivo secuencial de estructuras

Los componentes o registros de un archivo pueden ser de cualquier tipo de datos, desde tipos
bsicos

(enteros, float, char, etc...) hasta estructuras de datos.

Las operaciones en cualquiera de los casos son siempre iguales. Veamos un ejemplo de un archivo
de

estructuras:

* Apertura:

...

struct Tcli

char nombre[30];

char direccin[30];

...

};

void main()

{
FILE *f;

struct Tcli cliente;

char archivo[13];

strcpy (archivo, "cliente.dat\0");

if ((fopen(archivo, "ab") == NULL)

printf ("Error al abrir el archivo\n");

exit (1);

...

* Escritura:

fwrite (&cliente, sizeof(cliente), 1, f);

* Lectura:

fread (&cliente, sizeof(cliente), 1, f);

Las operaciones bsicas en el mantenimiento o gestin de un archivo secuencial son las siguientes:

* Comprobacin de la existencia del archivo: Se abrir el archivo en modo lectura, si no existe, se

permitir la creacin del mismo, volvindolo a abrir en modo escritura.

* Altas: Se abrir el archivo en modo aadir.

* Bajas: Utilizaremos dos archivos: el maestro y otro auxiliar. El maestro lo abriremos para lectura, y
el

auxiliar para escritura. Iremos transfiriendo todos los registros del maestro al auxiliar excepto el que

queramos borrar. A continuacin, borraremos el maestro, y asignaremos al auxiliar el nombre del

maestro.

* Modificaciones: Procederemos de igual forma que para las bajas, salvo que transferiremos todos
los

registros al auxiliar, los no modificados y el modificado. Borraremos el maestro y renombraremos el

auxiliar para darle el nombre del maestro.

* Consultas: Se abrir el archivo en modo lectura.


* Listado por pantalla: Se abrir el archivo en modo lectura. Se ir leyendo informacin mientras no
se

llegue al final del archivo.

* Listado por impresora: Utilizaremos dos archivos, el maestro y el de impresora. El primero lo

abriremos para lectura, y el segundo para escritura, del siguiente modo:

FILE *f, *fimp;

f = fopen ("clientes.dat", "r");

fimp = fopen ("prn", "w");

De tal forma que todo lo que escribamos en fimp saldr por impresora. Por tal motivo, debemos

pensar que se trata de un archivo de texto, por lo cual, usaremos funciones de escritura en archivos
de

texto.

5. Acceso directo a archivos

Ya hemos visto como acceder secuencialmente a un archivo, sin embargo tambin se puede hacer
de

forma directa.

Supongamos que tenemos definido un archivo con la siguiente estructura de registro:

struct

int codigo;

char nomart[31];

float precio;

} articulo;

FUENTES:

http://codigomaldito.blogspot.mx/2005/10/nmeros-aleatorios.html

https://www.google.com.mx/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-
8#q=LIBRERIAS+DE+dev+CODIGO&*

http://programavideojuegos.blogspot.mx/2013/05/la-libreria-stringh.html

http://paginadec.webcindario.com/old/cadenas-funciones.html

https://unefazuliasistemas.files.wordpress.com/2011/04/cplus.pdf

http://www.investigacion.frc.utn.edu.ar/tecnicasdigitales/pub/File/Archivos.pdf

Das könnte Ihnen auch gefallen