You are on page 1of 14

Echo por: Norma Isela Valenzuela Vargas

ndice:
Nmeros aleatorios

Funciones de la librera string

Manejo de archivos

Manejo de archivos secuenciales

Funciones asociadas al manejo de cadenas de


caracteres

Libreras utilizadas en dev c++

Estructuras
Numeros aleatorios
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_ELEM 16

int main(void)
{
int i;

srand((unsigned) time(NULL));

printf("Test: ");
for (i = 0; i < NUM_ELEM; i++){
printf("%d", rand() % NUM_ELEM);
printf(i == NUM_ELEM - 1 ? "\n" : " ");
}

return EXIT_SUCCESS;
}

Devuelve un nmero pseudo- aleatorio integral en el rango entre 0 y RAND_MAX .

Este nmero es generado por un algoritmo que devuelve una secuencia de nmeros aparentemente
no relacionados cada vez que se llama. Este algoritmo utiliza una semilla para generar la serie, que
debe ser inicializada a algn valor distintivo utilizando la funcin srand .

RAND_MAX es una constante definida en <cstdlib> .

Una forma tpica de generar nmeros pseudo-aleatorios triviales en un rango determinado


usando rand es usar el mdulo del valor devuelto por el intervalo de rango y agregar el valor inicial
del rango.

Funciones de la librera string.


memcpy copia n bytes entre dos reas de memoria que no deben solaparse
copia n bytes entre dos reas de memoria; al contrario que
memmove
memcpy las reas pueden solaparse
busca un valor a partir de una direccin de memoria dada y
memchr devuelve un puntero a la primera ocurrencia del valor buscado o
NULL si no se encuentra
memcmp compara los n primeros caracteres de dos reas de memoria
memset sobre escribe un rea de memoria con un patrn de bytes dado
strcat aade una cadena al final de otra
strncat aade los n primeros caracteres de una cadena al final de otra
strchr localiza un carcter en una cadena, buscando desde el principio
strrchr localiza un carcter en una cadena, buscando desde el final
strcmp compara dos cadenas alfabticamente ('a'!='A')
compara los n primeros caracteres de dos cadenas
strncmp
numricamente ('a'!='A')
strcoll compara dos cadenas segn la colacin actual ('a'=='A')
strcpy copia una cadena en otra
strncpy copia los n primeros caracteres de una cadena en otra
devuelve la cadena con el mensaje de error correspondiente al
strerror
nmero de error dado
strlen devuelve la longitud de una cadena
devuelve la posicin del primer carcter de una cadena que no
strspn
coincide con ninguno de los caracteres de otra cadena dada
devuelve la posicin del primer carcter que coincide con alguno
strcspn
de los caracteres de otra cadena dada
encuentra la primera ocurrencia de alguno de los caracteres de
strpbrk
una cadena dada en otra
strstr busca una cadena dentro de otra
strtok parte una cadena en una secuencia de tokens
strxfrm transforma una cadena en su forma de colacin (??)
strrev invierte una cadena

Manejo de archivos
El archivo de cabecera fstream.h define las
clases ifstream, ostream y fstream para operaciones de lectura, escritura y
lectura/escritura en archivos respectivamente. Para trabajar con archivos debemos
crear objetos de stas clases de acuerdo a las operaciones que deseamos efectuar.
Empezamos con las operaciones de escritura, para lo cual bsicamente declaramos
un objeto de la clase ofstream, despus utilizamos la funcin miembro open para
abrir el archivo, escribimos en el archivo los datos que sean necesarios utilizando el
operador de insercin y por ltimo cerramos el archivo por medio de la funcin
miembro close, ste proceso est ilustrado en nuestro primer
programa, archiv01.cpp.

#include <fstream.h>

int main()
{
ofstream archivo; // objeto de la clase ofstream
archivo.open("datos.txt");

archivo << "Primera lnea de texto" << endl;


archivo << "Segunda lnea de texto" << endl;
archivo << "ltima lnea de texto" << endl;

archivo.close();
return 0;
}

En el programa se ha creado un objeto de la clase ofstream llamado archivo,


posteriormente se utiliza la funcin miembro open para abrir el arcivo especificado
en la cadena de texto que se encuentra dentro del parntesis de la funcin.
Podemos invocar a la funcin constructora de clase de tal manera que el archivo
tambin se puede abrir utilizando la siguiente instruccin:

ofstream archivo("datos.txt"); // constructora de ofstream

#include<iostream>
#include<fstream>//LIBRERIA PARA MANEJAR ARCHIVOS
#include<string>
#include<windows.h>
using namespace std;
ofstream entrada; //OBJETO O VARIABLE PARA CREAR EL ARCHIVO
int main()
{
//VARIABLES USADOS PARA INGRESAR Y GUARDAR LOS DATOS
string nombre, apellidos;
int codigo, sueldo;
char opc;
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);
}

