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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  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 22 23 24 25 26 27 28 29 30 31 32 ... 102
161  Programación / Programación C/C++ / Re: ayuda para cambiar este ejercicio en: 3 Marzo 2021, 00:22 am
Al igual que en el tema anterior, el código debe incluirse entre etiquetas de Código GeSHi

Si no quieres tener en cuenta el 0, es muy sencillo.
Código
  1. int numero = -1;
  2. for(int i = 0; i < MAX_NUM && numero != 0; ++i) {
  3.  cout << "Introduce un numero: ";
  4.  cin >> numero;
  5.  if(numero != 0) {
  6.    // todo lo demas
  7.  }
  8. }

Otra forma de conseguir lo mismo sería:
Código
  1. int numero;
  2. cout << "Introduce un numero (0 para terminar): ";
  3. cin >> numero;
  4. while(numerosIngresados < MAX_NUMEROS && numero != 0) {
  5.  ++numerosIngresados;
  6.  // comprobar si es par/impar y positivo/negativo
  7.  cout << "Introduce otro numero (0 para terminar): ";
  8.  cin >> numero;
  9. }
Personalmente me gusta más la segunda opción. Queda un código un poco más limpio, evitas el uso de una variable más, no necesitas inicializar <numero> a un valor concreto para que funcione y puedes cambiar el mensaje para que ponga "...otro número..." en vez de siempre "...un número...".
Además en muchas ocasiones (sobre todo académicas) se suele incidir en utilizar un for() únicamente cuando la condición dependa solo del contador del for() y no con condiciones compuestas (aunque sea totalmente válido); y por ende sustituirlo por un while() en tal caso.
162  Programación / Programación C/C++ / Re: me van a tomar este ejercicio y necesito ayuda en: 2 Marzo 2021, 01:44 am
Antes que nada, el código debe publicarse siempre mediante etiquetas de Código GeSHi. Puedes seleccionarlas en el desplegable que dice "Código GeSHi" encima del cuadro de texto o escribiendo directamente:
[code=cpp]
<Tu código aquí>
[/code]

El problema viene a raíz de que la condición de <n != 0> no está contemplada en el for(). Entonces el for() no va a terminar hasta que se ingresen 5 datos.
De todas formas, un bucle dentro de otro no es la forma más apropiada de hacer esto. Debes usar dos condiciones juntas mediante un operador lógico (AND && o OR ||).

Es mejor utilizar constantes para los límites y que así se pueda modificar rápidamente y sin errores.
Código
  1. const int MAX_NUMEROS = 100;
  2.  
  3. int main() {
  4.  int numero = -1; // Ponemos un valor por defecto distinto de 0 para que el for() funcione
  5.  for(int i = 0; i < MAX_NUMEROS && numero != 0; ++i) {
  6.    // Aqui haces todo lo que tengas que hacer
  7.  }
  8. }

Tienes dos opciones:
  • Guardar todos los valores en un array y una vez ingresados todos, calcular lo que se pide.
  • Realizar los cálculos después de pedir cada número. No es necesario usar arrays.
Inténtalo de la forma que quieras y si necesitas ayuda puedes pedirla añadiendo tus avances para poder ayudarte mejor.

Suerte  :-X
163  Programación / Java / Re: Mejorar Captura Firma Manuscrita en: 23 Febrero 2021, 01:14 am
@Slf4j es una anotación que permite generar un log de forma alternativa a crear un atributo static. Para utilizarlo debes incorporar la biblioteca lombok a tu proyecto e importarlo con:
Citar
Código
  1. import lombok.extern.slf4j.Slf4j;

Los logs sirven para producir mensajes en determinados puntos y mostrarlos o guardarlos en un fichero de salida (lo que se conocen como los logs de la aplicación) para ver un seguimiento y poder detectar errores, problemas,...

Si no vas a utilizar logs en tu aplicación y/o no utilizas lombok, puedes eliminar esa anotación y el import indicado antes sin problemas y todo debería funcionar correctamente.

Suerte  :-X
164  Programación / Java / Re: mostrar por pantalla todos los enteros x tales que su cuadrado (x * x) se encuentre entre los valores en: 23 Febrero 2021, 00:48 am
Antes de nada, el código debe estar publicado entre etiquetas de Código GeSHi. Puedes seleccionarlas en el desplegable que dice "Código GeSHi" (encima del cuadro de texto) o escribiendo manualmente:
[code=java]
<tu código aquí>
[/code]

Esto es por el siguiente bloque:
Citar
Código
  1. do {
  2.    if ((resultado >= intMin) && (resultado<=intMax)){
  3.        textCalcu.setText(Integer.toString(num));
  4.    }
  5.    num++;
  6. } while ((num * num >= intMin) && (num * num <= intMax));
Estás cargando en textCalcu el valor del primero, en la siguiente iteración lo sustituyes por elsegundo y así sucesivamente. Entonces no te da tiempo a verlos y únicamente ves el último que es el que queda indefinidamente.
Por otro lado veo un error importante y es que no estás actualizando el valor de resultado (siempre vale 0).
Por último, la estructura do-while() no es la más adecuada para esta situación. Lo correcto sería utilizar un while() o en su defecto un for() ahorrando la condición del if().

La forma de hacer esto es crear un String auxiliar en el que ir concatenando toda la cadena que quieres mostrar. Por ejemplo:
Código
  1. String mensaje = ""; // Importante inicializarlo para poder concatenar
  2. int num = 0;
  3. while(num * num >= intMin && num * num <= intMax) {
  4.    mensaje += num + " - "; // El " - " es para separarlos mediante un guion, puedes usar "\n" para separarlos por lineas
  5.    ++num;
  6. }
  7. // Y una vez creada la cadena completa, la muestras:
  8. textCalcu.setText(mensaje);
Como ves, no utilizo la variable 'resultado'. La puedes utilizar para guardar la operación de (num * num) y no tener que calcularla 2 veces.
Otra posible mejora es utilizar un StringBuffer o StringBuilder en vez de String para concatenar la cadena (es más eficiente).

Otra posible solución para no tener que multiplicar (num * num) en cada iteración, es hacer la operación inversa. Es decir si tiene que cumplirse que:
Código:
intMin <= (num * num) <= intMax
Entonces también tiene que cumplirse:
Código:
sqrt(intMin) <= num <= sqrt(intMax)
siendo sqrt(n) la raíz cuadrada de n.
Sin embargo, en esta ocasión tendrías que tener cuidado para comparar entre números enteros y números reales.
165  Programación / Programación C/C++ / Re: Ayuda porfavor! a function-definition is not allowed here en: 15 Febrero 2021, 05:57 am
Antes de nada, el código debe publicarse entre etiquetas de Código GeSHi para facilitar su lectura. Puedes seleccionar las etiquetas mediante el deplegable que dice "Código GeSHi", encima del cuadro de texto o escribiendo manualmente:
[code=cpp]
Aquí escribes tu código
[/code]

Todos tuvimos nuestros inicios y todos nos hemos hecho preguntas y hemos tenido problemas con cosas que luego se vuelven muy básicas.   :-X

El problema es que estás definiendo una función: product() dentro de otra función: main(). Existe la posibilidad de hacer esto de varias formas pero no es nada recomendable. Lo suyo es definir las funciones fuera de otras funciones.
Además hay 2 formas de hacerlo:
  • Implementar la función antes de utilizarla:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void saludar() {
  5.  cout << "Hola" << endl;
  6. }
  7.  
  8. int main() {
  9.  saludar(); // La salida sera: Hola
  10.  return 0;
  11. }

  • Definir la función antes e implementarla después. Para programas muy pequeños parece innecesario pero para códigos grandes te evitará muchos dolores de cabeza (ya lo irás viendo):
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void saludar(); // Escribes la definicion de la funcion (valor de retorno, nombre de la funcion y parametros)
  5.  
  6. int main() {
  7.  saludar();
  8. }
  9.  
  10. // Implementas la funcion que has definido antes
  11. void saludar() {
  12.  cout << "Hola" << endl;
  13. }



Además como un par de consejos más de inicio:
  • Está bien ir conociendo para qué sirve cada biblioteca (las cabeceras) y así usar sólo las necesarias. La cabecera <iostream> es la que contiene todo lo necesario para la entrada/salida estándar de C++ (cout, cin,...) mientras que <stdio.h> es la cabecera de entrada/salida propia de C (printf, scanf,...). Las funciones min() y max() que utilizas se encuentran concretamente en la cabecera <algorithm> aunque bajo mi punto de vista sería mejor que crearás tus propias funciones para mejorar tu lógica y ganar experiencia, sobre todo al principio.
  • Las cabeceras que terminan en '.h' son propias de C. Estas también funcionarán en C++ pero puedes usar su propia versión cuyo nombre es igual pero eliminando el '.h' del final y añadiendo una 'c' al principio. <stdio.h> (C) -> <cstdio> (C++)
  • Aunque se puede hacer, no se recomienda crear la función main() sin un tipo de retorno. Esta función en C++ (y en C también) devuelve un int. Por convención se suele devolver 0 si todo va bien y otro número (1, -1,...) si algo falla. Lo escribas o no, el compilador añadirá un 'return 0;' al final de la función main() siempre.

Te dejo un par de enlaces bastante buenos para conocer funciones, saber qué cabeceras necesitas y cómo funcionan:
http://www.cplusplus.com/
https://en.cppreference.com/w/

