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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación General / GC overhead limit excedeed (java heap space excedida)[SOLUCIONADO] en: 29 Abril 2018, 14:15 pm
Buenas, estoy trabajando en un problema el cual ya tengo resulto y funcionando con instancias pequeñas, pero al cual cuando le paso un fichero más grande no termina de ejecutarse, acaba saltando un error de "GC overhead limit excedeed" y por más que le aumento la memoria a eclipse sigue fallando, además de que me he puesto la barrita esta en la que ves el heap space que tienes y nunca llega ni a la mitad, y me está molestando un poquito ya porque me estoy quedando atascado aquí cuando lo difícil era resolver el problema. Pongo aquí el código y el error que me dió a ver si alguien puede ayudarme, ¿quizá el problema está en los objetos que creo en la función listPermutations?

He puesto en negrita las líneas que saltan error y donde creo que debe estar el problema

Error:

Código:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at java.util.ArrayList.<init>(Unknown Source)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:117)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.calculatePossibilities(HiddenNumbers.java:59)
at SegundoReto.HiddenNumbers.calculateNumbers(HiddenNumbers.java:45)
at SegundoReto.HiddenNumbers.<init>(HiddenNumbers.java:29)
at SegundoReto.HiddenNumbers.main(HiddenNumbers.java:130)

Y aquí el código:

