1 Introduccion 3
2 Antes de empezar 5
2.1 De donde viene el lenguaje C++ . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4 Condiciones 33
4.1 La sentencia if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
i
Contenido Contenido
5 Iteraciones 47
5.1 La sentencia while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1
Contenido Contenido
2
Introduccion
1
Un curso de programacion de computadores puede iniciarse de diversas maneras, y es
as que los tantos autores que han escrito textos de fundamentos de programacion han
comenzado describiendo principalmente sus experiencias.
Entonces, podemos comenzar abordando el ciclo de vida de desarrollo de sistemas
o de software, o tambien describiendo en que consta un programa de computadora, o
talvez mostrando como motivacion ejemplos de software (aplicaciones CAD, Juegos inter-
activos, Sistemas Interactivos, etc.), o simplemente mostrando un programa de computa-
dora en algun lenguaje y explicando que es lo que hace linea a linea. Sea cual fuera la
manera de iniciar al lector en este fascinante arte de la programacion, el objetivo principal
es ensenar a escribir programas de computadora.
Sin embargo, escribir programas no solamente es un proceso mecanico como es-
cribir un texto, aun escribir cualquier documento requiere de cierto carisma, y ciertas
tecnicas para hacerlo mas elegante o mas agradable de leer. En ese sentido, escribir un
programa de computadora require de emplear diversas habilidades, como ser sumamente
creativo, ya que cada programador puede implementar un programa que solucione algun
problema muy distinto a cualquier otro programador, y en ese sentido podemos comparar
y ver que un programa es mejor que otro as como una pintura de algun pintor es mejor
que la de otro pintor. Tambien es importante preocuparse por aspectos de calidad, eficien-
cia, seguridad, rapidez, robustez, entre otros conceptos que se iran viendo a medida que
avancemos.
En este texto, emplearemos el lenguaje de programacion C++, en sus versiones 11
3
1. Introduccion
y 14, de forma que podremos aprovechar los conceptos mas modernos de programacion
as como tambien las potencialidades de este lenguaje en sus versiones actuales.
Antes de comenzar con el primer captulo del libro, debemos tener en cuenta que
el lenguaje C++ es unico, no existe varios lenguajes C++, lo que si es verdad es que hay
varios compiladores para el lenguaje C++, como el Microsoft vcc o el GNU GCC para
diversas plataformas (MinGW para Windows, Linux, OSX, etc.), Intel C++, Metrowerks
Codewarrior, Embarcadero C++Builder, entre otros (una lista mas detallada puede ser
encontrada en
https : {{en.wikipedia.org{wiki{List of compilers#C.2B.2B compilers)
Este texto comparte y aprueba los metodos y tecnicas empleadas en los textos de
programacion de los autores Deitel & Deitel [1], de modo que si desean profundizar en
algun asunto o tema en particular, se recomienda al lector consultar los textos de progra-
macion de los autores mencionados.
4
Antes de empezar
2
Como en muchos textos de Programacion y mas especficamente cuando hablamos de
programacion en/con el Lenguaje C++, debemos iniciar al lector (suponiendo en este caso
es nuevo en la programacion), mencionando y sugiriendo algunas herramientas que podra
usar para empezar YA a programar y experimentar con algunos ejemplos.
Como comentamos en la introduccion existen diversos compiladores para C++,
pero podemos recomendar algunos que consideramos sumamente simples de instalar y no
deben faltar en nuestra computadora.
Primero, si tenemos instalado alguna distribucion de Linux, debemos asegurarnos
que este instalado el compilador GNU GCC, sin embargo este es solo el compilador, no
posee alguna herramienta para poder editar o escribir codigo C++, entonces debemos in-
stalar algun editor o entorno de desarrollo (IDE). Para este proposito, podemos sugerir que
usen el editor Geany o tambien sublime, busquen en sus respectivas paginas para ver la
instalacion, aunque en Linux el modo usual de instalar es a traves de sus administradores
de aplicaciones como dnf en Fedora o Synaptic Ubuntu.
El compilador GNU GCC de hecho es el mas usado por ser multiplataforma, y
en ese sentido podemos instalarlo en Windows tambien, aunque este proceso no es tan
directo como en el caso de las distribuciones de Linux, podemos recomendar la version
que se incluye en el entorno de desarrollo CodeBlocks, vaya a la siguiente url
5
2. Antes de empezar
codeblocks13.12mingwsetupTDMGCC481.exe
6
2. Antes de empezar 2.1. De donde viene el lenguaje C++
Figure 2.2: Un ejemplo de programa en lenguaje C++ en el IDE Visual Studio 2013.
7
2. Antes de empezar 2.1. De donde viene el lenguaje C++
contrapartes en BCPL, y utilizo a B para crear las primeras versiones del sistema operativo
UNIX, en los laboratorios Bell en 1970.
El lenguaje C evoluciono a partir de B, gracias al trabajo de Dennis Ritchie (creador
del lenguaje C) en los laboratorios Bell. Inicialmente, se hizo muy popular como lenguaje
de desarrollo para el sistema operativo UNIX. En la actualidad, la mayor parte de los
sistemas operativos se escriben en C y/o C++. C esta disponible para la mayora de las
computadoras y es independiente del hardware. Con un diseno cuidadoso, es posible
escribir programas en C que sean portables para la mayora de las computadoras.
Por un largo tiempo (decadas de 90 y 2000), el uso del lenguaje C se diversifico
tanto que existan muchos compiladores desarrollados para diversos tipos de computa-
dores y sistemas operativos (a las que algunas veces se les denomina plataformas de hard-
ware y de software) produciendo variaciones en el lenguaje de programacion. Este fue un
grave problema para los desarrolladores de programas, quienes necesitaban escribir pro-
gramas portables que pudieran ejecutarse en varias plataformas. Entonces se vio la necesi-
dad de una version estandar de C. El Instituto nacional estadounidense de estandares
(ANSI) coopero con la Organizacion internacional para la estandarizacion (ISO) para es-
tandarizar C a nivel mundial; el documento estandar colectivo se publico en 1990, y se
conoce como ANSI/ISO 9899: 1990.
C99 es el estandar ANSI mas reciente para el lenguaje de programacion C. Se de-
sarrollo para evolucionar el lenguaje C, de manera que pudiera estar al corriente con el
poderoso hardware de la actualidad, y con los requerimientos cada vez mas exigentes de
los usuarios. El Estandar C99 es mas capaz (que los primeros Estandares de C) de compe-
tir con los lenguajes como Fortran para las aplicaciones matematicas. Las capacidades de
C99 incluyen el tipo long long para las maquinas de 64 bits, los numeros complejos para
las aplicaciones de ingeniera y un mayor soporte para la aritmetica de punto flotante.
C99 tambien hace a C mas consistente con C++, al permitir el polimorfismo a traves de
funciones matematicas de tipo generico, y por medio de la creacion de un tipo booleano
definido.
A principios de la decada de los ochenta, Bjarne Stroustrup desarrollo una ex-
tension del lenguaje C en los laboratorios Bell: C++. Este lenguaje proporciona un con-
junto de caractersticas que mejoran al lenguaje C (lenguaje netamente estructurado),
donde lo mas importante es proporcionar la capacidad de una programacion orientada a
objetos. Actualmente una revolucion se viene trabajando en la comunidad del software.
Escribir software rapido, correcto y seguro. Los objetos en esencia son componentes re-
8
2. Antes de empezar 2.1. De donde viene el lenguaje C++
utilizables de software, que modelan elementos del mundo real. Los desarrolladores de
software estan descubriendo que el uso de una metodologa de diseno e implementacion
modular y orientada a objetos puede hacerlos mas productivos que mediante las populares
tecnicas de programacion anteriores. Los programas orientados a objetos son mas faciles
de entender, corregir y modificar. Por esta razon, cambiamos a una pedagoga en la que se
presentan las clases y los objetos en los primeros captulos.
Sin embargo, es necesario conocer algunos aspectos de la programacion antes de
comenzar con la Programacion Orientada a Objetos, como son los tipos de dato fundamen-
tales del lenguaje C++, luego tambien es importante ver las estructuras de decision (if then
else), las estructuras de repeticion (for, while, do ... while) y la definicion y uso de funciones.
Posteriormente, podremos ver una introduccion a los conceptos basicos y la termi-
nologa de la tecnologa de objetos, iniciando con el desarrollo de clases personalizadas y
reutilizables, pero eso solo sera una vez que se tenga bastante practica con los conceptos
basicos de programacion.
9
2. Antes de empezar 2.1. De donde viene el lenguaje C++
10
Una vision general
3
Como para todo lenguaje de programacion lo primero que se tiene que conocer son los
tipos de datos, en C++ existen varios, y a continuacion los presentamos.
boolean. Este tipo de dato solo admite dos valores: true o false
char. Este tipo de datos ademas de ser declarado por omision como unsigned
signed. Este tipo con signo basicamente admite valores enteros negativos y positivos
en el rango de -127 al 127, entonces este tipo no se refiere concretamente a
representar caracteres sino a guardar valores que no superan ese rango.
11
3. Una vision general 3.1. Tipos de datos fundamentales
int. Este es uno de los tipos de dato mas usuales, ya que podemos usarlo para diversos
propositos. As como en char, tambien podemos escoger solo usar valores positivos
con el modificador unsigned aunque por omision toda declaracion del tipo int es
signed, es decir admitira valores negativos y positivos en el rango -2147483648 al
-2147483647, o en otras palabras 231 a 231 1. En el caso de unsigned los valores
admitidos son desde el 0 hasta el 232 1.
float. Este tipo de datos admite numeros con decimales, o podramos decir numeros reales,
aunque float solo admite numeros con hasta 7 dgitos despues del punto decimal.
double. Este tipo es similar a float solo que con mayor precision que float, hasta 15 dgitos
despues del punto decimal. Entonces a un tipo double se le conoce como un tipo
numerico de precision doble.
La siguiente tabla 3.1 muestra un resumen de los valores que admiten cada uno de
estos tipos de dato.
12
3. Una vision general 3.1. Tipos de datos fundamentales
Figure 3.1: Rangos de valores admitidos por los tipos de dato fundamentales en C++.
13
3. Una vision general 3.2. Un primer programa en C++
La linea 1 inicia con //, esto significa que lo que sigue es un comentario hasta el final
de la linea. Existe otro modo de comentario, es el de comentarios mas extensos. Por
ejemplo, si quisieramos colocar alguna explicacion mas extensa, la cual puede ser de
varias lneas, entonces debemos delimitarla entre /* y */.
La linea 2 nos indica que estamos incluyendo recursos que son parte de la biblioteca
14
3. Una vision general 3.2. Un primer programa en C++
estandar del lenguaje C++ (la STL, es un conjunto de utilidades que podemos hacer
uso y no tener que reinventar la rueda). En este caso se trata de estructuras y fun-
ciones que nos permiten entradas/lectura de valores desde el teclado y salida de
valores en la pantalla (figura 3.3).
La linea 4 nos indica que vamos a utilizar estructuras y funciones que estan dentro
del ambito std. Lo usual es llamar a las funciones o tipos de dato definidos dentro del
ambito std como std::, sin embargo, si necesitaramos usar varias funciones o tipos,
tendramos que estar siempre escribiendo el prefijo std::. Por ejemplo en la lnea 7
tendramos que colocar std::cout. Observe el programa 3.2 para ver la diferencia.
En las lneas 7 y 8 se estan utilizando la funcion cout que permite imprimir algun
valor en la pantalla. cout permite imprimir valores de variables y constantes, y en
este caso se esta imprimiendo un texto constante Hola zn C++. Finalmente, en la
linea 8, endl imprime un retorno de linea en la pantalla de salida (figura 3.3).
Ahora, por otro lado, observe el operador , a este se le conoce como el operador de
insercion de flujo. Cuando el programa se ejecuta, el valor a la derecha del operador
(el operando derecho) se inserta en el flujo de salida. Note que el operador apunta
en la direccion hacia la que van los datos. Por lo general, los caracteres del operando
derecho se imprimen exactamente como aparecen entre las comillas dobles. Sin em-
bargo, los caracteres zn no se imprimen en la pantalla (figura 3.3). A la barra diagonal
inversa (z) se le llama caracter de escape. Este caracter indica que se va a imprimir
15
3. Una vision general 3.2. Un primer programa en C++
Cuando se encuentra una barra diagonal inversa en una cadena de caracteres, el sigu-
iente caracter se combina con la barra diagonal inversa para formar una secuencia
de escape. La secuencia de escape zn representa una nueva lnea y hace que el cursor
(es decir, el indicador de la posicion actual en la pantalla) se desplace al principio de
la siguiente lnea en la pantalla. En la linea 8 endl es una alternativa a zn.
Listing 3.2: Programa para imprimir una linea de texto (Version sin incluir el uso del
ambito std)
1 # i n c l u d e <iostream >
2
3 i n t main ( ) {
4 std : : cout << Hola C++<<std : : endl ;
5 return 0;
6 }
16
3. Una vision general 3.3. Modificando el Primer programa en C++
El primer programa visto solo imprima un texto que estaba explcitamente definido, es
decir un texto constante. Ahora modificaremos el programa para que podamos imprimir
algunas variables. Analicemos el programa 3.3. Observamos que se declara la variable
global n fuera de la funcion main. Variable global significa que podemos usarla en cualquier
funcion, no solamente en main.
Luego, se ha declarado tambien la variable c. Esta variable esta dentro de la funcion
main lo que significa que es una variable local, y no la podremos usar fuera de la funcion
main.
Tambien se ha declarado la variable res, y como podemos notar se le asigna el
resultado de la multiplicacion de n y c.
Finalmente se pide imprimir los valores de las tres variables empleando la funcion
cout. La salida se muestra en la figura 3.4.
17
3. Una vision general 3.4. Otro programa C++: ingreso/lectura de valores desde el teclado
Listing 3.4: Programa que suma dos valores ingresados desde el teclado
1 # i n c l u d e <iostream >
2 using namespace std ;
3
4 i n t main ( ) {
5 int a, b;
6 cout<< I n g r e s e un numero : ;
7 cin>>a ;
8 cout<< I n g r e s e o t r o numero : ;
9 cin>>b ;
10 cout << La suma e s : ;
11 cout << a + b << endl ;
12 return 0;
13 }
18
3. Una vision general 3.5. Editar, compilar y ejecutar el programa
19
3. Una vision general 3.5. Editar, compilar y ejecutar el programa
20
3. Una vision general 3.6. Uso de variables
Debe ser solo una palabra, si se requiere un nombre compuesto de dos o mas pal-
abras, podemos usar el guion bajo ( ) para unirlas y hacer que sea solo una palabra.
21
3. Una vision general 3.6. Uso de variables
Note que al final de la declaracion hay el punto y coma (;), este caracter indica la
ejecucion de una sentencia, en este caso indica que la variable es creada, con el nombre y
tipo indicados.
Es posible tambien hacer una declaracion de multiples variables para el mismo tipo
de dato.
tipo nombre 1, nombre 2, ..., nombre n;
Observe que hay una coma (,) que separa los nombres, y al final un punto y coma.
Nuevamente aqu, cuando el compilador lee el punto y coma, ejecutara la sentencia, en
este caso la creacion de todas las variables del tipo de dato indicado.
Existe una tercera manera de declarar variables y es inicializando valores.
tipo nombre = val;
tambien podemos combinar con la declaracion de multiples variables. Vea el codigo
3.5 para un ejemplo real.
22
3. Una vision general 3.7. Uso de constantes
double pi;
float raiz cuadrada de x;
int resultado;
float sumaParcial;
Existe una convencion de usar, para la primera letra de nombres de variables, solo
minusculas, ya que palabras que empiezan con mayusculas se usan para nombres de fun-
ciones.
3.8 Operadores
Ahora que ya conocemos como declarar variables, podemos ya hacer algunos calculos. Para
ese proposito existen los operadores y la mayora se comporta como en las matematicas.
Veamos la siguiente tabla.
23
3. Una vision general 3.8. Operadores
Esta tabla le sera muy util a la hora de usar los distintos operadores, tanto ar-
itmeticos como logicos o de comparacion.
24
3. Una vision general 3.8. Operadores
25
ax2 ` bx ` c 0, (3.1)
debemos calcular ?
b b2 ` 4ac
x , (3.2)
2a
la primera solucion sera calculando por ` mediante la formula
float x1 = (-b + sqrt(b*b - 4*a*c))/2*a;
la segunda sera
float x2 = (-b - sqrt(b*b - 4*a*c))/2*a;
Note que en el calculo de las raices estamos usando la funcion sqrt. Para que el
compilador reconozca esta funcion, debemos incluir el archivo donde esta se encuentra
definida, y es en el archivo cmath y la incluiremos en las primeras lneas del programa,
luego enseguida de iostream
#include iostream
#include cmath
Note que a las variables x1 y x2 se les ha asignado valores, y estos son el resultado
del calculo de una expresion. En C++, una expresion es una composicion de terminos
(variables) y operadores. En este caso debemos conocer a priori los terminos o variables a,
b y c.
26
3. Una vision general 3.9. El operador de atribucion
Podemos notar que variables tienen valore y cuales no, as como posible errores que se
cometen. Ahora veamos este otro ejemplo 3.7. Aqu basicamente queremos hacer notar
que el programa no se ejecuta en bloque, lo que ocurre es que se ejecuta linea a linea
de arriba a abajo. Entonces, haremos una explicacion cronologica de como se ejecuta el
programa en la figura 3.10.
27
3. Una vision general 3.10. Memoria del computador
3.11 Identificadores
De manera similar a las matematicas, donde nombramos a las diferentes entidades (con-
juntos, vectores, matrices, etc.) con letras del alfabeto a, x, s, etc. o inclusive en otras situa-
ciones podemos usar palabras como altitud, ancho, suma, etc. A ellos se les denomina
28
3. Una vision general 3.12. Conversion de tipos
29
3. Una vision general 3.13. Caracteres
aun cuando hagamos la conversion a double de la fraccion, este valor sera atribuido
a una variable de tipo float, y como vimos en la tabla 3.1 float tiene 7 dgitos de precision
despues del punto decimal, por lo que en este caso frac tendra el valor de 0.33333334,
perdiendo precision.
Entonces por lo que pudimos ver, hay que tener cuidado en el valor a convertir y la
variable a la que vamos a atribuir.
3.13 Caracteres
Hay un tratamiento especial para caracteres, ya que estos guardan un valor entero, el
codigo del caracter (ver tabla 3.2), y ademas el caracter. Veamos el siguiente Ejemplo.
La salida se muestra en la figura 3.12, donde podemos notar que solo la impresion/salda
de la linea 7 muestra el caracter correspondiente (en este caso a), sin embargo la siguiente
salida (linea 8) imprime un numero, por que?. Al realizar una operacion aritmetica, entre
un tipo de dato caracter (char) y cualquier otro tipo, el resultado siempre sera un tipo
numerico, es decir, que el compilador tomara el valor numerico de char (el codigo del
caracter) y hara la operacion aritmetica, manteniendo el resultado como un nuevo valor
numerico.
30
3. Una vision general 3.14. Tipos enumerados
Para una mayor comprension del uso de enum veamos el siguiente ejemplo.
31
3. Una vision general 3.14. Tipos enumerados
Hemos definido nuevos tipos de datos en las lneas 6, 7 y 8 (Alarm, Medida y Dia), ob-
viamente sabemos que cada uno de estas variables solo pueden tomar algunos valores,
por ejemplo una Alarma podra estar o bien apagada o encendida, lo mismo con Da, solo
podra ser de Lunes a Domingo, etc. Pero ademas de eso, tambien debemos considerar que
estos valores deben tener un valor numerico, como el de alarma apagada debe ser 0 (cero),
y encendida 1 (uno). Algo similar ocurre con Dia, Lunes debe empezar con 1, puesto que
0 no sera lo mas apropiado, y ademas sabemos que lunes es el primer da de la semana.
Otro ejemplo es Medida, suponiendo que consideramos la unidad mnima al gramo, y de
ah sabremos que el resto de unidades son compatibles con una cierta cantidad de gramos,
y eso facilitara conversiones entre un tipo a otro, por ejemplo cuanto es 2 libras en kilos?
(Linea 16 del programa). La salida del programa se muestra en la figura 3.13.
1 enum Color { Red = 1 , Orange , Yellow , Green , Blue , Violet } ; // OK, Orange tomara 2 ,
Yellow 3 , . . . y a s i sucesivamente
2 enum Level { First = 1 , Second = 2 , Fourth , Third = 3 } ; // E r r o r !
3 enum Layer { One = 1 , Two = 2 , Three = 3 , Four , Five } ; // OK, Four e s 4 y F i v e s e r a 5
32
Condiciones
4
Anteriormente hemos visto algunos ejemplos de programas, pero todos los programas han
hecho exactamente lo que se ha indicado en el codigo, es decir, sin depender de algun valor
en particular. sentencia 1; sentencia 2; ... sentencia n;
Mas o menos en ese sentido, pero no siempre los programas son secuencias de
sentencias explcitas, me refiero a que algunas veces se deben ejecutar otras sentencias
y otras veces otras sentencias, dependiendo de la evaluacion de condiciones. Veamos el
siguiente ejemplo.
33
4. Condiciones 4.1. La sentencia if
Observe que el programa emplea el tipo de dato bool, este tipo de dato solo puede asumir
dos valores 0 o 1, o en todo caso false o true. Y para que usamos este tipo de dato?.
El ejemplo es mas o menos claro en ese sentido, ya que una compuerta solo puede es-
tar cerrada o abierta, no hay otros estados que verificar. Ademas de eso, con los tipos
booleanos podemos usar el algebra boolena, como en la linea 7, donde para cambiar el
estado de la compuerta a cerrada, simplemente negamos que la compuerta esta abierta,
o en cualquier caso podemos decir que 1 !0 y visceversa 0 !1. Esto mismo, con val-
ores boolenos, true !f alse o f alse !true. Y finalmente que hacemos con los valores
booleanos, cuando los usamos?. Imagine que queremos saber si la compuerta esta abierta o
cerrada, pero esa es una informacion que no conocemos, es decir que no sabemos hasta que
vamos y verificamos. Vea el siguiente ejemplo para entender de lo que estamos hablando.
4.1 La sentencia if
Continuando con el ejemplo anterior, un programa no entendera la palabra abierto o
cerrado, son textos que carecen de significado. Ciertamente podramos implementar
un programa que entienda palabras, es decir comprenda el lenguaje natural, pero eso no
34
4. Condiciones 4.1. La sentencia if
es tan simple como mostrar un mensaje. Entonces, lo que el programa con el tipo de
dato bool entiende es 1 o 0, y ahora debemos indicar que 1 es abierto y 0 cerrado. La
sentencia if justamente permitira evaluar el resultado de una expresion y caso sea true
ejecutar una o varias sentencias, caso sea false, el programa simplemente continuara a
ejecutar las sentencias subsecuentes. Note que las sentencias dentro de if solo se ejecutan si el
resultado de la expresion es true Vemos la sintaxis de uso de if.
i f ( expresion ) {
// s e n t e n c i a s
}
Ahora, veamos entonces como usar if en el programa para indicar el estado de la com-
puerta.
Figure 4.3: Salida del programa 4.3. cuando la expresion es verdad (true o 1)
Figure 4.4: Salida del programa 4.3. cuando la expresion es falsa (false o 0)
En este ultimo programa 4.3, debe haber notado la palabra cin y el operador .
As como cout (que viene de c-output o salida) es usado para mostrar (en pantalla o con-
35
4. Condiciones 4.2. La sentencia if - else
sola) valores de cualquier variable o constante, cin (que viene de c-input o entrada) es
usado para recepcionar valores que el usuario da cuando se le solicita.
Si ejecutamos este programa el resultado sera inesperado (ver figura 4.5), por que?.
Ciertamente en un primer momento podramos pensar que para que dividiramos un nu-
mero por cero, claro en este ejemplo parece as tan simple, pero pensemos mas alla de lo
evidente. Que pasara si quisieramos hacer un calculo de porcentaje y el usuario por error
ingresa al total como cero?, o si el valor que divide es el resultado de un calculo previo que
resulta cero. Entonces, siempre habra la posibilidad de que nuestro programa este frente
a una division por cero, y cuando eso ocurra no podemos simplemente dejar que el pro-
36
4. Condiciones 4.2. La sentencia if - else
grama se cierre inesperadamente, sino por el contrario evitar la division por cero y alertar
que ocurrio ese problema.
Considerando que no podemos ignorar la posibilidad de una division por cero,
entonces debemos tratar esa posibilidad, vea atentamente el siguiente programa.
Las figuras 4.6 y 4.7 muestran las dos posibilidades. Seguramente habra observado
que en el programa aparece la palabra else, esta variante de la sentencia if es justamente
para decidir que hacer cuando la expresion evaluada por if es falsa o 0 (cero).
i f ( expresion ) {
// s e n t e n c i a s
} else {
// s e n t e n c i a s
37
4. Condiciones 4.3. La sentencia if - else multiple
38
4. Condiciones 4.3. La sentencia if - else multiple
ple mas adecuado, aunque sintacticamente es lo correcto, pero hay una sutil consideracion
que debemos tener. Observe que una sentencia if-else es de una sola ejecucion, es como
si estuvieramos ejecutando una sola linea. Vea cuidadosamente el ejemplo 4.7 y note las
diferencias con respecto al ejemplo 4.6.
Podemos ver que cuando toca evaluar else ya no incluye el caracter abre llave y por consigu-
iente ya no aparece cierra llave. Pero por que no son necesarias las llaves?. La respuesta es
por que sabemos de antemano que la parte else evaluara otra unica posibilidad, es decir
que sabemos que se hara solamente otra evaluacion. Ademas, podramos decir tambien
que si hay una sola linea a ejecutar dentro de if tampoco seria necesario usar llaves, el
uso de llaves es realmente necesario cuando se van a ejecutar mas de una sentencia (vea y
39
4. Condiciones 4.3. La sentencia if - else multiple
Bien, ahora que sabemos que, en este caso de seleccion multiple, la parte else de cada if
debera simplemente ejecutar otra verificacion, podemos reorganizar el codigo para una
version mucho mas compacta y legible mostrada en el ejemplo 4.10.
40
4. Condiciones 4.3. La sentencia if - else multiple
3 i n t main ( ) {
4 i n t nota ;
5 cout<< i n g r e s e nota : <<endl ;
6 cin>>nota ;
7 i f ( nota <=10) {
8 cout<< D e f i c i e n t e <<endl ;
9 } e l s e i f ( nota <=13) {
10 cout<< Regular <<endl ;
11 } e l s e i f ( nota <=16) {
12 cout<<Bueno<<endl ;
13 } e l s e i f ( nota <=18) {
14 cout<<Muy Bueno<<endl ;
15 } e l s e i f ( nota <=20) {
16 cout<< E x c e l e n t e <<endl ;
17 }
18 return 0;
19 }
Finalmente, hay algo que agregar a este programa de clasificacion de notas. Que
pasara si el usuario ingresa un valor menor a cero, o mayor a 20?. Ciertamente el programa
debe de mostrar un mensaje indicando que la nota esta fuera del rango permitido. El
programa final es mostrado en el ejemplo 4.4.
41
4. Condiciones 4.4. Composicion de expresiones booleanas
i f ( x>=a ) {
i f ( x<=b ) {
// s e n t e n c i a s
}
}
La otra manera es mucho mas simple, pero debemos comprender el uso de otros oper-
adores como && que es el ^ logico.
Vea la siguiente tabla para poder ver el uso de los operadores logicos mas impor-
tantes.
42
4. Condiciones 4.5. Condicionales anidadas
43
4. Condiciones 4.6. La sentencia switch
break ;
}
c a s e a2 : {
cout << one ;
break ;
}
c a s e a3 : {
// s e n t e n c i a s
break ;
}
...
c a s e an : {
// s e n t e n c i a s
break ;
}
default : {
// s e n t e n c i a s
}
}
Donde a1, a2, a3, ... an son valores enteros o en todo caso constantes que puedan tener
un valor entero asociado (como es el caso de los caracteres). En ningun caso podemos
intentar evaluar un valor no entero. Ademas de la condicion previa, note que cada caso se
comportara como una sentencia if (ver version equivalente con sentencias if 4.14), donde,
si se cumple ese caso, podemos ejecutar una o multiples sentencias, y lo mas importante
es: No olvidar la sentencia break;, ya que si no le ponemos aun sera posible que evalue
los otros casos y tambien la ultima posibilidad default:. default: es usado opcionalmente
para poder hacer alguna cosa, si es que el valor de var no es contemplado en ningun caso.
Pero en este ultimo caso, podemos obviar usar la sentencia break; ya que de todas maneras
terminara la ejecucion de la structura switch.
Listing 4.14: if-else multiple equivalente a la estructura switch del codigo 4.13
i f ( var==a1 ) {
// s e n t e n c i a s
} e l s e i f ( var==a2 ) {
// s e n t e n c i a s
} e l s e i f ( var==a3 ) {
// s e n t e n c i a s
}
...
} e l s e i f ( var==an ) {
// s e n t e n c i a s
} else {
44
4. Condiciones 4.6. La sentencia switch
// c a s o por omision ( d e f a u l t )
// s e n t e n c i a s
}
Note que en el ejemplo 4.15 no se estan usando las llaves en cada caso, esto es por que solo
ejecutamos una sola sentencia con la funcion cout. Solo son necesarias las laves siempre
que sea vayan a ejecutar mas de una sentencia. break;,en este caso, no es considerado como
una sentencia (nos referimos solo a la estructura switch). Un resultado para el programa
4.15 se muestra en la figura 4.10
45
4. Condiciones 4.6. La sentencia switch
46
Iteraciones
5
Iteraciones se refiere a repetir la ejecucion de una sentencia o secuencia de sentencias un
numero determinado o indeterminado de veces, regido bajo el cumplimiento de algun
criterio en particular. Normalmente va asociado con una sentencia if interna. Entonces,
se entiende que debe ejecutar una(s) sentencia(s) si es que se cumple una dada condicion.
Existen dos estructuras bien conocidas para este proposito, la sentencia for y la sentencia
while.
47
5. Iteraciones 5.1. La sentencia while
determine cuantas repeticiones se ejecutaran, por lo tanto la condicion no puede ser con-
stante, aunque nada impide que lo sea. Sin embargo, debemos tener en claro cuantas
repeticiones queremos ejecutar. Como ejemplo supongamos que queremos mostrar la lista
de los primeros n numeros enteros comenzando del 1 (ver programa 5.2).
Como podemos observar, el numero que ingresa el usuario es la cantidad de veces que ira
repetir el bucle while. Entretanto, note que estamos empleando una variable auxiliar int i
= 1; que aumenta a cada repeticion, de tal forma que podemos controlar la condicion, y al
mismo tiempo imprimir el i-esimo numero entero. Una salida del programa es mostrado
en la fig 5.1
48
5. Iteraciones 5.1. La sentencia while
49
5. Iteraciones 5.1. La sentencia while
11 cout<<nro<<endl ;
12 i++;
13 nro = nro * 1 0 ;
14 }
15 return 0;
16 }
Otro problema semejante es el de la figura 5.3. Sin embargo este tiene el texto
alineado a la derecha. En c++, con la biblioteca iomanip es posible darle justificacion
a las salidas dependientes de cout. Revise atentamente el codigo 5.5.
50
5. Iteraciones 5.1. La sentencia while
12 i f ( i>n ) break ;
13 cout<<std : : right<<setw ( n ) <<s<<endl ;
14 i++;
15 s += 0 ;
16 }
17 return 0;
18 }
51
5. Iteraciones 5.1. La sentencia while
52
Bibliography
[1] Paul J. Deitel. C++ How to Program. P.J. Deitel, H.M. Deitel. Pearson Education, 7th
edition, 2010.
53