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

#2451
El grafeno es carbono puro, lo mismo que las minas de los lápices...
Lo que lo convierte en 'grafeno', es la misma característica que convierte el carbono en diamante, la cristalización... lograda de forma muy determinada.

De forma casera, lo más que se puede lograr es cenizas, es decir quemado, algunos átomos ya son grafeno, pero en medio de tanta impureza... algo muy parecido es el 'carbón activo'... (cristalográficamente hablando).

Falta ver cuando saldrá del laboratório, a la fabricación en serie.
#2452
Cita de: PEPASA en 25 Mayo 2018, 05:38 AM
Hola tengo un problema. Se que no se debe hacer pero mande mal un email con información errada, aunque no importa al destinatario pero si a mi jefe, quiero cambiar el contenido pero al hacerlo no puedo guardar los cambios
Si es cierto como dices, que la info está errada... simplemente se genera otro email con la info correcta y se señala que sustituye al previo que contenía errores... y listo.

Si eso no te satisface, entonces lo que te preocupa es algo distinto de 'información errada', y como dice engel, ya no es ético, ni probablemente legal.
#2453
Desde que existe la Ciencia Ficción, ya se previó que un día los robots (y por extensión la Intelgiencia artifical que opera dentro de ellos), suplantarían al ser humano de sus tareas peligrosas, tediosas, etc... y poir extensión que la vida de las personas sería una especie de "período vacacional permanente"...

Pero al final, un robot, cumple un servicio... ese servicio debe ser atendido ok, pero debe ser necesitado, demandado... si los millones de personas que pueblan el planeta, demandan cosas que no pueden pagar, que servicios dicen que van a atender los robots????...

Una ecuación de compone de dos partes: Parte izquierda,  "=",  y parte derecha.
Pon a los robots en la parte derecha, pero si a la izquierda no aparecen las personas, si queda vacío, no hay ecuación que valga. ¿Y quién va a fabricar robots si no va a tener mercado que los pague?. Entiendo que al comienzo los multimillonarios serán quienes los paguen, luego los milonarios, pero como se acabe ahí la demanda, se acaba ahí el desarrollo de los robots... una vez cada millonario ya tenga su docena de robots...

Además la inteligencia artificial, está viciada... sigue sin ser autónoma, en realidad es una pseudo-inteligencia artificial...
Cualquier comportamiento complejo puede asemejar inteligencia, aunque luego detrás de ello, no haya nada inteligente.
Resulta gracioso, que 40 adolescentes "hablen" con la inteligencia artificial de una empresa, y luego esa "inteligencia artificial", acabe trollizada, hablando como ellos, diciendo pamplinas de odio y tal... en realidad si fueran inteligentes, sabrían descartar que no es apto para aprender... tragarse todo lo que te entre al estómago, no es aprendizaje, ni 'machine learning', ni leches... y en cualquier caso, no hoy ni dentor de 20 años, ninguna inteligencia artifical superará el cociente intelectual de un niño de 5-6 años.... y la pregunta grave es: tu dejarías que un niño de 5-6 años guiara tu vida, tu empresa, un país????. Por que desde luego un niño de 5-6 años da respuestas más coherentes que una 'inteligencia artificial', y también comete las mismas torpezas, pero a diferencia, un niño acaba entendiendo su error cuando se lo explicas. A la inteligencia artifical, supongo que lo acabarán reseteando a un punto anterior al conflicto con los 40 adolescentes... luego esa 'experiencia' se pierde y no ha aprendido nada de ella.

En fin, como decía al comienzo, desde que apareció la Ciencia ficción, la gente espera demasiado de todo ello, como si nos fuéramos a convertir en Dioses, por tener "esclavos a nuestro mando". Nada nuevo bajo el Sol... el fuego sigue siendo el mayor invento de la Historia.
#2454
Pués para ser de internautas.org, parece un poco ceporro...
En la misma página que señala de la policía, está un enlace de descarga
CitarTanto el CSP como el PKCS#11 específico para el DNI 3.0 podrán obtenerse en la dirección Area de descarga
En dicha página se despliega el S.O. correspondiente (para el tipo el de win7 64bits), y ya habla del "Smart Card Mini-Driver", ofrece más detalles y al final acaba con:
Citar
El certificado con la clave pública para la verificación se puede obtener del enlace Autoridades de certificación de la Oficina Técnica (certificado de Firma de Código) http://www.dnielectronico.es/seccion_integradores/certs.html
Yendo de nuevo a dicho enlace, allí aparecen los certificados que uno pueda requerir:
- Autoridad de Certificación
- Autoridad de Validación del DNIe
- Certificados de Firma de Código

