ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

RE: PRESENTACION


Enviado por   •  28 de Abril de 2014  •  4.683 Palabras (19 Páginas)  •  162 Visitas

Página 1 de 19

INTRODUCCION

new es un operador del lenguaje C++ y malloc es una función estándar.

- El operador new permite la creación de objetos y la incialización de éstos (mandar a llamar al constructor de la clase/objeto) Mientras que malloc NO.

- Con el operador new al generarse un error por la petición de memoria se genera una excepción , mientras que con malloc retorna NULL.

- Con el operador new, cuando solicitas memoria tu específicas la cantidad de elementos que requieres, mientras que con malloc indicadas la cantidad de bytes.

- Es posible sobrecargar el operador new dentro de tu clase/objeto mientras que con malloc NO.

- El operador new es "safe-type" mientras que malloc NO. Es decir, basta con mencionar que es requerido poner el tipo de dato, mientras que con malloc es un puntero void.

- Con el operador new para liberar la memoria utilizas delete, mientras que con malloc utilizas free.

Posiblemente se me escape una que otra, pero como vez existen grandes diferencias.

Una sugerencia a tu problema, es si utilizas C++ es preferible que utilices new, en caso contrario malloc.

Recuerda que con el ANSI C++, un estructura se puede tratar casi igual que una clase, por lo tanto es posible ponerle un constructor e incializar tus valores, entre otros.

Otras diferencias que podrás percibir es la forma sintáctica en como se solicita la memoria y se libera, las diferencias ya te las propuse, en cuanto a rendimiento y cosas semejantez, pienso que new sería un poco más rápido por ser un operador del lenguaje, mientras que malloc es una función.

Básicamente podrás sacar tus conclusiones en base a sus diferencias y utilizar la mejor que te convenga.

variable anónima en tiempo de ejecución, en caso de que dicha variable ya no sea necesaria.

La función new() reservará la cantidad apropiada de memoria para almacenar un dato de dicho tipo. El prototipo de

la función new() es:

void *new(<nombre_tipo>);

La función new también se encarga de averiguar cual es el tamaño en bytes del tipo de datos para el cual se desea

reservar memoria. Observar en el ejemplo anterior que se indica el que se quiere reservar memoria para un dato de tipo

char y no cual es el tamaño en bytes que se quiere reservar.

Tras una llamada con éxito, new() devuelve un puntero al primer byte de la región de memoria dispuesta del

montón. Si no hay suficiente memoria libre para satisfacer la petición, se produce un fallo de asignación y new()

devuelve un nulo.

La función delete() es la complementaria de new(). Una vez que la memoria ha sido liberada, puede ser

reutilizada en una posterior llamada a new(). El prototipo de la función delete() es:

La estructura de datos nos permite profundizar en el mundo de la programación, teniendo algunos aspectos importantes como la memoria del computador y la forma como se almacenan los datos en ésta, la forma como se puede liberar memoria dinámica mientras el programa esté en ejecución.

De ahí la importancia de tener claro los conceptos sobre variables estáticas y dinámicas, operadores y funciones para el manejo de la memoria dinámica y los apuntadores con la asignación dinámica de memoria.

Estos últimos son muy útiles en lenguajes sencillos como el C, ya que los apuntadores son una variable especial que permite guardar direcciones de otras variables, al igual que pueden pasar parámetros a las funciones para retomar valores.

Así que este primer trabajo colaborativo lo dedicaremos a realizar las actividades correspondientes a la aplicación de los conceptos relacionados con la primera unidad, lo cual nos va a permitir no solo afianzar nuestros conocimientos en programación, sino profundizar en ellos.

Memoria dinámica:

La reserva de memoria dinámica se hace en tiempo de ejecución después de leer los datos y de conocer el tamaño exacto del problema. Como consecuencia se adapta mucho mejor a las necesidades en cada caso.

El sitio donde se almacenan los objetos se denominan en ingles heap o free store traducido como montículo o memoria libre, y el sitio preciso donde se encuentre depende del compilador y el tipo de puntero utilizado. La creación y estrucción de los objetos esta en manos del programador a través de los operadores new y delete.

En C# las variables que se declaran son punteros y se pasan eficientemente con referencia, tampoco es necesario considerar la liberación de la memoria puesto que framework se encarga de liberar todas las referencias que no se estén utilizando y compactar la memoria para mejorar el rendimiento.

2.1.3 Ventajas de utilizar memoria dinámica vs memoria estática

La memoria dinámica sirve para que los programadores se adapten siempre al tamaño del problema que tienen que resolver sin desperdiciar recursos de memoria y esto se traduce en una mayor eficiencia en la ejecución de los programas, las ventajas de utilizar memoria dinámica se valoran mejor en comparación con la utilización de la reserva de la memoria estática, como se muestra en el siguiente cuadro.

TALER DE EJERCICIOS PARA SER RESUELTOS

1. Teniendo en cuenta la conceptualización y la aplicabilidad en el campo de la programación y el usos de la las variables estáticas y las variables dinámicas, realice un cuadro comparativo de las características, ventajas y desventajas.

VARIABLES ESTÁTICA

VENTAJAS DESVENTAJAS CARACTERÍSTICAS

Útil para variables locales

Para variables sensibles a la historia de un subprograma

Acceso directo permite mayor eficiencia

Falta de flexibilidad

No soporta recursión

Impide compartir memoria entre diferentes variables

Impide compartir memoria entre diferentes variables

VARIABLES DINÁMICAS:

VENTAJAS DESVENTAJAS CARACTERÍSTICAS

Útil para las estructuras dinámicas usando punteros

Alto grado de flexibilidad

Permite escribir código genérico

Dificultad en el uso correcto

Perdida en la capacidad de errores.

Las variables dinámicas se suelen utilizar para guardar resultados intermedios en los cálculos de las funciones.

2. Indique en dos párrafos la importancia de la gestión dinámica de memoria. Posteriormente en un cuadro comparativo, Identificar las principales diferencias entre la utilización de new y delete , frente a la utilización de malloc() y free().

3. Aplicación de operaciones con apuntadores.

De acuerdo a los fundamentos teóricos a cerca de las operaciones que se pueden realizar con apuntadores, documente cada línea de código de los siguientes enunciados.

Enunciado 1 No. de Líneas de código

int b = 15; // 1

int *x, *y; // 2

y = &b; // 3

x = y; // 4

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

Enunciado 2

Int punt; // 1

punt = punt + 1; // 2

punt = punt - 2; // 3

punt++; // 4

punt--; // 5

4. 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 el resultado que arroja el programa, se recomienda hacer una prueba de escritorio.

Enunciado 3 No. de Líneas de código

void main()

{

int m, *h, **s, ***q ; // 1

clrscr();

h = &m ; // 2

*h = 100 ; // 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();

}

5. Aplicación de la Memoria Dinámica.

Implemente el siguiente programa usando memoria dinámica con la funciones Malloc() y Free() para que

imprima en pantalla la fecha de cumpleaños de dos personas.

#include

Int main()

{

Int *fecha = new int [3]

fecha[0]= 2;

fecha[1]=7;

fecha[2]=1980;

cout <<"El día de mi cumpleaños es :" <<<"--"

<<<"--" <

delete[ ] fecha

return 0;

}

6. Implemente un programa que imprima los datos básicos de 5 automóviles (Marca, modelo, color, cilindraje) usando una estructura llamada automóvil, incluya variables de tipo apuntador.

De cuerdo a los fundamentos teóricos a cerca de las operaciones que se pueden realizar con los apuntadore, documente cada línea de código de los siguientes enunciados.

Enunciado 1 No de línea de código

int b = 15; //1. Se asigna a una variable entera (b) el valor 15

int *x, *y // 2.Define a x y y variables de tipo apuntador.

y=&b; // 3.Asigna y la dirección de b –apunta a b

x = y; // 4. a x se le asigna el valor de y

Cout<< “El resultado de x es:” << x; // 5. Imprime el valor que tiene x.

Recuerda que para imprimir una dirección como lo especificas debes primero asignarla o imprimirla con el operador &

ap= & a; //ap toma la dirección de a

cout <<"la dirección de a es " <<&a;

Enunciado 2

Int punt; //1. declara una variable entera llamada punt

Punt = punt + 1; //2. al valor de punt le suma uno

Punt = punt – 2; // 3.al valor de punt le resta dos

Punt++; //4. punt se incrementa en uno.

Punt--; //5. punt se decrementa en uno.

1. Teniendo en cuenta la conceptualización y la aplicabilidad en el campo de la programación y el usos de la las variables estáticas y las variables dinámicas, realice un cuadro comparativo de las características, ventajas y desventajas

VARIABLES ESTÁTICA

2. Indique en dos párrafos la importancia de la gestión dinámica de memoria. Posteriormente en un cuadro comparativo, Identificar las principales diferencias entre la utilización de new y delete , frente a la utilización de malloc() y free().

Enunciado 3 No. de Líneas de código

void main()

{

int m, *h, **s, ***q ; // 1 /* declara m como entero y se declaran los apuntadores *h es un apuntador,**s es un apuntador a apuntador y ***q es un apuntador a apuntador a apuntador de tipo entero*/

clrscr(); h = &m ; // 2. clrscr();//borra pantalla

*h = 100 ; // 3. *h = 100 ; // a *h le asigna el valor 100

s = &h ; // 4. a s le asigna la dirección de memoria de la variable h con su valor 100 **s=100 *h = 100, m =100

**s += *h ; // 5. a **s le asigna la sumatoria de **s + *h **s = 200, *h=200 y m=200

q = &s ; // 6. a q le asigna la direccion de memoria de s con su valor 200, ***q=200 **s = 200, *h=200 y m=200

***q += **s + *h ; // 7. a ***q le asigna la sumatoria de ***q + **s + *h, ***q=600 **s = 600, *h=600 y m=600

cout << " *h=" << *h << " n" ; //8. imprime en pantalla el valor de *h=600

cout << " **s=" << **s << " n" ; //9. imprime en pantalla el valor de **s=600

cout << "***q=" << ***q << " n" ; //10. imprime en pantalla el valor de ***q=600

getch(); // espera la introducción de una tecla para continuar

}

El resultado que se mostraria en pantalla es:

*h=600 n **s=600 n***q=600 n

o

5. Aplicación de la Memoria Dinámica.

Implemente el siguiente programa usando memoria dinámica con la funciones Malloc() y Free() para que imprima en pantalla la fecha de cumpleaños de dos personas.

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

int main()

