Está en la página 1de 44

LENGUAJE DE PROGRAMACIÓN C++

1. HISTORIA DEL C++

C++ es algo así como la evolución del lenguaje C. La intención de su creación fue el
extender al exitoso lenguaje de programación C con mecanismos que permitan la
manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes
orientados a objetos, el C++ es un lenguaje híbrido. La historia de C (predecesor de
C++) parte de un lenguaje anterior, el lenguaje B, escrito por Ken Thompson en 1970
con el objetivo de recodificar el sistema operativo UNIX, que hasta el momento se
había programado en ensamblador. Lo malo del lenguaje ensamblador era que lo ligaba
a una serie de máquinas concretas, por lo que conseguir un lenguaje abstraído de cada
máquina conseguiría una portabilidad del sistema muchísimo mayor. A su vez B fue
inspirado en el BCPL de Martin Richards, diseñado tres años antes.

En 1972 es Dennis Ritchie (de los Laboratorios Bell de AT&T) quien diseña finalmente
C a partir del B de Thompson, aportando un diseño de tipos y estructuras de datos que
consiguen una claridad y eficacia en el lenguaje muy superior. Es un lenguaje que
permite realizar una programación estructurada economizando las expresiones, con
abundancia de operadores y tipos de datos (aunque los básicos sean pocos),
codificando en alto y bajo nivel simultáneamente, reemplazando ventajosamente la
programación en ensamblador y permitiendo una utilización natural de las funciones
primitivas del sistema.

Durante muchos años no existieron reglas estándar para el lenguaje, pero en 1983 se
decide formar un comité con el objetivo de crear el estándar ANSI. El proceso dura
seis años y a principios de los 90 el estándar es reconocido por la ISO (Organización
Internacional de Estándares) y comienza a comercializarse con el nombre ANSI C.

Nota: Lo que verás a continuación es un algoritmo escrito en C, lo cual es una


pequeña aproximación a lo que es C++ como tal, no te preocupes si no entiendes lo
que dice o hace este código, pues más adelante lo comprenderás a la perfección. Este
código, escribe en pantalla la frase "Hola Mundo" (sin las comillas).

/* Hola mundo escrito en C */


#include "stdio.h"
void main()
{
printf( "Hola mundo" );
}

Paralelamente, en 1980 surge C++ de la mano de Bjarne Stroustrup (también de


Laboratorios Bell de AT&T). Diseña este lenguaje con el objetivo de añadir a C
nuevas características: clases y funciones virtuales (de SIMULA 67), tipos genéricos y
expresiones (de ADA), la posibilidad de declarar variables en cualquier punto del
programa (de ALGOL 68), y, sobre todo, un auténtico motor de objetos con herencia
múltiple que permite combinar la programación imperativa de C con la programación
orientada a objetos. Estas nuevas características mantienen siempre la esencia del
lenguaje C: otorgan el control absoluto de la aplicación al programador, consiguiendo
una velocidad muy superior a la ofrecida por otros lenguajes. El nombre C++ fue
propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por
primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con
clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que

1
C++ es una extensión de C. El siguiente hecho fundamental en la evolución de C++
es sin duda la incorporación de la librería STL años más tarde, obra de Alexander
Stepanov y Andrew Koening. Esta librería de clases con contenedores y algoritmos
genéricos proporciona a C++ una potencia única entre los lenguajes de alto nivel.

Debido al éxito del lenguaje, en 1990 se reúnen las organizaciones ANSI e ISO para
definir un estándar que formalice el lenguaje. El proceso culmina en 1998 con la
aprobación del ANSI C++.

Finalizaremos esta sección con el famoso "Hola Mundo" en C++, puedes comparar la
diferencia entre ambos códigos y determinar las nuevas características que tiene C++
sobre C.

/* "Hola mundo" escrito en C++ */


#include "iostream" Deja tus comentarios acá, qué cambió
using namespace std;
void main()
{
cout << "Hola mundo";
}

Define y diga su función de: sdtio, iostream, using namespace std, cout, ;, /* */.

2. COMENTAR CÓDIGO EN C++. DOCUMENTA TUS APLICACIONES POR MEDIO DE


COMENTARIOS EN TU CÓDIGO

Los comentarios son una herramienta proporcionada por un lenguaje de programación


que nos ayudará a apoyar la documentación de los programas en C++ y a que sean
fácilmente comprendidos por otros. Los comentarios, son líneas de código, que no son
tenidas en cuenta por el compilador en el momento de ejecutar nuestra aplicación, por
lo tanto, no están sujetas a restricciones de sintaxis ni nada similar, el uso principal de
las líneas de comentario, es dar un orden y hacer más entendible nuestro código,
especialmente en el caso de que deba en algún momento ser revisado o leído por
alguien diferente a nosotros. Por ejemplo, es muy común usar las líneas de
comentarios, para dar una breve explicación de cómo funciona cierta parte de un

2
código, lo cual permite identificar todo con mayor rapidez. Existen dos tipos de
comentarios en el lenguaje:

Comentarios de Una Sola Línea: Pueden ser colocados en cualquier parte y comienzan


por un doble slash "//", al colocar el doble slash al comienzo de cualquier línea de
código, todo lo que halla de ahí en adelante en esa misma línea será tomado como
comentario, ten en cuenta que el doble slash solo convierte en comentario al texto que
halla, después de él y que pertenezca a su misma línea, las líneas de abajo de este, no
se verán afectadas.

Comentarios Multi-línea: Van cerrados entre "/*" y "*/". Estos comentarios son


similares a los anteriores, pero deben tener un comienzo y un fina, a diferencia del
anterior, al poner los símbolos "/*" todo el código que halla, tanto en la misma línea,
como en las línea debajo de este, se convertirán en comentarios, de manera que
debemos cerrarlo en el punto donde dicho comentarios termina

Veamos algunos ejemplos


Comentarios de una línea

Comentarios multi-línea

Comentar código es una muy buena práctica para todos y facilitarnos la vida con
nuestras aplicaciones. Cuando termines aquí, tomate un pequeño descanso y
continuemos con la sección de estructura de un programa en C++.

3. ESTRUCTURA BÁSICA DE UN PROGRAMA EN C++. COMENZANDO A PROGRAMAR


EN C++

Me parece que la mejor forma de no perder el interés de este tema, aburriéndolos con
muchos conceptos y teorías, es mediante un ejemplo (a todos nos gusta la práctica).
Veamos entonces nuestro primer programa en C++, que, aunque no es muy extenso
ni complicado ni tampoco hace gran cosa, nos ayudará a establecer unas bases que
resultarán muy útiles para los siguientes ejemplos que irán apareciendo durante el
resto del curso. No te preocupes si no comprendes nada al principio, pues me
encargaré de irte enseñando cada cosa y así estaremos mejor, si no entiendes algo o
crees que me faltó explicar alguna cosa, dímelo,

El programa que vamos a realizar simplemente le dará a una variable el valor del
resultado de sumar 5 + 5, cabe resaltar que en pantalla no se muestra nada por lo que
la ejecución del programa será prácticamente instantánea.

3
Este es nuestro programa:

Indique que sucede en el programa línea a línea, usa tus propias palabras de acuerdo a
tu entendimiento, luego lee abajo

Nuestro primer código, consta de 9 líneas, las 2 primeras líneas lo investigarán el


estudiante y las demás te explicaré, una por una a continuación:
Línea 3:

Contiene el llamado a la función main, la función main(), es la más importante de todas


la funciones (es la madre del programa), pues es esta la que nuestro compilador
buscará para iniciar la ejecución de nuestro código, si esta función falta, nuestro
programa no podrá arrancar, pues no sabrá desde donde hacerlo. La función main,
como cualquier otra debe tener un tipo, es decir debe tener indicado cual es el valor
que esta va a retornar al final, los tipos de las funciones pueden ser, enteros (int),
decimales simples(float), decimales dobles(double), booleanos(bool), vacíos (void)
entre algunos más, la función main, puede ser cualquiera de estos, pero por acuerdo,
se coloca siempre como entera (int) y siempre retornara 0 (luego hablare de esto), en
ocasiones, aunque no es recomendable se usa como vacía (void) y así no es necesario
retornar ningún valor, pero pronto verás porqué esto no es recomendable.

Línea 4:
Contiene una llave abriendo "{", en C++, se usan las llaves tanto para indicar el
comienzo como el final de cada función, sea cual sea, es decir sea la función main o
cualquiera que tu hayas inventado, debe comenzar con una llave abriendo y terminar
con una cerrando (tiene sentido ¿no?). Es por esto, que esta llave se encuentra ahí,
indicando el inicio de nuestra función main.

Línea 5:
Esta línea, contiene la declaración de una variable llamada numero, presta especial
atención a esta línea, pues es muy sensible a errores al momento de codificar, esta
línea contiene primero el tipo de nuestra variable, en este caso es entera (int) pero
podría ser alguna de las que mencione anteriormente o cualquier otra, lógicamente
valida. Esta línea es sensible, porque tanto en C como en C++ los nombres de las
variables son sensibles a las mayúsculas y a las minúsculas, es decir, para C o C++ la
variable numero y la variable Numero, son dos variables totalmente distintas o la

4
variable Numero y la variable NuMeRo, debes tener cuidado en no mezclar mayúsculas
y minúsculas, así que acostúmbrate a escribir normalmente en minúsculas. Otro detalle
de esta tercera línea es el punto y coma ";" en C y C++ el punto y coma indican el
final de una sentencia (no una sentencia de muerte o algo así, ¡no te distraigas!), una
sentencia es una línea de código, en la cual se realiza algún tipo de operación,
asignación, comparación o declaración (fíjate! todas terminan en "cion") por ejemplo la
línea 5, 7 y 8, son líneas de sentencia. Así que cada que realices cualquier operación
en una línea, esta debe termina con punto y coma, de lo contrario tendrás errores en
tu código. Ten en cuenta que la línea 3, no es una sentencia, pues aunque allí se está
aparentemente declarando a la función main, no es así, pues el int que hay antes del
main() nos indica el tipo de valor que debe retornar nuestra función, mas no
exactamente el tipo que es nuestra función, por esto no se usa el punto y coma en la
línea 3 (ojo! no estoy diciendo que cuando se declare una función no se use punto y
coma, no te enredes con esto, en la línea 1 simplemente se está implementando la
función main, más adelante lo comprenderás, confía en mi).

Línea 6:
No tiene nada especial, es simplemente un campo vacío, no genera ningún tipo de
cambio para el compilador, pero nos permite ordenar un poco nuestro código. Quizá si
eres curioso intenta eliminar todos los saltos de línea dejando todo el código en una
sola línea y veras que pasa (nada malo te lo aseguro), así confirmaras tú mismo lo que
dije acerca de los espacios en blanco.

Intenta algo como lo siguiente y me dices que pasa jeje:

int main() { int numero; numero = 5 + 5; return 0;}

Que sucede

Línea 7:
Esta línea contiene una operación, por lo tanto, es una línea de sentencia (mira que
termina con punto y coma), en esta línea, estamos dándole o, mejor dicho, asignándole
un valor a la variable numero, que ahora tendrá el valor de la operación matemática 5
+ 5 es decir, la variable numero valdrá 10. Ahora que hablo de asignación, quiero
explicarte algo que en ocasiones suele confundir y es que en C++ hay dos operadores
similares pero no idénticos que son el igual "=" y el doble igual "==", en C++ el igual
solo "=" se usa para asignación, es decir para darle a una variable el valor de otra o el
valor de una operación especifica como por ejemplo 5 + 5, mientras que el operador
de doble igual "==" se usa para comparación, es decir para comparar si el valor de una
variable es igual a otro, por ejemplo: escribir numero = 5 + 5; es válido, pero escribir
numero == 5 + 5; nos genera un error de sintaxis, las acciones que realiza cada
operación son distintas, la primera, le asigna el valor que tenga el resultado de 5 + 5
(osea 10) a la variable "numero" mientras que la segunda verifica si el valor de la
variable "numero" es igual o no a 10. Si no entiendes bien esto último, no te
preocupes, más adelante lo veremos con más detalle. Recuerda que recién estamos
comenzando, así que no te preocupes si no entiendes mucho, te aseguro que al
finalizar este curso sabrás bien todo esto.

