Вы находитесь на странице: 1из 77

NDICE GENERAL

ndice general
1.1. El ordenador, algoritmos y programas . . . . . . .

1.1.1. El Ordenador: Conceptos Bsicos . . . . . .

1.1.2. Algoritmos . . . . . . . . . . . . . . . . . . . .

1.1.3. Lenguajes de programacin . . . . . . . . .

1.1.4. Programas . . . . . . . . . . . . . . . . . . . . 12
1.2. Especificacin de programas . . . . . . . . . . . . . 16
1.2.1. Escritura y organizacin de un programa . . 16
1.2.2. Elementos bsicos de un lenguaje de programacin . . . . . . . . . . . . . . . . . . . . 23
1.2.2.1. Tokens y reglas sintcticas . . . . . 23
1.2.2.2. Palabras reservadas . . . . . . . . . 24
1.2.3. Tipos de errores en la programacin . . . . 26
1.3. Datos y tipos de datos . . . . . . . . . . . . . . . . . 28
1.3.1. Representacin en memoria de datos e instrucciones . . . . . . . . . . . . . . . . . . . . 28
1.3.2. Datos y tipos de datos . . . . . . . . . . . . . 29
1.3.2.1. Literales . . . . . . . . . . . . . . . . 31
1.3.2.2. Declaracin de datos . . . . . . . . 32
1.3.2.3. Datos constantes . . . . . . . . . . . 36
1.3.2.4. Normas para la eleccin del identificador . . . . . . . . . . . . . . . . 40

NDICE GENERAL

1.4. Operadores y Expresiones . . . . . . . . . . . . . . 42


1.4.1. Terminologa en Matemticas . . . . . . . . . 42
1.4.2. Operadores en un lenguaje de programacin 43
1.4.3. Expresiones . . . . . . . . . . . . . . . . . . . 45
1.5. Tipos de datos comunes en C++ . . . . . . . . . . . 49
1.5.1. Rango y operadores aplicables a un tipo
de dato . . . . . . . . . . . . . . . . . . . . . . 49
1.5.2. Los tipos de datos enteros . . . . . . . . . . 50
1.5.2.1. Rango de los enteros . . . . . . . . 50
1.5.2.2. Operadores . . . . . . . . . . . . . . 52
1.5.2.3. Expresiones enteras . . . . . . . . . 54
1.5.3. Los tipos de datos reales . . . . . . . . . . . 55
1.5.3.1. Rango . . . . . . . . . . . . . . . . . 55
1.5.3.2. Operadores . . . . . . . . . . . . . . 57
1.5.3.3. Funciones estndar . . . . . . . . . 58
1.5.3.4. Expresiones reales . . . . . . . . . . 59
1.5.4. Operaciones con tipos numricos distintos 60
1.5.5. El tipo de dato carcter . . . . . . . . . . . . 62
1.5.5.1. Rango . . . . . . . . . . . . . . . . . 62
1.5.5.2. Funciones estndar . . . . . . . . . 67
1.5.6. El tipo de dato cadena de caracteres . . . . 68

NDICE GENERAL

1.5.7. El tipo de dato lgico o booleano . . . . . . 70


1.5.7.1. Rango . . . . . . . . . . . . . . . . . 70
1.5.7.2. Operadores . . . . . . . . . . . . . . 70
1.5.7.3. Operadores Relacionales . . . . . . 72
1.5.8. Tratamiento en C++ de los tipos bsicos . . 75
1.5.8.1. El tipo char como un tipo entero . . 75
1.6. Referencias . . . . . . . . . . . . . . . . . . . . . . . 77

Tema 1. Programacin en C++: Introduccin

T EMA 1. P ROGRAMACIN

1.1.

EN

C++: I NTRODUCCIN

E L ORDENADOR , ALGORITMOS Y PROGRA MAS

1.1.1.

E L O RDENADOR : C ONCEPTOS BSICOS

Hardware
Software (Programa)
Usuario
Lenguaje de Programacin
Programador

5
Tema 1. Programacin en C++: Introduccin

Estructura de un ordenador:

ENTRADA
datos e instrucciones

MEMORIA MASIVA
datos e instrucciones

MEMORIA PRINCIPAL

datos

UNIDAD
ARITMETICO-LOGICA

0101100 11110110 00000001 10100001


0001111 11100011 10100100 10111001
1111111 00111111 11010010 00100100
instrucciones

UNIDAD
DE CONTROL

CPU

datos

SALIDA

Tema 1. Programacin en C++: Introduccin

1.1.2.

A LGORITMOS

Algoritmo: es una secuencia ordenada de instrucciones que


resuelve un problema concreto, atendiendo a las siguientes
caractersticas bsicas:
Correccin (sin errores).
Precisin (no puede haber ambigedad).
Repetitividad (en las mismas condiciones, al ejecutarlo,
siempre se obtiene el mismo resultado).
Finitud (termina en algn momento). Nmero finito de rdenes no implica finitud.
Caractersticas esenciales:
Validez (resuelve el problema pedido)
Eficiencia (lo hace en un tiempo aceptable) Proceso
de Optimizacin.
Usualmente, los algoritmos reciben unos datos de entrada con
los que operan, y a veces, calculan unos nuevos datos de salida.

Ejemplo. Algoritmo de la media aritmtica de N valores.


1. Sumar los N valores.
2. Dividir el resultado por N.
Datos de entrada: N, valor1, valor2, ..., valorN.
Datos de salida: la media.

Tema 1. Programacin en C++: Introduccin

Ejemplo. Algoritmo para dibujar un cuadrado de L cm. de lado,


en (X,Y):
1. Posicionar el lpiz en el punto de coordenadas (X,Y), que
ser la esquina superior izquierda del cuadrado.
2. Trazar a dcha, lnea horiz. de L cm.
3. Desde ese punto, trazar abajo lnea vert. de L cm.
4. Desde ese punto, trazar a izqda. lnea horiz. de L cm.
5. Desde ese punto, trazar arriba lnea vert. de L cm.
Datos de entrada: las coordenadas (X,Y) y la longitud L.
Datos de salida: ninguno.

Instrucciones para el preparado de una paella:


1. Realizar un sofrito.
2. Incorporar 100 gr. de carne magra de cerdo, 200 gr. de pollo, una cucharadita de sal, una papelina de azafrn y 1/2
litro de agua. Dejar hervir durante 3/4 de hora.
3. Aadir 1/2 kg. de arroz. Dejar a fuego medio 20 minutos.
Es correcto?
Es preciso? Qu es fuego medio?
Es repetitivo? Es casi imposible obtener el mismo resultado en distintas repeticiones.
Es finito?
Por tanto, no es un algoritmo.

Tema 1. Programacin en C++: Introduccin

Algoritmo para la resolucin de una ecuacin de primer grado


ax + b = 0:
Datos de entrada: a, b
Datos de salida: x
Instrucciones en lenguaje natural:
Calcular x como el resultado de la divisin -b/a

Podra mejorarse el algoritmo contemplando el caso de ecuaciones degeneradas.

Algoritmo para el clculo de la hipotenusa de un tringulo rectngulo.


Datos de entrada: lado1, lado2
Datos de salida: hipotenusa
Instrucciones en lenguaje natural:
Calcular hipotenusa como el resultado de la operacin:
r

hipotenusa = lado12 + lado22

Tema 1. Programacin en C++: Introduccin

1.1.3.

L ENGUAJES

DE PROGRAMACIN

Un algoritmo de describe utilizando algn lenguaje especfico.


Lenguaje natural: como en los ejemplos anteriores.
Puede servir para resumir un algoritmo, pero el lenguaje
natural suele ser ambiguo.
Lenguaje de programacin: Lenguaje utilizado para comunicarnos con un ordenador e imponerle la realizacin concreta de un conjunto de rdenes.
Algunos lenguajes de programacin:

1. Lenguaje mquina.

Tema 1. Programacin en C++: Introduccin

10

2. Lenguajes de alto nivel (C, C++, Java, Pascal, Lisp, Prolog,


Mdula-2, Visual Basic, ...)
En esta asignatura usaremos C++ (ISO C++).

Descripcin (implementacin) del algoritmo de las medias (para 4 valores) en C++:


suma = valor1 + valor2 + valor3 + valor4;
media = suma / 4;

Descripcin (implementacin) del algoritmo para el clculo de


la hipotenusa:
hipotenusa = sqrt(lado1*lado1 + lado2*lado2);

Tema 1. Programacin en C++: Introduccin

11

Resea histrica del lenguaje C++


1967 Martin Richards: BCPL para escribir S.O.
1970 Ken Thompson: B para escribir UNIX (inicial)
1972 Dennis Ritchie: C
1978 Libro The C Programming Language, B. Kernigham, D. Ritchie.
1983 Comit Tcnico X3J11: ANSI C
1983 Bjarne Stroustrup: C++
1989 Comit tcnico X3J16: ANSI C++
1990 Internacional Standarization Organization http://www.iso.org
Comit tcnico JTC1: Information Technology
Subcomit SC-22: Programming languages, their
environments and system software interfaces.
Working Group 14: C
http://www.open-std.org/jtc1/sc22/wg14/

Working Group 21: C++


http://www.open-std.org/jtc1/sc22/wg21/

1999 ISO/IEC 9899


Documentos no oficiales:
Borrador final de C++ estndar http://www.kuzbass.ru/docs/isocpp
Incompatibilidades entre ISO C y ISO C++
http://david.tribble.com/text/cdiffs.htm

Tema 1. Programacin en C++: Introduccin

1.1.4.

12

P ROGRAMAS

Programa: Es el conjunto de instrucciones especificadas en un


lenguaje de programacin concreto, que pueden ejecutarse en
un ordenador y que resuelven un problema. Puede incluir uno
o ms algoritmos.

Ejemplo. Programa para dibujar planos de pisos.


Utilizar algoritmos para dibujar cuadrados, de medias aritmticas, salidas grficas en plotter, etc.
Muchos de los programas que se vern en MP1 implementarn
un nico algoritmo.

Al cdigo escrito en un lenguaje concreto se le denomina cdigo fuente. ste se guarda en ficheros de texto normales (en
el caso de C++ suelen tener extensin .cpp).

Tema 1. Programacin en C++: Introduccin

Ecuacion.cpp

/*
Programa para resolver la ecuacin de primer grado:
ax + b = 0
*/
#include <iostream> // Inclusin de los recursos de E/S
// (cin y cout)
using namespace std;
int main(){
double a, b, x;

// Programa Principal
// Declara las variables a, b, x

cout << "Considere la ecuacion ax + b = 0\n";


cout << "Introduzca el valor de a: ";
cin >> a;
cout << "Introduzca el valor de b: ";
cin >> b;
x = -b/a;
cout << "\n La solucin de la ecuacin es: " << x;
}

13

Tema 1. Programacin en C++: Introduccin

14

Ecuacion.cpp es un simple fichero de texto. Para obtener el programa ejecutable (el fichero en binario que puede ejecutarse en
un ordenador) a partir del cdigo fuente, se utiliza un compilador:

Cdigo fuente
Programa
Compilacin
del programa
ejecutable
La extensin usual del programa ejecutable en Windows es
.exe

Cdigo Fuente: Ecuacion.cpp


#include <iostream>
using namespace std;
int main() {
double a, b, x;

Compilador

cout << "Introduzca el valor de a: ";


cin >> a;
..........
}

Programa Ejecutable: Ecuacion.exe


10011000010000
10010000111101
00110100000001
11110001011110
11100001111100
11100101011000
00001101000111
00011000111100

Tema 1. Programacin en C++: Introduccin

15

Otro ejemplo:
/*
Programa para calcular la hipotenusa de un tringulo.
*/
#include <iostream>
#include <cmath>
using namespace std;
int main(){
//Programa Principal
double lado1, lado2, hip; //Declara variables para guardar
//los dos lados y la hipotenusa
cout << "Introduzca la longitud del primer cateto: ";
cin >> lado1;
cout << "Introduzca la longitud del segundo cateto: ";
cin >> lado2;
hip = sqrt(lado1*lado1 + lado2*lado2);
cout << "\n La hipotenusa vale " << hip;
}

Tema 1. Programacin en C++: Introduccin

1.2.
1.2.1.

E SPECIFICACIN
E SCRITURA

16

DE PROGRAMAS

Y ORGANIZACIN DE UN PROGRA -

MA

Los programas en C++ pueden dividirse en varios ficheros


aunque por ahora vamos a suponer que cada programa est escrito en un nico fichero (por ejemplo, Pitagoras.cpp).
Se pueden incluir comentarios en lenguaje natural.
/* Comentario en
varias lneas */
// Comentario 1 sola lnea

El texto de un comentario no es procesado por el compilador.


Al principio del fichero se indica que vamos a usar una serie de recursos definidos en un fichero externo o biblioteca
#include <iostream>
#include <cmath>
using namespace std;

