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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  DUDA CODIGO C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: DUDA CODIGO C#  (Leído 4,664 veces)
burnssss

Desconectado Desconectado

Mensajes: 5


Ver Perfil
DUDA CODIGO C#
« en: 30 Octubre 2013, 14:35 pm »

Tengo una duda.
El siguiente codigo me calcula cuantas veces se repite una subcadena a partir de una cadena binaria.
La longitud de las subcadenas en este ejemplo es de 4. ¿ Como modificaria el codigo para obtener subcadenas de longitud desde 5 a 20?

 
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <vector>
#include <string>
 
using namespace std;
 
int main() {
   string cadena;
   char pr;
//   ofstream fo ("entreno.txt");
   ifstream fi("entreno.txt");
   int numero;
   int patron_int;
   //vector<int> v(1050000);
//   for (int i=0; i<170000; i++) {
//      //cout << v;
//      num=rand()%2;
//      fo<<num;
//   }
//  fo.close();
   getline(fi, cadena);
   vector<int>v(cadena.size());
   vector<int>patron(4);
   vector<long long>patrones(16);
   float N;
 
   //cout << cadena;
   //numero = Int32.Parse(cadena[0]);
   //pr=cadena[0].c_str();
   //cout << numero;
   //cout << cadena[0];
   for(int i=0; i<cadena.size(); i++) {
//      if (cadena=='1') v=0;
//      else if (cadena=='1') v=1;
      v=cadena-48;
//      cout << v;
   }
 
   for(int i=0;i<v.size()-3;i++) {
      for(int j=i;j<v.size()-3;j++) {
         patron[3]=v;
         patron[2]=v[j+1];
         patron[1]=v[j+2];
         patron[0]=v[j+3];
         //cout << patron[3] << patron[2] << patron[1] << patron[0] << endl;
         patron_int= patron[0] + patron[1]*2 + patron[2]*4 + patron[3]*8;
         //cout << patron_int << endl;
         patrones[patron_int]++;
         //if(i==v.size()/5) system("pause");
 
         //system("pause");
      }
      N=(100*i)/(v.size()-3);
   //   cout << N << "%" << endl;
 
   }
 
   for(int i=0; i<patrones.size(); i++) {
      cout << i << " se repite " << patrones << " veces." << endl;   
   }
   //cout << v.size();   
   system("pause");
   fi.close();
   return 0;
}
 


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: DUDA CODIGO C#
« Respuesta #1 en: 30 Octubre 2013, 14:44 pm »

1. Lo lógico es que pongas un título de mensaje acorde a tu pregunta. Para empezar C# es un lenguaje y C++, que es el que estás poniendo aquí, otro distinto.

2. El código deberías ponerlo con las etiquetas de código correspndiente ( mira el combobox que dice "GeSHi" )

3. No se hacen tareas.

4. ¿He dicho que no se hacen tareas?

5. La clase vector de c++ no está limitada a 4, se pueden añadir bastantes elementos más.

6. El código que has puesto y tu pregunta me dan a entender que no lo has hecho tú. Intenta adaptar tú el código y comenta aquí tus dudas. Te lo comento porque, no se si lo sabes, no se hacen tareas.


En línea

burnssss

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: DUDA CODIGO C#
« Respuesta #2 en: 30 Octubre 2013, 15:04 pm »

Perdon por el desorden. Efectivamente el codigo no lo he hecho yo. Yo he intentado implantar estas operaciones en Matlab pero no he podido. Entonces recurrí a C++. No tengo mucha idea de C++. Todo lo que hice con este código es entender su funcionamiento y ahora intentar desarrollarlo. El problema que se me habia planteado es que en matlab al crear las subcuerdas, el numero de datos es tan grande que al final no me hace el recuento de los patrones. He probado este codigo y si me hace el recuento. Creo que basicamente lo que hace es representar cada patron mediante un numero entero, y apartir de ahi hace el recuento de enteros, que corresponden a un patron binario. Como he dicho, quizas sea más facil implantarlo en C++ que en matlab. Asi que si puedes ayudarme en algo te lo agradecería.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: DUDA CODIGO C#
« Respuesta #3 en: 30 Octubre 2013, 15:24 pm »

Deberías al menos quitar los comentarios que estén demás... hay líneas que son absurdas y otras que no queda claro si son necesarias para el código o no.

Y ya que lo haces aprovecha para poner el código entre etiquetas (code=cpp) y (/code) sustituyendo paréntesis por corchetes.
En línea

burnssss

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: DUDA CODIGO C#
« Respuesta #4 en: 30 Octubre 2013, 15:44 pm »

He quitado algun comentario.
 
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdlib.h>
  4. #include <vector>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. int main() {
  10. string cadena;
  11. char pr;
  12. // ofstream fo ("entreno.txt");
  13. ifstream fi("entreno.txt");
  14. int numero;
  15. int patron_int;
  16.   }
  17.  
  18. //  fo.close();
  19. getline(fi, cadena);
  20. vector<int>v(cadena.size());
  21. vector<int>patron(4);
  22. vector<long long>patrones(16);
  23. float N;
  24.  
  25. //cout << cadena;
  26. //numero = Int32.Parse(cadena[0]);
  27. //pr=cadena[0].c_str();
  28. //cout << numero;
  29. //cout << cadena[0];
  30. for(int i=0; i<cadena.size(); i++) {
  31. // if (cadena[i]=='1') v[i]=0;
  32. // else if (cadena[i]=='1') v[i]=1;
  33. v[i]=cadena[i]-48;
  34. // cout << v[i];
  35. }
  36.  
  37. for(int i=0;i<v.size()-3;i++) {
  38. for(int j=i;j<v.size()-3;j++) {
  39. patron[3]=v[i];
  40. patron[2]=v[j+1];
  41. patron[1]=v[j+2];
  42. patron[0]=v[j+3];
  43. //cout << patron[3] << patron[2] << patron[1] << patron[0] << endl;
  44. patron_int= patron[0] + patron[1]*2 + patron[2]*4 + patron[3]*8;
  45. //cout << patron_int << endl;
  46. patrones[patron_int]++;
  47. //if(i==v.size()/5) system("pause");
  48.  
  49. //system("pause");
  50. }
  51. N=(100*i)/(v.size()-3);
  52. // cout << N << "%" << endl;
  53.  
  54. }
  55.  
  56. for(int i=0; i<patrones.size(); i++) {
  57. cout << i << " se repite " << patrones[i] << " veces." << endl;
  58. }
  59. //cout << v.size();
  60. system("pause");
  61. fi.close();
  62. return 0;
  63. }
  64.  

Ahora voy a ir preguntando sobre este codigo. Primero decirme que mas cambiar para ponerlo optimo y despues preguntare dudas
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: DUDA CODIGO C#
« Respuesta #5 en: 30 Octubre 2013, 17:35 pm »

Más bien, primero consigue que funcione y luego piensa en optimizar.

Y para conseguir que funcione, lo primordial es entenderlo.
En línea

Slava_TZD
Wiki

Desconectado Desconectado

Mensajes: 1.466

♪ [8675309] ♪


Ver Perfil WWW
Re: DUDA CODIGO C#
« Respuesta #6 en: 30 Octubre 2013, 21:42 pm »

20!=2432902008176640000
4!=24

20!/4!=1.0137092e+17

Cuando sepas que hace el código, lo comentas y lo pones, así los tontos como yo nos enteramos de que hace sin tener que mirarlo 20! horas xD Vaya berenjenal.
En línea


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.
Spiritdead5

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: DUDA CODIGO C#
« Respuesta #7 en: 30 Octubre 2013, 21:51 pm »

foro incorrecto, ese codigo es C++
En línea

burnssss

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: DUDA CODIGO C#
« Respuesta #8 en: 30 Octubre 2013, 22:15 pm »

Entender entiendo lo que hace.
A partir de una secuencia binaria intento extraer subsecuencias de longitud 4. Pero debido a la cantidad de datos, los patrones binarios se convierten a enteros y a partir de ahi se hace el recuento de patrones.

Un ejemplo matematico seria el siguiente:

SUCESION BINARIA

1 (1), 0 (2), 1 (3), 1 (4), 0 (5), 0 (6), 1 (7), 0 (8), 0 (9), 1 (10), 1 (11), 1 (12), 1 (13), 0 (14), 0 (15), 0 (16), 1 (17), 1 (18), 1 (19), 0 (20).

SOLUCION

1) 1 (1) 0 (2) 1 (3) 1 (4)
2) 1 (1) 1 (3) 0 (5) 1 (7)
3) 1 (1) 1 (4) 1 (7) 1 (10)
4) 1 (1) 0 (5) 0 (9) 1 (13)
5) 1 (1) 0 (6) 1 (11) 0 (16)
6) 1 (1) 1 (7) 1 (13) 1 (19)
7) 0 (2) 1 (3) 1 (4) 0 (5)
8) 0 (2) 1 (4) 0 (6) 0 (8)
9) 0 (2) 0 (5) 0 (8) 1 (11)
10) 0 (2) 0 (6) 1 (10) 0 (14)
11) 0 (2) 1 (7) 1 (12) 1 (17)
12) 0 (2) 0 (8) 0 (14) 0 (20)
13) 1 (3) 1 (4) 0 (5) 0 (6)
14) 1 (3) 0 (5) 1 (7) 0 (9)
15) 1 (3) 0 (6) 0 (9) 1 (12)
16) 1 (3) 1 (7) 1 (11) 0 (15)
17) 1 (3) 0 (8) 1 (13) 1 (18)
18) 1 (4) 0 (5) 0 (6) 1 (7)
19) 1 (4) 0 (6) 0 (8) 1 (10)
20) 1 (4) 1 (7) 1 (10) 1 (13)
21) 1 (4) 0 (8) 1 (12) 0 (16)
22) 1 (4) 0 (9) 0 (14) 1 (19)
23) 0 (5) 0 (6) 1 (7) 0 (8)
24) 0 (5) 1 (7) 0 (9) 1 (11)
25) 0 (5) 0 (8) 1 (11) 0 (14)
26) 0 (5) 0 (9) 1 (13) 1 (17)
27) 0 (5) 1 (10) 0 (15) 0 (20)
28) 0 (6) 1 (7) 0 (8) 0 (9)
29) 0 (6) 0 (8) 1 (10) 1 (12)
30) 0 (6) 0 (9) 1 (12) 0 (15)
31) 0 (6) 1 (10) 0 (14) 1 (18)
32) 1 (7) 0 (8) 0 (9) 1 (10)
33) 1 (7) 0 (9) 1 (11) 1 (13)
34) 1 (7) 1 (10) 1 (13) 0 (16)
35) 1 (7) 1 (11) 0 (15) 1 (19)
36) 0 (8) 0 (9) 1 (10) 1 (11)
37) 0 (8) 1 (10) 1 (12) 0 (14)
38) 0 (8) 1 (11) 0 (14) 1 (17)
39) 0 (8) 1 (12) 0 (16) 0 (20)
40) 0 (9) 1 (10) 1 (11) 1 (12)
41) 0 (9) 1 (11) 1 (13) 0 (15)
42) 0 (9) 1 (12) 0 (15) 1 (18)
43) 1 (10) 1 (11) 1 (12) 1 (13)
44) 1 (10) 1 (12) 0 (14) 0 (16)
45) 1 (10) 1 (13) 0 (16) 1 (19)
46) 1 (11) 1 (12) 1 (13) 0 (14)
47) 1 (11) 1 (13) 0 (15) 1 (17)
48) 1 (11) 0 (14) 1 (17) 0 (20)
49) 1 (12) 1 (13) 0 (14) 0 (15)
50) 1 (12) 0 (14) 0 (16) 1 (18)
51) 1 (13) 0 (14) 0 (15) 0 (16)
52) 1 (13) 0 (15) 1 (17) 1 (19)
53) 0 (14) 0 (15) 0 (16) 1 (17)
54) 0 (14) 0 (16) 1 (18) 0 (20)
55) 0 (15) 0 (16) 1 (17) 1 (18)
56) 0 (16) 1 (17) 1 (18) 1 (19)
57) 1 (17) 1 (18) 1 (19) 0 (20)

Los numeros entre parentesis indican el orden que deben tener.
A partir de ahi se hace un recuento de patrones con la frecuencia relativa.
Funcionar , el codigo funciona correctamente. Me indica patrones en enteros y el numero de veces que se repiten.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda en el codigo vb
Programación Visual Basic
josemer 0 1,303 Último mensaje 23 Enero 2006, 20:32 pm
por josemer
duda en un codigo vb
Programación Visual Basic
ugruhell 6 2,402 Último mensaje 26 Agosto 2006, 00:20 am
por Ironhorse
Duda con codigo de vb6 y el MSN « 1 2 »
Programación Visual Basic
Anteros 10 3,362 Último mensaje 6 Abril 2007, 01:54 am
por Sancho.Mazorka
Duda codigo PHP
PHP
knox18 1 1,684 Último mensaje 9 Septiembre 2007, 17:24 pm
por P[i]
Duda codigo PHP « 1 2 »
PHP
knox18 14 5,361 Último mensaje 14 Septiembre 2007, 15:15 pm
por Alex_bro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines