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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 86
51  Foros Generales / Sugerencias y dudas sobre el Foro / Problema de visualización de la Portada/Inicio en: 28 Noviembre 2020, 09:17 am
Desde que he accedido al foro (hace unas 12 horas) he notado que en mi ordenador no se visualiza bien la página principal (portada) de elhacker.net. La barra superior de: Inicio | Foro | Blog | WarZone |... se ven correctamente pero la imagen superior aparece cortada (solo se ve "cker net").
Además el contenido central de la página aparece dispuesto en vertical (primero la parte que aparecía normalmente a la izquierda: elhacker.NET | Servicios | Descargas | Participa |..., debajo de lo anterior: el tablón de novedades | últimas entradas... | últimas noticias... |..., y debajo de estos últimos: Buscador | Boletín mensual | Estadísticas del Foro |...).

He probado a recargar la página varias veces y siempre se ve igual.
Me parece raro puesto que no he modificado ninguna configuración de mi ordenador. Sin embargo, si bajo el zoom del navegador al 80%, se vuelve a ver como siempre pero si lo dejo al 100% (como lo he tenido siempre) se ve como menciono arriba.

He accedido desde otro ordenador y en este se ve todo correctamente.
¿Alguien sabe por qué puede ser?
52  Programación / Programación C/C++ / Re: Necesito ayuda con un for en: 27 Noviembre 2020, 01:53 am
Bueno, echando un vistazo por encima, veo que ya está algo mejor.
De todas formas empiezo desde el principio:

CABECERAS: Sólo tienes que incluir las cabeceras necesarias, es decir, las que contengan las funciones que tú vas a utilizar. En este caso tienes:
  • stdio.h -> Contiene las funciones de entrada/salida típicas de C (printf()/scanf() /Funciones sobre ficheros en C/...) -> No lo utilizas.
  • iostream -> Contiene las "funciones" de entrada/salida típicas de C++ (cout <</cin >>/...) -> Sí la utilizas.
  • string -> Contiene el tipo de dato std::string, entre otras cosas. -> Sí la utilizas.
  • conio.h -> Contiene entre otras cosas la función getch(). Esta librería no pertenece al estándar y está desaconsejado su uso. Un buen sustituto de getch() en C++ es cin.get() (que pertenece a <iostream>) y en C es getchar() (que pertenece a <stdio.h>). -> No la utilizas y no creo que lo necesites.
  • stdlib.h -> Contiene funciones como system()/srand()/rand() /conversores de tipos/... -> No la utilizas.
Todas las bibliotecas que no utilizas es mejor eliminarlas. Primero para ahorrar espacio ya que cada include lo que hace es copiar el contenido de cada uno de esos ficheros. Y segundo, para sabe cuándo necesitas una u otra biblioteca.
Además todas las que terminan en ".h" son propias de C. Estas también funcionan en C++ pero las propias de C++ se denominan igual pero quitando el ".h" del final y añadiendo una "c" al principio -> cstdio/cstdlib/...

VARIABLES/CONSTANTES GLOBALES/LOCALES
No es recomendable utilizar variables globales. Las variables es mejor crearlas locales a una función y utilizar los parámetros cuando sea necesario para enviarlas a otras funciones.
Sin embargo, es mejor creas constantes globales como si fueran valores de configuración antes que colocar números sueltos por ahí. Así es más fácil modificar el programa. Aunque si se va a inicializar un array al momento de la declaración, no es necesario determinar su longitud ya que esta será la que tenga una vez inicializado.
Además el método tradicional de crear arrays en C/C++ dice que si son estáticas, deben declararse con constantes y no se permiten variables. Para crear arrays con tamaños definidos en tiempo de ejecución hay que usar memoria dinámica.

Por convenio, los nombres de variables/funciones se definen en lowerCamelCase (primera palabra en minúsculas y a partir de ahí cada palabra con la primera letra en mayúsculas) y los nombres de constantes en SCREAMING_SNAKE_CASE (todas las letras en mayúsculas y las palabras separadas por guión bajo _).
Código
  1. const int NUM_ALUMNOS = 2; // Este valor deberia usarse tambien para el array de nombres para asegurar la misma longitud
  2. const int NUM_MATERIAS = 4;

FILTRO DE DATOS
Cuando se quiere pedir un dato hasta que éste sea válido se suele utilizar un filtro do-while(). La estructura do-while() primero ejecuta lo que hay dentro y luego comprueba la condición. Se diferencia del while() en que el código que hay dentro del do{} al menos se ejecutará una vez.
Código
  1. int numero;
  2. bool valido;
  3. do { // Hacer esto...
  4.  cout << "Introduce un numero positivo: ";
  5.  cin >> numero;
  6.  // Si se quiere mostrar un mensaje es mejor crear una variable para guardar la comprobacion
  7.  // Sino tambien se puede poner la condicion directamente en los parentesis del while()
  8.  valido = (numero >= 0);
  9.  if(!valido)
  10.    cout << "El numero debe ser positivo" << endl;
  11. } while(!valido); // ...mientras el numero introducido no sea valido

OTROS ERRORES
  • Las variables i y j de la línea 14 nunca se utilizan. En los bucles de las líneas 20 y 32 estás declarando otras dos que solo existen hasta que acabe cada uno de los for().
  • El bucle de la línea 32 está dentro del if() de la línea 24 por lo que solo se ejecutará bien si de primeras introduces un número de materias no válido. Cuando apliques el filtro do-while() tendrás que poner el for() de la línea 32 después del do-while() para que se ejecute siempre que se tenga ya un número válido.
  • No estás utilizando la matriz notas[][]. Deberías utilizarla para guardar en cada fila las notas de un alumno y en cada columna la nota de una materia. Esto se haría así:
Código
  1. for(int i = 0; i < NUM_ALUMNOS; ++i){
  2.  for(int j = 0; j < NUM_MATERIAS; ++j){
  3.    cout << "Introduce la nota " << (j+1) << " del alumno " << (i+1) << ": ";
  4.    cin >> notas[i][j];
  5.  }
  6. }

Ahora tienes que revisar todas estas cosas que no son pocas e introducirlas en tu programa correctamente.
Suerte. :-X

PD: El bucle for() de la línea 32 debería estar identado al mismo nivel que el bucle while() de la línea 27. No se trata de identar cada fragmento de código más a la derecha sino de mantener una estructura de orden para saber qué cosas están dentro de qué otras cosas y cuáles están al mismo nivel.
53  Programación / Programación C/C++ / Re: Necesito ayuda con un for en: 26 Noviembre 2020, 23:38 pm
Lo primero de todo, el código debes publicarlo entre etiquetas de Código GeSHi. Para ello debes seleccionar el código e ir al desplegable que dice Código GeSHi (encima del cuadro de texto) para seleccionar el lenguaje correspondiente.
También puedes agregar las etiquetas manualmente.

Ese fragmento es una locura de código y la identación de las llaves lo hace todavía más complicado:
  • Líneas 4/5/8/11 -> Utilizas una variable j que no aparece por ningún sitio.
  • Línea 13 -> Declaras una variable j que interferirá con la que tenías antes declarada (en caso de que así fuese).
  • Línea 13 -> Utilizas una variable <materias> que tiene toda la pinta de no estar declarada o inicializada. -> Esto da que pensar que la variable <alumnos> igual tampoco lo está.
  • Utilizas la matriz notas[][] tanto para guardar el número de materias como las notas. Unos datos están sobrescribiendo los otros.
  • El bucle de la línea 13 solo se ejecuta cuando se cumple la condición de la línea 5.
  • La condición de la línea 5 y el bucle de la línea 8 son redundantes. Ese funcionamiento se puede conseguir tan solo con un bloque do-while()

Ahí tienes los errores que veo en ese fragmento.
Intenta solucionarlo y si no lo consigues coloca el código completo (al menos el de esa función) para poder ver lo que está bien y lo que no. Recuerda publicar el código entre etiquetas de Código GeSHi. También puedes explicar con detalles lo que estás intentando hacer.
54  Programación / Programación C/C++ / Re: ayuda con vectores en: 26 Noviembre 2020, 21:19 pm
Esto es porque el prototipo de la función posicion() no tiene parámetros.
La función posicion(string, vector<string>) está implementada después de main() y no está definida antes por lo que no puedes utilizarla dentro del main().

EDIT: En vez de utilizar una variable global <lugar>, haz que la función posicion() devuelva la posición:
Código
  1. int posicion(string, vector<string>);
55  Programación / Programación C/C++ / Re: Arreglos y rangos en: 26 Noviembre 2020, 01:16 am
No entiendo muy bien lo que quieres hacer.
Tienes una serie de notas de 0 a 10 y quieres que el usuario introduzca un valor que será la longitud de cada rango de notas?? Es eso lo que quieres hacer??
De ser así, hay varios factores a tener en cuenta:
  • Lenguaje de programación (C o C++)
  • Qué vas a hacer con esos valores? Basta con mostrarlos o hay que guardarlos para trabajar con ellos más adelante?
  • Qué es la forma más simple posible? En programación hay muchas formas de hacer las cosas y cada una tiene sus cosas buenas y sus cosas malas.

Añade el código de lo que lleves hecho o lo que no consigas hacer para tenerlo más claro.
56  Programación / Programación C/C++ / Re: Código de inventario en C en: 25 Noviembre 2020, 06:30 am
No lo ordena al revés, eso ha sido casualidad por el orden en que los has introducido tú.
Lo que hace en realidad es intercambiar siempre el último con el penúltimo y fin. Esto ocurre principalmente por dos errores:
  • Llaves.
  • Error en la condición del bucle interno.

Tu código (resumido) bien identado para que lo veas es:
Código
  1. void menuOrdenDescrp(){
  2.    // declaraciones y otros...
  3.    // parte del if...
  4.    } else {
  5.        for (i = 0; i<numeroProductos-1; i++){
  6.            strcpy(min, productos[i].descripcion);
  7.            pos=i;
  8.            for (j=i+1; j<numeroProductos-1; j++) // No utilizas llaves. Este bucle solo comprende el bloque del if()
  9.                if (strcmp(productos[j].descripcion , min) < 0){
  10.                    strcpy(min, productos[j].descripcion);
  11.                    pos=j;
  12.                }
  13.        } // este no cierra el for interno porque no usas llaves. Cierra el bucle externo
  14.        temp=productos[i];
  15.        productos[i]=productos[pos];
  16.        productos[pos]=temp;
  17.  
  18.        printf("\n\tDatos ordenados:\n");
  19.        for(i=0; i<numeroProductos; i++){
  20.            printf("\n\t%s\n",productos[i].descripcion);
  21.        }
  22.    } // Cierre del else{}
  23.    getchar();
  24. }
Por lo tanto la ejecución sería:
Código:
i = 0 -> i < productos-1 (2)?? Si -> min = productos[0] (dosis) y pos = 0
  j = 1 -> j < productos-1 (2)?? Si -> productos[1] (botella) < min (dosis) ?? Si -> min = productos[1] y pos = 1
  j = 2 -> j < productos-1 (2)?? No
i = 1 -> i < productos-1 (2)?? Si -> min = productos[1] (botella) y pos = 1
  j = 2 -> j < productos-1 (2)?? No
i = 2 -> i < productos-1 (2)?? No
//FINALIZAN LOS BUCLES Y SE HACE UN SOLO CAMBIO:
temp = productos[2] (caja)
productos[2] = productos[1] (botella)
productos[1] = temp (caja)

Como ves, ahí está el problema. Para encontrar estos errores la gente suele recurrir a un depurador que te muestra el estado de las variables en cada momento y qué instrucción se va a ejecutar. Y sino pues lápiz y papel y a mano como acabo de hacer.

PD: Cuando arregles eso, ten cuidado con el último for() porque al usar la misma variable (i) que en el primero, como metas uno dentro del otro tendrás problemas.
57  Comunicaciones / Redes / Re: [VirtualBox] Adaptadores de Red en: 24 Noviembre 2020, 14:15 pm
Efectivamente en las herramientas de VirtualBox me aparecen los dos adaptadores que veo también desde Configuración - Red e Internet - Estado - Cambiar opciones del adaptador.

Y respecto a lo de que algún programa/extensión puede que me agregue estos adaptadores; hasta ahora pensaba que era Genymotion el único que lo hacía y suponía que sería para asignar dicho adaptador al dispositivo creado desde aquí. Sin embargo, en esta última ocasión ha sido el propio VBox el que me ha creado el adaptador extra.
He comprobado todas las máquinas virtuales por si se hubiese asignado dicho adaptador a alguna de ellas y no es así. Todas las máquinas las tengo configuradas con un único adaptador y están conectados a NAT, no a host-only adapter.

Hay alguna manera de averiguar por qué se están creando más adaptadores??
58  Comunicaciones / Redes / [VirtualBox] Adaptadores de Red en: 24 Noviembre 2020, 00:52 am
He instalado en varias ocasiones VirtualBox en una máquina Windows 10. Me he dado cuenta de que cada vez que instalo VBox, se crea un adaptador de red: <VirtualBox Host-Only Network> (Habilitado). Hasta aquí creo que todo normal.

Sin embargo; en ocasiones, cuando ejecuto VBox, me aparece varias ventanas seguidas solicitando permisos para VBox y en caso de que acepte, me crea otro/s adaptador/es <VirtualBox Host-Only Network #X> (donde X es un número {2, 3, 4, ...}) (Habilitado) y después se inicia el programa en sí.
En cambio si cancelo las ventanas de permisos de VBox, el programa se inicia con normalidad sin crear más adaptadores.
No me queda muy claro por qué se crean más adaptadores de red y por qué esto sólo ocurre en algunas ocasiones.

Empecé a notar esto después de instalar en varias ocasiones Genymotion. La primera vez que lo instalé me pidió permisos de ejecución para VBox y se los concedí porque sino fallaba. Después de eso estuvo una temporada que funcionaba bien y de repente me empezó a pasar como con VBox: en ocasiones cuando ejecuto Genymotion me pide permisos para ejecutar VBox y si no se los doy no puedo iniciarlo. Sin embargo; si se los doy, me salen varias ventanas seguidas seguidas de permisos y me crea un adaptador de red nuevo cada vez que acepto los permisos. Lo peor de todo es que cuando los acepto, Genymotion arranca correctamente pero cuando voy a iniciar un dispositivo virtual, este se queda cargando y nunca llega a iniciar (o salta un error).

He buscado documentación en las páginas tanto de VBox como de Genymotion y en otras páginas pero siempre te explican los tipos de conexión de las VMs y no he encontrado nada sobre este tema. Además no tengo muchos conocimientos de redes por lo que espero que alguien pueda ayudarme con este tema.

PD: Necesito instalar Genymotion pero actualmente lo tengo desinstalado tras haber tenido estos problemas.
59  Programación / Programación C/C++ / Re: No Imprime en: 23 Noviembre 2020, 23:20 pm
Me marca error en quicksort, tengo la idea pero no se si me falte otra libreria o asi algo por el estilo
Efectivamente, como dice Eternal Idol, lo que te falta es el código; es decir, la función. La función:
Código
  1. quicksort(int[], int, int);
no existe por lo que tienes que implementarla tú.
Eso es lo que pasa cuando se copia el código tal cual de Github.

PD: Espero por tu propio bien que ese programa no sea una tarea que tengas que entregar pues ya ves lo fácil que ha sido encontrar el código original.
60  Programación / Programación C/C++ / Re: Código de inventario en C en: 21 Noviembre 2020, 21:20 pm
Cuando tengas un error, explícalo para poder saber de qué tipo de error se trata.

  • Las líneas 30 - 32 van fuera de ese for(). Así estás haciendo un intercambio en cada iteración de dentro y muchas veces será entre un mismo elemento, lo que equivale a no hacer nada.
  • Elimina las declaraciones de i y de j en la línea 5. Las estás declarando nuevamente en el for().
  • Utiliza otro nombre de variable en el for() de la línea 36. Puedes tener conflictos entre una i y la otra. Aparte supongo que ese último for lo tendrás para hacer las pruebas porque sino no tiene mucho sentido que muestres todos los productos en cada movimiento.

Si el error no es por ninguna de esas cosas, adjunta el error.

PD: No es recomendable utilizar system() para hacer una pausa. Esta función realiza una llamada al sistema lo que conlleva mayor gasto de recursos. La mejor alternativa para C es utilizar getchar() (que pertenece a <stdio.h>).
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines