Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Octubre de 2013
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
CONTENIDO
LISTADO DE TABLAS
Tabla 1………………………………………………………………………………….30
Tabla 2………………………………………………………………………………….31
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Introducción
Fases de un compilador.
Fuente: http://www.infor.uva.es/~mluisa/talf/docs/aula/A7.pdf
Según, AHO, Alfred y Otros (1998) los compiladores están conformados en seis
fases que se describen a continuación:
Generación de código objeto:En esta fase final se genera por fin el código
objeto, normalmente código fuente, de máquina. Se seleccionan posiciones de
memoria relativas o registros para las variables y cada sentencia del código
intermedio se traduce a una secuencia de instrucciones que ejecutan la tarea.
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 edición; mientras que el panel inferior donde se
visualiza el circulo de color azul es el área de compilación y ejecución del
programa.
7
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
8
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
9
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
10
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
11
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Solo debe seleccionar del menú File la opción New y obtiene el editor para iniciar
la edición de un nuevo programa. Después de la edición se debe guardar el
programa en la ruta que desee siempre con la extensión .cpp antes de proceder a
compilar.
12
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
13
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Imagen 12. Código 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
14
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Para tener una idea de la diferencia que puede presentarse con el código fuente
entre los diversos compiladores, se realiza la comparación del código fuente del
programa introducción.cpp que se presentó con borland C++5.5 y el mismo
programa presentado con turbo C++3.0.
Finalmente para solucionar el error solo se incluye en la segunda línea del código
la instrucción #include<stdlib.h> y listo, se guardan los cambios y se compila
nuevamente.
Una de las ventajas que ofrece este compilador es que através de la opción de
ayuda Helpde la barra de menús, se puede determinar cual es el prototipo o
librería que falta incluir en el código, es de esa manera que se identificó que la
función system requiere la librería stdio.h.
Veamos como hacer uso del menú de ayudas de Turbo C++3.0. Teniendo en el
editor el programa introducción.cpp que se utilizó con Borland C++5.5. Solo debe
ingresar a la opción del menú Help y seleccionar del menú contextual la opción
Index le muestra algo similar a la imagen 15.
15
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación 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. Opción Index del menú de ayudas de turbo C++3.0
Este compilador por ser de uso libre está disponible en la web en sus diferentes
versiones, después de su instalación requiere configurar algunas propiedades, la
configuración de este compilador puede consultarla en la web.
17
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
18
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
función principal main() sea declarada de tipo void, así: voidmain() declaración
que si la permite Borland C++5.5 y Turbo C++3.0 en su código fuente; en este
caso se remplaza el tipo voidporintquedando la función principal como intmain() y
al final del código debe adicionársele la instrucción return 0.
Esta lección 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 práctica le permitirá familiarizarse con los compiladores, de tal manera
que usted tenga su propia percepción y pueda elegir con cual o cuales de ellos
iniciará el desarrollo del curso.
Aplicación a funciones.
19
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
2. GESTIÓN DE MEMORIADINÁMICA
Introducción
La memoria (ROM) conocida como memoria de solo lectura, la cual es usada para
almacenar aplicaciones y datos de forma permanente.La información
generalmente es colocada desde su fabricación 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 sólo de lectura.
21
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Para darse una idea de cuantos bytes se requieren para almacenar datos de
diferentes tipos medido en términos de bytes se presenta la siguiente tabla:
22
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
A continuación se presenta el código fuente del pograma2 que hace uso de las
variables estáticas como aplicación.
23
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Análisis de Programa2.cpp
En el código del programa se declaran tres variables estáticas de tipo entero, ellas
son: suma que se declara en la línea 3, numero1 que se declara con el valor 136
en la línea 7 y numero2 se declara con el valor 369 en la línea 8, en la línea 9 la
variable suma almacena la sumatoria de las variables numero1 y numero2.
Las Estructuras
Las estructuras tienen como finalidad agrupar una o más variables generalmente
de diferentes tipos, bajo un mismo nombre, propiedad que facilita su manejo y la
interacción entre tipos de datos. Un ejemplo típico de una estructura puede ser
una ficha de datos básicos de una persona como, el nombre, apallido, edad,
teléfono, etc. Si se tratara de bases de datos se podría 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
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
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;
Las variables de instancias pueden ser variables definidas del mismo tipo de la
estructura, se incluyen los apuntadores, utilizados en las estructuras dinámicas.
25
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Las variables dinámicas deben su nombre al hecho de que pueden ser creadas y
destruidas durante el tiempo de ejecución de un módulo o de un programa.
Declaración de apuntadores
26
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Ejemplos:
27
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Análisis de Programa4.cpp
28
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
En la línea 3, se define la función principal main() de tipo int, lo que indica que
puede retornarun valor de tipo entero valor.
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
29
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
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();
}
Análisis de Progra3.cpp
Analicemos la siguiente instrucción:
*(int *)apvarios = 1 ;
En donde:
30
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Apuntadores acadenas
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.
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
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
getch();
}
En la figura 4, se visualiza la salida en pantalla de progra4.cpp, se presentan dos
funciones objeto de análisis.
La función gotoxy() posiciona el mensaje o la salida en pantalla “!! HOLA” en las
coordenadas x=30 y y=12.
La función puts() es propia para el manejo de cadena de caracteres, muestra en
pantalla el contenido de la variable nombre.
Apuntadores a arreglos
Progra5.cpp
#include <iostream.h>
#include <conio.h>
#include <string.h>
using namespace std;
int main()
{
32
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
33
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
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();
}
34
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Esto puede difundirse para dos o más variables, como se observa en el ejemplo
siguiente 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();
}
35
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
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 dirección de a
cout<<"la dirección 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 = " << *≈
getch();
return 0;
}
Análisis 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
numérico igual a 7; mientras que la variable ap devuelve la dirección de memoria
de a.
Figura 6 Salida en pantalla de progra10.cpp
37
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
El lenguaje C++ cuenta con dos operadores preconstruidos, ellos son: New y
Delete, por esta razón no se requiere incluir ninguna librería o archivo de
cabecera para utilizarlos.
La sintaxis para liberar la memoria previamente asignada por new es através del
operador delete asi:
Delete Apuntador;
La ejecución 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 dinámica, 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
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
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
Finalmente la línea 13, se incluye la llave que cierra las instrucciones que hacen
parte de la función principal.
Pero ¿quién asegura que el espacio requerido por new está disponible?. Para
controlar esta situación y evitar un mensaje de error por parte del sistema en
tiempo de ejecución, en el listado siguiente se propone una nueva versión del
programa.
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();
}
40
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Cuando se utiliza new para reservar memoria para un vector, el tamaño del vector
se sitúa entre corchetes, siguiendo al tipo:
int *intvector;
intvector = new int [20];
y se libera:
delete [ ] intvector;
El valor retornado por new es la dirección del inicio de un bloque de memoria del
tamaño requerido para almacenar 25 elementos de tipo double.
En caso de que el montículo no disponga del espacio requerido, new retorna el
valor NULL (nulo).
42
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Progra17.cpp
/*
Tema: Gestión dinamica de memoria
Curso: 301305 Estructura de datos
Compilador: Falcon C++
Autor: Hermes Mosquera
*/
#include <stdlib.h>
#include <iostream>
//Función 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 función visualizar
break;
case 3: delete cred; // liberación de memoria
break;
default: cout<<"Opcion incorrecta";
break;
}
}while (opcion != 3);
system("PAUSE");
return EXIT_SUCCESS;
}
// definicion de la función que inserta los datos
void insertar()
{
cred = new curso;
cout<<"\nRegistrar el curso ";
cout<<"\n Nombre del curso : ";
44
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
cin>> cred->nombre;
cout<<"Codigo del curso : ";
cin>> cred->codigo;
}
45
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Actividades de Autoevaluación
int P = 10; // 1
int *x, *y; // 2
y = &P; // 3
x = y; // 4
cout<< “El resultado de x es :” << x ; // 5
46
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Enunciado 2
Intpunt; // 1
punt = punt + 1; // 2
punt = punt – 2; // 3
punt++; // 4
punt--; // 5
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();
}
Ejercicio 6. Implementar un programa que asigne memoria con new y delete, para
un arreglo de estructuras, el cual desea llevar los registros básicos de 5
mascotas, como: raza, nombre, color y edad Ingresados por teclado, además de
determinar en tiempo de ejecución el tamaño del arreglo a utilizar.
47
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
Fuentes Bibliográficas
48
INTRODUCCIÓN A LA ESTRUCTURA DE DATOS
Aplicación de los entornos de desarrollo C++
49