Buenas, tengo un problema con la asignatura de Algoritmos y Estructura de Datos, les paso uno de los ejercicios que me piden:
- El primero inserta un único elemento dentro del conjunto. Para ello
Se debe crear un bloque auxiliar conteniendo la máscara ONE_MASK y
hacer un desplazamiento de bits a la izquierda tantas veces como
indique el elemento a insertar. Después se efectuará el or lógico con
el conjunto llamante.
El bloque viene declarado así debajo de "using namespace std", el resto de elementos al igual que la función a desarrollar se encuentra en una clase:
(la máscara representa el bit menos significativo a 1)
#include <iostream>
using namespace std;
typedef unsigned long block_t; /*aquí*/
typedef unsigned char item_t;
typedef unsigned char block_size_t;
#define EMPTY_SET_MASK 0x00
#define ONE_MASK 0x01 /*Mascara que mencionan en el enunciado*/
class bit_set {
/*ATRIBUTOS PRIVADOS*/
block_t block_; /*Bloque de bits*/
block_size_t block_size_;
En la función que piden realizar se pasan los siguientes datos:
void set_union(item_t i);
Si necesitan más datos o no me he explicado bien diganmelo.
Gracias por adelantado.
Te olvidaste de decir cuál es el problema.
Cita de: ivancea96 en 6 Marzo 2014, 18:55 PM
Te olvidaste de decir cuál es el problema.
Es el que puse arriba en negrita, pero principalmente
el problema es que no se a que se refiere exactamente con bloque auxiliar (¿Quizas declarar otro como: block_t nuevo = block_ dentro de la funcion),
y tampoco se como introducir una mascara dentro de un bloque de bits.
En verdad no se muy bien qué tienes que hacer. Pero si te ayuda, te dejo algo:
/** 0b significa valor en binario **/
int var = 2; //0b10
var << 1; //0b100 Se ha desplazado 1 posición (izquierda)
var << 3; //0b100000 Se ha desplazado 3 posiciones (izquierda)
var >> 5; //0b1 Se ha desplazado 5 posiciones (derecha)
Esos son los desplazamientos.
Como dije, ni idea de lo que estáis dando, ¿en clase?
Suerte.
Cita de: ivancea96 en 6 Marzo 2014, 22:19 PM
En verdad no se muy bien qué tienes que hacer. Pero si te ayuda, te dejo algo:
/** 0b significa valor en binario **/
int var = 2; //0b10
var << 1; //0b100 Se ha desplazado 1 posición (izquierda)
var << 3; //0b100000 Se ha desplazado 3 posiciones (izquierda)
var >> 5; //0b1 Se ha desplazado 5 posiciones (derecha)
Esos son los desplazamientos.
Como dije, ni idea de lo que estáis dando, ¿en clase?
Suerte.
Más bien sería...
/** 0b significa valor en binario **/
int var = 2; //0b10
int var2 = var << 1; //0b100 Se ha desplazado 1 posición (izquierda)
var2 = var << 3; //0b100000 Se ha desplazado 3 posiciones (izquierda)
var2 = var >> 5; //0b1 Se ha desplazado 5 posiciones (derecha)
Al hacer un desplazamiento el valor no se guarda por defecto en la variable desplazada.
Cita de: eferion en 7 Marzo 2014, 08:06 AM
Al hacer un desplazamiento el valor no se guarda por defecto en la variable desplazada.
No dije que se guardase. Lo pondré de otra forma:
/* ... */var << 1 == 0b100;
Cita de: ivancea96 en 7 Marzo 2014, 15:21 PM
No dije que se guardase. Lo pondré de otra forma:
/* ... */var << 1 == 0b100;
ok. Solo lo puse por si acaso ;)