Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ivancea96

#641
Tal como pusiste en el tercer intento, puedes comparar cadenas con == o != sin problema.
El primer intento, a simple vista, parece correcto. Si tal, puedes colocar couts para ver exactamente qué hace el programa y ver dónde podría estar el fallo (o depurarlo como tú quieras, vamos). Más que nada para ver por dónde pasa, que valores compara, etc.

Por cierto:
Código (cpp) [Seleccionar]
Nodo *aux = new Nodo(value);
aux=first;

Creas ese nodo y no lo destruyes (En general, no deberías crearlo, no hace nada, le pones otro valor al momento a la variable)

En el main, pusiste:
Código (cpp) [Seleccionar]
cout<<"What's the new value?"<<endl;
cin>>value;

Querrías decir que "old value", o "the value to find". Error sintáctico, pero cuidado no vaya a tener que ver a la hora de testearlo.
#642
Programación C/C++ / Re: enteros de 12 bits
3 Marzo 2017, 17:00 PM
Oh, un detalle más. El array, en vez de char, debería ser de unsigned char (sinó, si el valor coincide negativo, la transformación a short será negativa y no serviría.

Bueno, estaba revisando el tema, y la colocación de los bits puede que la haya interpretado al revés.

Puedes testear con:

#include <stdio.h>

void printBinary(void* address, unsigned int bytes){
//for(int i=0; i<bytes; i++){
for(int i=bytes - 1; i>=0; i--){
int mask = 1 << 7;
do{
printf("%c", (((char*)address)[i] & mask? '1' : '0'));
mask >>= 1;
}while(mask);

//if(i+1 < bytes)
if(i-1 >= 0)
printf(" ");
}
}

int main(){
unsigned char arr[2];
arr[0] = 0b01101010; // 00000110 10101100
arr[1] = 0b11000001; // 00001100

short result = (((short)arr[0]) << 4) | (arr[1] >> 4);

printBinary(&arr[0], 1);
printf("\n");
printBinary(&arr[1], 1);
printf("\n");
printBinary(&result, 2);
printf("\n");
}


Si arr[0] = AB y arr[1] = CD, la salida es ABC.
No es lo que pusiste tú al principio, pero bueno, el cambio es mínimo. Perdona la confusión :p

CitarPor otro lado porque
0xFF valdria 0000 0000 1111 1111 ?
Am no sé cómo responder a esto. Es así. Hexadecimal a binario.
#643
TCHAR puede ser wchar_t o char, según. Puedes comprobarlo con:

Código (cpp) [Seleccionar]
#include <typeinfo>
#include <iostream>
#include <windows.h>

using namespace std;

int main(){
cout << "char: " << typeid(char).name() << endl;
cout << "wchar_t: " << typeid(wchar_t).name() << endl;
cout << "TCHAR: " << typeid(TCHAR).name() << endl;
}


En mi caso, siendo TCHAR un char, me funciona correctamente.

Definiendo "UNICODE", entonces pasa a wchar_t, y el programa quedaría:

Código (cpp) [Seleccionar]
#define UNICODE

#include <typeinfo>
#include <iostream>
#include <windows.h>

using namespace std;

int main(){
wchar_t buffer[256];
HMODULE exe = GetModuleHandle(0);
GetModuleFileName(exe, buffer, 256);
wcout << buffer << endl;
}


Nótese que el array ahora es de wchar_t, y que en vez de cout, utilizo wcout. En vez de array de wchar_t también podrías usar array de TCHAR. Sin embargo, te interesa saber en cada caso si es wchar_t o char, así que ponerlo manualmente te librará de problemas.
#644
Programación C/C++ / Re: enteros de 12 bits
2 Marzo 2017, 15:49 PM
Oh sí, me confundí. 0xFF.
#645
Programación C/C++ / Re: enteros de 12 bits
2 Marzo 2017, 14:45 PM
Correcto.
Como detalle extra, en vez de (x << 8) >> 8, puedes hacer x & 0xFFFF.
#646
Programación C/C++ / Re: enteros de 12 bits
2 Marzo 2017, 13:09 PM
Am casi pero:
arr[1] >> 4 // desplazaria los bits 4 veces hacia la derecha, quedando este valor:
0000 1100 0000 0000

Eso no es así. 1100 0001, desplazando a la derecha, queda: 0000 1100
Con lo cual, 0000 1010 0110 0000 | 0000 1100 == 0000 1010 0110 1100
#647
En primer lugar, con typedef, coo dice su nombre, defines tpos. Elevation no es un tpo e suna variable.

Luego: Elevation.TokenIsElevated. Elevation e sun DWORD, ¿cómo podría tener un campo "TokenIsElevated"?
#648
Programación C/C++ / Re: enteros de 12 bits
2 Marzo 2017, 08:51 AM
Los únicos operadores que necesitarás, en principio, son los de desplazamiento de bits (<<, >>) y and (&).

Suponiendo que tengas los 24 bits en un array de 3 chars:

char arr[3]; // 2 enteros de 12 bits
short a, b; // Salida

// Suponiendo que 'a' sea el primer byte y mitad del segundo, pues:

a = (((short)arr[0]) << 4) | (arr[1] >> 4);


Y el resto, más de lo mismo.
#649
En vez de %.d en los printf, pon %d asecas.
#650
Hay alguna cosa de ese código que no entiendo, como ese limitLeftOrRight = 5;, que viendo ese código, no tiene sentido (siempre le asignas 5).

En cualquier caso, si quieres que el árbol esté siempre balanceado, bastaría con algo como:

Código (cpp) [Seleccionar]
if(countElements(tree->left) > countElements(tree->right)) {
    insertNode(tree->right, x);
}else{
    insertNode(tree->left, x);
}


Ahí el tema ya sería hacer la función countElements(). Dado que sería recursiva, podría ser más útil simplemente guardar en cada nodo la cantidad de elementos que tiene.