elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  modificacion de variables constantes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: modificacion de variables constantes  (Leído 1,545 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
modificacion de variables constantes
« en: 20 Mayo 2014, 04:12 am »

Un saludo a todos, solo tengo una pequeña duda, tengo un codigo de arboles B, pero necesito modificar el orden del arbol B, o sea cuantos subarboles puede tener pero en el codigo el orden es una constante para crear el arreglo, y me da error al intentar modificar porque esta declarada como una constante, en fin lo que necesito es modificar esa variable de modo que el usuario defina el orden aqui la parte del codigo
Código
  1. #include <stdio>
  2. #include <stdlib>
  3. #include <conio>
  4.  
  5. #define MAX_LONG 90
  6. #define ARRIBA 72
  7. #define ABAJO 80
  8. #define ENTER 13
  9.  
  10. const int M=5;//aqui necesito modificar durante la ejecucion del programa
  11.                         // pero me da error si solo la declaro como una variable no
  12.                          // constante por lo del arreglo de claves que esta en la
  13.                         //estructura del nodo
  14. struct nodo
  15. {
  16.   int n; // n < M n? de claves en el nodo siempre ser? menor que el orden del B tree
  17.   int arreglo_claves[M-1]; //arreglo de claves
  18.   struct nodo *p[M]; // (n+1 punteros que van a ser usados
  19. }*root=NULL;//la raiz lo inicializamos en NULL


En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: modificacion de variables constantes
« Respuesta #1 en: 20 Mayo 2014, 05:42 am »

Necesitas hacer la declaración como una variable y después declarar la variable "arreglo_claves" de forma dinámica. Con new si estás en C++ o con malloc si estás en C.


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: modificacion de variables constantes
« Respuesta #2 en: 20 Mayo 2014, 08:37 am »

una constante, por definición, no puede ser modificada durante la ejecución del programa... en caso contrario no sería "constante".

Si necesitas cambiar ese valor de forma dinámica, tienes que usar, por definición, memoria dinámica. La memoria dinámica se reserva como te ha comentado El Benjo, es decir, usando malloc o calloc para reservar la memoria y free para liberarla.

El proceso en sí es sencillo:

1. Modifica tu estructura para poder hacer reservas dinámicas de memoria:

Código
  1. struct nodo
  2. {
  3.   int n; // n < M n? de claves en el nodo siempre ser? menor que el orden del B tree
  4.   int *arreglo_claves; //arreglo de claves
  5.   struct nodo **p; // (n+1 punteros que van a ser usados
  6. };

2. Crea una función que te permita hacer las reservas de memoria:

Código
  1. struct nodo* NuevoNodo( int n, int M )
  2. {
  3.  struct nodo* nuevo_nodo = (struct nodo*)malloc( sizeof( struct nodo ) );
  4.  nuevo_nodo->arreglo_claves = (int*)calloc( M - 1, sizeof( int ) );
  5.  nuevo_nodo->p = (struct nodo**)calloc( M, sizeof( struct nodo* ) );
  6.  
  7.  return nuevo_nodo;
  8. }

La diferencia entre malloc y calloc es que calloc pone todos los bits a 0, malloc deja la memoria con los datos que tuviese previamente ( basura ).

3. Estaría bien tener una función que permita liberar toda esa memoria.

En este caso te hace falta un free por cada malloc o calloc... esta parte te la dejo a tí.

4. Usa variables con sentido, M y n no significan absolutamente nada.
En línea

d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: modificacion de variables constantes
« Respuesta #3 en: 20 Mayo 2014, 12:31 pm »

Agradezco su orientacion, solo algo sobre M y n, por definicion en arboles B, n es el numero maximo de ramas que puede tener el nodo y M-1 es el numero maximo de claves por nodo, saludos
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: modificacion de variables constantes
« Respuesta #4 en: 20 Mayo 2014, 12:40 pm »

... solo algo sobre M y n, por definicion en arboles B, n es el numero maximo de ramas que puede tener el nodo y M-1 es el numero maximo de claves por nodo ...

Si para programar decides usar este tipo de terminologías, más te vale no olvidar nunca las variables utilizadas para cada algoritmo y tener siempre presente qué algoritmo estás editando en cada momento.

Si en vez de 'M', te encuentras 'max_claves_nodo', y en vez de 'n' tienes 'max_ramas', por ejemplo, de seguro que nunca te confundirás al identificar dichas variables... ni tu ni nadie que pase por ese código.

Por cierto, tal y como está modelada tu estructura, 'n' no significa "máximo de ramas", sino "número actual de ramas". Básicamente es así porque mientras ( n < M ), podré añadir ramas nuevas e incrementar 'n' y el sistema seguirá funcionando... si 'n' fuese un máximo no podría incrementarlo.

Ese matiz es importante y da idea de que usar caracteres sueltos para poner nombres a variables no suele ser una buena idea.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
NekroAyuda: Introducción a las Variables, Constantes y Tipos de Datos. « 1 2 »
Programación Visual Basic
NekroByte 10 25,032 Último mensaje 15 Marzo 2005, 13:52 pm
por NekroByte
[Solucionado] Constantes de carácter y constantes de cadena de carácteres
Programación C/C++
Caster 4 2,843 Último mensaje 20 Febrero 2012, 15:43 pm
por Caster
Duda sobre variables y constantes
PHP
Senior++ 2 1,341 Último mensaje 21 Noviembre 2013, 19:48 pm
por Senior++
¿Guardar datos fijos en variables constantes, enumeraciones o en otro sitio?
.NET (C#, VB.NET, ASP)
Meta 3 1,400 Último mensaje 15 Enero 2016, 15:22 pm
por Meta
Modificacion variables BATCH
Scripting
victme 1 944 Último mensaje 6 Septiembre 2018, 10:16 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines