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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14
11  Programación / Programación C/C++ / Re: Asignaciones e inicializacion de constructores.. en: 22 Junio 2019, 22:29 pm
C++ crea de forma implicita un contructor por defecto (sin parametros) y sobrecarga el operando de asignacion en el caso de que la clase sea bastante trivial, es decir implementa lo siguiente a partir de tu codigo:

Código
  1. class s {
  2. private:
  3. int x;
  4. public:
  5. s() { x = 0}
  6. s(int x1) { x = x1; }
  7. s operator=(int x1) { x = x1; return *this; }
  8. void p() const { std::cout << x; }
  9. int getx() const { return x; }
  10. };

La linea s t = 6; en el main llama al constructor por defecto s() y pone x = 0, luego llama s.operator=(6) y pone x = 6

Otra cosa que no tiene que ver con tu pregunta, NUNCA pongas uno o dos guion bajo al principio del nombre de una variable en C++, esos nombres estan reservados para las librerias del lenguaje y es una mala practica de programacion que deriva de los lenguajes no case-sensitive como Visual Basic donde para diferenciar User y user escribes _user.

Citar
"Don't overlegislate naming, but do use a consistent naming convention: There are only two must-dos: a) never use "underhanded names," ones that begin with an underscore or that contain a double underscore;" (p2 , C++ Coding Standards, Herb Sutter and Andrei Alexandrescu)

12  Programación / Scripting / [PYTHON] Como crear conjunto a partir de lista de tuplas por clave? en: 29 Marzo 2019, 03:07 am
Como crear conjunto a partir de lista de tuplas por clave?
Por ejemplo tengo la siguiente lista de tuplas
Código
  1. x = [('El', 'auto'), ('el', 'auto'), ('un', 'auto'), ('algun', 'auto'), ('Los', 'camiones'),  ('UN', 'auto')]
  2.  
Y quiero obtener la siguiente:
Código
  1. y =  [('el', 'auto'), ('Los', 'camiones')]
En lugar de "el" podria estar cualquiera de los determinantes usados anteriormente.

He intentado usar set() pero no se como hacer para que tome solo el segundo parametro para crear el conjunto.

He implementado el siguiente codigo pero es muy ineficiente, basicamente busca todas las ocurrencias para quedarse con una sola.

Código
  1.    nombres = [('El', 'auto'), ('el', 'auto'), ('un', 'auto'), ('El', 'camion')]
  2.    pares = []
  3.    palabras = list(set(x[1] for x in nombres))
  4.    for i in range(0, len(palabras)):
  5.        j = [det[0] for det in nombres if det[1] == palabras[i]]
  6.        pares = pares + [(j[0], palabras[i])]
  7.    print(pares)
  8.  
13  Programación / Programación C/C++ / [AYUDA] Como se de que tipo se creo una clase que deriba de otra en: 16 Marzo 2019, 05:01 am
Código
  1. #include <random>
  2. #include <cstdio>
  3. #include <stdexcept>
  4.  
  5. class Vehiculo {
  6. public:
  7.  virtual ~Vehiculo() { }; // Clase abstracta
  8. };
  9.  
  10. class Automovil : public Vehiculo {
  11. public:
  12.  int matricula = 4409;
  13. };
  14.  
  15. class Bicicleta : public Vehiculo {
  16. public:
  17.  int cambios = 18;
  18. };
  19.  
  20. void MostrarAtrb(const Vehiculo& vehiculo) {
  21.  try {
  22.    const Automovil& car = dynamic_cast<const Automovil&>(vehiculo);
  23.    printf("Es un Automovil con matricula: %d\n", car.matricula);
  24.  } catch(std::bad_cast &e) {
  25.    printf("Error %s\n", e.what());
  26.  }
  27.  try {
  28.    const Bicicleta& bici = dynamic_cast<const Bicicleta&>(vehiculo);
  29.    printf("Es una Bicicleta con %d cambios\n", bici.cambios);
  30.  } catch(std::bad_cast &e) {
  31.    printf("Error %s\n", e.what());
  32.  }
  33. }
  34.  
  35. int main() {
  36.  Vehiculo vehiculo;
  37.  if (rand() % 2 == 0)
  38.    vehiculo = Automovil();
  39.  else
  40.    vehiculo = Bicicleta();
  41.  MostrarAtrb(vehiculo); // Como se de que tipo se creo el objeto???
  42.  return 0;
  43. }
  44.  

Ambas conversiones de tipo dan error.
14  Programación / Programación C/C++ / Desofuscar codigo en: 22 Noviembre 2018, 03:17 am
Queria compartir el siguiente codigo que genera un Donut 3D (solo funciona en la terminal de Linux o la de MinGW) y mi intento por desofuscarlo.


Código
  1.             k;double sin()
  2.         ,cos();main(){float A=
  3.       0,B=0,i,j,z[1760];char b[
  4.     1760];printf("\x1b[2J");for(;;
  5.  ){memset(b,32,1760);memset(z,0,7040)
  6.  ;for(j=0;6.28>j;j+=0.07)for(i=0;6.28
  7. >i;i+=0.02){float c=sin(i),d=cos(j),e=
  8. sin(A),f=sin(j),g=cos(A),h=d+2,D=1/(c*
  9. h*e+f*g+5),l=cos      (i),m=cos(B),n=s\
  10. in(B),t=c*h*g-f*        e;int x=40+30*D*
  11. (l*h*m-t*n),y=            12+15*D*(l*h*n
  12. +t*m),o=x+80*y,          N=8*((f*e-c*d*g
  13. )*m-c*d*e-f*g-l        *d*n);if(22>y&&
  14. y>0&&x>0&&80>x&&D>z[o]){z[o]=D;;;b[o]=
  15. ".,-~:;=!*#$@"[N>0?N:0];}}/*#****!!-*/
  16.  printf("\x1b[H");for(k=0;1761>k;k++)
  17.   putchar(k%80?b[k]:10);A+=0.04;B+=
  18.     0.02;}}/*****####*******!!=;:~
  19.        ~::==!!!**********!!!==::-
  20.          .,~~;;;========;;;:~-.
  21.              ..,--------,*/
  22.  
Código
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #define PI 3.14
  6. #define HEIGHT 22
  7. #define WIDTH 80
  8.  
  9. const float R2 = 2; // Distancia del centro del Toroide a la mitad: (   )   |---(-. )
  10. const char* illumination = ".,-~:;=!*#$@";
  11.  
  12. int main(){
  13. float zbuffer[HEIGHT][WIDTH];
  14. char framebuffer[HEIGHT][WIDTH];
  15. float A = 0, C = 0; // Ejes X y Z sobre los que rota el Toroide
  16. printf("\x1b[2J"); // Borrar Pantalla
  17.  
  18. while (true) {
  19. memset(zbuffer, 0.0, HEIGHT * WIDTH * sizeof(float)); // Fondo a distancia infinita
  20. memset(framebuffer, ' ', HEIGHT * WIDTH * sizeof(char)); // Pantalla vacia
  21.  
  22. for (float B = 0; B < 2 * PI; B += 0.07) // Eje Y sobre el que rota el Toroide
  23. for (float phi = 0; phi < 2 * PI; phi += 0.02) { // Eje del toroide (perpendicular al centro)
  24. float
  25. sin_phi = sin(phi),
  26. cos_phi = cos(phi),
  27. sinA = sin(A),
  28. cosA = cos(A),
  29. sinB = sin(B),
  30. cosB = cos(B),
  31. sinC = sin(C),
  32. cosC = cos(C),
  33. // Solo otro par de valores que precalculamos
  34. h = cosB + R2,
  35. t = h * sin_phi * cosA - sinA * sinB,
  36. // Distancia inversa del observador al centro del Toroide
  37. D = 1 / (h * sin_phi * sinA + cosA * sinB + 5);
  38. int
  39. // Posicion de la pantalla donde se renderiza un punto del Toroide
  40. x = 40 + 30 * D * (h * cos_phi * cosC - sinC * t),
  41. y = 12 + 15 * D * (h * cos_phi * sinC + cosC * t),
  42. /* La luz proviene de arriba y atras del observador (0, 1, -1)
  43.   que tiene modulo 2, hay 12 tonos de luz: 0..11, 11 / sqrt(2) = 8
  44.   L = 8 * (y - z); */
  45. L = 8 * ((sinA * sinB - sin_phi * cosA * cosB) * cosC -
  46. sin_phi * sinA * cosB - cosA * sinB - cos_phi * cosB * sinC);
  47. // LAS MATRICES TIENEN INDICES i VERTICAL Y j HORIZONTAL
  48. // MIENTRAS QUE LAS GRAFICAS TIENEN x HORIZONTAL E y VERTICAL
  49. if (x > 0 && x < WIDTH && y > 0 && y < HEIGHT && zbuffer[y][x] < D) {
  50. /* Si el punto actual es mas cercano a la pantalla que alguno calculado
  51.   previamente entonces sobrescribir al anterior */
  52. if (L < 0) L = 0; // Sombra
  53. framebuffer[y][x] = illumination[L];
  54. zbuffer[y][x] = D; // Guardar profundidad
  55. }
  56. }
  57. printf("\x1b[H"); // Mover el cursor a la esquina superior izquierda
  58. for (int i = 0; i < HEIGHT; i++) {
  59. for (int j = 0; j < WIDTH; j++)
  60. putchar(framebuffer[i][j]); // Mostrar Toroide
  61. putchar('\n');
  62. }
  63. A += 0.04;
  64. C += 0.02;
  65. }
  66. return 0;
  67. }
  68.  
15  Programación / Programación C/C++ / Re: duda con función en c en: 13 Noviembre 2018, 12:26 pm
Código
  1. int calcular(int a, char op, int b) {
  2.  int result;
  3.  switch(op) {
  4.    case '+':
  5.      result = a + b;
  6.      break;
  7. \\ Agregar los demás casos
  8.    default:
  9.      printf("Operación no válida\n");
  10.      assert(false);
  11.      break;
  12.  }
  13.  return res;
  14. }

int c = calcular(2, '+', 2);
assert(c == 4);
16  Foros Generales / Noticias / Re: Más antiguo que Star Wars: el bug de Windows que lleva más de 40 años sin ... en: 6 Noviembre 2018, 11:50 am
Hostia que guay eso de contar el tiempo en Star Wars y el tamaño en campos de fútbol.

Hay un YouTuber que cuenta masa, distancia y volumen en Toyota Corolla
17  Sistemas Operativos / GNU/Linux / Gestor de descargas para Linux en: 5 Noviembre 2018, 15:18 pm
Busco un gestor de descarga para Linux que sea portable (no tengo permisos de root para instalarlo) sin interfax grafica (que se ejecute desde terminal) y que me permita descargar de servidores como Mega, 1fichier o Google Drive.
Algo como MiPony pero que pueda pasar los links desde la terminal.
18  Programación / Programación General / Re: [AYUDA] ¿Cómo hacer este código más eficiente? en: 16 Octubre 2018, 01:16 am
Lo consegui:
Código
  1. uint buscarIndice(const uint* A, uint i, uint c) {
  2. uint l = 1, r = i;
  3. while (l <= r) {
  4. uint m = (l + r) / 2;
  5. if (A[m - 1] <= c) {
  6. if (A[m] <= c)
  7. l = m + 1;
  8. else
  9. return m;
  10. } else
  11. r = m - 1;
  12. }
  13. return 0;
  14. }
  15.  
19  Programación / Programación General / [AYUDA] ¿Cómo hacer este código más eficiente? en: 16 Octubre 2018, 00:12 am
El siguiente codigo se ejecuta en orden lineal con respecto al tamaño del arreglo A, mi pregunta es cómo hacer dicho codigo más eficiente, digamos O(log n), la idea que tengo es hacer busqueda binaria, es decir, dividir A a la mitad ((i-1) / 2) y buscar en cada mitad.
Pero:
  • Si encuentro un i > 0 en la primera mitad deberia buscar en la segunda. (podria existir un i mayor)
  • Si no encuentro un i > 0 en la segunda mitad debería buscar en la primera si no lo hice antes. (ya que podria existir un i > 0)
Por lo que sigue siendo O(n) en el peor caso, quiza no sea posible implementarlo en O(log n)

Código
  1. /* A[1..n] esta ordenado de menor a mayor
  2.  * Devuelve el mayor indice i' menor o igual a i tal que A[i'] <= c
  3.  * o cero si no se encuentra. Cota superior asintotica: O(n)
  4.  */
  5. void buscarIndice(const uint* A, uint &i, const uint c) {
  6. while (i > 0 && A[i] > c)
  7. i--;
  8. }
  9.  

El siguente codigo es O(n^2), lo que si es seguro es que como A está ordenado es posible implementarlo en O(n log n) (La demostración queda a cargo del lector) ¿Alguna idea de por donde empezar?
Código
  1. for (uint j = 1; j <= n; j++) {
  2. uint i = j; // No es ortodoxo modificar j
  3. buscarIndice(A, i, c);
  4. hacerAlgoUtilCon(i);
  5. }
20  Programación / Programación C/C++ / ¿Cómo hallar una Permutacion ordenada con MergeSort? en: 11 Octubre 2018, 01:12 am
Dado un arreglo desordenado con n elementos, el siguiente código retorna una permutación tal que al aplicarla al arreglo original los elementos quedan ordenados.

Código
  1. #include <stdio.h>
  2.  
  3. typedef unsigned int uint;
  4.  
  5. void Swap(int &a, int &b) {
  6. int t = a;
  7. a = b;
  8. b = t;
  9. }
  10.  
  11. int* BubbleSort(const int* A, uint n) {
  12. int* P = new int[n];
  13. for (uint i = 0; i < n; i++)
  14. P[i] = i;
  15. bool ordenado;
  16. do {
  17. ordenado = true;
  18. for (uint i = 1; i < n; i++)
  19. if (A[P[i-1]] > A[P[i]]) {
  20. Swap(P[i-1], P[i]);
  21. ordenado = false;
  22. }
  23. } while (!ordenado);
  24. return P;
  25. }
  26.  
  27. int main() {
  28. uint n;
  29. printf("Ingrese la cantidad de numeros: ");
  30. scanf("%u", &n);
  31. printf("Ingrese los numeros:\n");
  32. int* A = new int[n];
  33. for (uint i = 0; i < n; i++)
  34. scanf("%d", &A[i]);
  35. int* P = BubbleSort(A, n);
  36. printf("Los numeros ordenados son:\n");
  37. for (uint i = 0; i < n; i++)
  38. printf("%d ", A[P[i]]);
  39. printf("\n");
  40. delete[] A;
  41. delete[] P;
  42. return 0;
  43. }

Pero lo hace en tiempo O(n^2), en cambio el siguiente codigo: https://www.geeksforgeeks.org/merge-sort/ retorna el arreglo ordenado en tiempo O(n log(n))
¿Cómo puedo modificar MergeSort para obtener una permutación ordenada en lugar de ordenar el propio arreglo?

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