Está en la página 1de 17

Curso rpido de C++

Este curso explica de manera rpida y sencilla la sintaxis bsica del lenguaje de programacin C++. En ningn momento pretende ser un curso de programacin. Por el contrario, se supone que quien lo lea ya tiene conocimiento de programacin sea en otro lenguaje en particular o de manera abstracta.

Introduccin
C++ es un lenguaje de programacin diseado a mediados de los aos 1980 por Bjarne Stroustrup. La intencin de su creacin fue el extender al exitoso lenguaje de programacin C con mecanismos que permitan la manipulacin de objetos. El nombre C++ fue propuesto por Rick Mascitti en el ao 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio cientfico. Antes se haba usado el nombre "C con clases". En C++, la expresin "C++" significa "incremento de C" y se refiere a que C++ es una extensin de C. (Fuente: Wikipedia).

Sintaxis bsica de un programa


Lo mnimo que debe tener todo programa en C++ es: int main() { //Este programa no hace nada return 0; } Este cdigo define una funcin llamada main (programa principal) que no recibe argumentos y no hace nada. Las llaves {} especifican un agrupamiento. En este caso especifican donde comienza y donde termina el main. El doble slash // sirve definir que de all en adelante y hasta el final de la lnea hay un comentario. Los comentarios son ignorados por el compilador y tienen fines netamente explicativos. El valor numrico despus del return corresponde por el devuelto por el programa al sistema operativo (Windows, Linux, etc.) y generalmente sirve para indicar el resultado de la finalizacin del programa. Generalmente un valor diferente de cero indica una finalizacin fallada, sin embargo no todos los sistemas operativos o entornos de programacin hacen uso de ese valor. Los sistemas basados en Unix normalmente lo utilizan, mientras que los basados en Windows no. Por ejemplo, al utilizar el entorno de programacin code::blocks dentro de Windows, se puede omitir esa lnea sin ningn problema (el entorno automticamente asume que el estado de finalizacin del programa fue un 0, es decir, una finalizacin exitosa). El cdigo anterior, como se mencion anteriormente, es lo mnimo que debe tener un programa en C++. Pero vimos que el return puede omitirse y obviamente los comentarios son opcionales, es decir el cdigo mnimo, mnimo sera:
Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


int main(){ } Sin embargo, para efectos prcticos podemos decir que la mayora de los programas van a utilizar instrucciones de entrada y salida de datos (lectura de valores e impresin de resultados por pantalla) por lo que nuestro cdigo mnimo y que nos servir de partida de ahora en adelante es: #include <iostream> using namespace std; int main() { //Este programa no hace nada } La lnea #include <iostream> le dice al compilador que el programa utilizar funciones de la librera estndar iostream, que es precisamente la que se encarga de las operaciones de entrada y salida de datos. Por su parte la lnea using namespace std; le dice al compilador que se utilizarn funciones especficas (como cout para imprimir por pantalla) localizadas en el standard-library namespace, abreviada como std. Si lo anterior suena confuso, tranquilo(a), el siguiente ejemplo aclarar un poco la situacin. #include <iostream> using namespace std; int main() { cout << "Hola mundo"; } Lo que se encuentra en rojo es precisamente lo que dijimos que es obligatorio para todo programa en C++ que tenga entrada y/o salida de datos (prcticamente todos) mediante las funciones cin y cout que se detallarn ms adelante. Por su parte lo que se encuentra en azul es el cuerpo del programa, es decir, el conjunto de instrucciones que le permiten cumplir con su objetivo. En este caso se trata del ejemplo tpico de escribir el mensaje Hola mundo
Atencin: lo ms recomendable para aprender, es ir ensayando lo que explica este curso en algn entorno de programacin. Cualquiera de los de la lista presentada en clase sirve. Sin embargo ten en cuenta que aunque todos comparten las libreras estndar, cada entorno puede tener sus propias libreras extras . En otras palabras, es posible que la sintaxis entre diferentes entornos vare levemente. Por eso en caso de errores consulta si el entorno que ests utilizando tiene alguna particularidad. Los ejemplos presentados en este tutorial han sido probados en el entorno code:blocks. Un breve video tutorial de cmo crear un proyecto de C++ en este entorno, as como un programa similar al hola mundo se puede encontrar en: http://www.youtube.com/watch?v=ffLsYmeL2KE

Entrada y salida de datos

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


Como ya vimos en el ejemplo anterior, una funcin que podemos emplear para imprimir datos por pantalla es cout. Su sintaxis es bastante simple, comienza por cout seguida por << seguida por lo que queremos imprimir y se finaliza con punto y coma ; Si lo que queremos imprimir es un mensaje (un texto literal), como en el ejemplo del Hola mundo, debemos encerrar dicho mensaje entre comillas dobles . En cambio, si lo que queremos imprimir es el valor de una variable simplemente despus del << se coloca la variable. Miremos el siguiente ejemplo: #include <iostream> using namespace std; int main() { int a; a = 3; cout << "Hola\n"; cout << a; } En este caso lo que imprime el programa es:

Notemos que la instruccin cout << "Hola\n"; hace lo que esperamos: imprimir Hola en la pantalla. Notemos adems que al agregar \n lo que hacemos es imprimir un salto de lnea, es decir, dejamos un rengln para lo siguiente que se imprima. Notemos tambin (en los ejemplos anteriores tambin estaba pero no se haba mencionado) que siempre que usamos un cout debemos finalizar con punto y coma. De hecho como podemos ver casi todo termina con punto y coma (a lo largo del curso discerniremos que debe hacerlo y que no). Por su parte la instruccin cout << a imprime el valor de la variable a, es decir 3 (en la seccin siguiente veremos cules son los tipos de variables de C++ y como se declaran). Una caracterstica importante del cout es que permite imprimir ms de una cosa, en vez de utilizar un cout diferente cada vez. Miremos una modificacin del ejemplo anterior para aclarar esto:

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


#include <iostream> using namespace std; int main() { int a; a = 3; cout << "Hola\n" << "El valor de a es: " << a; } Cuyo resultado al ejecutarlo es:

Notemos que basta con adicionar un << dentro del cout por cada cosa que queramos imprimir, sea un texto literal (un mensaje) o el valor de una variable. Se pueden usar tantos << como se desee.
Ejercicio: Realice una prueba de escritorio al siguiente cdigo y determine cul sera el resultado. Luego ejecute dicho cdigo en algn entorno de programacin y compare. #include <iostream> using namespace std; int main() { int x; x = 8; cout << "La variable "; cout << "x" << " es igual a " << x; cout << "\nF\nI\nN"; }

Ahora, la funcin contraria al cout (en el sentido de que no escribe sino que lee) es el cin. Su sintaxis es muy similar: comienza por cin seguida por >> (en este caso no es doble menor que sino doble mayor que) seguida por la variable que queremos leer y se finaliza con punto y coma ; Miremos el siguiente ejemplo: #include <iostream> using namespace std;

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


int main() { int a; cout << "Ingrese el valor de a: "; cin >> a; cout << "El valor de a es: " << a << " y su cuadrado es: " << a*a; } Cuyo resultado al ejecutarlo es:

Si escribimos por ejemplo 4 y damos Enter el resultado final es:

Cuando el compilador va ejecutando instruccin por instruccin y llega a un cin lo que hace es una pausa en la ejecucin en espera que el usuario ingrese un valor por teclado. Una vez se escribe un valor y se da Enter lo que hace el compilador es asignarle ese valor a la variable correspondiente siempre y cuando los tipos de datos coincidan. Los tipos de datos utilizados en C++ se describen en la siguiente seccin. Notemos finalmente que cuando usamos el cout tambin podemos imprimir el resultado de una operacin (en este caso una multiplicacin). Similar al cout, el cin permite leer varias variables de una vez. Veamos el siguiente ejemplo: #include <iostream> using namespace std; int main() { int a, b;
Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


cout << "Ingrese a y b: "; cin >> a >> b; cout << "El valor a + b es: " << a+b; } Cuyo resultado, si ingresan los valores 2 y 5, es:

Tipos de datos
Como cualquier lenguaje de programacin, C++ considera ciertos tipos de datos primitivos. Nuestro inters se centrar en los siguientes: Tipo Entero corto Entero largo Real simple Real doble Carcter simple Booleano Notacin short int float double char bool Tamao 2 bytes 4 bytes 4 bytes 8 bytes 1 byte 1 bit Rango -32768 a 32767 -2147483648 a 2147483648 +/- 3.4e +/- 38 (~7 dgitos) +/- 1.7e +/- 308 (~15 dgitos) Caracteres ASCII true o false

* El tamao y rango dependen del sistema donde se compile el programa. Los valores anteriormente presentados corresponden a sistemas tpicos de 32 bits.

Es importante mencionar que dentro de nuestros programas en C++ es necesario declarar TODAS las variables que utilicemos. Declarar significa que tenemos que indicar explcitamente de qu tipo de dato es una determinada variable. Aunque generalmente se hace para todas las variables justo despus de abrir la llave de inicio del main esto se puede hacer en cualquier parte del cdigo siempre y cuando se haga ANTES de usar la variable. Cuando se declara una variable de un determinado tipo, significa que los valores que puede tomar dicha variable DEBEN que ser de ese tipo. Por ejemplo declarar una variable x de tipo int y luego asignarle un valor de 4.8 obliga al compilador a recortar el valor.

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


Miremos el siguiente ejemplo: #include <iostream> #include <math.h> using namespace std; int main() { float p, e, imc; cout << "Cual es su peso (en kgs): "; cin >> p; cout << "Cual es su estatura (en mts): "; cin >> e; imc = p/pow(e,2); cout << "\nSU IMC es: " << imc; } En este caso las tres variables utilizadas (2 de entrada y una de salida) son de tipo float pues todas pueden tener decimales pero no requieren de mucha precisin. Notemos que en este ejemplo tuvimos que incluir una librera adicional math.h para usar la funcin pow que eleva un nmero a una potencia. Otras funciones (operadores) de esta librera son las siguientes (si en un mismo programa se usa ms de una funcin de una librera, basta con incluirla una sola vez): abs(x): Valor absoluto de x acos(x): Coseno inverso de x asin(x): Seno inverso de x atan(x): Tangente inversa de x cos(x): Coseno de x cosh(x): Coseno hiperblico de x exp(x): ex fabs(x): Valor absoluto del real x log(x): Logaritmo natural de x log10(x): Logaritmo base 10 de x pow(x,y): xy sin(x): Seno de x sinh(x): Seno hiperblico de x sqrt(x): Raz cuadrada de x tan(x): Tangente de x tanh(x): Tangente hiperblica de x

Condicionales

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


En C++ existen bsicamente tres tipos de condicionales que pueden usarse segn la necesidad: el condicional simple (una nica condicin), el condicional compuesto (una condicin y su contrario), y el condicional mltiple (varias condiciones mutuamente excluyentes). La sintaxis del condicional simple es la siguiente: if (/* expresin lgica */) { //Instrucciones que se ejecutan cuando la expresin anterior es verdadera } Notemos que existe otra forma de definir comentarios: con /* comienza el comentario y con */ termina el comentario. Esta forma es ms verstil que usar // porque por una parte permite seguir escribiendo cdigo despus del comentario en la mismo rengln y por otra porque permite tener comentarios de ms de un rengln. La sintaxis del condicional compuesto es la siguiente: if (/* expresin lgica */) { //Instrucciones que se ejecutan cuando la expresin anterior es verdadera } else { //Instrucciones que se ejecutan cuando la expresin es falsa } Finalmente, la sintaxis del condicional mltiple es la siguiente: if (/* expresin lgica 1 */) { //Instrucciones que se ejecutan si la expresin es verdadera } else if (/* expresin lgica 2 */) { //Instrucciones que se ejecutan si la expresin 1 es falsa pero la 2 es verdadera } else if (/* expresin lgica 3 */) { //Instrucciones que se ejecutan si la expresin 1 y 2 son falsas pero la 3 es verdadera } else { //Instrucciones que se ejecutan si todas las expresiones son falsas }
Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


Ahora, respecto a los operadores de comparacin que usa C++, y que pueden usarse en las expresiones lgicas, la sintaxis es la siguiente: Operador > (mayor que) < (menor que) (mayor o igual que) (menor o igual que) = (igual) (diferente) Sintaxis > < >= <= == !=

Notemos que el comparador de igualdad no es = sino == (doble igual) para que el C++ distinga entre una asignacin y una comparacin. Respecto a los conectores que tambin pueden usarse en las expresiones lgicas, C++ maneja la siguiente sintaxis: Conector Conjuncin (Y) Disyuncin (O) Negacin (No) Sintaxis && || !

Ejercicio: Realice una prueba de escritorio al siguiente cdigo y determine cul sera el resultado. Luego ejecute dicho cdigo en algn entorno de programacin y compare. #include <iostream> using namespace std; int main(){ int a = 3, b = 4, c = 5; if (a != b && c > b) { cout << "mensaje 1 \n"; } if (((3*b > 4*a) || (3*b < 2*c)) && b < c) { cout << "mensaje 2 \n"; }

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


if (!(a+b < c && (c == 2*a || b/2 < a))) { cout << "mensaje 3 \n "; } }

Iteracin definida
En C++ la manera comn de utilizar la iteracin definida es: for (X = valor_inicial; X /*comparacin*/ valor_final; X = X variacin){ //Instrucciones } X puede ser cualquier variable y la comparacin puede ser <, >, <=, >=. Notemos que la variacin de la variable no necesariamente tiene que ser positiva (incluso podra usarse otro operador como el de multiplicacin). C++ tiene algunas particularidades respecto a su sintaxis con el fin de abreviar cdigo. As por ejemplo la instruccin X = X + variacin puede abreviarse como X += variacin (funciona tambin para los otros operadores algebraicos). Ms an, cuando la variacin de la variable es incrementarla una unidad se puede reemplazar la expresin X = X + 1 por X++. Igualmente, cuando la variacin es disminuirla una unidad se puede reemplazar X = X- 1 por X--. Para aclarar, miremos este ejemplo para mostrar todos los nmeros enteros entre A y B: #include <iostream> using namespace std; int main(){ int A, B, i; cout << "Ingrese A y B: "; cin >> A >> B; if (A < B) { cout << "Los numeros entre A y B son:\n"; for (i = A; i<=B; i++){ cout << i << "\n"; } }

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


Ejercicio: Realice una prueba de escritorio al siguiente cdigo y determine cul sera el resultado. Luego ejecute dicho cdigo en algn entorno de programacin y compare. #include <iostream> using namespace std; int main(){ int m, n, k; m = 15; n = 2; for (k = m; k>n; k -=3){ cout << k << "\n"; } }

Iteracin indefinida
En C++ hay dos maneras de utilizar la iteracin indefinida: while(/* expresin lgica */){ //Instrucciones } o do{ //Instrucciones } while(/* expresin lgica */); La diferencia entre una y otra es que en la primera se evala primero la expresin lgica y luego se ejecutan las instrucciones, y en la segunda se hace al revs. Esto indirectamente significa que en la segunda forma las instrucciones se ejecutan al menos una vez, mientras que en la primera puede que nunca se ejecuten. Para aclarar, miremos este ejemplo para mostrar todos las divisiones sucesivas por 2 de un nmero N hasta que el resultado sea menor o igual a 1: #include <iostream> using namespace std; int main(){ int N; float X[20], suma = 0;

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


cout << "Ingrese N: "; cin >> N; while (N > 1){ N /= 2; cout << N << "\n"; } } Cuyo resultado, si ingresan un valor de 32, es:

Ejercicios: Para poner en prctica lo aprendido hasta el momento, realiza los siguientes ejercicios. 1. Implementar un algoritmo en C++ para resolver una ecuacin cuadrtica: AX2 + BX + C = 0 considerando todos los casos (no hay races, hay una sola raz, hay races pero no son reales, hay dos races reales). Implementar un algoritmo en C++ para leer tres valores correspondientes a la longitud de tres rectas, determinar si esas tres rectas pueden formar un tringulo y en caso afirmativo decir qu tipo de tringulo sera. Implementar un algoritmo en C++ para sumar los nmeros enteros del A al B. Una forma de calcular el cuadrado de los nmeros enteros es sumar los impares de la siguiente manera: 1=1 4=1+3 9=1+3+5 Utilizar este concepto para implementar un algoritmo en C++ que calcule el cuadrado de los N primeros nmeros enteros. 5. 6. Implementar un algoritmo en C++ para leer un valor entero y decir si es primo o no. Un nmero perfecto es aquel en que la suma de los divisores da el mismo nmero. Implementar un algoritmo en C++ para mostrar si un nmero entero Z es perfecto o no. Ejemplo: el nmero 6 es perfecto por que 6 = 1 + 2 + 3, mientras que 8 no es perfecto porque 8 1 + 2 + 4. Implementar un algoritmo en C++ para leer cuatro valores enteros positivos A1, A2, A3, A4, remplace estos por otros cuatro valores |A1 A2| |A2 A3| |A3 A4| y |A4 A1|, Si todos son iguales escriba los cuatro

2.

3. 4.

7.

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


valores, si al menos dos de ellos son diferentes, contine el proceso haciendo los mismos reemplazos. Contine hasta que todos sean iguales, escriba cada vez los cuatro valores.

Arreglos
En C++ para declarar un arreglo basta decir de qu tipo es y, por cada dimensin (una si es vector, dos si es matriz, etc.), poner entre corchetes [] cual es el tamao mximo que va a tener. Desde que se declara, es necesario especificar el tamao del arreglo. Este tamao no significa necesariamente que el arreglo contendr ese nmero de elementos, si no que mximo puede tener ese nmero. Otro aspecto importante es que la primera posicin es la posicin cero, por lo que si queremos tener por ejemplo un vector (dimensin 1) de enteros cortos de mximo 10 elementos y se desea usar las posiciones 1 a 10 (por facilidad) se debe declarar int X[11] , es decir, que se desperdiciar la posicin cero. Para aclarar, miremos este ejemplo para leer un vector de nmeros reales simples de mximo 20 elementos y mostrar su promedio: #include <iostream> using namespace std; int main(){ int N, i; float X[20], suma = 0; cout << "Ingrese el tamao del vector (max 20): "; cin >> N; for (i = 0; i < N; i++){ cout << "Ingrese X[" << i << "]: "; cin >> X[i]; suma += X[i]; } cout << "\nEl promedio es: " << suma/N; }

Funciones
En C++, a diferencia de otros lenguajes como VisualBasic, no hay diferenciacin entre funciones y subprogramas, todas son funciones slo que estas pueden o no devolver un valor. La sintaxis para declarar una funcin es:

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


/* tipo */ /* nombre de la funcion */ (/* tipo1 arg1 */, /* tipo2 arg2 */, /* tipoN argN */) { // Declaracin de variables locales // Instrucciones return /* valor que se retorna */; }

Miremos en detalle cada uno de estos elementos: tipo: Especifica el tipo de dato que devuelve la funcin. En caso que no devuelva nada el tipo debe ser void. nombre: Es el nombre que se le desee poner a la funcin (preferiblemente de manera mnemotcnica) y sigue las mismas normas establecidas para dar nombre a las variables. argumentos: Son los datos con los que se debe alimentar la funcin. Para cada uno de ellos se debe especificar el tipo. variables locales: Son las variables que se requieren dentro de las instrucciones que son llevadas a cabo al interior de la funcin para dar con el resultado, pero que no son argumentos. El mbito de estas variables es la funcin (ms adelante se detallar el concepto de mbito). instrucciones: Todas las operaciones que lleva a cabo la funcin (lectura, escritura, asignacin, operaciones matemticas, lgicas, etc.) return: Determina cul es el valor que devuelve la funcin siempre y cuando no sea de tipo void. Para aclarar miremos el siguiente ejemplo donde hay un main para leer dos nmeros reales y se usa una funcin para obtener su suma. #include <iostream> using namespace std; float suma(float x, float y); int main(){ float A, B, C; cout << "Ingrese A y B: "; cin >> A >> B; C = suma(A,B); cout << "La suma de A y B es: " << C; }

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


float suma(float x, float y){ return x+y; } Cuyo resultado, si se ingresan los valores 2.3 y 4.5 es:

Notemos que justo despus de using namespace std; y el int main() el cdigo anterior tiene repetida la declaracin de la funcin, seguida de punto y coma pero sin el cdigo de lo que hace. Esto es lo que se llama prototipo de la funcin y sirve para anunciarle al compilador que dicha funcin existe y que ser detallada ms adelante en el cdigo. Otra particularidad de las funciones en C++ es que se pueden sobrecargar. Sobrecargar significa definir varias funciones con el mismo nombre, pero con diferentes conjuntos de parmetros. Esto es til en problemas donde necesitamos de funciones que hagan lo mismo, pero de manera diferente segn los argumentos que reciban (cantidad y tipo). Miremos el siguiente ejemplo para aclarar esto: #include <iostream> using namespace std; float mayor(float a, float b); float mayor(float a, float b, float c); int main(){ float p, q, r; cout << "Ingrese P, Q y R: "; cin >> p >> q >> r; cout << "El mayor de los tres numeros es: " << mayor(p,q,r); } float mayor(float a, float b){ if (a > b){ return a; } else{ return b; }

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


} float mayor(float a, float b, float c){ return mayor(mayor(a, b), c); }

mbito de las variables


Cuando declaramos una variable se reserva un espacio de memoria para guardarla y se le asigna un identificador (el nombre de la variable). Dependiendo de la parte del cdigo donde se haga la declaracin, la variable adquiere un mbito, es decir, un lugar donde dicha variable es visible. Generalmente, un mbito se define mediante un bloque, el cual se delimita por medio de llaves { }, como en el caso del main y en general de las funciones. Cuando el programa sale del mbito de una variable el espacio asociado a esta se libera (la variable se destruye). Una variable es global cuando se declara por fuera de todos los bloques (incluido el de la funcin main). Al ser global su mbito es todo el programa. La visibilidad se refiere a las partes del programa en las que puede accederse al espacio de memoria asignado a una variable. Una variable es visible cuando es posible acceder a su contenido mediante el identificador que le fue asignado. En teora toda variable es visible en su mbito, sin embargo, en algunas ocasiones una declaracin de variable local (pertenece a la funcin donde fue declarada) puede ocultar una variable global con el mismo nombre. Para aclarar, miremos el siguiente ejemplo: #include <iostream> using namespace std; int funcion1(); void funcion2(int x); int a = 5; //variable global int main() { int x = 2; //variable local del main cout << funcion1() << "\n"; funcion2(x); cout << "x: " << x << "\n"; cout << "a: " << a << "\n"; } int funcion1(){ int a = 3; //variable local de funcion1 (oculta la global dentro de funcion1) return a*2;
Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln

Curso rpido de C++


} void funcion2(int x){ x = x*4; //variable local de funcion2 (diferente a la del main) cout << "x: " << x << "\n"; } Cuya salida es:

Material elaborado por Julin Moreno, Docente de la Universidad Nacional de Colombia - Medelln