Conceptos Basicos en Dev C ++
Conceptos Basicos en Dev C ++
Conceptos Basicos en Dev C ++
3
INDICE
Librerias String.h 6
Estructuras (struct) 11
Manejo de struct 12
Manejo de archivos
secuenciales y directos en Dev 15
C++
4
Codigo para generar un numero aleatorio en Dev c++
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i;
for(i=0; i<5; i++)
{
printf("%d\n", rand());
}
return 0;
}
iosfwd: Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs
estndar. Por ejemplo ostream.
iostream: Parte del a STL que contiene los algoritmos estndar, es quiz la ms usada e
importante (aunque no indispensable).
Librera stdlib: Contiene los prototipos de las funciones, macros, y tipos para utilidades de uso
general.
forward_list: Esta librera es til para implementar con gran facilidad listas enlazadas simples.
Regex: Proporciona fcil acceso al uso de expresiones regulares para la comparacin de patrones.
Thread: til para trabajar programacin multihilos y crear mltiples hilos en nuestra aplicacin.
Fstream: Permite la munipulacion de archivos desde el programador, tanto leer como escribir en
ellos.
Iosfud: Contienen declaraciones adelantadas de todas las plantillas de flujo y sus typedets
estandar. 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 manupulacion de
funciones matematicas.
5
Memory: utilidades relativas a la gestion de memoria incluyendo asignadores y punteros
inteligentes.
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 generalizacion de las cadenas
alfanumericas para albergar cadenas de objetos, pues eliminan muchas de las dificultades que
generan las char.
Vector: Parted e la STL relativa a los contenedores tipo vector, una generacion de las matrices
unidimencionales.
Librera string.h
string.h es un archivo de la Biblioteca estndar del lenguaje de programacin C que contiene
la definicin de macros, constantes, funciones y tipos y algunas operaciones de manipulacin
de memoria.
Las funciones declaradas en string.h se han hecho muy populares, por lo que estn
garantizadas para cualquier plataforma que soporte C. Sin embargo, existen algunos
problemas de seguridad con estas funciones, como el desbordamiento de buffer.
6
7
Funciones de Dev para el manejo de cadenas
Una cadena en C++ es un conjunto de caracteres, o valores de tipo char, terminados con el
carcter nulo, es decir el valor numrico 0. Internamente, en el ordenador, se almacenan en
posiciones consecutivas de memoria. Este tipo de estructuras recibe un tratamiento muy
especial, ya que es de gran utilidad y su uso es continuo.
8
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>
9
#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;
}
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;
}
10
Otras Funciones tiles para operar cadenas de caracteres.
Estructura (Struct)
Al contrario que los arrays, las estructuras nos 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>,...];
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:
11
[struct] <identificador> <objeto_estructura>
[,<objeto_estructura>...];
struct Persona {
char Nombre[65];
char Direccion[65];
int AnyoNacimiento;
} Fulanito;
Este ejemplo define la estructura Persona y declara a Fulanito como un objeto de ese
tipo. Para acceder al nombre de Fulanito, por ejemplo para visualizarlo, usaremos la
forma:
cout << Fulanito.Nombre;
Manejo de estructura
Una estructura contiene varios datos. La forma de definir una estructura es haciendo uso de la
palabra clave struct. Aqui hay ejemplo de la declaracion de una estructura:
struct mystruct
{
int int_member;
double double_member;
char string_member[25];
} 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
{
...
12
} Mystruct;
La estructura misma no tiene nombre (por la ausencia de nombre en la primera linea), pero
tiene de alias "Mystruct". Entonces se puede usar as:
Mystruct variable;
Note que es una convencion, 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: podriamos tener una estructura de datos recursiva de algn tipo.
Ejemplo de una estructura :
/*
* estructura.c
*
* Julio Csar Brizuela <[email protected]> 2009
*
* para el wikilibro "Programacin en C (fundamentos)"
* bajo licencia FDL, adaptado del Dominio Pblico
*
* Nombre Miembro Tipo
* Titulo char[30]
* Artista char[25]
* Precio float
* Total Canciones int
*/
#include <stdio.h>
#include <string.h>
13
12.50, /* precio */
16 /* total canciones */
};
int main(void)
{
struct cd Cd2; /* definimos una nueva estructura llamado cd2 */
printf("\n");
printf("\n Cd 2");
printf("\n Titulo: %s ", Cd2.titulo);
printf("\n Artista: %s ", Cd2.artista);
printf("\n Total Canciones: %d ", Cd2.canciones);
printf("\n Precio Cd: %.2f ", Cd2.precio); /* el .2 que esta entre
%f
* sirve para mostrar
unicamente
* 2 decimales despues
del punto*/
return 0;
14
}
Esta funcin sirve para abrir y crear ficheros en disco. El valor de retorno es un
puntero a una estructura FILE. Los parmetros de entrada son:
1. nombre: una cadena que contiene un nombre de fichero vlido, esto
depende del sistema operativo que estemos usando. El nombre puede
incluir el camino completo.
2. modo: especifica en tipo de fichero que se abrir o se crear y el tipo de
datos que puede contener, de texto o binarios:
o r: slo lectura. El fichero debe existir.
o w: se abre para escritura, se crea un fichero nuevo o se
sobreescribe si ya existe.
o a: aadir, se abre para escritura, el cursor se situa al final del
fichero. Si el fichero no existe, se crea.
o r+: lectura y escritura. El fichero debe existir.
o w+: lectura y escritura, se crea un fichero nuevo o se
sobreescribe si ya existe.
o a+: aadir, lectura y escritura, el cursor se situa al final del
fichero. Si el fichero no existe, se crea.
o t: tipo texto, si no se especifica "t" ni "b", se asume por defecto
que es "t"
o b: tipo binario.
15
Funcin fclose:
Sintaxis:
Esta funcin sirve para comprobar si se ha alcanzado el final del fichero. Muy
frecuentemente deberemos trabajar con todos los valores almacenados en un archivo
de forma secuencial, la forma que suelen tener los bucles para leer todos los datos de
un archivo es permanecer leyendo mientras no se detecte el fin de fichero. Esta funcin
suele usarse como prueba para verificar si se ha alcanzado o no ese punto.
El valor de retorno es distinto de cero slo si no se ha alcanzado el fin de fichero. El
parmetro es un puntero a la estructura FILE del fichero que queremos verificar.
16
Funcin rewind:
Sintaxis:
int main()
{
FILE *fichero;
Funcin fgets:
Sintaxis:
Esta funcin est diseada para leer cadenas de caracteres. Leer hasta n-1 caracteres o
hasta que lea un retorno de lnea. En este ltimo caso, el carcter de retorno de lnea
tambin es ledo.
El parmetro n nos permite limitar la lectura para evitar derbordar el espacio
disponible en la cadena.
El valor de retorno es un puntero a la cadena leda, si se ley con xito, y es NULL si se
detecta el final del fichero o si hay un error. Los parmetros son: la cadena a leer, el
nmero de caracteres mximo a leer y un puntero a una estructura FILE del fichero del
que se leer.
Funcin fputs:
Sintaxis:
17
La funcin fputs escribe una cadena en un fichero. No se aade el carcter de retorno
de lnea ni el carcter nulo final.
El valor de retorno es un nmero no negativo o EOF en caso de error. Los parmetros
de entrada son la cadena a escribir y un puntero a la estructura FILE del fichero donde
se realizar la escritura.
Funcin fread:
Sintaxis:
Esta funcin est pensada para trabajar con registros de longitud constante. Es capaz
de leer desde un fichero uno o varios registros de la misma longitud y a partir de una
direccin de memoria determinada. El usuario es responsable de asegurarse de que
hay espacio suficiente para contener la informacin leda.
El valor de retorno es el nmero de registros ledos, no el nmero de bytes. Los
parmetros son: un puntero a la zona de memoria donde se almacenarn los datos
ledos, el tamao de cada registro, el nmero de registros a leer y un puntero a la
estructura FILE del fichero del que se har la lectura.
Funcin fwrite:
Sintaxis:
Esta funcin tambin est pensada para trabajar con registros de longitud constante y
forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de
la misma longitud almacenados a partir de una direccin de memoria determinada.
El valor de retorno es el nmero de registros escritos, no el nmero de bytes. Los
parmetros son: un puntero a la zona de memoria donde se almacenarn los datos
ledos, el tamao de cada registro, el nmero de registros a leer y un puntero a la
estructura FILE del fichero del que se har la lectura.
Ejemplo:
#include <stdio.h>
if(argc != 3) {
printf("Usar: copia <fichero_origen> <fichero_destino>\n");
return 1;
18
}
Funcin fprintf:
Sintaxis:
La funcin fprintf funciona igual que printf en cuanto a parmetros, pero la salida se
dirige a un fichero en lugar de a la pantalla.
Funcin fscanf:
Sintaxis:
La funcin fscanf funciona igual que scanf en cuanto a parmetros, pero la entrada se
toma de un fichero en lugar del teclado.
Funcin fflush:
Sintaxis:
Esta funcin fuerza la salida de los datos acumulados en el buffer de salida del fichero.
Para mejorar las prestaciones del manejo de ficheros se utilizan buffers, almacenes
temporales de datos en memoria, las operaciones de salida se hacen a travs del buffer,
y slo cuando el buffer se llena se realiza la escritura en el disco y se vaca el buffer. En
19
ocasiones nos hace falta vaciar ese buffer de un modo manual, para eso sirve sta
funcin.
El valor de retorno es cero si la funcin se ejecut con xito, y EOF si hubo algn error.
El parmetro de entrada es un puntero a la estructuraFILE del fichero del que se
quiere vaciar el buffer. Si es NULL se har el vaciado de todos los ficheros abiertos.
20