Documente Academic
Documente Profesional
Documente Cultură
H
C++ propone una solucin muy interesante al tratar las operaciones de entrada-salida
(E/S) no como una funcin, sino como una clase que implementa una gran capacidad de
formatos para entrada y salida de datos, de sta manera el programador C++ toma slo las
carctersticas que el trabajo requiere. Aunque no hemos definido qu es una clase, tenga en
cuenta que en C++ las operaciones de E/S estn definidas en una clase, ste es un punto
importante. Existen cuatro flujos de E/S (iostreams) predefinidos:
cin, asociado al dispositivo de entrada estndar.
cout, asociado al dispositivo de salida estndar.
cerr, asociado al dispositivo de error estndar.
clog, salida almacenada temporalmente para el dispositivo de error estndar.
Tomando en cuenta lo dicho estamos en condicin de escribir un el programa para
utilizando los flujos de E/S, de sta manera ya no necesitamos el archivos de otras cabeceras
si no el por el archivo iostream.h que nos permite utilizar los flujos de E/S
//******************************************
// entsal.cpp
//******************************************
#include <iostream.h>
int main()
{
float corriente, voltaje, resistencia; // tres variables
cout << "Este programa calcula volaje de acuerdo a la ley de Ohm\n";
cout << "Valor de la corriente, en amperes?\n";
cin >> corriente;
cout << "Valor de la resistencia, en ohms?\n";
cin >> resistencia;
voltaje=corriente*resistencia; // calculo de voltaje
cout << "El valor del voltaje es de " << voltaje << " voltios\n";
return 0;
}
Manipuladores bsicos
En el siguiente programa, manipu01.cpp, se demuestra el uso de los manipuladores bsicos
oct, hex, y dec. El programa inicia solicitndole introducir un nmero, mismo que se almacena
en la variable de tipo int llamada numero, en forma predeterminada, el sistema despliega los
valores numricos utilizando la base 10, esto se demuestra en el primer mensaje desplegado
por el programa en la lnea 14. Enseguida se utiliza el operador de insercin (<<) para
introducir el manipulador oct que cambia la base para despliegue numrico a octal por lo que
el valor contenido en la variable llamada numero se despliega en pantalla en su equivalente
de base 8. Observe que el contenido de la variable no ha cambiado, solo se modifica la forma
para desplegar un valor numrico en el dispositivo estndar de salida.
// manipu01.cpp
//*********************************************************
#include <iostream.h>
int main()
{
int numero;
cout <<"Introduzca un numero" << endl;
cin >> numero;
cout <<"El numero introducido en base decimal es: "
<< numero << endl;
cout << oct; // Ahora trabajamos en base octal
cout << "Cambiando a base octal el numero introducido se "
"despliega asi: " << numero << endl;
cout << hex; // Trabajamos en base hexadecimal
cout << "El mismo numero en base hexadecimal es: ";
cout << numero << endl;
cout << "Introduzca otro numero" << endl;
cin >> numero;
cout << "El numero es: " << numero << endl;
cout << dec; // Restituimos la base predeterminada
return 0;
}
De manera similar se utiliza el operador de insercin para introducir ahora el modificador hex
que sirve para cambiar el despliegue numrico a base 16 hexadecimal, entonces el
programa muestra el valor almacenado en numero pero representado en base 16. Cuando
utilizamos los manipuladores oct hex le indicamos al sistema la base numrica que
deseamos para representar nuestros valores numricos, una vez cambiada la representacin
numrica, sta permanece hasta que especifiquemos una nueva base hasta que
apaguemos el sistema, para demostrar sta situacin, en la parte final del programa se le
solicita introducir otro nmero, observar que el despliegue en pantalla parece no coincidir con
el nmero introducido, ste fenmeno sucede porque estamos acostumbrados a pensar en
trminos generales, utilizando la base 10, pero con un anlisis ms cuidadoso encontramos
que no existe error alguno, sencillamente el programa despliega los valores numricos
utilizando el ltimo modificador especificado, que en ste caso es de tipo hexadecimal. El
programa termina utilizando una vez ms el operador de insercin para especificar la base 10
como la deseada para representar los valores numricos en el dispositivo estndar de salida.
EL ARCHIVO IOMANIP.H
Empezamos estudiando el manipulador setw(), ya sea que se utilice con flujos de entrada
(istream) flujos de salida (ostream) establece el ancho de campo al valor especificado dentro
del parntesis del manipulador como se demuestra en el programa manipu02.cpp.
//*********************************************************
// manipu02.cpp
//*********************************************************
#include <iostream.h> // para operaciones de E/S
#include <iomanip.h> // define diferentes manipuladores
int main()
{
int i;
cout << " El ancho de este campo es de 36" << endl;
for(i=1; i<6; i++)
{
cout << setw(i);
cout << "1" << endl;
cout << setw(i);
cout << "12" << endl;
cout << setw(i);
cout << "123" << endl;
cout << endl;
}
cout << setw(36);
cout << "El ancho de este campo es de 36" << endl;
return 0;
}
int main()
{
cout << setfill('.');
//*********************************************************
//
manipu04.cpp
//*********************************************************
#include <iostream.h>
#include <iomanip.h>
int main()
{
int i;
double variable1=22, variable2=7;
for(i=0; i<15; i++)
{
cout << setprecision(i);
cout << variable1/variable2 << endl;
}
return 0;
}
Ya habr notado que los flujos de E/S tienen ciertos valores predefinidos y que stos valores
se pueden modificar utilizando manipuladores como oct y hex, sucede que los flujos de E/S
tienen un campo para especificar los valores correspondientes y stos campos se llaman
banderas (flags). El archivo de cabecera ios.h define diferentes especificaciones de banderas.
Mediante el uso del manipulador setiosflags() nuestros programas pueden manipular muchas
de stas banderas utilizando a su vez el operador de alcance, identificado por un par de
smbolos de dos puntos (::) y que nos sirve para acceder a una variable de alcance global a
los miembros de una clase. Recuerde que en la siguiente leccin daremos la definicin de una
clase y demostraremos detalladamente el uso del operador de alcance, por lo pronto es
importante que conserve en mente los datos previos de sta leccin pues sern aplicados
prcticamente en todo programa que escriba en C++.
En una determinada seccin del archivo de cabecera ios.h podemos encontrar las
definiciones para las diferentes banderas como un tipo de dato enum, generalmente de la
siguiente manera:
enum
{
skipws
left
right
oct
hex
Puede identificar fcilmente algunos de los manipuladores que ya hemos estudiado y ahora
veremos cmo se utilizan stas banderas mediante el manipulador setiosflags() y cmo
restituimos las condiciones originales mediante el manipulador resetiosflags(), estudie y
compile el siguiente ejemplo, manipu05.cpp, adems experimente con las banderas no
incluidas en el programa, estoy seguro que no presentar problema alguno comprender el uso
de las diferentes banderas.
//***********************************************
//
manipu05.cpp
//***********************************************
#include <iostream.h>
#include <iomanip.h>
int main()
{
int numero;
cout << "Introduzca un numero:\n";
cin >> numero;
cout << "El valor introducido en base 10 es: " << numero
<< endl;
cout << setiosflags(ios::oct);
cout << "en base octal es: " << numero << endl;
cout << setiosflags(ios::hex);
cout << "y en base hexadecimal es: " << numero << endl;
cout << setiosflags(ios::uppercase|ios::showbase);
cout << "utilizando los manipuladores uppercase y showbase"
" el valor es: " << numero << endl;
cout << resetiosflags(ios::hex);
cout << "Ahora el valor se representa en base octal asi: "
<< numero << endl;
cout << resetiosflags(ios::uppercase|ios::showbase|ios::oct);
cout << setiosflags(ios::showpos|ios::showpoint|ios::fixed);
cout << "Ahora el valor es: " << (float)numero << endl;
cout << resetiosflags(ios::showpos|ios::showpoint|
ios::fixed);
cout << "El valor es " << numero << endl;
return 0;
}
Macros:
isalnum
isdigit
ispunct
toascii
Tabla de referencia rpida:
Funcin
isalnum
isalpha
isascii
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit
isalpha
isgraph
isascii
islower
iscntrl
isprint
isspace
isupper
isxdigit
Valores
(A - Z o a - z) o (0 - 9)
(A - Z o a - z)
0 - 127 (0x00-0x7F)
(0x7F o 0x00-0x1F)
(0 - 9)
Imprimibles menos ' '
(a - z)
Imprimibles incluido ' '
Signos de puntuacin
espacio, tab, retorno de lnea, cambio de lnea, tab vertical, salto de pgina
(0x09 a 0x0D, 0x20).
(A-Z)
(0 to 9, A to F, a to f)
Funcin tolower
int tolower(int ch);
Convierte un carcter, en un parmetro entero ch, a minscula.
Valor de retorno:
ch debe estar en el rango 0 a 255, y si est entre A y Z lo convierte a su equivalente en el
rango a a z, el resto de los valores no son modificados. El valor de retorno es el valor
convertido si ch era una mayscula, o el valor original en caso contrario.
Nota: los caracteres en acentuados, o con diresis, en mayscula y la no sufren
modificaciones.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = "ESTO ES UNA CADENA DE PRUEBA";
int i;
for(i = 0; cadena[i]; i++)
cadena[i] = tolower(cadena[i]);
printf("%s\n", cadena);
return 0;
}
Funcin toupper
int toupper(int ch);
Convierte un carcter, en un parmetro entero ch, a mayscula.
Valor de retorno:
ch debe estar en el rango 0 a 255, y si est entre a y z lo convierte a su equivalente en el
rango A a Z, el resto de los valores no son modificados. El valor de retorno es el valor
convertido si ch era una minscula, o el valor original en caso contrario.
Nota: los caracteres en acentuados, o con diresis, en minscula y la no sufren
modificaciones.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = "esto es una cadena de prueba";
int i;
for(i = 0; cadena[i]; i++)
cadena[i] = toupper(cadena[i]);
printf("%s\n", cadena);
return 0;
}
Macro isalnum
Macro isdigit
int isdigit(int c);
Comprueba sin un carcter es un dgito decimal.
isdigit es una macro que verifica el entero c pertenece al rango caracteres de digitos
decimales, que depende de la categora local LC_CTYPE, por defecto, el rango es de ('0' a
'9').
Valor de retorno:
El valor de retorno ser no nulo si c es un dgito decimal.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = ";0fR(4h&~?R1/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], isdigit(cadena[i]));
return 0;
}
Macro ispunct
int ispunct(int c);
Comprueba sin un carcter es correspondiente a un signo de puntuacin.
ispunct es una macro que verifica el entero c pertenece al rango de caracteres de los signos
de puntuacin, que por defecto son todos menos los alfanumricos y el blanco ' '. El
comportamiento depende de la categora local de LC_CTYPE.
Valor de retorno:
El valor de retorno ser no nulo si c es un signo e puntuacin.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = "aAb.Bc/Cd(D3:1&,75%$/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], ispunct(cadena[i]));
return 0;
Macro toascii
int toascii(int c);
Convierte caracteres a formato ASCII.
toascii es una macro convierte el entero c a ASCII eliminando todos los bits menos los siete
de menor peso. Eso proporciona un valor dentro del rango entre 0 y 127.
Valor de retorno:
El valor de retorno ser el valor de c convertido.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = ";0sR(h&R1/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %c\n", cadena[i], toascii(cadena[i]));
return 0;
}
Macro isalpha
int isalpha(int c);
Comprueba sin un carcter es alfabtico.
isalpha es una macro que verifica el entero c pertenece al rango de letras (A a Z o a a z), por
defecto. La verificacin se hace mediante una tabla, y su comportamiento depende le la
categora LC_CTYPE actual.
Valor de retorno:
El valor de retorno ser no nulo si c es una letra y cero en caso contrario.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = ";0sR(h&R1/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], isalpha(cadena[i]));
return 0;
}
Macro isgraph
int isgraph(int c);
Comprueba sin un carcter es imprimible.
isgraph es una macro que verifica el entero c pertenece al rango de caracteres con
representacin grfica, que por defecto son todos menos el espacio ' '. El comportamiento
depende de la categora local de LC_CTYPE.
Valor de retorno:
El valor de retorno ser no nulo si c es un carcter grfico.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = ";0 sR(h &~?R 1/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], isgraph(cadena[i]));
return 0;
}
Macro isspace
int isspace(int c);
Comprueba sin un carcter es de tipo espacio.
isspace es una macro que verifica el entero c pertenece grupo de caracteres de espacio, ' ',
tab, retorno de carro, nueva lnea, tabulador vertical o salto de pgina. El comportamiento
depende de la categora local de LC_CTYPE.
Valor de retorno:
El valor de retorno ser no nulo si c es un carcter de tipo espacio.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = ";0 sR\n(h &~?\177R\t 1/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], isspace(cadena[i]));
return 0;
}
Macro isascii
int isascii(int c);
Comprueba sin un carcter pertenece al ASCII de 7 bits.
isascii es una macro que verifica el entero c pertenece al rango de (0 a 127). Esta macro est
definida para todos lo valores enteros.
Valor de retorno:
El valor de retorno ser no nulo si c est en el rango entre 0 y 127, en hezadecimal entre 0x00
y 0x7f.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = ";0sR(h&~?R1/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], isascii(cadena[i]));
return 0;
}
Macro islower
int islower(int c);
Comprueba sin un carcter es de tipo minscula.
islower es una macro que verifica el entero c pertenece al rango de caracteres de letras
minsculas, que por defecto son los que estn en el rango a a z. El comportamiento depende
de la categora local de LC_CTYPE.
Valor de retorno:
El valor de retorno ser no nulo si c es un carcter en minscula.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = "aAbBcCdD31&75$/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], islower(cadena[i]));
return 0;
}
Macro isupper
int isupper(int c);
Comprueba sin un carcter es de tipo mayscula.
islower es una macro que verifica el entero c pertenece al rango de caracteres de letras
maysculas, que por defecto son los que estn en el rango A a Z. El comportamiento depende
de la categora local de LC_CTYPE.
Valor de retorno:
El valor de retorno ser no nulo si c es un carcter en mayscula.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = "aAbBcCdD31&75$/";
int i;
for(i = 0; cadena[i]; i++)
printf("%c, %d\n", cadena[i], isupper(cadena[i]));
return 0;
}
Macro iscntrl
int iscntrl(int c);
Comprueba sin un carcter es de control.
iscntrl es una macro que verifica el entero c pertenece al rango caracteres de control, que
depende de la categora local LC_CTYPE, por defecto, el rango es de (0x00 a 0x1F y 0x7F).
Valor de retorno:
El valor de retorno ser no nulo si c es un carcter "delete" o un carcter de control.
Ejemplo:
#include <stdio.h>
#include <ctype.h>
int main()
{
char cadena[] = ";0s\003R(h\177&~?\037R1/";
int i;
for(i = 0; cadena[i]; i++)
if(isprint(cadena[i]))
printf("%c, %d\n", cadena[i], iscntrl(cadena[i]));
else
printf("%d, %d\n", cadena[i], iscntrl(cadena[i]));
return 0;
}
Para usar todas las funciones de sta biblioteca se debe tener la siguiente directiva
#include <stdlib.h>
Las funciones de la biblioteca pueden ser agrupadas en tres categoras bsicas:
Aritmticas;
Nmeros aleatorios; y
Conversin de cadenas.
El uso de todas las funciones es sencillo. Se consideran dentro del captulo en forma breve.
Funciones aritmticas
Hay cuatro funciones enteras bsicas:
int abs(int j);
long int labs(long int j);
div_t div(int numer, int denom);
ldiv_t ldiv(long int numer, long int denom);
Fundamentalmente hay dos funciones para enteros y para compatibilidad con enteros largos.
LIBRERA TIME.H
time.h es un archivo de cabecera de la biblioteca estndar del lenguaje de programacin C
que Contenido
Funciones
Constantes
Tipos de datos
Fecha (da/hora) de calendario
Funciones
Nombre
Descripcin
char * asctime(struct Recibe una variable de tipo puntero a estructura tm (struct tm*) y
tm *)
devuelve una cadena de caracteres cuyo formato es:
"Www Mmm dd hh:mm:ss yyyy\n" (ej: Tue May 15 19:07:04
2008\n)
char * ctime(time t *)
double difftime(time t, Recibe dos variables de tipo time t, calcula su diferencia y devuelve
time t)
el resultado (double) expresado en segundos.
Nombre
Descripcin
struct tm *gmtime(time
t *)
struct
*localtime(time t *)
time t time(time t *)
size_t
strftime(char Formatea la informacin pasada mediante la estructura (struct tm*)
*,size_t,char *,struct tm mediante el formato indicado en una cadena (char*) e imprime el
*)
resultado sobre otra cadena (char*) hasta un lmite de caracteres
(size_t).
Constantes
Nombre
Descripcin
CLK_PER_SEC
CLK_TCK
Tipos de datos
Nombre
Descripcin
clock_t
time t
struct
tm
La fecha de calendario se representa como la estructura struct tm, que consta de los
siguientes atributos:
Atributo
Descripcin
int tm_hour
hora (0 - 23)
int tm_isdst
int tm_mday
int tm_min
minutos (0 - 59)
int tm_mon
int tm_sec
segundos (0 - 60)
int tm_wday
da de la semana (0 - 6, 0 = domingo)
int tm_yday
da del ao (0 - 365)
int tm_year
ao desde 1900
LIBRERA STRING.H
string.h es el jefe en Biblioteca del estndar de C para Lenguaje de programacin de C cul
contiene macro definiciones, constantes, y declaraciones de las funciones y de los tipos
usados no slo para secuencia direccin pero tambin varia memoria que manejan funciones;
el nombre es as algo de un misnomer.
Las funciones declararon adentro string.h sea extremadamente popular, desde como parte de
Biblioteca del estndar de C, estn garantizados para trabajar en cualquier plataforma cules
apoyan la C. Sin embargo, algunas ediciones de seguridad existen con estas funciones, por
ejemplo desbordamientos del almacenador intermediario, programadores principales para
preferir variantes ms seguras, posiblemente menos portables. Tambin, las funciones de la
secuencia trabajan solamente con ASCII o juegos de caracteres tal como los cuales ample el
ASCII de una manera compatible ISO-8859-1; juegos de caracteres ASCII-compatibles del
multibyte por ejemplo UTF-8 trabajar con la advertencia que la secuencia longitud es ser
interpretado como la cuenta de octetos en la secuencia ms bien que la cuenta de Unicode
caracteres. La direccin compatible de la secuencia No-ASCII se alcanza generalmente a
travs wchar.h.
Contenido
Constantes y tipos
Funciones
Extensiones a ISO C
Acoplamientos externos
Constantes y tipos
Nombre
Notas
FALTA
DE Macro que se ampla a puntero nulo constante; es decir, una constante
INFORMACIN
que representa un valor del puntero que est garantizado no para ser
una direccin vlida de un objeto en memoria.
size_t
Un sin firmar nmero entero tipo que es el tipo del resultado del size of
operador.
Funciones
Nombre
Notas
vaco *memcpy(*src ms *dest, del Copia octetos de n entre dos reas de memoria, que
const vaco, size_t vacos n);
no deben traslaparse
*memmove vaco (*src ms *dest, Copia octetos de n entre dos reas de memoria;
del const vaco, size_t vacos n);
desemejante de con memcpy las reas pueden
traslaparse
*memchr vaco (*s vacos del Vuelve un indicador a la primera ocurrencia de c en los
const, c interna, size_t n);
primeros octetos de n de s, o de FALTA DE
INFORMACIN si no encontrada
memcmp interno (const *s1 vaco, Compara los primeros caracteres de n de dos reas de
const *s2 vaco, size_t n);
memoria
*memset vaco (vaco *, interno, Sobreescribe un rea de memoria con un patrn del
size_t);
octeto
Nombre
Notas
Aade a lo ms los caracteres de n del src de la
secuencia al dest
*strrchr del carbn (carbn del Localiza un carcter en una secuencia, buscando del
const *, interno);
extremo
interno strcmp(carbn del const *, Compara dos secuencias numricamente
carbn del const *);
strncmp interno (carbn del const Compara hasta los primeros octetos de n de dos
*, carbn del const *, size_t);
secuencias numricamente
strcoll interno (carbn del const *, Compara dos secuencias usando la corriente locales
carbn del const *);
orden de compaginacin
carbn *strcpy(*toHere del carbn, Copia una secuencia a partir de una localizacin a otra
*fromHere del carbn del const);
Nombre
Notas
Vuelve la representacin de la secuencia de un
nmero del error e.g. errno (roscar-no seguro)
carbn *strerror(interno);
size_t strlen(carbn del const *);
strspn del size_t (*s del carbn del Determina la longitud de la subsecuencia inicial
const, *accept del carbn del mxima de s que consiste enteramente en caracteres
const);
adentro aceptan
strcspn del size_t (*s del carbn Determina la longitud de la subsecuencia inicial
del const, *reject del carbn del mxima de s que consiste enteramente en caracteres
const);
no en rechazo
*strpbrk del carbn (*s del carbn Encuentra la primera ocurrencia de cualquier carcter
del const, *accept del carbn del adentro para aceptar en s
const);
*strstr del carbn (*haystack del Encuentra la primera ocurrencia de la secuencia
carbn del const, *needle del aguja en la secuencia ms larga haystack.
carbn del const);
*strtok del carbn
carbn del const *);
(carbn
strxfrm del size_t (carbn ms Transforma el src en una forma de compaginacin, tal
*dest, *src del carbn del const, que la pedido numrica de la clase de la secuencia
size_t n);
transformada es equivalente a la pedido de
compaginacin del src.
Extensiones a ISO C
Nombre
Notas
Especificacin
limitar-comprobada
GNU, POSIX
originalmente
OpenBSD,
ahora
tambin
FreeBSD,
Solaris, OS X del Mac
POSIX
FUENTES DE INFORMACIN
Como programar en C/C++. H.M. Deitel / P.J. Deitel. Prentice may, 2da ed. 1995.
Programacin orientada a objetos con C++. Fco. Javier Ceballos. Ed. ra-ma 1993.
Programacin en C++. Enrique Hernndez / Jos Hernndez. Ed. Paraninfo 1993.
EN INTERNET
www.lawebdelprogramador.com
http://www.publispain.com/supertutoriales/programacion