Línea 8:
Es otra línea de sentencia, y esta nos indica por medio del return lo que la función
debe retornar, en este caso, nos está diciendo que la función main(), deberá retornar

5
cero cada vez que termine, en realidad la función main podría retornar cualquier cosa
o incluso nada (void), podría retornar cualquier tipo de variable o incluso la variable
numero misma, pero se ha establecido por acuerdo que siempre debería retornar 0,
pues dado el caso en que retorne otro valor estando la sentencia return 0; dentro de
ella, esto implicaría que hay algún error en la ejecución del programa. Aquí está la
importancia de poner al main retornando un valor de tipo int.

Línea 9:
Finalmente, nuestra línea 7 contiene la llave cerrando, esto nos indica que es el fin de
la función main y por tanto el fin de la ejecución de nuestro programa (donde termina
el main, termina todo), cada que nuestro compilador llega a la llave de cierre de la
función main, dará por concluido el proceso de nuestra aplicación, por lo tanto,
cualquier línea que esté por debajo de esta llave de cierre no será ejecutada, a menos
que se indique lo contrario dentro de la función main.

4. SISTEMA DE TIPOS DE DATOS EN C++. NÚMEROS, TEXTOS, BOOLEANOS,


VARIABLES Y CONSTANTES

La intención principal de esta sección es dar una introducción a lo que se refiere al


sistema de tipos de C++, las variables en C++. Hablaremos específicamente acerca
de los tipos de datos o variables más comunes, sus características generales, su
utilidad, entre otras cosas.

Como podrás imaginar C++ posee una buena cantidad de tipos de datos, sin embargo,
de una manera más general, algunos de estos son más sencillos simples de usar que
otros. Veamos:

Tipos nativos o primitivos de C++

Los tipos nativos de C++, son los tipos de datos "fáciles de usar" es decir, como
veremos un poco más adelante en la sección de tipos primitivos. Los tipos primitivos
como su nombre lo da a entender, son los tipos de datos más básicos y simples del
sistema de tipos de C++ y por ello es bastante fácil usarlos.

Cabe mencionar que C++ es un lenguaje orientado a objetos y posee una cantidad
enorme de librerías o bibliotecas que podemos usar, estas librerías nos proporcionan
una serie de tipos de datos adicionales que son de enorme utilidad, sin embargo estos
tipos ya no son tipos de datos primitivos sino que son tipos complejos y por ende van
a poseer una serie de campos y funcionalidades adicionales que no posee un tipo
primitivo pero no te preocupes por esto, en la sección de librerías o bibliotecas de C+
+ hablaré un poco de cómo se usan éstas y los tipos que proporcionan. Luego en la
sección de objetos y clases hablaré con más detalle al respecto.

5. TIPOS DE DATOS PRIMITIVOS EN C++. DECLARACIÓN Y ASIGNACIÓN A


VARIABLES

Conceptualmente, desde el punto de vista de un programador, una variable es un dato


cuyo valor puede cambiar a lo largo de la ejecución de un programa.

En un nivel más lógico, una variable ocupa un espacio de memoria para contener sus
valores durante la ejecución de un programa. Cada variable debe pertenecer a un tipo
determinado dando también el tamaño del espacio de memoria ocupado por la variable,
y el modo en que se manipulará esa memoria.
De momento veremos los tipos fundamentales (básicos), que son: void, char, int, float
y double; en C++ se incluye también el tipo bool. También existen ciertos
modificadores, que permiten ajustar ligeramente ciertas propiedades de cada tipo; los

6
modificadores pueden ser: short, long, signed y unsigned, y pueden combinarse
algunos de ellos.

¿Cómo se declara una variable en C++?

La sintaxis para una variable es la siguiente:


[modificadores] [tipo de variable] [nombre de la variable] [=] [valor];

En la declaración de una variable se debe colocar como mínimo el tipo de dato, el


nombre y el punto y coma al final de la línea, los modificadores son opcionales, es
decir no es necesario ponerlos y tampoco es obligatorio asignarle un valor a la
variable de inmediato. Si no se pone ningún modificador, el compilador tomará nuestra
variable como signed, es decir podría ser positivo o negativo.

En el momento de asignar un nombre a una variable se deben seguir algunas normas:

1. El nombre de una variable nunca debe comenzar con un numero.


2. No debes incluir algunos caracteres como símbolos matemáticos, guiones (el guión
bajo"_" si es permitido), comas, punto y coma, comillas, signos de interrogación o
espacios en blanco.
3. Deben tener un máximo de 40 caracteres

También, hay algunas palabras que son reservadas del lenguaje, es decir tus variables
no podrán tener estos nombres (no creo que tengas problemas con esto,
especialmente si escribes en español). Las palabras son las siguientes:

Palabras reservadas de C++:

auto case const default doubl enum float goto


e
long registe short sizeof struct typedef unsigned volatile
r
int char continu do else extern for if
e
break return signed static switch union void while

Algunos ejemplos de nombres de variables correctos:

FechaNacimiento
variable12
nombre_variable
contador
ACUMULADOR

Algunos ejemplos de nombres de variables incorrectos:

12variable
float
register
variable nueva
nueva-variable

TIPOS DE DATOS EN C++

bool: El tipo de dato bool, tiene un tamaño de 8 bits y un rango entre 0 y 1, en pocas
palabras es cero o es uno (falso o verdadero). Este tipo de dato, es comúnmente usado

7
en condicionales o variables que solo pueden tomar el valor de falso o verdadero. Las
variables de tipo bool no suelen llevar modificadores, pues son innecesarios, ya que su
rango es solo 0 y 1.

int: El tipo de dato int, tiene un tamaño de 32 bits y un rango entre -2.147.483.648 y
2.147.483.647. Este tipo de dato, es usado para números enteros (sin cifras
decimales). A continuación, algunas combinaciones con los modificadores:

short int: Tiene un tamaño de 16 bits y un rango entre -32.768 y 32.767.


unsigned short int: Tiene un tamaño de 16 bits y un rango entre 0 y 65535.
unsigned int: Tiene un tamaño de 32 bits y un rango entre 0 y 4.294.967.295.
long long int: Tiene un tamaño de 64 bits y un rango entre -9.223.372.775.808 y
9.223.375.775.807.
unsigned long long int: Tiene un tamaño de 64 bits y un rango entre 0 y 2exp64.

float: El tipo de dato float tiene un tamaño de 32 bits, es usado comúnmente en


números con 6 o menos cifras decimales. Tiene un rango entre 1,17549*(e^-38) hasta
3,40282*(e^+38).

double: El tipo de dato double tiene un tamaño de 64 bits, es usado para números de
menos de 15 cifras decimales. Tiene un rango entre 2,22507*(e^-308) hasta
1,79769*(e^308).

long double: Tiene un tamaño de 96 bits y una precisión de 18 cifras decimales. Tiene


un rango entre 3,3621*(e^-4932) hasta 1,18973*(e^4932).

char: Las variables del tipo char, son digamos las variables problema del lenguaje C y
C++, puesto que tienen una gran cantidad de restricciones y complicaciones, bastante
molestas. Las variables de tipo char, en C y C++ son consideradas vectores y como
quizá sabrás a los vectores se les debe declarar un tamaño máximo, entre corchetes "[
]" lo cual restringe un poco al no saber qué tamaño podría llegar a tener una cadena
de caracteres, y aunque hay formas de evadir esto, es bastante complicado. Es
recomendable usar las variables de tipo string para las cadenas de caracteres,
incluidas en la librería string.h que son bastante fáciles de usar.

La sintaxis para declarar un char es la siguiente: 


char nombre_char[tamañoMax]; o simplemente char nombre = 'valor' 
notar que va entre comillas simples.

INSTRUCCIONES DE ASIGNACIÓN

Una instrucción de asignación, como su nombre bien lo dice, es una línea de código,
que le asigna a una variable cualquiera un valor cualquiera, preferiblemente adecuado
al tipo de dato o a las necesidades de dicha asignación. Una asignación tiene la
siguiente sintaxis: nombre_variable = valor, con esto le estamos diciendo a nuestro
programa que la variable llamada "nombre_variable", tendrá ahora como nuevo valor a
"valor". Así entonces, por ejemplo, al escribir contador = 0; estamos diciendo que la
variable contador, tendrá como nuevo valor 0, es de tener en cuenta que al realizar
una asignación, si la variable tenía algún otro valor antes de esto, dicho valor se
perderá y cambiaría por el nuevo que le hemos ordenado.

Las asignaciones no solo se realizan entre variables y valores constantes, también se


realizan entre variables, por ejemplo variable1 = variable2, de este modo, la
"variable1", tendrá ahora el valor que tiene en ese momento la "variable2", es
recomendable realizar estas asignaciones entre variables del mismo tipo, es decir
entre una variable de tipo entero y otra de tipo entero, aunque está permitido hacer

8
asignaciones entre variables de diferente tipo (numérico), esto genera una advertencia
porque puede causar perdida en la precisión de los datos, por ejemplo al pasar de float
a int.

6. VARIABLES Y CONSTANTES EN C++. ASIGNACIÓN DE VALORES, USO DE


#DEFINE Y CONST EN C++

Las variables son altamente imprescindibles al momento de programar, de hecho, sería


imposible conseguir una aplicación con una funcionalidad básica sin usar variables; por
esta misma razón es necesario aprender a usarlas bien y lo tenemos muy fácil, pues su
uso es bastante sencillo e intuitivo, tanto para declararlas como para asignarles
valores.

Las variables son posiciones en memoria donde estarán guardados los diferentes
valores que le damos o que toman durante la ejecución los datos que usamos y
normalmente estarán disponibles a lo largo de la ejecución de nuestro programa. Para
asignar valores a una variable en una gran variedad de lenguajes que incluye a C++
se usa el operador "=" seguido del valor que le daremos a la variable (no todos usan
el "=" para esto). Veamos un ejemplo completo con todos los posibles usos que le
damos a una variable.

En el código anterior hemos visto las múltiples formas en que se puede declarar una
variable, cómo asignarle un valor, incluso vimos que es posible asignarle el valor de
una variable a otra, o realizar operaciones entre los valores de variables y asignar el
resultado a una variable nueva, vimos que es posible usar el valor de una misma
variable y cambiar su propio valor (res = res*2).

CONSTANTES EN C++, CONST Y #DEFINE

Los datos constantes, mal llamadas por algunos "variables constantes" (realmente no
son variables) tienen un valor fijo durante toda la ejecución del programa, es decir,
este valor no cambia ni puede ser cambiado a lo largo de la ejecución de nuestro

9
programa. Las constantes son muy útiles para especificar el tamaño de un vector y
para algunas otras cosas, como facilidad de uso y confiabilidad del código. Para
declarar una constante, se hace después de declarar las librerías y antes de las
funciones, la sintaxis es la siguiente:

#define nombre_constante valor.

En C++ se pueden definir constantes de dos forma, ambas válidas para nosotros. La
primera es por medio del comando #define nombre_constante valor y la segunda es
usando la palabra clave const, veamos ahora cada una de estas formas en detalle.

Uso de #define para declarar constantes en C++

La instrucción #define nos permite declarar constantes (y algunas cosas más) de una


manera rápida y sencilla. Hay que tener en cuenta que al declarar constantes
con #define debemos hacerlo despues de los #include para importar librerías, pero
antes de declarar nuestras funciones y demás. Veamos un ejemplo:

Ejemplo de uso de #define en C++ para declarar constantes

Notemos que ha sido bastante fácil, sin embargo, no todo es bueno. Realmente al usar
la instrucción #define en C++ no estamos creando una constante realmente, estamos
creando una expresión y por tal motivo hay algunas cosas que se complican, veamos:

Si intentamos ejecutar el código anterior obtendremos un error al haber usado el


operador << justo después de PI, esto sucede porque PI no es tratado exactamente
como una variable cualquiera sino como una expresión, así que realmente aunque
podemos usar #define para declarar constantes no es la mejor opción.

Veamos ahora cual es realmente la forma más adecuada de declarar constantes en C+


+, esto se hace por medio de la instrucción const, veamos:

Uso de const para declarar constantes en C++

La instrucción const nos permite declarar constantes de una manera más adecuada y


acorde. Las constantes declaradas con const poseen un tipo de dato asociado (como
debería ser siempre) y se declaran al interior de nuestro código como un tipo
cualquiera. Veamos un

10
ejemplo:
Ejemplo de uso de const en C++ para declarar constantes

Notemos que de igual forma ha sido bastante fácil y mejor aún ha sido mucho más
intuitivo y sencillo para nosotros. Se puede ver que la declaración es muy similar a la
de una variable cualquiera y que ya no tenemos complicaciones al intentar añadir la
instrucción endl para agregar el salto de línea. Veamos que realmente la variable no
puede cambiar:

Si intentamos ejecutar el código anterior obtendremos un error al intentar cambiarle el


valor a PI, pues lo hemos definido como una constante y el lenguaje no nos permitirá
cambiarle en ningún momento el valor.

¿Cuándo usar una variable o una constante en C++?

En general, la definición de variable y constante nos da una muy buena idea de cuándo
usar una u otra. Básicamente, si un valor puede cambiar en cualquier momento
(aunque la probabilidad de que eso suceda sea baja) entonces deberá ser una variable,
en lugar de una constante.

Un ejemplo para soportar lo anterior sería el nombre del usuario. Podríamos pensar
que un nombre no va a cambiar, y es probable que no lo haga. Sin embargo, nada nos
asegura que así sea, pues, aunque es improbable es posible. Adicionalmente, nuestro
programa puede cambiar de usuario y por ende su nombre podría variar mientras el
programa se ejecuta. Por lo tanto, NO debería ser una constante.

Por otro lado, hay valores que no van a cambiar a lo largo del tiempo. Por ejemplo, la
velocidad de la luz se ha acordado siempre como la misma, así que debería ser una
constante para evitar que sea cambiada de cualquier modo durante la ejecución del
programa. Valores como el número PI, el código de estado de una página no existente
(404), son valores que son convenciones existentes y que NO deberían cambiar, por lo
cual se los declara como constantes.

Finalmente, el uso de constantes en C++ (y en cualquier otro lenguaje de


programación) ayuda mucho a mejorar la comprensión del código que escribimos pues
no es lo mismo que nuestro código ponga:

if (velocidad == 299792458)

11
A que diga

if (velocidad == VELOCIDAD_LUZ)

Pues en el segundo caso, queda muy claro que estamos comparando la variable
velocidad con la de la luz que es una constante. Por supuesto, anteriormente
tendríamos que haber declarado la constante VELOCIDAD_LUZ con su respectivo
valor (tal como se explicó anteriormente).

7. ENTRADA Y SALIDA DE DATOS EN C++. USO DE CIN Y COUT

La entrada y salida de datos en C++ es simple (al menos para los casos más
comunes). Con esto hago una comparación entre C++ y Java, pues leer una entrada
del usuario por teclado en C++ es bastante simple mientras que en Java implica una
serie de conceptos adicionales que la hacen un tanto más complicada. Por suerte para
nosotros en esta sección veremos cómo leer por teclado en C++, en otras palabras,
asignar a una variable el valor que el usuario escriba por el teclado. Adicional a esto
veremos también cómo mostrar texto por pantalla en C++, es decir, salida de datos.

Vamos a comenzar primero con aprender a mostrar texto por pantalla en C++. Este
orden se debe a que cuando queremos pedirle algún dato al usuario primero debemos
hacerle saber lo que queremos que ingrese y para hacérselo saber debemos mostrarle
un mensaje con las indicaciones, por tal motivo es importante primero saber mostrar
texto en pantalla en C++ y luego a leer texto por teclado en C++.

Salida de texto por pantalla en C++

Mostrar texto por pantalla en C++ es muy simple. Para imprimir una salida de texto
en C++ se hace uso de la instrucción cout<<  es importante tener en cuenta que la
instrucción cout siempre va acompañada de << para controlar el flujo de datos que
sale. No te fijes mucho en ellos, solo ten siempre presente que cout viene
acompañado de << para tener cout<< como resultado.

Veamos algunos ejemplos para mostrar texto por pantalla en C++:

Ejemplo 1 de impresión de texto por pantalla en C++

El ejemplo que acabas de ver es bastante sencillo, excepto por un detalle. Si ejecutar
este código en tu pantalla aparecerá un mensaje diciendo "Hola Mundo Desde ACA.".
Tal como habrás notado el operador << se usa para concatenar (unir) dos cadenas de
texto por eso el resultado es el obtenido. Luego se usa endl indicando el final de la
línea lo cual crea un salto de línea. No es obligatorio, pero es recomendable.

Ejemplo 2 de impresión de texto por pantalla en C++

12
En este ejemplo de salida por pantalla hemos visto que también es posible usar la
instrucción cout para mostrar en pantalla el valor de las variables así sean numéricas
o cadenas de texto. También vimos que podemos concatenar los valores de esas
variables entre sí y también concatenarlas con otros valores directamente (espacios,
puntos, símbolos, etc.).

Ya tenemos claro cómo mostrar texto por pantalla en C++ ahora haremos uso de este
concepto y veremos cómo leer texto por teclado en C++. Veamos:

Entrada o lectura de datos en C++

Tal como mencioné hace un momento, la lectura de datos en C++ es bastante simple.
Leer datos por teclado en C++ se hace usando el comando cin >> es importante
notar el uso de los dos signos >> que son usados para controlar el flujo de datos. No
te preocupes mucho por ellos, solo ten en cuenta que cada vez que vaya a usar la
instrucción cin debes agregarle >> para quedar con un cin>>. Una manera muy
sencilla de recordar esta instrucción es que in significa entrar y como estamos
programando en C++ le añadimos la letra C al comienzo quedando así cin>> (sin
olvidar los >>).

Veamos unos ejemplos simples para leer datos en C++. Recuerda como dije más
arriba que lo ideal para leer datos es indicarle al usuario qué es lo que esperamos que
ingrese por lo que en estos ejemplos usaremos también lo recién aprendido (mostrar
texto por pantalla).

Ejemplo 1 de lectura de datos en C++

En este ejemplo hemos hecho un pequeño sistema de bienvenida personalizado para el


usuario leyendo el valor por teclado de su nombre. En el comando cin>> se debe
poner, después de >>, el nombre de la variable en la cual se almacenará el valor que
el usuario ingrese. Por tal motivo primero se declaró primero una variable llamada
nombre y luego se uso  cin >> nombre indicando que lo que l usuario ingrese se
almacenará en dicha variable.

13
Ejemplo 2 de lectura de datos en C++

8. LOS CONDICIONALES EN C++. USO DECLARACIÓN Y SINTAXIS EN C++

Los condicionales en C++, son una estructura de control esencial al momento de


programar y aprender a programar. Tanto C como C++ y la mayoría de los lenguajes
de programación utilizados actualmente, nos permiten hacer uso de estas estructuras
para definir ciertas acciones condiciones específicas en nuestro algoritmo.

Un condicional, permite establecer una serie de condiciones al interior de nuestro


programa, que nos ayudan a determinar qué acciones llevará cabo dadas ciertas
circunstancias, por ejemplo si queremos decidir cuándo dar acceso a un usuario,
dependiendo de si el nombre de usuario y contraseña son correctos, para algo como
esto, es útil un condicional, nos permite verificar si determinada condición se cumple
(en este caso si la contraseña y el nombre de usuario son correctos) y de acuerdo a
que se cumpla o no, llevar a cabo un conjunto de acciones. Los condicionales
aumentan la "expresividad" de un software, es decir nos permiten considerar
diferentes situaciones con antelación, evitando o permitiendo sortear diferentes tipos
de situaciones que son del interés de nuestra aplicación.

Existen diferentes tipos de condicionales, cada uno tiene una utilidad y funcionalidad
diferente, que consideran diferentes situaciones que se pueden llegar a presentar
durante la ejecución de un algoritmo. Depende entonces del conocimiento que
tengamos acerca de cada uno de los condicionales saber determinar correctamente
cuando es necesario implementar uno u otro. Tenemos a nuestra disposición los
siguientes tipos de condicionales en C++:

Condicional If en C++
Condicional if-else en C++
Condicional Switch en C++
Como mencioné anteriormente, cada uno de estos condicionales tiene ciertas
características que lo hacen útil para algunos casos específicos, a lo largo de los
contenidos de esta sección veremos cada uno de estos al detalle, aprendiendo durante
el proceso los componentes de un condicional, sintaxis de los condicionales y esas
características particulares que permiten decidir cuál usar en qué momento, veremos
también el concepto de condicionales anidados, y algunas otras cositas

Te recuerdo, que aunque intentaré profundizar bastante en cada concepto, lo haré


enfocándome hacia el uso de los condicionales en el lenguaje C++ y no tanto hacia la
parte de la lógica de estas estructuras condicionales en particular, si tienes problemas
con la correcta comprensión de la lógica y utilidad de cualquier tipo de condicional o
de los condicionales en general, te invito a que primero leas la sección
de Fundamentación de los Condicionales, en dicha sección podrás comprender
correctamente el funcionamiento de un condicional y de cada tipo de estos y

14
posteriormente podrás regresar a esta sección para aprender a implementar un
condicional en C++ de manera mucho más fácil y adecuada.

9. Condicional if en c++. Declaración, uso y sintaxis del if en c++

Los condicionales if, son una estructura de control condicional, que nos permiten
tomar cierta decisión al interior de nuestro algoritmo, es decir, nos permiten
determinar qué acciones tomar en dada condición, por ejemplo, determinar si un
numero cualquiera es mayor que 10 y de acuerdo a esto mostrar un mensaje.

En resumen, un condicional if es una estructura que nos posibilita definir las acciones
a ejecutar si se cumple cierta condición.

¿Cómo funciona un Condicional If?

Para comprender mejor cómo funciona el condicional if, una muy buena forma es
partiendo de un ejemplo. Supongamos que queremos verificar si el resultado de una
suma ingresada por el usuario es correcto o no. Para este ejemplo, el condicional if, es
el encargado de verificar si el resultado ingresado corresponde o no a la respuesta
correcta de la suma. El condicional if, funciona verificando la condición ingresada y de
acuerdo a su valor de verdad (falso o verdadero) lleva a cabo o no una serie de
instrucciones.

Espero haber sido claro, sino, no te preocupes, pues veremos ya mismo algunos
ejemplos para entender todo mejor.

Sintaxis del Condicional If en C++:

La sintaxis de un condicional if, es bastante simple e incluso creo que intuitiva. Vamos
entonces a ver rápidamente como es la estructura para ir luego a unos ejemplos y
quedar bien claros. Veamos:

Vamos ahora a ver línea por línea el anterior código para comprender todo y quedar
claros. Posteriormente veremos un ejemplo con valores reales.

Línea 1:
En esta línea está prácticamente todo lo esencial del condicional, aquí le hemos dicho
al interior del argumento del condicional if, cual es la condición que se debe cumplir
para que se ejecute el primer bloque de instrucciones, esta línea es en efecto esencial
ya que nos da la pauta para que el algoritmo determine si ejecutará o no el bloque de
instrucciones al interior de las llaves.

Línea 2:
En la línea 2 tenemos una llave abriendo "{" lo cual como seguramente ya sabrás
indica que allí comienza el bloque de instrucciones que se ejecutarán si se cumple la
condición dada. Esta llave no es del todo obligatoria, sin embargo, si no la ponemos

15
solo se ejecutará dentro de nuestro ciclo la primera línea inmediatamente posterior a
la declaración del condicional, de modo que, si deseamos que se ejecuten varias líneas
dentro de nuestro condicional, debemos usar las llaves

Línea 3 a 7:
En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo en
caso de cumplirse la condición, este bloque podrá tener la cantidad de líneas
necesarias incluso, como veremos más adelante dentro de estas podría haber uno o
más condicionales en su interior, así que podrías tener lo que se conoce como
condicionales anidados (ya veremos eso más adelante).

Línea 8:
En esta línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya
sabrás esta nos indica que allí termina el bloque del condicional y se dará por
terminada la ejecución de este para continuar ejecutando el resto del programa.

Línea 9 a 11
Estas líneas contienen la estructura restante del algoritmo, quise ponerlas allí, para
que quede claro que sin importar si la condición se cumple o no, el algoritmo siempre
va a ejecutar estas líneas, es decir las líneas que se encuentran después de la llave de
cierre de un condicional, siempre se ejecutarán sin importar si la condición se cumpla
o no.

Ejemplos de Condicional If-else en C++


A continuación, vamos a ver unos cuantos ejemplos para comprender de manera
adecuada el uso de los condicionales if en c.

Ejemplo 1: Verificación de valores en C++

Un usuario ingresa el resultado de una suma mostrada en pantalla y verificábamos si


el resultado ingresado era el correcto a esta operación. En caso de ser correcto, el
sistema muestra un mensaje de felicitación.

Solución Ejemplo 1:
Debemos entonces determinar cuál va a ser nuestra condición a evaluar, en este
ejemplo, la condición debe ser que la respuesta ingresada, sea igual al resultado de la
suma, veamos entonces como realizar esto:

10. Condicional if else en C++. Declaración uso y sintaxis del if else en C++

Los condicionales if-else, son una estructura de control, que nos permiten tomar
cierta decisión al interior de nuestro algoritmo, es decir, nos permiten determinar qué
acciones tomar dada o no cierta condición, por ejemplo, determinar si la contraseña

16
ingresada por el usuario es válida o no y de acuerdo a esto darle acceso al sistema o
mostrar un mensaje de error.

En resumen, un condicional if-else es una estructura que nos posibilita definir las
acciones que se deben llevar a cabo si se cumple cierta condición y también
determinar las acciones que se deben ejecutar en caso de que no se cumpla.

¿Cómo funciona un Condicional If-Else?

Para comprender mejor cómo funciona el condicional if-else, una muy buena forma es
partiendo de un ejemplo. Imaginemos que, en nuestro programa, deseamos
implementar un sistema de logeo de usuario, comprobando si la información
suministrada coincide con unos los valores correctos y en este caso mostrar un
mensaje de bienvenida, y en caso de que no, se mostrará un mensaje de error. Como
podemos imaginar, es entonces necesario hacer que nuestro algoritmo, tome una
decisión, de acuerdo a los valores ingresados por el usuario, y definir los dos casos
posibles en caso de fallo o en caso de que no. Es para esto que sirve el condicional if-
else, nos permite definir una condición que se debe cumplir y de acuerdo a su
cumplimiento o no tomar una acción correspondiente. Espero haber sido claro, sino, no
te preocupes, pues veremos ya mismo algunos ejemplos para entender todo mejor.

Sintaxis del Condicional If-Else en C++:

La sintaxis de un condicional if-else, es en principio similar a la del condicional if,


pero adicionando una nueva "estructura" que es el else, el cual indica la acción o
conjunto de acciones a llevar a cabo, en caso de que la condición del if no se cumpla.
Cabe resaltar que el else siempre se pone inmediatamente después del if, en caso de
ser necesario, el else es incapaz de funcionar por sí solo, siempre debe ir acompañado
por un if. Veamos entonces como es la sintaxis de este:

Vamos ahora a ver línea por línea el anterior código para comprender todo y quedar
claros. Posteriormente veremos un ejemplo con valores reales.

Línea 1:

En esta línea está prácticamente todo lo esencial del condicional, aquí le hemos dicho
al interior del argumento del condicional if, cual es la condición que se debe cumplir
para que se ejecute el primer bloque de instrucciones, esta línea es en efecto esencial
ya que nos da la pauta para que el algoritmo determine que bloque de instrucciones
ejecutar.

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como seguramente ya sabrás
indica que allí comienza el bloque de instrucciones que se ejecutarán si se cumple la
condición dada. Esta llave no es del todo obligatoria, sin embargo, si no la ponemos

17
solo se ejecutará dentro de nuestro condicional la primera línea inmediatamente
posterior a la declaración del condicional, de modo que, si deseamos que se ejecuten
varias líneas dentro de nuestro condicional, debemos usar las llaves

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo en
caso de cumplirse la condición, este bloque podrá tener la cantidad de líneas
necesarias incluso, como veremos más adelante dentro de estas podría haber uno o
más condicionales en su interior, así que podrías tener todo un condicional dentro de
un condicional dentro de otro condicional... y así sucesivamente.

Línea 8:
En esta última línea hacemos uso de la llave cerrando "}", una vez más como
seguramente ya sabrás esta nos indica que allí termina el bloque del condicional y se
dará por terminada la ejecución de este para continuar ejecutando el resto del
programa, cabe notar que esta línea dará paso a la ejecución del bloque de
instrucciones del else, en caso de que la condición dada no se haya cumplido.

Línea 9 a 16
Estas líneas contienen la estructura else, que es la que indica que existe un bloque de
instrucciones que se debe ejecutar en caso de que la condición dada no se cumpla.
Este bloque al igual que el del condicional if, se abre y se cierra con llaves, recuerda
que estas pueden ser opcionales, sin embargo, siempre recomiendo usarlas como una
buena práctica de programación.

Ejemplos de Condicional If-else en C++

Ejemplo 1: Sistema de logeo en C++


Deseamos implementar un sistema de logeo de usuario, es decir, queremos que el
usuario nos ingrese un una contraseña y deseamos comprobar si coincide con el valor
pre establecido. En caso de que los datos sean correctos se mostrará un mensaje de
bienvenida, y en caso de que no, se mostrara un mensaje de error y finalizará el
programa.

Solución Ejemplo 1:

Debemos entonces determinar cuál va a ser nuestra condición a evaluar, en este


ejemplo, la condición debe ser que la contraseña, sea idéntica a la establecida en
nuestro sistema, veamos entonces como realizar esto:

18
11. Condicional switch en C++. Declaración uso y sintaxis de switch en C++

¿Qué es Condicional Switch?

Los condicionales Switch, son una estructura de control condicional, que permite
definir múltiples casos que puede llegar a cumplir una variable cualquiera, y qué
acción tomar en cualquiera de estas situaciones, incluso es posible determinar qué
acción llevar a cabo en caso de no cumplir ninguna de las condiciones dadas.

¿Cómo funciona el Switch?

La mejor forma de entender el funcionamiento de algo, es viendo un ejemplo de esto,


de este modo, me parece que para comprender de forma adecuada como funciona un
condicional Switch, es bueno hacerlo poniendo un ejemplo. Imaginemos entonces que
nuestro programa consta de un menú de opciones digamos 3 opciones, cada una
representada con un número correspondiente, es decir la opción uno corresponde al
número 1, la dos al 2 y así sucesivamente, queremos entonces que de acuerdo a un
número ingresado por el usuario ejecutemos una acción correspondiente y en caso de
que no corresponda a ninguna de las posibles opciones, mostrar un mensaje de error
cualquiera. De este modo, podemos identificar 3 casos distintos para nuestro switch o
en otras palabras, hemos identificado tres condiciones posibles que puede llegar a
cumplir nuestra variable: el caso uno corresponde a que el valor ingresado por el
usuario sea el 1, es decir ejecutar la opción 1, el caso 2 el número 2, etc.
adicionalmente hemos encontrado la opción que se ejecutará por defecto en caso de
no suceder ninguno de estos casos, es decir si el usuario ingresa por ejemplo 10,
mostraremos un mensaje de error cualquiera.

Sintaxis del Condicional Switch en C++:

La sintaxis de un condicional Switch es bastante distinta a la de un condicional típico,


sin embargo, es bastante intuitiva y fácil de comprender, es solo cuestión de
acostumbrarse. Veamos a continuación la estructura general de un condicional Switch
y luego unos cuantos ejemplos.

19
Vamos ahora a ver línea por línea el anterior código para comprender todo y quedar
claros. Posteriormente veremos un ejemplo con valores reales.

Línea 1:

Aquí, tenemos la declaración del condicional switch, estamos diciendo que lo que
viene a continuación es esto, entre los paréntesis, el switch recibe la variable que
vamos a usar para comparar en cada uno de los casos.

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como hemos visto en secciones
anteriores, indica que allí comienzan los bloques de instrucciones que se ejecutarán
para cada caso.

Línea 3:

En esta línea tenemos una parte vital del condicional switch, aquí tenemos definido un
caso posible que puede cumplir nuestra variable, la sintaxis es simple, usamos la
instrucción "case" para indicar que allí comienza un caso, luego indicamos el valor que
puede tomar la variable, puede ser un numero, una cadena de caracteres o lo que
necesitemos, de esto se siguen dos puntos ":" y después de estos ponemos la o las
instrucciones a ejecutar para este caso, como ejemplo, podríamos tener algo como
esto : 

case "Hola": cout << "Usted ha escrito Hola";

Línea 4:

Esta línea contiene la instrucción break, es una instrucción simple, pero fundamental al
interior del condicional Switch, esta instrucción indica que hasta allí va el bloque de
instrucciones del caso inmediatamente anterior a este, de este modo evitamos que el
algoritmo ejecute los demás casos, a modo de ejercicio, podrías intentar ejecutar el
código del ejemplo que veremos más adelante y quitar las instrucciones break, con
esto podrás comprobar que si el usuario ingresa por ejemplo un 1, se ejecutarán todos
los casos, es por esto que el break es fundamental.

Línea 5 a 8
Estas líneas contienen una repetición de las instrucciones de las líneas 3 y 4,
evidentemente cada una contiene un caso distinto, ten en cuenta que se pueden definir
todos los casos que sean necesarios al interior del switch.

Líneas 9, 10 y 12

20
Estas líneas como deberías saber ya, contienen diferentes comentarios aclarativos
sobre el código, en caso de que no comprendas adecuadamente estas líneas, te
recomiendo visitar la sección de comentarios.

Línea 11

Esta línea cambia un poco con respecto a las anteriores, sin embargo conserva la
misma esencia, en vez de poner el comando "case", usamos el comando "default", y
luego los 2 puntos ":", notemos que no se pone ningún valor a evaluar, pues esta es la
acción que se ejecuta en caso de que no lleguemos a entrar en ninguno de los casos.

Línea 13:

En esta línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya
sabrás esta nos indica que allí termina el bloque del condicional y se dará por
terminada la ejecución de este para continuar ejecutando el resto del programa.

Ejemplos de Condicional Switch en C++

A continuación vamos a ver unos cuantos ejemplos para comprender de manera


adecuada el uso de los condicionales Switch en C++, recuerda que si no comprendes
alguno de estos ejemplos o tienes alguna pregunta o sugerencia sobre estos o
cualquier contenido de la sección, puedes dejarlas en la sección de comentarios

Ejemplo 1: Menú de opciones en C++

Vamos a retomar el ejemplo mencionado anteriormente al inicio de la sección, en el


cual suponíamos que el usuario nos ingresaba un número correspondiente a una opción
cualquiera y de acuerdo a esto mostramos un mensaje y en caso de ingresar una
opción incorrecta, mostramos un mensaje de error.

Solución Ejemplo 1:

Primero, determinemos los casos a ejecutar, tenemos tres casos posibles (suponiendo
que nuestro menú está compuesto por 3 opciones) el caso 1 para la opción 1, el dos
para la 2 y así sucesivamente. Nuestro caso por defecto (default) sería el caso de
error, que sucede cuando no se ingresa alguna de las 3 opciones. Veamos entonces
como hacer esto:

21
Efectivamente, los condicionales switch de hecho todos los condicionales en sí, son
extremadamente útiles pues permiten definirle a nuestro software múltiples vías de
ejecución contemplando así todas las posibilidades durante la ejecución. Me gustaría
hacer una leve aclaración, el condicional switch encuentra su utilidad al momento de
tener más de una posibilidad de valores para una variable cualquiera, evidentemente si
nuestra variable solo puede adquirir un valor útil para nosotros, nuestra alternativa
inmediata debería ser un if o un if-else, no un switch que resulta un poco más
engorroso de escribir, sin embargo cuando tenemos varias posibilidades es mejor un
switch que tener condicionales anidados o un condicional después de otro.

12. Los bucles o ciclos en C++. Declaración, uso y sintaxis de un ciclo en C++

Los ciclos o también conocidos como bucles, son una estructura de control esencial al
momento de programar. Tanto C como C++ y la mayoría de los lenguajes utilizados
actualmente, nos permiten hacer uso de estas estructuras. Un ciclo o bucle permite
repetir una o varias instrucciones cuantas veces lo necesitemos, por ejemplo, si
quisiéramos escribir los números del uno al cien no tendría sentido escribir cien líneas
mostrando un numero en cada una, para esto y para muchísimas cosas más, es útil un
ciclo, permitiéndonos hacer una misma tarea en una cantidad de líneas muy pequeña y
de forma prácticamente automática.

Existen diferentes tipos de ciclos o bucles, cada uno tiene una utilidad para casos
específicos y depende de nuestra habilidad y conocimientos poder determinar en qué
momento es bueno usar alguno de ellos. Tenemos entonces a nuestra disposición los
siguientes tipos de ciclos en C++:

Ciclo for en C++


Ciclo while en C++
Ciclo do-while en C++

Como mencioné anteriormente, cada uno de estos ciclos tiene ciertas características
que lo hacen útil para algunos casos específicos, a lo largo de los contenidos de esta
sección veremos cada uno de estos al detalle, aprendiendo durante el proceso los
componentes, sintaxis y esas características particulares que permiten decidir cuál
usar en qué momento, veremos también el concepto de contador y acumulador que
parte de la existencia de los ciclos

22
Te recuerdo, que aunque intentaré profundizar bastante en cada concepto, lo haré
enfocándome hacia el uso de los ciclos en el lenguaje C++ y no tanto hacia la parte de
la lógica de los ciclos en particular, si tienes problemas con la correcta comprensión
de la lógica y utilidad de cualquier tipo de ciclo o de los ciclos en general, te invito a
que primero leas la sección de Fundamentación de los Ciclos, en dicha sección podrás
comprender correctamente el funcionamiento de un ciclo y posteriormente podrás
regresar a esta sección para aprender a implementar los ciclos en C++

Ahora que sabemos un poco acerca de las estructuras de control cíclicas (o


simplemente ciclos) y que además sabemos que existen varias, podemos comenzar a
aprender y dominar cada tipo de ciclo en C++, vamos hacerlo en orden, para no
enredarnos, así que vamos a la sección de Ciclo For.

13. Ciclo for en C++. Estructura, sintaxis y uso de un ciclo for en C++

Los ciclos for son lo que se conoce como estructuras de control de flujo cíclicas o
simplemente estructuras cíclicas, estos ciclos, como su nombre lo sugiere, nos
permiten ejecutar una o varias líneas de código de forma iterativa, conociendo un
valor especifico inicial y otro valor final, además nos permiten determinar el tamaño
del paso entre cada "giro" o iteración del ciclo.

En resumen, un ciclo for es una estructura de control iterativa, que nos permite
ejecutar de manera repetitiva un bloque de instrucciones, conociendo previamente un
valor de inicio, un tamaño de paso y un valor final para el ciclo.

¿Cómo funciona un Ciclo For?

Para comprender mejor el funcionamiento del ciclo for, pongamos un ejemplo,


supongamos que queremos mostrar los números pares entre el 50 y el 100, si
imaginamos un poco como seria esto, podremos darnos cuenta que nuestro ciclo
deberá mostrar una serie de números como la siguiente: 50 52 54 56 58 60 ... 96 98
100. Como podemos verificar, tenemos entonces los componentes necesarios para
nuestro ciclo for, tenemos un valor inicial que sería el 50, tenemos también un valor
final que sería el 100 y tenemos un tamaño de paso que es 2 (los números pares).
Estamos ahora en capacidad de determinar los componentes esenciales para un ciclo
for.

Sintaxis del Ciclo For en C++:

La sintaxis de un ciclo for es simple en C++, en realidad en la mayoría de los


lenguajes de alto nivel es incluso muy similar, de hecho, con tan solo tener bien claros
los 3 componentes del ciclo for (inicio, final y tamaño de paso) tenemos prácticamente
todo hecho

Línea 1:

En esta línea está prácticamente todo lo esencial de un ciclo for. La sintaxis es simple,
tenemos una variable de control llamada i que es tipo entero (int), cabe notar que la
variable se puede llamar como nosotros lo deseemos y puede ser del tipo de queramos

23
también, sin embargo en la mayoría de los casos se usa la "i" como nombre y el entero
como tipo, pero somos libres de modificar esto a nuestro gusto. Esta variable "i" se le
asigna un valor inicial que puede ser cualquier número correspondiente al tipo de dato
asignado.

Posteriormente lo que haremos será especificar hasta donde irá nuestro ciclo por
medio del valor final, ten en cuenta que cada uno de estos componentes es separado
por un punto y coma ";", también es importante saber que la condición final puede ser
cualquier cosa, mayor, menor, mayor o igual, menor o igual, sin embargo no tiene
sentido que la condición sea por ejemplo un igual, pues nuestra variable de control
siempre va a cambiar entre valores, menores o mayores que el valor final deseado, si
fuera un igual no tendríamos un error de sintaxis, pero nuestro for básicamente no
haría nada de nada. Finalmente, el ultimo componente de esta primera línea es el
tamaño del paso, este componente se especifica aumentando en la cantidad deseada la
variable de control.

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como seguramente ya sabrás
indica que allí comienza el bloque de instrucciones que se ejecutaran cada vez que el
ciclo de un "giro". Esta llave no es del todo obligatoria, sin embargo, si no la ponemos
solo se ejecutará dentro de nuestro ciclo la primera línea inmediatamente posterior a
la declaración del ciclo, de modo que, si deseamos que se ejecuten varias líneas
dentro de nuestro ciclo, debemos usar las llaves

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de
manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de
líneas necesarias incluso, como veremos más adelante dentro de estas podría haber
uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo.

Línea 8:

En esta última línea hacemos uso de la llave cerrando "}", una vez más como
seguramente ya sabrás esta nos indica que allí termina el bloque del ciclo for y se dará
por terminada la ejecución de este para continuar ejecutando el resto del algoritmo.

Ejemplos de Ciclo For en C++

A continuación vamos a ver unos cuantos ejemplos para comprender de manera


adecuada el uso de los ciclos for en c++, recuerda que si no comprendes alguno de
estos ejemplos o tienes alguna pregunta o sugerencia sobre estos o cualquier
contenido de la sección, puedes dejarlas en la sección de comentarios

Ejemplo 1: Mostrar en pantalla los números pares

Vamos a retomar el ejemplo anterior, donde deseábamos sacar los números pares
entre el numero 50 y el 100, es un ejemplo sencillo con el que nos aseguraremos de
haber comprendido bien lo anterior:

Solución Ejemplo 1:
Como pudimos ver anteriormente, tenemos entonces que el valor inicial para nuestro
ciclo es el numero 50 y el valor final es el 100, además, dado que necesitamos los
números pares vamos a ir de dos en dos, así que el tamaño del paso va a ser 2,

24
teniendo estos 3 componentes identificados, estamos listos para crear nuestro ciclo
for así:

Ejemplo 2: Cuenta regresiva en un ciclo for

Ahora veremos otro ejemplo sencillo en cual veremos que el ciclo for también puede
iterar disminuyendo el valor del contador, para comprender esto, lo que haremos será
imprimir por pantalla una cuenta regresiva desde el número diez hasta el cero,
veamos:

Solución Ejemplo 2:
Para este caso, debido a que queremos ir de un número mayor a uno más pequeño, por
lo tanto, para este ejemplo el valor inicial será 10 y el valor final será cero. Adicional,
el tamaño de paso será de 1 negativo, es decir, -1, así:

Ejemplo 3: Contador con un ciclo for

Para este ejemplo haremos algo un poco más complejo. El ejemplo consiste en contar
al interior de un ciclo for, cuántos números entre el 0 y el 10.000 son múltiplos del 13.
Para ello haremos uso del operador % (modulo) que obtiene el residuo de una división
y también usaremos un pequeño condicional para verificar que el modulo sea cero al
dividir por 13.

Solución Ejemplo 3:
Para este caso el valor inicial será 0 y el valor final será 10000. Adicional, el tamaño
de paso será de 1. Al interior del ciclo, en cada iteración verificaremos si el número en
el que estamos es divisible por trece o no y en caso afirmativo aumentaremos el
contador en una unidad así:

25
Este ciclo for nos permitirá saber que existen 770 múltiplos del 13 en los números del
0 al 10000.

En efecto los ciclos for, son bastante útiles, sin embargo, desde el punto de vista de la
eficiencia, es recomendable evitarlos en la medida de lo posible, siempre que vayas a
usar un ciclo for, deberías preguntarte primero si es totalmente necesario o si existe
una manera más efectiva de hacerlo.

14. Ciclo while en C++. Estructura y sintaxis. Cómo y para qué usar un ciclo while en C+
+

Los ciclos while son también una estructura cíclica, que nos permite ejecutar una o
varias líneas de código de manera repetitiva sin necesidad de tener un valor inicial e
incluso a veces sin siquiera conocer cuándo se va a dar el valor final que esperamos,
los ciclos while, no dependen directamente de valores numéricos, sino de valores
booleanos, es decir su ejecución depende del valor de verdad de una condición dada,
verdadera o falso, nada más. De este modo los ciclos while, son mucho más efectivos
para condiciones indeterminadas, que no conocemos cuando se van a dar a diferencia
de los ciclos for, con los cuales se debe tener claro un principio, un final y un tamaño
de paso.

¿Cómo funciona un Ciclo While?

Para comprender mejor el funcionamiento del ciclo while, pongamos un buen ejemplo,
imaginemos que por algún motivo, queremos pedirle a un usuario una serie de
números cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un
número mayor a 100. Como vemos, aquí no podríamos utilizar un ciclo for, pues no
tenemos ni idea de cuándo al usuario se le va a ocurrir ingresar un número mayor que
100, es algo indeterminado para nosotros, sin embargo, el ciclo while nos permite
ejecutar una acción de forma infinita hasta que se cumpla alguna condición específica,
en nuestro caso sería que el numero ingresado sea mayor a 100. De modo que si el
usuario nos ingresa de manera sucesiva los siguientes numero 1,50,99, 49, 21, 30, 100
..., nuestro programa no finalizara, pues ninguno de estos números es mayor que 100,
sin embargo si nos ingresara el numero 300, el programa finalizaría inmediatamente.

Sintaxis del Ciclo While en C++:

La sintaxis de un ciclo while es incluso más simple y "legible" que la del ciclo for en
C++, pues simplemente requerimos tener clara una condición de parada. En realidad,
en la mayoría de los lenguajes de alto nivel la manera de escribir un ciclo while (la

26
sintaxis) es incluso muy similar, así que con tan solo tener bien clara una condición de
finalización para el ciclo tendremos prácticamente todo hecho.

Línea 1:

En esta línea está prácticamente todo lo esencial de un ciclo while. La sintaxis es


bastante simple. Tenemos al interior de los paréntesis una condición cualquiera, es
decir por ejemplo "==. >, <, >=, <=, !=" o algunas más que se nos puedan ocurrir, esta
condición que especifiquemos allí, es la que permitirá que el ciclo se siga ejecutando
hasta que en algún momento esta misma condición deje de cumplirse, de esta forma si
por ejemplo estamos verificando que un numero_cualquiera == 50, el ciclo se
ejecutara solo cuando numero_cualquiera sea igual a 50, en cuanto su valor cambie a
cualquier otro el ciclo while finalizara y continuara con el resto de la ejecución del
programa. De esta forma, es evidente que la condición que allí ingresemos siempre
deberá tomar un valor booleano (true o false).

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que allí
comienza un bloque de instrucciones que se ejecutaran cada vez que el ciclo de un
"giro". Esta llave no es del todo obligatoria, sin embargo si no la ponemos solo se
ejecutara dentro de nuestro ciclo while la primera línea inmediatamente posterior a la
declaración del ciclo, de modo que si deseamos que se ejecuten varias líneas dentro
de nuestro ciclo, debemos usar las llaves

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de
manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de
líneas necesarias incluso, como veremos más adelante dentro de estas podría haber
uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo.

Línea 8:

En esta última línea hacemos uso de la llave cerrando "}", una vez más como
seguramente ya debemos saber esta nos indica que allí termina el bloque del ciclo
while y se dará por terminada la ejecución de este para continuar ejecutando el resto
del algoritmo.

Ejemplos de Ciclo While en C++

A continuación vamos a ver unos cuantos ejemplos para comprender de manera


adecuada el uso de los ciclos while en c++, recuerda que si no comprendes alguno de
estos ejemplos o tienes alguna pregunta o sugerencia sobre estos o cualquier
contenido de la sección, puedes dejarlas en la sección de comentarios

Ejemplo 1: Pedir números por pantalla hasta que alguno sea mayor a 100

27
Vamos a retomar el ejemplo anterior, donde queremos hacer que nuestro programa le
pida a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo
cuando el usuario ingrese un número mayor a 100, una vez más es un ejemplo sencillo
con el que nos aseguraremos de haber comprendido bien todos los conceptos
anteriores:

Solución Ejemplo 1:

Para solucionar esto, debemos tener clara cuál va a ser la condición que se debe
cumplir para que el ciclo este pidiendo el numero contantemente, el ciclo se va a
detener solo cuando el numero ingresado sea mayor que 100, así que la condición para
que se siga ejecutando es que el numero sea menor a 100, ¿Comprender la lógica?, es
simple si para que se detenga el numero debe ser mayor a 100, entonces para
seguirse ejecutando el numero debe ser menor o igual a 100, veámoslo entonces

En efecto los ciclos while, son bastante útiles, sin embargo, desde el punto de vista de
la eficiencia al igual que con los ciclos for, es recomendable evitarlos en la medida de
lo posible, siempre que vayas a usar un ciclo while o cualquier tipo de ciclo en
realidad, deberías preguntarte primero si es totalmente necesario o si existe una
manera más efectiva de hacerlo. Evidentemente habrá situaciones en las que será casi
que imprescindible usar el ciclo, pues por algo existen, esta entonces en nuestra
habilidad determinar cuándo usarlos y mejor aún como usarlos de manera efectiva.

15. Ciclo do-while en C++. Estructura y sintaxis. Cómo y para qué usar un ciclo do-while
en C++

Los ciclos do-while son una estructura de control cíclica, los cuales nos permiten
ejecutar una o varias líneas de código de forma repetitiva sin necesidad de tener un
valor inicial e incluso a veces sin siquiera conocer cuándo se va a dar el valor final,
hasta aquí son similares a los ciclos while, sin embargo el ciclo do-while nos permite
añadir cierta ventaja adicional y esta consiste que nos da la posibilidad de ejecutar
primero el bloque de instrucciones antes de evaluar la condición necesaria, de este
modo los ciclos do-while, son más efectivos para algunas situaciones específicas.

En resumen, un ciclo do-while, es una estructura de control cíclica que permite


ejecutar de manera repetitiva un bloque de instrucciones sin evaluar de forma
inmediata una condición específica, sino evaluándola justo después de ejecutar por
primera vez el bloque de instrucciones

¿Cómo funciona un Ciclo Do-While?

Para comprender mejor el funcionamiento del ciclo while, usemos de nuevo el ejemplo
de la sección anterior sobre el ciclo while. Imaginemos entonces que por algún motivo,

28
queremos pedirle a un usuario una serie de números cualquiera y que solo dejaremos
de hacerlo cuando el usuario ingrese un número mayor a 100.

Como vimos anteriormente, esto se puede hacer por medio de un ciclo while, pero
vamos ahora a ver como lo podemos hacer usando un ciclo do-while mejorando así un
poco nuestro algoritmo, evitando ciertos comandos, tal como se dijo con el ciclo while,
en efecto aquí estamos en la situación de no tener ni idea de cuándo al usuario se le
va a ocurrir ingresar un número mayor que 100, pues es algo indeterminado para
nosotros, sin embargo el ciclo while y en efecto el do-while nos permite ejecutar
cierta acción de forma infinita hasta que se cumpla alguna condición específica, en
nuestro caso sería que el numero ingresado sea mayor a 100. De modo que, si el
usuario nos ingresa de manera sucesiva los siguientes números 1,50,99, 49, 21, 30,
100 ..., nuestro programa no finalizara, pues ninguno de estos números es mayor que
100, sin embargo, si nos ingresara el número 300, el programa finalizaría
inmediatamente.

Sintaxis del Ciclo Do-While en C++:

La sintaxis de un ciclo do-while es un tanto más larga que la del ciclo while en C++,
sin embargo, no se hace más complicado, de hecho, con tan solo tener bien clara una
condición de finalización para el ciclo tendremos prácticamente todo terminado.

Vamos entonces a ver línea por línea el anterior código para comprender todo y
quedar claros. Posteriormente veremos el ejemplo planteado anteriormente y su
solución.

Línea 1:

Esta línea es por decirlo así, la parte novedosa del ciclo do-while, esta expresión no
evalúa ninguna condición ni nada, simplemente da paso directo al bloque de instrucción
y luego permite la evaluación de la condición.

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que allí
comienza un bloque de instrucciones que se ejecutaran cada vez que el ciclo de un
"giro". Esta llave no es del todo obligatoria, sin embargo, si no la ponemos solo se
ejecutará dentro de nuestro ciclo la primera línea inmediatamente posterior a la
instrucción do, de modo que, si deseamos que se ejecuten varias líneas dentro de
nuestro ciclo, debemos usar las llaves. En lo personal, es preferible poner siempre las
llaves sin importar cuantas líneas se vayan a ejecutar, es una buena práctica de
programación y te puede evitar dolores de cabeza

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de
manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de
líneas necesarias incluso, como veremos más adelante dentro de estas podría haber
uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo.

29
Línea 8:

En esta última línea hacemos uso de la llave cerrando "}", una vez más como
seguramente ya debemos saber esta nos indica que allí termina el bloque de
instrucciones que se ejecutarán de manera cíclica y se dará por terminada la ejecución
de este para continuar ejecutando el resto del algoritmo.

Línea 9:

La línea 9 en el ciclo do-while, tiene la misma importancia y función que l alinea 1 en


la sección del ciclo while, cabe resaltar que simplemente evalúa la condición y define
si se cumple o no para seguir con la ejecución del ciclo o con la del resto del
algoritmo, de este modo podemos ver que el ciclo while y el do-while son muy
similares, con la pequeña diferencia en que en uno se evalúa la condición desde el
principio y en la otra al final de cada ciclo.

Ejemplos de Ciclo Do-While en C++

A continuación, vamos a ver unos cuantos ejemplos para comprender de manera


adecuada el uso de los ciclos while en c++

Ejemplo 1: Pedir números por pantalla hasta que alguno sea mayor a 100

Vamos a retomar el ejemplo anterior, donde queremos hacer que nuestro programa le
pida a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo
cuando el usuario ingrese un número mayor a 100, una vez más es un ejemplo sencillo
con el que nos aseguraremos de haber comprendido bien todos los conceptos
anteriores, vamos a ver cómo hacer lo mismo con dos tipos de ciclos diferentes (el
while y el do-while), sin embargo, vamos a ver como con uno es más eficiente que con
el otro:

Solución Ejemplo 1:

Para solucionar esto, debemos tener clara cuál va a ser la condición que se debe
cumplir para que el ciclo este pidiendo el numero constantemente. El ciclo se va a
detener solo cuando el numero ingresado sea mayor que 100, así que la condición para
que se siga ejecutando es que el número sea menor a 100, ¿Comprender la lógica?, es
simple si para que se detenga el numero debe ser mayor a 100, entonces para
seguirse ejecutando el numero debe ser menor o igual a 100, veámoslo entonces

Nota:  Como podrás comprobar, ambos códigos hacen lo mismo, haciendo uso del ciclo
while o del ciclo do while, sin embargo, con el ciclo do-while, hemos obtenido un
beneficio interesante, primero que todo hemos podido evitar tener que inicializar la
variable numero, segundo también pudimos eliminar las líneas repetidas donde se

30
pedía el numero por fuera del ciclo y luego al interior del ciclo, aquí lo hicimos solo al
interior, pues la condición se evaluaba mucho más abajo.

En efecto los ciclos do-while, son bastante útiles, sin embargo, como con cualquier
ciclo desde el punto de vista de la eficiencia al igual que con los ciclos for, es
recomendable evitarlos en la medida de lo posible, siempre que vayas a usar un ciclo
do-while o cualquier tipo de ciclo en realidad, deberías preguntarte primero si es
totalmente necesario o si existe una manera más efectiva de hacerlo. Evidentemente
habrá situaciones en las que será casi que imprescindible usar el ciclo, pues por algo
existen, está entonces en nuestra habilidad determinar cuándo usarlos y mejor aún
como usarlos de manera efectiva.

16. Ciclos anidados en C++. Creando ciclos al interior de otros ciclos

Antes de comenzar, quisiera aclarar que los ciclos anidados NO son en sí una
estructura de control, son de hecho un conjunto de estructuras de control anidadas,
con anidadas me refiero a que una está dentro de la otra. De este modo un ciclo
anidado (de hecho, debería ser ciclos anidados, en plural: P) no es más que uno o más
ciclos dentro de otro y de hecho no tenemos límite alguno para la cantidad de ciclos
anidados.

Uno de los mayores problemas en cuanto a eficiencia que hay en la programación es


tener ciclos anidados, son simplemente terribles para el rendimiento, sin embargo, hay
ocasiones en las que son indispensables. Como mencioné, no existe límite para la
cantidad de ciclos anidados, sin embargo, entre más ciclos tengamos, uno dentro de
otro, más lenta será nuestra ejecución.

En conclusión, los ciclos anidados no son una estructura de control por sí mismos, son
un indicativo de que quizá deberíamos plantear la solución a algún problema si nos
vemos obligados a usar ciclos anidados y más aún si es más de uno, sin embargo,
debemos saber que a veces son indispensables.

¿Cómo funciona un ciclo anidado?


Un único ciclo al interior de otro, funciona como un ciclo normal pero elevado al
cuadrado, el ciclo externo comienza su ejecución con normalidad y luego va hasta el
ciclo interno, y aquí es donde cambia todo; el ciclo externo no avanza hasta que el
ciclo interno termine y una vez el ciclo externo avanza un paso vuelve a esperar al
interno y así sucesivamente hasta que el externo termina, es por esto que es tan
ineficiente el asunto.

Los ciclos anidados suelen usarse para llenar matrices (un vector de varias
dimensiones) donde un ciclo recorre cada fila y otro cada columna o viceversa
(depende de lo que necesitemos). De este modo entonces el ciclo externo empieza por
la columna cero y el interno llena cada casilla de la columna cero y luego de la uno y
las dos y así...

Notemos que entonces el ciclo externo (el de las columnas) no avanza a la siguiente
hasta que el ciclo interno no llene todas las casillas de esa columna (lo cual tiene
sentido, pues debe llenarse en orden).

Sintaxis de ciclos anidados:


La sintaxis es sencilla, un ciclo con otro adentro, y lo que nos haga falta, pues
podemos poner varias sentencias adicionales al interior de cualquiera de los dos
ciclos.

31
Como puedes ver entonces, es bastante simple, solo hay que notar algunas cosas
interesantes: la primera y más importante es que la variable de control debe ser
distinta en cada ciclo, fíjate que el ciclo externo usa la variable 'i' como variable de
control mientras que el ciclo interno usa la 'j'. También debes notar que en el bloque
interno de instrucciones podrías poner otro ciclo de cualquier tipo y al interior de este
otro y así sucesivamente, cambiando el nombre de la variable de control (usar 'k' por
ejemplo) para evitar mal funcionamiento. Finalmente debes saber que, aunque son
ciclos anidados no dejan de ser ciclos independientes en realidad, así que puedes
poner las instrucciones que desees al interior de cualquier de ellos.

Nota: Cabe mencionar que no he hablado de tipos de ciclos, en realidad somos libres


de anidar cualquier tipo de ciclo (for, while, do-while) y en cualquier cantidad, por
ejemplo:

Como puedes notar, básicamente no tienes restricciones en ello, de hecho, al interior


de cada ciclo puedes poner condicionales y demás estructuras que requieras.

Veamos entonces un ejemplo funcional para quedar claros.

32
Ejemplo de ciclos anidados en C++
En este primer ejemplo vamos a llenar una matriz de 10x10 (diez filas y diez
columnas) con los números del 1 al 100 (1x1 hasta 10x10).

En efecto los ciclos anidados son muy interesantes y también útiles para múltiples
situaciones, pero debes recordar que el tema de la eficiencia es un poco delicado, es
recomendable evitarlos, aunque no temerles, pues hay casos en los que son
fundamentales e indispensables. Cuando vayas a usar un ciclo anidado detente un par
de minutos y piensa si es realmente necesario usarlo o si puede haber una manera
más efectiva de conseguir el mismo resultado; repito: habrá casos en los que sea
indispensable usarlos, así que no les temas pues en algún momento será
imprescindible usar un hermoso ciclo anidado, pues por alguna razón el lenguaje nos
permite crearlos. Así que será nuestra experiencia y pericia la que nos dirá cuando es
realmente necesario usarlos.

17. Estructuras de datos en C++. Uso, manejo y ventajas. Arreglos, vectores, matrices y
demás

Las estructuras de datos en C++ se pueden entender como un tipo de dato compuesto
(no complejo). Las estructuras de datos permiten almacenar de manera ordenada una
serie de valores dados en una misma variable. Las estructuras de datos más comunes
son los vectores o arreglos y las matrices, aunque hay otras un poco más diferentes
como son el struct y las enumeraciones.

33
En esta serie de contenidos aprenderemos de éstas con detalle. Las estructuras de
datos han sido creadas para solucionar una gran variedad de problemáticas que no
eran solucionables (o al menos no muy fácilmente) con los tipos de datos primitivos.
Tal como mencioné hace un momento las estructuras de datos se pueden ver como
una agrupación o estructuración para una serie de tipos de datos primitivos (aunque
también pueden poseer tipos de datos complejos) que pueden ser fácilmente utilizadas
e identificadas.

Sin la existencia de las estructuras de datos sería imposible o bastante complicado por
ejemplo conocer y manejar todos los números de identificación, nombres y direcciones
de todos los usuarios de un sistema (que normalmente serían muchísimos) pero ahora
con las estructuras de datos es muy simple definir una serie de posiciones en memoria
para cada valor que deseamos guardar o definir un orden o valores específicos para
cada campo y accediendo a ellos generalmente por medio de una única variable, todo
esto es sencillo hacerlo con el uso de las estructuras de datos y sin desperdiciar
recursos.

Arrays, arreglos o vectores en C++. Uso, declaración y sintaxis de los vectores en


C++

Los arrays, arreglos o vectores forman parte de la amplia variedad de estructuras de


datos que nos ofrece C++, siendo además una de las principales y más útiles
estructuras que podremos tener como herramienta de programación. Los arrays,
arreglos o vectores (como los quieras llamar), son utilizados para almacenar múltiples
valores en una única variable. En un aspecto más profundo, los arrays, permiten
almacenar muchos valores en posiciones de memoria continuas, lo cual permite
acceder a un valor u otro de manera rápida y sencilla. Estos valores pueden ser
números, letras o cualquier tipo de variable que deseemos incluso tipos de datos
propios.

En múltiples ocasiones es necesario almacenar gran cantidad de información en una


variable y a menudo sucede que no conocemos con exactitud la cantidad de datos que
debemos almacenar, pero sabemos que sí sería más de uno, como por ejemplo
almacenar las identificaciones de las personas ingresadas al sistema.

Los arrays, arreglos o vectores son una estructura que nos permite solucionar este
tipo de problemas. Para explicar mejor de lo que hablo, pongamos un ejemplo:

Ejemplo de Arrays o Vectores en C++

Imaginemos que queremos crear un programa con el cual podamos de algún modo
almacenar los títulos y los autores de diferentes libros. El usuario es el encargado de
suministrar la información de cada libro, así entonces, dado que es el usuario quien lo
hace, nosotros no tenemos manera alguna de saber cuántos libros va querer él
ingresar por medio de nuestro programa. El caso principal es que queremos almacenar
en la memoria el título y el autor de TODOS y cada uno de los libros. Entonces ¿cómo
crees que podrías hacer esto? Con lo que sabemos hasta hora, se nos podrían ocurrir
un par de cosas. Veamos:

Posible Solución 1: Sin usar vectores (errónea):


Podríamos pensar primero, "listo, está bien, es fácil, declaro una variable llamada titulo
y otra autor, ambas de tipo string y se las pido al usuario", pues bien, esta solución
digamos que nos permite almacenar la información del primer libro que el usuario
ingrese, pero en cuanto desee ingresar otro libro ¿qué vamos a hacer?, si lo hacemos
así, cuando el usuario ingrese la información para un nuevo libro, va a sobrescribir los

34
valores anteriores y habremos perdido la información del primero, de manera que esta
solución no es válida.

Posible Solución 2: Sin usar vectores o matrices (errónea):

Pensando un poco más en esto, se nos ocurre una forma de almacenar la información
de cada libro, podríamos crear un par de variables distintas para cada libro. Pero de
inmediato nos damos cuenta que si por ejemplo al usuario se le cruzara por la cabeza
ingresa información para 10 libros tendríamos entonces ¡20 variables distintas!, 2 por
cada libro, no es mucho, pero si se le ocurriera ingresar 1000 libros, ¿estarías
dispuesto a declarar 2000 variables? De modo que esta alternativa es incluso peor que
la anterior y seguimos aún sin solucionar nuestro problema.

Posible Solución 3: Usando vectores o matrices (correcta):

¡Pues bien!, tal y como mencioné antes, los arrays o los vectores han venido para
ayudarnos en múltiples circunstancias similares a esta. Dado que un array, arreglo o
vector es capaz de almacenar múltiples valores en una misma variable, tenemos el
elemento perfecto para almacenar la información de todos los libros, podremos crear
un vector de un tamaño cualquiera capaz de contener en sí los nombres de los autores
y otro con los títulos de los libros o alternativamente podríamos crear una matriz de
dos columnas que contenga en la primera columna los autores y en la segunda los
títulos; ambas soluciones son válidas y vamos a ver ambas, usando vectores en esta
sección y usando matrices en la sección de matrices.

Nota:  En C++, a diferencia de algunos otros lenguajes de programación, los vectores


y las matrices presentan un "inconveniente" con el tamaño. Es decir, no es posible
crear de una manera sencilla un vector capaz de almacenar una cantidad de
información indefinida, es necesario ingresar con antelación la cantidad de datos
(tamaño) que el vector o la matriz tendrá. Este problema se puede solucionar, pero es
algo que no veremos en esta sección. Si buscas cómo crear vectores de tamaño
dinámico o matrices de tamaño dinámico, te recomiendo ver la sección de Punteros en
C++. No te recomiendo ver esa sección sin antes haber entendido esta.

Muy bien, ahora que sabemos la gran utilidad de los arrays, vectores o arreglos para
nosotros, aprendamos más acerca de estos, veamos como declarar un vector, array o
arreglo, como recorrer un vector y algunos ejemplos de esto.

¿Cómo declarar un Array o Vector en C++?

Para declarar un vector en C++, se deben seguir las mismas normas básicas que se
siguen para declarar una variable cualquiera, con un pequeño cambio en la sintaxis.
Para declarar un vector, arreglo o como lo quieras llamar, necesitaremos saber el tipo
de los datos que irán al interior de este, es decir, serán números enteros, o números
decimales o cadenas de texto, etc. necesitamos también, como siempre, un nombre
para el vector y un tamaño máximo. La sintaxis para declarar un vector en C++ es la
siguiente:

tipo_de_dato nombre_del_vector[tamanio];

Tenemos entonces, tal como mencioné antes, que, para declarar un vector en C++,
debemos definirle un tipo de los datos, sea entero, float, string, etc., debemos darle un
nombre y al interior de los corchetes "[]" debemos poner el tamaño máximo que
tendrá el vector, es decir la cantidad máxima de datos que podrá contener (recuerda
que en C++ esto es necesario hacerlo). Veamos un ejemplo en el cual pondré la
declaración de varios vectores de diferentes tipos y tamaños en C++.

35
Declaración de un Array o Vector en C++

Veamos rápidamente que representa cada línea del código anterior.

Línea 1
Esta línea contiene la declaración de un vector llamado my_vector1, el cual contendrá
un máximo de 10 elementos de tipo entero.

Línea 2
Esta línea contiene la declaración de un vector llamado my_vector2, el cual contendrá
un máximo de 25 elementos de tipo float.

Línea 3
Esta línea contiene la declaración de un vector llamado my_vector3, el cual contendrá
un máximo de 500 elementos de tipo string.

Línea 4
Esta línea contiene la declaración de un vector llamado my_vector4, el cual contendrá
un máximo de 1000 elementos de tipo booleano.

Línea 5
Esta línea contiene la declaración de un vector llamado my_vector5, el cual contendrá
un máximo de 2 elementos de tipo char.

Ya que está claro cómo se declara un vector, vamos a ver cómo inicializarlo, es decir
inicializar un vector en C++ o en otras palabras darle valores a un vector.

¿Cómo inicializar un Array o Vector en C++?

En cuanto tenemos declarado un vector, es posible asignarle valores, evidentemente


estos valores deben coincidir con el tipo de dato que le asignamos a dicho vector, no
tendría sentido ingresar como valores de un vector cadenas de caracteres si el tipo de
dato de dicho vector es numérico.

Voy a mostrar a continuación formas distintas de inicializar un vector, todas son


válidas, ya es cuestión de nuestras necesidades y conocimientos determinar cuál es
útil y en qué momento. Veamos entonces:

Forma 1 de declarar un Array o Vector en C++

Aquí hemos declarado un vector de tipo string tamaño 5 y lo hemos inicializado con
diferentes valores, es necesario notar que cada valor va entre comillas dobles ""
puesto que son strings. El valor inicial corresponde a la casilla o índice 0 y tiene el
valor de "5", el índice 1 el valor es "hola" y el índice 4 el valor es "adiós", es
importante notar que el primer índice de n array o vector no es el UNO, sino que es el
CERO.

Forma 2 de declarar un Array o Vector en C++

36
Aquí hemos declarado un vector de tipo int y no especificamos su tamaño, si el tamaño
no se especifica entre los corchetes, el vector tendrá como tamaño el número de
elementos incluidos en la llave, para este caso es 9.

Particularidades de los Arrays, arreglos o Vectores en C++

Con C++, existen algunas particularidades, en cuanto a la declaración de vectores,


que me parece importante destacara para que en momento de quizá caer en ellas
comprender como podrían cambiar las cosas o básicamente en que consiste el error,
veamos:

Particularidad 1 al momento de declarar o inicializar un Vector o Array en C++

Dadas las características de C++, es fácil pensar que es factible crear o declarar un
vector de un tamaño cualquiera y posteriormente inicializarlos de forma habitual como
se muestra en este código, sin embargo, hacer esto es un error, si declaramos un
vector y no lo inicializamos inmediatamente, no es posible inicializarlo de la forma que
hemos visto, es decir entre llaves cada valor, como en la línea 2 del código anterior.
La única forma de inicializar el vector, o, mejor dicho, darle valores a cada una de sus
casillas, es hacerlo uno por uno, es decir darle un valor a la casilla cero a la uno y a la
2 (para un vector de tamaño 3). Por defecto, al declarar un vector sin ser inicializado,
cada una de las casillas de este vector toma como valor el valor por defecto del tipo
de variable, para el caso de los enteros (int) es -858993460. Así entonces para
asignar valores a cada casilla lo hacemos así:

Es importante notar en este código, que el número que va entre corchetes ya no indica
tamaño (pues vector2 ya está declarado) sino que indica el índice o el número de la
casilla con la cual estaremos operando (recordemos que el primer índice es cero y no
uno), en el código anterior, habíamos declarado un vector de tamaño 3, por lo cual
debíamos asignar valores a los índices 0, 1 y 2.

Particularidad 2 al momento de declarar o inicializar un Vector o Array en C++

En C++ a la hora de inicializar un array, arreglo o Vector, estamos acostumbrados a


que si inicializamos inmediatamente después de declarar el vector, debemos poner la
misma cantidad de elementos al interior de las llaves de manera que corresponda con
el tamaño del vector, pues bien, estos es lo más recomendable, sin embargo si
ponemos una cantidad de elementos menor a la del tamaño real del vector, estamos
queriendo decir que estos elementos toman los valores puestos entre las llaves y los
demás serian cero, para el caso del código anterior el primer elemento (el del índice
cero) va a tener un valor de 10.5 y los otros 4 elementos van a valer cero.

Ya tenemos claro cómo declarar un array o vector en C++, algunas características un


tanto particulares de estos, sin embargo, aún no sabemos cómo obtener los datos de
un array, es decir una vez el array o vector este lleno con los elementos que
queremos, como podemos obtener esa información y más aún, como obtener un valor
específico dentro del array. Veámoslo:

Obtener el valor de una casilla específica en un array en C++

Es muy común el caso en el que tenemos un vector con una enorme cantidad de
elementos, sin embargo, de todos estos, solo nos interesa uno en especial y corremos

37
con la suerte de saber cuál es su índice, sabiendo el índice de un elemento en un array
es bastante sencillo obtener el valor de este:

Como podemos ver, para acceder a un valor específico conociendo el índice del
elemento, solo basta con escribir dicho índice entre los corchetes "[ ]", recuerda que
el índice comienza desde cero, así por lo tanto en un vector de 5 elementos (como el
del ejemplo), el último elemento está en el índice 4 y el primer elemento del array en
el índice 0.

Ya tenemos entonces una forma de acceder de forma individual a un elemento de un


array o vector, vamos a ver ahora como recuperar todos los elementos de un vector
de forma simple

Recorrer un Array o Vector en C++

Para obtener todos los datos que se encuentran al interior de un vector, es necesario
recorrer el array o vector, para recorrerlo, se usa casi siempre un ciclo for, en
algunos casos más específicos un ciclo while, pero generalmente el ciclo for es el
ideal para esto, dado que conocemos el tamaño del array. La lógica de este
procedimiento es la siguiente, el ciclo for comenzara desde cero e ira hasta el tamaño
del vector, de modo que la variable de control que generalmente llamamos "i", será la
que va a ir variando entre cero y el tamaño del array, de esta forma al poner la i al
interior de los corchetes, estaremos accediendo al valor de cada casilla del vector y
podremos hacer lo que sea necesario con dicho valor, veamos:

Nota: A veces no es posible determinar con facilidad el tamaño exacto de un vector,


pero en C++ existen varias formas de determinar el tamaño de un array o vector
fácilmente, aquí explicare un método. Cabe notar que este tamaño es el que ira como
tope del ciclo for y sería equivalente a que nosotros mismos, en caso de saber el
tamaño del vector, lo pongamos allí, sin embargo, como veremos en otra sección no
siempre es posible saber con certeza el tamaño de un vector, es por esto que explico
cómo hacerlo.

Vamos a ver de forma resumida en qué consiste y que hace cada una de estas líneas

Línea 1:
Tenemos en la primera línea la declaración de un vector que contiene las edades de
12 personas, notemos que entre los corchetes no se puso ningún numero, pues no es
necesario, ya que el vector tendrá el tamaño según la cantidad de elementos que
declaremos entre las llaves, evidentemente si pusiéramos un 12 entre los corchetes,
no habría ningún problema.

38
Línea 2:
En la segunda línea, tenemos la declaración del límite del ciclo o en otras palabras el
tamaño del array. El tamaño de un array se puede calcular de varias formas, aquí lo
obtenemos calculando el tamaño del array entero, dividido por el tamaño del primer
elemento de dicho array, para más detalles de esto, verifica la información sobre
el operador sizeof.

Línea 3 a 6:
Desde la tercera línea hasta la sexta, tenemos entonces un ciclo for que comienza en
cero y termina en el límite (es importante notar que la condición usada es
estrictamente menor "<" y no menor o igual "<="), al interior de este ciclo, es donde
accedemos a cada uno de los elementos del vector por medio de la sintaxis explicada
anteriormente

Línea 5:
La quinta línea es quizá la más vital, aunque sin las demás no tendríamos nada. En esta
línea, estamos accediendo a cada uno de los elementos del array de edades, un
elemento por cada vuelta que da el ciclo, accedemos a cada elemento poniendo entre
los corchetes la variable i, que es la que está cambiando a medida que el ciclo va
girando, así estaremos accediendo a todos los elementos e imprimiéndolos por pantalla

Muy bien, llego el momento de afianzar nuestros conocimientos viendo un ejemplo.


Ahora que tenemos claro como declarar un vector en C++, como recorrerlo y como
acceder a sus datos, vamos a ver un ejemplo basado en el problema que planteé al
inicio de esta sección (el de los libros).

Ejemplo 1 de Arrays o Vectores en C++

El problema es simple, queremos crear un programa con el cual podamos guardar los
títulos y los autores de diferentes libros sin perder ninguno de ellos. El usuario es el
encargado de suministrar la información de cada libro. Vamos a suponer que el usuario
solo podrá ingresar un máximo de 5 libros, para así tener un tamaño de vector fijo.
Veamos entonces como se haría esto:

Hay que considerar que el tipo de dato que estamos usando para los vectores de
titulos y autores es char por lo tanto debes ingresar un único caracter cuando pruebes
el algoritmo, pues de lo contrario el comportamiento será un poco extraño (aunque
tiene su explicación). A continuación, haremos este mismo ejemplo, pero usando
cadenas de texto completas (strings) para poder ingresar sin problemas más de una
letra.

Ejemplo 1 mejorado

Vamos a solucionar el mismo problema, pero esta vez lo haremos bien. Vamos a
utilizar cadenas de texto completas (string) de modo que al ingresar un titulo o un
autor podamos poner textos completos:

39
Muy bien, tal como dije en el ejemplo anterior ahora ya podemos ingresar más de un
caracter para el título y los autores (tal y como debe ser) y nuestro algoritmo funciona
aún mejor. Puedes ver que los únicos cambios necesarios fueron importar la librería
string y poner los tipos de datos como string en vez de char y eso solucionó por
completo nuestro problema. Ten en cuenta que en versiones antiguas de compiladores
usar la funcion cin para leer strings genera un error así que asegurate de usar una
versión reciente o usa entonces la función getline

Ejemplo perfeccionado

En la versión del ejemplo anterior tenemos un problema un poco, y es que cuando


ingresamos el título del libro o el autor de este con espacios, es decir, más de una
palabra (habitualmente es así) el objeto cin interpreta esto como un fin de línea y no
nos solicita el siguiente valor. Para solucionar esto haremos uso de la
función getline (la que mencioné hace un momento) que nos permite solucionar este
tipo de problemas. Vamos a solucionar el mismo problema, pero esta vez lo haremos
bien. Vamos a utilizar cadenas de texto completas (string) de modo que al ingresar un
título o un autor podamos poner textos completos:

40
Como puedes apreciar, hemos reemplazado las líneas que usaban cin para leer los
datos por la función getline(...) que recibe como primer argumento el flujo de entrada
de cin y como segundo argumento la variable en la que queremos poner el valor.

Pues bien, creo que es todo de momento con los arrays, arreglos o vectores en C++
de momento, espero más adelante añadir unos videos tutoriales con más explicaciones
y ejemplos de este tema, además de añadir varios ejemplos más aquí mismo. De
momento, espero que toda esta información haya sido de tu utilidad.

Ahora que ya conocemos todo bien acerca de los arrays, arreglos o vectores,
podremos hablar acerca de Matrices que en realidad no son tan diferentes a lo que ya
he explicado, por lo que seguramente la sección de matrices no sea tan extensa como
ésta. Pues bien, sigamos con nuestro curso de C++ y dirijámonos a la sección
de Matrices en C++.

EJERCICIOS

- Programa que calcula la suma de dos números


- Programa que calcula la longitud de una circunferencia
- Programa que calcula la media aritmética de tres números cualesquiera
- Programa que calcula el área del trapecio
- Programa que calcula la raíz cuadrada de un número.
- Programa que calcula el área de un triángulo (formula de Herón)
- Programa que calcula el resto de una división entre dos números enteros
- Programa que, ingresados dos números, nos diga cuál es el mayor, cual es el
menos o si son iguales.
- Programa que resuelve ecuación de segundo grado
- Programa que indique la correspondencia de un numero ingresado con relación al
mes. (realizar el ejercicio con if y luego con switch)
- Programa que borre la pantalla al pulsar ENTER

void main(){
char Espera;
printf("Programa de prueba de borrado de pantalla");
printf("\nPulsa intro");
scanf("%c",&Espera);
system("cls");
printf("Ha funcionado!, Hasta pronto.\n");
}

- Programa que muestra los 20 primeros números naturales


- Programa que muestra los números pares hasta 30
- Programa que muestre los múltiplos de 7 hasta 200
- Programa que muestre de 10 a 0 en orden descendente
- Programa que diga si un número es par o no. Y que finalice si ingresa 0
void main(){
         int num;
         printf("Por favor, escribe el numero que quieras.Te diremos si es par o impar: ");
         while (num!=0){
                   scanf("%d",&num);
                   if(num%2==0){
                            printf("\n\nEste numero es par.\n");
                   }else{
                            printf("\n\nEste numero es impar.\n");
                   }
         }

41
         printf("\nHasta luego.\n\n");
}
 
- Programa que muestre los divisores de un numero introducido por el usuario.
- Programa que calcule los N términos de la serie Fibonacci
void main(){
         printf("Bienvenido al programa para calcular la progresion de Fibonacci.\n\n");
         int veces, primer=0,segun=1,proximo,r;
         char borrado;
         printf("Introduzca el numero de terminos: ");
    scanf("%d",&veces);
         scanf("%c",&borrado);
         system("cls");
         printf("He aqui la sucesion de %d terminos: \n",veces);
         for(int i=0;i<=veces;i++){
           r=primer+segun;
                      primer=segun;
                      segun=r;
                printf("\n\t\t\t\t%d",r);
       }
            printf("\n\nGracias por utilizar este programa.\n\n");
}
 

- Programa que indique si un número es primo o no


- Programa que cuente el número de vocales de un texto escrito por el usuario
void main(){
int bandera=0,a=0,e=0,i=0,o=0,u=0;
char c;
printf("Introduzca caracteres hasta pulsar el guion:\n\n");
while(bandera==0){
         c=getche();
         if(c=='a'){
                   a++;
         }else if(c=='e'){
                   e++;
         }else if(c=='i'){
                   i++;
         }else if(c=='o'){
         o++;
         }else if(c=='u'){
         u++;
         }else if(c=='-'){
         bandera=1;
         }else{
                   bandera=0;
         }
         }
         printf("\n\n\t\t\tRecuento de vocales\n");
         printf("\nLa a se ha repetido %d veces \n",a);
         printf("\nLa e se ha repetido %d veces \n",e);
         printf("\nLa i se ha repetido %d veces \n",i);
         printf("\nLa o se ha repetido %d veces \n",o);
         printf("\nLa u se ha repetido %d veces \n",u);
    printf("\n\nGracias por utilizar este programa.\n\n");
}
- Programa que calcule la factorial de un numero
void main(){

42
         int i,num,fact=1;
         printf("Bienvenido al programa para calcular factoriales.\n");
                   printf("\nEscriba un numero entero: ");
                   scanf("%d",&num);
                   for(i=num;i>1; i--){
                    fact=fact*i;
                   }
                   printf("\nEl factorial de %d es %d\n",num,fact);
}

- Que pida una letra y detecte si es una vocal.


-
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            char c;
           
            printf("Introduzca un carácter:");
    scanf("%c",&c);
   
    switch (c)
    {
           case 'a':
                printf ("Es vocal\n");
                break;
           case 'e':
                printf ("Es vocal\n");
                break;
           case 'i':
                printf ("Es vocal\n");
                break;
           case 'o':
                printf ("Es vocal\n");
                break;
           case 'u': 
                printf ("Es vocal\n");
                break;             
           default:
                printf ("No es vocal\n");
                break;
    }
   
    system("PAUSE");     
    return 0;
}

- D
- D
- D
-

18. H

https://www.programarya.com/Cursos/C++/Estructuras-de-Datos/Matrices

43
19. H
20. H
21. hF
22. F

44

También podría gustarte