|
641
|
Programación / Programación C/C++ / Re: Modificar nodo en una lista dinámica.
|
en: 3 Marzo 2017, 17:22 pm
|
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: 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: 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 / Programación C/C++ / Re: enteros de 12 bits
|
en: 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) } } 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); printBinary(&arr[1], 1); printBinary(&result, 2); }
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 Por otro lado porque 0xFF valdria 0000 0000 1111 1111 ? Am no sé cómo responder a esto. Es así. Hexadecimal a binario.
|
|
|
643
|
Programación / Programación C/C++ / Re: Problema con visual estudio usando GetModuleFileName();
|
en: 2 Marzo 2017, 18:08 pm
|
TCHAR puede ser wchar_t o char, según. Puedes comprobarlo con: #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: #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.
|
|
|
646
|
Programación / Programación C/C++ / Re: enteros de 12 bits
|
en: 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
|
Programación / Programación C/C++ / Re: Como resolver este error
|
en: 2 Marzo 2017, 08:53 am
|
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 / Programación C/C++ / Re: enteros de 12 bits
|
en: 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.
|
|
|
650
|
Programación / Programación C/C++ / Re: [C++] Problema con Arbol binario
|
en: 1 Marzo 2017, 14:40 pm
|
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: 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.
|
|
|
|
|
|
|