Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Octubre de 2013
CONTENIDO
LISTADO DE TABLAS
Tabla 1.30
Tabla 2.31
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
frases se representan mediante una estructura de rbol sintctico, siguiendo
reglas que describen el lenguaje.
6
10
11
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.
12
13
Imagen 13. Salida en pantalla del programa introduc.cpp con Turbo C++3.0
14
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.
15
17
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.
Simbolo
B
Kb
Mb
Gb
Tb
Valor
8 bits
1.024 bytes
1.024 kilobytes
1.024 megabytes
1.024 gigabytes
Espacio memoria
8 bits
8 bits
16 bits
32 bits
32 bits
32 bits
16 bits
32 bits
Rango permitido
0 a 255
-128 a 127
-32,768 a 32,767
0 a 4,294,967,295
-2,147,483,648 a 2,147,483,647
0 a 4,294,967,295
-2,147,483,648 a 2,147,483,647
-2,147,483,648 a 2,147,483,647
21
32 bits
64 bits
80 bits
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
Char
Short int
Float
Varchar
Datos
La letra X
El nmero 100
El nmero 125.12
La frase Aprenda usted mismo
Bytes requeridos
1
2
4
21
22
23
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
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
24
25
26
27
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.
28
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);
cout<< "!! HOLA, " ;
puts(nombre);
gotoxy(43,12);
cout<< " !!";
31
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
#include <iostream.h>
#include <conio.h>
#include <string.h>
using namespace std;
int main()
{
32
33
34
35
37
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
38
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 ;
delete numero ;
getch();
}
El resultado en pantalla de Progra16.cpp se puede visualizar en la Figura 9.
40
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).
42
Progra17.cpp
/*
Tema: Gestin dinamica de memoria
Curso: 301305 Estructura de datos
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];
43
45
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().
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
int P = 10;
int *x, *y;
y = &P;
x = y;
cout<< El resultado de x es : << x ;
Enunciado 2
Intpunt;
punt = punt + 1;
punt = punt 2;
punt++;
punt--;
// 1
// 2
// 3
// 4
// 5
int main()
{
int m, *h, **s, ***q ;
clrscr();
h =&m ;
*h = 80 ;
s = &h ;
**s += *h ;
q = &s ;
***q += **s + *h ;
cout<< " *h=" << *h << " \n" ;
cout<< " **s=" << **s << " \n" ;
cout<< "***q=" << ***q << " \n" ;
getch();
}
// 1
// 2
// 3
// 4
// 5
// 6
// 7
//8
//9
//10
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.
47
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.
48
49