TC1_301305_61

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

Transcript of TC1_301305_61

Page 1: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 1/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

Page 2: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 2/15

INTRODUCCION

Este trabajo esta conformado por la definición de una serie de preguntas, laexplicación detallada de cada línea de código e imágenes que son producto dela ejecución y compilación de los programas propuestos.

Page 3: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 3/15

1. CONCEPTUALIZACIÓN DE LA MEMORIA DINÁMICA.

CUADRO COMPARATIVO

 OPERADORES NEW Y DELETE FUNCIONES MALLOC() Y FREE()

Diferencias y Características

New y delete son operadores para

manipular memoria.

malloc() y free() son funciones para manipular 

memoriaEl uso de operador new es mucho mássencillo new int

El operador delete está definido parano hacer nada si se le pasa un valor NULL, se puede liberar la memoriaocupada por un dato al que apunta unpuntero NULL, ya que realmente no seestá haciendo nada. El operador delete

sólo puede utilizarse para liberar memoria reservada con el operador new. Si se usa delete con cualquier otro tipo de dato, la operación no estádefinida, y por tanto nada sucede.

Void free(void *puntero);

El principal problema es que siempre debíamosde especificar el tipo de puntero que queríamosque se nos devolviera pues esta funciónretornaba el puntero genérico void.

Se encuentra en la libreria stdlib.h, no devuelveningún valor. Libera la parcela de memoria

apuntada por el puntero y que previamentehabia sido asignado mediante malloc() ocalloc(), dando la posibilidad a que dicho bloquede memoria se pueda volver a asignar posteriormente.

El lenguaje C++ cuenta con dosoperadores pre construidos, ellos son:New y Delete, por esta razón no serequiere incluir ninguna librería oarchivo de cabecera para utilizarlos.

Las funciones estándar utilizadas en C paramanejo dinámico de memoria, malloc(), calloc()y free(), también se pueden utilizar en C++ de lamisma forma que en C.

La sintaxis para el uso del operador delete es: delete apuntador;La ejecución de este operador provocaque se libere espacio, dejando comovalor indefinido, es decir el sistemaoperativo lo considera como memoriadisponible.

No requieren incluir ninguna librería.

La función Free()Al igual que malloc (), free () es una función dellenguaje de programación C, utilizado paraliberar la memoria asignada por malloc (). Alusar la función free () se debe tener en cuentala regla de oro explicada en el apartado deloperador  delete “toda la memoria que sereserve durante el programa hay que liberarlaantes de salir del programa”

El operador New: Realiza una labor parecida a la de la función malloc (),asignando un bloque de memoria

La Función Malloc()Es una de las funciones de asignación dememoria propias del lenguaje de programación

Page 4: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 4/15

según sea requerido. C (acrónimo de memory allocation). Cuando seusa malloc () se pasa la cantidad de bytes dememoria que se necesita. Malloc () encuentra yreserva un bloque de menoría del tamañopedido y regresa la dirección del primer byte del

bloque.Apuntador = new tipo_de_dato;Este operador hace una petición alsistema operativo para que se le asigneun espacio en memoria, con el tamañoacorde al tipo de datos (vale la penarecordar la función sizeof), si esteespacio está disponible, la operaciónregresa la dirección real que se otorga,en caso de no haber espacio regresa elvalor de NULL (0),

La función malloc () regresa una dirección, y sutipo de retorno es un apuntador a tipo void. ¿Por qué void?. Un apuntador a tipo void escompatible con todos los tipos de datos.

Enunciado Respuesta

¿Qué utilidad tiene la funciónMalloc()?

Encuentra y reserva un bloque dememoria del tamaño pedido.

El operador ziseof es utilizado

para?

Determinar el tamaño en bytes que se

requiere en la asignación dinámica dememoria ya sea utilizando losoperadores New y Delete o funcionesMalloc y Free.

Si se requiere liberar la memoriapreviamente asignada en unprograma codificado en C o C++ sepuede hacer uso de:

Free o Delete.

Indique la instrucción de códigonecesaria en utilizando la sintaxisde C++ para asignar memoria

dinámica a una variable apuntador de tipo entero llamada número, através de la función Malloc().

int *numero=NULL;int nbytes=100;

 numero=(int *)malloc(nbytes);

if(numero==NULL) {cout<<"Insuficiente espacio en

memoria\n"; return -1;}

cout<< "Bytes Reservados\n\n";cout<<"Se han asignado " <<nbytes<<" bytes de memoria\n";free(numero);

getch();

Indique la instrucción de códigoutilizando la sintaxis de C++ para laasignar memoria dinámica a unavariable apuntador de tipo float

float *codigo;if((codigo = new float)==NULL) {

cout << "NO hay espaciosuficiente\n"; exit(1); }

Page 5: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 5/15

llamada código a través deloperador New.

*codigo=20 ;cout <<"Resultado\n\n";cout << "El resultado de la operacion

es:"<<*codigo ;delete codigo ;

Indique la importancia de losapuntadores en la programaciónestructurada.

Proporcionan mucha utilidad alprogramador ya que permiten accesar y manipular datos de tal manera queno es posible realizarse en otroslenguajes llamados de alto nivel.Tambien son utiles para pasarleparametros a las funciones de talmodo que les permiten modificar yregresar valores a la rutina o funciónque hace el llamado. Cuando seutilizan incorrectamente, pueden

producir algunos problemas deesrtabilidad en el sistema o tambiénpueden presentar fallas en elprograma en ejecución.

2. Aplicación de los apuntadores.

Analice el siguiente código que es una aplicación de apuntadores a

apuntadores, documente cada una de las 10 líneas de código y exprese elresultado que arrojan las variables a, *x, **y, ***z, se recomienda hacer unaprueba de escritorio.

LINEA CÓDIGO DOCUMENTACIÓN YRESULTADOS

1 void main(){ Se declara la funciónprincipal main de tipovoid, es decir no vuelvevalor.

2 int a=20; Se declara la variable ade tipo entero y se leasigna el valor de 20.

3 int *x, **y, ***z ; Se declaran 3 variablesapuntadores de tipoentero. (x) es apuntador,(y) es apuntador aapuntador y (z) esapuntador a puntador aapuntador.

4 *x=NULL,**y=NULL,***z=NULL; A cada varia variable

apuntador se le asigna elvalor Null (vacío).

Page 6: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 6/15

5 clrscr(); Limpia pantalla.

6 x = &a; a (X) se le asigna ladirección de memoria de(a)

7 *x = 50; Al apuntador (X) se leasigna el valor de 50.

8 y = &x ; A la variable ( Y) se laasigna la dirección dememoria de (X).

9 **y += *x; Se suman los valores de(**y) con (*X), como ytiene la direccion de xdaria 50+50=100.Es decir 100 para cadavariable.

10 z = &y; Se le asigna la direccionde memoria de ( Y) a (Z).

11 ***z += **y + *x; Se suman los valores,como cada uno tiene100 da como resultado300 para cada uno.

12 cout << "El valor de a es:"<<a; 300

13 cout << "El valor de *x es:"<<*x; 300

14 cout <<"El valor de **y es:"<<**y; 300

15 cout <<"El valor de ***z es:"<<***z; 300

16 getch();} Espera para que elusuario presione unatecla para salir delprograma.

OTRAS ESPECIFICACIONES:

Línea

Código Documentación y resultados

1 int q = 10;Define a q variable entera,asigna a q el valor de (10)

2 int *x, *y;Define X y  Y variables tipoapuntador 

3 y = &q;Asigna a Y la dirección de Q( Y apunta a X)

4 x = y; Asigna a X el valor de Y

Page 7: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 7/15

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

6cout<< "El resultado de y es :" <<y ;

Imprime el resultado de y(0x242f2414)

3. Aplicación de la Memoria Dinámica con Malloc() y Free(). Implemente unprograma en C++ usando memoria dinámica con las funciones Malloc() yFree() 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 ). Sesugiere hacer uso de una estructura llamada computador, incluya variables de

tipo apuntador. Como resultado se espera el código fuente debidamentedocumentado cada línea y la captura de pantalla de la imagen del resultadodespués de la ejecución.

CODIGO Documentación delineas

1 #include<iostream.h> Libreria para cout,cin, malloc y free

2 #include<conio.h> Libreria para quefuncione lainstruction gecth y

clrscr 3 void main() Funcion principal no

devuelve valor pueses de tipo void

4 { Llave que abre elprograma

5 int i; Declaracion de lavariable i de tipoentero

6 struct computador Se declara unaestructura llamadacomputador 

7 { Abre la estructura

8 char marca[30]; Arreglo de tipo char  de 30 elementos

9 char pro[100]; Arreglo de tipo char  de 100 elementos

10

int long ram,cap; Variables de tipo intlong

11

}; Cierra estructura

12

computador *p; Apuntador P llamadocomputador 

Page 8: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 8/15

13

clrscr(); Limpia pantalla

14

cout<<"BIENVENIDO AL REGISTRO DECOMPUTADORES"<<endl;

Mensaje debienvenida con lainstrucción cout

15

p=(computador *)malloc(sizeof(computador)); Se reserva memoriacon malloc y se leasigna a p

16

 

17

for (i=0; i<3; i++) Ciclo para ingresar  los 3 computadores

18

{ Abre el ciclo

19

cout<<"marca del computador"<<endl; Pide ingresar marcadel computador 

20

cin>>p[i].marca; Captura marca

21

cout<<"tipo de procesador"<<endl; Pide ingresar tipo deprocesador delcomputador 

22

cin>>p[i].pro; Captura tipo deprocesador 

23

cout<<"memoria ram instalada"<<endl; Pide ingresar memoria delcomputador 

24

cin>>p[i].ram; Captura memoria

25

cout<<"capacidad del disco duro"<<endl; Pide ingresar capacidad del discodel computador 

26

cin>>p[i].cap; Captura capacidadde disco

27

} Cierra ciclo

28

cout<<"\t"<<" *** LOS COMPUTADORES QUEUSTED INGRESO SON:"<<endl;

Mensaje deresultados

29

cout<<endl; Salto de linea

30

//for (i=0; i<3; i++)

31

i=0; Declara I inicializadaen cero

32

while(i<3) Ciclo mientras seamenor a 3

33

{ Abre ciclo

34

cout<<"la marca del computador es:"<<p[i].marca<<endl;

Imprime marca

Page 9: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 9/15

35

cout<<"el tipo de procesador es:"<<p[i].pro<<endl;

Imprime procesador 

36

cout<<"la memoria ram instaladaes:"<<p[i].ram<<endl;

Imprime memoria

3

7

cout<<"la capacidad del disco duro

es:"<<p[i].cap<<endl;

Imprime capacidad

38

i++; Incrementa i

39

} Cierra ciclo deimpresión

40

getch(); Espera que elusuario presione unatecla

41

free (p); Libera memoria en p

42

} Cierra main

