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 - Serapis

#1721
Programación C/C++ / Re: funcion coseno
22 Abril 2019, 15:38 PM
Cierto, un lapsus mental... Gracias CalgaryCorpus, lo corrijo

Ana, tu comentario precedente ya lo esgrimiste anteriormente a una respuesta previa que te dieron, pero ahora no procede.
#1722
Te ubicas en el nodo final y recorres la lista hacia atrás. Acaba cuando llegas a la raíz (o un null, si no usas raíz).


funcion RecorrerHaciaAtras
    actual = lista.ultimonodo

    hacer mientras actual <> raiz  // nulo
        mostrar actual.dato
        actual = actual.anterior
    repetir
fin funcion
#1723
.NET (C#, VB.NET, ASP) / Re: substraer color
22 Abril 2019, 00:10 AM
Qé tal si cambias tu código:
CitarPrivate Function SubstractColor(ByVal HWND As IntPtr, Color As Integer) As Integer

       SetWindowLong(HWND, GWL_EXSTYLE, GetWindowLong(HWND, GWL_EXSTYLE) Or WS_EX_LAYERED)
       SetLayeredWindowAttributes(HWND, Color, 0, &H1)
       Return Nothing
   End Function

...por algo como lo siguiente:
Código (vbnet) [Seleccionar]
Private sub SubstractColor(ByVal HWND As IntPtr, Color As Integer, optional byval GradoTr as byte=128)
   SetWindowLong(HWND, GWL_EXSTYLE, GetWindowLong(HWND, GWL_EXSTYLE) Or WS_EX_LAYERED)
   SetLayeredWindowAttributes(HWND, Color, GradoTr , &H1)
End Function


Esto es, le estás diciendo que el nivel de transparencia sea total (valor 0), de momento prueba a invocarlo a mitad de transparencia entre el contenido y lo que haya debajo, es decir cada uno pone el 50% de la fuerza de su color. Puedes variar el valor entre 0 (transparente) y 255 (opaco).

p.d.: Prueba con valores de flags, 2 y 3 (no solo 1), de la api SetLayeredWindowAttributes, pués afectan a como se aplica a la imagen origen y la imagen subyacente...
#1724
Si se pasa por referencia, se pasa la dirección de la variable, luego en ambos casos es la misma variable, es decir distintos nombres apuntan a la misma dirección de memoria, (haya lo que haya alli, da igual  si es un string, una variable simple, un array...), si se pasa por valor, quiere decir que se hace una copia y por tanto no se recibe la dirección original, si no la de una variable temporal (normalmente localizada en la pila)...

...sigue leyendo el libro, seguramente te lo aclarará más adelante, no me creo que un libro no aclare cosas tan simples, más bien lo hará cuando se considere el momento oportuno. Tu ahora no te compliques con eso, de momento te baste saberlo...
#1725
Yo es que tengo alergia a Chrome... entonces cualquier cosa basado en él, ya ni me molesto en interesarme. Ni siquierda la ***** que saque Mocosoft, de ello me parecerá adecuada para digerirlo.
#1726
- En primer lugar, desactiva la tarjeta, ve al cajero y sigue las instrucciones.
ten en cuenta que los cargos con tarjeta no son cursados definitivamente hasta pasado un plazo, luego aunque la hayan usado el dinero aún no está en destino. El plazo es variable, aunque el comprador lo vea como inmediato se asume que lo es basado en la confianza en el sistema, pero no es inmediato. Yo he parado transacciones de contratos deshonestos de ese modo (básicamente un seguro me cobraba "pequeñas cuantías" por cosas que no tenía contratadas).

- Si tienes acceso a los lugares desde los que se hizo los pagos (por ejemplo una cuenta en Amazon), anula la compra, si no es así (no lo hiciernon exactamente desde tu cuenta si no desde la de otro), ya se darán por enterados cuando no reciban el pago.
Lastimosamente las propias tarjetas, no tiene una opción de ir al banco o cajero ver las transacciones en curso y anularlo antes de que se haga efectivo y antes (of course), de que el producto sea enviado (si no habría quen comprara para sí desde otra cuenta y luego diría que han usado su tarjeta anularía la compara, pero recibiría el envío en algún domicilio).

- Una tercera acción plausible (no siempre), es contactar con el propio site de venta y alegar que han usado tu tarjeta de crédito para un pago en su sistema y que has anulado la tarjeta de crédito (lo cual verán reflejado como auténtico cuando en fecto no se termine de tramitar el pago) y que puedes requerir los datos de contacto de la persona... seguramente requerirán que presentes la denuncia policial o  incluso así, puede que aleguen que de ser el caso, enviarán los datos solo a la policía, no problemo, tu lo que tratas de hacer es alertar sobre un usuario que está haciendo cosas ilegales (incluso podría ser otra víctima a la que han tomado su cuenta solo con la finalidad de apantallarse con él, para tramitar la compra, el ladrón auténtico quizás ni tuviere cuenta, en cualquier caso al hacer una compra suele haber una dirección de envío, que esa sí debe ser física y real, algo todavía más retorcido es que la dirección no exista o exista pero nunca deba llegar a él, eso declara que el ladrón sería un propio operario del site, en cuyo caso 'la compra' una vez entre en el almacén de clasificación de reparto donde el ladronzuelo puede interceptarlo y por tanto no saldrá nunca a ese destino final).
Digo que no siempre es plausible porque si el site es por ejemplo una web China, a ver quien C0Ñ0, es capaz siquiera de registrarse y menos de escribir un mensaje coherente en chino...

- Y en último lugar (lo que no quiere decir prolongado en el tiempo), es proceder con la denuncia.
En general y al margen de la actuación policial, si se demuestra el robo, las tarjetas de credito tienen un seguro que cubre parte o todo del dinero robado... la concrección del caso es particular al país, y tarjeta de crédito con la que se opera.

- En lo sucesivo, verás que es mejor interponer algo entre tu tarjeta de crédito y el site de compra, por ejemplo Paypal... ya que eso exige que si alguien hace un pago por paypal esté acreditada, identificada la persona, su cuenta o tarjeta bancaria, etc... con lo cual es bastante más complicado... alguien podría acceder a tu cuenta paypal si te copian los datos, pero todavía tendrás opciones a anularlo, rechazarlo y dispondrás d emás opciones para hacer reclamaciones, caso de ser un nuevo sistema, buscarán soluciones que adoptarían y lo harán  más seguro.
Aún así para pagos, yo no me fio de los móviles (para hacer pagos poniendo datos de tarjetas de crédito), es tecnología muy cerrada y la mayoría de origen chino, país de mafiosos donde los haya. Mejor para esos casos usar el ordenador, transferencias desde el cajero, etc... quizás a al vuelta de algunos años, sea más seguro el uso del móvil para determinados tipos de pagos...
#1727
Scripting / Re: Esteganografía EOF [BATCH]
21 Abril 2019, 10:43 AM
Es una forma absurda de perder el tiempo.

Un reto tiene sentido, solo si con ello consigues algo que tenga utilidad práctica, aunque solo sea aprender. Ahí no hay aprendizaje solo ejercicio rutinario...

Pero, hacer retos donde el reto por si mismo es complicar las cosas solo porque sí (como decir: "ir desde el punto A al punto B pisando solo las baldosas 'pares' , vamos 1 de cada dos"), no ofrece absolutamente nada, yo ni lo llamaría reto, si no castigo, si además es autoimpuesto, entonces lo llamaría autofustigación, autoflagelación.

Tampoco tengo claro tu intencionalidad, a juicio mío suena a: "ofuscar algún archivo que actuará como un virus en algún momento, pero/para que pase desapercibido..."
#1728
Citar¿En qué momento se  le pasa el arreglo s?
's' es el nombre interno del array en la función 'getline', como 'getline' es invocada desde la función 'main', resulta que el array 's' es en realidad el array 'line', así el punto exacto donde se le pasa dicho array es en:
       while ((len = getline(line, MAXLINE)) > 0)

Citar¿El arreglo s que está dentro de getline tiene una extensión de 1000 caracteres al igual que line?
Como acabo de señalarte, es el mismo array, luego es lo mismo...
Que una función 'x' tenga parámetros llamados así 'a', 'b', 'c':
   Funcion x(a, b, c)
y luego tu lo invoques así:
   llamada a x("hola", s, (k+23) )
no altera nada, cada parámetro si sigue siendo del mismo tipo, en otra parte tendrá otro nombre, al final o se pasa una dirección de memoria que contiene el valor o un valor inmediato... es decir en otra parte puede llamarse de otra manera...

Un ejemplo llano: Hay 3 estudiantes, Luis, Carlos y Antonio, y tienen 20, 25 y 30 años respectivamente, Luis estudia, Carlos trabaja y Antonio se toca los "0,0"... entonces en otra parte podrían llamarlos de la siguiente forma:
--- Carlos venga usted para acá"... como se llama Carlos, se sabe quien es.
--- El que trabaja, que venga para acá... como 'trabaja' es un atributo de Carlos (digamos que s elocaliza en memoria, por una dirección alternativa...
--- El que tiene 25 años, que venga para acá....
incluso aún s ele podría decir:
--- El segundo de la fila, que venga para acá (símil que reflejaría estar dentro de un array).

en todos casos se está llamando a 'Carlos' pero con diferentes 'nombres', no importa en unos se le llama por su nombre, en otros por su valor o una referencia, incluso una referencia a una referencia, etc...

Entonces en la funcion 'main', 'line' es el nombre de un array (pongamos que es Carlos), pero cuando se invoca getline(carlos), luego la función 'getiline' lo llama 's' que podríamos decir que ahora en vez de llamarlo 'Carlos' lo llama 'el que trabaja'...
    int getline(char elquetrabaja[], int lim)
    int getline(char elquetiene25años[], int lim)
    int getline(char elsegundodelafila[], int lim)
como tu le pasaste 'Carlos' pués ese es el que recibe, luego 's' y 'getline' son la misma cosa, el mismo contenido.
Es decir, no estás obligado a darle el nombre a una variable que tu has creado y vas a usar con el nombre que tiene el parámetro en una función... imagina que ese array se tuviera que pasar a 3 funciones diferentes, podrían tener diferentes nombre... luego si fuera una exigencia tener el mismo nombre impediría que pudiera ser usado en más de una función.
El nombre de un parámetro solo tiene sentido fuera para saber que se espera, para diferenciar con claridad que se pretende recibir, una ayuda al que usa la función, internamente poco importa el nombre, de hecho en funciones simples sin complejidad alguna y que quedan ocultas (nunca son llamadas desde fuera), suele ponerse nombres sin importancia como 's'...

Un ejemplo que clarifica que se pide en cada parámetro y que una vez dentro poco importa, los nombres usados internamente... al caos reg, se supone una clase que no es accesible desde fuera, y tiene nombres que no precisan aclarar mucho o nada, o si se prefiere podría ser una estructura y luego se invocaría un método 'save' usando como parámetro la estructura 'reg'...

funcion GuardarRegistro( char nombre[], char apellido1[], char apellido2[] )
   // reg se supone una clase o si prefieres una estructura y luego un método: save(reg)
    reg.x=nombre;
    reg.y=apellido1;
    reg.z=apelido2;
    reg.save;   //save(reg);
fin funcion


OJO... al decir que dos parámetros son el mismo, no es estrictamente cierto, solo mientras se pase por referencia, a veces no se quiere que se modifiique el original, entonces se pasa una 'copia' así cualquier modificación que se haga al que se pasa, deja intacto al original, la copia suple el mismo efecto (para lo que se necesite que se deba hacer con los datos recibidos) que usando el original, pero dejando el original intacto.

Espero que este pequeño sermón aclare tus dudas.

Si tienes además algún IDE instalado, es bueno que ejecutes el programa "paso a paso", porque así y ahí es donde se descubre todo el potencial que ofrece un IDE, al saltar de una línea a la siguiente, e ir viendo la ejecución de adónde salta, consutar que valor contiene una variable etc... es decir ejecutando en modo DEBUG, se aprende mucho más y más rápido que solo leyendo y por ejemplo escibiendo en un 'procesador de texto' como algunos ingenuos creen que es mejor viendo pelis (nunca es mejor y menos para el que empieza, para el que todo son tinieblas... hasta que se despejen las nubes).

#1729
Programación C/C++ / Re: funcion coseno
21 Abril 2019, 09:46 AM
Deberías aprender a pasar llamadas recursivas a iterativas y viceversa (el viceversa suele ser la mayoría de las veces más sencillo).

Así sería calcular el factorial en un simple bucle (es decir pasado a iterativo):


j = 10   // factorial entre 1 y 10
n = 1
bucle para k desde 2 a j  // si 'j' fuere 0, ó 1 todavía arrojará el valor correcto con n = 1
   n =  (n * k)
fin bucle


Ahora bien, dado que estás usando el factorial dentro de un bucle, vas a calcular innumerables veces el factorial de un número, incluso muchas veces podría ser el mismo valor, más aún, si luego la función que usa dicho bucle es llamada múltiples veces, resultará que estás ejecutando casi todo el tiempo el factorial de un número en vez de hacer otras cosas...

...en tales situaciones es mejor pre-calcular una úncia vez el factorial para cada número hasta el máximo, y guardarlo en un array, así luego basta tomar el iésimo valor del array.

Si la función se llamara una única vez, bastaría precalcularlo al entrar en la propia función, pero si la función fuere invocada múltiples veces entonces es mejor precalcularla al inicializar el componente de código del que forma parte.

Nótese que con apenas el factorial de 16 ya arroja: 20.922.789.888.000, es decir algo más de 2^44... así que el array tendrá un tamaño relativamente pequeño. es decir consumirá muy poca memoria, tan poca que incluso los lenguajes podrían tenerlo como constantes (para 32 bits, basta llegar hasta el factorial de 12).

array de int factoriales()  // en realidad dimensionar el array al número de indices que deba contener como máximo...
funcion PrecalcularFactorial(int x)
   int k, n  

   n = 1
   factoriales(0) = n  
   factoriales(1) = n  
   bucle para k desde 2 a x
       n = (n * k)
       factoriales(k) = n  
   fin bucle
fin funcion


Ahora cuando tengas que usarlo...en vez de ser una llamada a una función o una ejecución en un bucle, será una dirección de memoria que ya contiene el valor...

    ...
    cos += pow(-1,exponente) * pow(x,i)/factoriales(i);
   ...

...con lo cual el tiempo invertido será únicamente el de acceso al array, que, comparado con la pérdida de tiempo de estar contínuamente recalculando el factorial, el ahorro en tiempo será notorio...
#1730
No es suficiente.
Quiero poder desinstalar por completo Chrome. Si no lo he elegido ni lo uso como navegador, tampoco tiene sentido que ocupe espacio en mi móvil, porque a Google le salga de los C0J0N3X.