Código:
package SegundoReto;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class HiddenNumbers {
private String inputFile;
private Scanner reader;
private FileReader fileReader;
private List<Integer> numeros = new ArrayList<Integer>();
private ArrayList<Integer> resultados;
private BufferedWriter writer;

public HiddenNumbers(String fileName) throws IOException {
this.inputFile = fileName;
try {
fileReader = new FileReader(inputFile);
reader = new Scanner(new File(inputFile));
writer = new BufferedWriter(new FileWriter("src/output.txt"));
calculateNumbers();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void calculateNumbers() throws IOException {
int limit = Integer.parseInt(reader.nextLine());
for (int i = 1; i <= limit; i++) {
resultados = new ArrayList<Integer>();
int k = 1;
String currentWord =  reader.nextLine();
if (currentWord.length() > 26 | currentWord.length() < 2) System.out.println("Error.La palabra solo puede tener una longitud entre 2 y 26");
else {
writer.write("Case #" + i + ": " + calculatePossibilities(currentWord, k));
writer.newLine();
 }
}
System.out.println("Programa finalizando..");
writer.close();
reader.close();
}

public int calculatePossibilities(String palabra, int k) {
int valor = 0;
for (int i=0; i<palabra.length();i++) {
numeros.add(i);
}
List<List<Integer>> myLists = listPermutations(numeros);

   for (List<Integer> al : myLists) {
    if (al.get(0) == 0) {
           continue;
       }
   
    resultados.add(calculateValue(al));
    /**
       String appender = "";
       for (Integer i : al) {
           System.out.print(appender + i);
           appender = "";
       }
       System.out.println();
       **/
   }
   valor = calculateMinMax(resultados);
   return valor;
}

public int calculateMinMax(ArrayList<Integer> results) {
int max = Collections.max(results);
int min = Collections.min(results);
//System.out.println("El máximo es: " + max + " y el mínimo es " + min);
return (max-min);
}

public int calculateValue(List<Integer> lista) {
System.out.println("La lista es: " + lista + " y tiene un tamaño de " + lista.size());
int exponente= lista.size()-1;
int base = lista.size();
int valor = 0;
//System.out.println("La base es :" + base + " y el exponente es " + exponente);
for (int i = 0;i<lista.size();i++) {
//System.out.println("Vamos a multiplicar " + lista.get(i) + " por " + base + " elevado a " + exponente);
valor += lista.get(i) * (int) Math.pow(base, exponente);
exponente--;
}
System.out.println("Uno de los posibles valores para " + lista + " es " + valor);
return valor;
}

public static List<List<Integer>> listPermutations(List<Integer> list) {

   if (list.size() == 0) {
       List<List<Integer>> result = new ArrayList<List<Integer>>();
       result.add(new ArrayList<Integer>());
       return result;
   }

   List<List<Integer>> returnMe = new ArrayList<List<Integer>>();

   Integer firstElement = list.remove(0);

  [b] List<List<Integer>> recursiveReturn = listPermutations(list);[/b]
   for (List<Integer> li : recursiveReturn) {
       for (int index = 0; index <= li.size(); index++) {
           [b]List<Integer> temp = new ArrayList<Integer>(li);[/b]
           temp.add(index, firstElement);
           returnMe.add(temp);
       }

   }
   return returnMe;
}



public static void main(String[] args) throws IOException {

HiddenNumbers hiddenNumbers = new HiddenNumbers("src/testInput2.txt");
}

}

Y por si alguno lo puede probar en su equipo, aquí les dejo al fichero que le estoy pasando al programa para que trabaje con el:

Citar
100
cojhn
qkflsczuantb
qswagdzcpxe
dxwupsqhknfciozgbrtjma
wjxgnyzvbakimqfdt
qmyf
ma
mvongxtqdypsbfjzlhruc
bfujhpnxdgyilowcrqkm
mpuzgkwe
vd
bxdpcirwkvanzmefogsyj
alejmqt
urmnskcjhl
ogqmnte
mqoldkhwfryjutpv
nupolktzdmsv
kvxoecmgnrzuayptjidbwl
cyafdkgivrxpeujhozbm
htfdxycnkserjiz
kxypedsbvhzgfuoqi
htlfusmrvadckgenxiwbzqj
qcjktbhywnoxslrfauzdepmvg
obewgiahkctxmlpsjfnv
fickmtolqndzwvpasreuxb
hxptymkzgbwanvcjedfqoiursl
kogxc
sgomyxhda
lkspxtcweziybaqovhurjfgd
xiokcnydbmjqvu
yxkdanuzwmlerihjcvqpfstb
yneltcsbvwqukdagfjmzx
ofnhgquxiyvwck
ywxzmuvalbscdk
sdp
kozubhaepcw
nbiqztdj
saonctfgjdbkqu
yqomxjedrztbwislvuanphcf
lchrn
hmovs
dfpxhelagvcmoyzbukr
bwmfn
uv
ukbvzfgsnlhxe
rpfhaxoisblezqwydgcuk
cmnjgh
sjx
ivn
kxqwvrlsthfjbngcd
fdx
qkaublyrvpdx
qzcmy
gpjkilhxnou
lxocdniryftqea
fsro
zmajgdihurkoblscnwpqfvxye
ewimuqoxrtcbgf
hqcvrbkmgeindyfszjupaolt
rjstoynlmuvhgebqcpfx
ghymxufkzrdnolitvwep
psvwmuxthdoejcbgkqif
fduvzonmhiglrbcqpetjkx
bnxlckrjhvowmzid
eqy
uwg
ghitqjnslvcpuzwrxbyod
irkwajhnfpmezdgsvutlcoq
ql
vclwinjbteuszfmydokraxpqh
swocbamnhvkuxltrip
dgjyup
ewudxyjlrbs
xmkiawcrfjvhg
rewfybacgpdhvkmqiun
nizrgevt
edxqvj
rzgbp
kxehpdfya
iasdkolztwfgm
lgijk
gyoxqfrhs
agjdluecbohtwqkmxrfpiv
zjgtlyuiwnvkbefrpax
dc
hckpivxoarlsbujfeywgmqtd
bwun
xsiyt
vwygmtho
kjidpnqsmxahglocbztfeuwyr
ialwcbtexghnqmkrdz
qihwso
mnsebatdxzol
xifhogvmbndztueqpalsyj
ry
emvdqkflowijgytcxzaubsr
jhbysenmzoqvluxfpcdw
lipdnmqecousxfrjv
xdzerwgqf
ctubdnxerwiplqgfovahzjyksm

Mil gracias si alguien puede ayudarme, de verdad!!! un saludo
2  Programación / Programación General / Actualizar JFrame en: 16 Abril 2018, 13:09 pm
Buenas, estoy haciendo un programilla del random walk, es decir una linea que se va moviendo por una cuadrícula de manera aleatoria. Bien, estoy haciendo todo el tema de la GUI y tengo un problema. Yo tengo varios botones: Empezar, finalizar, cambiar color y un jtextfield con un botón de convertir al lado.

Empezar comienza la simulación, finalizar la termina, cambia de color cambia la linea de color y lo de convertir cambia la cuadrícula por el número de cuadrados especificados en el text field.

Mi problema es que puedo iniciar el programa con el botón Empezar, pero si después intento cambiar el número de cuadrados que hay no se porque el programa no se actualiza. Se que el problema esta en que estoy haciendo lo mismo cuando le doy al boton empezar y cuando le doy al boton convertir pero no se como hacerlo, empecé hace bien poquito y aún sigo pescando con algunas cosas. Aquí os dejo el código:

Código:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


public class FPrincipal extends javax.swing.JFrame {
 private JPanel PContenedorDibujo;


 public static void main(String[] args) {
  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    FPrincipal inst = new FPrincipal();
    inst.setLocationRelativeTo(null);
    inst.setVisible(true);
   }
  });
 }
 
 public FPrincipal() {
  super();
  initGUI();
 }
 
 private void initGUI() {
  try {
   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   BorderLayout thisLayout = new BorderLayout();
   getContentPane().setLayout(thisLayout);
   this.setTitle("Random Walk");
  
   JPanel btnPanel = new JPanel(new FlowLayout());
JButton btnEmpezar = new JButton("Empezar");
btnPanel.add(btnEmpezar);
btnEmpezar.addActionListener(new ActionListener() {
        private PDibujo pDibujo;

@Override
        public void actionPerformed(ActionEvent evt) {
            PContenedorDibujo = new JPanel();
            BorderLayout PContenedorDibujoLayout = new BorderLayout();
            PContenedorDibujo.setLayout(PContenedorDibujoLayout);
            getContentPane().add(PContenedorDibujo, BorderLayout.CENTER);
            this.pDibujo = new PDibujo(10);
            PContenedorDibujo.add(this.pDibujo);
            pack();
            setSize(600, 600);
        }
    });

JPanel btnPanel2 = new JPanel(new FlowLayout());
JButton btnFinalizar = new JButton("Finalizar");
btnPanel.add(btnFinalizar);
btnFinalizar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
         try {
System.out.println("Terminando el programa en 4 segundos...");
         Thread.sleep(4000);
System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
        }
    });

JPanel btnPanel3 = new JPanel(new FlowLayout());
JButton btnLeft3 = new JButton("Cambiar Color");
btnPanel.add(btnLeft3);

JPanel btnPanel4 = new JPanel(new FlowLayout());
JTextField btnText = new JTextField(10);
JButton btnEnter = new JButton("Convertir");
btnPanel.add(btnText);
btnPanel.add(btnEnter);
btnEnter.addActionListener(new ActionListener() {
        private PDibujo pDibujo;

@Override
        public void actionPerformed(ActionEvent evt) {
dispose();
         String texto = btnText.getText();
         int num = Integer.parseInt(texto);
         PContenedorDibujo = new JPanel();
            BorderLayout PContenedorDibujoLayout = new BorderLayout();
            PContenedorDibujo.setLayout(PContenedorDibujoLayout);
            getContentPane().add(PContenedorDibujo, BorderLayout.CENTER);
            this.pDibujo = new PDibujo(num);
            PContenedorDibujo.add(this.pDibujo);
            repaint();
            pack();
            setSize(600, 600);
            setVisible(true);
            
        }
    });

Container cp = getContentPane();
    cp.setLayout(new BorderLayout());
    cp.add(btnPanel, BorderLayout.SOUTH);
    setSize(600, 600);
    
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

La clase de Pdibujo creo que no me hace falta ponerla para que se vea el problema, pero si no la pongo si veo que tal, muchísimas gracias a quien pueda ayudarme! Y no os echéis a llorar si veis fallos muy básicos en el programa.

PD: queda bastante mal todo el código ahi pegado de una pero es bastante sencillo,  lo importante esta en los actionEvent de los botones Empezar y Convertir, en los que basicamente tengo el mismo código para inicializar la GUI (cosa que estoy seguro que no debería hacer)
3  Programación / Programación C/C++ / Problema de las 8 reinas en: 12 Marzo 2018, 14:30 pm
Buenas.

Estoy trabajando en el problema de las 8 reinas y el problema clásico ya lo tengo resuelto. Basicamente consiste en colocar 8 reinas en un tablero sin que se amenacen, esto es que no esten ni en la misma diagonal ni en la misma columna y fila. Hasta ahí todo bien, ahora, quiero añadir una condición más y es que las reinas no estén alineadas. Es decir,



Esas reinas no se amenazan pero están alineadas, se puede trazar una línea recta sobre ellas. Sinceramente es que le he dado vueltas y no se me ocurre como aproximarlo sin hacer un código que compruebe mil posiciones, y además no tengo muy claro en que posiciones las reinas pueden estar alineadas. Solo quiero la idea porque al final en el código solo tengo que meter una condición más. Muchas gracias de antemano.
4  Programación / Scripting / Imprimir salida comando con PRINTF (BASH) en: 27 Noviembre 2017, 14:39 pm
Hola,

tengo este código

Citar
get_atributo()
{
printf  "%s" "$(ps axo cmd= --sort=-%cpu)"

}

get_usuario()
{
printf "%s" "$(ps axo user= --sort=-%cpu)"
}


tabla()
{
  STRING='ps axo user= --sort=-%cpu'
  printf "%10s %25s %10s %30s %10s %10s %20s %50s\n" "Nombre del Proceso" "Propietario" "Tiempo de CPU" "Prioridad del proceso" "Memoria Residente/Memory Swap"

  printf "%10s\n %25s\n %10s %30s %10s %10s %20s %50s\n" "$(get_atributo)" "$(get_usuario)"

pero el resultado me lo coloca todo en la misma columna. Deduzco que el resultado del comando no es un string y por eso no lo detecta, pero es que no se como guardar el resultado del comando en un string, porque esto no parece servir:

Citar
STRING='ps axo user= --sort=-%cpu)'

 y después llamar a string en la tabla.

¿Alguna idea? Mil gracias.
5  Programación / Scripting / Duda con PS en BASH-SCRIPT en: 25 Noviembre 2017, 14:22 pm
Buenas, quiero mostrar una lista de procesos en el sistema que incluya una serie de atributos entre ellos el calculo entre la memoria residente y la necesidad de memoria de intercambio necesaria para almacenar el proceso en caso de suspenderlo.

El atributo de la memoria residente imagino que es size, pero no me queda claro cual sería el segundo atributo, vsize quizá?

Mi duda es, si yo estoy haciendo esto para mostrar la lista:

ps axo cmd,user,ppid,pcpu,priority,size,vsize,user

¿Como podría hacer en esa misma línea para hacer la resta entre size y vsize y que ese resultado se mostrase en esa misma tabla? Gracias de antemano.

edit: aver no es necesario que sea en la misma línea, pero solo quiero encontrar la manera de mostrar esa misma lista pero size y vsize serían un solo atributo producto de su resta.
6  Programación / Programación C/C++ / Undefined reference to (C++) [SOLUCIONADO] en: 30 Octubre 2017, 11:40 am
Buenas,
 
yo había hecho un proyecto con 3 clases, menu.cpp y otras dos clases. Mi error fue escribir todo el código de las otras dos clases en un fichero .h y no separar los ficheros.
 
Bien, fui a separar los ficheros en cabeceras y tal, las declaraciones en .hpp y el codigo en .cpp, y al pasarlo todo, no me da ningún fallo excepto en el menu.cpp donde me salta un "undefined reference" a todas las funciones que he separado en ficheros. Y me estoy volviendo loco porque no se como hacer que funcione. Se que les declaraciones y eso están bien, pero ya no se que más falla. Intenté solucionarlo poniendo #pragma once pero nada sigue igual. A ver si algún alma muy caritativa me ayuda, o al menos me explica que puede estar pasando.
 
Venga, dejo el código fuente aquí en spoiler por si alguien es mu majete y le echa un vistazo
 
Código:
NFA.hpp
 
#pragma once
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include "estado.hpp"
#include <set>
#include <string>
 
using namespace std;
 
class nfa
{ vector <ESTADO> vectorestado;
  int numeroestados;
  set <char> alfabeto;
  set <int> importantes;
  int estadoinicial;
 
 
public:
 
void llenar_datos(char nombrefichero[], bool& errorapertura);
void mostrar();
void crearalfabeto(int numeroenlaces);
void analizarmuerte ();
void mostraralfabeto();
void estadosimportantes();
bool comprobacionestadodfa();
bool analizarletra (string cadena, int estado, int &camino,
                    vector<int> &estadoactual,vector <char> &simbolo, vector <int> &estadosiguiente);
  void analizarcadena();
 
};

ESTADO.hpp
 
Código:
#pragma once
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
 
using namespace std;
 

class ESTADO
{struct siguienteestado_t
     {char simbolotransicion;
      int siguienteestado;
     };
 
      bool aceptacion;
      bool estadomuerto;
      vector <siguienteestado_t> transicion;
 
public:
 
void crearenlace (int numeroenlaces);
    void   set_sigestado (int estado, char simbolo, int pos);
int    get_sigestado(int pos) const;
    char   get_simbolo(int pos) const;
    bool   get_aceptacion(void) const;
    void   set_aceptacion(bool aceptado);
    bool   get_muerto(void) const;
    bool   nodomuerto(int identificador);
    int get_numeroenlaces(void) const;
};

MENU.cpp
 
 
Código:
#include "nfa.hpp"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
 
int main()
{ int opcion;
  char fichero[85];
  bool errorapertura; // 0 si se abrio el fichero, en otro caso, no se abrio
  nfa automata;
 
  do{ cout << endl;
  cout << "SELECCIONE UNA OPCION :" << endl;
  cout << "[1] Leer un archivo .nfa." << endl;
  cout << "[2] Mostrar NFA." << endl;
  cout << "[3] Señalizar estados de muerte." << endl;
  cout << "[4] Mostrar estados importantes." << endl;
  cout << "[5] Analizar cadena." << endl;
  cout << "[6] Comprobacion DFA." << endl;
  cout << "[0] Salir." << endl;
  cout << "OPCION: ";
  cin >> opcion;
  switch(opcion)
    {case 1:
      {cout << "Nombre del fichero: ";
       cin >> fichero;
       automata.llenar_datos(fichero, errorapertura);
       break;
      }
     case 2:
      {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl;
       else automata.mostrar();
       break;
      }
     case 3:
      {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl;
      else automata.analizarmuerte();
       break;
      }
      case 4:
      {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl;
       else automata.estadosimportantes();
       break;
      }
     case 5:
      {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl;
       else automata.analizarcadena();
       break;
      }
     case 6:
      {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl;
       else
        {if(automata.comprobacionestadodfa()) cout << "Este fichero es un DFA." << endl;
         else cout <<"Este fichero NO es un DFA." << endl;
        }
       break;
      }
     case 0:
      {return 0;
       break;
      }
    }
  }while(opcion != 0);
}
 

 
 
 
 
Mil gracias a quien pueda ayudarme!
7  Programación / Programación C/C++ / Problema al meter ficheros .hpp en un proyecto que ya funcionaba en: 15 Octubre 2017, 15:57 pm
Buenas, llevo un tiempo leyendo el foro y me ha dado por registrarme para poder preguntar mis dudas y tal por aquí.

Mi problema es que tengo un proyecto, consta de el main.cpp y dos clases en ficheros .h (lo sé, esto esta mal). La cosa es que el proyecto me funciona, ejecuto el main y todo correcto. Quería mejorar un poco mi proyecto, y he metido la declaración de las funciones en .hpp y el código en .cpp, hasta aquí todo bien, me se la sintaxis y como hay que hacerlo, no tiene mucha pérdida, el problema viene cuando ya no puedo ejecutar el main ya que me sale un error, en devc++ me dice que "id returned exit status". Este error me había salido otras veces y pensé que reiniciando se solucionaría pero nada, ahí sigue, asi que me baje el netbeans pensando que igual sería problema de devc++ (cosa que leí por intenet) y nada, que no puedo ejecutar el programa, y no me da ningún fallo de sintaxis, solo que el programa devolvió un error. La cosa es que me mosquea porque no es ningún problema de funcionamiento interno del programa, ya que me funcionaba cuando solo tenía ficheros .h

Pondría el código aquí pero me parece bastante feo, a ver si alguno tiene alguna idea y si no pruebo a poner el código aquí a ver si alguno lo puede ejecutar a ver que le sale, gracias de antemano!.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines