Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Muy bien manos a la obra, veamos algunas cuantas cosas sobre C++ y de
teoría que nunca debería faltar, aunque se que no es lo mas entretenido, pero
hagámoslo por cultura general, nunca se sabe cuando se va a necesitar algún
conocimiento.
Historia de C++
Bueno, te voy a resumir un poco esto, porque como siempre, me podría quedar
escribiendo toda la vida si lo quisiera, pero como no es necesario, resumiré
esto.
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.
1
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.
#include "stdio.h"
int main()
{
printf( "Hola mundo" );
return 0;
}
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++.
2
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.
#include "iostream"
int main()
{
cout << "Hola mundo";
return 0;
}
Estuvo bueno ¿verdad? Bien, ahora eres todo un experto seguidor de C++,
conoces su evolución, creadores y demás detalles, pero aún no sabemos
programar en él, sin embargo ten paciencia, que a eso vamos.
Primero que todo, como aclaración, es bueno decir que existen una enorme
cantidad de entornos de desarrollo para C y C++ conocidos también como IDE.
Aquí solo mencionaré algunos de los quizá más conocidos entornos de
desarrollo y les diré cuál es el mejor IDE, claro, desde mi punto de vista, pues
habrá quienes prefieran otro, eso quedará al gusto de cada uno.
3
desarrolladores de Java, sin embargo también posee una versión para C/C++ y
es bastante buena.
En conclusión, si deseas usar Visual C++ express edition, lo puedes hacer pero
será un poco más molesto a futuro. Desde este momento recomiendo el
entorno de desarrollo Netbeans para C/C++, porque a mi parecer es un IDE
bastante más sencillo y poderoso, tiene una enorme comunidad para soporte
(foros, sitios, documentos, tutoriales, cursos, etc.), es fácil de usar y sobre todo
es gratuito. Para aquellos que no son amantes de los productos de Microsoft
(muchos no lo son jeje) o no usan Windows como sistema operativo, Netbeans
es el entorno de desarrollo apropiado, aunque también son una buena opción
eclipse y Code::Blocks que poseen varias características similares a las de
Netbeans, aunque quizá algunas cosas con respecto a la interfaz cambien un
poco. De todos modos cualquier entorno de desarrollo o IDE que elijas debe
servirte para crear y desarrollar cualquier algoritmo o aplicación escrita en C/C+
+.
Eclipse C++:
Puedes encontrarlo aquí
4
incluido en la suite de Visual Studio. Por supuesto, está orientado a
aplicaciones en Windows y es uno de los más populares por su facilidad de
uso, características y potencia. Posee una completa documentación que
permite conocer a fondo el IDE. Requiere por lo menos Windows 7 y debemos
descargar el paquete completo para poder usarlo y luego crear una cuenta para
descargarlo.
Puedes encontrarlo aquí
Netbeans C/C++:
Code::Blocks:
Puedes encontrarlo aquí
Muy bien, ahora tienes tu herramienta de trabajo, habrás elegido la que más te
haya gustado y la tendrás instalada en tu computador. Si algo sucede, deja tus
problemas y comentarios en la sección de comentarios y descríbe tu problema.
5
sección, y así ayudarías a mejorar el sitio, todas las sugerencias y opiniones
son tenidas en cuenta.
Hecho esto, se nos mostrará una nueva ventana donde podremos seleccionar
el tipo de proyecto a crear, tenemos varias opciones, sin embargo de momento
que estamos aprendiendo, lo más conveniente es crear un proyecto vacio,
6
también allí podremos ingresar todo acerca de nuestro proyecto como: nombre,
ubicación y nombre de la solución. Para este ejemplo, como nombre a nuestro
proyecto, le pondremos Curso Aprender A Programar.
Hecho esto, se nos mostrara una ventana pidiéndonos el tipo de archivo que
vamos a crear, su nombre y ubicación. El tipo será Archivo C++ (.cpp), como
nombre le pondremos también Curso Aprender A Programar y la ubicación la
dejaremos tal y como nos aparece (recomiendo no cambiarla). Nuestra ventana
quedaría similar a la mostrada en la imagen.
#include "iostream"
int main()
7
return 0;
Una vez pegado el código, podremos ejecutar nuestro primer programa en C++
presionando F5. AL ejecutarlo se nos mostrara una ventana negra que es del
símbolo del sistema (DOS o CMD), escribiendo Hola Mundo y una línea más
abajo Press any key to continue. Para salir presionamos cualquier tecla y
nuestro programa finalizará su ejecución.
Muy bien, de momento creo que es todo en este contenido, espero que todo
haya quedado lo más claro posible. De igual forma, te recuerdo que puedes
dejar tu dudas, comentarios, problemas y/o sugerencias en la sección de
comentarios. Si todo ha ido bien y ya dominas perfectamente y sin problemas
la creación y ejecución de proyectos en Visual C++, podremos continuar con la
siguiente sección llamada Librerías en C++.
8
int i=0; //Declaración de variable
Comentarios multi-línea
Muy bien. Esta sección ha sido un poco corta pero sustancial. Ahora ya sabes y
dominas una buena técnica de programación. 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++. No olvides que si tienes alguna
duda, sugerencia y/o comentario sobre este contenido lo puedes publicar en
la sección de comentarios.
int main()
int numero;
numero = 5 + 5;
return 0;
9
}
Nuestro primer código, consta de 7 líneas, las cuales te explicaré una por una a
continuación:
Línea 1:
Línea 2:
La línea 2 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 3:
10
de lo contrario tendrás errores en tu código. Ten en cuenta que la línea 1, 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 al línea 1 (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, mas
adelante lo comprenderás, confía en mi).
Línea 4:
Línea 5:
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 jeje) 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, mas 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 6:
11
La línea 6 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 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 7:
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.
Bueno, estoy seguro de que hasta este punto, ya te has familiarizado un poco
con los tipos de datos primitivos de C++ (int, bool, char, etc) por lo que
deberías estar listo para llevar a cabo las secciones siguientes en las cuales
profundizaremos mucho más acerca de cada uno de estos tipos de datos
primitivos, otros (no tan primitivos jeje) y algunas cosas más. Recuerda que
apenas estamos comenzando con esto, así que con paciencia llegaremos a
dominar bien este lenguaje.
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:
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.
Muy bien, esto ha sido todo en esta sección, ya debes saber que en C++
existen tipos primitivos y tipos de datos complejos que podemos usar por medio
de librerías o bibliotecas que incluimos en nuestros proyectos. Recuerda que si
tienes alguna duda, comentario y/o sugerencia, siempre puedes hacer uso de
la sección de comentarios y allí con gusto estaré al tanto de cualquier
comentario que pongan. El siguiente contenido habla acerca de las Tipos
primitivos en C++ con más detalle (ya lo he mencionado muchas veces :P).
Nos leemos allí.
13
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 modificadores pueden ser: short, long, signed y unsigned, y
pueden combinarse algunos de ellos.
Veamos rápidamente cómo se declaran las variables junto con su tipo de dato
en C++
También, hay algunas palabras que son reservadas del lenguaje, es decir tus
variables no podrán tener estos nombre (no creo que tengas problemas con
esto, especialmente si escribes en español). Las palabras son las siguientes:
14
registe sizeof typedef volatile
r
char do extern if
FechaNacimiento
variable12
nombre_variable
contador
ACUMULADOR
12variable
float
register
variable nueva
nueva-variable
15
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
Muy bien ha sido todo por esta sección espero que todo haya quedado claro
como el agua, no olvides escribirme tus dudas, quejas y reclamos en la sección
de comentarios. Ahora podemos continuar a la sección de Variables y
constantes.
16
y lo tenemos muy fácil, pues su uso es bastante sencillo e intuitivo, tanto para
declararlas como para asignarles valores.
#include <iostream>
int main()
17
numero = 3.5; //Le asignamos un valor al decimal
//3.5 + 8 = 11.5
//11.5 + 5 = 16.5
return 0;
18
Las 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 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 despues de
declarar las librerías y antes de las funciones, la sintaxis es la siguiente:
#define nombre_constante valor. Veamos algunos detalles y luego unos
ejemplos sencillos del uso de las constantes en C++
#include <iostream>
int main()
return 0;
19
}
Notemos que ha sido bastante fácil, sin embargo no todo es bueno. Realmente
al usar la instrucción #define en C++ no estámos creando una constante
realmente, estamos creando una expresión y por tal motivo hay algunas cosas
que se complican, veamos:
#include <iostream>
int main()
return 0;
#include <iostream>
return 0;
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:
#include <iostream>
int main()
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.
if (velocidad == 299792458)
A que diga
if (velocidad == VELOCIDAD_LUZ)
Muy bien eso ha sido todo en esta sección, espero haber sido lo más claro
posible y que se haya entendido a la perfección. No olvides dejar tus
comentarios en la sección de comentarios.
22
Entrada y salida de datos en C++. Uso de cin, cout,
scanf y printf
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++.
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, junto con <<. 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.
#include "iostream"
int main()
23
cout << "Hola Mundo" << " Desde ProgramarYa." <<
"\n";
return 0;
#include "iostream"
#include "string"
24
int main()
int numero = 2;
cout << salida1 << " " << numero << ". " << salida2
<< "\n";
return 0;
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.).
#include "iostream"
25
using namespace std;
int main()
printf("Hola Mundo");
printf("\n");
//Alternativamente
return 0;
Como puedes ver, al ejecutar el código, el resultado sería el mismo del ejemplo
de cout: "Hola Mundo Desde ProgramarYa", con su respectivo salto de línea al
final. Sin embargo, el código es bastante diferente, pues printf no nos permite
concatenar valores directamente en un solo llamado, así que debemos hacer
llamadas sucesivas para imprimir cada parte del mensaje. Por supuesto,
podrías simplemente hacer un solo llamado a printf con el mensaje completo y
sería mucho más sencillo.
#include "iostream"
#include "string"
26
using namespace std;
int main()
return 0;
En este ejemplo usando printf, puedes ver que inicialmente todo es igual, pero
al momento de imprimir, todo cambia. Cuando nec esitas pasar valores a printf,
lo haces con un "%" seguido de una letra. En el caso de un string se usa s (%s)
y en el caso de un número, se usa d (%d). Y luego, se pasa como una serie de
argumentos, cada uno de los valores a usar en ese mismo orden.
Ahora bien, la cosa es aún más compleja en el caso de string, porque printf no
soporta el uso de string, así que debemos pasar es un apuntador a una seria
de char. Por suerte, eso se consigue llamando a la función "c_str()" propia de
string.
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:
27
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).
#include "iostream"
#include "string"
int main()
28
{
return 0;
#include "iostream"
#include "string"
int main()
//Mensaje de bienvenida
29
//Se declaran los números que se sumarán (pueden ser decimales)
cout << "Por favor ingrese el primer valor: " << "\n";
cout << "Por favor ingrese el segundo valor: " << "\n";
cout << numero1 << " + " << numero2 << " = " << numero1 + numero2;
return 0;
Acá tienes un caso similar al anterior, pero en esta ocasión se están solicitando
números y luego realizando operaciones matemáticas con ellos.
Vamos ahora a hablar un poco del uso de scanf para leer valores y algunas
dificultades que esto presenta.
El operador scanf al igual que printf fueron ideados para el lenguaje C (no para
C++), por lo cual su uso es más primitivo y, en cierto modo, complejo. Leer
datos con scanf implica comprender un poco el concepto de punteros y
particularmente en el caso de string (que es una librería de C++) se complica
aún más, pues debemos convertir ese string en un array definido de caracteres
(char).
30
Vamos a ver un único ejemplo sobre el uso de scanf y string en C++ para
quedar claros acerca de estas dificultades
#include "string"
int main()
char temporal[100];
printf("Tu nombre?\n");
scanf("%100s", temporal);
return 0;
Como puedes ver, necesitamos seguir usando la sintaxis tipo "%s" para leer
una serie de caracteres, pero en esta ocasión debimos además especificar el
tamaño del mismo (100). Adicionalmente, en los siguientes argumentos de
scanf, pasamos entonces el nombre de la variable a la cual asignar el valor
ingresado por el usuario
31
El código funciona y te permitirá entonces leer valores por medio de scanf y
asignarlos a una variable. Esto funciona muy bien con números, pero con string
o básicamente en este caso un array de caracteres, debemos lidiar con
tamaños constantes (como el 100 que tenemos allí).
Muy bien eso ha sido todo en este contenido. Espero que te haya sido de
muchísima utilidad. Si has comprendido todo a la perfección y no tienes
problemas ni dudas, puedes continuar con la sección de Condicionales en C++
o si ya sabes condicionales puedes seguir con Ciclos en C++. Por otro lado si
tienes algún problema, duda, comentario y/o sugerencia la atenderé con gusto
si la publicas en la sección de comentarios. Nos leemos.
32
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++
Nota: Al final de cada contenido de esta sección, incluiré varios videos en los
que mostraré algunos ejemplos de aplicación de los conceptos que se
expliquen en cada componente, recuerda también dejar tus comentarios al
finalizar cada contenido para seguir enriqueciendo cada uno de estos con los
aportes particulares de todos.
Muy bien, ahora que sabemos un poco acerca de las estructuras de control
condicionales (o simplemente condicionales jeje) y que además sabemos que
existen varios tipos de estos, podemos comenzar a aprender y dominar cada
uno de estos tipos de condicionales en C++, vamos a hacerlo en orden, para
no enredarnos, así que vamos a la sección de Condicional if en C++, recuerda
también que al igual que en todas las secciones de este sitio, en esta también
puedes dejar tus comentarios, ayudando así a la permanente evolución de la
pagina.
33
cualquiera es mayor que 10 y de acuerdo a esto mostrar un mensaje (o
cualquier acción que sea necesaria).
Básicamente, un condicional if, es una estructura que nos posibilita definir las
acciones a ejecutar si se cumple cierta condición y de ese modo modificar la
ejecución de tareas en un programa según se necesite.
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.
....
....
....
....
34
....
....
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:
Línea 2:
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.
35
No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy
seguro que con un par de ejemplos que veremos a continuación, te va a quedar
todo claro
Solución Ejemplo 1:
int resultado = 0;
if(resultado == 39+50)
#include "iostream"
36
int main()
int resultado = 0;
if(resultado == 39+50)
system("PAUSE");
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 que acciones tomar dada o no cierta condición, por ejemplo
determinar si la contraseña ingresada por el usuario es válida o no y de
acuerdo a esto darle acceso al sistema o mostrar un mensaje de error.
37
Se les conoce también como estructuras selectivas de casos dobles (porque
definen ambas posibilidades en la ejecución --si se cumple y si no se cumple
--).
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.
....
....
....
38
....
else
....
....
....
....
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:
Línea 2:
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 condiconal... y así
sucesivamente jejeje.
39
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.
Solución Ejemplo 1:
40
if(password == "myClave")
else
#include "iostream"
#include "string"
#include "stdlib.h"
41
using namespace std;
int main()
if(password == "myClave")
else
system("PAUSE");
return 0;
42
Muy bien. De momento es todo en esta sección, podemos entonces continuar
ahora con el siguiente contenido que son los condicionales Switch, recuerda
también dejar tus comentarios y/o preguntas en la sección de comentarios.
Espero que haya sido un tanto claro con esto, si no es así, recuerda que
puedes preguntar en la sección de comentarios y con gusto te voy a responder
o incluso modificar esta sección para responder tu cuestión, de igual forma,
vamos a ver ya mismo unos ejemplos para entender mucho mejor de lo que he
estado hablando.
43
switch(opción) //donde opción es la variable a comparar
break;
break;
break;
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:
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:
44
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:
Línea 5 a 8
Líneas 9, 10 y 12
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.
45
Ejemplos de Condicional Switch en C++
Solución Ejemplo 1:
int opcion = 0;
switch(opcion)
46
case 1: cout << "Usted ha seleccionado la opción 1";
break;
break;
break;
# include "iostream"
47
int main()
int opcion = 0;
switch(opcion)
break;
break;
break;
return 0;
48
Ejemplo 2: Menú de opciones en C++, usando char
char opcion;
switch(opcion)
break;
break;
break;
# include "iostream"
49
int main()
char opcion;
switch(opcion)
break;
break;
break;
return 0;
Eso es todo. Como ves, en esencia es el mismo código, pero debes asegurarte
de poner las diferentes opciones entre comillas simples ('), puesto que la
comparación es entre caracteres.
50
Detalles sobre el condicional switch en C++
En C++, NO puedes usar otra cosa diferente a número en cada case. Si
necesitas comparar cadenas de texto u otros tipos de datos, seguramente un
condicional como el if o if-else sean una mejor alternativa
Los caracteres también se pueden usar, pues en esencia se pueden
representar como números enteros (el lenguaje se encarga de eso por ti). Sin
embargo, como indiqué, otros tipos de datos no son recomendables
La sentencia default es opcional, así que si no lo deseas no la debes
poner. Sin embargo, es recomendable hacerlo, para así controlar todas las
opciones posibles y que tu programa no quede a la "suerte" en ciertos casos.
Dentro de cada case eres libre de poner varias líneas de código, incluso
otras estructuras como condicionales o ciclos. Sin embargo, es preferible
mantener tu código ordenado y no poner muchas. Recomendaría no poner más
de 5 y preferiblemente solo una. Si deseas hacer tareas complejas al interior de
un case de un switch en C++, posiblemente sea mejor hacer esas tareas en
una función y llamar a esa función desde el case o simplemente usar un if-else.
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
51
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++:
Nota: Al final de cada contenido de esta sección, incluiré varios videos en los
que mostraré algunos ejemplos de aplicación de los conceptos que se
expliquen en cada componente, recuerda también dejar tus comentarios al
finalizar cada contenido para seguir enriqueciendo cada uno de estos con los
aportes particulares de todos.
Muy bien, ahora que sabemos un poco acerca de las estructuras de control
cíclicas (o simplemente ciclos jeje) 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 (o en español ciclo para), recuerda también que al igual que en todas las
secciones de este sitio, en esta también puedes dejar tus comentarios,
ayudando así a la permanente evolución de la pagina
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,
52
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.
Vamos a ver ahora como es la sintaxis de un ciclo for en C++, así estaremos
listos para usarlos en nuestros programas de ahora en adelante
....
....
Bloque de Instrucciones....
....
....
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.
53
Línea 1:
Línea 2:
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.
54
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
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, teniendo estos 3 componentes identificados, estamos listos
para crear nuestro ciclo for así:
for(int i=50;i<=100;i+=2)
#include "iostream"
#include "stdlib.h"
int main()
for(int i=50;i<=100;i+=2)
55
{//Notemos que escribir i+=2 es similar a escribir i
= i + 2
system("PAUSE");
return 0;
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í:
56
#include "iostream"
#include "stdlib.h"
int main()
system("PAUSE");
return 0;
Este código del ejemplo dos imprimirá por pantalla la serie numérica
10987654321
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í:
57
for(int i = 0; i < 10000; i++)
58
#include "iostream"
#include "stdlib.h"
int main()
system("PAUSE");
return 0;
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.
59
Evidentemente habrá situaciones en las que será casi que imprescindible usar
el ciclo for, pues por algo existen. Está entonces en nuestra habilidad
determinar cuándo usarlos y mejor aún cómo usarlos de manera efectiva.
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 cuando 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.
Vamos a ver ahora como es la sintaxis de un ciclo while en C++, así estaremos
listos para usarlos en nuestros programas de ahora en adelante cada vez que
lo necesitemos
60
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 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.
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:
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.
61
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.
Ejemplo 1: Pedir números por pantalla hasta que alguno sea mayor a 100
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
int numero;
cin >> numero;
while(numero <= 100)
{
cout << "Ingrese un numero ";
cin >> numero;
}
62
#include "iostream"
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 aun como usarlos de manera efectiva.
63
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
cuando 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 especificas. 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 especifica, sino evaluándola justo después de ejecutar por
primera vez el bloque de instrucciones
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.
do
{
64
....
....
Bloque de Instrucciones....
....
....
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.
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
65
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:
Ejemplo 1: Pedir números por pantalla hasta que alguno sea mayor a 100
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 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
int numero;
do
66
{
#include "iostream"
int main()
int numero;
do
system("PAUSE");
return 0;
67
repetidas donde se 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.
Cuando vemos por primera vez el ciclo do-while, se nos viene de inmediato la
pregunta de cuál es la diferencia entre un do-while y un while. Y no quedamos
muy seguros de poder saber cuándo usar uno u otro, así que aquí te explico.
68
#include "iostream"
int main()
int opcion = 0;
do
while(opcion != 0);
system("PAUSE");
return 0;
69
Implementando el ejemplo del menú de opciones con un ciclo while (no
recomendado)
#include "iostream"
int main()
while(opcion != 0)
system("PAUSE");
return 0;
En este caso, vemos que, por supuesto, con el ciclo while también podemos
conseguir lo mismo, PERO modificando algunas cosas con relación a la opción.
En general, el mayor aspecto negativo de usar un while en este caso, en lugar
70
de un do-while, es que ya hemos evaluado la opción sin siquiera habérsela
solicitado al usuario por primera vez, lo cual nos obliga a darle un valor inicial a
la variable "opcion" (un -1), para asegurarnos de que el ciclo se ejecute al
menos una vez y el usuario tenga la opción de ver el menú e ingresar la acción
que desea ejecutar.
Muy bien, con eso deberíamos tener un caso claro en el que es mejor usar un
do-while que un while en C++. Veamos ahora algunas conclusiones.
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 aun como usarlos de manera
efectiva.
Finalmente, tener claro, tal como se mostró en este artículo, cuándo usar un
do-while en lugar de cualquier otro ciclo de C++.
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.
71
Hechas las aclaraciones previas en cuanto a rendimiento y definición vamos a
ver unos ejemplos y el código básico de ciclos anidados en C++.
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í...
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.
72
}
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.
while(condición)
{
/*
Bloque de Instrucciones....
*/
73
Ejemplo de ciclos anidados en C++
Como quizá habrás adelantado en este primer ejemplo vamos a llenar una
matriz de 10x10 (diez filas y diez columnas) con los número del 1 al 100 (1x1
hasta 10x10).
#include "iostream"
using namespace std;
int main()
{
int matriz[10][10];
system("pause");
return 0;
}
74
Segundo ejemplo de ciclos anidados en C++
#include "iostream"
using namespace std;
int main()
{
//Suponiendo que tenemos una matríz llena llamada
matrix
for(int i = 0; i < 10; i++)//Ciclo externo
{
//Recuerda: En ciclo interno no usamos la
variable 'i' sino 'j'
for(int j = 0; j < 10; j++)//Ciclo interno
{
//Mostramos por pantalla el valor de la fila
i columna j
cout << matriz[i][j] << "\n";
}
}
system("pause");
return 0;
}
Ten en cuenta que este ejemplo no funcionaría por sí solo, puesto que estamos
recorriendo una matriz que ya está llena (como lo hicimos en el primer
ejemplo). El código completo funcional, donde llenamos y luego mostramos la
matriz, sería el siguiente:
75
Ejemplo completo y funcional
Vamos entonces a juntar ambos códigos para realizar ambas tareas (recorrer y
mostrar la matriz) usando ciclos anidados.
#include "iostream"
using namespace std;
int main()
{
int matriz[10][10];
system("pause");
return 0;
}
76
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.
Ahora... es todo en esta sección :), podemos entonces continuar ahora con el
siguiente contenido que son las estructuras de datos en C++, recuerda también
dejar tus comentarios y/o preguntas en la sección de comentarios
77
Arrays, arreglos o vectores en C++. Uso, declaración y
sintaxis de los vectores en C++
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 valores anteriores y
habremos perdido la información del primero, de manera que esta solución no
es válida.
¡Pues bien!, tal y como mencioné antes, los arrays o los vectores han venido
para ayudarnos en múltiples circunstancia 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 validas y vamos a ver ambas, usando vectores en esta sección
y usando matrices en la sección de matrices.
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.
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úmero enteros, o numero 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
79
ejemplo en el cual pondré la declaración de varios vectores de diferentes tipos
y tamaños en C++.
int my_vector1[10];
float my_vector2[25];
string my_vector3[500];
bool my_vector4[1000];
char my_vector5[2];
Línea 1
Línea 2
Línea 3
Línea 4
Línea 5
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.
80
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.
int vector2[3];
vector2[3] = {1,5,10};
81
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í:
int vector2[3];
vector2[0] = 1;
vector2[1] = 3;
vector2[2] = 10;
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
82
corremos 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:
#include "iostream"
83
int main()
cout<<edades[i]<<endl;
Vamos a ver de forma resumida en qué consiste y que hace cada una de estas
líneas
Línea 1:
Línea 2:
Línea 3 a 6:
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
84
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 esta
cambiando a medida que el ciclo va girando, así estaremos accediendo a todos
los elementos e imprimiéndolos por pantalla
#include "iostream"
int main()
char titulos[5];
char autores[5];
Estoy seguro de que a estas alturas comprendes bien qué hace cada una de
estas líneas.
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.
Nota: Recuerda que si no tienes clara alguna cosa, detectas algún error, tienes
alguna sugerencia o simplemente tienes algo que comentarme, puedes hacerlo
con total tranquilidad en la sección de comentarios.
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:
#include "iostream"
#include "string"
int main()
string titulos[5];
string autores[5];
86
cout << "Por favor ingrese la siguiente información
de los Libros: \n";
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
87
#include "iostream"
#include "string"
int main()
string titulos[5];
string autores[5];
getline(cin, titulos[i]);
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++.
Las matrices o como algunos las llaman "arreglos multidimensionales" son una
estructura de datos bastante similar a los vectores o arreglos. De hecho, una
matriz no es más que una serie de vectores contenidos uno en el otro (u otros),
es decir, una matriz es un vector cuyas posiciones son otros vectores.
Hablemos con más detalle de esto para quedar más claros.
Primero, dejemos claro qué es una matriz. En términos generales, una matriz
es una estructura conformada por filas y columnas, idealmente más de dos filas
y columnas, de hecho, podemos decir que si una "matriz" tiene una única fila o
una única columna, entonces estamos hablando de un vector y no una matriz
como tal.
La intersección de una fila y una columna de la matriz son las casillas y cada
una de ellas podrá poseer información, simple o compleja (ya dependerá de
nuestras necesidades).
89
Ahora, tal como dije antes, un vector posee una única fila (o columna, como lo
quieras ver) y de este modo un grupo de vectores unidos conforman una
matriz, es por esto que al comienzo dije que una matriz es un vector
conformado por otra serie de vectores.
tipoDato nombreMatriz[filas][columnas];
Tenemos entonces, como podrás ver, que la sintaxis es casi la misma excepto
que hemos añadido un par de corchetes "[]" más esta vez y al interior de éstos
debemos poner el número de filas y columnas máximas de la matriz,
respectivamente. Veamos un ejemplo en el cual pondré la declaración de
varias matrices de diferentes tipos y tamaños en C++.
Línea 1
Esta línea contiene la declaración de una matriz llamada myMatriz1 que tendrá
10 filas y 5 columnas y cada una de las 50 casillas tendrá datos de tipo entero.
Línea 2
Esta línea contiene la declaración de una matriz llamada myMatriz2 que tendrá
5 filas y 10 columnas y cada una de las 50 casillas tendrá datos de tipo flotante.
Línea 3
Esta línea contiene la declaración de una matriz llamada myMatriz3 que tendrá
15 filas y 15 columnas (una matriz cuadrada) y cada una de las 225 casillas
tendrá datos de tipo string.
Línea 4
Esta línea contiene la declaración de una matriz llamada myMatriz4 que tendrá
1000 filas (sí, leíste bien) y 3 columnas y cada una de las 3000 casillas
(también leíste bien, tres mil casillas) tendrá datos de tipo booleano.
Ya que está claro cómo se declara una matriz, vamos a inicializarla, es decir
darle un valor a cada casilla, según su tipo de dato.
91
Aquí hemos declarado una matriz de tipo int de dos filas y dos columnas y la
hemos inicializado con diferentes valores. El valor inicial corresponde a la
casilla 0,0 (fila cero, columna cero) y tiene el valor de 1, en la fila cero columna
uno tenemos el valor de 2, en la fila uno columna cero el valor de 3 y finalmente
en la fila uno columna uno el valor de 4. Es importante notar que el primer tanto
la fila como la columna comienzan desde cero y no desde uno, por esto la
primer casilla corresponde a la fila y columna cero.
¡Bien! Ya sabemos cómo declarar una matriz en C++, sin embargo, aún no
sabemos cómo acceder a los datos que estas contienen. Veámoslo:
Para obtener todos los datos que se encuentran al interior de una matriz,
debemos acceder a cada posición y esto se hace fácilmente con dos ciclos for
(anidados). La lógica de este procedimiento es la siguiente, el primer ciclo for
comenzará desde cero e ira hasta el número de filas, 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 fila y el segundo ciclo irá de
cero al número de columnas y normalmente se usa la variable llamada j para
acceder a cada columna, veamos:
92
#include <iostream>
int main()
{
int edades[3][2] = {{1,2},{9,8},{14,21}};
int filas = (sizeof(edades)/sizeof(edades[0]));
int columnas = (sizeof(edades[0])/sizeof(edades[0]
[0]));
for (int i = 0; i < filas; i++)
{
for (int j = 0; j < columnas; j++)
{
cout<<edades[i][j]<<endl;
}
}
}
Vamos a ver de forma resumida en qué consiste y que hace cada una de estas
líneas
Línea 1:
Líneas 2 y 3:
Líneas 4 a 7:
Línea 8:
La octava 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 una de las casillas de la
matriz, fila por fila y columna por columna. Accedemos a cada elemento
poniendo entre los corchetes la variable i y j, que son las que están cambiando
93
a medida que los ciclos van "girando", así estaremos accediendo a todos los
elementos e imprimiéndolos por pantalla por medio de cout.
#include "iostream"
#include "stdio.h"
#include "string"
int main()
{
string libros[5][2];
cout << "Por favor ingrese la siguiente información
de los Libros: \n";
string titulo ,autor;
for(int i = 0; i < 5; i++)
{
cout << "\n******* Libro " << i + 1 <<
"********:\n";
cout << "Titulo: ";
getline(cin,titulo);
cout << "Autor: ";
getline(cin,autor);
libros[i][0] = titulo;
libros[i][1] = autor;
}
system("pause");
return 0;
}
94
Notar que en el código anterior, debido a que tenemos la completa certeza de
sólo usar dos columnas, no es necesario usar otro ciclo for (de hecho, eso
complicaría todo) basta con poner de manera explícita que el valor del título va
en la columna cero y el del autor en la columna uno.
En este caso tenemos una matriz con una cantidad de fila que dependen de la
cantidad de libros y dos columnas. Para el ejemplo, decidimos tener 5 posibles
libros. Donde cada uno tendrá su respectivo título y autor. Así entonces, en la
columna cero (0) iría el titulo y en la columna uno (1) el autor.
Por cada libro que queremos agregar, debemos especificar su título y su autor.
Por ello, la segunda posición que se specifica en esta matriz de libros siempre
será 0 o 1, según sea el caso. Mientras que en la primera posición usamos la
variable i del ciclo, que va a variar de 0 a 4, para un total de cinco libros.
Pues bien, creo que es todo en esta sección, 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 podemos aprender acerca
de Funciones en C++, nos leemos allí.
Los punteros en C++ (o apuntadores) son quizá uno de los temas que más
confusión causan al momento de aprender a programar en C++, sin embargo
verás que no es para tanto y que todo depende de dos elementos: el
signo & (ampersand) y el * (asterisco) que los explicaré en breve. Durante este
artículo verás entonces que no es para nada difícil hacer y usar punteros y que
además son de gran ayuda al momento de necesitar valores y estructuras
dinámicas, por ejemplo, para crear un array dinámico, con dinámico me refiero
a que su tamaño puede ser establecido en tiempo de ejecución y lo mismo se
puede hacer con las matrices (que en realidad son un array multidimensional).
Ejemplo de punteros
95
int variable; //Creamos un entero
puntero = NULL;
Muy bien, ya hemos creado y usado nuestro primer puntero ¿Notaste el uso
del asterisco y del ampersand? espero que sí y además de eso hay otros
detalles que debemos considerar, veamos:
96
El asterisco es, por decirlo de alguna forma, el operador por excelencia de los
punteros. SU utilidad radica en que si el valor de dicho apuntador corresponde
a una dirección de memoria, el asterisco nos permite resolverla y acceder al
valor almacenado allí. Viéndolo desde otro enfoque, un apuntador es
únicamente una dirección de memoria (un número) y el asterisco es el que
hace la magia de obtener el valor referenciado por dicha dirección.
Ejemplo de apuntadores
En este ejemplo vemos que podemos usar cualquier tipo de dato, que un
puntero se puede inicializar independientemente y luego se le puede asignar su
referencia correspondiente. Nótese que al asignar (línea 6) no utilizamos el
asterisco, pues estamos definiendo la dirección de memoria y no el valor en
dicha dirección (recuerda que el * resuelve la dirección de memoria y no es lo
que requerimos en esa línea).
Ahora que hemos visto los ejemplos y tenemos claro el uso del ampersand y
el asterisco podemos entonces realizar algunos ejercicios interesantes.
#include "iostream"
97
#include "stdio.h"
return valor;
return *valor;
int main()
cout << "Antes de funcion " << numero << "\n"; //10
98
cout << "Despues de funcion " << numero << "\n"; //10
system("pause");
return 0;
Array dinámico
99
#include "iostream"
#include "stdio.h"
#include "string"
int main()
string entrada;
getline(cin, titulos[i]);
getline(cin, autores[i]);
delete [] titulos;
delete [] autores;
titulos = NULL;
autores = NULL;
system("pause");
101
return 0;
Así entonces tuvimos dos punteros, uno para todos los autores y otro para
todos los títulos. Haciendo uso de ellos pudimos definir la cantidad de libros a
ingresar por medio del usuario, es decir lo hicimos de manera dinámica, en
tiempo de ejecución.
Matrices dinámicas
Así como lo hicimos con los array, también podemos tener matrices dinámicas
y definir su tamaño, número de filas o número de columnas (o las dos) según
sea necesario.
Para esto tomaré el mismo ejemplo de los libros, pero usando una matriz, en
vez de dos vectores, tal y como se solucionó en la sección
de matrices veamos:
#include "iostream"
#include "stdio.h"
#include "string"
int main()
102
int tamanio ; //Se inicializa la variable
string entrada;
103
getline(cin,titulo);
getline(cin,autor);
libros[i][0] = titulo;
libros[i][1] = autor;
delete [] libros;
system("pause");
return 0;
104
Debido a que la cantidad de columnas es fija, no se lo pedimos al usuario,
simplemente lo declaramos con valor dos. Luego tenemos el puntero, pero no
es un puntero cualquiera, al ser una matriz, será un puntero que tendrá otros
punteros adentro, por eso se usa doble asterisco, luego se obtiene el tamaño
del usuario (cantidad de libros) y al momento de inicializar la fila estamos
indicando que es un arreglo de punteros, por eso se usa el * en la línea 23.
Luego al interior del ciclo, cuando estamos llenando la matriz, debemos indicar
que cada fila estará compuesta por un array de punteros de tamaño dos (dos
columnas) y así construimos nuestra matriz dinámica.
Muy bien, es todo en esta función. Espero haber sido muy claro y que los
ejemplos y ejercicios te hayan servido de mucho. En este momento ya debes
saber qué es y cómo hacer un puntero en C++, para qué sirve el ampersand y
el asterisco cuando estamos hablando de apuntadores en C++ y cómo crear
arrays dinámicos y matrices usándolos. No te olvides de dejar un comentario.
Ahora podemos aprender acerca de Funciones en C++, nos leemos allí.
Las bibliotecas están clasificadas por el tipo de trabajos que hacen, hay
bibliotecas de entrada y salida, matemáticas, de manejo de memoria, de
manejo de textos y como imaginarás existen muchísimas librerías disponibles y
todas con una función especifica.
105
ANSI o estándar. También hay librerías que no son parte del estándar pero en
esta sección sólo usaremos algunas bibliotecas (o librerías) ANSI.
Nota 2: Sé que esto pinta aburrido, pero es muy útil y las librerías nos facilitan
enormemente el trabajo a la hora de programar. Recuerda que antes de hablar
librerías y demás es necesario dominar algunos conceptos
de fundamentación en general y otros temas importantes
(ciclos, condicionales y demás) Ahora veamos algunas librerías y como es su
sintaxis.
Las librerías no son únicamente archivos externos creados por otros, también
es posible crear nuestras propias librerías y utilizarlas en nuestros programas.
Las librerías pueden tener varias extensiones diferentes, las más comunes son:
.lib, .bpl, .a, .dll, .h y algunas más ya no tan comunes.
En conclusión: Las librearías son archivos (no siempre externos) que nos
permiten llevar a cabo diferentes tareas sin necesidad de preocuparnos por
cómo se hacen sino simplemente entender cómo usarlas. Las librearías en C++
permiten hacer nuestros programas más modulares y reutilizables, facilitando
además crear programas con funcionalidades bastante complejas en unas
pocas líneas de código.
106
Librerías Estandar de C++ (Standar Template Library o STL)
107
Veamos a continuación como se haría la declaración de unas cuantas librerías
conocidas, recuerda que ese pueden declarar todas las librerías necesarias y
siempre debe hacerse al comienzo del código fuente
#include "iostream"
#include "string"
#include <math.h>
#include <conio.h>
Con esto debió quedar claro, como declarar librerías C++ al interior de un
código fuente. Lo único adicional, es la línea que dice using namespace
std; esta línea nos ayuda a declarar un espacio de nombre que evita tener que
usarlo cada que accedemos a alguna función especifica de una librería.
Teniendo este namespace declarado podemos llamar por ejemplo el comando
cout >>, que pertenece a la librería iostream, sin embargo sin este namespace
sería std::cout >>, imagina tener que hacer esto cada vez que uses algún
comando o función de las librerías, sería bastante tedioso.
Todas las librerías estándar de C++ contienen una declaración del espacio de
nombre std, es decir que todas las librerías que hacen parte del estándar de C+
+ colocan entidades dentro de este espacio de nombre.
Por esta razón cuando declaramos el uso del espacio de nombre std por medio
de "using namespace std;", podemos evitar estar escribiendo std::cout o
std::cin, etc en nuestro código.
Muy bien, ahora veamos algunos ejemplos simples del uso de librerías o
bibliotecas en C++
108
Ejemplo 1 de librerías en C++
#include <stdlib.h>
#include <iostream>
int main ()
return 0;
#include <string.h>
#include <iostream>
109
using namespace std;
int main ()
return 0;
En este ejemplo usaremos la biblioteca vector, iterator y list, para crear un lista
doblemente enlazada, agregar algunos elementos en ella (incluido un vector) y
recorrerla.
#include <iostream>
#include <list>
#include <vector>
110
using namespace std;
int main ()
list<int>::iterator it;
miLista.push_back(i);
miLista.insert (it,11);
miLista.insert (it,3,18);
//10 11 18 18 18 20 30 40 50
111
//Creamos un vector que poseerá dos elementos con
valor de 19
miLista.insert (it,myvector.begin(),myvector.end());
//10 11 18 18 18 19 19 20 30 40 50
cout << ' ' << *it; //Se muestra el valor al cual
está aùntando el iterador
return 0;
112
Muy bien. He añadido este par de ejemplo a petición de algunos visitantes del
sitio y creo que sí eran muy necesarios, espero que con esto hayas clarificado
dudas y afianzado el concepto.
Funciones:
113
operaciones y adicionalmente retornan un valor. Esta definición proviene de la
definición de función matemática la cual posee un dominio y un rango, es decir
un conjunto de valores que puede tomar y un conjunto de valores que puede
retornar luego de cualquier operación.
Métodos:
Procedimientos:
return valor;
}
Recordemos que una función siempre retorna algo, por lo tanto es obligatorio
declararle un tipo (el primer componente de la sintaxis anterior), luego debemos
darle un nombre a dicha función, para poder identificarla y llamarla durante la
ejecución, después al interior de paréntesis, podemos poner los argumentos o
parámetros. Luego de la definición de la "firma" de la función, se define su
funcionamiento entre llaves; todo lo que esté dentro de las llaves es parte del
cuerpo de la función y éste se ejecuta hasta llegar a la instrucción return.
114
1. Una función o procedimiento pueden tener una cantidad cualquier de
parámetros, es decir pueden tener cero, uno, tres, diez, cien o más
parámetros. Aunque habitualmente no suelen tener más de 4 o 5.
2. Si una función tiene más de un parámetro cada uno de ellos debe ir
separado por una coma.
3. Los argumentos de una función también tienen un tipo y un nombre que
los identifica. El tipo del argumento puede ser cualquiera y no tiene
relación con el tipo de la función.
Ejemplos de funciones
Ejemplo 1:
Ejemplo 2:
Ejemplo 3:
Aquí ya tenemos una función que recibe dos parámetros, uno de ellos es usado
en el condicional y el otro para mostrar su valor por pantalla con cout, esta vez
retornamos valores booleanos 0 y 1, pudo ser true o false también.
Ejemplo de procedimientos
116
return;
}
cout << "adios" << nombre;
}
De este ejemplo podemos ver que ya no se usa un tipo sino que se pone void,
indicando que no retorna valores, también podemos ver que un procedimiento
también puede recibir parámetros o argumentos.
Ya hemos visto cómo se crean y cómo se ejecutan las funciones en C++, ahora
veamos cómo hacemos uso de ellas.
nombreFuncion([valor,[valor]...]);
Como puedes notar es bastante sencillo invocar o llamar funciones en C++ (de
hecho en cualquier lenguaje actual), sólo necesitas el nombre de la función y
enviarle el valor de los parámetros. Hay que hacer algunas salvedades
respecto a esto.
int main()
{
117
funcionEntera(); //Llamando a una función sin
argumentos
return 0;
}
En el código anterior podemos ver cómo todas las funciones han sido
invocadas al interior de la función main (la función principal), esto nos
demuestra que podemos hacer uso de funciones al interior de otras. También
vemos cómo se asigna el valor retornado por la función a la variable 'respuesta'
y finalmente, antes del return, vemos cómo hemos usado el valor retornado por
'funcionBool' como parámetro del procedimiento.
Muy bien, eso ha sido todo en esta sección. No te olvides de ver las demás
secciones del curso y mejorar tus conocimientos. También puedes dejar tus
comentarios y con gusto te responderé.
118