Es bastante información para ya irás aprendiendo poco a poco según vayas avanzando y practicando. En programación da igual cuánto estudies si no practicas. Suerte  :-X


EDIT: Y ahora que me doy cuenta, tu función product() devuelve un int según lo has definido pero te falta añadir un 'return' al final. Te dará un error si no lo pones.
166  Programación / Java / Re: Arreglos Bidimensionales en: 9 Febrero 2021, 15:50 pm
Lo primero y más importante: el código debe ir siempre entre etiquetas de Código GeSHi y a ser posible para el lenguaje apropiado y correctamente indentado. En tu caso deberías escribir:
[code=java]
Aqui escribes tu código
[/code]

Ahora antes de comentar el problema, voy a comentar la descripción de este:
Citar
Diseñar un programa que ingrese números enteros a un arreglo bidimensional. Se pide calcular e imprimir el segundo número capicúa más alto de cada diagonal principal del arreglo (cuando M = N). No usar arreglo lineal.
Problemas con esa descripción (para la parte en negrita concretamente):
1 - ¿Qué se entiende por diagonal principal? Si se entiende por diagonal principal únicamente la que empieza en la posición (0,0) y continúa por (1,1), (2,2),...(n,n); únicamente existe una diagonal principal en cada matriz cuadrada por lo que eso de "CADA diagonal" confunde un poco.
Si por el contrario, se refiere a todas las diagonales menores que son paralelas a la diagonal principal, entonces tu programa tiene otro problema y es que sólo evalúas la diagonal principal mayor.
2 - "Cuando M = N"... Si es una aclaración de lo que es la diagonal principal, entonces sólo existe una y el "CADA diagonal" estaría fuera de lugar. Otra interpretación es que el programa sólo analice las matrices cuadradas, es decir, que haga todo lo que se pide únicamente cuando M sea igual a N.

Para no complicarme supondré una única diagonal principal por matriz ya sea ésta última cuadrada o no.

Ahora yendo al problema principal, no entiendo qué hace tu método diagonales() que muestro a continuación y que he ido añadiendo comentarios en todo aquello que tenía que comentar:
Código
  1. public static void diagonales(){
  2.    // Si solo vas a recorrer la diagonal principal basta con hacer un for(int i = 0; i < menor(m,n); i++) y utilizar num[i][i]
  3.    for(int i=0; i<m;i++){
  4.        for(int k=0; k<n;k++){
  5.            if(i==k){
  6.                CapicuaNumero=0;
  7.                auxMayor=0;
  8.                auxCapicuaPrincipal=num[i][k];
  9.                // Aqui empiezas a quitar el ultimo digito al numero pero...
  10.                while(auxCapicuaPrincipal>0){
  11.                    cifra = auxCapicuaPrincipal%10;
  12.                    auxCapicuaPrincipal=auxCapicuaPrincipal/10;
  13.                    //CapicuaNumero = 0
  14.                    NumeroPrincipal=(CapicuaNumero*10)+cifra; // ...CapicuaNumero siempre vale 0, asi que eso siempre es = cifra
  15.                }
  16.                if(NumeroPrincipal==num[i][k]){
  17.                    if(NumeroPrincipal>auxMayor){ // Aqui auxMayor siempre es 0
  18.                        NumeroP = respuestaPrincipal; // Aqui respuestaPrincipal no tiene valor asi que es 0
  19.                    }
  20.                }
  21.                System.out.println("numero capicua"+NumeroP);
  22.            }
  23.            /*if((i+k)==num.length-1){
  24.                 auxCapicuaSecundario=num[i][k];
  25.             }*/
  26.        }
  27.    }
  28.    JOptionPane.showMessageDialog(null,"El mas alto numero es "+NumeroP);
  29. }

Además de los errores, tu código necesita mucha más organización de la que tiene. Muchos de los atributos de la clase no son necesarios y bastaría con utilizar variables locales a su método. Además la asignación de valores a no ser que sean constantes, es mejor que lo dejes para el main() o cualquier otro método y no lo incluyas en la misma declaración de los atributos.
Y como recomendación, crea un método que sea esCapicua(int) y que devuelva true/false según si el número indicado es capicúa o no. Esto te facilitará mucho el trabajo.
Código
  1. public class Principal {
  2.  private static int numFilas;
  3.  private static int numCols;
  4.  private static int[][] matriz;
  5.  
  6.  public static void main(String[] args) {
  7.    numFilas = Integer.parseInt(...);
  8.    numCols = Integer.parseInt(...);
  9.    matriz = new int [numFilas][numCols];
  10.  
  11.    rellenarMatriz();
  12.    System.out.println("----- MATRIZ RESULTANTE -----");
  13.    mostrarMatriz();
  14.  
  15.    int[] capicuasMayores = calcularCapicuasMayores(); // Puedes devolver los dos capicuas mas grandes
  16.    System.out.println("El segundo numero capicua mas grande es: " + capicuasMayores[1]);
  17.  }
  18.  
  19.  private static int[] calcularCapicuasMayores() {
  20.    int capicuas[] = new int[2]; // En capicuas[0] se guarda el mayor y en capicuas[1] el segundo mayor
  21.    boolean primerCapicua = true; // Flag para saber si es el primer capicua que guardamos. Si es negativo no vale comparar con > 0
  22.    int dimensionMenor = numFilas < numCols ? numFilas : numCols;
  23.    int numeroActual;
  24.    for(int i = 0; i < dimensionMenor; ++i) {
  25.      numeroActual = matriz[i][i];
  26.      if(esCapicua(numeroActual)) {  
  27.        if(primerCapicua) {                
  28.          capicuas[0] = numeroActual;
  29.          primerCapicua = false;                          
  30.        } else if(numeroActual > capicuas[0]) {
  31.          capicuas[1] = capicuas[0];
  32.          capicuas[0] = numeroActual;
  33.        } else if(numeroActual > capicuas[1]) {
  34.          capicuas[1] = numeroActual;
  35.        }
  36.    }
  37.    return capicuas;
  38.  }
  39.  
  40.  private static boolean esCapicua(int num) {
  41.    // Esto te toca a ti ya...
  42.    // Si haces que esto devuelva true cuando un numero es capicua y false cuando no, todo funcionara correctamente (creo)
  43.  }
  44. }

Como ves, es un código organizado en métodos pero que cada uno hace una parte muy concreta y con solo mirar el método main() ya tienes una idea de lo que el programa hace, aunque no sepas cómo lo hace (para eso tendrías que mirar el resto de métodos).
167  Programación / Programación C/C++ / Re: C++ error al compilar (recipe for target 'BD.o' failed) (Error: operand type mismatch for `push') en: 8 Febrero 2021, 23:18 pm
No recuerdo mucho de ensamblador desde que lo estudié pero buscando un poco en Internet he encontrado este enlace dónde parece que está bien explicado: https://stackoverflow.com/questions/21245245/c-uses-assemble-operand-type-mismatch-for-push

Resumiendo: si utilizas 'push' sin un sufijo 'w/l/q' para 16/32/64 bits respectivamente, el ensamblador determinará cuál es el sufijo más apropiado. Como %eax es de 32 bits, utilizará 'pushl' pero las máquinas con arquitecturas de 64 bits no soportan esa operación de 32 bits.
Solución: Utilizar 'pushq %rax' y trabajar con el registro de 64 bits.

Como ya digo, no tengo mucha experiencia y lo que he dicho está básicamente sacado del enlace a stackoverflow. Espero que te sirva y en caso contrario, siempre puedes echar un vistazo tú mismo a las respuestas por si encuentras algo que te sirva.

Suerte  :-X
168  Programación / Programación C/C++ / Re: Poder reproduicr sonidos en c++ en: 2 Febrero 2021, 17:47 pm
La función Beep() es propia de Windows y se encuentra en la biblioteca <windows.h>.
Buscando un poco por Internet he podido encontrar esto pero no sé si funcionará alguna de las opciones:
https://stackoverflow.com/questions/12919378/playing-beep-in-c-linux
https://stackoverflow.com/questions/10072909/beep-on-linux-in-c
169  Programación / Programación C/C++ / Re: necesito un programa en c++ en: 2 Febrero 2021, 17:41 pm
 :xD :xD :xD :xD
Empezaba a extrañar ya a la gente que viene pidiendo que les den la tarea hecha...
En vez de dedicar el poco tiempo que puedes sacar de tu viaje a pedir la tarea en un foro, dedícalo a hacerla tú mismo.
Suerte  :silbar:
170  Sistemas Operativos / Windows / [W10] Pantalla negra al conectar PC a la corriente en: 30 Enero 2021, 17:58 pm
Hace unos meses hice una instalación limpia de Windows 10 en un Acer Aspire ES1-511 (que ya tenía W10 y funcionaba bien). Al principio tenía un problema con el touchpad que lo solucioné instalando los drivers correspondientes. Después de eso empezó a funcionar todo correctamente pero desde hace ya un tiempo tiene otro problema que no logro solucionar:
Si está el ordenador encendido y se conecta a la corriente, la pantalla se queda negra. En ocasiones se soluciona pulsando varias veces el botón de encendido pero en otras ocasiones es necesario apagarlo del todo y volver a encenderlo para que funcione. Este problema empezó a ocurrir en algunas ocasiones pero actualmente ocurre prácticamente siempre.

El ordenador no está en mi posesión por lo que tampoco puedo hacer muchas pruebas.
¿Alguien sabe a qué puede deberse? Gracias.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines