Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - @XSStringManolo

#2461
En el remoto caso de leerlo todo no, si pregunto es porque me interesa de verdad la respuesta, no para hacer el tonto.

Si quisiera aparentar algo me pondría a descargar códigos y cambiarle los nombres de inglés a español y esas gilipollezes. Si quiero usar cosas que no suelo usar es para que no se me olviden, no para aparentar xD

Te tomo el consejo al 100%. El consejo de hacer los programas con enfoque comercial nunca me lo había planteado, siempre hago cosas para mi. Y como las hago para mi, hago chapuzas útiles con errores sin solucionar que sé que no voy a cometer porque conozco el funcionamiento del programa.
Cosas como un array de 8 números en vez de un vector, etc.
Entonces como no tengo en la mente que otros usuarios vaian a usar el programa lo dejo con 200 errores, no le implemento más cosas que serían prácticas con el programa porque yo no las voy a usar, ni me mato a hacerle una gui.

Me gustaría acercarme más a mis objetivos con la programación. Hacer servidores con una interfaz muy sencilla, práctica y agradable/cómoda. Y hacer un rpg en 2D con C++ y alguna librería gráfica.

Lo del servidor en QT me da a mi que con los ejemplos que tienen y tal, podría hacerlo en 1 mes sin saber nada de QT mirando por libros, ejemplos, etc, dedicándole muchas horas al día.
Quiero hacer primero un cliente servidor en Windows api, por eso ando ahora con esa api a tope. Pero de momento no tengo ni la menor idea del tiempo que tardaré en conseguirlo. Ya me empiezo a manejar con ventanas/botones. Cuando me maneje algo mas iré a por sockets, que hay muchos ejemplos y seguro que con la ayuda de los pros del foro y los ejemplos que hay por ahí lo consigo hacer de 0 sin mirar por ningún sitio. (Tras intentarlo 200 veces seguidas? Jaja)

Por otro lado lo del rpg 2D en SDL me da a mi que van a ser años intentándo hacer algo en SDL y mandándolo a la *****, hasta que por cabezonería lo acabe sacando. Tampoco busco hacer gráficos ahí todo exagerados, un super motor etc. Con que 12 pixeles se muevan por mapas de 100... xD Le tengo demasiado respeto a la librería para pretender más. XD



#2462
Siempre ando a hacerlo a mano y hecho mi tiempo asique hice una función sencilla que lo haga por mi.
Las abrá 100 veces mejores, sin fallos y más completas por ahí. Yo os dejo la mía para quien la quiera usar, o por si os apetece discutir sobre el código, como lo haceis vosotros, como mejorarlo, etc.

Hay 2 bucles for que tienen los numeros 25 y 80. Son la altura y la anchura por defecto que yo tengo en mi consola.Podeis cambiarlos por int ancho e int alto.
Si vais a aumentarla, abrir el programa con la consola máximizada, etc. Le poneis lo que corresponda, vais probabdo. Al hacer eso también abrá que cambiar el (j==79) por (j==nuevoAncho-1) y el (contador == 24) por (contador == nuevaAltura-1)
Se puede hacer con menos variables, sin llenar tantos strings y creo que hay variables sin usar en la segunda funcion. Si quereis optimizarlo genial.

Abajo de todo del código dibujé las salidas del programa por consola de cada función por si quereis ver exactamente lo que hacen antes de compilar el código.
También dejé un ejemplo creado en el main para verlo al compilar.

Código (cpp) [Seleccionar]

#include <iostream>
#include <string>

using namespace std;

string crearIntro(string escenariochar, string bordes, string bordesArriba, string bordesAbajo );
string anhadirTexto(string cadenaDelUsuario, string texto, int linea);


int main()
{
string mistring;

mistring = crearIntro("1", "|", "=", "_");
//cout << mistring; //Ejemplo de lo que hace.

mistring = crearIntro(" ", "|", "=", "_");
//cout << endl << mistring; //Ejemplo practico de funcion CrearIntro

mistring = anhadirTexto(mistring, "MI PROGRAMA DE CONSOLA!", 12);
//cout << endl << mistring; //Ejemplo practico de anhadirTexto

string textoDeMiprograma = "Pulsa enter para empezar.                                               ";
mistring = anhadirTexto(mistring,textoDeMiprograma , 23);
textoDeMiprograma = "                                                           Sunday,June 09,2019";
mistring = anhadirTexto(mistring,textoDeMiprograma , 2);

cout << endl << mistring; //Ejemplo practico de anhadirTexto

cin.get();
return 0;
}


string crearIntro(string escenariochar, string bordes, string bordesArriba, string bordesAbajo)
{
string escenario;
static int contador = 0;

for ( int i = 0; i < 25; ++i )
{
        for ( int j = 0; j < 80; ++j )
        {
            if(j == 79 || j == 0)
            {
if(contador == 0 || contador == 1 || contador == 24)
                {
if (contador == 0 || contador == 1)
{
escenario.append(bordesArriba);
}

else
{
escenario.append(bordesAbajo);
}
                }

else
{
escenario.append(bordes);
}
}

            else
            {
                if(contador == 0 || contador == 1 || contador == 24)
                {
if (contador == 0 || contador == 1)
{
escenario.append(bordesArriba);
}

else
{
escenario.append(bordesAbajo);
}

}

else
{
escenario.append(escenariochar);
}
}
        }
    ++contador;
}

contador = 0;
return escenario;
}


string anhadirTexto(string cadenaDelUsuario, string texto, int linea)
{
int tamanhocadena = cadenaDelUsuario.size();
int tamanhotexto = texto.size();
int mitadtamanhotexto = tamanhotexto/2;
int saltosDeLinea = linea;
string nuevaCadena = cadenaDelUsuario;
int diferenciaTexto;
int x = 80;
string vacio;

diferenciaTexto = x * linea;
diferenciaTexto -= -(40 - mitadtamanhotexto);

vacio.append(cadenaDelUsuario, 0, diferenciaTexto);
vacio.append(texto);
diferenciaTexto += tamanhotexto;
vacio.append(cadenaDelUsuario, diferenciaTexto, 2000);

return vacio;
}


/*
Ejemplo de llamada a crearIntro:

string mistring;
mistring = crearIntro("1", "|", "=", "_");

Primer parametro -> Llena la consola del caracter que le pongamos.
Segundo parametro -> Utiliza el caracter como borde.
Tercer parametro -> Utiliza el caracter como borde superior.
Cuarto parametro -> Utiliza el caracter como borde inferior.

En la llamada de arriba el resultado sera asi:

==================
==================
|1111111111111111|
|1111111111111111|
|1111111111111111|
|1111111111111111|
|1111111111111111|
|1111111111111111|
|1111111111111111|
|1111111111111111|
|1111111111111111|
__________________


*/

/*
Ejemplo de llamada a anhadirTexto:

string mistring;
mistring = anhadirTexto(mistring, "HOLA!", 6);

Primer parametro -> El string que tenemos de la otra funcion.
Segundo parametro -> El texto que queremos anhadir.
Tercer parametro -> La linea en la cual queremos poner nuestro texto.


En este ejemplo cambiamos el "1" por un espacio " " o un espacio "\ ".

string mistring;
mistring = crearIntro(" ", "x", "A", "*");
mistring = anhadirTexto(mistring, "MI PROGRAMA!", 5);

En la llamada el resultado sera asi:

AAAAAAAAAAAAAAAAAA     Linea 1
AAAAAAAAAAAAAAAAAA     Linea 2
x                x     Linea 3
x                x     Linea 4
x  MI PROGRAMA!  x     Linea 5
x                x     Linea 6
x                x     Linea 7
x                x     Linea 8
x                x     Linea 9
x                x     Linea 10
x                x     Linea 11
******************     Linea 12

*/
#2463
Creo que lo voy a hacer recorriendo el propio código fuente del main xD. Recorro el main.cpp y compruebo si hay alguna comilla simple entre los parentesis de la llamada a la funcion. Si los hay uso static_cast<char> si no lo hay, no uso el cast.
Es para que me ordene un array según lo que yo quiera.
Quiero que me ordene por ejemplo:
1, 2, 3, 97, 4, 5, a , 6...
Pero a la vez quiero que ese a sea tratado como un int 97 pero no orendado con el mismo criterio que el int 97.

Despues según el orden del array sabré si el 97 en realidad es una 'a' o es un int 97 segun si el indice del array es par o impar.
Por ejemplo el primer 97 está en el indice [3] y el segundo 97 está en el indice [6] por lo que según esa regla podría imprimir en pantalla "97a".

Es para un cifrado que estoy haciendo. Que cambia caracteres a int o char según le convenga. Los char los pasa a binario, y los int cambian varios bits de char.
El 1 cambiaría el primer bit empezando por la derecha del binario. El 2 cambiaría el primero y el segundo. El 3 los 3 bits de la derecha, el 97 cambiaría los 8 bits del char 12 veces más 1 vez el de la derecha. (Por cada vuelta del for, hace cambios distintos) el 5 cambiaria los 5 bits de la derecha, y como en el siguiente está el char a modificar, se queda así el número.
Se pasaría a buscar el siguiente char del array para hacer el mismo proceso. Se pasan a base 64 todos los char resultantes se toma el binario de cada char modificado se les aplican diversos operadores binarios y se obtiene una clave. Esa clave se mezcla con otra generada por un numero aleatorio de una serie pseudoalatoria que depende del numero de bits cambiados y se le aplica al texto a cifrar que ahora está en base64.

Para descifrar el contenido necesitas poder calcular todos los elementos de la serie pseudoaleatoria y comprobarlos uno por uno descifrando el texto para dar con el original.
Segun la seguridad del cifrado se aumenta o disminulle el numero de elementos de la serie.
Solo el que cifra tiene la clave.  Para descifrar usas la clave o descifras probando elementos de la serie.


Pd: busco una manera de hacer las pruebas sin tener andar escribiendo por consola. Directamente desde el código.
#2464
Como puedo implementar en la funcion una distincion para saber si en la llamada a la funcion en main he puesto el int 97 o el char 'a' para que la funcion me saque por pantalla el numero 97 o la letra a?

Tal y como lo tengo, le puse un static_cast para sacar la letra a.
Pero quiero que si se busca el numero 97, me salga por pantalla el numero 97 no la letra a.
Como hago esta distincion para saber si en la llamada se está buscando la letra a o el numero 97?

Tal y como está ahora, si busco el numero 97 me dirá que ha encontrado la letra a.
Cuando yo lo que quiero es buscar si el numero 97 está en el array. Y si le quito el cast pues tendré el mismo problema al reves, buscaré la letra a, y me dirá que encontró el numero 97.

Código (cpp) [Seleccionar]
#include <iostream>
#include <array>
#include <algorithm>

using namespace std;
using MiArray = std::array<int, 10>;

MiArray primerArray = {0,1,2,3,4,5,'a',6,7,8};

void BuscarEnElArray(MiArray miArray, auto CosaAbuscar);

int main()
{
  BuscarEnElArray(primerArray, 'a');
  cin.get();

return 0;
}


void BuscarEnElArray(MiArray miArray, auto CosaAbuscar)
{
  MiArray::iterator found = find(miArray.begin(), miArray.end(), CosaAbuscar);
  if ( found != miArray.end() )
  {
       cout << "Encontrado: " << static_cast<char>(*found) <<endl;
  }
}


Me gustaría que fuese con un solo array para no tener que crear un array para cada tipo de dato distinto.
#2465
Puedes publicar todo el código?
Estás usando variables como ++files_in_directory;
Qué no sé exactamente lo que hace.

Qué es la basura? Direcciones de memoria? Espacios? El caracter null terminator \o?
#2466
Muy interesante todo! Muchos sacrificios en pos del avance.  :-\
#2467
Un destornillador para no cerrar completamente el nucleo. Oks.
#2468
Muchísimas gracias de nuevo. Lo hago más que nada para aprender cosas nuevas. Si no, definiria las variables aparte y guardaría los resultados de static_cast en otra variable distinta para hacer la comparación en el if más legible. Solo quería conocer alternativas por si había una más fancy, ya que hago todos los programas usando lo más simple de C++ , a pesar de conocer otras características avanzadas no las uso nunca para nada, solo cuando me obligan las librerías externas.
Por ejemplo las funciones las hago todas void o bool, nunca uso punteros explicitamente si no es para estructuras, etc.

Al final me queda el código más largo pero también más fácil de entender, y como no hago cosas complicadas ni muy grandes, no necesito una eficiencia exigente.
Me gustaría mejorar mis hábitos pero libros a cerca de eso no tengo.
Siempre hago programas a base de funciones, variables, bucles y control de flujo.
Lo máximo que uso es clases para no escribir mucho código, pero como el programa sea pequeño o de tamaño medio lo hago todo a base de bucles while y condicionales xD

No sé si me podrías dar algún consejo a cerca de esto. Se para que se usan las característocas pero no me encuentro con problemas que me fuerzen a usarlas como única opción. Por eso ando usando enum class xD Para que no se me olviden las cosas por no usarlas.
#2469
Nivel Web / Re: Vulnerabilidad Wordpress??
8 Junio 2019, 19:18 PM
https://www.collectiveray.com/wordpress/wordpress-tutorials/the-essential-checklist-to-prevent-your-wordpress-website-from-getting-hacked.html

Curiosamente este artículo para protegerte de da bastante pistas de como se realizan los ataques y alguna forma común de encontrar vulnerabilidades xD
#2470
Estos anuncios que comentaba me han parecido los típicos que te dan un curso de formación a cambio de pagarlo sin ninguna garantía de trabajar para la empresa xD
Pero no lo puedo confirmar por razones obvias jajaja.

Google se gasta una millonada en una empresa de analisas de ese tipo. No me estraña la verdad. Con la burrada de información que tiene, que no tengan recursos para sacarle provecho... Yo me tiraría de los pelos día y noche e invertiría todo en empresas expertas en el analisis de información para mejorar todos los productos.