You are on page 1of 51

INTRODUCCIN A LA ESTRUCTURA DE DATOS

Aplicacin de los entornos de desarrollo C++

INTRODUCCIN A LA ESTRUCTURA DE DATOS

Aplicacin de los entornos de desarrollo para C++


Hermes Mosquera Angulo

Octubre de 2013
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

CONTENIDO

1. ENTORNO DE PROGRAMACIN C++.............................................................5

1.1 Conceptos Bsicos de los Compiladores........................................................5

1.2 Entorno de desarrollo del compilador Borland C++5.5....................................7

1.4 Entorno de desarrollo del compilador DevC++4.9.9.2...................................16

1.5 Programas de Aplicacin................................................................................19

2.1 Conceptos Bsicos de Memoria....................................................................20

2.3 Conceptos bsicos de apuntadores...............................................................26

2.4 Ms acerca de apuntadores...........................................................................29

2.5 Apuntadores a Apuntadores...........................................................................35

3. OPERADORES DE C++ PARA LA GESTIN DINMICA DE MEMORIA.......38

3.1 Operadores New y Delete..............................................................................38

3.2 Entorno de desarrollo IDE Falcon c++..........................................................41

Actividades de Autoevaluacin.............................................................................46

Fuentes Bibliogrficas..........................................................................................48
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

LISTADO DE TABLAS

Tabla 1.30

Tabla 2.31
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

LISTADO DE GRFICOS Y FIGURAS

Figura 1 Salida en pantalla de progra3.cpp............................................................30

Figura 2 Salida en pantalla de progra4.cpp............................................................31

Figura 3 Salida en pantalla de progra5.cpp............................................................32

Figura 4 Salida en pantalla de progra7.cpp............................................................34

Figura 5 Salida en pantalla de progra9.cpp............................................................35

Figura 6 Salida en pantalla de progra10.cpp..........................................................36

Figura 8 Salida en pantalla de progra15.cpp..........................................................39

Figura 9 Salida en pantalla de progra16.cpp..........................................................40


INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

INTRODUCCIN A LA ESTRUCTURA DE DATOS

1. ENTORNO DE PROGRAMACIN C++

Introduccin

El presente apartado aborda la temtica de algunos de los entornos de desarrollo


ms comunes para la programacin de C++ y la aplicabilidad que tienen en el
campo de la programacin estructurada.

Finalmente se presentan actividades de aplicacin para ser desarrolladas y


cdigos fuentes de C++ para que el estudiante los edite en cada uno de los
compiladores y genere as la habilidad y competencia para desarrollar programas
en C++ independiente del compilador que utilice.

1.1 Conceptos Bsicos de los Compiladores

Son muchas las definiciones que se encuentran en diferentes fuentes a cerca de


los compiladores, entre ellas se comparte la definicin que hace Laborda (1985)
en tal sentido que un compilador es un programa informtico que traduce un
programa escrito en un lenguaje de programacin a otro lenguaje de
programacin, generando un programa equivalente que la mquina ser capaz de
interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero
tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este
proceso de traduccin se conoce como compilacin.

Para el lenguaje de programacin que nos ocupa, el compilador de C++ es un


programa que permite traducir el cdigo fuente de un programa en lenguaje de
alto nivel de C++ escrito por el programador a otro lenguaje de nivel inferior
conocido como lenguaje de mquina. De esta manera un programador puede
disear un programa en un lenguaje mucho ms cercano a como piensa un ser
humano, a travs de el editor de C++ o un editor de texto que puede ser el Bloc de
notas para luego compilarlo a un programa de fcil manejo por una computadora.

5
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

El objetivo del compilador es traducir un programa escrito en un cdigo fuente,que


llamaremos programa fuente, en un equivalente en otro cdigo denominado
objeto, al quellamaremos cdigo objeto o ejecutable. En el proceso de compilacin
si el programa fuente es correcto, es decir no presenta errores de sintaxis del
lenguaje se produce la traduccin; en caso contrario se obtiene unoo varios
mensajes de error que permita determinar lo ms claramente posible los orgenes
de laincorreccin. Dependiendo del compilador, la traduccin podr hacerse en
dos formas: Interpretacin y compilacin. En la interpretacin la traduccin se
hace frase a frase, mientras que en la compilacin la traduccin se hace del texto
completo.

Fases de un compilador.

Imagen 1. Estructura de las Fases de un compilador

Fuente: http://www.infor.uva.es/~mluisa/talf/docs/aula/A7.pdf

Segn, AHO, Alfred y Otros (1998) los compiladores estn conformados en seis
fases que se describen a continuacin:

Anlisis lxico:La cadena de entrada se recibe como una sucesin de


caracteres. El anlisis lxico agrupa loscaracteres en secuencias con significado
colectivo y mnimo en el lenguaje, llamadas componenteslxicos.

Anlisis sintctico:Los componentes lxicos se agrupan para formar frases. El


valor lxico de los componentes es en este momento irrelevante. Normalmente las
6
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

frases se representan mediante una estructura de rbol sintctico, siguiendo


reglas que describen el lenguaje.
Anlisis semntico:En esta etapa se revisa el resultado del anlisis sintctico,
recopilando por ejemplo informacin de tipos y construyendo una representacin
an ms abstracta.

Generacin de cdigo intermedio:Despus de los anlisis sintctico y


Semntico algunos compiladores generan en esta fase un cdigo intermedio para
una mquina abstracta, y es posible que sea explcita del programa fuente. Esta
representacin se caracteriza por ser fcil de producir y fcil de traducir al
programa objeto.

Optimacin de cdigo:Se trata en esta fase de mejorar el cdigo, en el sentido


de reducir la cantidad de recursos de tiempoy memoria necesarios. Algunas
optimaciones son triviales, como por ejemplo hacer algunastransformaciones
directamente en la compilacin, en lugar de dejarlo para la ejecucin. Otras
pueden requerir un trabajo mucho mayor, pero mejorar significativamente
la eficiencia, normalmente a costa de alejarse bastante del cdigo original, como
eliminar cdigo inactivo, eliminar variables intermedias o resituar sentencias
independientes deun bucle fuera de ste.

Generacin de cdigo objeto:En esta fase final se genera por fin el cdigo
objeto, normalmente cdigo fuente, de mquina. Se seleccionan posiciones de
memoria relativas o registros para las variables y cada sentencia del cdigo
intermedio se traduce a una secuencia de instrucciones que ejecutan la tarea.

1.2 Entorno de desarrollo del compilador Borland C++5.5

El compilador Borland C++5.5 es un compilador de uso libre disponible en la web


Se presentan algunas ventajas significativas de este compilador comparado con
Turbo C++ 3.0. El editor de Borland C++5.5 es mucho ms flexible, ya que desde
su editor permite copiar y pegar el cdigo como se hace con cualquier aplicacin
de windows, los caracteres especiales responden de acuerdo a la configuracin
del idioma de su teclado, basta con compilar el programa para que se genere el
cdigo objeto o cdigo ejecutable con extensin (.exe), que es el archivo a
visualizar como salida en pantalla. Es importante saber que el ejecutable se crea
en la misma ruta donde tiene guardado el cdigo fuente, es decir, el archivo con
extensin .cpp.

Una vez que haya descargado e instalado el compilador, puede acceder al entorno
del editor tal como se muestra en la imagen 2. El panel superior resaltada en el
circulo de color rojo el rea de edicin; mientras que el panel inferior donde se
visualiza el circulo de color azul es el rea de compilacin y ejecucin del
programa.
7
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Imagen 2. Entorno de desarrollo de Borland C++5.5

Despus de haber editado el cdigo fuente se procede a guardar el archivo en la


ruta que prefiera, por defecto el editor guarda el cdigo en C:\Borland\BCC55\Bin,
recuerde que el ejecutable tambin se guarda por defecto en esa misma ruta.

Proceso de compilacin:Para compilar el programa solo tiene que ubicar en la


barra de men del compilador la opcin Tools y dar clic en la opcin Compile o
presione las teclas Ctrl + F7. Recuerde que la opcin de compilar figurar activa
siempre y cuando haya guardado el archivo fuente con su respectiva extencin
(.cpp), en caso contrario la opcin compilar estar inactiva en el Men Tools.

Si el cdigo fuente no presenta errores de sintaxis el resultado de la compilacin


arroja como resultado la expresin:Exitcode = 0 tal como se visualiza en la
imagen 2, en el circulo resaltado en color azul. En caso contrario, es decir si hay
errores de sintaxis o errores lgicos de compilacin da como resultado Exitcode =
1a dems el compilador indica los posibles causas del error tal como se visualiza
en la siguiente imagen 3.

8
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Imagen 3. Entorno de compilacin de Borland C++5.5

Generalmente el error se localiza en la lnea anterior del mensaje de error que


indica el compilador; en este caso el compilador indica en la lnea de color amarillo
que hay un error de sintaxis en la lnea 5; analizando el cdigo se observa que
falta un punto y coma en la terminacin de la lnea 4. Se procede a hacer la
correccin y guardar los cambios como si fuera una aplicacin de Windows. Se
compila nuevamente hasta obtener Exitcode = 0.

Proceso de ejecucin: Hay dos opciones bsicas de ejecutar el programa


particularmente prefiero la segunda opcin.
La primera opcin de ejecucin con Borlan C++5.5 se realiza despus de haber
compilado el programa, se procede ingresando a la opcin Tools de la barra de
mens y seleccionar la opcin Go. Se muestra la ejecucin del programa en el
panel inferior del editor; en el ejemplo se pide que ingrese su nombre tal como se
visualiza en la imagen 4 siguiente.

9
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Imagen 4. Entorno de ejecucin de Borland C++5.5

La segunda Opcin de ejecucin del programa con Borlan C++5.5 se realiza


ejecutando el archivo ejecutable que se crea en el momento de la compilacin,
este archivo lleva el mismo nombre del programa fuente y queda guardado en la
misma ruta y este se guarda por defecto con la extensin (.exe). Para ejecutar
solo tiene que dar doble clic en este archivo y se inicia la ejecucin del programa
tal como se muestra a continuacin.

Imagen 5. Programa en ejecucin con Borland C++5.5

10
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Aplicacin del compilador Borland C++5.5


Como ejercicio de aplicacin se propone el siguiente cdigo para que lo edite a
travs del compilador, posteriormente lo guarda con el nombre introduccin.cpp en
la ruta que prefiera y proceda a ejecutarlo de las dos formas indicadas en la
seccin anterior.

Anlisis del cdigo fuente. En el cdigo se presentan la funcin principal main()


y dos funciones ms, una llamada portada que muestra datos de la portada y la
otra llamada clculo, que realiza un calculo matemtico y muestra el resultado.
En la lnea 1 se incluye la librera iostream utilizada para los operadores de
entrada y salida de datos.
En las lneas 2 y 3 se declaran las funciones portada y calculo las cuales no
retornan ningn valor por esa razn son declaradas de tipo void.
En la lnea 4 se declaran las variables globales de tipo entero utilizadas por la
funcin calculo.
De la lnea 5 a la lnea 12 se define la funcin principal main.
De la lnea 13 a la 19 se define la funcin portada, en sus instrucciones solo
muestra mensajes en pantalla.
De la lnea 20 a la 31 se define la funcin clculo, sus instrucciones realizan un
clculo matemtico y muestra el resultado.

Imagen 6.Cdigo fuente del programa introduccin.cpp presentado en el editor de


Borland C++5.5

11
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

12
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

1.3 Entorno de desarrollo del compilador Turbo C++3.0

El compilador Turbo C++3.0 es un entorno de desarrollo integrado y compilador


desarrollado por Borland para programar en lenguaje C y C++. Es uno de los
compiladores bsicos ms utilizado, es de uso libre, disponible en varios sitios de
la web para su descarga.

Una vez instalado el compilador se crea un cono en su escritorio solo debe


ejecutarlo para abrir el editor. Si desea ejecutarlo manualmente debe ir a la
carpeta: C:\TCPP\BIN y ejecutar el archivo: tc.exe, aparecer la siguiente interfaz:

Imagen 7. Inicio del compilador Turbo C++3.0

El mensaje que se muestra en la imagen 7, indica que el sistema no soporta el


modo de pantalla completa cuando se instala el compilador en plataforma
Windows 7, es un mensaje que no impide su ejecucin, solo debe dar clic en el
botn omitir y de inmediato se habilita el editor de C++ tal como se muestra en la
imagen 8:

Imagen 8. Barra de mens del compilador Turbo C++3.0

Solo debe seleccionar del men File la opcin New y obtiene el editor para iniciar
la edicin de un nuevo programa. Despus de la edicin se debe guardar el
programa en la ruta que desee siempre con la extensin .cpp antes de proceder a
compilar.

13
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Imagen 9. Editor del compilador Turbo C++3.0

Opcin para compilar el programa


Una vez haya editado el cdigo se procede a realizar la compilacin para
determinar y corregir posibles errores de sintaxis que puedan presentarse.

Imagen 10. Opcin de compilar en Turbo C++3.0

Opcin para ejecutar el programa


La ejecucin del programa se lleva a cabo despus de que en el proceso de la
compilacin indique que el cdigo est depurado libre de errores de sintaxis y
lgicos.

Imagen 11. Opcin de ejecutar en Turbo C++3.0

14
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Imagen 12. Cdigo fuente del programa introduc.cpp presentado en el editor Turbo
C++ 3.0

Imagen 13. Salida en pantalla del programa introduc.cpp con Turbo C++3.0

15
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Anlisis del resultado

Para tener una idea de la diferencia que puede presentarse con el cdigo fuente
entre los diversos compiladores, se realiza la comparacin del cdigo fuente del
programa introduccin.cpp que se present con borland C++5.5 y el mismo
programa presentado con turbo C++3.0.

Se tom el cdigo introduccin.cpp que se compil en Borland C++5.5 y llevarlo al


editor de Turbo C++3.0 se guard con el nombre introduc.cpp, posteriormente se
compil y se gener el siguiente mensaje de error el cual indica que la funcin
system no tiene un prototipo, esto significa que esta funcin system requiere una
librera y esa librera es stdlib.h; librera que no requiere el compilador borlan C+
+5.5 porque cuando se compil el programa en ese compilador no gener el
mensaje de error.

Finalmente para solucionar el error solo se incluye en la segunda lnea del cdigo
la instruccin #include<stdlib.h> y listo, se guardan los cambios y se compila
nuevamente.

Imagen 14. Mensaje de error al compilar introduc.cpp en Turbo C++3.0

Una de las ventajas que ofrece este compilador es que atravs de la opcin de
ayuda Helpde la barra de mens, se puede determinar cual es el prototipo o
librera que falta incluir en el cdigo, es de esa manera que se identific que la
funcin system requiere la librera stdio.h.

Veamos como hacer uso del men de ayudas de Turbo C++3.0. Teniendo en el
editor el programa introduccin.cpp que se utiliz con Borland C++5.5. Solo debe
ingresar a la opcin del men Help y seleccionar del men contextual la opcin
Index le muestra algo similar a la imagen 15.

16
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Sobre esa interfaz solo escribe la palabra system que es una palabra reservada
del lenguaje C++ la que gener el error y cuando aparezca resaltada tal como se
muestra en la imagen siguiente presiona la tecla Enter.
Imagen 15. Opcin Index del men de ayudas de turbo C++3.0

Muestra entonces las ayudas asociadas a esa funcin, en la imagen siguiente se


observa que son necesarias las libreras stdlib.h o process.h; cualquiera de las
dos libreras soluciona el error mostrado en la compilacin. Para cerrar esta
ventana de ayudas solo presiona la tecla de escape esc.

Imagen 16. Informacin de ayudas de la funcin system() en turbo C++3.0

Hay muchas ms ventajas significativas de este compilador, otra de ellas es


realizar seguimiento paso a paso de la ejecucin del programa y conocer el valor
que van almacenando las variables, esto se hace con la opcin Watches que
figura en el men contextual de la opcin de la barra de men Debug. Es
importante que la realice como actividad complementaria.

1.4 Entorno de desarrollo del compilador DevC++4.9.9.2

DevC++4.9.9.2es un completo entorno de desarrollo integrado para programacin


en C/C++. De uso libre que permite trabajar con varios tipos de proyecto
incluyendo tanto aplicaciones visuales como aplicaciones de consola. Presenta un
kit de herramientas que ayudarn al usuario a desarrollar su cdigo desde cero
17
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

hasta un producto final completamente depurado. DevC++4.9.9.2cuenta con un


sistema de ventanas organizadas por pestaas que permite escribir el cdigo
directamente en el editor, una ventana de exploracin para las clases y elementos
del proyecto y un sistema de correccin del cdigo integrado.

Este compilador por ser de uso libre est disponible en la web en sus diferentes
versiones, despus de su instalacin requiere configurar algunas propiedades, la
configuracin de este compilador puede consultarla en la web.

Imagen 17. Cdigo fuente del programa introduccion.cpp presentado en el


compilador DevC++4.9.9.2

El procedimiento de la edicin es similar al utilizado para Borland C++5.5, el


entorno de desarrollo es amigable, permite copiar y pegar cdigo en el editor. Al
realizar la comparacin del cdigo del programa introduccin.cpp que se trabaj
como ejemplo en los anteriores compiladores solo requiere agregarle la instruccin
Usingmamespacestd; inmeditamente despus de los archivos de cabecera o
libreras tal como se muestra en la imagen anterior.

18
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Opciones de compilacin y ejecucin

Las opciones de compilacin y ejecucin se identifican elel rea cubierta de color


rojo en la siguiente imagen.

Imagen 18. rea de compilacin y ejecucin en DevC++4.9.9.2

Otra forma de compilar y ejecutar el programa haciendo uso de la barra de mens


seleccionando la opcin Ejecutar.

Imagen 19. Compilar y ejecutar desde la barra de mens de DevC++4.9.9.2

Sin embargo es importante mencionar que se han identificado algunas


caractersticas especiales de este compilador, no trae la librera conio.h porque
esta no es estndar del lenguaje, por esa razn marca como error la funciones
gotoxy(),clrscr(), getch() entre otras. Sin embargo esta librera puede ser
configurada desde las opciones update del compilador.

La funcin getch()utilizada en varios programas se puede remplazar con la funcin


getchar() o por la funcin system (PAUSE) tal como se muestra en el cdigo del
ejemplo.

La funcin gotoxy() es utilizada para dar posicin al texto en la pantalla.la funcin


clrscr() utilizada para limpiar pantalla, El compilador DevC++ no permite que la

19
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

funcin principal main() sea declarada de tipo void, as: voidmain() declaracin
que si la permite Borland C++5.5 y Turbo C++3.0 en su cdigo fuente; en este
caso se remplaza el tipo voidporintquedando la funcin principal como intmain() y
al final del cdigo debe adicionrsele la instruccin return 0.

Imagen 20. Programa introcuccion.cpp en ejecucin con DevC++4.9.9.2

1.5 Programas de Aplicacin

Esta leccin tiene como objetivo dar aplicabilidad al uso de los compiladores que
se han presentado en las lecciones anteriores y otros compiladores de C++ que
usted est familiarizado o que desee utilizar.

En tal sentido se proponen los siguientes programas para que usted y su grupo
colaborativo los implementen en cada uno de los tres compiladores que se han
presentado y de esta mera puedan identificar y establecer las diferencias entre
ellos, esta prctica le permitir familiarizarse con los compiladores, de tal manera
que usted tenga su propia percepcin y pueda elegir con cual o cuales de ellos
iniciar el desarrollo del curso.

Para iniciar se propone recordar a travs de la codificacin de programas algunas


temticas que se tratan en el curso Introduccin a la programacin que se espera
haya aprobado.

Aplicacin a funciones.

Implemente un programa codificado en C++ que permita leer dos nmeros y a


travs de un men de opciones muestre las cuatro operaciones bsicas de
suma, resta, multiplicacin y divisin; de tal manera que si se selecciona la
opcin suma el programa muestre en pantalla el resultado de la suma de los
dos nmeros ledos al inicio. En caso de seleccionar la resta se espera que el
resultado a mostrar en pantalla sea la diferencia entre los nmeros y de igual
manera para las otras dos opciones.

20
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Implemente un programa codificado en C++ que permita realizar la conversin


de monedas a travs de un men de opciones muestre la conversin de pesos
a dlares y a euros as: si se selecciona la opcin dlar el programa muestra
en pantalla el resultado de la conversin de un valor dado en pesos a dlares.
Y seguir el mismo procedimiento para convertir pesos a euros.

2. GESTIN DE MEMORIADINMICA

Introduccin

La gestin dinmica de memoria hace referencia a la forma enque se almacenan


los datos en la computadora. Tiene relacin directa con las varibles, los tipos de
datos que maneja el lenguaje C++ y el nmero de bytes requeridos para
almacenar cada tipo de dato en la memoria del computador, aunque este tema es
transparente para el usuario normal de un sistema computacional, si debe ser
motivo de preocupacin para los programadores, que estn llamados a hacer
buen uso de los recursos tanto fsicos como lgicos.

En la memoria del computador se guardan no solo las constantes y variables sin


tambin lasinstrucciones del programa.Cada objeto y cada instruccin en la
memoria tienen previamente asignada una direccin nica.Slo se carga el
programa principal en la memoriainicialmente. El resto de subprogramas,
algoritmos yfunciones se va cargando segn se van requiriendo.

2.1 Conceptos Bsicos de Memoria

En la computadora se identifican tres tipos de memoria: la memoria auxiliar,


representada por los discos duros, las memorias conocidas como usb entre otros.

La memoria (ROM) conocida como memoria de solo lectura, la cual es usada para
almacenar aplicaciones y datos de forma permanente.La informacin
generalmente es colocada desde su fabricacin en el chip de almacenamiento de
tal manera que su contenido no puede ser alterado por un programa de usuario.
Por ese motivo es una memoria slo de lectura.

Otro tipo de memoria es la (RAM) memoria de acceso aleatorio,utilizada para


almacenar informacin mientras est en funcionamiento. La RAM se encuentra en
circuitos integrados o chips en el interior de la computadora. Es voltil, lo que
significa que es borrada y reemplazada con nueva informacin tan pronto como se
necesita. La volatilidad tambin significa que la RAM recuerda solamente
21
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

mientras la computadora est encendida, y pierde su informacin cuando se


apaga o se reinicia la computadora.

Cada computadora tiene una determinada cantidad de RAM instalada que va


directamente relacionada con la capacidad y rendimiento del equipo, hace unos
pocos aos la cantidad de memoria RAM en un sistema se especificaba por lo
general en Megabytes (Mb) por ejemplo 256 Mb, 512 Mb, hoy por hoy debido a los
avances tecnolgicos, el uso de la Internet y la masificacin de la informacin en
multiples formatos ha hecho que los equipos de esta nueva generacin estn
dotados de de mayores recursos tantyo fsicos como lgicos, es por ello que la
memoria de los equipos de est poca se especifica en Gigas y seguramente
seguir creciendo con el paso de los aos.

En ese orden de ideas se dice que un byte es la unidad fundamental de medida


que consta de 8 bits en procesamiento de informacin digital delos datos que
maneja la computadora, que de acuerdo a su tamao o su peso entre los ms
comunes se tiene los Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes.

Tabla 1. Tabla de equivalencias entre unidades de medida de almacenamiento

Nombre Simbolo Valor


Byte B 8 bits
Kilobyte Kb 1.024 bytes
Megabyte Mb 1.024 kilobytes
Gigabyte Gb 1.024 megabytes
Terabyte Tb 1.024 gigabytes

Tipos de datos comunes

En la tabla 2 se muestran los tipos de datos comunes y el espacio en memoria de


cada dato en bitsutilizados frecuentemente en C++.

Tabla 2:Tipos de datos comunes y su espacio en memoria en bits

Tipo de dato Espacio memoria Rango permitido

unsignedchar 8 bits 0 a 255

Char 8 bits -128 a 127

short int 16 bits -32,768 a 32,767

unsignedint 32 bits 0 a 4,294,967,295

22
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Int 32 bits -2,147,483,648 a 2,147,483,647

unsignedlong 32 bits 0 a 4,294,967,295

Enum 16 bits -2,147,483,648 a 2,147,483,647

Long 32 bits -2,147,483,648 a 2,147,483,647

Float 32 bits 3.4 x 10-38 a 3.4 x 10+38(6 dec)

Doubl 64 bits 1.7 x 10-308 a 1.7*10+308(15 dec)

long doubl 80 bits 3.4 x 10-4932 a 1.1 x 10+4932

Void sin valor


Fuente: http://www.wikilearning.com/tutorial/tutorial_de_c++-tipos_de_datos/9773-4

Para darse una idea de cuantos bytes se requieren para almacenar datos de
diferentes tipos medido en trminos de bytes se presenta la siguiente tabla:

Tabla 3: cantidad de Bytes requeridos para los tipos de datos comunes

Tipo de dato Datos Bytes requeridos

Char La letra X 1

Short int El nmero 100 2

Float El nmero 125.12 4

Varchar La frase Aprenda usted mismo 21

Es posible realizar una representacin de la Tabla 2 en trminos de programacin


para visualizar el espacio requerido en memoria de cada tipo de datos presentado
en bits como medida del sistema binario, haciendo uso del operador sizeof que
permite determinar el tamao de un tipo de dato como parmetro.Vemosuna
aplicacin del operador sizeof en el siguiente programa.

Imagen 21. Programa1.cpp

23
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Ya se tiene el cdigo fuente grabado en el compilador DevC++4.9.9.2 con el


nombre de programa1.cpp, ahora solo resta compilar y ejecutar el cdigo para
obtener el siguiente resultado como salida en pantalla.

Imagen 22. Salida en pantalla de programa1.cpp

2.2 Asignacin de memoria

La asignacin de memoria consiste en el proceso de asignar memoria para


propsitos espcificos, ya sea en tiempo de compilacin o de ejecucin. Si es en
tiempo de compilacin la asignacin es esttica, pero si es en tiempo de ejecucin
la asignacin es dinmica y si son variables locales a un grupo de sentencias se
denomina asignacin automtica.

La cantidad de memoria asignada a almacenar en las variables no se conoce de


antemano, lo cual lleva a difrenciar dos tipos de reserva de memoria:

Asignacin esttica de memoria: Implica predeterminar la cantidad de memoria


que se asignar a la variable. Hay que tener en cuenta que al agotar la zona de
memoria previamente asignada no se podran almacenar nuevos elementos. La
asignacin esttica de memoria consiste en el proceso de asignar memoria en
tiempo de compilacin antes de que el programa asociado sea ejecutado.

24
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Aplicacin de las variables estticas

A continuacin se presenta el cdigo fuente del pograma2 que hace uso de las
variables estticas como aplicacin.

Imagen 23. Programa2.cpp

Anlisis de Programa2.cpp

En el cdigo del programa se declaran tres variables estticas de tipo entero, ellas
son: suma que se declara en la lnea 3, numero1 que se declara con el valor 136
en la lnea 7 y numero2 se declara con el valor 369 en la lnea 8, en la lnea 9 la
variable suma almacena la sumatoria de las variables numero1 y numero2.

Vemosla salida en pantalla.

Imagen 24. Salida en pantalla de programa2.cpp

Las Estructuras

Las estructuras tienen como finalidad agrupar una o ms variables generalmente


de diferentes tipos, bajo un mismo nombre, propiedad que facilita su manejo y la
interaccin entre tipos de datos. Un ejemplo tpico de una estructura puede ser

25
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

una ficha de datos bsicos de una persona como, el nombre, apallido, edad,
telfono, etc. Si se tratara de bases de datos se podra hablar de registros.

Para crear una estructura se debe definir los elementos que la componen, con ello
se definen las variables y el tipo de datos de cada una. Una estructura est
compuesta por el nombre de la estructura, los elementos de la estructura que
reciben el nombre de miembros y las instancias que son variables que
generalmente son del mismo tipo de la estructura utilizadas para acceder a los
miembros. La sintaxis es la siguiente

struct tipo_estructura
{
tipo miembro_1;
tipo miembro_2;
//
tipomiembro_n;
} lista de variable llamadas instancias;

La palabra reservada struct indica al compilador que se est definiendo una


estructura tipo_estructura; y cada miembro puede ser de un tipo primitivo (char, int,
float, etc.) o un tipo derivado como un puntero, una estructura o funcin.

Las variables de instancias pueden ser variables definidas del mismo tipo de la
estructura, se incluyen los apuntadores, utilizados en las estructuras dinmicas.

Imagen 25. Definicin de una estructura

En la lnea 1 se define la estructura de tipo persona

Entre las linesa 3 y 5 se declaran las variables conocidas como miembros de la


estructura, son ellos nombre y apellido que son un arreglo de tipo char que
almacena 15 caracteres, y edad que es de tipo entero.

En la lnea 5 despues de la llave que cierra el bloque de miembros se declaran las


instancias de la estructura, que pueden ser variables normales o apuntadores, en
el ejemplo se declara la variable apuntador que en este caso recibe el mismo
nombre y se identifica por que le precede el smbolo asterisco (*) a la variable
apuntador.
26
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Asignacin dinmica de memoria

Las variables dinmicas deben su nombre al hecho de que pueden ser creadas y
destruidas durante el tiempo de ejecucin de un mdulo o de un programa.

Para el manejo de variables dinmicas se hace indispensable la utilizacin de


apuntadores, as como de funciones especiales para la asignacin y liberacin de
la memoria correspondiente a dichas variables.

Se dedica una zona de memoria, pudiendo ser de un tamao predeterminado o


no, y en caso de sobrepasarse dicha zona de memoria se vuelve a asignar otra
zona, contigua o no, para permitir el almacenamiento de ms datos, siendo esta
una de las ventajas de la asignacin de memoria dinmica. De estamanera se
optimiza y se distribuyen los recursos de memoria especialmente cuando esta es
limitada entre muchas lneas de cdigo y gran cantidad de datos.

2.3 Conceptos bsicos de apuntadores

Un apuntador es una variable, que almacena como contenido una direccin de


memoria, de otra variable a la que apunta, dicha direccin representa el lugar
donde se almacena un dato. Los apuntadores tienen un tipo de dato especfico y
solo pueden apuntar a espacios de memoria con datos del mismo tipo. Por
supuesto, a partir de esa direccin de memoria puede haber cualquier tipo de
objeto: un char, un int, un float, un array, una estructura, una funcin u otro
puntero. Sern los programadores los responsables de decidir ese contenido.

Con los apuntadores es posible manipular estructuras de datos o asignar


memoria dinmica. Los apuntadores son una de las herramientas ms poderosas
con que cuenta el Lenguaje C++.

Declaracin de apuntadores

27
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Los apuntadores son variables dinmicas cuyos valores representan direcciones


de memoria correspondientes a otras variables del mismo tipo a las que apuntan.

La sintaxis para la declaracin de una variable de tipo apuntador es la siguiente:


tipo * identificador ; Donde, tipo hace referencia al tipo de datos de C++ como
int, char, float, entre otros e identificador, hace referencia al nombre de la
variable apuntador que est precedida por un asterisco (*).

Ejemplo:int *apunt; se declara el apuntador apunt de tipo entero. Se dice que:


"apunt va a apuntar avariables de tipo int"donde apunt es el nombre del
apuntador y (*) es el operador de indireccin que indica que apunt es un
apuntador.
En el ejemplo anterior, puede decirse que:
*apunt se refiere al objeto apuntado por apunt.
apunt es un apuntador a objetos de tipo int

Observe que el operador de indireccin utiliza el mismo smbolo que el operador


de multiplicacin. En este caso el asterisco le indica al sistema que se define una
variable apuntador.

Ejemplos:

int *x; x es un apuntador de tipo entero.


char *y; y es un apuntador de tipo carcter.
double *r, *s; r y s son apuntadores de tipo real doble precisin.

Operadores para trabajar apuntadores

Los operadores utilizados para trabajar variables apuntadores son el (* ) asterisco


llamado operador de indireccin, y el ( & ) ampersand, llamado operador de
direccin.

* toma su operando como una direccin de memoria y retorna la


informacin almacenada en ese lugar.
& devuelve la direccin de memoria de su operando.

Aplicacin prctica del uso de apuntadores

Imagen 25. Cdigo del programa3.cpp y la salida en pantalla.

28
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Vemos otro ejemplo en la implementacin de apuntadores


Imagen 26. Cdigo del programa3.cpp

Anlisis de Programa4.cpp

En la lnea 1 se incluye la librera o archivo de cabecera necesario para el buen


funcionamiento del programa y soportar la sintaxis del lenguaje, se pueden incluir
otras segn se requieran.

29
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

En la lnea 3, se define la funcin principal main() de tipo int, lo que indica que
puede retornarun valor de tipo entero valor.

En la lnea 5, se declaran las variablesllamadas automtica y apunt que son de


tipo entero.
En la lnea 6,se asigna el valor 100 a la variable automatica.
En la lnea 7, se asigna a apunt la direccin de memoria de la variable automtica
En la lnea 8, se muestra la salida en pantalla del valor de la variable automtica
que es 100.
En la lnea 9, se asigna el valor 200 al objeto apuntado por apunt. Es decir a la
variable automtica.
En la lnea 10, se muestra en pantalla el nuevo valor que tom la variable
automtica que para este caso es 200.
En la lnea 11, se muestra un mensaje indicando la direccin de memoria de la
variable apunt.
En la lnea 12, se muestra un mensaje indicando el valor de la variable apunt.
En la lnea 13, se muestra la instruccin para que el programa haga una espera
hasta que se presione una tecla.
En la lnea 14, se hace un retorno o salida de la funcin principal.
Finalmente en la lnea 15 se cierra la llave indicando que terminan las
instrucciones de la funcin principal.

El resultado del Programa4.cpp se puede observar en la imagen que se muestra a


continuacin.

Imagen 27. Salida en pantalla de programa4.cpp

2.4 Ms acerca de apuntadores

Un apuntador es una variable que solo puede contener un valor a la vez, por lo
que solo puede apuntar a un objeto al mismo tiempo.

Por otro lado, una variable cualquiera puede ser apuntada(referenciada) por varios
30
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

apuntadores, ya que su direccin de memoria puede ser almacenada en distintas


variables a la vez.
Al declarar un apuntador, se est especificando el tipo de variable al que va a
apuntar.

Por ejemplo, no podr declararse un apuntador a objetos de tipo int y despus


intentar utilizarlo para apuntar a objetos de tipo float.
Cuando se desee manejar un apuntador a cualquier tipo de objeto, se puede
declarar de tipo void, como en:
void *apuntadores ;

Aplicacin de apuntadores de tipo void

En el siguiente listado se muestra un ejemplo de aplicacin de un apuntador de


tipo void.

Progra3.cpp
#include <iostream.h>
#include <conio.h>
int main()
{
int entero=1 ;
float decimal=1.1 ;
void *apvarios=&entero;
// apvarios APUNTA A entero *(int *)apvarios="1"
// ASIGNA 1 AL OBJETO APUNTADO POR apvarios
cout<< "El valor de entero es: "<<entero<<"\n" ;
apvarios=&decimal ;
// apvarios APUNTA A decimal *(float *)apvarios="1.1"
// ASIGNA 1.1 AL OBJETO APUNTADO POR apvarios
cout<< "El valor de decimal es: "<<decimal ;
getch();
}

Anlisis de Progra3.cpp
Analicemos la siguiente instruccin:
*(int *)apvarios = 1 ;

En donde:

Apvarios, es un apuntador de tipo void.


(int *)apvarios est forzando a que apvarios apunte a objetos de tipo int.
31
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

*(int *)apvarios se refiere a un objeto de tipo entero apuntadopor apvarios.


En la grafica 1.1 se obtiene la salida en pantalla de Progr3.cpp.

Figura 1 Salida en pantalla de progra3.cpp

Apuntadores acadenas

Una cadena se puede declarar como un arreglo de caracteres cuyo ltimo


elemento es el caracter nulo. Utilizando la nomenclatura de arreglos, podemos
declarar un arreglo llamado nombre[] de tipo carcter asignndole la frase
COMERCIO:

char nombre[ ] = "COMERCIO" ;


La misma asignacin puede realizarse por medio de apuntadores, como se
observa en el siguiente enunciado.

char *nombre = "COMERCIO" ;

En este caso se define a nombre como un apuntador que apunta a datos de tipo
char, al que se le asigna la frase COMERCIO.

Aplicacin de apuntadores a cadenas

Progra4.cpp
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
int main()
{
char *nombre = "COMERCIO" ;
gotoxy(30,12);
32
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

cout<< "!! HOLA, " ;


puts(nombre);
gotoxy(43,12);
cout<< " !!";
getch();
}
En la figura 4, se visualiza la salida en pantalla de progra4.cpp, se presentan dos
funciones objeto de anlisis.
La funcin gotoxy() posiciona el mensaje o la salida en pantalla !! HOLA en las
coordenadas x=30 y y=12.
La funcin puts() es propia para el manejo de cadena de caracteres, muestra en
pantalla el contenido de la variable nombre.

Figura 2 Salida en pantalla de progra4.cpp

Apuntadores a arreglos

Los apuntadores pueden manejarse en un arreglo, de tal forma que:

char nombres[ ][5] = { "HUGO", "PACO", "LUIS" } ;es la declaracin de un arreglo


de cadenas, con asignacin de valores iniciales. Su equivalente en notacin de
apuntadores es:

char *nombres[ ] = { "HUGO", "PACO", "LUIS" } ;


En el que se declara un arreglo de apuntadores con tres valores asignados. El
programa completo para el manejo de este ejemplo se presenta en el Progra5.cpp.

Implementacin de arreglos de apuntadores

Progra5.cpp
33
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

#include <iostream.h>
#include <conio.h>
#include <string.h>
using namespace std;
int main()
{
char *nombres[ ] = { "HUGO", "PACO", "LUIS" } ;
char invitado[11];
int bandera;
clrscr();
gotoxy(20,5);
cout<< "CUAL ES SU NOMBRE ?:" ;
gotoxy(50,10);
cin>>invitado ;
gotoxy(20,7);
for(int x = 0 ; x <3 ; x++ )
if(strcmp(invitado, nombres[x])== 0)
bandera=0;
if(bandera== 0)
cout<< "!! SIGA AMIGO ES BIENVENIDO " << invitado <<" !!";
elsecout<< "!! USTED NO ES BIENVENIDO, " << invitado <<" !!";
getch();
}

En la figura 5, se visualiza el resultado de la salida en pantalla de Progra5.cpp, en


el que se incluye la librera <string.h> necesaria para el manejo de cadena de
caracteres con las funciones de comparar cadena (strcmp); la cual compara el
nombre solicitado por teclado con los nombres asignados al arreglo previamente,
en caso de que coincida muestra el primer mensaje de bienvenida, de lo contrario
muestra el segundo mensaje.

Figura 3 Salida en pantalla de progra5.cpp

34
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Implementacin de la funcin valor() con apuntadores como parmetros

En el siguiente listado se muestra el manejo de la funcin valor(), por medio de


apuntadores.

Progra7.cpp
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>

voidvalor(char *);
int main()
{
char cadena[81];
gotoxy(10,5);
cout<< "ESCRIBA UNA CADENA: ";
gets(cadena);
gotoxy(10,7);
valor(cadena);
getch();
}

void valor(char *apuntador)


{
while(*apuntador)
cout<< *apuntador++ ;
}

Analizando este listado y comparndolo con el progra6.cpp se observa que la


diferencia radica en el parmetro de la funcin llamada valor() que par este caso
es un apuntador de tipo char que guarda una cadena y para el progra6.cpp es un
arreglo de caracteres, que igualmente almacena una cadena y posteriormente
despliega el resultado, tal como se puede evidenciar en la figura 7, que se muestra
a continuacin.

35
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Figura 4 Salida en pantalla de progra7.cpp

2.5 Apuntadores a Apuntadores

Tal como se trat al inicio de captulo, un apuntador tambin es una variable. Su


direccin puede ser almacenada por otra variable apuntador del mismo tipo, por lo
que puede hablarse de un apuntador a un apuntador.

Esto puede difundirse para dos o ms variables, como se observa en el ejemplo


siguiente de apuntadores a apuntadores.

Implementacin de apuntadores a apuntadores

Progra9.cpp
#include <iostream.h>
#include <conio.h>

int main()
{
int x, *a, **b, ***c ; // 1
clrscr();
a =&x ; // 2
*a = 100 ; // 3
b = &a ; // 4
**b += *a ; // 5
c = &b ; // 6
***c += **b + *a ; // 7
cout<< " *a=" << *a << " \n" ;
cout<< " **b=" << **b << " \n" ;
cout<< "***c=" << ***c << " \n" ;
getch();
}

36
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

En el listado se analizan tres variables de tipo apuntador que apuntan a objetos de


tipo entero, es decir que *a es un apuntador, **b es un apuntador a apuntador y
***c es un apuntador a apuntador a apuntador.
Anlisis de Progra9.cpp

En el listado del progra9.cpp se declaran tres variables de tipo apuntador que


apuntan a datos de tipo entero, ellas son, *a, **b y **c. El apuntador a almacena la
direccin de la variable x, luego a al apuntador a se le asigna el valor de 100, lo
que indica que x vale 100, mientras que **b precedida de dos asteriscos indica
que es una variable que apunta a un apuntador, para este caso b guarda la
direccin de el puntero a, y ***c es un apuntador a apuntador a apuntador, lo cual
puede simplificarse en que c guarda la direccin de b. El resultado del listado
Progra9.cpp se puede visualizar en la Figura.

Figura 5 Salida en pantalla de progra9.cpp

Operaciones aritmticas con apuntadores

Se pueden realizar asignaciones entre punteros.


int a = 15;
int *p, *q;
q = &a;
p = q; /* se asigna la direccin que contiene q a p */
cout<<p; /* imprime la direccin almacenad en p. */

Se pueden operar solamente el +, el -, el ++ y el --.


Int p;
p = p + 1; p avanza un entero.
p = p 2; p retrocede dos enteros.
p++; p apunta al siguiente entero.
p--; p apunta al entero anterior.

Los punteros se pueden comparar.


int a;

37
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

int *b, *c;


if (b + n > c)
b = b +2;

Como aplicacin a las operaciones que se pueden realizar con apuntadores, se


presenta el siguiente cdigo en un programa que emplea los operadores (& y *).

Progra10.cpp

#include <iostream.h>
#include <conio.h>

int main()
{
clrscr();
int a; //a es un puntero
int * ap; //ap es un apuntador a un puntero
a = 7;
ap= & a; //ap toma la direccin de a
cout<<"la direccin de a es " <<&a;
cout<<" \n el Valor de ap es " <<ap;
cout<<"\n el valor de a es" <<a;
cout<<"\n el valor de *ap es " << *ap;
cout<<"\n\n\n Mostrando los valores de * y &" ;
cout<<"\n &* ap = " <<&*ap;
cout<<"\n *&ap = " << *&ap;
getch();
return 0;
}

Anlisis de Progra10.cpp
Tal como se observa en la imagen es la salida en pantalla del programa en el que
se aprecia la diferencia entre el valor de la variable a que devuelve un valor
numrico igual a 7; mientras que la variable ap devuelve la direccin de memoria
de a.
Figura 6 Salida en pantalla de progra10.cpp

38
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

3. OPERADORES DE C++ PARA LA GESTIN DINMICA DE MEMORIA

3.1 Operadores New y Delete


El lenguaje C++ cuenta con dos operadores preconstruidos, ellos son: New y
Delete, por esta razn no se requiere incluir ninguna librera o archivo de
cabecera para utilizarlos.

El operador New: Realiza una labor parecida a la de la funcin malloc() utlilizada


en lenguaje C, asignando un bloque de memoria segn sea requerido.

El operador Delete: Libera un bloque de memoria asignada por New en tiempo


de ejecucin, de manera semejante a como lo hace la funcin free().
La sintaxis para el uso del operador new es:
Apuntador = new tipo_de_dato;

Donde Apuntador es el nombre de la variable apuntador que va almacenar la


informacin para el cual se reserva la memoria, mientras que new es el operador
de C++ encargado de reservar un bloque de memoria, y tipo_de_dato es el tipo
de dato de la variable apuntador llamada Apuntador.
Este operador hace una peticin al sistema operativo para que se le asigne un
espacio en memoria, con el tamao acorde al tipo de datos (vale la pena recordar
la funcin sizeof), si este espacio est disponible, la operacin regresa la direccin
real que se otorga, en caso de no haber espacio regresa el valor de NULL (0),

La sintaxis para liberar la memoria previamente asignada por new es atravs del
operador delete asi:

Delete Apuntador;

39
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

La ejecucin de este operador provoca que se libere espacio, dejando como valor
indefinido, es decir el sistema operativo lo considera como memoria disponible.

Hay una regla de oro utilizada por algunos autores, se refiere a que cuando se usa
memoria dinmica, toda la memoria que se reserve durante el programa hay que
liberarla antes de salir del programa. No seguir esta regla es una actitud muy
irresponsable, y en la mayor parte de los casos tiene consecuencias desastrosas
que atentan con la estabilidad de su sistema. No es bueno fiarse de lo que diga el
compilador, de que estas variables se liberan solas al terminar la ejecucin del
programa, no siempre puede ser as.
Aplicacin de los operadores New y Delete

Se presenta un ejemplo como aplicacin de los operadores de C++, utilizados


para asignar y liberar memoria dinmicamente.

El siguiente muestra un ejemplo de aplicacin de los operadores new y delete.

Progra15.cpp
#include <iostream.h>//1
#include <conio.h> //2
using namespace std;
int main() //3
{ //4
int *numero; //6
numero = new int ; //7
*numero = 10 ; //8
cout<<"VALOR DE NUMERO\n\n"; //9
cout<<"El resultado de numero es:" <<*numero ; //10
delete numero ; //11
getch(); //12
} //13
En el listado llamado Progra15.cpp, se supone que la reservacin ser exitosa
porque existe espacio suficiente en el montculo.

Del listado se puede analizar lo siguiente:

En las lneas 1 y 2 se incluyen las libreras requeridas para la ejecucin del


programa sin errores de compilacin y ejecucin.
En la lnea 3 se incluye la funcin principal main() la cual no retorna ningn valor
por estar declarada como tipo void.
La lnea 4 se incluye la llave que da apertura a la funcin principal.
En la lnea 6 se declara un puntero llamado nmero y es de tipo entero.

40
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

En la lnea 7 se reserva un bloque de memoria dinmicade 2 bytes para manejarlo


por medio de nmero.
En la lnea 8 Asigna el valor 10 al objeto apuntado por numero.
En la lnea 9 se despliega un mensaje en pantalla.
En la lnea 10 se despliega el contenido del objeto apuntado por numero.
La lnea 11, libera el espacio de memoria asignado o manejado por numero.
En la lnea 12 se incluye la funcin getch(), la cual hace una parada del programa
a la espera que se presione una tecla para finalizar la ejecucin del programa.
Finalmente la lnea 13, se incluye la llave que cierra las instrucciones que hacen
parte de la funcin principal.
El resultado de la salida en pantalla se puede visualizar en la Figura8.

Figura 7 Salida en pantalla de progra15.cpp

Pero quin asegura que el espacio requerido por new est disponible?. Para
controlar esta situacin y evitar un mensaje de error por parte del sistema en
tiempo de ejecucin, en el listado siguiente se propone una nueva versin del
programa.

Implementacin de New para verificacin de memoria

Progra16.cpp

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int *numero;
if((numero = new int)==NULL)
{
cout<< "NO hay espacio suficiente\n";
exit(1);
}
*numero=20 ;
cout<<"Resultado\n\n";
cout<< "El resultado de numero es:"<<*numero ;
41
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

delete numero ;
getch();
}
El resultado en pantalla de Progra16.cpp se puede visualizar en la Figura 9.

Figura 8 Salida en pantalla de progra16.cpp

Cuando se utiliza new para reservar memoria para un vector, el tamao del vector
se sita entre corchetes, siguiendo al tipo:

int *intvector;
intvector = new int [20];
y se libera:
delete [ ] intvector;

Otro caso a considerar es la reserva de memoria con el operador new para un


arreglo, un ejemplo sera la reserva de memoria para crear un arreglo de 25
elementos de tipo double, en el montculo, puede declararse como:
Double *numero;
numero = new double[25];
De igual manera en su forma equivalente se tiene:
double *numero = new double[25];

En este ejemplo, se est declarando a nmero como un apuntador a variables


dinmicas de tipo doble; al tiempo que se le asigna el valor retornado por new.

El valor retornado por new es la direccin del inicio de un bloque de memoria del
tamao requerido para almacenar 25 elementos de tipo double.
En caso de que el montculo no disponga del espacio requerido, new retorna el
valor NULL (nulo).

3.2 Entorno de desarrollo IDE Falcon c++

42
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Falconc++ es un IDE muy sencillo, moderno, diseado para estudiantes, y no por


ello menos potentes que cualquier otro IDE profesional, practico e intuitivo y fcil
de manejar, corre en Pcs bajo Windows de 32 y 64 bits, cosa que no ocurre con
algunas versiones del Borland y DevC++.
Este IDE tiene una interfaz muy sencilla, pero muy potente, el editor esta
actualizado con las ltimas novedades, permite insertar las palabras instrucciones
en la medida que uno escribe, trae incorporado el compilador Mingw, y no hay
necesidad de crear proyectos si no se requiere. Tambin es portable, lo nico que
hay que hacer es copiar la carpeta Falcon C++ de archivos de programas(x86) a la
memoria y el actualiza todas las rutas.

En conclusin es un IDE para estudiantes, Tambin tiene un controlador de


paquetes para libreras no oficiales como la conio.

Para mirar cmo se descarga e instala puede acceder alvdeotutorial en el


siguiente link: https://www.youtube.com/watch?v=vbnXr75bXmA
Lo pueden descargar en http://falconcpp.sourceforge.net

Figura 10 Pagina de descarga dei IDE Falcon C++

Figura 11 Interfaz de edicin de Falcon C++

43
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Figura 12 Opciones de Compilacin y ejecucin

Vemos al compilador Falcon C++ en funcionamiento con una aplicacin de la


memoria dinmica con un programa que permite el registro del nombre y el cdigo
de un curso donde utilizamos una estructura llamada curso, el apuntador cred
como instancia de la estructura y funciones de insertar y visualizar manejadas a
travs de un men de opciones.

Progra17.cpp

/*
Tema: Gestin dinamica de memoria
Curso: 301305 Estructura de datos

44
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Compilador: Falcon C++


Autor: Hermes Mosquera
*/
#include <stdlib.h>
#include <iostream>

using namespace std; // usa espacios de nombre estandar


// estructura curso
struct curso
{
char nombre[20];
char codigo[6];
}*cred=NULL; // apuntador de tipo curso inicializado a NULL

// prototipo de las funcines


void insertar();
void visualizar();

//Funcin principal
int main()
{
int opcion;
do{
system ("cls");
cout<<"ADMINISTRAR CURSOS\n\n";
cout<<"\n1.Registrar cursos ";
cout<< "\n2.Listar cursos ";
cout<< "\n3. Salir";
cout<<"\n\nIngrese la opcion:";
cin>>opcion;
switch (opcion)
{
case 1: insertar();
break;
case 2: visualizar(); // llamado de la funcin visualizar
break;
case 3: delete cred; // liberacin de memoria
break;
default: cout<<"Opcion incorrecta";
45
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

break;
}
}while (opcion != 3);
system("PAUSE");
return EXIT_SUCCESS;
}
// definicion de la funcin que inserta los datos
void insertar()
{
cred = new curso;
cout<<"\nRegistrar el curso ";
cout<<"\n Nombre del curso : ";
cin>> cred->nombre;
cout<<"Codigo del curso : ";
cin>> cred->codigo;
}

//definicin de la funcin visualizar


void visualizar()
{
cout<<"\nCURSO REGISTRADO ";
cout<<"\nNombe : " << cred->nombre;
cout<<"\nCodigo : "<< cred->codigo;
cout<<endl;
system("pause");
}

El resultado en pantalla de Progra17.cpp se puede visualizar en la Figura 13

Figura 13 Salida en pantalla del progra17.cpp men de opciones

46
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Figura 14 Salida en pantalla del progra17.cpp Opcione1 Registrar cursos

Figura 15 Salida en pantalla del progra17.cpp Opcion2 Listar cursos

Actividades de Autoevaluacin

Ejercicio 1. Teniendo en cuenta la conceptualizacin y la aplicabilidad en el campo


de la programacin frente al uso de las variables estticas y las variables
dinmicas, realice un cuadro comparativo de las caractersticas, ventajas y
desventajas.

Ejercicio 2. Se requiere gestionar cadenas de caracteres, a travs de variables de


tipo char, establezca diferencias para la declaracin y definicin de variables
estticas y las variables dinmicas (Apuntadores) para este tipo de datos.

Ejercicio 3. Determinar las reglas del funcionamiento de los operadores new y


delete e identifique las principales diferencias entre la utilizacin de new y delete,
frente a la utilizacin de malloc() y free().

47
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Ejercicio 4. Aplicacin de operaciones con apuntadores.


Teniendo en cuenta los fundamentos tericos a cerca de las operaciones que se
pueden realizar con apuntadores, documente cada lnea de cdigo de los
siguientes enunciados.

Enunciado 1 No. de Lneas de cdigo

int P = 10; // 1
int *x, *y; // 2
y = &P; // 3
x = y; // 4
cout<< El resultado de x es : << x ; // 5

Enunciado 2

Intpunt; // 1
punt = punt + 1; // 2
punt = punt 2; // 3
punt++; // 4
punt--; // 5

Ejercicio 5. Analice el siguiente cdigo que es una aplicacin de apuntadores a


apuntadores, documente cada una de las 10 lneas de cdigo y exprese el
resultado de cada una de las variables.

Enunciado 3 No. de Lneas de cdigo

int main()
{
int m, *h, **s, ***q ; // 1
clrscr();
h =&m ; // 2
*h = 80 ; // 3
s = &h ; // 4
**s += *h ; // 5
q = &s ; // 6
***q += **s + *h ; // 7
cout<< " *h=" << *h << " \n" ; //8
cout<< " **s=" << **s << " \n" ; //9
cout<< "***q=" << ***q << " \n" ; //10
getch();
}
48
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Ejercicio 6. Implementar un programa que asigne memoria con new y delete, para
un arreglo de estructuras, el cual desea llevar los registros bsicos de 5
mascotas, como: raza, nombre, color y edad Ingresados por teclado, adems de
determinar en tiempo de ejecucin el tamao del arreglo a utilizar.

Ejercicio 7. Implemente un programa que imprima los datos bsicos de un


automvil (Marca, modelo, color, cilindraje) usando una estructura llamada
automvil, incluya variables de tipo apuntador, aplique los operadores New y
Delete para la gestin dinmica de memoria.

49
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

Fuentes Bibliogrficas

AGUILAR, Luis (2003). Fundamentos de programacin, algoritmos, estructura de


datos y Objetos, Tercera edicin. Espaa:McGRAW-HILL.

AGUILAR, Luis (200). Programacin en C++, Algoritmos, estructura de datos y


Objetos. Espaa:McGRAW-HILL.

AGUILAR, Luis (2003). Fundamentos de programacin, algoritmos, estructura de


datos y Objetos Tercera edicin. Espaa:McGRAW-HILL.

AGUILAR Luis, ZAHONERO Martnez (2004). Algoritmos y Estructuras de Datos.


Una perspectiva en C. Madrid-Espaa: McGraw-Hill.

BROOKSHEAR, J. Glenn (1995). Introduccin a las ciencias de la Computacin


(Cuarta Edicn). Edicin Espaola: Addison-Wesley Iberoamericana.

DEYTEL Y DEYTEL(1999). Como programa C++. Segunda Edicin. Mexico D.F:


Prentice Hall. McGRAW-HILL.

FARREL, Joyce (2000). Introduccin a la programacin lgica y diseo. Mexico


D.F: Thomson.

KENNETH C, Louden (2004). Lenguajes de programacin. Segunda edicin.


MexicoD.F: Thomson.

ESPINOZA, David (2004). Curso bsico de Algoritmia. Consultado en Octubre, 24


de 2008 en http://www.geocities.com/david_ees/Algoritmia/curso.htm.

MENDEZ, Justo (2004). Las tendencias en los lenguajes de programacin.


Consultado en Noviembre de 2008 en
http://www.ilustrados.com/publicaciones/EpZVVEZpyEdFpAKxjH.php.

CACERES, Abdiel (2005). Estructuras de datos en C++. Consultado en Febrero 25


de 2009 en http://computacion.cs.cinvestav.mx/~acaceres/courses/estDatosCPP/

ALGORITMIA.NET (2003). Grafos. Consultado en Noviembre de 2008 en


http://www.algoritmia.net/articles.php?id=18.

FUENTES, Arenas (1997). Reserva dinmica de Memoria. Consultado en Octubre


23 de 2008 en http://www.pablin.com.ar/computer/cursos/c1/allocate.html.
50
INTRODUCCIN A LA ESTRUCTURA DE DATOS
Aplicacin de los entornos de desarrollo C++

TEJADA, Hector (2005). Asignacin dinmica de Memoria y estructuras dinmicas.


Consultado en Octubre 23 de 2008 en
http://www.fismat.umich.mx/mn1/manual/node10.html.

DAVINSON, Steven (2001). Funcin CallocAnsi C. Consultado en Junio 23 de


2009 en http://www.conclase.net/c/librerias/funcion.php?fun=calloc.

SOTO, Lauro (2005). Manejo de Memoria. Consultado en Junio 23 de 2009 en


http://www.programacionfacil.com/estructura_de_datos/manejo_de_memoria.

51

You might also like