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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14
61  Programación / Programación C/C++ / [C/C++] Insertar balanceado en Arbol binario en: 15 Mayo 2016, 00:16 am
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <assert.h>
  5.  
  6. struct nodo_binario {
  7.  int dato;
  8.  nodo_binario* izq;
  9.  nodo_binario* der;
  10. };
  11.  
  12. typedef nodo_binario* BST;
  13.  
  14.  
  15. unsigned int cant_nodos(const BST b) {
  16.  if (b == NULL) return 0;
  17.  else return 1 + cant_nodos(b->izq) + cant_nodos(b->der);
  18. }
  19.  
  20. /**
  21.  * Insetar en orden O(log n) x en b de manera que la cantidad de nodos del
  22.  * subarbol izquierdo (no la altura) sea 1 mayor o igual que la del subarbol derecho.
  23.  */
  24. void Insetar_Balanceado(int x, BST &b) {
  25. /// x siempre mayor que todos los elementos de b.
  26. BST aux = b;
  27. // Buscar nodo mas a la derecha e insertar
  28. while (aux != NULL) {
  29. aux = aux->der;
  30. }
  31. aux = new nodo_binario;
  32. aux->dato = x;
  33. aux->der = aux->izq = NULL;
  34.  
  35. if (cant_nodos(b->der) - cant_nodos(b->izq) == 1) {
  36. // Balancear... ?
  37.  
  38. }
  39. }

¿Como puedo implementar este procedimiento?

Quiero rotar el árbol de manera que la cantidad de nodos del subarbol izquierdo sea 1 mayor o igual que la del subarbol derecho.
Pero no se me ocurre como hacerlo, por ejemplo:

Si el árbol es vació solo inserto y no tengo que hacer nada mas ya que queda balanceado porque la cantidad de nodos del subarbol izquierdo y derecho es igual (vale 0).

Luego si b tiene un elemento, como x es mas grande que los elementos de b al insertar a la derecha por la propiedad de los arboles binarios de búsqueda me queda desbalanceado:
1
  \
   2
ya que el subarbol derecho tiene 1 nodo y es mayor que la cantidad del izquierdo que es 0.

Debería rotar para que quede:
   2
  /
1
62  Programación / Programación C/C++ / Re: buscar camino en un arbol AYUDAAAAA!!! en: 29 Abril 2016, 18:19 pm
UY que mal, en 7 horas te respondo...

¿Qué es...
texto_t
array_rama
nat
?

texto_t es un puntero a una estructura (registro) que tiene un campo que es otro puntero a un o varios carácter/es.

array_rama es un puntero a un enumerado que puede ser izq o der

typedef unsigned int nat;

me pregunto cómo se esto?... en fin.



Si lo que quieres es ver si una lista esta en un árbol binario de búsqueda.

Código
  1. #include <assert.h>
  2.  
  3. bool existe_camino(const lista l, const binario b) {
  4.  bool existe = true;
  5.  nodo* loc = inicio_lista(l); // loc es un puntero a un elemento de la lista
  6.  binario aux = b; // puntero auxiliar a arbol binario
  7.  assert(!es_vacia_lista(l) && !es_vacio_binario(b));
  8.  if (!es_igual_dato(loc, l, aux))
  9.    existe = false;
  10.  while (existe && loc != final_lista(l)) {
  11.    loc = siguiente(loc, l);
  12.    if (!es_vacio_binario(derecho(aux)) && es_igual_dato(loc, l, derecho(aux)))
  13.      aux = derecho(aux);
  14.    else if (!es_vacio_binario(izquierdo(aux)) && es_igual_dato(loc, l, izquierdo(aux)))
  15.      aux = izquierdo(aux);
  16.    else existe = false;
  17.  }
  18.  if (!es_vacio_binario(izquierdo(aux)) || !es_vacio_binario(derecho(aux)))
  19.    existe = false;
  20.  return existe;
  21. }

luego tu ves como llenar la estructura camino_t.
63  Programación / Programación C/C++ / Re: [C/C++] Detectar versión de Windows en: 8 Abril 2016, 04:36 am
Revisaste esta info?

Saludos!

Si, las funciones IsWindows**OrGreater en versionhelpers.h se basan en que por ejemplo en winXP no puedo ejecutar en modo compatibilidad con Win7, entonces estaría usando WinXP o mayor, pero no funciona si es al revés porque si ejecuto en modo compatibilidad con X versión, tengo esa versión o mayor y no se exactamente cual.

Creo que podría solucionarlo con esto: https://msdn.microsoft.com/en-us/library/windows/desktop/ms725492%28v=vs.85%29.aspx, luego lo pruebo.

Usando VerifyVersionInfo y lpVersionInfo de windows.h

64  Programación / Programación C/C++ / [C/C++] Detectar versión de Windows en: 8 Abril 2016, 02:45 am
Quería saber como hacer para detectar la versión de Windows en C, sin importar que ejecute el programa en modo de compatibilidad, de hecho me alcanza con encontrar el primer numero en la versión (en win xp y 2000 es el 5, en win 7, 8 y 8.1 es el 6, en win 10 el 10, etc.).

Se que hay otras menares de detectar la versión como si existe "Documents and Setting", si existe d3d12.exe, pero me gustaría algo mas general.

En Batch seria asi y siempre funciona ya que 'ver' es igual en modo compatibilidad.
Código
  1. @Echo off
  2. echo La version es: && ver
  3. ver | find "5." > nul
  4. If %ERRORLEVEL% == 0 (
  5.  echo Windows 2000 o XP detectado
  6. )

En Visual Basic Script seria:
Código
  1. Set oWMI = GetObject("winmgmts:\\.\root\CIMV2")
  2. Set cWin = oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
  3. For Each OS In cWin
  4.  message = MSGBOX(OS.Version, 16, "La version es:")
  5.  If Split(OS.Version,".")(0) = 5 Then
  6.    message = MSGBOX("Windows 2000 o XP detectado", 16, "Mensaje")
  7.  End If
  8. Next


Pero en C no me funciona, ademas de que GetVersion devuelve otro valor en win8.1 y win10.
Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3. int main() {
  4.  DWORD dwVersion = GetVersion();
  5.  DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
  6.  DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
  7.  DWORD dwBuild = 0;
  8.  if (dwVersion < 0x80000000)
  9.    dwBuild = (DWORD)(HIWORD(dwVersion));
  10.  printf("La version es: %d.%d.%d\n", dwMajorVersion, dwMinorVersion, dwBuild);
  11.  if (dwMajorVersion == 5)
  12.    printf("Windows 2000 o XP detectado");
  13. }

Lo que busco es lo que en el ejemplo seria el valor de la variable dwMajorVersion
65  Foros Generales / Dudas Generales / Re: Eliminé una carpeta $Recycle.bin y mi disco ahora tiene más espacio. en: 25 Marzo 2016, 02:51 am
Es que como bien dije en la pregunta. el disco es externo, di click en Propiedades y no pasaba de 2 bytes, y además la Papelera de Reciclaje estaba vacía...

Pero bueno, si dices que es una papelera entonces me imagino que debe ser una papelera interna del disco duro, que al ser eliminada solo borra la información que yo antes ya he eliminado ¿cierto?

Si estabas usando Linux al momento de borrar la carpeta eso explica que hallas podido borrarla y verla, en Windows esta oculta y necesitas permisos elevados para borrarla.
Lo que paso fue que debiste conectar el disco externo a un PC con Windows y borrar archivos, esos archivos quedaron en la papelera de reciclaje del propio disco, ya que por defecto se crea una papelera por partición, luego al acceder desde Linux la papelera de este sistema operativo estaba vacía, pero no la del disco externo (ya que no es reconocida como tal por el OS), por lo que habían archivos que no podías ver pero que seguían ocupando espacio. Al borrar esa carpeta los archivos se borraron definitivamente y de ahí salen esos 10GB, no perdiste información, fueron archivos "borrados" desde otra computadora.

Citar
una de ellas se llamaba $Recycle.bin y adentro tenía otra carpeta con un nombre largo y bastante raro.
En efecto el nombre es parecido a:
.../$Recycle.Bin/S-1-5-21-2981208099-3688789273-1871823384-1001/
66  Foros Generales / Dudas Generales / Re: Eliminé una carpeta $Recycle.bin y mi disco ahora tiene más espacio. en: 25 Marzo 2016, 01:20 am
Cómo se nota que no sirves para ayudar.

Lo siento, iba en broma, no creo que pase nada si borras la papelera, el propio Windows debería de crear otra.

Claro que es más eficiente Botón Secundario -> 'Vaciar Papelera de reciclaje' que borrarla desde el disco, pero cada uno con lo suyo.

Saludos.
67  Foros Generales / Dudas Generales / Re: Eliminé una carpeta $Recycle.bin y mi disco ahora tiene más espacio. en: 25 Marzo 2016, 00:22 am

¡Felicidades!, lo que acabas de borrar se llama "Papelera de reciclaje", suerte para seguir borrando cosas...
68  Sistemas Operativos / Windows / Re: La actualización a Windows 10 ya esta aquí en: 9 Marzo 2016, 02:02 am
Citar
Otra cosa que dice es que es una oferta por tiempo limitado, no se que quiere decir esto que no tiene limite que es para siempre o que solo es durante un reducido tiempo?

Significa que solo tienes tiempo para elegir si actualizar o no hasta el 29 de julio de 2016.

Si quieres que la actualización este disponible mas tiempo:

En la carpeta donde se descargo Windows 10 (o dentro de la .iso), vas a la carpeta "sources", hay un archivo llamado "gatherosstate.exe", lo copias a otro lado, lo abres y se creara un archivo de nombre "GenuineTicket.xml" ese archivo es como tu CD-KEY pero que solo funcionara en el PC que usaste para crearlo.
Luego de instalar Windows 10 lo copias a: "C:\ProgramData\Microsoft\Windows\ClipSVC\GenuineTicket".
y tendrás una licencia gratuita.


Hay muchos programas para bloquear la actualización a Windows 10, luego no te preocupes porque puedes descargar una .iso desde Microsoft.


Desde agosto de 2015 tengo Win10 instalado en una laptop, lo instale para probarlo y el único motivo por el que lo conservo es porque me da pereza quitarlo.
En mi opinión personal, en  cuanto a estética me parece horrible, es demasiado minimista, me gusta más el entorno gráfico KDE de linux con todos los efectos activados, y nada que hablar de la privacidad, cerca de cien opciones, deberían haber haber solo dos: "¿Quieres que Windows te espíe? |SI|  |NO|"
En cuanto al rendimiento, muy malo, consume muchos recursos.
 
69  Programación / Scripting / Re: Las comillas no salen. [Batch] en: 26 Febrero 2016, 01:20 am
Código
  1. @Echo off && title Buscador de personas
  2. set /p nombreap= Escribe el nombre y apellido:
  3. set /p pais= Escribe el pais:
  4.  
  5. start "" "http://www.paginaweb.com/dni/%pais%/%nombreap%"

Sí lo que vas a abrir contiene espacios debes ponerlo entre comillas, todo el argumento y no solo el nombre de la variable, pero como la sintaxis del comando Start es la siguiente:

START ["título"] [/D ruta] ...
    "título"    Título que se mostrará en la barra de título de la ventana.
     ruta        Directorio de inicio.

...lo que escribas entre comillas lo tomara como titulo, por eso debes poner otras comillas antes de la orden a ejecutar.
70  Sistemas Operativos / GNU/Linux / Kali linux no inicia - Cargando imagen de memoria inicial... en: 25 Febrero 2016, 18:03 pm
Al ingresar a Kali linux 2016.1 desde el grub me sale el siguiente mensaje:

Código
  1. Cargando Linux 4.4.0-kali1-amd64...
  2. Cargando imagen de memoria inicial...
  3. _

y se queda colgado.

Creo que se debe a alguna actualización y que se haya dañado algún archivo.

¿Alguien sabe como puedo repararlo sin tener que reinstalar el OS?, ya sea desde un liveCD o accediendo a la partición y reparar los archivos.
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines