• Ir al contenido
  • Ir a la navegación
  • Ir al buscador
 
Infoudo
ING English
Directorio WAP para móvil, Tablet, iPhone o Smartphone

Centro de Noticias de la Universidad de Oriente

Categorías

 

Inicio  |  Contacto  |  Posts  |  TIENDA PUBLISHOP  |  Sobre nosotros  |  Registro y Planes  |  Pagos  |  Donaciones

Ver Código QR de esta página

Campaña #AyudemosaYuli  |  Campaña #AyudemosaStephany.  |  ¿Interesado(a) en cursos y resolución de ejercicios de materias prácticas? Para más información, contáctenos por: Teléfono: +58 (412) - 8226575. WhatsApp y Telegram: +58 (426) - 6836955 o escriba al correo: [email protected]. Únete al grupo: SISTEMAS (UDOMO).

[»] **Musica para tu celular

WEB TRANSLATOR

LINK for English Language

Use this link for translate into English


+ Buscar en InfoUDO

 

Pila dinámica

Tweet
 

lunes julio 11, 2016

Otra utilización fundamental de los punteros es para hacer uso de la pila dinámica de la memoria que administra el sistema operativo.

Lo primero que veremos es que todas las variables que definimos ocupan un espacio llamado PILA ESTATICA del programa (esta pila estática es limitada)

A medida que definimos variables se reduce el espacio disponible para definir otras variables.

Por ejemplo si definimos un vector con 10000 componentes de tipo entero en la función main debemos tener en cuenta que 40 Kb (si cada entero ocupa 4 bytes) de la pila estática estará reservado para dicha estructura.

Es común que en programas de mediano y gran tamaño la pila estática no nos alcance para almacenar los datos. En estos casos debemos recurrir a la PILA DINAMICA.

La PILA DINAMICA solo se puede acceder por medio de punteros.

La pila dinámica solo esta limitada por la cantidad de memoria ram del equipo. pila dinamica

Podemos observar que la memoria del equipo tiene cargado el sistema operativo que administra entre otras cosas los programas que se ejecutan. Todo programa que se ejecuta (Exe) tiene asignado un espacio para la pila estática (puede variar a partir, por ejemplo 64 Kb.)

La pila dinámica es toda la memoria Ram que no es ocupada por el sistema operativo y otros programas que están ejecutándose actualmente

.

Para acceder al espacio de memoria llamada Pila Dinámica debemos solicitarla al sistema operativo.

Para solicitar espacio en la pila dinámica debemos utilizar el operador new y es fundamental devolverla mediante el operador delete (la no devolución del espacio solicitado hará que nuestra computadora en algún momento se bloquee por falta de espacio en la memeoria ram)

La administración de la memoria dinámica ofrece una gran libertad al programador pero trae como contrapartida una gran responsabilidad para administrarla correctamente.

Problema 1:

Definir un vector de 5 elementos y localizarlo en la pila dinámica.

Programa:

#include<iostream>

using namespace std;

void main ()
{
  int *p;
  p=new int[5];
  for(int f=0;f<5;f++)
  {
    cout <<"Ingrese elemento:";
    cin >>p[f];
  }
  cout <<"contenido del vector:";
  for(int f=0;f<5;f++)
  {
    cout<<p[f]<<"-";
  }
  delete []p;
  cin.get();
  cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :

PilaDinamica1.zip

Para crear un vector en la pila dinámica debemos utilizar el operador new:

  int *p;
  p=new int[5];

Como vemos es distinta la sintaxis a la creación de un vector estático: int p[5]

Cuando trabajamos con el vector no hay cambios con respecto a lo que hemos visto con vectores estáticos (cargarlo, imprimirlo etc.):

  for(int f=0;f<5;f++)
  {
    cout <<"Ingrese elemento:";
    cin >>p[f];
  }
  cout <<"contenido del vector:";
  for(int f=0;f<5;f++)
  {
    cout<<p[f]<<"-";
  }

Y finalmente otro punto nuevo a tener en cuenta cuando trabajamos con variables localizadas en la pila dinámica es devolver el espacio utilizado:

  delete []p;

La localización de variables en la pila dinámica trae consigo dos ventajas, por una parte la pila dinámica es mucho más grande que la pila estática por lo que podemos definir muchas más variables que en la pila estática.

Por otro lado podemos solicitar espacio para estructuras de datos en tiempo de ejecución (Por ejemplo podemos definir un vector con una cantidad de componentes que dependa de una variable)

Problema 2:

Plantear una clase que permita administrar un vector de enteros. En el constructor solicitar al operador que ingrese la cantidad de componentes que tendrá el vector y lo cree y localice en la pila dinámica. Hacer un método que lo imprima y finalmente en el destructor eliminar el espacio ocupado por el vector creado previamente.

Programa:

#include<iostream>

using namespace std;

class Vector {
    int *p;
    int tamano;
public:
    Vector();
    void cargar();
    void imprimir();
    ~Vector();
};

Vector::Vector()
{
    cout <<"Cuantos elementos tendra el vector:";
    cin >>tamano;
    p=new int[tamano];
}

void Vector::cargar()
{
    for(int f=0;f<tamano;f++)
    {
        cout <<"Ingrese elemento:";
        cin>>p[f];
    }
}

void Vector::imprimir()
{
    for(int f=0;f<tamano;f++)
    {
        cout<<p[f];
        cout<<"-";
    }
}

Vector::~Vector()
{
    delete []p;
}

void main()
{
    Vector vector1;
    vector1.cargar();
    vector1.imprimir();
    cin.get();
    cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :

PilaDinamica2.zip

Definimos dos atributos, el puntero y una variable entera que indicará el tamaño del vector que quiere crear el usuario:

class Vector {
    int *p;
    int tamano;
public:
    Vector();
    void cargar();
    void imprimir();
    ~Vector();
};

En el constructor solicitamos que ingrese el tamaño del vector y lo creamos en la pila dinámica:

Vector::Vector()
{
    cout <<"Cuantos elementos tendra el vector:";
    cin >>tamano;
    p=new int[tamano];
}

La carga y la impresión del vector:

void Vector::cargar()
{
    for(int f=0;f<tamano;f++)
    {
        cout <<"Ingrese elemento:";
        cin>>p[f];
    }
}

void Vector::imprimir()
{
    for(int f=0;f<tamano;f++)
    {
        cout<<p[f];
        cout<<"-";
    }
}

En el destructor procedemos a liberar el espacio que había sido solicitado para crear el vector:

Vector::~Vector()
{
    delete []p;
}

En la main creamos un objeto de la clase Vector y llamamos a los métodos de cargar e imprimir (recordemos que el constructor se llama automáticamente, lo mismo que el destructor):

void main()
{
    Vector vector1;
    vector1.cargar();
    vector1.imprimir();
    cin.get();
    cin.get();
}
— @INFOUDO.OFICIAL

— Síguenos en Facebook@INFOUDO.OFICIAL

Categorías: #C++, #


[0] Atrás | Directorio
« Inicio
Apps Infoudo
Apps Infoudo ¡Descarga el icono directo en el menú de tu equipo!
[»] Las mejores Apps para tu celular
[»] Imágenes Gratis


Comenta o lee lo que otros opinan

COMPÁRTELO:

Indica que te gusta y comparte

Me Gusta :)Facebook Tuiteame :)Twitter .WhatsApp .Telegram . LinkedIn


También te puede interesar:

NOCIONES BÁSICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS.
Material de Apoyo del Curso de Programación - Lenguaje C++ - Periodo (Feb - May) del año en curso
Parámetros por valor y por referencia de objetos
Parámetros por valor y por referencia de datos simples
Métodos constantes (const)
Parámetros de un método constante (const)
Definición de constantes (const)
Directiva #define
Puntero this
Métodos estáticos de una clase

Ver Todas Las Páginas Relacionadas

« Operadores ++ y -- con variables de tipo puntero  |  Objetos dinámicos »
 
Apps Infoudo
 
Buscador:
Powered by Google:


Web móvil
Imágenes
La Web

 

Síguenos por RSS


Puedes leerlos mediante el navegador Firefox, lectores de noticias en la computadora o el móvil o usando el servicio de Feedburner de Google para recibir las notificaciones por correo electrónico.
RSS - Suscribirse usando Feedburner de Google

email Recibir las nuevas publicaciones de Infoudo por email

Atom


»Ir a URL
.....
Registra Gratis Tu Negocio
....
Sugerir un nuevo sitio WAP

...
¡Bloguea Ya!

..
Registro de Profesionales(Abogados, escritores, doctores, licenciados, ingenieros, etc.)
.
Soporte

Síguenos en las redes sociales

Síguenos en Facebook facebook.com/INFOUDO.OFICIAL Síguenos en Twitter @infoudomon Síguenos en Instagram @infoudooficial Síguenos en Telegram t.me/Infoudooficial
Síguenos en Facebook facebook.com/tuinfou Síguenos en Twitter @infoudomonagas
Síguenos en WhatsApp INFO UDO Síguenos en YouTube youtube.com/@infoudooficial
Síguenos en Facebook facebook.com/SergioAlemanFans Síguenos en Twitter @SergioAleman1 Síguenos en Instagram @sergioalemanfans
Síguenos en WhatsApp wa.me/qr/Y7Q232VLZPR5O1 Síguenos en Tiktok @sergioalemanoficial Síguenos en Tiktok @sergioalemanfans
Síguenos en Telegram t.me/SergioAlemanOficial Síguenos en YouTube youtube.com/@sergioaleman
Síguenos en Facebook facebook.com/boludooficial Síguenos en Twitter @bolUDOoficial Síguenos en Instagram @boludooficial Síguenos en Telegram t.me/Boludooficial
Síguenos en WhatsApp BolUDOoficial Síguenos en YouTube youtube.com/@boludo.oficial

Mis cuentas sociales

FB
Twitter
Pinterest
Instagram
Canales RSS con las últimas publicaciones
Otras  |  Linktree

Móvil: (0426 683 6955 - 0412 8226575) - E-mail: [email protected] - [email protected] - WhatsApp: +58 (0426) 683.69.55 / +58 (0412) 822.65.75


Copyscape
Volver arriba

Protocolo  |  Mapa del Sitio  |  Report Abuse - DMCA  |  Términos y Condiciones  |  Ayuda  |  Privacidad de Datos  |  Política de Cookies  |  Reportar un bug  |  Licencia: CC BY-NC-ND 3.0

Copyright ©2023 Infoudo. Todos los derechos reservados. Diseñado, desarrollado, administrado y mantenido por Sergio Alemán Mi perfil en GitHub


SUBIR