A continuacin aparece int main(){ que indica que comienza el programa principal. ste se extiende desde la llave
abierta {, hasta encontrar la correspondiente llave cerrada.
Dentro del programa principal van las sentencias que componen el programa. Una sentencia es una parte del cdigo
fuente que el compilador puede traducir en una instruccin
en cdigo binario.

Tema 1. Programacin en C++: Introduccin

17

Las sentencias van obligatoriamente separadas por punto


y coma (;)
El compilador va ejecutando las sentencias secuencialmente de arriba abajo. En el tema 2 se ver como realizar saltos, es decir, interrumpir la estructura secuencial.
Cuando llega a la llave cerrada } correspondiente a main(),
y si no han habido problemas, el programa termina de ejecutarse y el Sistema Operativo libera los recursos asignados a dicho programa.
Existen varios tipos de sentencias:
Sentencias de declaracin de datos. Los datos son como
variables matemticas. Cada dato que usemos en un programa debe declararse al principio (despus de main), asocindole un tipo de dato concreto.
double lado1, lado2;
double hip;

// <- Separados por coma


// <- Pueden usarse varias lneas

Declara tres datos (variables) de tipo real que el programador puede usar en el programa.
Sentencias de clculo, a travs de la asignacin =
lado1 = 7;
lado2 = 5;
hip = sqrt(lado1*lado1 + lado2*lado2);

asigna a la variable hip el resultado de evaluar lo que aparece a la derecha de la asignacin.

Tema 1. Programacin en C++: Introduccin

18

Sentencias para mostrar informacin en el perifrico de salida establecido por defecto.


En MP1, dicho perifrico ser la pantalla, pero podra ser
un fichero en disco o dispositivo externo (impresora, plotter, puerto FireWire, etc.).
Se construyen usando cout, que es un recurso externo incluido en la biblioteca iostream.
Lo que se vaya a imprimir va separado de cout por <<.
Lo que haya dentro de un par de comillas dobles se
muestra tal cual, excepto los caracteres precedidos de
\. Por ejemplo, \n hace que el cursor salte al principio
de la lnea siguiente.
Los nmeros se escriben tal cual.
cout << "Valor de Pi: " << 3.1415927;
Si ponemos una variable, se imprime su contenido.
cout << "Introduzca la longitud del primer cateto: ";
.....
hip = sqrt(lado1*lado1+lado2*lado2);
cout << "\nLa hipotenusa vale " << hip;

Observad el espacio al final del mensaje


Qu hara lo siguiente? cout << "hip";
Aunque no es recomendable, tambin pueden ponerse
expresiones como:
cout << "\nLa hipotenusa vale " <<
sqrt(lado1*lado1+lado2*lado2);

Tema 1. Programacin en C++: Introduccin

19

Importante. Es conveniente dar un formato adecuado a la


salida de datos en pantalla. El usuario del programa debe
entender claramente el significado de todas sus salidas.
// MAL:
cout << totalVentas << numeroVentas
// BIEN:
cout << "\nSuma total de ventas = " << totalVentas;
cout << "\nNmero total de ventas = " << numeroVentas;

Tema 1. Programacin en C++: Introduccin

20

Sentencias para leer datos desde el dispositivo de entrada establecido por defecto. Por ahora, ser el teclado. Se
construyen usando cin, que es un recurso externo incluido
en la biblioteca iostream.
Su sintaxis ms elemental es la siguiente
cin >> variable;

Por ejemplo, cin >> lado1, espera a que el usuario introduzca un valor real (double) desde el teclado (dispositivo
de entrada) y, cuando se pulsa la tecla Intro, lo almacena
en la variable lado1. Conforme se va escribiendo el valor,
ste se muestra en pantalla, incluyendo el salto de lnea.
Es una asignacin en tiempo de ejecucin
Las entradas de datos deben etiquetarse adecuadamente:
// MAL:
cin >> lado1;
cin >> lado2;
// BIEN:
cout << "Introduzca la longitud del primer cateto: ";
cin >> lado1;
cout << "Introduzca la longitud del segundo cateto: ";
cin >> lado2;

Tema 1. Programacin en C++: Introduccin

21

Estructura bsica de un programa (los corchetes delimitan secciones opcionales):


[ /* Breve descripcin en lenguaje natural
de lo que hace el programa */ ]
[ Inclusin de recursos externos ]
using namespace std;
int main(){
[Declaracin de datos]

[Sentencias del programa separadas por ;]


}

Tema 1. Programacin en C++: Introduccin

22

Ejercicio. Crear un programa que pida un valor de intensidad y


resistencia e imprima el voltaje correspondiente, segn la Ley
de Ohm:
voltaje = intensidad * resistencia

Tema 1. Programacin en C++: Introduccin

1.2.2.

23

E LEMENTOS BSICOS DE UN LENGUAJE DE PRO GRAMACIN

1.2.2.1.

TOKENS Y REGLAS SINTCTICAS

Cada lenguaje de programacin tiene una sintaxis propia que


debe respetarse para poder escribir un programa. Bsicamente, queda definida por:
a) Los componentes lxicos o tokens. Un token es un carcter o grupo de caracteres alfanumricos o simblicos que
representa la unidad lxica mnima que el lenguaje entiende. Por ejemplo:
main
;
{
double
hip *
son tokens de C++. Pero por ejemplo, ni ni {{* son
tokens vlidos.
b) Reglas sintcticas que determinan como han de combinarse los tokens para formar sentencias.
Algunas reglas sintcticas se especifican con tokens especiales (formados usualmente por smbolos):
Separador de sentencias ;
Para agrupar varias sentencias se usa { }
Se ver su uso en el tema 2. Por ahora, sirve para agrupar las sentencias que hay en el programa principal.
Para agrupar expresiones (frmulas) se usa ( )
hip = sqrt((lado1*lado1)+(lado2*lado2));

Tema 1. Programacin en C++: Introduccin

1.2.2.2.

24

PALABRAS RESERVADAS

Suelen ser tokens formados por caracteres alfabticos.


Tienen un significado especfico para el compilador, y por tanto, el programador no puede definir variables con el mismo
identificador.
Algunos usos:
main

Para definir tipos de datos como por ejemplo double


Para establecer el flujo de control, es decir, para especificar el orden en el que se han de ejecutar las sentencias,
como if, while, for etc.
Estos se vern en el tema 2.
//

Errores sintcticos

int main(){
double main;
// main
es un nombre de dato incorrecto
double double; // double es un nombre de dato incorrecto
}

Tema 1. Programacin en C++: Introduccin

25

Palabras reservadas comunes a C (C89) y C++


auto
do
goto
signed
unsigned

break
double
if
sizeof
void

case
else
int
static
volatile

char
enum
long
struct
while

const
extern
register
switch

continue
float
return
typedef

default
for
short
union

Palabras reservadas adicionales de C++


and
class
false
not_eq
reinterpret_cast
typeid

and_eq
compl
friend
operator
static_cast
typename

asm
const_cast
inline
or
template
using

bitand
delete
mutable
or_eq
this
virtual

Palabras reservadas aadidas en C99


_Bool _Complex _Imaginary inline restrict

bitor
dynamic_cast
namespace
private
throw
wchar_t

bool
explicit
new
protected
true
xor

catch
export
not
public
try
xor_eq

Tema 1. Programacin en C++: Introduccin

1.2.3.

T IPOS

26

DE ERRORES EN LA PROGRAMACIN

Errores en tiempo de compilacin.


Ocasionados por un fallo de sintaxis en el cdigo fuente.
No se genera el programa ejecutable.
/* CONTIENE ERRORES
#include <iostre am>

*/

USING namespace std;


int main{}(
double la do1, lado2, hip:
lado1 = 2;
lado2 = 3
hip = sqrt(lado1**lado1 + ladp2*ladp2);
cout << "La hipotenusa vale << hip;
)

Errores en tiempo de ejecucin.


Se ha generado el programa ejecutable, pero se produce
un error durante la ejecucin.
.........
lado1 = 9;
lado2 = 4;
hip = sqrt(-lado1*lado1-lado2*lado2);
variable = 0;
dato = 10 / variable;
.........

Tema 1. Programacin en C++: Introduccin

27

Errores lgicos
Se ha generado el programa ejecutable, pero el programa
ofrece una solucin equivocada.
.........
lado1 = 4;
lado2 = 9;
hip = sqrt(lado1+lado1+lado2*lado2);
.........

Tema 1. Programacin en C++: Introduccin

1.3.

DATOS

1.3.1.

28

Y TIPOS DE DATOS

R EPRESENTACIN

EN MEMORIA DE DATOS E

INSTRUCCIONES

Un programa realiza instrucciones y opera con datos. Una vez


compilado el programa, todo son combinaciones adecuadas
de 0 y 1.
MEMORIA MASIVA
datos e instrucciones

MEMORIA PRINCIPAL
0101100 11110110 00000001 10100001
0001111 11100011 10100100 10111001
1111111 00111111 11010010 00100100

ENTRADA

instrucciones

datos e instrucciones

UNIDAD
DE CONTROL

CPU

SALIDA
datos

UNIDAD
ARITMETICO-LOGICA

datos

Tema 1. Programacin en C++: Introduccin

29

Datos
"Juan Prez" 1 0 1 1 .. 0 1 1
75225813

1 1 0 1 .. 0 0 0

3.14159

0 0 0 1 .. 1 1 1

Instrucciones
Abrir Fichero 0 0 0 1 .. 1 1 1
1 1 0 1 .. 0 0 0

Imprimir

Nos centramos en los datos.

1.3.2.

DATOS

Y TIPOS DE DATOS

Al trabajar con un lenguaje de alto nivel, no haremos referencia


a la secuencia de 0 y 1 que codifican un valor concreto, sino a
lo que representa para nosotros.
Un dato es un conjunto de celdas o posiciones de memoria
que tiene asociado un nombre (identificador) y un contenido
(valor).
NombreEmpleado
NmeroHabitantes
Pi

Juan Prez
75225813

3.14159

Tema 1. Programacin en C++: Introduccin

30

El compilador reconoce distintas categoras de datos (numricas, texto, etc.). Necesitamos almacenar muchos tipos de informacin (enteros, reales, caracteres, cadenas de caracteres,
etc.). Para cada tipo, el lenguaje ofrece un tipo de dato.
Por ejemplo, en C++:

Tipos

Enteros : int, long, ...


Reales : float, double, ...
Simples
Caracteres : char

Lgico : bool

Puntero : *
Numricos

Matriz
Cadena de caracteres : string
Compuestos

Registro

Fichero

Por ahora slo usaremos double, int, char y string.

Tema 1. Programacin en C++: Introduccin

1.3.2.1.

31

L ITERALES

Son la especificacin de un valor concreto de un tipo de dato.


Dependiendo del tipo, tenemos:
Literales numricos: son tokens numricos.
Para representar datos reales, se usa el punto . para especificar la parte decimal:
2
3
3.5
Literales de cadenas de caracteres: Son cero o ms caracteres encerrados entre comillas dobles:
"Hola"
Literales de otros tipos, como literales de caracteres, Literales lgicos, etc.

Tema 1. Programacin en C++: Introduccin

1.3.2.2.

32

D ECLARACIN DE DATOS

Cada dato que se use en un programa debe declararse al principio (despus de main), asocindole un tipo de dato concreto
y un identificador.
Al declarar un dato, el compilador reserva una zona de memoria para trabajar con l. Ningn otro dato podr usar dicha zona.
Cada dato debe estar asociado a un nico tipo de dato (el
tipo no puede cambiarse durante la ejecucin).
El valor que se le puede asignar a un dato depende del tipo
de dato con el que es declarado.
Los datos se pueden clasificar como:

variables
constantes

datos

Las variables con datos cuyo valor puede variar a lo largo


del programa, p.e., lado1.
Las constantes son datos cuyo contenido no vara a lo largo de la ejecucin del programa, p.e., el nmero .

Tema 1. Programacin en C++: Introduccin

33

Declaracin de variables:
Un nico identificador por declaracin:
<tipo> <identificador1>;
<tipo> <identificador2>;
...

Ejemplo:
double lado1;
double lado2;
double hip;

Varios identificadores por declaracin:


<tipo> <identificadores separados por coma>;

Ejemplo:
double lado1, lado2, hip;

Opcionalmente, se puede dar un valor inicial durante la declaracin:


<tipo> <identificador> = <valor_inicial>;
<tipo> <identificador> = <valor_inicial>,
<identificador>...;

Ejemplo:
double dato = 4.5;
int sumaCuentas = 0,
totalVentas;

Cuando se declara una variable y no se inicializa, sta no tiene


ningn valor asignado por defecto. Puesto que desconocemos
su valor, lo podremos considerar como basura, y lo representaremos grficamente por ?.

Tema 1. Programacin en C++: Introduccin

34

/* Programa para calcular la retencin a aplicar en


el sueldo de un empleado
*/
#include <iostream>
using namespace std;
int main(){
double salario_bruto; // Salario bruto, en euros
double retencion;
// Retencin a aplicar, en euros

salario_bruto
?

retencion
?

cout << "Introduzca salario bruto: ";


cin >> salario_bruto;
retencion = salario_bruto * 0.18;
cout << "Retencin a aplicar: " << retencion;
}

salario_bruto
32538.0

retencion
4229.94

Tema 1. Programacin en C++: Introduccin

35

Un error lgico muy comn es usar una variable no asignada:


int main(){
double salario_bruto; // Salario bruto, en euros
double retencion;
// Retencin a aplicar, en euros
retencion = salario_bruto * 0.18;

// :-(

cout << "Retencin a aplicar: " << retencion;


}

Tema 1. Programacin en C++: Introduccin

1.3.2.3.

36

DATOS CONSTANTES

Si slo permitimos un nico valor para un dato, usaremos una


constante. Se declaran como sigue:
const <tipo><identif>= <expresin>;

Suelen usarse identificadores slo con maysculas para diferenciarlos de los datos variables.

Tema 1. Programacin en C++: Introduccin

37

/* Programa para calcular la retencin a aplicar en


el sueldo de un empleado
*/
#include <iostream>
int main(){
const double IRPF=0.18; // Porcentaje gravamen fiscal
double retencion;
// Retencin a aplicar, en euros
double salario_bruto;
// Salario bruto, en euros

salario_bruto
?

IRPF
0.18

retencion
?

cout << "Introduzca salario bruto: ";


cin >> salario_bruto;
retencion = salario_bruto * IRPF;
cout << "\n Retencin a aplicar: " << retencion;
}

salario_bruto
32538

IRPF
0.18

retencion
4229.94

Tema 1. Programacin en C++: Introduccin

/* Programa que pide el radio de un crculo e imprime


en pantalla el rea correspondiente.
*/
#include <iostream>
using namespace std;
int main() {
const double PI = 3.1415926;
double area, radio;
cout << "Introduzca el valor del radio ";
cin >> radio;
area = PI * radio * radio;
cout << "El rea vale " << area;
PI = 3.15;
}

// <- Error de compilacin :-)

38

Tema 1. Programacin en C++: Introduccin

39

Ventaja declaracin de constantes:


Informacin al propio programador
Imposibilidad de cambiarlo por error (PI)
Cdigo menos propenso a errores. Para cambiar el valor
de PI, (por ejemplo por 3.1415927), slo hay que tocar en la
lnea de declaracin de la constante.

Una sintaxis de programa algo ms completa


[ /* Breve descripcin en lenguaje natural
de lo que hace el programa */ ]
[ Inclusin de recursos externos ]
using namespace std;
int main(){
[Declaracin de constantes]
[Declaracin de variables]

[Sentencias del programa separadas por ;]


}

Tema 1. Programacin en C++: Introduccin

1.3.2.4.

40

N ORMAS PARA LA ELECCIN DEL IDENTIFICADOR

Cada dato necesita un identificador nico. Un identificador de


un dato es un token formado por caracteres alfanumricos con
las siguientes restricciones:
Debe empezar por una letra o subrayado (_)
No pueden contener espacios en blanco ni ciertos caracteres especiales como letras acentuadas, la letra ee, las
barras \ o /, etc.
Ejemplo: lado1
lado2
precio_con_IVA
El compilador determina la mxima longitud que pueden
tener (por ejemplo, 31 caracteres)
Sensibles a maysculas y minsculas.
lado y Lado son dos identificadores distintos.
No se podr dar a un dato el nombre de una palabra reservada.
No es recomendable usar el nombre de algn identificador
usado en las bibliotecas estndar (por ejemplo, cout)
#include <iostream>
using namespace std;
int main(){
double cout; // Error de sintaxis
double main; // Error de sintaxis
...........
}

Tema 1. Programacin en C++: Introduccin

41

Consejos muy importantes para elegir el identificador de un dato:


El identificador de un dato debe reflejar su semntica (contenido).
l1, l2, hp
lado1, lado2, hip o, incluso mejor, hipotenusa
Usaremos minsculas, salvo la primera letra de nombres
compuestos (y los identificadores de las constantes).
precioventapublico, tasaanual
previoVentaPublico, precio_venta_publico
pvp, TasaAnual, tasa_anual
No se nombrarn dos datos con identificadores que difieran nicamente en la capitalizacin, o un slo carcter.
cuenta, cuentas, Cuenta
cuenta, coleccionCuentas, cuentaPpal

Tema 1. Programacin en C++: Introduccin

1.4.
1.4.1.

O PERADORES
T ERMINOLOGA

42

E XPRESIONES

EN

M ATEMTICAS

Notaciones usadas en los operadores:


Prefija. El operador va antes de los argumentos. Estos suelen encerrarse entre parntesis.
seno(3), tangente(x), media(valor1, valor2)
Infija. El operador va entre los argumentos.
3+5
x/y
Segn el nmero de argumentos, diremos que un operador es:
Unario. Slo tiene un argumento:
seno(3), tangente(x)
Binario. Tienes dos argumentos:
media(valor1, valor2)
3+5

x/y

n-ario. Tiene ms de dos argumentos.

Tema 1. Programacin en C++: Introduccin

1.4.2.

O PERADORES

43

EN UN LENGUAJE DE PROGRA -

MACIN

Al igual que en Matemticas, los operadores realizan una accin especfica.


Suelen devolver un valor.
Los operadores operan sobre los datos (variables o constantes), literales y sobre el resultado que dan otros operadores.
Ejemplos: + (suma), - (resta), * (producto), etc.
int main() {
const double PI = 3.1415926;
double area, radio;
cout << "Introduzca el valor del radio ";
cin >> radio;
area = PI * radio * radio;

La asignacin es otro operador (infijo y binario). En primer lugar, se evala el argumento de la derecha y se asigna el resultado al dato (variable) de la izquierda.
lado = 3 + 5;

Operador suma. Devuelve 8


Operador de asignacin

Tema 1. Programacin en C++: Introduccin

Argumentos del operador +


Argumentos del operador =

44

3
lado

5
3+5

Nota. Siempre debe haber una variable en el argumento de la


izquierda:
3+5 = lado; // Error de compilacin
Nota. El operador = NO representa una igualdad matemtica.
Qu hara lo siguiente?
double dato = 4;
dato = dato + 3;

En la mayor parte (no todos) de los operadores prefijos, los argumentos van entre parntesis y para denotarlos suelen usarse caracteres alfanumricos . Si hay varios argumentos se separan por una coma. Estos operadores se denominan funciones
sqrt(4)

sin(6.4)

pow(3,6)

Muchos operadores no estn disponibles directamente en el


lenguaje. Para poder usarlos, hay que incluir en el programa
la biblioteca donde viene su definicin. Algunas funciones de
cmath:
sqrt(x), sin(x), cos(x), pow(x,y), etc.

Tema 1. Programacin en C++: Introduccin

1.4.3.

45

E XPRESIONES

Una expresin es una combinacin de datos y operadores sintcticamente correcta, que el compilador evala y devuelve un
valor.
3
3+5
lado1
lado1*lado1
lado1*lado1 + lado2*lado2
sqrt(lado1*lado1 + lado2*lado2)

Las expresiones pueden aparecer a la derecha de una asignacin, pero no a la izquierda. Tambin pueden pasarse como
argumentos de operadores.
Una expresin NO es una sentencia de un programa:
Expresin: sqrt(lado1*lado1 + lado2*lado2)
Sentencia: hip = sqrt(lado1*lado1 + lado2*lado2)
Cuando el compilador evala una expresin, devuelve un valor
de un tipo de dato (entero, real, carcter, etc.). Diremos que la
expresin es de dicho tipo de dato.

Tema 1. Programacin en C++: Introduccin

Por ejemplo:
3+5 es una expresin entera
3.5+6.7 es una expresin de reales
int main(){
double dato_real;
int dato_entero;
dato_real = 3.5+6.7;
datos_entero = 3+5;
......
}

46

Tema 1. Programacin en C++: Introduccin

47

Cmo evala el compilador la siguiente expresin?


dato = 3+5*7;

Existen dos posibilidades que ofreceran resultados finales distintos:


Posibilidad 1:
1. Primero hacer 3+5
2. Despus, el resultado se multiplica por 7
El resultado sera: 56
Posibilidad 2:
1. Primero hacer 5*7
2. Despus, el resultado se suma a 3
El resultado sera: 38
La forma que adopta el compilador depende de la precedencia
de los operadores. Se ver posteriormente. Por ahora, ante la
duda, forzad la evaluacin deseada mediante la utilizacin de
parntesis:
dato = 3+(5*7);
dato = (3+5)*7;

Tema 1. Programacin en C++: Introduccin

48

Nota: Cuando se usa una expresin dentro de cout, el compilador detecta el tipo de dato y la imprime de forma adecuada.
cout << "\nResultado = " << 3+5;
cout << "\nResultado = " << 3.5+6.7;

Imprime en pantalla:
Resultado = 8
Resultado = 10.2

Tema 1. Programacin en C++: Introduccin

1.5.

T IPOS

1.5.1.

DE DATOS COMUNES EN

R ANGO

49

C++

Y OPERADORES APLICABLES A UN TI -

PO DE DATO

Las caractersticas que definen el comportamiento de un tipo


de dato son:
El rango de valores que puede representar, que depende
de la cantidad de memoria que dedique el compilador a su
representacin interna. Intuitivamente, cuanta ms memoria se dedique para un tipo de dato, mayor ser el nmero
de valores que podremos representar. La forma de hacerlo
(codificacin en binario) se ve en otras asignaturas.
La cantidad de memoria que el compilador asigna a cada tipo se
puede consultar mediante la operacin sizeof(<tipo>) cuyo resultado es un entero que contiene el nmero de bytes asignados
a <tipo>.
Los valores mnimos y mximos que se pueden representar para
cada tipo, se pueden consultar en los ficheros climits y cfloat.
Consultad tambin:
http://msdn2.microsoft.com/en-us/library/d4zh6te4.aspx

El conjunto de operadores que pueden aplicarse a los datos de ese tipo.

Tema 1. Programacin en C++: Introduccin

1.5.2.

L OS

1.5.2.1.

R ANGO DE LOS ENTEROS

50

TIPOS DE DATOS ENTEROS

Subconjunto del conjunto matemtico Z. La cardinalidad depender del nmero de bytes que cada compilador utiliza para
su almacenamiento. Cuanta ms memoria, ms datos distintos
podrn representarse.
Los compiladores suelen ofrecer distintos tipos enteros. En
C(C++): int, long, short, etc.
Por simplificar, en MP1 usaremos un nico tipo entero: int
Literales enteros
Los literales son la especificacin de un valor concreto de un
tipo de dato.
Los literales enteros son tokens formados por smbolos numricos. Pueden empezar con un signo negativo 34
-406778
0

Tema 1. Programacin en C++: Introduccin

51

Cmo representa internamente el compilador un literal entero?


Si es muy grande, en un tipo long. Por ejemplo 3333333333333
En otro caso, en un tipo int. Por ejemplo 3
Y si es demasiado grande? En un long, pero transformndolo en un valor desconocido.
int entero;
entero = 600000000000000000; //le asigna un valor basura

Importante: Es un error lgico

Tema 1. Programacin en C++: Introduccin

1.5.2.2.

52

O PERADORES

Operadores binarios
+

suma, resta, producto, divisin entera y mdulo.


El operador mdulo (%) representa el resto de la divisin entera
Devuelven un entero.
Binarios. Notacin infija: a*b

int
n =
n =
n =
n =
n =
5 /
5 /

n;
5 *
n +
5 /
5 %
7 %
7 =
7;

7;
1;
7;
7;
5;
n;

//
//
//
//
//
//
//

Asigna a la variable n
Asigna a la variable n
Asigna a la variable n
Asigna a la variable n
Asigna a la variable n
Sentencia Incorrecta.
Sentencia Incorrecta.

el
el
el
el
el

valor
valor
valor
valor
valor

35
36
0
5
2

Tema 1. Programacin en C++: Introduccin

53

Operadores unarios de incremento y decremento


++ y --

Incrementan y decrementan, respectivamente, el valor de la variable entera sobre la que se aplican (no pueden aplicarse sobre una expresin).
Unarios de notacin postfija.
<variable>++;

/* Incrementa la variable en 1
Es equivalente a:
<variable> = <variable> + 1; */

<variable>--;

/* Decrementa la variable en 1
Es equivalente a:
<variable> = <variable> - 1; */

int dato=4, aux1, aux2;


dato = dato+1;
// Asigna 5 a dato
aux1 = dato;
// Asigna 5 a aux1
dato++;
// Asigna 6 a dato
aux2 = dato;
// Asigna 6 a aux2

Operador unario de cambio de signo


-

Cambia el signo de la variable sobre la que se aplica.


Unario de notacin prefija.
int dato=4, aux1, aux2;
aux1 = -dato;
// Asigna -4 a aux1
aux1 = -aux1;
// Asigna 4 a aux1

Tema 1. Programacin en C++: Introduccin

1.5.2.3.

54

E XPRESIONES ENTERAS

Son aquellas expresiones, que al evaluarlas, devuelven un valor entero.


entera
56
(entera/4+56)%3

Reglas de precedencia:
()
- (operador unario de cambio de signo)
* / %
+ -

Cualquier operador de una fila superior tiene ms prioridad


que cualquiera de la fila inferior.
variable = 3+5*7;

// equivale a 3+(5*7)

Los operadores de una misma fila tienen la misma prioridad.


Se evalan de izquierda a derecha segn aparecen en una expresin.
variable = 3/5*7;

// equivale a (3/5)*7

Ejemplo. Incrementar el salario en 100 euros y calcular el nmero de billetes de 500 euros a usar en el pago.
(salario + 100) / 500
salario + 100 / 500

BIEN
MAL

Tema 1. Programacin en C++: Introduccin

1.5.3.

L OS

1.5.3.1.

R ANGO

55

TIPOS DE DATOS REALES

Subconjunto finito de R
Parte entera de 4,56 4
Parte real de 4,56 56
La precisin de un tipo real puede definirse como la diferencia
entre 1,0 y el siguiente nmero que se puede representar.
En Matemticas, R es denso, por lo que la precisin es infinita.
En cualquier lenguaje de programacin los reales tendrn una
precisin limitada, que depender de la cantidad de memoria
utilizada para representar la parte decimal.
Por ejemplo, si la precisin es 0,001, el valor 0,0003 no podra
representarse.
Los compiladores suelen ofrecer distintos tipos reales. Por ejemplo, en C(C++): float, double
Por simplificar, en MP1 usaremos un nico tipo real: double
En aplicaciones reales habr que escoger el tipo adecuado dependiendo de lo que representa.

Tema 1. Programacin en C++: Introduccin

56

Literales reales
Son tokens formados por dgitos numricos y con un nico
punto que separa la parte decimal de la real. Pueden llevar el
signo - al principio.
800.457
4.0
-3444.5

Tambin se puede utilizar notacin cientfica:


3e-5

que representa el valor 3 105 = 0,00001

Importante:
El literal 3 es un entero.
El literal 3.0 es un real.
Los compiladores suelen usar el tipo double para representar
literales reales.

Tema 1. Programacin en C++: Introduccin

1.5.3.2.

57

O PERADORES
+, -, *, /

Binarios, de notacin infija. Tambin se puede usar el operador


unario de cambio de signo (-)
Aplicados sobre reales, devuelven un real.
double r;
r = 5.0 * 7.0;
r = 5.0 / 7.0;

// Asigna a r el valor 35.0


// Asigna a r el valor 0.7142857

Cuidado! El comportamiento del operador / depende del tipo


de los operandos: si todos son enteros, es la divisin entera.
Si todos son reales, es la divisin real.
double r;
r = 5.0 / 7.0;
r = 5 / 7;
r = 5 / 7.0;

// Asigna a r el valor 0.7142857


// Asigna a r el valor 0
// <- Lo vemos despus

Tema 1. Programacin en C++: Introduccin

1.5.3.3.

58

F UNCIONES ESTNDAR

Hay algunas bibliotecas estndar que proporcionan funciones


que trabajan sobre datos numricos (enteros o reales) y que
suelen devolver un real. Por ejemplo, cmath
pow(), cos(), sin(), sqrt(), tan(), log(), log10(),
fabs(), ....

Todos los anteriores son unarios excepto pow, que es binario.


Devuelven un real.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double real, r;
real = 5.4;
r = sqrt(real);
r = pow(real,real);
}

Tema 1. Programacin en C++: Introduccin

1.5.3.4.

59

E XPRESIONES REALES

Son expresiones cuyo resultado es un nmero real.


En general, diremos que las expresiones aritmticas o numricas son aquellas expresiones bien enteras, bien reales.
double a, x, y, c, resultado;
resultado = x - sqrt(sqrt(a)-a*c))/(x-y);

Reglas de precedencia:
()
- (operador unario de cambio de signo)
* /
+ -

b +

b2 4ac

2a
-b+sqrt(b*b-4.0*a*c)/2.0*a
((-b)+(sqrt(b*b - (4.0*a)*c)))/(2.0*a)
(-b + sqrt(b*b - 4.0*a*c))/(2.0*a)

MAL
BIEN
RECOMENDADO

Tema 1. Programacin en C++: Introduccin

1.5.4.

60

O PERACIONES CON TIPOS NUMRICOS DISTIN TOS

Muchos operadores numricos permiten como argumentos, expresiones de tipos distintos.


5.0
5.0
5.0
5 /

* 7.0
/ 7.0
/ 7;
7;

Devuelve
Devuelve
Devuelve
Devuelve

35.0
0.7142857
0.7142857
0

Para evaluar una expresin con tipos distintos, el compilador


usar el tipo adecuado que sea capaz de albergar el resultado.
Por ejemplo, usar un double para almacenar el resultado de
5.0 / 7, es decir, 0.7142857.
El operador de asignacin tambin permite trabajar con tipos
distintos. Muy importante: Primero se evala la expresin en la
parte derecha de la asignacin y luego se realiza la asignacin.
double real;
int entero = 5;
real = 5;
real = entero

// double = int
// double = int

Internamente, transforma el valor 5 (en su representacin como un int) al valor 5.0 (en su representacin como un double)

Tema 1. Programacin en C++: Introduccin

61

double real;
real = 5 / 7;

//
//
real = 5.0 / 7; //
//

double
Asigna
double
Asigna

=
a
=
a

int
real el valor 0.0
double
real el valor 0.7142857

Otro ejemplo:
int edad1 = 10, edad2 = 5;
double media;
media = (edad1 + edad2)/2;

// :-(

asigna a media el valor 7.0.


Es un error lgico, difcil a veces de detectar.
Posible solucin: Declarar edad1 y edad2 como double? El resultado sera 7.5, pero no debemos cambiar el tipo asociado a
la edad, pues su semntica es de un entero.
int edad1 = 10, edad2 = 5;
double media;
media = (edad1 + edad2)/2.0;

// :-)

Tema 1. Programacin en C++: Introduccin

62

Qu pasa cuando asignamos un real a un entero? Simplemente, se pierde la parte decimal, es decir, se trunca.
double real;
int
entera;
real = 5.7;
entera = real

// Asigna a entera el valor 5

Este truncamiento tambin ocurre si ejecutamos


cin >> VariableEntera

e introducimos un valor real.


En general, debemos tener cuidado con las asignaciones a datos de un tipo ms pequeo que la expresin de la asignacin.
Los compiladores suelen advertir de este hecho, durante el
proceso de compilacin, con un aviso (pero no es un error de
compilacin).

1.5.5.

EL

1.5.5.1.

R ANGO

TIPO DE DATO CARCTER

Es un conjunto finito y ordenado de caracteres: letras minsculas, maysculas, dgitos del 0 al 9 y otros caracteres especiales.
Hay varios tipos de dato de carcter: char, wchar, signed char,
etc. En MP1 usaremos char.

Tema 1. Programacin en C++: Introduccin

63

Cdigo ASCII (256 caracteres) Cada carcter tiene un cdigo


numerado de 0 a 255.

Tema 1. Programacin en C++: Introduccin

64

Tema 1. Programacin en C++: Introduccin

65

Literales de carcter
Son tokens formados por:
O bien un nico carcter encerrado entre comillas simples:
! A a 5
Cuidado!: cinco o 11 no son literales de carcter.
O bien una secuencia de escape, es decir, el smbolo \ seguido de otro smbolo, como por ejemplo:
Secuencia
\n
\t
\b
\r
\f
\
\"
\\

Significado
Nueva lnea (retorno e inicio)
Tabulador
Retrocede 1 carcter
Retorno de carro
Salto de pgina
Comilla simple
Comilla doble
Barra inclinada

Las secuencias de escape tambin deben ir entre comillas


simples, por ejemplo, \n, \t, etc.

Tema 1. Programacin en C++: Introduccin

66

#include <iostream>
using namespace std;
int main(){
const char NUEVA_LINEA = \n;
char car;
car = B;
// Almacena B
cout << car << "ienvenidos";
cout << \n << "Empiezo a escribir en la siguiente lnea";
cout << \n << \t << "Acabo de tabular esta lnea";
cout << NUEVA_LINEA;
cout << \n << "Esto es una comilla simple: " << \;
}

Escribira en pantalla:
Bienvenidos
Empiezo a escribir en la siguiente lnea
Acabo de tabular esta lnea
Esto es una comilla simple:

Nota. Para escribir un retorno de carro, tambin puede usarse


una constante llamada endl en la forma:
cout << endl << "Adis" << endl

Tema 1. Programacin en C++: Introduccin

1.5.5.2.

67

F UNCIONES ESTNDAR

El fichero de cabecera cctype contiene varias funciones relativas a caracteres. Por ejemplo:
tolower

toupper

#include <cctype>
using namespace std;
int main(){
char car;
car = tolower(A);
car = toupper(A);
car = tolower(B);
car = tolower(?);
..................

//
//
//
//

Almacena
Almacena
Almacena
Almacena

a
A
b
?

Tema 1. Programacin en C++: Introduccin

1.5.6.

EL

68

TIPO DE DATO CADENA DE CARACTERES

Los literales de cadenas de caracteres son una sucesin de


caracteres encerrados entre comillas dobles:
"Hola", "a" son literales de cadena de caracteres
cout << "Esto es un literal de cadena de caracteres";

Hay que destacar que las secuencias de escape tambin pueden aparecer en los literales de cadena de caracteres presentes en cout
int main(){
cout << "Bienvenidos";
cout << "\nEmpiezo a escribir en la siguiente lnea";
cout << "\n\tAcabo de tabular esta lnea";
cout << "\n";
cout << "\nEsto es una comilla simple ";
cout << " y esto es una comilla doble \"";
}

Escribira en pantalla:
Bienvenidos
Empiezo a escribir en la siguiente lnea
Acabo de tabular esta lnea
Esto es una comilla simple y esto es una comilla doble "

Tema 1. Programacin en C++: Introduccin

69

El tipo de dato para declarar estos datos es string


int main(){
string mensaje_bienvenida;
mensaje_bienvenida = "\tCubero Corporation\n";
cout << mensaje_bienvenida;
........
}

Los operadores para string trabajan con una sintaxis distinta


a la que sabemos.
#include <iostream>
using namespace std;
int main(){
string cad;
cad = "Hola y ";
cad.append("adis");
cout << cad;
.....

Tema 1. Programacin en C++: Introduccin

1.5.7.

EL

70

TIPO DE DATO LGICO O BOOLEANO

Es un tipo de dato muy comn en los lenguajes de programacin que se utiliza para representar los valores verdadero y
falso que suelen estar asociados a una condicin.
En C++ se usa el tipo bool

1.5.7.1.

R ANGO

Un dato lgico, slo puede tomar dos valores: true (verdadero)


y false (falso).
Una expresin lgica es una expresin cuyo resultado es un
tipo de dato lgico.

1.5.7.2.

O PERADORES

Son los operadores clsicos de la lgica NO, Y, O que en C++


son los operadores !, &&, ||, respectivamente.
&& (Y)
true true true
true false false
false true false
false false false

|| (O)
true
true
true
false

true
false

! (NO)
false
true

Tema 1. Programacin en C++: Introduccin

71

Muchas funciones de cctpye devuelven un valor lgico


isalpha

isalnum

isdigit

...

Por ejemplo,
isalpha(3)

es una expresin lgica (devuelve false)


/* Ejemplo de tipo de dato lgico (bool)
#include <cctype>
using namespace std;

*/

int main() {
bool es_alfa, es_alfanum, es_digito_numerico;
bool compuesto;
es_alfa = isalpha(3);
// Asigna false a es_alfa
es_alfanum = isalnum(3);
// Asigna true a es_alfanum
es_digito_numerico = isdigit(3);
// Asigna true a es_digito_numerico
compuesto = (es_alfa && es_alfanum);
compuesto = (es_alfa || es_alfanum);
compuesto = !es_alfa;
.......
}

// Resultado: false
// Resultado: true
// Resultado: true

Tema 1. Programacin en C++: Introduccin

1.5.7.3.

72

O PERADORES R ELACIONALES

Son los operadores habituales de comparacin de expresiones


numricas.
Pueden aplicarse a operandos tanto enteros, reales, como de
caracteres y tienen el mismo sentido que en Matemticas. El
resultado es de tipo bool.
== (igual), != (distinto), <, >, <= (menor o igual) y >= (mayor o
igual)

La expresin (4 < 5) devuelve valor true


La expresin (4 > 5) devuelve el valor false
Nota:
!= es el operador relacional distinto.
! es la negacin lgica.
== es el operador relacional de igualdad.
= es la operacin de asignacin.

Tanto en == como en != se usan 2 signos para un nico operador

Tema 1. Programacin en C++: Introduccin

//

73

Ejemplo de operadores relacionales

int main(){
int entero1 = 3, entero2 = 5;
double real1, real2;
bool menor, iguales;
menor =
menor =
menor =
real1 =
real2 =
menor =
menor =
iguales

entero1 < entero2;


entero2 < entero1;
(entero1 < entero2) && !(entero2 < 7);
3.8;
8.1;
real1 > entero1;
!menor && (real1 > real2);
= real1 == real2;

Veremos su uso en la sentencia condicional:


if (4 < 5)
cout << "4 es menor que 5";
if (!(4 > 5))
cout << "4 es menor o igual que 5";

Nota. Cuidado cuando se comparan reales.


La expresin 1.0e15 == (1.0/3.0)*3.0 podra evaluarse a false
debido a la precisin finita para calcular (1.0/3.0) (0.333333333)

Tema 1. Programacin en C++: Introduccin

74

Reglas de Precedencia:
()
!
< <= > >=
== !=
&&
||

A es menor o igual que B y B no es mayor que C


A <= B && !B > C
(A <= B) && (!(B > C))
(A <= B) && !(B > C)

MAL
BIEN
RECOMENDADO

Ejercicio: Escribir una expresin lgica que devuelva true si


un nmero entero edad est en el intervalo [0,100]

Tema 1. Programacin en C++: Introduccin

1.5.8.

75

T RATAMIENTO EN C++ DE LOS TIPOS BSICOS

Hemos pretendido dar una visin general de los tipos de datos


presentes en los lenguajes de programacin, usando la sintaxis propia de C++.
Ahora bien, C++ presenta ciertas singularidades que merece la
pena comentar:

1.5.8.1.

E L TIPO char COMO UN TIPO ENTERO

En C++, el tipo char es realmente compatible con un tipo entero. Cuando hacemos
char c;
c = A;

estamos asignando a la variable c el nmero de orden en la


tabla ASCII del carcter A, es decir, el 65. Esta misma asignacin es posible con cualquier tipo entero:
int c;
c
c
c
c

=
=
=
=

A;
65;
7;
7;

//
//
//
//

Almacena
Almacena
Almacena
Almacena

65
65
55
7

En definitiva, lo nico que diferencia el tipo int del tipo char


es que el segundo es ms pequeo ya que est pensado para
almacenar los nmeros de rdenes de la tabla ASCII. Adems
cout slo reconoce el tipo char para caracteres.

Tema 1. Programacin en C++: Introduccin

76

Veamos algunas consecuencias:


Podemos operar con los caracteres como si fuesen nmeros:
char c;

// Tambin valdra int c;

c
c
c
c

//
//
//
//

=
=
=
=

A+1;
65+1;
7-1;
A + 7;

Almacena
Almacena
Almacena
Almacena

66 = B
66 = B
54 = 6
120

Qu imprimira la sentencia cout << A+1? No imprime


B como cabra esperar sino 66. La razn es simple, 1 es
un literal de tipo int que es ms grande que el tipo entero
char. Por lo tanto A+1 es una expresin de tipo int, y cout
imprime el entero correspondiente.
La relacin de orden entre caracteres se establece segn la
tabla ASCII. As la expresin (a > b) devuelve el valor
false.
Tambin podemos usar el operador - con dos argumentos
de carcter. Devuelve un entero:
int orden;
orden = c - a // Almacena 2

Tema 1. Programacin en C++: Introduccin

1.6.

77

R EFERENCIAS

Pgina web de la asignatura:


http://decsai.ugr.es/~mp1/

Referencias de funciones.
http://www.icce.rug.nl/documents/cplusplus/
http://c.conclase.net/librerias/index.php

Recursos en la web. Consultad


http://decsai.ugr.es/~mp1/enlaces.html

Libros fundamentales:
Garrido, A., Fundamentos de Programacin en C++. Delta
Publicaciones, 2005.
Savitch, W., Resolucin de problemas en C++, 2a Edicin,
Prentice Hall. Mayo, 2000.

Вам также может понравиться