Está en la página 1de 15

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA

ESTRUCTURA DE DATOS ACT 6. COLABORATIVO 1

EDER MANUEL HENRIQUEZ YARA COD. 84451798 WILLIAM CLEMENTE SANCHEZ COD. 80550315

TUTOR HERMES MOSQUERA

CURSO: 301305_61

LUGAR: SANTA MARTA FECHA: 04/10/2011

INTRODUCCION Este trabajo esta conformado por la definicin de una serie de preguntas, la explicacin detallada de cada lnea de cdigo e imgenes que son producto de la ejecucin y compilacin de los programas propuestos.

1. CONCEPTUALIZACIN DE LA MEMORIA DINMICA. CUADRO COMPARATIVO

OPERADORES NEW Y DELETE FUNCIONES MALLOC() Y FREE() Diferencias y Caractersticas New y delete son operadores para malloc() y free() son funciones para manipular manipular memoria. memoria El uso de operador new es mucho ms Void free(void *puntero); sencillo new int El principal problema es que siempre debamos de especificar el tipo de puntero que queramos El operador delete est definido para que se nos devolviera pues esta funcin no hacer nada si se le pasa un valor retornaba el puntero genrico void. NULL, se puede liberar la memoria ocupada por un dato al que apunta un puntero NULL, ya que realmente no se Se encuentra en la libreria stdlib.h, no devuelve est haciendo nada. El operador delete ningn valor. Libera la parcela de memoria apuntada por el puntero y que previamente slo puede utilizarse para liberar habia sido asignado mediante malloc() o memoria reservada con el operador calloc(), dando la posibilidad a que dicho bloque new. Si se usa delete con cualquier de memoria se pueda volver a asignar otro tipo de dato, la operacin no est posteriormente. definida, y por tanto nada sucede. El lenguaje C++ cuenta con dos operadores pre construidos, ellos son: New y Delete, por esta razn no se requiere incluir ninguna librera o archivo de cabecera para utilizarlos. La sintaxis para el uso del operador delete es: delete apuntador; La ejecucin de este operador provoca que se libere espacio, dejando como valor indefinido, es decir el sistema operativo lo considera como memoria disponible. No requieren incluir ninguna librera. Las funciones estndar utilizadas en C para manejo dinmico de memoria, malloc(), calloc() y free(), tambin se pueden utilizar en C++ de la misma forma que en C. La funcin Free() Al igual que malloc (), free () es una funcin del lenguaje de programacin C, utilizado para liberar la memoria asignada por malloc (). Al usar la funcin free () se debe tener en cuenta la regla de oro explicada en el apartado del operador delete toda la memoria que se reserve durante el programa hay que liberarla antes de salir del programa

El operador New: Realiza una labor La Funcin Malloc() parecida a la de la funcin malloc (), Es una de las funciones de asignacin de asignando un bloque de memoria memoria propias del lenguaje de programacin

segn sea requerido.

C (acrnimo de memory allocation). Cuando se usa malloc () se pasa la cantidad de bytes de memoria que se necesita. Malloc () encuentra y reserva un bloque de menora del tamao pedido y regresa la direccin del primer byte del bloque. Apuntador = new tipo_de_dato; La funcin malloc () regresa una direccin, y su Este operador hace una peticin al tipo de retorno es un apuntador a tipo void. Por sistema operativo para que se le asigne qu void?. Un apuntador a tipo void es un espacio en memoria, con el tamao compatible con todos los tipos de datos. 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),

Enunciado

Respuesta

Qu utilidad tiene la funcin Encuentra y reserva un bloque de Malloc()? memoria del tamao pedido. El operador ziseof es utilizado Determinar el tamao en bytes que se para? requiere en la asignacin dinmica de memoria ya sea utilizando los operadores New y Delete o funciones Malloc y Free. Si se requiere liberar la memoria Free o Delete. previamente asignada en un programa codificado en C o C++ se puede hacer uso de: Indique la instruccin de cdigo int *numero=NULL; necesaria en utilizando la sintaxis int nbytes=100; de C++ para asignar memoria numero=(int *)malloc(nbytes); dinmica a una variable apuntador if(numero==NULL) { de tipo entero llamada nmero, a cout<<"Insuficiente espacio en travs de la funcin Malloc(). memoria\n"; return -1; } cout<< "Bytes Reservados\n\n"; cout<<"Se han asignado " <<nbytes <<" bytes de memoria\n"; free(numero); getch(); Indique la instruccin de cdigo float *codigo; utilizando la sintaxis de C++ para la if((codigo = new float)==NULL) { asignar memoria dinmica a una cout << "NO hay espacio variable apuntador de tipo float suficiente\n"; exit(1); }

llamada cdigo operador New.

*codigo=20 ; cout <<"Resultado\n\n"; cout << "El resultado de la operacion es:"<<*codigo ; delete codigo ; Indique la importancia de los Proporcionan mucha utilidad al apuntadores en la programacin programador ya que permiten accesar estructurada. y manipular datos de tal manera que no es posible realizarse en otros lenguajes llamados de alto nivel. Tambien son utiles para pasarle parametros a las funciones de tal modo que les permiten modificar y regresar valores a la rutina o funcin que hace el llamado. Cuando se utilizan incorrectamente, pueden producir algunos problemas de esrtabilidad en el sistema o tambin pueden presentar fallas en el programa en ejecucin.

travs

del

2. Aplicacin de los apuntadores. 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 que arrojan las variables a, *x, **y, ***z, se recomienda hacer una prueba de escritorio. LINEA 1 CDIGO void main(){ DOCUMENTACIN RESULTADOS Y

2 3

int a=20; int *x, **y, ***z ;

*x=NULL,**y=NULL,***z=NULL;

Se declara la funcin principal main de tipo void, es decir no vuelve valor. Se declara la variable a de tipo entero y se le asigna el valor de 20. Se declaran 3 variables apuntadores de tipo entero. (x) es apuntador, (y) es apuntador a apuntador y (z) es apuntador a puntador a apuntador. A cada varia variable apuntador se le asigna el valor Null (vaco).

5 6 7 8 9

clrscr(); x = &a; *x = 50; y = &x ; **y += *x;

Limpia pantalla. a (X) se le asigna la direccin de memoria de (a ) Al apuntador (X) se le asigna el valor de 50. A la variable (Y) se la asigna la direccin de memoria de (X). Se suman los valores de (**y) con (*X), como y tiene la direccion de x daria 50+50=100. Es decir 100 para cada variable. Se le asigna la direccion de memoria de (Y) a (Z). Se suman los valores, como cada uno tiene 100 da como resultado 300 para cada uno. 300 300 300 300 Espera para que el usuario presione una tecla para salir del programa.

10 11

z = &y; ***z += **y + *x;

12 13 14 15 16

cout << "El valor de a es:"<<a; cout << "El valor de *x es:"<<*x; cout <<"El valor de **y es:"<<**y; cout <<"El valor de ***z es:"<<***z; getch();}

OTRAS ESPECIFICACIONES: Lne a 1 2 3 4 int q = 10; int *x, *y; y = &q; x = y; Cdigo Documentacin y resultados Define a q variable entera, asigna a q el valor de (10) Define X y Y variables tipo apuntador Asigna a Y la direccin de Q ( Y apunta a X) Asigna a X el valor de Y

5 6

cout<< "El resultado de x es :" << x;

Imprime el resultado (0x242f2414)

de de

x y

cout<< "El resultado de y es :" << Imprime el resultado y; (0x242f2414)

3. Aplicacin de la Memoria Dinmica con Malloc() y Free(). Implemente un programa en C++ usando memoria dinmica con las funciones Malloc() y Free() para que imprima el registro de 3 computadores de diferentes marcas, de los cuales se requiere conocer (La marca o fabricante, tipo de procesador, cantidad de memoria RAM y capacidad de almacenamiento en disco duro ). Se sugiere hacer uso de una estructura llamada computador, incluya variables de tipo apuntador. Como resultado se espera el cdigo fuente debidamente documentado cada lnea y la captura de pantalla de la imagen del resultado despus de la ejecucin. CODIGO 1 2 #include<iostream.h> #include<conio.h> Documentacin de lineas Libreria para cout, cin, malloc y free Libreria para que funcione la instruction gecth y clrscr Funcion principal no devuelve valor pues es de tipo void Llave que abre el programa Declaracion de la variable i de tipo entero Se declara una estructura llamada computador Abre la estructura Arreglo de tipo char de 30 elementos Arreglo de tipo char de 100 elementos Variables de tipo int long Cierra estructura Apuntador P llamado computador

3 4 5 6 7 8 9 1 0 1 1 1 2

void main() { int i; struct computador { char marca[30]; char pro[100]; int long ram,cap; }; computador *p;

1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4

clrscr(); cout<<"BIENVENIDO AL REGISTRO DE COMPUTADORES"<<endl; p=(computador *)malloc(sizeof(computador));

Limpia pantalla Mensaje de bienvenida con la instruccin cout Se reserva memoria con malloc y se le asigna a p Ciclo para ingresar los 3 computadores Abre el ciclo Pide ingresar marca del computador Captura marca Pide ingresar tipo de procesador del computador Captura tipo de procesador Pide ingresar memoria del computador Captura memoria Pide ingresar capacidad del disco del computador Captura capacidad de disco Cierra ciclo Mensaje de resultados Salto de linea

for (i=0; i<3; i++) { cout<<"marca del computador"<<endl; cin>>p[i].marca; cout<<"tipo de procesador"<<endl; cin>>p[i].pro; cout<<"memoria ram instalada"<<endl; cin>>p[i].ram; cout<<"capacidad del disco duro"<<endl; cin>>p[i].cap; } cout<<"\t"<<" *** LOS COMPUTADORES QUE USTED INGRESO SON:"<<endl; cout<<endl; //for (i=0; i<3; i++) i=0; while(i<3) { cout<<"la marca del computador es:"<<p[i].marca<<endl;

Declara I inicializada en cero Ciclo mientras sea menor a 3 Abre ciclo Imprime marca

3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2

cout<<"el tipo de procesador es:"<<p[i].pro<<endl; cout<<"la memoria ram instalada es:"<<p[i].ram<<endl; cout<<"la capacidad del disco duro es:"<<p[i].cap<<endl; i++; } getch(); free (p); }

Imprime procesador Imprime memoria Imprime capacidad Incrementa i Cierra ciclo de impresin Espera que el usuario presione una tecla Libera memoria en p Cierra main

Nota: tuve problemas con este compilador (Borland 5.5), genera un mensaje desde el sistema operativo. Con el turbo c++ 3.0 funciona bien, pero desde la consola no me funciona el botn de captura de imagen es por eso que capture esta imagen.

4. Aplicacin de la Memoria Dinmica con New y Delete. Implemente un programa en C++ para gestionar memoria dinmica con los operadores New y Delete para que almacene los datos bsicos de 3 programas acadmicos de la UNAD de los cuales se requiere conocer (El cdigo del programa, nombre del programa, el nombre de la escuela a la cual pertenece el programa) para lo cual se sugiere hacer uso de una estructura llamada programa, incluya

variables de tipo apuntador. Como resultado se espera el cdigo fuente debidamente documentado cada lnea y la captura de pantalla de la imagen del resultado despus de la ejecucin.

#include <iostream.h> #include <conio.h> #include<string.h> void main() { clrscr(); int *codigo; char *nombre[50]; char *escu[50]; int cod,i; char nom[50]; char esc[50]; codigo =new int ; nombre[50]=new char[50]; escu[50]=new char[50];

Libreria para cout, cin, entre otras Para getch, clrscr Para adena de caracteres(gets) Funcion principal Abre function Limpia pantalla Apuntador codigo de tipo entero Apuntador nombre de tipo char Apuntador Esch de tipo char Variables cod, i de tipo entero Areglo nom de 50 elemtos tipo char Areglo esc de 50 elemtos tipo char Crean un espacio en memoria de tipo int y se almacena en codigo Crean un espacio en memoria de tipo char y se almacena en nombre Crean un espacio en memoria de tipo char y se almacena en Esch Incio de ciclo para ingresar datos Llave de aperture del ciclo Pide codigo Captura codigo Pide nombre Captura nombre con gets que es para cadenas Pide escuela Captura escuela con gets Cierra el ciclo

for (i=0;i<3;i++) { cout<<"ingrese codigo del programa"<<endl; cin>>cod; cout<<"ingrese nombre del programa"<<endl; gets(nom); cout<<"ingrese nombre de la escuela del programa"<<endl; gets(esc); }

*codigo = cod ; *nombre=nom; *escu=esc; cout <<"\t LOS TRES(3)PROGRAMAS ACADEMICOS SON:\n\n"; for (i=0;i<3;i++) { cout <<"El codigo es:" <<*codigo<<endl ; cout <<"El nombre es:" <<*nombre<<endl ; cout <<"El nombre de la escuela es:" <<*escu ; delete codigo; delete nombre; delete escu; } getch(); }

Almacena cod en el puntero * codigo Almacena nom en el puntero * nombre Almacena esc en el puntero * Esch Mensaje Inicio ciclo de impresin Abre ciclo Imprime codigo Imprime nombre Imprime escuela Libera memoria de codigo Libera memoria de nombre Libera memoria de escuela Cierra ciclo Espera oprimer tecla Cierra main

IMAGEN DEL CODIGO

CONCLUSIONES En esta actividad se practico ejercicios con las diferentes funciones y operadores que presenta el modulo, como por ejemplo las funciones malloc y free y operadores como new y delete. Adems se indago en fuentes externas para lograr los objetivos de este trabajo. Una vez terminado este trabajo se siente una gran satisfaccin por esforzarse y comprender conceptos un poco complejos como los apuntadores.

BIBLIOGRAFA Y REFERENCIAS Modulo estructura de Datos. http://www.frodrig.com/macedoniamagazine/poo9.htm http://www.youtube.com/watch?v=R98Sty0BmPc http://www.youtube.com/watch?v=Wf3ntCqkZUo Estructuras de datos de cairo guardati Google bocks libros estructuras Estructuras de datos cesar becerra

También podría gustarte