Tipos de Datos y Funciones de Las Bibliotecas en C++
Tipos de Datos y Funciones de Las Bibliotecas en C++
Tipos de Datos y Funciones de Las Bibliotecas en C++
y tipos derivados. Los tipos de datos fundamentales. Tipo entero: representa nmeros enteros con o sin signo, que estarn compuestos por los dgitos del 0 al 9, pudiendo ser precedidos por los signos + o -. La estructura seria la siguiente: int nombre_variable = valor; Por ejemplo: int edad = 24; Tipo real: Se emplean para representar nmeros reales (con decimales). Para definir datos reales se antepone la palabra reservada float al identificador de la variable La estructura seria la siguiente: float identificador = valor; Por ejemplo: float numero3 = 123.43; Tipo carcter: Este tipo de datos se emplea para representar un carcter perteneciente a un determinado cdigo utilizado por el ordenador (normalmente el cdigo ASCII). Para representar este tipo de dato se antepone la palabra reservada char al identificador de la variable Estructura Char identificador = valor; Por ejemplo: char letra=a; Tipo cadena de caracteres: una cadena de caracteres es un nmero de caracteres consecutivos (incluso ninguno) encerrado entre unos delimitadores determinados, que en el lenguaje C son las comillas dobles. Para definir variables de tipo cadena, estas se definen como vectores de caracteres, esto es, anteponiendo la palabra reservada char al identificador de la variable, y despus entre corchetes la longitud mxima de cadena.
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 Estructura Char identificador[cantidad] = mensaje ; Por ejemplo: char cadena[20] = Hola mundo; En la siguiente tabla se hace un resumen de los distintos tipos de datos:
Ejemplo Int numero=0; Float numero=12.2; Char letra = a; Char palabra[10] = HOLA;
A continuacin se muestra una tabla con estos especificadores de formato dependiendo del tipo de dato a los que representan: Tipo de dato Int Float Char Char [n] Especificadores formato %d %f %c %s deComentario Entero con signo Real con signo carcter Cadena de caracteres
Tipos Datos Derivados En C existen algunos otros tipos de datos muy utilizados y que se pueden considerar derivados de los anteriores. Punteros CONCEPTO DE PUNTERO O APUNTADOR El valor de cada variable est almacenado en un lugar determinado de la memoria, caracterizado por una direccin (que se suele expresar con un nmero hexadecimal). El ordenador mantiene una tabla de direcciones as pues, un puntero es una variable que puede contener la direccin de otra variable. Por supuesto, los punteros estn almacenados en algn lugar de la memoria y tienen su propia direccin.
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 OPERADORES DIRECCIN (&) E INDIRECCIN (*) El lenguaje C dispone del operador direccin (&) que permite hallar la direccin de la variable a la que se aplica. Un puntero es una verdadera variable, y por tanto puede cambiar de valor, es decir, puede cambiar la variable a la que apunta. Para acceder al valor depositado en la zona de memoria a la que apunta un puntero se debe utilizar el operador indireccin (*). Por ejemplo, supngase las siguientes declaraciones y sentencias, int i, j, *p; // p es un puntero a int p = &i; // p contiene la direccin de i *p = 10; // i toma el valor 10 p = &j; // p contiene ahora la direccin de j *p = -2; // j toma el valor -2 Las constantes y las expresiones no tienen direccin, por lo que no se les puede aplicar el operador (&). Tampoco puede cambiarse la direccin de una variable. Los valores posibles para un puntero son las direcciones posibles de memoria. Un puntero puede tener valor 0 ARITMTICA DE PUNTEROS Como ya se ha visto, los punteros son unas variables un poco especiales, ya que guardan informacin no slo de la direccin a la que apuntan, sino tambin del tipo de variable almacenado en esa direccin. Esto implica que no van a estar permitidas las operaciones que no tienen sentido con direcciones de variables, como multiplicar o dividir, pero s otras como sumar o restar. Adems estas operaciones se realizan de un modo correcto, pero que no es el ordinario. As, la sentencia: p = p+1; Tabla de direcciones. Variable Direccin de memoria a b c p1 p2 p 00FA:0000 00FA:0002 00FA:0004 00FA:0006 00FA:000A 00FA:000E
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 El lenguaje C, C++ contiene numerosas funciones, cuando se emplean funciones de esta biblioteca estandar, se incrementa la transportabilidad de los programas. Las funciones estandar se dividen en grupos, todas las funciones que pertenecen al mismo grupo estan declaradas en el archivo de cabecera (aquel que dice xxx.h), la letra "h" significa header en ingls y es lo que se llama cabecera. Para incluir alguna funcin perteneciente a estas cabeceras debemos escribir lneas de cdigo como se muestra de ejemplo: #include He disenado esta tabla para que estudiemos las bibliotecas de funciones, obviamente son las que he encontrado en mis libros y sistemas. BIBLIOTECAS Y DESCRIPCIONES DE USO Nombre de Descripcion Biblioteca assert.h alloc.h ctype.h dir.h errno.h float.h limits.h math.h setjmp.h signal.h stdarg.h stdef.h stdio.h stlib.h Es proporcionar una definicion de la macro assert, que imprime un mensaje de error y aborta el programa Existen funciones para asignar, liberar memoria, u obtener informacion de bloques de memoria. Son funciones que nos permiten conocer la naturaleza de un caracter, o bien para convertir de mayusculas a minusculas y viceversa; y valores enteros a codigos ASCII. Esto permite ordenar, crear, modificar, mover y eliminar directorios Representa los numeros de error, despues que ocurre un error se puede consultar el valor de la varianble del sistema deerrno para obtener mas informacion sobre ese error. Define los limites de los tipos de coma flotante Define los limites de los diferentes tipos de enteros Contiene las funciones matematicas estandar utilizadas en C y C++ Define el tipo de jmp_buf para algunas funciones. Contiene funciones de estado. Define funciones que pueden ser llamadas con diferentes numeros de argumentos, de modo que se pueda escribir f(a) y f(a,b). Se definen algunos tipos especiales Incorporan las funciones de Entrada - Salida E/S estandar, tipos y macros Declara funciones que son utiles para diferentes propositos, en especial de busqueda y ordenacion.
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 string.h time.h Este archivo contiene funciones para manejo de cadenas de caracteres. Contiene funciones relativas a fechas y horas
Funciones Encontradas en las Bibliotecas Nombr e de # Tipo funci n 1 abs(i) int Bibliot eca a la cual Sintaxis perten ece stdlib.h int abs(int i); math.h math.h
Descripcin
Ejemplo
double Devuelve el arco angulo = acos(0.5); acos(double d); coseno de d angulo devuelto es phi/3 double asin(double d); Devuelve el arco angulo = asin(0.707); seno de d aproximadamente phi/4
4 atan(d) double
Devuelve la arco tangente de d. double Calcula el arco atan(double d); tangente del math.h angulo atan(1.0); // angulo long double argumento x. es phi/4 tanl(long double Requiere el d); llamado de la biblioteca complex.h double Devuelve el arco math.h atan(double d1, angulo = atan(y, x) tangente de d1/d2 double d2); Convierte la cadena s a una cantidad de doble char precisin. Requiere el llamdo de la biblioteca math.h double x; char *cad_dbl = "200.85"; ... x=atof(cad_dbl); // convierte la cadena "200.85" a valor real
6 atof(s) double
7 atoi(s) int
Convierte la cadena s a un entero. La cadena debe int atoi(const stdlib.h tener el siguiente char *cadena) formato: [espacio en blanco][signo][ddd] (siendo obligatorio
int i; char *cad_ent="123"; ... i=atoi(cad_ent); //convierte la cadena "123" al entero 123
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 los digitos decimales). Convierte la cadena s a un entero largo. La cadena debe tener el siguiente long atol(const stdlib.h formato: char *cadena); [espacio en blanco][signo][ddd] (siendo obligatorio los digitos decimales).
8 atol(s) long
long int i; char cad_ent="9876543"; ... i=atol(cad_ent); //convierte la cadena "9876543" al entero largo
Reserva memoria para una formacin de n elementos , cada malloc. uno de s bytes. h y Devuelve un stdlib.h void puntero al principio long calloc( void(pun 9 o bien *calloc(size_t n, del espacio buffer=(long *) n, s) tero) alloc.h size_t s); reservado. sizeof(long)); y Si no existente stdlib.h bastante espacio para el nuevo bloque o bien n o s es 0, calloc devuelve nulo. 1 ceil(d) 0 double ceil(double d);
*buffer calloc(40,
double
math.h
Devuelve un valor redondeado por redondeo=ceil(5.1); exceso al //redondeo es 6 siguiente entero mayor el coseno_x=cos(1.6543)
1 cos(d) double 1
1 cosh(d double 2 )
double Devuelve el cos(double d); d=1.00; math.h coseno hiperblico complex printf("d=%f.\n\n,d); de d cos(complex d); Devuelve la diferencia de double tiempo 11(hora2) difftime(time_t time.h 12(hora1) , donde hora2, time_t 11 y 12 hora1) representan el tiempo time_t inicio, clrscrl(); inicio=time(NULL); delay(5000) fin=time(NULL) print("Diferencia segundos: fin;
en %f\n",
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 transcurrido difftime(inicio,fin)); despues de un tiempo base (ver funcin time) Cierra todos los archivos y buffers y termina el exit(int programa. El valor exit(0); de u es asignado por la funcion para indicar el estado de terminacin.
1 exit(u) void 4
stdlib.h
void estado)
1 exp(d) double 5
Eleve e a la potencia d double (e=2,7182818... es exp(double d); la base del math.h complex sistema de exp(complex d) logaritmos naturales (neperianos)) math.h double fabs(double d); int *f);
de
stdio.h
Cierra el archivo f. Devuelve el valor fclose(FILE 0 si el archivo se int fclose(FILE "archivo"); ha cerrado con exito.
1 feof(f) 8
int
Determina si se ha encontrado un fin de archivo. si es stdio.h int feof(FILE *f); asi, devuelve un feof(fichen); valor distinto de cero, en otro caso devuelve 0 stdio.h int fgetc(FILE f); Lee un caracter c+fgetc(fp) del archivo f
1 fgetc(f) int 9
Lee una cadena s, 2 fegts(s, char(pun char *fgets(char stdio.h con i caracteres, fgets(caddemo, 80, fp); 0 i, f) tero) s, int s, FILE *f); del archivo f 2 floor(d) double 1 double floor(double d); Devuelve un valor redondeado por defecto al entero x=floor(6.25); // x vale 6 menor mas cercano
math.h
double Devuelve el resto resto=fmod(5.0,2.0); // resto math.h fmod(double d1, de d1/d2 (con el igual a 1.0 double d2); mismo signo que
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 d1) Abre un archivo llamado s1, del tipo s2. Devuelve un puntero al archivo. * Mo Accion do "r" Abre para lectura
Abre un archivo "w" vacio para escritura "a" Abre para escritura al final del archivo
Abre para "r+" lectura/escri tura if FILE Abre un ((corriente2=fopen("datos"," 2 fopen( file(punt *fopen(const stdio.h W+"))==NULL 3 s1, s2) ero) char *s1, const "w+ archivo vacio para printf("El archivo...no se ha char *s2) " lectura/escri abierto \n"); tura Abre para "a+" lectura y anadir Abre un archivo "rb" binario para lectura. Abre un "wb archivo " binario para escritura Abre un archivo "ab" binario para anadir Abre un "rb+ archivo " binario para lectura/escri
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 tura. Abre un archivo "wb binario para +" lectura/escri tura Abre o crea un archivo "ab binario para +" lectura/escri tura 2 fprintf(f int 4 , ...) 2 fputc(c int 5 , f) 2 fputs(s int 6 , f) int fprintf(FILE *f, const char stdio.h *formato [,arg,...]); stdio.h int fputc(int FILE *f); c, Escribe datos en el archivo f (el fprintf(f1, "El resultado es resto de los %f\n",result); argumentos Escribe caracter archivo f en un el fputc(*(p++), stdout);
Escribe una int fputs(const cadena de fputs("esto es una prueba", stdio.h char *cad, FILE caracteres en el f1); *f) archivo f Lee i2 elementos, size_t fread(void cada uno de *b, size_t t, fread(buf, strlen(msg)+1, 1, stdio.h tamano i1 bytes, size_t n, FILE flujo); desde el archivo f *f); hasta la cadena s Libera un bloque malloc. de memoria void free(void h o reservada cuyo *dir_memoria); stdlib.h principio esta indicado por p. char *cad; // asignar memoria a la cadena cad=(char *)malloc(50); ... free(cad); // liberar memoria
2 free(p) void 8
int fscanf(FILE Lee datos del *f, const char math.h archivo f ( el resto fscanf(flujo, %s%f, cad, &f); *formato, [, de los argumentos direccion,... ]); Mueve el puntero al archivo f una distancia de 1 bytes desde la int fseek(FILE *f, posicion i (i puede fseek(f1,OL,SEEK_SET); // stdio.h long desplaza, representar el ir al principio int origen); principio del archivo, la posicion actual del puntero o el fin del
3 fseek(f, int 0 l, i)
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 archivo. Notas Origen SEEK_ SET SEEK_ CUR SEEK_ END Signific ado Principi o de archivo Posicio n actual puntero Final del archivo
3 ftell(f) 1
long int
Devuelve la long int posicion actual del stdio.h ftell(fichen) ftell(FILE *f); puntero dentro del archivo f size_t fwrite(const void stdio.h *p, size_t i1, size_t i2, FILE *f); stdio.h int getc(FILE *f); Escribe i2 elementos, cada uno de tamano 1 num=fwrite(lista,sizeof(char bytes, desde la ),25,flujo); cadena s hasta el archivo f Lee un caracter del archivo f while(c=getc(fx) print } !=EOF { ("%c",c);
Lee un caracter int c; desde el stdio.h int getchar(void); while((*c=getchar()) != '\n') dispostivo de print ("%c",c); entrada estandar
Lee una cadena de caracteres 3 char(pun char *gets(char gets(s) stdio.h desde el gets(nombre); 5 tero) *cad); dispositivo de entrada estandar Determina si el argumento es alfanumerico. isalnum(int Devuelve un valor disitinto de cero si es cierto; en otro caso devuelve 0 carac=getch(); if (isalnum(carac)) print("%c letra|digito \n",carac); else printf("%c no letra|digito \n", carac);
3 isalnu 6 m(c)
int
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 alfabetico. letra\n",c); Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0. Determina si el argumento es un caracter ASCII. int c; Devuelve un valor if (isascii(c)) printf('%c es un disitinto de cero si ascii\n",c) es cierto; en otro caso devuelve 0
3 isascii( int 8 c)
3 iscntrl( int 9 c)
Determina si el argumento es un caracter ASCII de ctype. control. Devuelve if(iscntrl(c)) printf"%c es un int isacntrl(int c); h un valor distinto de caracter de control\n",c); cero si es cierto; en otro caso devuelve 0 Determina si el numero es un digito decimal. if(isdigit(c)) printf"%c es un Devuelve un valor digito\n",c); disitinto de cero si es cierto; en otro caso devuelve 0
4 isdigit( int 0 c)
Determina si el argumento es un caracter ASCII grafico (hex 0x21 if(isgraph(c)) printf"%c es ctype. 0x7e; octal 041 int isgraph(int c); un caracter imprimible(no h 176). Devuelve un espacio)\n",c); valor distinto de cero si es cierto; en otro caso devuelve 0 Determina si el argumento es ua minuscula. ctype. if(islower(c)) printf"%c es int islower(int c); Devuelve un valor h una letra minuscula\n",c); distinto de cero si es cierto; en otro caso devuelve 0 Determina si el ctype. argumento es un if(isodigit(c)) printf"%c es un int isodigit(int c); h digito octal. digito octal\n",c); Devuelve un valor
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 distinto de cero si es cierto; en otro caso devuelve 0 Determina si el el argumento es un caracter ASCII imprimible (hex 0x20 -0x7e; octal if(isprint(c)) printf("\n"c 040 -176). imprimible\n",c); Devuelve un valor distinto de cero si es cierto; en otro caso devuelve 0
4 isprint( int 4 c)
Determina si el argumento es un caracter de if(ispunct(c)) printf"%c es un ctype. puntuacion. int ispunct(int c); caracter de h Devuelve un valor puntuacion\n",c); distinto de cero si es cierto; en otro caso devuelve 0 Determina si el argumento es un espacio en blanco. isspace(int if(isspace(c)) printf"%c es Devuelve un valor un espacio\n",c); distinto de cero si es cierto; en otro caso devuelve 0
Determina si el argumento es una mayuscula. ctype. if(isupper(c)) printf"%c es int isupper(int c); Devuelve un valor h una mayuscula\n",c); distinto de cero si es cierto; en otro caso devuelve 0 Determina si el argumento es un digito ctype. hexadecimal. ifisxdigit(c)) print"%c es un int isxdigit(int c); h Devuelve un valor digito hexadecimal\n",c) distinto de cero si es cierto; en otro caso devuelve 0 math.h math.h long int Devuelve el calor long labs(long int l); absoluto de 1 ly=labs(lx); double log(double d); Devuelve logaritmo de d el hdouble natural x=10; y=log(x); lx=-51654,ly; x,y;
4 labs(l) 9 5 log(d) 0
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 5 log10(d double 1 ) math.h Devuelve el hdouble double logaritmno (en x=10; log10(double d); base 10) de d y=log10(x); x,y;
Reserva u bytes de memoria. devuelve un cadena=malloc(MAX_CHR) puntero al principio ; del espacio reservado d1 double x=2.0, y=4.0, z; la z=pow(x,y); //z sera 1.60
Escribe datos en dispositivo de salida estandar. Codi Formato go %c %d int printf(const char stdio.h %e *formato[,argum ento,...]); %f Caracter Entero Decimal Real (double o print("producto %d y %d es float), %d\n",x,y,x*y); notacion cientifica. Coma flotante Cadena de caractere s Hexadeci mal sin signo en un el putc('*',demo);
5 printf(.. int 4 .)
%s
%x
c,
Escribe un caracter en el stdio.h int putchar(int c); putchar('B'); dispositivo de salida estandar Escribe una int puts(const cadena de stdio.h puts("Desea continuar (s/n); char *cad) caracteres en el dispositivo de
5 puts(s) int 7
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 salida estandar Devuelve un entero positivo for (i=0;i<10;i++) aleatorio printf("%6d\",rand()); // visualizar 10 numeros aleatorios
5 rand( ) int 8
5 rewind( void 9 f)
stdio.h
Mueve el puntero void al principio del rewind(fx); rewind(FILE *f); archivo f Lee datos en dispositivo de entrada estandar Codi Formato go %c Caracter Enetero Decimal Hexadeci mal Entero Decimal Numero Real Octal Puntero Cadena
6 scanf(.. int 0 .)
%d
%o %p %s
6 sin(d) 1
double
math.h
double x, y; x=0.52; Devuelve el seno printf('x =%f radianes\n",x); de d y=cos(x); printf("el coseno de x =%f\n",y); Devuelve el seno y=sinh(x); hiperbolico de d Devuelve la raiz printf("%lf",sqrt(25.0); cuadrada de d visualiza 5 el de srand(semilla); //se
6 sinh(d) double 2 6 sqrt(d) double 3 6 srand( void 4 u) 6 strcmp int 5 (s1, s2)
math.h math.h
Inicializa void generador stdlib.h srand(unsigned numeros u); aleatorios string. int strcmp(const Compara h char*s1, const cadenas
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 char *s2); caracteres lexicograficamente . Devuelve un valor negativo si s1 < s2; 0 si s1 y s2 son identicas; y un valor positivo si s1 > s2 i=strcmp("abc", "abc"); resultado = i=strcmp("xy", "abc"); resultado > 0 // 0 //
Compara dos cadenas de caracteres lexicograficamente , sin diferenciar int strcmpi(const mayusculas de string. char*s1, const minusculas. v=strcmpi(s1,s2); h char *s2); Devuelve un valor negativo si s1 < s2; 0 si s1 y s2 son identicas; y un valor positivo si s1 > s2 char Copia la cadena char *s1="Pepe string. *strcpy(char s1, de caracteres s2 char h const char s2); en la cadena s1 strcpy(s2,s1); cout <<s2<< '\n'; Luis"; b[12];
6 strlen( int 8 s)
Devuelve el size_t longitud=strlen(nombre); string. numero de strlen(const char char s[81]="Cadena demo'; h caracteres de una *s); printf("La longitud de s es: cadena %d\n" strlen(s));
Pone todos los caracteres de s a c char *cad="----"; 6 strset( char(pun string. char *strset(char (excluyendo el strset (cad,'x'); // cad es 9 c, s) tero) h *cad, int c); caracter nulo del ahora xxxx final \0) Pasa la orden al sistema operativo. Devuelve cero si la orden se ejecuta correctamente; en system(dir); otro caso devuelve un valor distinto de cero, tipicamente 1. Devuelve tangente de d la y=tan(x);
string. system(comd); h
7 tan(d) 1
double
math.h
Hannsel Estuardo Cordon Ac Carnet: 0902 13 1018 7 tanh(d) double 2 math.h double tanh(double d); Devuelve la tangente a=tanh(x); hiperbolica de d Devuelve el numero de segundos transcurridos time(&hora); despues de un tiempo base designado
time.h
Convierte el valor ctype. int toascii(int c); del argumento a c=toascii(entero); h ASCII ctype. Convierte una letra c=tolower('s'); h o int tolower(int c); a minuscula convierte en 's' stdlib.h ctype. int h o c); stdlib.h toupper(int Convierte una letra c=toupper('s'); a mayuscula convierte en 'S' //c se
//c
se