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 Temas
Páginas: [1] 2 3
1  Foros Generales / Sugerencias y dudas sobre el Foro / Sobre la sección de programación C++ en: 1 Mayo 2014, 01:56 am
Buenas.

Por razones que se desconoce, cuando la gente empieza a aportar curiosidades en un tema. Este se cierra automaticamente:
http://foro.elhacker.net/programacion_cc/problema_en_variable_int-t413535.0.html
http://foro.elhacker.net/programacion_cc/duda_con_matrices_y_paso_por_parametro-t413102.0.html

No acabo de entender esa postura de moderación. ¿No quiere que la gente participe? ¿O hay alguna explicación que nadie conoce? :huh:
2  Programación / Programación C/C++ / Extraño problemas con vector en: 11 Abril 2014, 00:14 am
Pues resulta que tenía petadas "aleatorias" en mi programa. Estuve mirando y comprobé que pasaba en la destrucción de un objeto.

El objeto tiene pocos atributos, lo unico que puede causar problemas es:
Código
  1. std::vector<std::vector<RGB> > Matriz;

RGB es una clase con 3 enteros. Eso no debería causar problemas.

Probé a depurar el destructor:
Código
  1. ~Image()
  2. {
  3.    for (int i = 0; i < Matriz.size();i++)
  4.        Matriz[i].clear();
  5.    std::cout<<"Destruidas las filas..."<<std::endl;
  6.    Matriz.clear();
  7.    std::cout<<"^^"<<std::endl;
  8. };
  9.  

Falla en el ultimo clear. Pero no entiendo porque. ¿Hay problemas en destruir un vector desde otro vector?

Repito que no pasa siempre, solo pasa en X casos (y con la misma entrada y circunstancias :huh: :huh:).



Vale, esque escribía en posiciones negativas del vector *_*
3  Foros Generales / Sugerencias y dudas sobre el Foro / Sobre los avatares en: 9 Abril 2014, 20:24 pm
No sé porque, pero esto de los avatares me falla bastante.

Dado esta imagen:


La subo al avatar y al cambiar de página me la borra sola :huh:

Y que yo sepa las dimensiones son las legales *_*:
https://docs.google.com/document/d/1OsG_dD3SwbkOmMTg3bAFFRFY69Tq6JQLFf593n97D7Y/preview#heading=h.0f7161dd5db5
4  Programación / Programación C/C++ / Representación de Coordenadas en: 9 Abril 2014, 16:49 pm
Buenas.

Frecuentemente hay que trabajar con coordenadas en la programación. Actualmente conozco tres formas de pasarlas:

1º A "pelo" con dos variables int:

Código
  1. int x = 1;
  2. int y = 1;
  3.  
  4. pintar(x,y);

2º Creandote una estructura "Cord":

Código
  1. struct Cord
  2. {
  3.    int X,Y;
  4.  
  5.   Cord(int x,int y) : X(x),Y(y) {}
  6. };
  7.  
  8. //...
  9.  
  10. pintar(Cord(1,1));

3º Un objeto Cord con su encapsulamiento y su todo:
Código
  1. class Cord
  2. {
  3. int X,Y;
  4.  
  5. public:
  6.  
  7. Cord(int x,int y) : X(x),Y(y) {}
  8.  
  9. int getX() const {return X;}
  10. int getY() const {return Y;}
  11. void setX(int x){X = x;}
  12. void setY(int y){Y = y;}
  13.  
  14. bool operator==(const Cord a) const {return X == a.X && Y == a.Y;}
  15. bool operator!=(const Cord a) const {return X != a.X || Y != a.Y;}
  16.        Cord operator+(const Cord a) const{return Cord(A.X+X,A.Y+Y);}
  17. };
  18.  
  19. //...
  20.  
  21. Pintar(Cord(1,1));]

En vuestra opinión. ¿Cual es la forma más adecuada? Con la primera quizás se escribe menos, aunque se te acumulan los argumentos en la función.
5  Programación / Programación C/C++ / Problema extraño en: 13 Marzo 2014, 12:00 pm
Buenas.

Voy a a hacer un post un poco largo, de modo que los vagos deberían dejar de leer ^^

Estoy haciendo problemas de estos con juez automatico, el problema en el que estoy es el siguiente:

Citar
E. KaniI LanGuAgeE

Por razones que no vienen al caso, se quiere convertir grandes clásicos de la literatura española (El Quijote,Don Juan Tenorio, Teo va al parque, etc. . . ) a un lenguaje más cercano a la juventud de hoy en día.

Así pues, se está pensando en realizar un programa que utilice una serie de reglas de conversión al lenguaje conocido como kaNiI LanGuAgeE.

A continuación explicamos dichas reglas:

1. Se eliminan las haches (excepto ch que se transformará en x).
2. Cuando existan una o más vocales juntas, se convierten en mayúscula las de las posiciones pares, contando
la primera vocal como posición 1.
3. Las consonantes siguen una regla similar, pero no tienen que ser consecutivas para pasarlas a mayúsculas. En
este caso, las consonantes se alternan entre mayúsculas y minúsculas dentro de una misma palabra, empezando por mayúscula. (hola caracola!oLaA KaraKolaA) Por simplicidad se puede considerar consonante todo aquello que no es vocal.
4. Si la palabra acaba en vocal se añade la misma vocal (se sigue aplicando la regla de las mayúsculas (regla 2)) (Primo!PriMoO, vivia !BibiAa).
5. Las c con sonido z (ce, ci) se cambian por z, mientras que el resto se cambian por k.
6. Las b cambian por v y las v por b.
7. Las letras ch cambian por x.
8. Las letras que ya están en mayúscula se mantienen: (HOLA CARACOLA!OLAA KARAKOLAA).
9. Una consonante estará en mayúscula si cumple la regla 3 o si la letra original está en mayúscula. Para el
caso especial de la ch (al sustituirse por x), seguirá la regla tomando en cuenta si la c de la ch original es
mayúscula o no. (revancha!RebaNxaA, rebanCHa!RevaNXaA, reVancHa !ReBaNxaA)
10. Una vocal estará en mayúscula si cumple la regla 2 o si la letra original está en mayúscula. (que ! QuEe, quE!QuEE)

Se recomienda revisar los ejemplos detenidamente para ver como se aplican estas reglas. Y utilizar herramientas como diff para ver con más detalle en qué partes está fallando el programa.

Por simplicidad las frases solo contendrán carácteres de a-z y A-Z y espacios como delimitadores. También, debido al caso especial de la eliminación de la h, no existe ninguna palabra que acabe por h.

Y te dan ejemplo la entrada:
Citar
No es verdad angel de amor que en esta apartada orilla mas pura la
luna brilla y acaso se respira mejor
En un lugar de la mancha de cuyo nombre no quiero acordarme vivia
Con diez canyones por banda viento en popa a toda vela no corta el
mar sino vuela un velero bergantil aquel pirata el temido
Este es
un ejemplo
mas corto
Para que
podais gastar la
herramienta diff
y os salgan bien
las cosas
ahi es nada
y ahora
unas frases tipicas
si apruebo todas mi madre me
compra la moto
sin ser chula ni vacilona soy tu envidia campeona

Y la salida:

Citar
NoO eS verdad aNgeL DeE aMor QuEe eN eStaA aParTadaA oRilLaA Mas PuraA LaA
LunaA VriLlaA Y aKasoO SeE ResPiraA MejoR
EN uN LugaR DeE LaA ManXaA DeE KuyoO NomVreE NoO QuIeroO aKorDarMeE BibiAa
Kon DiEz KanYoneS Por VanDaA BiEnToO eN PopaA aA TodaA BelaA NoO KorTaA eL
Mar SinoO BuElaA uN BeleRoO VerGanTil aQuEl PiraTaA eL TemiDoO
ESteE eS
uN eJemPloO
Mas KorToO
ParaA QuEe
PodaIS GasTar LaA
eRraMiEnTaA DifF
Y oS SalGan ViEn
Las KosaS
aIi eS NadaA
Y aORaA
uNas FraSes TipiKas
SiI aPruEVoO TodaS MiI MadReE MeE
KomPraA LaA MotoO
Sin Ser XuLaA NiI BaziLonaA Soy TuU eNbiDiAa KamPeOnaA

Total que me pongo a ello y saco este código:
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. using namespace std;
  5.  
  6. string Traducir(string &e);
  7.  
  8. int main()
  9. {
  10.    ifstream fin("Ekani1.in");
  11.    ofstream fout("salida.txt");
  12.    string palabra,linea;
  13.    getline(fin,linea);
  14.  
  15.    while (fin.good())
  16.    {
  17.  
  18.        {
  19.            stringstream Buffer(linea);
  20.            unsigned int i = 0;
  21.            while (Buffer.good())
  22.            {
  23.                while (i < linea.size() && linea[i] == ' ')
  24.                {
  25.                    fout<<' ';
  26.                    i++;
  27.                }
  28.  
  29.                Buffer>>palabra;
  30.  
  31.                i += palabra.size();
  32.                fout<<Traducir(palabra);
  33.                palabra.clear();
  34.            }
  35.            fout<<endl;
  36.  
  37.        }
  38.        getline(fin,linea);
  39.    }
  40.  
  41.    return 0;
  42. }
  43.  
  44. inline bool esVocal(char a)
  45. {
  46.    return a == 'a' || a == 'e' || a == 'i' || a == 'o' || a== 'u' || a == 'A' || a == 'E' || a == 'I' ||a == 'O' ||a=='U';
  47. }
  48.  
  49. string Traducir(string &e)
  50. {
  51.    string buffer;
  52.    int consonante = 1;
  53.    char letra;
  54.  
  55.    if (esVocal(e[e.size()-1])) // Si la ultima es vocal, añadimos una vocal al final
  56.        e += e[e.size()-1];
  57.  
  58.    for (unsigned int i = 0; i < e.size(); i++)
  59.    {
  60.        if (esVocal(e[i])) // es vocal?
  61.        {
  62.            buffer += e[i]; // la anyadimos
  63.            bool mayus = 1;
  64.            i++;
  65.  
  66.            // listamos todas las vocales adyacentes (y las h, ya que son "mudas")
  67.  
  68.            while (i < e.size() && (esVocal(e[i]) || e[i] == 'h' || e[i] == 'H'))
  69.            {
  70.                if (e[i] == 'h' || e[i] == 'H'){i++; continue;} // las haches se descartan
  71.  
  72.                if (mayus == 1) buffer += toupper(e[i]); // si toca mayuscula, anyadimos una mayuscula
  73.                else buffer += e[i]; // sino, la anyadimos tal cual
  74.  
  75.                mayus = !mayus;
  76.                i++;
  77.            }
  78.            i--;
  79.            continue;
  80.        }
  81.  
  82.        // no es vocal
  83.  
  84.        if (e[i] == 'h' || e[i] == 'H') // si es h, se ignora
  85.        {
  86.            if (i != 0 && (e[i-1] == 'c' || e[i-1] == 'C')) // si la anterior era una c
  87.            {
  88.                if (e[i-1] == 'C') letra = 'X'; // la sustituimos por una X
  89.                else letra = 'x'; // o x minuscula
  90.  
  91.                if (consonante % 2 == 0) // si es una posicion par, toca mayuscula
  92.                {
  93.                    buffer[buffer.size()-1] = toupper(letra); // cambiamos la ultima posicion
  94.                    consonante = 1;
  95.                }
  96.                else buffer[buffer.size()-1] = letra;
  97.  
  98.            }
  99.            continue;
  100.        }
  101.  
  102.        letra = e[i]; // la letra se anyade al final, segun resulte ser mayuscula o minuscula
  103.        consonante++;
  104.        //  else buffer += e[i];
  105. //
  106.        if (e[i] == 'b') // sustituir b por v
  107.        {
  108.            letra = 'v';
  109.        }
  110.        else if (e[i] == 'B') // sustituir B por V
  111.        {
  112.            letra = 'V';
  113.        }
  114.        else if (e[i] == 'v')
  115.        {
  116.            letra = 'b';
  117.        }
  118.        else if (e[i] == 'V')
  119.        {
  120.            letra = 'B';
  121.        }
  122.  
  123.        else if (e[i] == 'c' || e[i] == 'C') // las c, por z o por k
  124.        {
  125.            if (i+1 < e.size() && (e[i+1] =='e' || e[i+1] == 'E' ||e[i+1] == 'i' || e[i+1] == 'I'))
  126.            {
  127.                if (e[i] == 'c') letra = 'z';
  128.                else letra = 'Z';
  129.               // i++;
  130.            }
  131.            else
  132.            {
  133.                if (e[i] == 'c') letra = 'k';
  134.                else letra = 'K';
  135.            }
  136.        }
  137.  
  138.        if (consonante % 2 == 0) // si es una consonante en posicion par
  139.        {
  140.            buffer += toupper(letra); // se anyade mayuscula
  141.            consonante = 0;
  142.        }
  143.        else buffer += letra; // se anyade tal cual
  144.    }
  145.  
  146.    return buffer;
  147. }
  148.  

Que me genera una salida identica a la anterior.

Total que lo subo al juez y me marca WRONG ANSWER. Lo he revisado varias veces pero no entiendo que puede fallar :(

6  Programación / Programación C/C++ / Sobre la lectura de variables... en: 10 Marzo 2014, 20:49 pm
Buenas.

Suponte, que quiero leer los números:
Citar
2 5

Yo haría:
Código
  1. int numero,numero2;
  2. cin>>numero>>numero2;

Y perfecto. ¿Pero que pasaría si hubiese una coma en lugar de un espacio?
Citar
2,5

¿Como cambio el delimitador de cin para poder leerlos directamente?
7  Programación / Programación C/C++ / (USACO) Problemas de progamación para practicar en: 14 Enero 2014, 15:40 pm
Está pagina estaudinense, es la que usan los alumnos de allí para practicar para las olimpiadas de progamación. Son problemas muy interesantes:
http://cerberus.delos.com:790/usacogate

Tienes que subir el código del problema, allí un juez automático comprueba que todo va bien. El juez automático lo que hace es compilar el progama y meterles algunos casos de prueba para ver si da bien el resultado. Puede dar los siguientes errores:

- Error de compilación.
- Error de ejecución (el SO aborta el progama, mayormente por un mal uso de punteros entre otras cosas).
- Respuesta incorrecta (el resultado no coincide con el que él tiene).
- Sobrepasado el tiempo de ejecución.

Suponeos que teneís que calcular el máximo de un conjunto de números. El juez compila el código y le mete la siguiente entrada al progama:
Citar
1 4 2 3 6 5 3 4 8 3 1 0 4

La salida que debería dar tu progama es:
Citar
8

Ya que es el número máximo.

PD: Decir que la página no está orientada para principiantes, debes tener un mínimo de conocimiento para poder hacer algun problemilla ;)
8  Programación / Programación C/C++ / Problema extraño en constructor en: 14 Diciembre 2013, 14:33 pm
Tengo un problemilla muy extraño en un constructor, dado una estructura tal que así:

Código
  1. struct Nodo
  2. {
  3.    Nodo* Letra[26];
  4.    int ocupados = 0;
  5.    char Caracter;
  6.  
  7.    Nodo(char caracter = 0) : Caracter(caracter) { for (int i = 0; i < 26;i++} Letra[i] = NULL;}
  8.  
  9.    ~Nodo(){for (int i = 0; i < 26;i++) if (otro.Letra[i] != NULL) delete Letra[i]; }
  10. };

Me salta un error de compilación en el constructor, dice que "Letra" no existe. Lo cual no tiene sentido *_*
9  Programación / Programación C/C++ / Memory leak con strings en: 9 Agosto 2013, 14:06 pm
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class foo
  5. {
  6.  
  7.  
  8. public:
  9.      string str;
  10.    foo() : str(1000000,'a')
  11.    {
  12.  
  13.    }
  14.    ~foo()
  15.    {
  16.        cout<<"Destructor invocado";
  17.    }
  18. };
  19.  
  20. int main()
  21. {
  22.  
  23.  
  24.    cout << "Presione para construir f";
  25.    cin.get();
  26.  
  27.  
  28.    foo* f = new foo;
  29.  
  30.  
  31.    cout << "Presione para destruir f";
  32.    cin.get();
  33.  
  34.    delete f;
  35.  
  36.    cout << "Presione para salir del programa";
  37.    cin.get();
  38. }

¿Por qué la memoria no se libera al destruir el objeto foo? *_*
10  Programación / Programación C/C++ / (C++) Sobre la estructuración del código en: 11 Julio 2013, 00:15 am
Tengo un problema que me frie la sangre.

Tengo esto en un archivo:

Código
  1. HILO(DesplazamientoPersonaje,parametro)
  2. {
  3.    Datos* param = (Datos*) parametro;
  4.  
  5.    switch (param->Orientacion)
  6.    {
  7.    case ARRIBA:
  8.        Transicion(param,0,-1); // Transicion, desplazamiento X e desplazamiento Y negativo
  9.        break;
  10.    case ABAJO:
  11.        Transicion(param,0,1); // Transicion, desplazamiento X e desplazamiento Y positivo
  12.        break;
  13.    case IZQUIERDA:
  14.        Transicion(param,-1,0); // Etc
  15.        break;
  16.    case DERECHA:
  17.        Transicion(param,1,0);
  18.        break;
  19.  
  20.    }
  21.  
  22.    delete param;
  23. }
  24.  
  25. void Transicion(Datos* param,short incrx,short incry)
  26. {
  27.    for (short ini = 1; ini < 21; ini++)
  28.    {
  29.            //Blablablabla...
  30.    }
  31.  
  32. }

Y en otro archivo tengo:

Código
  1. HILO(Desplazamiento,parametro)
  2. {
  3.    Datos* param = (Datos*) parametro;
  4.  
  5.    switch (param->Orientacion)
  6.    {
  7.    case ARRIBA:
  8.        Transicion2(param,0,-1); // Transicion, desplazamiento X e desplazamiento Y negativo
  9.        break;
  10.    case ABAJO:
  11.        Transicion2(param,0,1); // Transicion, desplazamiento X e desplazamiento Y positivo
  12.        break;
  13.    case IZQUIERDA:
  14.        Transicion2(param,-1,0); // Etc
  15.        break;
  16.    case DERECHA:
  17.        Transicion2(param,1,0);
  18.        break;
  19.  
  20.    }
  21.  
  22.    delete param;
  23. }
  24.  
  25. void Transicion2(Datos* param,short incrx,short incry)
  26. {
  27.  
  28.    for (short ini = 1; ini < 21; ini++)
  29.    {
  30.            // blablabla
  31.  
  32.            if (param->Valor == 1)
  33.                circlefill(param->Lienzo,param->X*20+10,param->Y*20+10,5,pallete_color[14]);
  34.  
  35.            if (param->Valor == 2)
  36.                circlefill(param->Lienzo,param->X*20+10,param->Y*20+10,7,pallete_color[12]);
  37.  
  38.            // blablablabla
  39.  
  40.  
  41.    }
  42. }

Son muy parecidas, las unicas diferencia son los dos ifs de la función for. Hay alguna forma (sencilla) de juntar las dos funciones pero conservando los dos ifs?  :-\

Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines