Está en la página 1de 14

1

Programacin:
Introduccin al Lenguaje
C++

Contenido
__________________________________________________________________________
1.1

Elementos del Lenguaje

1.2. Estructura General de un Programa en C++


1.3. Constantes, Variables y Tipos de Datos
1.4. Acciones Bsicas y Expresiones
1.5

Entrada y Salida en C++

Ejercicios
En este captulo vamos a introducir el lenguaje de programacin C++ que se va a utilizar
en la asignatura, describiendo algunos conceptos bsicos y plasmando la estructura general
de un programa escrito en este lenguaje. A lo largo de los sucesivos temas se seguir la
notacin BNF para ir describiendo las diferentes reglas sintcticas del lenguaje. De esta
forma se ir introduciendo de una manera formal la sintaxis de C++.

1.1

ELEMENTOS DEL LENGUAJE

Comenzaremos viendo los elementos ms simples que integran un programa escrito en


C++, es decir palabras, smbolos y las reglas para su formacin.
a) Identificadores: Son nombres elegidos por el programador para representar
entidades (variables, tipos, constantes, etc.) en el programa. El usuario puede elegir
cualquier identificador excepto un pequeo grupo que se reserva para usos especficos.
C++ distingue entre letras maysculas y minsculas, por lo que a
efectos del programa sern identificadores distintos hola, Hola y
hoLa.

La gramtica que define la sintaxis de los identificadores es la siguiente:


<ident> ::= <carcter_ident> {<carcter_ident>|<dgito>}

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg 1

<carcter_ident> ::= a | b || z | A | B | | Z | _
<dgito> ::= 0 | 1 | 2 | | 9

No se impone en principio ningn lmite en cuanto a la longitud de los


identificadores. Dichos limites dependern del compilador que se est empleando. Ms
an, en esta asignatura no emplearemos identificadores tan largos como para darnos
problemas en este sentido.
b) Palabras reservadas: Tienen un significado predeterminado para el compilador
y slo pueden ser usadas con dicho sentido. En C++ se escriben siempre con
minsculas.
and
and_eq
bool
break
class
compl
default
delete
do
explicit
export
friend
goto
mutable
namespace
operator
or
or_eq
register
reinterpret_cast
static
static_cast
throw
true
typename
union
unsigned
volatile
wchar_t
xor

asm
case
const

auto
catch
const_cast

bitand
cdecl
continue

bitor
char

double
extern
if
new

dynamic_cast
false
inline
not

else
float
int
not_eq

enum
for
long

private

protected

public

return
struct
try

short
switch
typedef

signed
template
typeid

using

virtual

void

xor_eq

while

sizeof
this

c) Identificadores estndares: Tienen un significado predefinido dentro del lenguaje,


pero a diferencia de las palabras reservadas, el programador puede redefinirlos dentro
de su programa (aunque esto normalmente no es aconsejable). Dos ejemplos de dichos
identificadores estndares sern presentados en este tema: los flujos de entrada y salida
cin y cout.
d) Literales constantes: Se distingue entre nmeros reales, nmeros enteros y
cadenas de caracteres.
<literal >
::= <num_entero> | <num_real> | <car> |
<cadena_car>
<num_entero>
::= [+|-] <dgito> {<dgito>}
<num_real>
::= <num_entero>.{<dgito>} [<factor_esc>]
<factor_esc>
::= (e|E) <num_entero>
<car> ::= <carcter>
<cadena_car>
::= {<carcter>}

Cuando se usa e en un literal constante real se dice que el nmero est expresado en
punto flotante (notacin cientfica). En cuanto a las cadenas de caracteres (o strings),
en C++ se expresan mediante una secuencia de caracteres cualesquiera1 encerrados
entre comillas simples.
e) Delimitadores: Son smbolos que indican el comienzo o fin de una entidad.
1

El smbolo \ tiene un significado especial en C/C++ como introductor de caracteres especiales (e.g., \n
para un salto de lnea, \t para una tabulacin, \ para las comillas dobles, etc.), lo que deber tenerse en
cuenta a la hora de su introduccin como literal. Si se desea usar literalmente, utilcese \\.

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

!
%
^
&
(
)
+
=
{
}
~
[
]
\
;

:
<
>
?
,
.
/

f) Comentarios: Un comentario es una secuencia de caracteres que es ignorada por el


compilador. Se usan para documentar el programa, de manera que aunque no
contribuyan a resolver el problema, s ayudan a mejorar la comprensin del programa.
Se pueden insertar en el programa de dos maneras: escribiendo un texto entre los
smbolos /* y */ (este texto se puede extender a lo largo de varias lneas), o usando el
smbolo // (se interpretar como comentario todo lo que siga hasta llegar al final de la
lnea).

Debe tenerse cuidado para no encerrar trozos de cdigo til dentro de un comentario,
ya que un comentario puede extenderse a lo largo de mltiples lneas. Encerrar trozos de
cdigo como comentarios es til cuando se est desarrollando un programa para
comprobar si ciertas partes funcionan o no, pero es un error muy comn encerrar por
descuido otras zonas de cdigo que son necesarias o bien olvidarse de sacar rdenes de
dentro de un comentario.
El anidamiento de comentarios (poner comentarios dentro de otros
comentarios) puede dar problemas en algunos compiladores. Nunca
emplearemos este tipo de anidamiento.
g) Separadores: Son espacios en blanco, tabuladores, retornos de carro, fin de fichero
y fin de lnea. Habr ocasiones en que se pongan para dar legibilidad al programa, y
otras por necesidad. Los comentarios son considerados tambin separadores por el
compilador.

1.2

ESTRUCTURA DE UN PROGRAMA EN C++

Comenzaremos viendo la estructura global de un programa escrito en C++ para a


continuacin ir desglosando y analizando cada uno de sus componentes. El programa
que se muestra es el famoso Hola Mundo, un programa que nicamente muestra el
mensaje Hola Mundo en pantalla antes de finalizar.
/*
* Nombre:
* Autor:
* Fecha:
* Descripcin:
*
*/

HolaMundo.cpp
Johann Sebastian Mastropiero
01/01/2001
Este es el programa Hola Mundo.

#include <iostream.h> // Para usar cout


#include <stdlib.h>
// No hace falta en este caso
void main ()
{
cout << Hola Mundo << endl;
}

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

Como puede apreciarse, el programa comienza con un comentario a lo largo de siete


lneas, y en el cual se da informacin sobre el nombre, autor, fecha y propsito del
programa. Esto no es sintcticamente necesario como es bien sabido, pero siempre lo
incluiremos como norma de estilo. A continuacin nos encontramos con dos
operaciones de inclusin. Sin entrar en detalles sobre lo que internamente significan
dichas inclusiones2, lo que hacemos mediante las mismas es indicarle al compilador que
pretendemos hacer uso de las funcionalidades que nos proporcionan unas ciertas
bibliotecas (en este caso predefinidas; en temas posteriores aprenderemos a definirlas
por nuestra cuenta). En este caso concreto queremos emplear la biblioteca de
entrada/salida iostream para lo cual tenemos que incluir iostream.h. La otra inclusin
que se realiza corresponde a una biblioteca (stdlib) que no es necesaria en este caso
dada la simplicidad del programa, pero que s lo ser en la mayora de los programas
que realicemos ms adelante.
El algoritmo comienza en la lnea void main(). Aqu aparecen varios elementos cuyo
significado veremos en temas posteriores. Lo que s debemos saber es que todo
programa que realicemos tendr un algoritmo principal (el que empezar a realizarse
cuando ejecutemos el programa), y que el comienzo de dicho algoritmo principal se
indica mediante una lnea de estructura como la mostrada3.
A continuacin encontramos el cuerpo del algoritmo principal, que abarca desde la llave
de apertura ({) hasta la llave de cierre (}). Siempre aparecern estas llaves delimitando
el cuerpo de un algoritmo. En este caso, el algoritmo consta de una sola orden, mostrar
en pantalla el mensaje Hola Mundo y saltar a la lnea siguiente. Como puede verse,
esto se expresa haciendo uso del objeto predefinido (en iostream precisamente) cout.
Todo lo que redirijamos (mediante el empleo del operador <<) hacia dicho objeto ser
mostrado en pantalla. En el ejemplo se redirige en primer lugar la cadena Hola
Mundo, y a continuacin la indicacin de salto de linea (endl abreviatura de end of
line). La instruccin termina mediante un punto y coma (;), que la separa de
instrucciones posteriores. Es preciso poner dicho delimitador incluso si como es el caso
aqu, no hay una instruccin posterior. De hecho, es posible poner el punto y coma
incluso si no se especifica una instruccin concreta. En dicho caso se habla de una
instruccin vaca.

1.3

CONSTANTES, VARIABLES Y TIPOS DE DATOS

En un programa intervienen objetos sobre los que actan las instrucciones que lo
componen. Algunos de estos objetos tomarn valores a lo largo del programa.
Dependiendo de si pueden cambiar de valor o no, podemos distinguir dos tipos de
objetos:
Constante: Objeto referenciado mediante un identificador- al que se le asignar
un valor que no se podr modificar a lo largo del programa.

Todas las rdenes que comienzan por la almohadilla (#) van dirigidas al preprocesador, un programa
que repasa el cdigo y realiza diversas modificaciones sobre el mismo antes de proceder a la compilacin
del mismo. En este caso se le est indicando que incluya en el texto del programa el contenido completo
de los ficheros iostream.h y stdlib.h.
3

Las variantes que pueda tener esta lnea de comienzo se vern ms adelante cuando se tengan los
conceptos precisos para su compresin. De momento asumiremos que siempre es esa la forma de
comenzar el algoritmo principal.

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

Variable: Objeto referenciado por un identificador que puede tomar distintos


valores a lo largo del programa.
Ser misin del programador asignar el identificador que desee a cada constante y
variable. El identificador o nombre de cada objeto sirve para identificar sin ningn tipo
de ambigedad a cada objeto, diferencindolo de los dems objetos que intervienen en
el programa. En C++ hay que indicar (de la manera que ms adelante se indicar) el
nombre de las constantes y variables que vamos a usar, para que el compilador pueda
asociar internamente a dichos nombres las posiciones de memoria correspondientes.
Para esto ltimo es preciso tambin que junto con dichos nombres, se indique
explcitamente para cada constante o variable el tipo de los datos que pueden contener.

En C++ existen una serie de tipos bsicos predefinidos, as como herramientas para
la construccin de tipos ms complejos. Los principales tipos de datos predefinidos en
C++ son los siguientes:
Enteros: el tipo bsico es int. Las variables definidas de este tipo podrn tomar
tpicamente valores entre -2147483648 y 2147483647. En determinadas
circunstancias podremos querer modificar este rango, para lo que disponemos de
dos tipos de modificadores short/long y signed/unsigned.
o

short int: el rango de representacin es menor (32768 a 32767


tpicamente), y por lo tanto tambin lo es la memoria ocupada (la mitad).

mayor rango de representacin4 (e.g., -9223372036854775808


a 9223372036854775807), y ms memoria necesaria (el doble).

unsigned int: ocupa la misma memoria que un int, pero slo toma
valores positivos (e.g., 0 a 4294967295).

signed int: es equivalente a un int.

long int:

Los modificadores mencionados se pueden combinar, e.g., long unsigned int


(ocupa la misma memoria que un long int, pero slo almacena nmeros
positivos, con lo que el rango de representacin es mayor). Adicionalmente, puede
suprimirse la indicacin int en todos los casos anteriores, asumindose sta por
defecto (e.g., unsigned es lo mismo que unsigned int).
Carcter: se emplea el tipo char.
Lgico: se utiliza el tipo bool. Los objetos de este tipo slo pueden tomar dos
valores: true (cierto) y false (falso).
Reales: los nmeros reales (en realidad nmeros en punto flotante, ya que los
nmeros reales en sentido estricto no son representables en ningn computador
digital) se representan mediante los tipos float y double. El segundo tipo
permite representar nmeros con mayor magnitud y precisin, empleando para
ello el doble de memoria que float. Si se precisa mayor rango de representacin
o de precisin puede emplearse el modificador long sobre double, i.e., long
4

El rango de representacin en cada caso depende tanto del compilador como del sistema subyacente.
Particularizando para la versin 4.01 de Dev-C++ sobre sistemas Windows, se da la circunstancia de que
internamente un long int es equivalente a un int. Por ese motivo el rango de representacin es
exactamente el mismo.

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

double.
double.

No se pueden emplear los modificadores signed/unsigned sobre

Todos estos tipos tienen dos propiedades en comn: cada uno est formado por
elementos indivisibles o atmicos que adems estn ordenados. Los tipos de datos con
estas caractersticas se denominan tipos de datos escalares. Cuando decimos que un
valor es atmico, nos referimos a que no contiene partes componentes a las que pueda
accederse independientemente. Por ejemplo, un carcter es indivisible, mientras que la
cadena de caracteres Hola no. Cuando hablamos de que un conjunto de valores est
ordenado, queremos decir que los operadores relacionales estndares (mayor que, menor
que, igual, etc.) pueden aplicarse a los mismos.
Para declarar una variable basta con indicar el tipo de la misma y su nombre. La
declaracin termina con el punto y coma. Los siguientes ejemplos muestran
declaraciones vlidas:
int num;
unsigned x,y;
long double masaPlanetaria;
char car = c, letra;
short int corto;

Como puede apreciarse en el ltimo ejemplo, es posible dar un valor inicial a una
variable a la vez que se declara. As, la sintaxis BNF de una declaracin de variable es:
<decvar> ::= <tipo> <ident> [= <literal>] {, <ident> [=
<literal>]};

La declaracin de constantes es muy similar a la de variables, con dos diferencias


fundamentales: hay que usar la palabra reservada const para indicar que se est
definiendo una constante, y la asignacin de un valor inicial no es opcional, sino
obligatoria:
<decconst> ::= const <tipo> <ident> = <literal>;

Ejemplos de declaraciones de constantes vlidas5 son los siguientes:


const
const
const
const

int HORAS = 24;


double NUMERO_AVOGADRO = 6.023e+23;
short ALUMNOS = 100;
char ACEPTAR = S;

En algunos compiladores se permite que no se indique el tipo de una


constante, asumindose que es entera por defecto. Siempre indicaremos
explcitamente el tipo de las constantes que definamos.
Tanto las declaraciones de variables como de constantes pueden realizarse de dos
maneras: global y local. El primer modo consiste en situar dicha declaracin al
principio del cdigo, justo despus de las inclusiones. El segundo modo consiste es
situarlas dentro del programa principal, en la zona delimitada por las llaves. Ejemplos:
GLOBAL

LOCAL

Aunque no es una imposicin sintctica del lenguaje, como regla de estilo se emplean en este caso
maysculas para designar a las constantes.

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

int num, x, y;

void main()
{
int num, x, y;

void main()
{

La diferencia entre ambas formas de declaracin ser evidente cuando en temas


posteriores se introduzca la nocin de funcin. De momento, la regla prctica que
seguiremos ser definir siempre variables y constantes de manera local.
C++ permite que las declaraciones locales se realicen en cualquier punto
del algoritmo situado entre el comienzo ({) y el final (}) del mismo.
Siempre declararemos los objetos locales inmediatamente despus de
la llave de apertura.

1.4

ACCIONES BSICAS Y EXPRESIONES

Dentro del cuerpo del algoritmo principal se indicarn las acciones que conducirn a la
resolucin del problema para el que dicho algoritmo fue confeccionado. La accin ms
bsica que se puede realizar es la asignacin. Su sintaxis es:
<asignacin> ::=

<ident> = <expresin>;

<expresin>

<literal> | <ident> | <op_unario> <expresin> |

::=

<expresin> <op_binario> <expresin> |


(<expresin>)

El caso ms simple es aqul en el que se asigna un valor literal a una variable, o el


valor de una variable a otra, e.g.,
void main()
{
int num1, num2;
num1 = 10;
num2 = num1;

En general, se emplear una expresin para asignar valores a las variables. Las posibles
expresiones que se pueden utilizar dependern en principio del tipo de los objetos
involucrados en las mismas. Sin embrago, debe tenerse en cuenta que C++ no es un
lenguaje con una comprobacin de tipos muy fuerte. Ello quiere decir que no se
controla el tipo de los objetos que forman parte de una operacin. Por ejemplo, es lgico
suponer que para sumar dos objetos, stos han de ser de un tipo numrico (enteros o
reales, en cualquiera de sus variantes). Sin embargo, esto no se comprueba,
permitindose sin ir ms lejos que se sumen dos caracteres. Lo que ocurre internamente
es que se produce una operacin de conversin (casting) mediante la cual los valores de
tipo carcter se convierten en valores numricos. Dicha conversin se puede producir
entre cualesquiera dos tipos. De hecho podemos forzar a que ocurra indicndolo
explcitamente. Para ello es preciso indicar el tipo al que queremos realizar la
conversin, y el objeto que queremos convertir, este ltimo entre parntesis. Por
ejemplo, si letra es un objeto de tipo char y queremos convertir su valor a entero
indicaremos int(letra). Esto no modifica el tipo ni el valor de letra, sino que
permite obtener un valor de conversin que podremos mostrar en pantalla, emplear
dentro de una expresin ms compleja, etc.

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

En los casos que sea preciso realizaremos las operaciones de conversin


de manera explcita. Nunca dejaremos que el sistema las realice de
manera implcita.
C++ proporciona operadores para realizar las operaciones ms usuales, como pueden
ser las siguientes:
Operaciones aritmticas: se proporcionan los operadores binarios +, , *, / y %
con el significado de suma, resta, multiplicacin, divisin (entera o en punto
flotante dependiendo de los operandos) y resto o mdulo respectivamente.
Asimismo, existe el operador unario para la inversin de signo. Ejemplos:
int num1, num2, num3;

num1 = -10*num2;
num2 = num1%7;
num3 = num1/num2;

Operaciones relacionales: se proporcionan los operadores binarios ==, !=, >, <,
>=, <= con el significado respectivo de comparacin de igualdad, desigualdad,
mayor que, menor que, mayor o igual que y menor o igual que. El resultado de la
operacin relacional ser un valor lgico, e.g.,
int num1, num2;
bool b1, b2;

b1 = num2 == num1;
b2 = (num1-num2) >= (num2*2);

Operaciones lgicas: se proporcionan los operadores binarios && y || con el


significado de conjuncin y disyuncin lgica respectivamente. Tambin se
dispone del operador unario ! con el significado de negacin. Ejemplos:
int num1, num2;
bool b1, b2;

b1 = !(num2 == num1); //
num2!=num1
b2 = (num1>num2) && (num2<0);

equivale

C++ proporciona una sintaxis especial en el caso bastante frecuente en el que el valor de
una variable use como operando en una expresin aritmtica logica cuyo resultado se
asigna a la propia variable. Dicha sintaxis permite simplificar asignaciones del tipo v =
v <op> E, permitiendo expresarlas como v <op>= E. Por ejemplo:
int x, y, z;

x *= x+y/z; // equivale a x = x * (x+y/z);


z += 1;
// equivale a z = z + 1;

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

Precisamente en relacin con este ltimo ejemplo, C++ proporciona una forma
sintctica an ms simple mediante el uso de los denominados operadores de
incremento (++) y decremento (--). stos son operadores unarios que slo pueden
aplicarse sobre variables (no sobre expresiones) y que modifican el valor de la misma,
incrementndola o decrementndola segn corresponda. Por ejemplo:
int x, y, z;

z++;
1
--x;
1

// equivale a z = z + 1 o a z +=
// equivale a x = x - 1 o a x -=

Tanto el ++ como el -- pueden ponerse antes o despus de la variable que deseamos


incrementar o decrementar. La diferencia entre ambas formas sintcticas estriba en su
uso dentro de expresiones ms complejas: si el operador se coloca antes de la variable,
sta se incrementa (o decrementa) y es dicho valor modificado el que se emplea en la
expresin; si el operador se sita despus, se usa el valor actual de la variable en la
expresin y luego se modifica. Por ejemplo:
int x, y, z;

x = --y * z++;

// equivale a y = y - 1
//
x = y * z;
//
z = z + 1;

Con el fin de mejorar la legibilidad del cdigo y a pesar de que es


sintcticamente correcto nunca emplearemos los operadores de
incremento o decremento dentro de expresiones.
En el caso de que tengamos una expresin compleja con varios operadores, C++
proporciona reglas de precedencia que permiten determinar cul es el orden en el que se
aplican los operadores. Dichas reglas son las siguientes:
1. Los operadores unarios se aplican antes que los binarios. Si hay ms de un
operador unario aplicado sobre la misma variable o subexpresin, el orden de
aplicacin es de derecha a izquierda.
2. Los operadores binarios se aplican segn el siguiente orden de precedencia:
Nivel 1 (mayor precedencia): *, /, &
Nivel 2: +, Nivel 3: <, <=, >, >=
Nivel 4: ==, !=
Nivel 5: &&
Nivel 6: ||
Nivel 7 (menor precedencia): =, *= , +=, /=, -=, %=, &=, |=

Introduccin a la Informtica.

Fundamentos de la Programacin.Pg

En caso de que aparezcan varios operadores con igualdad de precedencia, se


evalan de izquierda a derecha. Estas reglas pueden alterarse mediante el uso
de parntesis.

1.5

ENTRADA/SALIDA EN C++

La entrada y salida (E/S en lo sucesivo) de informacin la gestionaremos en C++


mediante la funcionalidad que nos proporciona la biblioteca iostream, ya mencionada
anteriormente. La palabra stream significa flujo o corriente en ingls, y nos da una
indicacin de cmo funcionan los aspectos de E/S: los dispositivos de salida (e.g., el
monitor) se modelan como sumideros a los que va llegando un flujo de informacin; del
mismo modo, los dispositivos de entrada (e.g., el teclado) son fuentes de las que surge
un flujo de informacin. Tanto en un caso como en otro, lo nico que necesitamos son
operadores para insertar informacin en el flujo de salida, o extraer informacin del
flujo de entrada. La biblioteca iostream nos proporciona dichos operadores as como
unos identificadores estndar para los flujos ms comunes.
Cuando incluimos la biblioteca iostream disponemos automticamente del flujo cin
(asociado a la entrada a travs de teclado), y el flujo cout (asociado a la salida a travs
de pantalla). Sobre dichos flujos podemos aplicar respectivamente las operaciones de
extraccin (>>) y de insercin (<<). Empezando por este ltimo, imaginemos el
siguiente cdigo:
#include <iostream.h>
void main()
{
int x = 10, y = -1;
char c = A;
double d = 10.124567;

cout << x << y << endl


<< c << d << Se acab;

La ejecucin del mismo producira en pantalla la salida:


10-1
A10.124567Se acab

Como puede apreciarse, la gestin de la salida de datos es muy cmoda y homognea.


Otro tanto ocurre con la gestin de la entrada de datos. En este caso, simplemente
tenemos que extraer los datos que vayamos precisando del flujo cin:
#include <iostream.h>
void main()
{
int x, y;
char c;
double d;
}

cin >> x >> y >> c >> d;

Introduccin a la Informtica.

10

Fundamentos de la Programacin.Pg

En el cdigo que se muestra, se leen de teclado los valores de x, y, c y d sucesivamente.


As pues, en general tendremos la siguiente sintaxis para la E/S en C++:
<entrada> ::= cin >> <ident> {>> <ident>};
<salida>
endl)};

::= cout << (<expresin> | endl) {<< (<expresin> |

El siguiente programa muestra un ejemplo de uso combinado de operaciones de E/S. En


este caso se trata de leer dos nmeros y mostrar su suma en pantalla:
#include <iostream.h>
void main()
{
int a, b; // los nmeros que queremos
sumar
cout << Introduzca dos nmeros: <<
endl;
cin >> a >> b;
cout << Su suma es << a + b <<
endl;
}

Ntese un hecho importante: en la ltima lnea aparecen combinados los operadores de


insercin (<<) y de suma (+). El funcionamiento del programa es correcto, ya que el
operador de insercin tiene una precedencia menor que la suma. Por ello, primero se
realiza esta ltima, y es el resultado lo que se inserta en el flujo de salida. Si volvemos a
la lista de niveles de precedencia mostrada al final de la seccin anterior, los operadores
de flujo se situaran en un nivel intermedio entre el 2 (suma y resta) y el 3 (operaciones
relacionales).
Para finalizar este tema, debe mencionarse el hecho de que es posible alterar el formato
de impresin de los datos en pantalla mediante el uso de la funcionalidad que
proporciona la biblioteca iomanip. Mediante la misma es posible indicar el nmero de
decimales de precisin con el que queremos escribir un nmero en punto flotante, el
nmero de espacios que vamos a emplear para escribir un dato, caracteres de relleno,
etc. Esto se realiza mediante la insercin en el flujo de salida de modificadores, que
afectarn a los datos que se introduzcan a continuacin. Alguno de estos modificadores
son los siguientes:

setprecision().

setw(). Permite indicar el nmero de espacios que se emplearn para


escribir un dato, alineando al mismo a la derecha dentro de dicho espacio.
Si el espacio requerido es mayor que el indicado, el modificador se
ignora. Slo afecta al dato que se indica a continuacin.

setfill():

Para indicar el nmero de dgitos significativos en un


dato en punto flotante. Afecta a todos los datos que se introduzcan con
posterioridad.

Para especificar el carcter de relleno que se emplear para


los espacios no usados al escribir un dato (segn un modificador setw()).

A continuacin se muestra un ejemplo:


#include <iostream.h>
#include <iomanip.h>
void main()
Introduccin a la Informtica.

11

Fundamentos de la Programacin.Pg

const double a1 = 1.1;


const double a2 = 10.12;
const double a3 = 101.179;

cout
cout
cout
cout
endl;
cout
endl;
cout
endl;
}

<<
<<
<<
<<

setprecision(2) <<
setprecision(4) <<
setprecision(5) <<
a1 << setw(10)

a3
a3
a3
<<

<< endl;
<< endl;
<< endl;
setfill(.) << a1 <<

<< a2 << setw(10) << setfill(.) << a2 <<


<< a3 << setw(10) << setfill(.) << a3 <<

Este cdigo producira la siguiente salida en pantalla:


1e+02
101.2
101.18
a1.......1.1
a2.....10.12
a3....101.18

Introduccin a la Informtica.

12

Fundamentos de la Programacin.Pg

EJERCICIOS
1 El siguiente programa escrito en C++ tiene errores. Encuntrelos.
/*
* Nombre:
* Autor:
* Fecha:
* Descripcin:
lxicos,
*
*
*/

Ejemplo.cpp
Chindasvinto de Prusia
10/12/2000
Programa ejemplo sobre

errores

sintcticos y semnticos

#include <iostream.h>
void main ()
{
const int tasa = 25.00;
double horas, das, total, neto;
cout << Introduce las horas trabajadas: ' <<
endl;
cin >> horas
cout << Introduce los dias trabajados: << endl;
cin >> dias;
horas*dias = total;
neto = total-Tasa;

cout
cin
cout
cout

>>
<<
<<
<<

El valor total que pagar es: >> endl;


total << endl;
El valor neto que pagar es: << endl
NETO << endl;

2 Escriba un programa para comprobar el comportamiento de las instrucciones de


entrada de C++, incidiendo en los siguientes aspectos:
Ver qu ocurre si se introduce un valor de un tipo diferente al que se quiere
leer. Pruebe con diferentes combinaciones.
Ver qu sucede cuando se quieren leer varios datos de un flujo y se introducen
los mismos en una lnea (separados por espacios en blanco o tabuladores) o con
retornos de carro entre ellos.
Ver qu sucede cuando se quiere leer un carcter, y se introducen espacios en
blanco, tabuladores, retornos de carro, etc.

3 Escriba un programa que slo declare variables de tipo unsigned. El programa


deber leer dos nmeros desde el teclado, posteriormente los restar, almacenando el
resultado en una variable, y finalmente escribir por pantalla el resultado de la resta.
Ejecute dicho programa tomando como datos de entrada un sustraendo mayor que el
minuendo. Analice qu sucede. Cambie el tipo de las variables a int y repita el
experimento. Pruebe ahora con short int e introduzca los valores 90000 y 1.

Introduccin a la Informtica.

13

Fundamentos de la Programacin.Pg

4 Experimente con las conversiones entre tipos. Lea una variable de tipo carcter, e
imprima en pantalla el valor de la misma, y el valor de su conversin a entero. Haga lo
mismo con enteros negativos y su conversin a enteros sin signo (unsigned), o con
nmeros en punto flotante y su conversin a entero.
5 Escriba un programa que lea una palabra de cuatro letras por teclado, y
posteriormente escriba dicha palabra de manera que cada letra se encuentre codificada
sustituyndola por aquel carcter que le sigue en la tabla de cdigo ASCII. (Ayuda:
deber emplear conversiones entre tipos).

Introduccin a la Informtica.

14

Fundamentos de la Programacin.Pg

También podría gustarte