Nota: tuve problemas con este compilador (Borland 5.5), genera un mensajedesde el sistema operativo.Con el turbo c++ 3.0 funciona bien, pero desde la consola no me funciona el

botón de captura de imagen es por eso que capture esta imagen.

Page 10: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 10/15

4. Aplicación de la Memoria Dinámica con New y Delete. Implemente unprograma en C++ para gestionar memoria dinámica con los operadores New yDelete para que almacene los datos básicos de 3 programas académicos de laUNAD de los cuales se requiere conocer (El código del programa, nombre del

programa, el nombre de la escuela a la cual pertenece el programa) para locual se sugiere hacer uso de una estructura llamada programa, incluya

Page 11: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 11/15

variables de tipo apuntador. Como resultado se espera el código fuentedebidamente documentado cada línea y la captura de pantalla de la imagen delresultado después de la ejecución.

#include <iostream.h> Libreria para cout, cin, entreotras

#include <conio.h> Para getch, clrscr  

 

#include<string.h> Para adena de caracteres(gets)

void main() Funcion principal

{ Abre function

clrscr(); Limpia pantalla

int *codigo; Apuntador codigo de tipo entero

char *nombre[50]; Apuntador nombre de tipo char  char *escu[50]; Apuntador Esch de tipo char  

 

int cod,i; Variables cod, i de tipo entero

char nom[50]; Areglo nom de 50 elemtos tipochar 

char esc[50]; Areglo esc de 50 elemtos tipochar 

 

codigo =new int ; Crean un espacio en memoriade tipo int y se almacena en

codigonombre[50]=new char[50]; Crean un espacio en memoria

de tipo char y se almacena ennombre

escu[50]=new char[50]; Crean un espacio en memoriade tipo char y se almacena enEsch

 

for (i=0;i<3;i++) Incio de ciclo para ingresar  datos

{ Llave de aperture del ciclo 

cout<<"ingrese codigo delprograma"<<endl;

Pide codigo

cin>>cod; Captura codigo

cout<<"ingrese nombre delprograma"<<endl;

Pide nombre

gets(nom); Captura nombre con gets quees para cadenas

cout<<"ingrese nombre de la escuela delprograma"<<endl;

Pide escuela

gets(esc); Captura escuela con gets} Cierra el ciclo

Page 12: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 12/15

*codigo = cod ; Almacena cod en el puntero *codigo

*nombre=nom; Almacena nom en el puntero *nombre

*escu=esc; Almacena esc en el puntero *

Esch 

cout <<"\t LOS TRES(3)PROGRAMASACADEMICOS SON:\n\n";

Mensaje

for (i=0;i<3;i++) Inicio ciclo de impresión

{ Abre ciclo

cout <<"El codigo es:" <<*codigo<<endl ; Imprime codigo

cout <<"El nombre es:" <<*nombre<<endl;

Imprime nombre

cout <<"El nombre de la escuela es:"

<<*escu ;

Imprime escuela

delete codigo; Libera memoria de codigo

delete nombre; Libera memoria de nombre

delete escu; Libera memoria de escuela

} Cierra ciclo

getch(); Espera oprimer tecla

} Cierra main

IMAGEN DEL CODIGO

Page 13: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 13/15

Page 14: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 14/15

CONCLUSIONES

En esta actividad se practico ejercicios con las diferentes funciones yoperadores que presenta el modulo, como por ejemplo las funciones malloc yfree y operadores como new y delete.Además se indago en fuentes externas para lograr los objetivos de este trabajo.Una vez terminado este trabajo se siente una gran satisfacción por esforzarse ycomprender conceptos un poco complejos como los apuntadores.

Page 15: TC1_301305_61

5/13/2018 TC1_301305_61 - slidepdf.com

http://slidepdf.com/reader/full/tc130130561 15/15

BIBLIOGRAFÍA 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