Académique Documents
Professionnel Documents
Culture Documents
Núcleo Anzoátegui
Extensión Centro Sur Anaco
Escuela de Ingeniería y Cs. Aplicadas
Departamento de Ingeniería Industrial
Profesor: Integrantes:
Eduardo Correa Campos Daniel, C.I.: 26.313.001
Procesamiento de Datos González Jhonatan, C.I.: 25.428.914
Sección 02 González María Laura, C.I.: 25.434.020
Hernández Jorge, C.I.: 25.994.559
Lira Paola, C.I.: 26.947.112
C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup.
La intención de su creación fue el extender al lenguaje de programación C mecanismos que permiten la
manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el
C++ es un lenguaje híbrido. Posteriormente se añadieron facilidades de programación genérica, que se
sumaron a los paradigmas de programación estructurada y programación orientada a objetos. Por esto se
suele decir que el C++ es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los
fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear nuevos tipos
que se comporten como tipos fundamentales. El nombre "C++" fue propuesto por Rick Mascitti en el
año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se
había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se
refiere a que C++ es una extensión de C.
2. Historia y Origen.
Su origen data del año 1979 y se le atribuye a Bjarne Stroustrup. El lenguaje que inspiró a Stroustrup
fue el lenguaje Simula (lenguaje usado para simulaciones), que es considerado el primer lenguaje en
permitir programación orientada a objetos. Stroustrup considero que esta funcionalidad del lenguaje
Simula era muy útil en el desarrollo de software, pero Simula era muy lento para un uso práctico.
Stroustrup comenzó a trabajar en su lenguaje llamado “C with classes” (C con clases) , su meta era
agregar programación orientada a objetos al lenguaje C. El primer compilador de este lenguaje fue
Cfront (un compilador escrito en C with classes) derivado del compilador de lenguaje C llamado CPre,
aunque en 1993 se dejaría de usar por la dificultad para agregar nuevas funciones. En 1983 el nombre
del lenguaje fue cambiado de “C with classes” a “C++”. Podemos entender con esto la imagen que tenía
Stroustrup de su lenguaje como una mejora del lenguaje “C” (al ser ++ un incrementador de variable).
Para 1985 Stroustrup publicó su referencia al lenguaje “The C++ Programming Language” (“El
lenguaje de programación C++), el cual fue muy importante debido a la falta de estandarización del
lenguaje recién creado. En 1990 se publicó “The Annotated C++ Reference Manual” (Manual de
referencia anotada de C++) y ese mismo año salió al mercado el compilador “Turbo C++” (desarrollado
por Borland Software Corporation) que agregaba una gran cantidad de nuevas librerías al lenguaje,
ayudando a su desarrollo. El proyecto de librerías “Boost” agrego nuevas funcionalidades al lenguaje
tales como aleatorización comprehensiva y una nueva librería de tiempo.
3. Entornos de Desarrollo.
En definitiva un IDE es más que un simple editor de texto, es una suite de componentes o módulos
que permiten no solo escribir código fuente, sino también generar con él un programa ejecutable, aunque
también es posible encontrar entornos de desarrollo integrados, que no contienen un compilador
incorporado en sí mismos, sin embargo, por lo general pueden configurarse para trabajar en conjunto
con uno de ellos, para así poder producir un archivo ejecutable, a no ser que el lenguaje que se esté
empleando no requiera compilación.
Tanta es la simbiosis que se da entre algunos IDE y sus compiladores, que muchos informáticos
noveles, suelen confundir ambas cosas y la realidad es que se trata de programas distintos, pues el
compilador es el software encargado de traducir (compilar) el código fuente a lenguaje maquina (código
binario), por lo tanto es una más de las herramientas que integran un entorno de desarrollo.
En el caso del lenguaje C y su evolución orientada a objetos, el C++, los compiladores más
conocidos son GCC (GNU Compiler Collection), MinGW (implementación de GCC para Windows), los
antiguos Turbo C y Turbo C++ que eran tanto compiladores como IDE para el sistema operativo MS-
DOS y fueron descontinuados, siendo sustituidos por C++Builder, y Visual C++ (que forma parte de
Visual Studio).
Dev-C++: Este emplea el compilador MinGW y esta creado mediante el Entorno Delphi y
el lenguaje Object Pascal, se trata de un software libre, sencillo, ligero y eficiente, para la
plataforma Windows, que cuenta con un arsenal de herramienta que permiten la
programación rápida de aplicaciones complejas. Actualmente está desactualizado, también
existen variantes de este IDE como wxDev C++ que integra características extra para la
creación de interfaces.
Code::Blocks: Es una alternativa a Dev-C++ que ha sido desarrollada mediante el propio
lenguaje C++, también es un software libre, pero en este caso es multiplataforma. Sus
capacidades son bastante buenas y es muy popular entre los nuevos programadores. Se
puede encontrar separado del compilado o la versión “mingw” que incluye g++ (GCC para
C++).
Visual C++: Como ya he mencionado, se trata tanto de un módulo del entorno Visual
Studio como un compilador, posee editor de interfaces gráficas y una serie de asistentes
que hacen muy cómodo el proceso de desarrollo. En realidad el lenguaje que se emplea es
un dialecto de C++ compatible con la plataforma .NET de Microsoft.
C++Builder: Esta es la opción desarrollada por Borland (antigua líder en producción de
compiladores C++) y actualmente propiedad de la empresa Embarcadero Technologies, es
un software propietario y de pago, destinado a la plataforma Windows.
NetBeans: Este IDE libre y multiplataforma, está destinado originalmente a la
programación mediante el lenguaje Java, sin embargo con la implementación un paquete de
software adicional, puede emplearse para desarrollar mediante C/C++.
Eclipse: Al igual que el anterior, su principal propósito es programar mediante Java pero
puede expandirse para soportar C++ y también es tanto libre como multiplataforma.
MonoDevelop: Esta es una alternativa a Visual Studio, no tan conocida como su
competidor, pues sus características son similares, pero este IDE es multiplataforma y de
software libre. Posee un editor de interfaces graficas que implementa la biblioteca GTK y
es compatible con el .Net Framework de Microsoft.
Xcode: Para la plataforma Mac este es el IDE más utilizado, trabaja en combinación con el
compilador GCC y con Interface Builder, este último es un diseñador de interfaz gráfica
que facilita el diseño mediante el proceso de arrastrar y soltar controles en un espacio de
trabajo.
KDevelop: Este software de desarrollo está destinado exclusivamente a su uso en la
plataforma GNU/Linux y otros sistemas Unix, no cuenta con un compilador propio por lo
que requiere de su integración con GCC. Está dirigido al escritorio KDE aun cuando puede
emplearse en otros entornos.
Anjuta: Esta opción es propia de los sistemas GNU/Linux y BSD, en este caso su propósito
principal es desarrollar aplicaciones para el escritorio GNOME mediante las herramientas
proporcionadas por GTK+.
4. Usos.
A pesar de que el leguaje C++ hasta hace unos años se ubicaba en tercer lugar dentro de los
lenguajes de programación más usados (superado solamente por C y Java respectivamente), no es muy
utilizado en el desarrollo de apps o páginas web, limitándose al desarrollo de softwares de teléfonos
como el Windows Phone. Muchos de los desarrolladores que recientemente han incursando en el
desarrollo de páginas web, aplicaciones y software prefieren usar otro de los lenguajes de programación
existentes en lugar de C++ a pesar de la flexibilidad y las capacidades que este ofrece.
5. Fundamentos de Programación.
5.1.Tipos Simples.
Un programa trabaja con datos con unas determinadas características. No es lo mismo procesar
números naturales, números reales o nombres (cadenas de caracteres). En cada caso tratamos con datos
de tipo diferente. C++ dispone de un número reducido de tipos predefinidos y es importante elegir en
cada caso aquel que mejor se adapta a los datos que deseamos manipular. Por ejemplo, en nuestro
programa euros.cpp hicimos uso del tipo double porque nuestro objetivo era manipular datos numéricos,
posiblemente con decimales. También es posible definir nuevos tipos, con características no
predefinidas sino pensadas específicamente para un determinado programa.
La elección de un determinado tipo u otro para una determinada entidad del programa proporciona
información acerca de:
Por ejemplo, al especificar que un dato es de tipo double estamos indicando que se trata de un
número real, representado internamente en punto flotante con doble precisión (normalmente usando 8
bytes) y que se puede manipular con los operadores predefinidos +, -, * y /.
Los tipos se pueden clasificar en simples y compuestos. Los tipos simples se caracterizan porque sus
valores son indivisibles, es decir, no se dispone de operadores para acceder a parte de ellos. Por ejemplo,
si 126.48 es un valor de tipo double, podemos usar el operador + para sumarlo con otro, pero no
disponemos de operadores predefinidos para acceder a sus dígitos individualmente (aunque esto se
pueda realizar indirectamente mediante operaciones de bits o aritméticas). Por el contrario, los tipos
compuestos están formados como un agregado o composición de otros tipos, ya sean simples o
compuestos.
El tipo int se utiliza para trabajar con números enteros. Su representación suele coincidir con la
definida por el tamaño de palabra del procesador sobre el que va a ser ejecutado, hoy día suele ser de 4
bytes (32 bits), aunque en determinados ordenadores puede ser de 8 bytes (64 bits). Puede ser
modificado para representar un rango de valores menor, mediante el modificador short (normalmente 2
bytes [16 bits]) o para representar un rango de valores mayor, mediante el modificador long
(normalmente 4 bytes [32 bits] u 8 bytes [64 bits]) y long long (normalmente 8 bytes [64 bits]). También
puede ser modificado para representar solamente números naturales (enteros positivos) utilizando el
modificador unsigned.
Tanto el tipo float como el double se utilizan para representar números reales en formato de punto
flotante. Se diferencian en el rango de valores que se utiliza para su representación interna. El tipo
double (“doble precisión”) se suele representar utilizando 8 bytes ([64 bits]), mientras que el tipo float
(“simple precisión”) se suele representar utilizando 4 bytes [32 bits]). El tipo doublé también puede ser
modificado con long para representar “cuádruple precisión” (normalmente 12 bytes [96 bits]).
El tipo bool se utiliza para representar valores lógicos (o booleanos), es decir, los valores
“Verdadero” o “Falso” o las constantes lógicas true y false. Suele almacenarse en el tamaño de palabra
más pequeño posible direccionable (normalmente 1 byte).
El tipo char se utiliza para representar caracteres, es decir, símbolos alfanuméricos (dígitos y letras
mayúsculas y minúsculas), de puntuación, espacios, control, etc. Normalmente utiliza un espacio de
almacenamiento de 1 byte (8 bits) y puede representar 256 valores diferentes.
Todos los tipos simples tienen la propiedad de ser indivisibles y además, mantener una relación de
orden entre sus elementos. Se les conoce también como tipos escalares. Todos ellos, salvo los de punto
flotante (float y double), tienen también la propiedad de que cada posible valor tiene un único antecesor
y un único sucesor.
A éstos se les conoce como tipos ordinales (en terminología C++, también se les conoce como tipos
integrales, o enteros). La siguiente tabla muestra las características fundamentales de los tipos simples
predefinidos.
En ocasiones el programador puede estar interesado en trabajar con tipos simples cuyos valore no
coinciden con las características de ninguno de los tipos simples predefinidos. Entonces puede definir un
nuevo tipo enumerado, cuyos valores serán aquellos que explícitamente se enumeren. De esta forma se
consigue disponer tipos que expresan mejor las características de las entidades manipuladas por el
programa, por lo que el programa será más legible y fácil de entender.
Por ejemplo, si en un programa quisiéramos tratar con colores, con lo visto hasta ahora, para hacer
referencia a un determinado color habría que seleccionar un tipo predefinido (por ejemplo, char) y
suponer que cada color será representado por un cierto carácter (por ejemplo, ’A’ para el color azul). En
su lugar, podemos definir un nuevo tipo Color que contenga AZUL como uno de sus valores
predefinidos. Para ello, haríamos lo siguiente:
enum Color {
ROJO,
AZUL,
AMARILLO
} ;
En realidad, internamente cada valor de la enumeración se corresponde con un valor natural, siendo
el primero el cero e incrementándose de uno en uno. En nuestro ejemplo ROJO se corresponde
internamente con 0, AZUL con 1, etc. Los tipos enumerados, al ser tipos definidos por el programador,
no tiene entrada ni salida predefinida por el lenguaje, sino que deberá ser el programador el que
especifique (programe) cómo se realizará la entrada y salida de datos en caso de ser necesaria.
El lenguaje de programación C++ depende principalmente de dos comandos que van a permitir la
entrada y salida de datos durante todo el proceso. El primero de ellos es conocido como “cin” que es el
flujo de entrada asociado al teclado. La entrada de datos permite recibir información desde el exterior,
esta se realiza (desde el teclado) mediante el operador >> sobre el flujo “cin” especificando la variable
donde almacenar el valor de entrada leído desde el teclado.
La salida de datos permite mostrar información al exterior, y se realiza a través de los flujos de
salida. El flujo de salida asociado a la salida estándar (usualmente la pantalla o terminal de la consola) se
denomina “cout”. La salida de datos a pantalla se realiza utilizando el operador << sobre el flujo “cout”
especificando el dato cuyo valor se mostrará. Existe otro comando, que, aunque a lo largo de este trabajo
casi no se utiliza, es necesario nombrarlo, “cerr”, que es el flujo de error estándar asociado a la pantalla.
Los operadores << y >> son operadores de inserción y extracción de flujo respectivamente, y no
deben confundirse con los de desplazamiento de bits. Estos operadores son muy eficaces porque no es
necesario especificar formatos para presentación o lectura, ellos los presentan en función al tipo de datos
de la variable. Aunque en ocasiones podría necesitar de la ayuda del operador para obtener los
resultados específicos.
7. Estructuras de Control
7.1.Sentencia, Secuencia y Bloque
Entidades globales son aquellas que han sido definidas fuera de cualquier bloque. Su ámbito de
visibilidad comprende desde el punto en el que se definen hasta el final del fichero.
Entidades locales son aquellas que se definen dentro de un bloque. Su ámbito de visibilidad
comprende desde el punto en el que se definen hasta el final de dicho bloque. Este tipo de entidades
se crean en el punto donde se realiza la definición, y se destruyen al finalizar el bloque.
7.3.Sentencias de Selección
Para poder describir el comportamiento de las variables es necesario el uso las sentencias de
selección, que permitan efectuar preguntas y seleccionar el comportamiento adecuado en función del
resultado de las mismas. Están divididas en:
Secuencia if
Secuencia switch
7.4.Sentencias de Iteración. Bucles
Las sentencias de iteración se utilizan para repetir la ejecución de un determinado grupo de sentencias
dependiendo de condiciones establecidas. El flujo de ejecución estará iterando (por eso se les conoce
como bucles), repitiendo la ejecución del grupo de sentencias (cuerpo del bucle) hasta que lo determine
la expresión lógica utilizada para decidir la finalización del bucle. Comprende las siguientes sentencias:
Sentencia while
Sentencia for
Sentencia do-while
7.5.Programación Estructurada
Un programa sigue una metodología de programación estructurada si todas las estructuras de control que
se utilizan (secuencia, selección, iteración y modularización) tienen un único punto de entrada y un
único punto de salida. Esta característica hace posible que se pueda aplicar la abstracción para su diseño
y desarrollo. La abstracción se basa en la identificación de los elementos a un determinado nivel,
ignorando los detalles especificados en niveles inferiores.
El diseño de un programa es una tarea compleja, por lo que debe ser abordarla siguiendo un enfoque
que permita hacerla lo más simple posible. Al igual que ocurre en otros contextos, la herramienta
fundamental para abordar la solución de problemas complejos es la abstracción: una herramienta mental
que nos permite tratar el problema identificando sus elementos fundamentales y dejando para más
adelante el estudio de los detalles secundarios. La aplicación de este principio al desarrollo de programas
permite seguir un enfoque de refinamientos sucesivos: en cada fase del diseño del programa ignoramos
los detalles secundarios y nos centramos en lo que nos interesa en ese momento; en fases posteriores
abordamos los detalles que hemos ignorado por el momento.
De esta forma, al final se tiene un diseño completo, obtenido con menor esfuerzo y de forma más
segura. Los lenguajes de programación ofrecen la posibilidad de definir subprogramas, permitiendo al
programador aplicar explícitamente la abstracción en el diseño y construcción de software. Un
subprograma puede ser visto como un mini programa encargado de resolver un subproblema, que se
encuentra englobado dentro de otro mayor. En ocasiones también pueden ser vistos como una
ampliación del conjunto de operaciones básicas del lenguaje de programación, proporcionándole nuevas
herramientas no disponibles de forma predefinida.
int main()
{
int x = 8 ;
int y = 4 ;
ordenar(x, y) ;
cout << x << " " << y << endl ;
}
Como se observa, la función main se comunica con el subprograma ordenar mediante una llamada.
En esta comunicación hay un intercambio de información entre main y ordenar a travé de los parámetros
utilizados en la llamada, en este caso las variables x e y.
En los ejemplos planteados se observa que tanto procedimientos como funciones se utilizan para
realizar un cálculo, ignorando los detalles y, por tanto, simplificando el diseño del programa
principal. En ambos casos hay una invocación al subprograma correspondiente y un intercambio de
información entre el que llama y el subprograma llamado. La única diferencia entre ambos tipos de
subprogramas está en la forma de hacer las llamadas:
La llamada a un procedimiento constituye por sí sola una sentencia independiente que puede
ser utilizada como tal en el cuerpo de otros subprogramas (y del programa principal). La
única forma de intercambiar información es a través de los parámetros usados en la llamada.
La llamada a una función no constituye por sí sola una sentencia, por lo que debe aparecer
dentro de alguna sentencia que utilice el valor resultado de la función. La información se
intercambia a través de los parámetros y mediante el valor devuelto por la función.
Si se intentara compilar los programas utilizados anteriormente como ejemplo, comprobaríamos que
el compilador informa de un mensaje de error. Ello es así porque no sabe a qué se refiere al hacer uso de
ordenar y de calcular_menor. Se trata de dos identificadores nuevos, que no se encuentran predefinidos
en C++ y que, por lo tanto, deben ser declarados antes de su uso, como ocurre con cualquier
identificador nuevo. Nótese que ambos nombres de subprogramas corresponden a tareas que el
programador supone, pero cuya solución no ha sido descrita aún en ninguna parte del programa. Por este
motivo, es necesario proporcionar una definición precisa de los subprogramas ordenar y calcular_menor
que, además, debe estar situada en un punto del programa que la haga visible en el punto en que se usen.
Un subprograma es como un mini programa encargado de resolver un subproblema, por lo que la
definición de un subprograma no difiere de la definición ya utilizada de la función main, que en realidad
no es más que una función especial. A continuación se muestra un programa completo con la definición
de la función main, que define el comportamiento del programa principal, y las definiciones de los dos
subprogramas ordenar y calcular_menor, utilizados desde la función main.
El cuerpo del subprograma especifica la secuencia de acciones a ejecutar necesarias para resolver el
subproblema especificado, y podrá definir tantas variables locales como necesite para desempeñar su
misión. En el caso de una función, el valor que devuelve (el valor que toma tras la llamada) vendrá dado
por el resultado de evaluar la expresión de la sentencia return. Aunque C++ es más flexible, nosotros
sólo permitiremos una única utilización de la sentencia return y deberá ser al final del cuerpo de la
función. Así mismo, un procedimiento no tendrá ninguna sentencia return en su cuerpo.
8.3.Ejecución de Subprogramas
Se establecen las vías de comunicación entre los algoritmos llamante y llamado por medio de los
parámetros.
Posteriormente, el flujo de ejecución pasa a la primera sentencia del cuerpo del subprograma
llamado, cuyas instrucciones son ejecutadas secuencialmente, en el orden en que están escritas.
Cuando sea necesario, se crean las variables locales especificadas en el cuerpo del subprograma.
Cuando finaliza la ejecución del subprograma, las variables locales y los parámetros previamente
creados se destruyen, el flujo de ejecución retorna al (sub)programa llamante, y continúa la
ejecución por la sentencia siguiente a la llamada realizada.
9. Arrays y Cadenas
Cuando se declara una variable se está apartando en memoria espacio para guardar sus posibles
valores dependiendo del tipo de dato que se trata. Un array o arreglo son una serie de localidades en
memoria consecutivas que están asignadas a un solo nombre y un mismo tipo de datos.
9.1. Declaración
char nombre[20] ;
Al momento de declarar un arreglo de cualquier tipo, puede inicializarse con los valores que queramos.
Para inicializar un arreglo de enteros:
Así, estos valores estarán almacenados en cada elemento del array. Es muy importante hacer
notar que el primer elemento de un arreglo es el elemento 0, entonces, MiArreglo[0] contendrá el
número 2, el segundo ( MiArreglo[1] ) contendrá el número 34 y así sucesivamente hasta MiArreglo[4]
que es el último elemento del array. Si un arreglo cuenta con menos inicalizadores que elementos
entonces el resto se inicializará a 0.n Y en caso de que se trate de una cadena de caracteres puede
realizarse de 2 formas:
char MiArray[5]={'h','o','l','a','\0'};
Cuando se inicializa una cadena por el primer método, automáticamente se coloca un carácter de
terminación de cadena (el carácter \0), en cambio, de la segunda forma debe colocarse manualmente.
También se puede excluir el tamaño del arreglo, el compilador lo determinará en la compilación.
Para acceder a cada elemento del arreglo se debe especificar su posición (la primera es la
posición 0). En tiempo de ejecución puede asignarse valores a cada elemento cuidando siempre de no
sobrepasar el tamaño del arreglo, si se sobrepasa ese tamaño se escribirán datos en un área de la
memoria que no está asignada para ese array, y puede escribir datos en un área en donde se almacenaba
otra variable del programa o un componente del sistema, esto ocasionaría resultados no deseados. El
siguiente programa es una muestra del uso de arreglos de caracteres.
¿Qué hace este programa?, sencillamente puede afirmarse que almacena una cadena introducida
por el usuario, para luego modificar cada carácter por medio de un ciclo hasta que encuentre el carácter
de terminación (\0) o llegue al limite de caracteres. Quizá no parezca muy interesante este ejemplo, pero
hay que recordar que con cosas pequeñas se construyen grandes cosas, adornando un poco el programa,
se puede suponer que la cadena que introduce el usuario es un mensaje que debe ser secreto, en lugar de
sumar 5 a cada carácter se le puede sumar el número que quiera el usuario. El mismo programa pero un
poco “adornado” o “presuntuoso” queda de la siguiente forma:
La manipulación
de cadenas es uno de los
temas más extensos en
cuestiones de
programación y de los más importantes. Desde las acciones más básicas como la concatenación de
cadenas, la ordenación y búsqueda en arreglos, hasta los complicados algoritmos de criptografía o la
búsqueda a velocidades increíbles.
Cuando se hace referencia a entrada/salida estándar (E/S estándar) expresa que los datos o bien se
están leyendo del teclado, ó bien se están escribiendo en el monitor de video. Como se utilizan muy
frecuentemente se consideran como los dispositivos de E/S por default y no necesitan ser nombrados en
las instrucciones de E/S. En el lenguaje C++ se tienen varias alternativas para ingresar y/o mostrar datos,
dependiendo de la librería que se necesite utilizar para desarrollar el programa, entre estas están:
iostream.h y sodio.h.
10.1. Iostream.H
Las operaciones de entrada y salida no forman parte del conjunto de sentencias de C++, sino que
pertenecen al conjunto de funciones y clases de la biblioteca estándar de C++. Ellas se incluyen en los
archivos de cabecera iostream.h por lo que siempre se quieran utilizar, se debera introducir la línea de
código #include <iostream.h>
Esta biblioteca es una implementación orientada a objetos y está basada en el concepto de flujos. A
nivel abstracto un flujo es un medio de describir la secuencia de datos de una fuente a un destino o
sumidero. Así, por ejemplo, cuando se introducen caracteres desde el teclado, se puede pensar en
caracteres que fluyen o se trasladan desde el teclado a las estructuras de datos del programa. Los objetos
de flujo que vienen predefinidos serán:
Estos objetos se utilizan mediante los operadores << y >>. El operador “<<”, se denomina operador
de inserción; y apunta al objeto donde tiene que enviar la información. Por lo tanto la sintaxis de cout
será:
cout<<variable1<<variable2<<...<<variablen;
Nota: las cadenas de texto son variables y se ponen entre “ ” (comillas dobles). Por su parte “>>” se
denomina operador de extracción, lee información del flujo cin (a la izquierda del operador) y las
almacena en las variables indicadas a la derecha). La sintaxis sería la siguiente:
cin>>variable1>>...>>variablen;
Que mostraría por pantalla la frase "Introduce un número" y posteriormente almacenaría el valor
introducido por teclado en la variable i.
Printf: Imprimir en pantalla. Para utilizar la función printf en nuestros programas debemos
incluir la directiva:
#include <stdio.h>
Si sólo se quiere imprimir una cadena basta con escribir la siguiente línea de código.
printf( "Cadena" );
Cadena
Lo que se coloque entre las comillas es lo que saldra por pantalla. Si se volviera a usar otro printf, por
ejemplo:
#include <stdio.h>
void main()
{
printf( "Cadena" );
printf( "Segunda" );
}
Este ejemplo muestra cómo funciona printf. Para escribir en la pantalla se usa un cursor que no
vemos. Cuando se escribe algo el cursor va al final del texto. Cuando el texto llega al final de la fila,
lo siguiente que se ponga irá a la fila siguiente. Si lo que se quiere es sacar cada una en una línea
deberemos usar "\n". Es el indicador de retorno de carro. Lo que hace es saltar el cursor de escritura
a la línea siguiente:
#include <stdio.h>
void main()
{
printf( "Cadena\n" );
printf( "Segunda" );
}
y se obtendrá: Cadena Segunda. También se puede colocar mas de una cadena dentro del printf:
Esto no es válido. Cuando el compilador intenta interpretar esta sentencia se encuentra "Primera cadena"
y luego texto en medio, no sabe qué hacer con ello y da un error.
Algo muy usual en un programa es esperar que el usuario introduzca datos por el teclado. Para ello
contamos con varias posibilidades: Usar las funciones de la biblioteca estándar, crear nuestras propias
interrupciones de teclado (MS-Dos) o usar funciones de alguna biblioteca diferente (como por ejemplo
Allegro). Las funciones estándar están bien para un programa sencillito. Pero cuando se quieren hacer
juegos por ejemplo, no suelen ser suficiente. Demasiado lentas o no dan todas las posibilidades que se
buscan, como comprobar si hay varias teclas pulsadas. Para solucionar esto se tienen dos posibilidades:
La más complicada es crear nuestras propias interrupciones de teclado. ¿Qué es una interrupción de
teclado? Es un pequeño programa en memoria que se ejecuta continuamente y comprueba el estado del
teclado. Se puede crear uno propio y hacer que el ordenador use el que se ha creado en vez del suyo.
Otra posibilidad más sencilla es usar una biblioteca que tenga funciones para controlar el teclado.
Por ejemplo si se usa la biblioteca Allegro, ella misma hace todo el trabajo y el usuario no tiene más que
recoger sus frutos con un par de sencillas instrucciones. Esto soluciona mucho el trabajo y libra de tener
que aprender cómo funcionan los aspectos más oscuros del control del teclado.
Scanf: El uso de scanf es muy similar al de printf con una diferencia, nos da la posibilidad de
que el usuario introduzca datos en vez de mostrarlos. No nos permite mostrar texto en la
pantalla, por eso si queremos mostrar un mensaje usamos un printf delante. Un ejemplo:
#include <stdio.h>
void main()
{
int num;
printf( "Introduce un número " );
scanf( "%i", &num );
printf( "Has tecleado el número %i\n", num );
}
Primero es necesario observar unas notas de estética, para hacer los programas un poco más
elegantes. Parece una tontería, pero los pequeños detalles hacen que un programa gane mucho. El scanf
no mueve el cursor de su posición actual, así que en nuestro ejemplo queda:
Introduce un número _ /*
La barra horizontal indica dónde está el cursor */. Esto es porque en el printf no se ha puesto al
final el símbolo de salto de línea '\n'. Además se ha dejado un espacio al final de “Introduce un número:”
para que así cuando se teclee el número no salga pegado al mensaje. Si no se hubiese dejado el espacio
quedaría así al introducir el número 120 (es un ejemplo): Introduce un número120
Posteriormente así se puede visualizar cómo funciona el scanf. Lo primero en lo que hay que
fijarse es que hay una cadena entre comillas. Esta es similar a la de printf, la cual sirve para indicarle al
compilador qué tipo de datos estamos pidiendo. Como en este caso es un integer se usa “%i!. Después
de la coma se tiene la variable donde se almacena el dato, en este caso 'num'. En el scanf la variable
'num' lleva delante el símbolo “&”, este es muy importante, y sirve para indicar al compilador cual es la
dirección (o posición en la memoria) de la variable. C++ ofrece una alternativa a las llamadas de funcion
printf y scanf para manejar la entrada/salida de los tipos y cadenas de datos estandar. Así en lugar de
printf se utiliza el flujo estandar de salida cout y el operador << ("colocar en"); y en lugar de scanf
usamos el flujo de entrada estandar cin y el operador >> ("obtener de"). Estos operadores de inserción y
extracción de flujo, a diferencia de printf y scanf, no requieren de cadenas de formato y de formato y de
especificadotes de conversión para indicar los tipos de datosque son extraidos o introducidos.
11. Ejemplo.
Elabore un programa que lea el valor del radio y calcule la longitud de la circunferencia, el área del
círculo y el volumen de la esfera correspondiente a ese radio. Realice el diagrama de flujo y la corrida en
frío.
C R A L V
1 Pi = 3,1416 3,1416 ? ? ? ?
Inicio de la Iteración 1
2 Escribir ( “Introduce el valor del radio” ) 3,1416 ? ? ? ?
3 Leer ( radio ) 3,1416 5 ? ? ?
Se establecen dos decimales de precisión para
los cálculos correspondientes
4 Calcular ( “Longitud de la circunferencia” ) 3,1416 5 ? 31,41 ?
5 Escribir ( “Valor de la longitud” ) 3,1416 5 ? 31,41 ?
6 Calcular ( “Área del circulo” ) 3,1416 5 78,54 ? ?
7 Escribir ( “Valor del área” ) 3,1416 5 78,54 ? ?
8 Calcular ( “Volumen de la esfera” ) 3,1416 5 ? ? 523,59
9 Escribir ( “Valor del volumen” ) 3,1416 5 ? ? 523,59
Fin de la Iteración 1
Leyenda:
C: Constante L: Longitud
R: Radio V: Volumen
A: Area
A
Inicio
V <- 4/3*Pi*radio^3
Pi
‘Volumen’
radio
L <- 2*PI*radio
Fin
‘Longitud’
A <- PI*radio^2
‘Area’
A Conclusión
El lenguaje de programación C++ ha sido uno de los lenguajes que más uso se le ha dado con el
pasar de los años gracias a la flexibilidad que este ofrece a sus usuarios, todo esto a pesar de que en el
mercado existen nuevos lenguajes en apariencia más novedosos y con capacidades más interesantes para
los desarrolladores de aplicaciones y programas. La característica principal por la cual este leguaje se ha
mantenido vigente por tanto tiempo es por su potencia, y porque brinda una forma de realizar las tareas
bastante cómoda, lo cual es especialmente útil para programadores que en algún momento desarrollaron
un código usando otro de los lenguajes disponibles hoy en día, específicamente el lenguaje C , ya que les
permite ir entrando y familiarizándose de a poco con el C++, combinando las instrucciones y códigos de
los dos lenguajes, a la vez que se utiliza en compilador característico de C++.
Bibliografía
Deitel, Harvey M.; Deitel, Paul J. C++, cómo programar. Editorial Pearson Educación. 4ª ed., 2003.
1320 pp
Schildt, Herbert. C, Manual de referencia. Editorial Osborne McGraw-Hill. 4ª ed., 2000. 709 pp.
Sierra Urrecho, Alejandro; Alfonseca Moreno, Manuel. Programación en C/C++. Editorial Anaya
Multimedia. Madrid, España, 1999. 351 pp.
Stevens, Al; Walnum, Clayton. Programación con C++. Editorial Anaya Multimedia. Madrid, España,
2000. 832 pp.