Sei sulla pagina 1di 18

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BSICAS, TECNOLOGA E INGENIERA ESTRUCTURA DE DATOS

JUAN MANUEL OSORIO CARABALI COD 10.347.947 JULIO CESAR PULIDO CEPEDA COD xxxxxxx YIMMY ANTONIO AGUILAR COD 11 .312 .744

GRUPO COLABORATIVO 301305-4

TUTOR: HERMES MOSQUERA

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA 22 DE OCTUBRE DE 2012

INTRODUCCIN La intencin principal de este trabajo es colocar en prctica todos los conceptos y conocimientos que durante este curso estamos obteniendo, similar a que todas las instrucciones que logremos efectuar en la gua de las estructuras de datos. Adems en este trabajo se introducir el concepto de tipo indeterminado de variables estticas y dinmicas y el uso de los operadores new y delete frente a al manejo de malloc y free.

DESARROLLO DE LA ACTIVIDAD 1. Conceptualizacin de la memoria dinmica. De acuerdo a la conceptualizacin del mdulo referente a la unidad 1 y a las consultas bibliogrficas en la Biblioteca virtual de la UNAD, de respuesta en la Columna de la derecha a los siguientes interrogantes: ENUNCIADO RESPUESTA En la gestin dinmica de memoria Esta funcin se utiliza para la asignacin y Qu utilidad tiene la funcin liberacin de memoria dinmicamente. Malloc()? Cuando se ejecuta un programa, el sistema operativo reserva una zona de memoria para el cdigo o instrucciones del programa y otra para las variables que se usan durante la ejecucin. A menudo estas zonas son la misma zona, es lo que se llama memoria local. Tambin hay otras zonas de memoria, como la pila, que se usa, entre otras cosas, para intercambiar datos entre funciones Para qu es utilizado del operador El operador Delete: Libera un bloque de delete en la gestin dinmica de memoria asignada por New en tiempo de memoria? ejecucin, de manera semejante a como lo hace la funcin free (). Establezca la diferencia sizeof: devuelve el tamao de su argumento relacionadas con el operador sizeof malloc: devuelve un puntero a un bloque de entre las dos instrucciones de memoria del tamao dado por su cdigo siguientes: argumento, entonces: Instruccin 1. En la primera instruccin sizeof est valor = (float * ) malloc (10 * sizeof multiplicando x 10; si float es por ejemplo 8 (float)); malloc va a devolver un bloque de tamao 80 bytes Instruccin 2. valor = (float * ) malloc (sizeof En la segunda instruccin solo va a (float)); devolver un bloque de 8bytes Haga una consulta en la biblioteca virtual de la UNAD para indicar el concepto de apuntadores y la importancia en la programacin de C++. 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. En 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. El uso de apuntadores en C y C++ es muy importante debido a que permite hacer los programas ms eficientes y ms flexibles permiten accesar y manipular datos de tal manera que no es posible realizarse en otros lenguajes llamados de alto nivel Tambin son tiles para pasarle parmetros a las funciones de tal modo que les permiten modificar y regresar valores a la rutina o funcin que hace el llamado. 2. Aplicacin de los apuntadores. Analice el siguiente cdigo que es una parte de un programa como aplicacin de Apuntadores a apuntadores, complete las lneas de cdigo que faltan, complelo y lo ejecuta y as confirma la salida en pantalla, documente cada una de las lneas de cdigo y exprese el resultado que arrojan las variables: a, *x, **y, ***z, en las lneas de la 10 a la 13 para lo cual se debe realizar y anexar a este punto la prueba de escritorio.
Lnea

Cdigo fuente int main(){ int a=20; int *x, **y, ***z ; x = &a; *x = 150; y = &x ; **y += *x; z = &y; ***z += **y + *x; cout << \nEl valor de a es:<<a;

1 2 3 4 5 6 7 8 9 10

Documente cada lnea de cdigo y los resultados de la lnea 10 a la 13


Se declara una Variable tipo entero y se le asigna el valor de 20. Que sera un valor continuo de la variable Se declara tres apuntadores de tipo entero. Que son x,y, y z. El apuntador x va almacenar el valor de 150. asigna a y la direccin de x almacena en y el valor de y mas el valor de x es decir 150 + 150 = 300 asigna a z la direccin de y (z apunta a y) almacena en z el valor de z mas el valor de y mas el valor de x, es decir 300+300+300=900 muestra el valor de a igual a 900

11 12 13 14 15 16

cout << \nEl valor de *x es:<<*x; cout <<\nEl valor de **y es:<<**y; cout <<\nEl valor de ***z es:<<***z; system(PAUSE); return 0; }

muestra el valor de x igual a 900 muestra el valor de y igual a 900 muestra el valor de z igual a 900 esta funcin mantiene detenida la pantalla para poder observar la ejecucin del programa hasta cuando se pulsa una tecla

NOMBRE DEL INTEGRANTE DEL GRUPO

JUAN MANUEL OSORIO CARABALI

JULIO CESAR PULIDO CEPEDA

PARTICIPACIN Y APORTE REALIZADO Los aportes desarrollados por el compaero JUAN OSORIO son los aportes ms codificados y completos no dejando de lado el trabajo del compaero JULIO CESAR a mi me gusta el punto 3 de julio por la escritura del cdigo fuente que codifica enva la informacin a el usuario con una sola opcin. Los aportes realizado por el

compaero julio cesar fueron de buen ayuda, para realizar los puntos que estaba planteados en la gua de trabajo, en el cual monto su aportes de los dos aportes del punto 3 y 4 , para llevar a cabo la seleccin del mejor ejercicio. Evaluacin de Juan manual Osorio YIMMY ANTONIO AGULAR

3. Aplicacin de las estructuras y gestin dinmica de memoria con las funciones Malloc() y Free(). Se requiere implementar un programa codificado en C++ que haga uso de la gestin dinmica de memoria con las funciones malloc() y free(), que por medio de un men de opciones permita insertar y visualizar la informacin de tres cursos acadmicos en una estructura llamada Cursos que almacenar el cdigo del curso, el nombre del curso y el nmero de crditos del curso. Como resultado se espera el cdigo fuente debidamente documentado cada lnea y la captura de pantalla de las imgenes de la salida en pantalla de cada opcin.
#include <stdio.h> lenguaje #include <conio.h> lenguaje #include <stdlib.h> lenguaje #include <iostream.h> lenguaje //Se incluyen la librera stdio.h para el buen funcionamiento del programa y soportar la sintaxis del //Se incluyen la librera stdio.h para el buen funcionamiento del programa y soportar la sintaxis del //Se incluyen la librera stdio.h para el buen funcionamiento del programa y soportar la sintaxis del //Se incluyen la librera stdio.h para el buen funcionamiento del programa y soportar la sintaxis del

struct nodo { // Definimos la estructura de almacenamiento char codigo_curso[20]; //Se declara la variable codigo_curso tipo char char nombre_curso[30]; //Se declara la variable nombre_curso tipo char char creditos_curso[2]; //Se declara la variable creditos_curso tipo char struct nodo *sig; //Apunta al nodo siguiente }curso_academico; //Tipo de dato curso_academico que es de tipo estructura nodo struct nodo *cab, *ult, *nuevo; //Declaramos los apuntadores *cab(para identificar el inicio de la estructura), *ult(para identificar cual es el ltimo elemento de la estructura), *nuevo(para identificar cual es el nuevo elemento de la estructura) void encadenar() //Se declara la funcin encadenar que no va retornar ningn valor { //Se abre la llave indicando que inician las instrucciones de la funcin encadenar if (cab == NULL) //Se verifica si la estructura se encuentra vaca { cab = nuevo; //El apuntador cab apunta nuevo ult = nuevo; //El apuntador ult apunta nuevo } //Se cierra la llave finalizando el condicional si else { ult -> sig = nuevo; //Si la estructura no esta vacia el ltimo nodo de la estructura se est conectando al nuevo nodo ult = nuevo; //El apuntador ult apunta a nuevo } //Se cierra la llave finalizando el condicional entonces } //Se cierra la llave finalizando la funcion encadenar void insertar() //Se declara la funcin insertar que no va retornar ningn valor

{ //Se abre la llave indicando que inician las instrucciones de la funcin insertar int i; //Se declara la variable i tipo entero if(cab == NULL) //Se verifica si la estructura se encuentra vaca ult=NULL; //Si la estructura est vaca, al apuntador ult apunta a NULL (nada) nuevo =(struct nodo*) malloc (sizeof(curso_academico)); //Se crea un nuevo nodo con los campos de la estructura curso_academico cout << "\n REGISTRO DE DATOS \n\n"; //Se despliega un mensaje en pantalla for(i=1;i<=3;i++) //Ciclo for usado para el ingreso de los cursos { //Se abre la llave indicando que inician las instrucciones del ciclo for cout << "Digite el codigo del curso No. "<< i <<" : "; //Se despliega un mensaje en pantalla cin >> nuevo[i].codigo_curso; //Asigna el valor digitado al campo codigo_curso del nodo apuntado por nuevo[i] cout << "Digite el nombre del curso No. "<< i <<" : "; //Se despliega un mensaje en pantalla cin >> nuevo[i].nombre_curso; //Asigna el valor digitado al campo nombre_curso del nodo apuntado por nuevo[i] cout << "Digite los creditos del curso No. "<< i <<": "; //Se despliega un mensaje en pantalla cin >> nuevo[i].creditos_curso; //Asigna el valor digitado al campo creditos_curso del nodo apuntado por nuevo[i] cout << "\n\n"; //Se realiza un salto de lnea } //Se cierra la llave finalizando el condicional for cout << "\n----- FIN INGRESO -----\ "; //Se despliega un mensaje en pantalla getch(); //La funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla encadenar(); //Se llama la funcin encadenar que es donde se integra el nuevo nodo a la estructura } //Se cierra la llave indicando que termina la funcin insertar void listar() //Se declara la funcin listar que no va retornar ningn valor { /Se abre la llave indicando que inician las instrucciones de la funcin listar int i; //Se declara la variable i tipo int clrscr(); //Se limpia pantalla por medio de la funcin clrscr() para que las salidas en pantalla de anteriores ejecuciones sigan mostrndose if (cab==NULL) //Se verifica si la estructura se encuentra vaca cout << "\nNO HAY CURSOS REGISTRADOS\n\n"; //Se despliega un mensaje en pantalla else cout << "\nLISTADO DE CURSOS REGISTRADOS\n\n"; //Se despliega un mensaje en pantalla for(i=1;i<=3;i++) //Condicin que nos permite mostrar los datos ingresados en la estructura { //Se abre la llave indicando que inician las instrucciones del condicional for cout << "\nCodigo curso No."<< i <<" : "<< nuevo[i].codigo_curso<<""; //Muestra el contenido de la variable codigo_curso del nodo que es apuntado por el apuntador nuevo[i] en la estructura cout << "\nNombre curso No."<< i <<" : "<< nuevo[i].nombre_curso<<"";

//Muestra el contenido de la variable nombre_curso del nodo que es apuntado por el apuntador nuevo[i] en la estructura cout << "\nCreditos curso No."<< i <<": "<< nuevo[i].creditos_curso<<""; //Muestra el contenido de la variable creditos_curso del nodo que es apuntado por el apuntador nuevo[i] en la estructura cout << "\n\n"; //Se realiza un salto de lnea } //Se cierra la llave indicando que cierra las instrucciones del ciclo for cout << "\n----- FIN LISTADO -----\ "; //Se despliega un mensaje en pantalla getch(); //La funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla } //Se cierra la llave indicando que termina la funcin listar void main() //Se define la funcin principal main() de tipo void, lo que indica que no retorna ningn valor { //Se abre la llave indicando que inician las instrucciones de la funcin principal int opc; //Define un campo de memoria opc tipo entero. opc=0; //El campo de memoria opc se est inicializando con 0 cab=NULL; //Si la estructura est vaca, al apuntador cab apunta a NULL (nada) while (opc !=3) //Condicin que controla el ciclo repetitivo el cual se ejecuta mientras opc tenga un valor diferente de 3 { //Se abre la llave indicando que inician las instrucciones del condicional mientras clrscr(); //Se limpia pantalla por medio de la funcin clrscr() para que las salidas en pantalla de anteriores ejecuciones sigan mostrndose gotoxy(33,7); cout << ">> MENU <<"; //Posiciona el mensaje o la salida en pantalla "MENU" en las coordenadas x=33 y y=7 gotoxy(25,10); cout << "1. Insertar Cursos Academicos"; //Posiciona el mensaje o la salida en pantalla "1. Insertar Elementos" en las coordenadas x=25 y y=10 gotoxy(25,12); cout << "2. Listar Cursos Academicos"; //Posiciona el mensaje o la salida en pantalla "2. Listar Elementos" en las coordenadas x=25 y y=12 gotoxy(25,14); cout << "3. Salir"; //Posiciona el mensaje o la salida en pantalla "3. Salir" en las coordenadas x=25 y y=14 gotoxy(23,17); cout << "Digite la opcion deseada< _ >"; //Posiciona el mensaje o la salida en pantalla ""Digite la opcion deseada< _ >"" en las coordenadas x=23 y y=17 gotoxy(49,17); cin >> opc; //Se almacena el valor que el usuario haya digitado de acuerdo al men de opciones cout << "\n\n"; //Se realiza un salto de lnea clrscr(); //Se limpia pantalla por medio de la funcin clrscr() if(opc==1) insertar(); /Es un condicional que evala el contenido de opc, si es 1 llama la funcin insertar else if(opc==2) listar(); //Es un condicional que evala el contenido de opc, si es 2 llama la funcin listar else if(opc!=3) //Es un condicional que evala el contenido de opc, si es 3 { //Se abre la llave indicando que inician las instrucciones del condicional entonces cout <<"ERROR. Opcion incorrecta!"; //Se despliega un mensaje en pantalla

getch(); //Se introduce la funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla } //Se cierra la llave indicando que se cierran las instrucciones del condicional entonces } //Se cierra la llave indicando que se cierran las instrucciones del condicional mientras clrscr(); //Se limpia pantalla por medio de la funcin clrscr() para que las salidas en pantalla de anteriores ejecuciones sigan mostrndose gotoxy(30,10); cout << ">> FIN DEL PROGRAMA <<"; //Posiciona el mensaje o la salida en pantalla "FIN DEL PROGRAMA" en las coordenadas x=30 y y=10 gotoxy(30,11); cout << "Presione una tecla para Terminar."; //Posiciona el mensaje o la salida en pantalla "Presione una tecla para Terminar." en las coordenadas x=30 y y=11 free(cab); //Elimina el apuntador cab, liberando la estructura del control del programa getch(); //Se introduce la funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla }

4. Aplicacin de las estructuras y gestin dinmica de memoria con los Operadores New y Delete. Implemente un programa en C++ que haga uso de la gestin dinmica de memoria a travs de los operadores New y Delete, que permita insertar y visualizar los datos bsicos de 3 programas acadmicos de la UNAD, haciendo uso de una estructura llamada Programas que almacenar el cdigo del programa, el nombre del programa. Como resultado se espera el cdigo fuente debidamente documentado cada lnea y la captura de pantalla de las imgenes dela salida en pantalla de cada opcin. #include <conio.h> //Se incluyen la librera stdio.h para el buen funcionamiento del programa y soportar la sintaxis del lenguaje #include <iostream.h> //Se incluyen la librera stdio.h para el buen funcionamiento del programa y soportar la sintaxis del lenguaje struct programa { //Definimos la estructura de almacenamiento char codigo_programa[20]; //Se declara la variable codigo_programa tipo char char nombre_programa[30]; //Se declara la variable nombre_programa tipo char struct programa *sig; //Apunta al nodo siguiente }programa_academico; //Tipo de dato programa_academico que es de tipo estructura programa struct programa *cab, *ult, *nuevo; //Declaramos los apuntadores *cab(para identificar el inicio de la estructura), *ult(para identificar cual es el ltimo elemento de la estructura), *nuevo(para identificar cual es el nuevo elemento de la estructura) void encadenar() //Se declara la funcin encadenar que no va retornar ningn valor { //Se abre la llave indicando que inician las instrucciones de la funcin encadenar if (cab == NULL) //Se verifica si la estructura se encuentra vaca { cab = nuevo; //El apuntador cab apunta nuevo ult = nuevo; //El apuntador ult apunta nuevo } //Se cierra la llave finalizando el condicional si else { ult -> sig = nuevo; //Si la estructura no esta vacia el ltimo nodo de la estructura se est conectando al nuevo nodo ult = nuevo; //El apuntador ult apunta a nuevo } //Se cierra la llave finalizando el condicional entonces } //Se cierra la llave finalizando la funcion encadenar void insertar() //Se declara la funcin insertar que no va retornar ningn valor { //Se abre la llave indicando que inician las instrucciones de la funcin insertar

int i; //Se declara la variable i tipo entero if(cab == NULL) //Se verifica si la estructura se encuentra vaca ult=NULL; //Si la estructura est vaca, al apuntador ult apunta a NULL (nada) nuevo = new(programa); //Se crea un nuevo nodo de tipo struct programa y queda direccionado por el apuntador cout << "\n REGISTRO DE DATOS \n\n"; //Se despliega un mensaje en pantalla for(i=1;i<=3;i++) //Ciclo for usado para el ingreso de los programas { //Se abre la llave indicando que inician las instrucciones del ciclo for cout << "Digite el codigo del programa No. "<< i <<" : "; //Se despliega un mensaje en pantalla cin >> nuevo[i].codigo_programa; //Asigna el valor digitado al campo codigo_programa del nodo apuntado por nuevo[i] cout << "Digite el nombre del programa No. "<< i <<" : "; //Se despliega un mensaje en pantalla cin >> nuevo[i].nombre_programa; //Asigna el valor digitado al campo nombre_programa del nodo apuntado por nuevo[i] cout << "\n\n"; //Se realiza un salto de lnea } //Se cierra la llave finalizando el condicional for cout << "\n----- FIN INGRESO -----\ "; //Se despliega un mensaje en pantalla getch(); //La funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla encadenar(); //Se llama la funcin encadenar que es donde se integra el nuevo nodo a la estructura } //Se cierra la llave indicando que termina la funcin insertar void listar() //Se declara la funcin listar que no va retornar ningn valor { //Se abre la llave indicando que inician las instrucciones de la funcin listar int i; //Se declara la variable i tipo entero clrscr(); //Se limpia pantalla por medio de la funcin clrscr() para que las salidas en pantalla de anteriores ejecuciones sigan mostrndose if (cab==NULL) //Se verifica si la estructura se encuentra vaca cout << "\nNO HAY PROGRAMAS REGISTRADOS\n\n"; //Se despliega un mensaje en pantalla else cout << "\nLISTADO DE PROGRAMAS REGISTRADOS\n\n"; //Se despliega un mensaje en pantalla for(i=1;i<=3;i++) //Condicin que nos permite controlar el final de datos de la estructura { //Se abre la llave indicando que inician las instrucciones del condicional mientras cout << "\n\nCodigo programa No."<< i <<":"<< nuevo[i].codigo_programa<<"\n"; //Muestra el contenido de la variable codigo_programa del nodo que es apuntado por el apuntador nuevo[i] en la estructura cout << "\n\nNombre programa No."<< i <<":"<< nuevo[i].nombre_programa<<"\n"; //Muestra el contenido de la variable nombre_programa del nodo que es apuntado por el apuntador nuevo[i] en la estructura cout << "\n\n"; //Se realiza un salto de lnea

} //Se cierra la llave indicando que cierra las instrucciones del ciclo for cout << "\n----- FIN LISTADO -----\ "; //Se despliega un mensaje en pantalla getch(); //La funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla } //Se cierra la llave indicando que termina la funcin listar void main() //Se define la funcin principal main() de tipo void, lo que indica que no retorna ningn valor { //Se abre la llave indicando que inician las instrucciones de la funcin principal int opc; //Define un campo de memoria opc tipo entero. opc=0; ///El campo de memoria opc se est inicializando con 0 cab=NULL; //Si la estructura est vaca, al apuntador cab apunta a NULL (nada) while (opc !=3) //Condicin que controla el ciclo repetitivo el cual se ejecuta mientras opc tenga un valor diferente de 3 { //Se abre la llave indicando que inician las instrucciones del condicional mientras clrscr(); //Se limpia pantalla por medio de la funcin clrscr() para que las salidas en pantalla de anteriores ejecuciones sigan mostrndose gotoxy(33,7); cout << ">> MENU <<"; //Posiciona el mensaje o la salida en pantalla "MENU" en las coordenadas x=33 y y=7 gotoxy(25,10); cout << "1. Insertar Programas Academicos"; //Posiciona el mensaje o la salida en pantalla "1. Insertar Programas Academicos" en las coordenadas x=25 y y=10 gotoxy(25,12); cout << "2. Listar Programas Academicos"; //Posiciona el mensaje o la salida en pantalla "2. Listar Programas Academicos" en las coordenadas x=25 y y=12 gotoxy(25,14); cout << "3. Salir"; //Posiciona el mensaje o la salida en pantalla "3. Salir" en las coordenadas x=25 y y=14 gotoxy(23,17); cout << "Digite la opcion deseada< _ >"; //Posiciona el mensaje o la salida en pantalla ""Digite la opcion deseada< _ >"" en las coordenadas x=23 y y=17 gotoxy(49,17); cin >> opc; //Se almacena el valor que el usuario haya digitado de acuerdo al men de opciones cout << "\n\n"; //Se realiza un salto de lnea clrscr(); //Se limpia pantalla por medio de la funcin clrscr() para que las salidas en pantalla de anteriores ejecuciones sigan mostrndose if(opc==1) insertar(); // Es un condicional que evala el contenido de opc, si es 1 llama la funcin insertar else if(opc==2) listar(); //Es un condicional que evala el contenido de opc, si es 2 llama la funcin listar else if(opc!=3) //Es un condicional que evala el contenido de opc, si es 3 { //Se abre la llave indicando que inician las instrucciones del condicional entonces cout <<"ERROR. Opcion incorrecta!"; //Se despliega un mensaje en pantalla

getch(); //Se introduce la funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla } //Se cierra la llave indicando que se cierran las instrucciones del condicional entonces } //Se cierra la llave indicando que se cierran las instrucciones del condicional mientras clrscr(); //Se limpia pantalla por medio de la funcin clrscr() para que las salidas en pantalla de anteriores ejecuciones sigan mostrndosem gotoxy(30,10); cout << ">> FIN DEL PROGRAMA <<"; //Posiciona el mensaje o la salida en pantalla "FIN DEL PROGRAMA" en las coordenadas x=30 y y=10 gotoxy(30,11); cout << "Presione una tecla para Terminar."; //Posiciona el mensaje o la salida en pantalla "Presione una tecla para Terminar." en las coordenadas x=30 y y=11 delete cab; //Elimina el apuntador cab, liberando la estructura del control del programa getch(); //Se introduce la funcin getch() que hace la ejecucin del programa termine solo cuando se presione una tecla }

BIBLIOGRAFA Universidad nacional abierta y a distancia unad, escuela de ciencias bsicas tecnologa e ingeniera, contenido didctico del curso: 301305 estructura de datos. Hermes Mosquera Angulo (director nacional) Popayn enero de 2011

Potrebbero piacerti anche