Aunque tengo el DNI 3.0, todavía no he tenido ocasión de usarlo... (será porque me gusta pasear e ir directamente a Hacienda cuando corresponde)... pero en fin, yo no he tardado ni 5 minutos en tener claro, todo lo necesario y donde encontrarlo, con la info que se ofrece en la página del DNI de la web de la policía, dependiente del ministerio del interior (https://www.dnielectronico.es)



En lo que estoy completamente de acuerdo, es el innecesario tecnicismo, o al menos replicar la página  una con tecnicismos, y otra sin ellos... Creo que un tipo que tenga una pastelería y tenga que hacer determinadas gestiones podría hacerlas desde casa, sin necesidad de tener que contratar a nadie para que lo haga por él, si se dejan en paz de tecnicismos innecesarios... 60 millones expedidos... ahora que digan cuántos son usados regularmente... ese es el dato importante ...porque por expedir, se expiden cuando caducan a los 5 años... es un dato sin importancia, es lo mismo que decir que en España están censados 60 millones entre personas físicas y personas jurídicas.
#2455
Pero que esperas?. La corteza terrestre es completamente una 'nata densa flotante'.
No hay lugar seguro en el planeta.
Lo que hay es tregua... que es más o menos decir "he pasado toda mi vida viviendo en x sitio y nunca ha pasado nada"... bien tuviste tregua, no significa que 120 años atrás o 25 adelante no pase nada.

Más del 10% de la población del planeta vive cerca de volcanes, otros tantos sobre fallas tectónicas, un tercio de la población mundial, vive a menos de 20 metros sobre el nivel del mar (los riesgos de maremotos los destruirían), etc, etc, etc...

No hay ningún sitio seguro eternamente, es solo temporal. Incluso aunque encontrares un sitio en todo el planeta del que puedas decir, no tiene volcanes, ni terremotos, ni maremotos, ni deslizamiento de montañas, ni inundaciones de valles... todavía no podrás evitar la caída de asteroides.

Solo nos queda la esperanza de vivir sin que suceda nada... pero es que al final moriremos irremediablemente aunque no pase nada en el planeta. Además el riesgo de morir por cuestiones sociales (asesinatos, atropellos, intoxicaciones alimentarias, enfermedades industriales, etc...), es más elevada que morir por causas planetarias... aunque esto en algunos momentos de la vida del planeta no sea así.
#2456
Ni de churra.
Es una voz natural, retocada...
El retoque más obvio es la velocidad, está acelerada. De hecho resulta cansino...
#2457
De entrada no todas las cadenas acaban en null (carácter ASCII 0), solo las BString.
Hay cadenas de longitud fija, cuyo tamaño va justo delante del puntero al primer carácter. Estas no acaban sino en lo que tenga la propia cadena, si se rellenó de espacios, acabará en espacio, si no con lo que se rellenare.

Es decir es una convención que siguen muchos lenguajes, pero no es universal (no se aplica siempre)

Y en cuanto a los arrays, pasa lo mismoq ue con las cadenas de longitud fija, hay un descriptor (estructura), que delimita el tamaño del array. Que to sepa, ningún lenguaje implementa nada similar a una BString, para un array... la razón es que al contrario que una cadena que solo tiene sentido que tenga caracteres imprimibles (en general), en un array cualquier byte tiene igual probabilidad y sentido que aparezca, luego es imposible fijar un byte concreto para tal propósito, sin matar la útilidad de un array...
Imagina que cargas un fichero desde disco, el array finalizaría cuando encontrara x byte?.... es decir nadie, nunca, para nada, podría usar un determinado byte???... ni siquiera cuando procede de un resultado arimético?. A-B-S-U-R-D-O.
Ahora ya sabes porque no existe.

Para buscar en un array, necesitas saber el límite del array. Si yu ya declaras que el array tiene 'T' elementos, entonces ya sabes que el límite es 'T'.


entero = Funcion BuscarMayor(array X() , entero T)
    entero j, k

    j= x(0)
    bucle para k desde 1 hasta T-1
        si ( x(k) es mayor que j) luego
            j = x(k)
        fin si
    siguiente
    devolver j
fin funcion
#2458
Si te piden tomar los dos primeros... pués sencillamente necesitas dos variables temporales.


x = pilaA.pop
y = pilaA.pop

pilaB.push(x + y)


La multiplicación (cuestión: d) es lo mismo.

x = pilaA.pop
y = pilaA.pop

pilaB.push(x * y)


la cuestión 'e', es un bucle donde mientras queden más de 2 ítems... si solo queda 1, no podrá sumarse, ni restarse a otro que 'no existe'.
La cuestión 'e' me resulta ambigua, no sé si pretende decir que con los valores obtenidos primero se resten y luego se dividan (como señala este pseudocódigo):

Hacer  mientras (pilaA.Items > 1)
   x = pilaA.pop
   y = pilaA.pop

   pilaB.push(x - y)
   pilaB.push(x / y)
Repetir


...ó si pretende decir que con los dos siguientes se reste y con los otros dos siguientes se divida... en este caso se requiere que que para ambas operaciones dentro del bucle deban existir al menos 4, tras el bucle pueden quedan 0,1,2 ó 3 elementos, si quedan 2 ó 3, todavía podrá hacerse una resta más...


Hacer mientras (pilaA.Items > 3)
   x = pilaA.pop
   y = pilaA.pop
   pilaB.push(x - y)

   x = pilaA.pop
   y = pilaA.pop
   pilaB.push(x / y)
Repetir

Si pilaA.Items>1 luego
   x = pilaA.pop
   y = pilaA.pop
   pilaB.push(x - y)
fin si




#2459
Programación C/C++ / Re: serie chingona
24 Mayo 2018, 18:23 PM
Pero tu mismo te has respondido en parte...

Citar
Como se puede observar, los 3 primeros números tienen que sumar, los dos siguientes se empiezan a restar, luego nuevamente se suman 3 números, se restan 2 números y así sucesivamente.
Hay que tener cuenta que el denominador va aumentando de 2 en 2 hasta un cierto punto y que luego se va reduciendo.
En el numerador, los 3 primeros dígitos son el numero " 1 " , luego "2", luego "3", e ira así sucesivamente hasta el limite introducido.

Tienes  4 series... la del numerador, la del denominador, la del signo de operacion, y la de cambio del numerador.
Además se pueden simplificar ya que parece que el cambio de signo coinciden con el cambio del valor del numerador.
1, 1, 1, 2, 2,
+, +, +, -, -,

Una de las series es 3,2, 3,2, 3,2, 3,2... Si simplemente alterna entre dos valores, puedes poner sendos bucles uno tras otro limitados por dichos valores.


   bucle para A desde 1 a 3
       ...
   siguiente

   bucle para B desde 1 a 2
       ...  
   siguiente


Luego el numerador se mantiene con su valor en el bucle A, pero al salir aumenta en uno y se mantiene así en el bucle B, al salir aumenta... Además se ha constatado que el signo sigue 'el ritmo' del numerador, luego en el bucle A suma y en el bucle B resta
y ahora con todo esto actualizamos el código:


entero valor = Pedir numero ¿positivo?

entero numerador = 1
entero acumulador = 0
entero denominador = 1

   bucle para A desde 1 a 3
       acumulador  = acumulador + (numerador / x) //x porque aún no hemos determinado el valor del denominador.
   siguiente
   numerador +=1

   bucle para B desde 1 a 2
       acumulador  = acumulador - (numerador / x)
   siguiente
   numerador +=1



Ahora estudiemos el denominador... dices que empieza en 1 hasta alcanzar un tope. entiendo que el tope será aquel que luego le permita descender nuevamente hasta acabar en 1. Saber ese tope exige conocer cuantos quebrados compondrán la serie.
Entonces empezaremos por calcularlo, después de todo, necesitábamos saber esto aunque no se pidiera...cuando acaba la serie.
Veamos... el denominador aumenta 2 cada vez, empieza en 1 debe acabar en 1, en tanto que el numerador se repite 3 veces y luego dos antes de cambiar, es decir
El numerador necesita 5 quebrados para aumentar en 2 su valor. Luego podemos sumar 5 quebrados por cada 2 valores que se resten al tota...
numquebrados = ((Total -1) /2) * 5
Ahora bien, esa división de 2, implica que si total-1 no es par, dará decimales... miremos dos casos de ejemplo uno par y otro impar para ver como se comporta:
v = 7
v= 8
con v = 7 (mirando sólo el numerador) 111,22,,333,44,,555,66 = 15 quebrados
con v = 8 (mirando sólo el numerador) 111,22,,333,44,,555,66,,777 = 18 quebrados.
Es decir, la conclusión es clara, tal como se preveía... si v es impar (o v-1 es par), la fórmula se cumple (7-1)= 6; 6/2= 3; 3*5 = 15 justo lo que nos da...
en cambio si v= par, con la fórmula nos da: 8-1= 7; 7/2= 3'5; 3'5*5 = 17'5
Cono resulta exactamente, consideremos no restarle 1, para que sea para y la división sea entera: 8/2= 4; 4*5= 20, luego excede en 2... pues ya esta, cuando sea par seguimos esta otra formula:
quebrados = (((v/2) * 5) -2)

Todavía podría reqerir un ajuste a casua de denominador, pero éste requiere saber de antemano el número teórico de quebrados, luego primero calculamos el número teórico, y luego se actualizaría. Sin embargo debido a una ambigüedad, sin aclarar, no se lleva a cabo tal ajuste...

entero quebrados
   si ((v and 1) = 0 ) luego  // 'plis': v and 1, no: v modulo 2
       quebrados = (((v/2) * 5) -2)
   sino
       quebrados = (((v-1) /2) * 5)
   fin si


Una vez conocido la cantidad de quebrados, ahora ya podremos conocer el valor máximo del denominador:, pués llegará justo a la mitad de los quebrados.
demoninadorMax = (1 + (((quebrados-2)/2) *2)) ... lo abreviaremos a dMax...
+1, porque el denominador comienza en 1, quebrados -2, porque los dos quebrados de los extremos ya se consideran, entre 2, porque la serie crece, y luego decrece y por 2 porque el siguiente denomindador el el previo aumentado en 2.

Veamos si resulta acertado, para los valores ya conocidos (6, 7 y 8)
dMax(x) viene a decir valor máximo del denominador cuando el valor introducido sea x.
dMax(6) = (1 + (((12-2)/2*2)) = 11 (coincide con lo que pusiste)
dMax(7) = (1 + (((15-2)/2)*2) = 14
dMax(8) = (1 + (((18-2)/2)*2) = 17
Antes de comprobar si los últimos coinciden, queda claro que se puede, simplificar ya que /2*2 se anulan mutuamente. dividir algo entre 2 para luego inmediatamente multiplicalro por dos, es lo mismo que no hacer nada. Luego simplificado quedaría:
dMax = (1 + quebrados-2) , y como ahora son sumas, también se pueden simplificar...
dMax = (quebrados -1)
A hora la comprobación para v=7 y v=8 (con v=6, es 11, como ya colocaste en el enunciado).
La comprobación la hacemos colocando los numeradores y debajo la línea resultante denominadores (se antecede con 0, para que todos tengan dos cifras y visualmente coincidan las líneas).
para v = 7;  01 01 01 , 02 02 ,,, 03 03 03 , 04 04 ,,, 05 05 05 , 06 06 (15 quebrados)
denominaD; 01 03 05 , 07 09 ,,, 11 13 15 , 13 11 ,,, 09 07 05 , 03 01

para v = 8;  01 01 01 , 02 02 ,,, 03 03 03 , 04 04 ,,, 05 05 05 , 06 06 ,,, 07 07 07 (18 quebrados)
denominaD; 01 03 05 , 07 09 ,,, 11 13 15 , 17 17 ,,, 15 13 11 , 09 07 ,,, 05 03 01

Vemos que en realidad, a causa de valores pares o impares no se ajusta con la formulación... realmente no es complicado ajustarla, pero como decía más arriba hay una ambigüedad en tu especificación, luego no lo toco y resumo que como este resultado ofrece básicamente la misma cantidad de quebrados que los que nos daban pero sujeto también al condicionante de si v es par o impar, podemos simplificar que:
Si v = par; dMax = quebrados  (el máximo se repite 2 veces);
y Si v=impar; dMax= (quebrados-1) (no se repite) que es exactamente la misma conclusión a la que llegamos.

Entonces volvemos al código previo para completarlo:

entero quebrados, dMax
   si ((v and 1) = 0 ) luego  // v es par
       quebrados = (((v/2) * 5) -2)
       dMax = quebrados       // denominador central se repite.
   sino                               // v es impar
       quebrados = (((v-1) /2) * 5)
       dMax = (quebrados -1)  // denominador central no se repite.
   fin si


Y finalmente si montamos todo el código junto, con la lógica que une todas las partes...

entero valor = Pedir numero ¿positivo?
entero resultado

resultado = CalcularCustomSerie(valor)


entero = funcion CalcularCustomSerie(entero valor)
   entero numerador = 1
   entero acumulador = 0
   entero denominador = 1
   entero inc = 2
   entero quebrados, dMax, q //q lleva la cuenta de los quebrados.
   buleano vPar


   // calcular número de quebrados y valor máximo del denominador.
   vPar = ((valor and 1) = 0)      // 'plis': v and 1, no: v modulo 2    
   si (vPar = TRUE ) luego  
       quebrados = (((valor / 2) * 5) -2)
       dMax = quebrados            // denominador central se repite.
   sino // vPar = FALSE
       quebrados = (((valor -1) / 2) * 5)
       dMax = (quebrados -1)      // denominador central no se repite.
   fin si

   Hacer
       bucle para A desde 1 a 3
           acumulador  = acumulador + (numerador / denominador)
           q +=1
           si  (q = quebrados)  devolver acumulador
           
           si (q = dMax) luego  
               si (vPar = TRUE) luego  // denominador, se repite, no se incrementa esta vez.
                   inc = -inc   // pero si se activa que el incremento sea negativo en lo sucesivo (decremento).
               sino
                   inc = -inc                      
                   denominador += inc          
               fin si                
           sino
               denominador += inc
           fin si
       siguiente
       numerador +=1

       bucle para B desde 1 a 2
           acumulador  = acumulador - (numerador / denominador)
           q +=1
           si  (q = quebrados)  devolver acumulador
         
           si (q = dMax) luego  
               si (vPar = TRUE) luego  // denominador, se repite, no se incrementa esta vez.
                   inc = -inc   // pero si se activa que el incremento sea negativo en lo sucesivo (decremento).
               sino
                   inc = -inc                      
                   denominador += inc          
               fin si                
           sino
               denominador += inc
           fin si
       siguiente
       numerador +=1

   Repetir //mientras (q < quebrados) // este bucle es indefinido, hay salida desde cada uno de los previos bucles.

   //devolver acumulador
Fin funcion

El pseudocódigo se puede optimizar, pero ya queda a tu esfuerzo... así funciona correctamente, si la ambigüedad que se plantea a continuación sale favorable a lo que he tenido que asumir como correcto...

Y ahora toca hablar de la ambigüedad...
Hay un dato ambiguo (que has dejado al aire y que no queda claro). Si los denominadores, deben ser duplicados o no, es decir el quebrado central puede ser central para ambas partes?, Si el número de quebrados debe ser siempre par, el denominador central se repetirá dos veces, pero cuando el número de quebrados sea impar, se repetirá solo 1 (ó 3 veces...) yo asumo que solo 1, pero es arriesgado, toda vez que en la serie que tú mismo pones, al final incumples tu propia regla de 3,2 ,, 3,2 ,, 3,2, pués los dos numeradores finales se repiten: 2,2 (44,55; de 4/7, 4/5, 5/3, 5/1)...
Dicho de otro modo, con tus propias reglas, la serie que pones debería ser:
S = 1/1 + 1/3 + 1/5  - 2/7 - 2/9  + 3/11 + 3/13 + 3/11 - 4/9 - 4/7 + 5/5 + 5/3 + 5/1

Separando la serie en los numeradores y denominadores (visualmente deja más claro ver la relación entre ellos):
numeradores: 01 01 01 , 02 02 ,,, 03 03 03 , 04 04 ,,, 05 05 05
denominado.: 01 03 05 , 07 09 ,,, 11 13 11 , 09 07 ,,, 05 03 01

Dada tal ambigüedad, puede ser preciso reajustar, el pseudocódigo... y eso ya lo dejo a tu esfuerzo, toda vez que ya te lo he dejado totalmente masticado y digerido. Solo te falta ensamblar las piezas... con alguna corrección menor si procede.



Nota que los bucles internos solo cambian en dos sencillas cosas: la cuenta del bucle  y el signo, ahí te lo dejo para que pienses...
#2460
Si obtienes varias respuestas, quédate con la que arroje el valor menor.

De todos modos si expones lo que llevas hecho, quedará más claro...