{

int *fecha1,*fecha2,i,j,control=0,control2=0,control3=0;

char nombre1[30],nombre2[30];

fecha1 = (int * ) malloc (3 * sizeof (int));

cout<<"digite el primer nombre\n";

cin>>nombre1;

cout<<"digite el dia de nacimiento\n";

cin>>fecha1[0];

while(control != 1)

{

if(fecha1[0]<1 || fecha1[0]>31)

{

cout<<"dia no valido\n";

cout<<"digite el dia de nacimiento\n";

cin>>fecha1[0];

}

else control=1;

}

cout<<"digite el mes de nacimiento\n";

cin>>fecha1[1];

while(control2 != 1){

if(fecha1[1]<1 || fecha1[1]>12)

{

cout<<"mes no valido\n";

cout<<"digite el mes de nacimiento\n";

cin>>fecha1[1];

}

else control2=1;

}

if (fecha1[1]==2 && fecha1[0]> 29)

{

cout<<"el dia no corresponde con el mes\n";

system("PAUSE");

return 0;

}

else if(fecha1[1]==4 && fecha1[0]> 30)

{

cout<<"el dia no corresponde con el mesvuelva pronto\n";

system("PAUSE");

return 0;

}

else if (fecha1[1]==6 && fecha1[0]> 30)

{

cout<<"el dia no corresponde con el mesvuelva pronto\n";

system("PAUSE");

return 0;

}

else if(fecha1[1]==9 && fecha1[0]> 30) {

cout<<"el dia no corresponde con el mesvuelva pronto\n";

system("PAUSE");

return 0;}

else if (fecha1[1]==11 && fecha1[0]> 30) {

cout<<"el dia no corresponde con el mes vuelva pronto\n";

system("PAUSE");

return 0;

}

cout<<"digite el año de nacimiento\n";

cin>>fecha1[2];

while(control3 != 1)

{

if(fecha1[2]<1 || fecha1[2]>2010)

{

cout<<"año no valido\n";

cout<<"digite el año de nacimiento\n";

cin>>fecha1[2];

}

else control3=1;

}

if (fecha1[2]== 2010 && fecha1[1]>3 && fecha1[2]>17)

{

cout<<"aun no has nacido \n";

system("PAUSE");

return 0;

}

control=0;

control3=0;

control2=0;

fecha2 = (int * ) malloc (3 * sizeof (int));

cout<<"digite el segundo nombre\n";

cin>>nombre2;

cout<<"digite el dia de nacimiento\n";

cin>>fecha2[0];

while(control != 1)

{

if(fecha2[0]<1 || fecha2[0]>31)

{

cout<<"dia no valido\n";

cout<<"digite el dia de nacimiento\n";

cin>>fecha2[0];

}

else control=1;

}

cout<<"digite el mes de nacimiento\n";

cin>>fecha2[1];

while(control2 != 1){

if(fecha2[1]<1 || fecha2[1]>12)

{

cout<<"mes no valido\n";

cout<<"digite el mes de nacimiento\n";

cin>>fecha2[1];

}

else control2=1;

}

if (fecha2[1]==2 && fecha2[0]> 29)

{

cout<<"el dia no corresponde con el mes vuelva pronto\n";

system("PAUSE");

return 0;

}

else if(fecha2[1]==4 && fecha2[0]> 30)

{

cout<<"el dia no corresponde con el mes vuelva pronto\n";

system("PAUSE");

return 0;

}

else if (fecha2[1]==6 && fecha2[0]> 30)

{

cout<<"el dia no corresponde con el mes vuelva pronto\n";

system("PAUSE");

return 0;

}

else if(fecha2[1]==9 && fecha2[0]> 30) {

cout<<"el dia no corresponde con el mes vuelva pronto\n";

system("PAUSE");

return 0;}

else if (fecha2[1]==11 && fecha2[0]> 30) {

cout<<"el dia no corresponde con el mes vuelva pronto\n";

system("PAUSE");

return 0;

}

cout<<"digite el año de nacimiento\n";

cin>>fecha2[2];

while(control3 != 1)

{

if(fecha2[2]<1 || fecha2[2]>2010)

{

cout<<"año no valido\n";

cout<<"digite el año de nacimiento\n";

cin>>fecha2[2];

}

else control3=1;

}

if (fecha2[2]== 2010 && fecha2[1]>3 && fecha2[2]>17)

{

cout<<"aun no has nacido \n";

system("PAUSE");

return 0;

}

clrscr();

cout<<"la fecha del cumpleaños de "<<nombre1<<" es el proximo \n";

for (i=0;i<2;i++){

cout <<"--"<<fecha1[i]<<"--" ;}

cout<<"\n";

free(fecha1);

cout<<"la fecha del cumpleaños de "<<nombre2<<" es el proximo \n";

for (j=0;j<2;j++){

cout <<"--"<<fecha2[j]<<"--" ;

}

cout<<"\n";

free(fecha2);

cout<<"\n";

system("PAUSE");

}

6. Implemente un programa que imprima los datos básicos de 5 automóviles (Marca, modelo, color, cilindraje) usando una estructura llamada automóvil, incluya variables de tipo apuntador.

#include <iostream.h>

#include <conio.h>

void main()

{

struct automovil

{

int modelo;

char cilindraje[20],color[50],marca[50];

};

int i;

clrscr();

automovil *a;

cout<<"PROGRAMA AUTOMOVIL""\n";

a = new automovil[5];

for(i=0;i<=4;i++)

{

cout<<"\ningrese Marca del Auto: ";

cin>>a[i].marca;

cout<<"ingrese el Cilindraje del Auto: ";

cin>>a[i].cilindraje;

cout<<"ingrese el Modelo del Auto: ";

cin>>a[i].modelo;

cout<<"ingrese Color del Auto: ";

cin>>a[i].color;

cout<<"\n";

}

clrscr();

cout<<"Datos Basicos del auto registrado "<<endl;

for(i=0;i<=4;i++)

{

cout<<"Marca del Auto = "<<a[i].marca<<"\n";

cout<<"Cilindraje del Auto = "<<a[i].cilindraje<<"\n";

cout<<"Color del Auto = "<<a[i].color<<"\n";

cout<<"Modelo del Auto = "<<a[i].modelo<<"\n\n";

}

delete a;

getch();

}

JORGE

FERNANDA ESTÍLITA BELEÑO AVILA

...

Descargar como  txt (17.9 Kb)  
Leer 18 páginas más »
txt