Archivos secuenciales
En estos archivos, la informacin slo puede leerse y escribirse empezando desde
el principio del archivo.

Los archivos secuenciales tienen algunas caractersticas que hay que tener en
cuenta:

1. La escritura de nuevos datos siempre se hace al final del archivo.


2. Para leer una zona concreta del archivo hay que avanzar siempre, si la zona
est antes de la zona actual de lectura, ser necesario "rebobinar" el archivo.
3. Los ficheros slo se pueden abrir para lectura o para escritura, nunca de los
dos modos a la vez.

Esto es en teora, por supuesto, en realidad C no distingue si los archivos que


usamos son secuenciales o no, es el tratamiento que hagamos de ellos lo que los
clasifica como de uno u otro tipo.

Pero hay archivos que se comportan siempre como secuenciales, por ejemplo los
ficheros de entrada y salida estndar: stdin, stdout, stderr y stdaux.

Tomemos el caso de stdin, que suele ser el teclado. Nuestro programa slo podr
abrir ese fichero como de lectura, y slo podr leer los caracteres a medida que
estn disponibles, y en el mismo orden en que fueron tecleados.

Lo mismo se aplica para stdout y stderr, que es la pantalla, en estos casos slo se
pueden usar para escritura, y el orden en que se muestra la informacin es el mismo
en que se enva.

Un caso especial es stdaux, que suele ser el puerto serie. Tambin es un archivo
secuencial, con respecto al modo en que se leen y escriben los datos. Sin embargo
se un fichero de entrada y salida.

Trabajar con archivos secuenciales tiene algunos inconvenientes. Por ejemplo,


imagina que tienes un archivo de este tipo en una cinta magntica. Por las
caractersticas fsicas de este soporte, es eviente que slo podemos tener un fichero
abierto en cada unidad de cinta. Cada fichero puede ser ledo, y tambin sobrescrito,
pero en general, los archivos que haya a continuacin del que escribimos se
perdern, o bien sern sobreescritos al crecer el archivo, o quedar un espacio
vaco entre el final del archivo y el principio del siguiente.

Lo normal cuando se quera actualizar el contenido de un archivo de cinta aadiendo


o modificando datos, era abrir el archivo en modo lectura en una unidad de cinta, y
crear un nuevo fichero de escritura en una unidad de cinta distinta. Los datos ledos
de una cinta se editan o modifican, y se copian en la otra secuencialmente.
Cuando trabajemos con archivos secuenciales en disco haremos lo mismo, pero en
ese caso no necesitamos dos unidades de disco, ya que en los discos es posible
abrir varios archivos simultaneamente.

En cuanto a las ventajas, los archivos secuenciales son ms sencillos de manejar,


ya que requieren menos funciones, adems son ms rpidos, ya que no permiten
moverse a lo largo del archivo, el punto de lectura y escritura est siempre
determinado.

En ocasiones pueden ser tiles, por ejemplo, cuando slo se quiere almacenar
cierta informacin a medida que se recibe, y no interesa analizarla en el momento.
Posteriormente, otro programa puede leer esa informacin desde el principio y
analizarla. Este es el caso de archivos "log" o "diarios" por ejemplo, los servidores
de las pginas WEB pueden generar una lnea de texto cada vez que alguien
accede al una de las pginas y las guardan en un fichero secuencial.

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 carcter 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(carcter): devuelve cierto (un entero cualquiera distinto de cero) si


carcter es una letra o dgito, y falso (el valor entero 0) en caso contrario.
isalpha(carcter): devuelve cierto si carcter es una letra, y falso en caso
contrario.
isblank(carcter): devuelve cierto si carcter es un espacio en blanco o un
tabulador.
isdigit(carcter): devuelve cierto si carcter es un digito, y falso en caso
contrario.
isspace(carcter): devuelve cierto si carcter es un espacio en blanco, un
salto de lnea, un retorno de carro, un tabulador, etc., y falso en caso
contrario.
islower(carcter): devuelve cierto si carcter es una letra minscula, y falso
en caso contrario.
isupper(carcter): devuelve cierto si carcter es una letra mayscula, y falso
en caso contrario.
toupper(carcter): devuelve la mayscula asociada a carcter, si la tiene; si
no, devuelve el mismo carcter.
tolower(carcter): devuelve la minscula asociada a carcter, si la tiene; si
no, devuelve el mismo carcter.

Libreras utilizadas en dev c++:


Fstream: Permite la manipulacin de archivos desde el programador, tanto
leer como escribir en ellos.
Iosfud: Contienen declaraciones adelantadas de todas las plantillas de flujo
y sus typedets estndar. Por ejemplo: Ostream
Iostream:
List: Parte de la STL relativa a los contenedores tipo list, lista doblemente
enlazada.
Math: contiene los prototipos de las funciones, otras definiciones para el uso
y manipulacin de funciones matemticas.
Memory: utilidades relativas a la gestin de memoria incluyendo asignadores
y punteros inteligentes.
New: Manejo de memoria dinmica
Numeric: Parte de la librera numrica de la STL relativa a operaciones
numricas.
Ostream: Algoritmos estndar para los flujos de salida
Queve: Parte de la STL relativa a contenedores tipoqueve (Colas de Objeto)
Studio: Contiene los prototipos de las funciones macros, para para utilidades
de uso general.
String: Parte de la STL relativa a contenedores tipo string, una
generalizacin de las cadenas alfanumricas para albergar cadenas
de objetos, pues eliminan muchas de las dificultades que generan las char.
Typcinto: Mecanismo de identificacin de tipo en tiempo de ejecucin.
Vector: Parte de la STL relativa a los contenedores tipo vector, una
generacin de las matrices unidimensionales.

Estructuras
Al contrario que los arrays, las estructuras le permiten agrupar varios datos, que
mantengan algn tipo de relacin, aunque sean de distinto tipo, permitiendo
manipularlos todos juntos, usando un mismo identificador, o cada uno por separado.

Las estructuras son llamadas tambin muy a menudo registros, o en ingls records.
Tienen muchos aspectos en comn con los registros usados en bases de datos. Y
siguiendo la misma analoga, cada objeto de una estructura se denomina a menudo
campo, o field.
Sintaxis:

struct [<identificador>] {
[<tipo> <nombre_objeto>[,<nombre_objeto>,...]];
} [<objeto_estructura>[,<objeto_estructura>,...];

El identificador de la estructura es un nombre opcional para referirse a la estructura.


Los objetos de estructura son objetos declarados del tipo de la estructura, y su
inclusin tambin es opcional. Sin bien, an siendo ambos opcionales, al menos
uno de estos elementos debe existir.
En el interior de una estructura, entre las llaves, se pueden definir todos los
elementos que consideremos necesarios, del mismo modo que se declaran los
objetos.
Las estructuras pueden referenciarse completas, usando su nombre, como
hacemos con los objetos que ya conocemos, y tambin se puede acceder a los
elementos definidos en el interior de la estructura, usando el operador de seleccin
(.), un punto.
Una vez definida una estructura, es decir, si hemos especificado un nombre para
ella, se puede usar igual que cualquier otro tipo de C++. Esto significa que se
pueden declarar ms objetos del tipo de estructura en cualquier parte del programa.
Para ello usaremos la forma normal de declaracin de objetos, es decir:

[struct] <identificador> <objeto_estructura>


[,<objeto_estructura>...];

Las estructuras nos ayudan a agrupar datos de una manera ms ordenada y fcil
para nosotros.

#include<iostream>
using namespace std;
struct contacto{
int edad;
int numero;
char nombre[30];
};
int main()
{
struct contacto Amigo;
cout << "Ingrese Nombre: ";
cin >> Amigo.nombre;
cout << "Ingrese Edad: ";
cin >> Amigo.edad;
cout << "Ingrese Numero: ";
cin >> Amigo.numero;
cout << "\nNombre: " << Amigo.nombre << "\nEdad: " << Amigo.edad <<
"\nNumero de Telefono: " << Amigo.numero << endl;
return 0;
}
Una estructura contiene varios datos. La forma de definir una estructura es
haciendo uso de la palabra clave struct. Aqu hay ejemplo de la declaracin de
una estructura:

struct mystruct
{
int int_member;
double double_member;
char string_member[25];
} variable;

"variable" es una instancia de "mystruct" y no es necesario ponerla aqu. Se podra


omitir de la declaracin de "mystruct" y ms tarde declararla usando:

struct mystruct variable;

Tambin es una prctica muy comn asignarle un alias o sinnimo al nombre de la


estructura, para evitar el tener que poner "struct mystruct" cada vez. C nos permite
la posibilidad de hacer esto usando la palabra clave typedef, lo que crea un alias a
un tipo:

typedef struct
{
...
} Mystruct;

La estructura misma no tiene nombre (por la ausencia de nombre en la primera


lnea), pero tiene de alias "Mystruct". Entonces se puede usar as:
Mystruct variable;

Note que es una convencin, y una buena costumbre usar mayscula en la primera
letra de un sinnimo de tipo. De todos modos lo importante es darle algn
identificador para poder hacer referencia a la estructura: podramos tener una
estructura de datos recursiva de algn dato.

You might also like