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

#3321
Francamente, quien no cree en la vida más allá de esta vida, no pinta demasiado tratando con estos temas. Es como alguien que no quiere salir de casa pero sin embargo, recorre el camino con todos.

A pesar de todo y de todos, la muerte es sólo un portal a otra parte. Sin morir aquí, no podemos nacer en otra parte. Y lo que es de aquí, se queda aquí... más el conocimiento, ese pertenece al alma, luego la acompaña en su camino. El cuerpo es como los zapatos, sirven para hacer este camino, pero no es de utilidad para el isguiente, la forma, el volumen aquí son necesarios, en el siguiente camino, no.

No solo te llevas tus conocimientos (aunque la mayoría inútiles), también tus sensaciones y sentimientos, por eso nunca hace mal quien construye todas las partes sin descuidar ninguna.

...y quien no crea, tampoco tiene motivos para obrar en su contra o en contra de los demás, al menos para ser socialmente razonable uno debe intentar seguir un camino correcto (más que recto)...
#3322
El modo más fácil y rápido de invertir una cadena de texto, es acceder a sus bytes individuales y operar sobre ellos... Toma rel primero e intercambialro por el último, luego el segundo por el penúltimo, etc... hasta que se encuentren en el centro.

Ahora bien, cuando tienes un número, cada byte no retiene un carácter del número, si no que es un 'trozo' de la base numérica en sí misma (decimal al caso), por lo que se hace preciso convertirlo a cadena de texto (una base numérica de base 256, donde los números tienen una posición concreta dentro de dicha base), sólo entonces la inversión puede aplicarse adecuadamente operando con los bytes...

Más o menos como los tienes (y digo más o menos, porque al tiempo que inviertes, vas generando el número, es más óptimo, convertirlo entero a cadena, luego invertirlo y luego convertirlo a número (si es preciso que deba devolverse un número)),  sin embargo, en tu código hay dos errores de lógica...

Cita de: DSREY en 22 Junio 2017, 05:59 AM
...
       Do
           WriteLine("INGRESE UN NUMERO")
           num = ReadLine()
           Do
               y = y * 10 + (num Mod 10)
               num = num \ 10
           Loop While num > 0
           WriteLine(y)
           WriteLine()
           y = 0

       Loop While y = 0

...
Marcado en negrita...
- Tu bucle interno, debería tener el 'while' tras el 'do', ya que si la entrada es 0, todavía entrará en el bucle una vez, siendo innecesario (sin entrar a valorar el código interno).
- Tu bucle externo, es un bucle sin fin... porque le dices (marcado en negrita):
Y = 0 y luego: Repetir mientras Y=0, como acabas de asignarle el valor 0, jamás saldrá del bucle, porque jamás dejará de cumplir esa condición.
#3323
Cuando usas una pila programada por otro, sólo tienes disponible (habitualmente) los métodos Push y Pop... Entonces el unico modo de eliminar un elemento es llegar hasta él.

Operando con los datos que dices tener:
a.Push(1)
a.Push(2)
a.Push(3)
a.Push(4)
a.Push(5)

Ahora necesitas eliminar el elemento 3, que además tiene ese mismo valor (sin consideraciones de elemento 0, por simpliificar)...

1º - Se pasan a otra pila los que estén encima:
b.push (a.pop) //5
b.Push(a-Pop) //4


2º - Se extrae el elemento que queríamos (hemos excavado hasta llegar a él, ahora está en la superficie, el pico ahora golpea en él)
a.Pop //3

3º Meter de nuevo los que estaban encima:
a.Push(b.Pop)  //4
a.Push(b.pop) //5


Ahora bien, cuando la pila la diseña uno mismo, ya provee un método interno para agilizar esto... La solución depende en realidad de la estructura usada para realizar la pila...
Supongamos que fuera un array que es algo simple.

(privada) Funcion Delete(entero index)
   Recorrer desde index hasta ItemsEnPila-1
       Array(index) = Array(index +1)
   Siguiente
   ItemsEnPila -=1
    // Ojo, no se verifica en este ejemplo si index está en el rango... queda a tu esfuerzo.
Fin Funcion

Como ves todo lo que hemos hecho es bajar una posición todos los que tiene encima. ni siquera necesitamos borrar el último elemento, toda vez que Pop, sacará el último disponible y un Push sobrescribiría ese último valor.

Fijate que en una pila incluso eliminar x elemento del final o vacíar la pila, se limita a ajusta el valor de la propiedad ItemsEnPila, para vaciarla se pone a 0 y listo...
#3324
A estas alturas, a quién le queda dudas que la SGAE, es un nido de ratas...?
#3325
jajajaj... que bueno...

es como si me obligan a declarar los sueños que tuve anoche, una payasada...
#3326
Cita de: engel lex en 19 Junio 2017, 20:35 PM
violencia no se acaba con violencia, radicalismo no se acaba con radicalismo, un incendio no se acaba poniendole más material inflamable...
Disiento de esto.

Cuando se quema algo hasta la extenuación, ya no queda nada por arder... Si dos tribus luchan entre ellos hasta la extinción, cuando una de ellos se extinga se acabó la lucha.
Ahora bien, esa sería la solución 'matemática', humanamente inaceptable.

El problema de los radicales es doble. Están los cabezas vacías que son los 'ejecutores', que es gente con la mente retorcida, la mano que ejecuta y están los cabezas envenenadas, que son los que incendian el alma de esa gente.

El terrorista que al final estalla una bomba, probablemente no sepa gran cosa de la vida, y esté tan harto de vivir que no le importe morir. A estos basta educarlos...
Los que inflaman los corazones esos son los malvados que habría que eliminar, pero no figuran sus nombres en parte alguna. aunque en realidad sabemos que se sientan en sofás muy cómodos en Arabia Saudita (por ejemplo), y que ni pasan hambre ni nada, más bien nadan en petróleo y les interesa crear tensión internacional, porque eso dispara los precios del petróleo (qeu es la auténtica realidad tras todo el asunto, subir precios), y a ellos se la suda que 4 pardillos barriobajeros maten a algunos occidentales y luego mueran o los encarcelen... para manipularlos que mejor que engatusarles con sus creencias, así se ahorran pagar mercenarios, lo hacen gratis y para colmo 'contentos' (no se puede ser más 61L1P0LL45)...

Cuando el petróleo sea completamente eliminado como recurso energético, todo esto será cosa del pasado. Así que mi apuesta más prácitca va por forzar las energías renovables YA, URGENTE, SIN DEMORA.
#3327
La energía es vibración. Todo late, porque todo está compuesto de partículas que en última instancia están sujetas a fuerzas de interacción internas y externas.

Que no podamos medir fuerzas minúsculas obedece a que no puede construirse un aparato más pequeño de aquello que mide, si no se hace con aquello que lo mide, con lo cual cómo diferenciar de si la medición es real, o generada por el propio aparato? (y es ahí donde entra el gato de Schrodinger, en la miniaturización hasta el punto de que lo observado se ve alterado por aquello que lo observa) . Por mirar Marte con un telescopio no vas a alterar Marte, pero si el telescopio es del tamaño del Sol, evidentemente alterará Marte. No es distinto de la gravedad y la distancia que separa dos objetos... la distancia y la masa, señalan la atracción que entre ellos haya. Igualmente cuando lo magnitud de lo que observa es significativamente grande en comparación con lo observado, la influencia se produce.

Incluso en el cero absoluto, dudo que sea absoluto, y alguna vibración debe haber, de otro modo, si no fuera así, sería inalterable (eternamente).

Una báscula podrá pesar muchas cosas, pero jamás podrá pesarse a sí misma. Se parte siempre del hehco  de que la báscula ha sido pesada por otra báscula, o al menos la parte de la báscula que pesa sobre las partes que no se alteran con el peso.... Este mismo problema se tiene con todo, cuando el tamaño no es asequible, puede descartarse cuando ese valor es despreciable, pero no cuando ese valor es tan influyente que altera el propio sistema observado.
#3328
No está mal, pero no acabas de ceñirte a las especificaciones que te han dado.

Por ejemplo, para los cocineros se especifica esto:
LISTADO DE COCINEROS:
NIF/NOMBRE Y APELLIDOS/TELÉFONO DE CONTACTO/NOMBRE DEL RESTAURANTE

Pero luego en el diagrama para los cocineros, no especificas restaurante (dodne trabaja)
Entonces el cocinero debería tener un campo "Foreign Key Cod_Restaurante", en el que el cocinero opera. Ahora mismo si miras un cocinero, no sabes donde trabaja.

Del mismo modo te faltan listas.... más simples una lista es una tabla con un solo campo , por ejemplo te falta una lista de cocineros, de restaurantes, de menús... así yo modificaría tu tabla de "Menus"

TblMenus
________
Primary Key Id_Menu


Y luego tienes otra tabla de detalles de cada menú:

TblMenuDetalles
_______________
Foreign Key Id_Menu
    Nombre
    NumIngredientes
    Ingredientes()
    RacionGr // peso aprox. en gramos por cada ración.
    Precio
    Descuento // opcional  
    InfoNutricional: (Calorías, Proteínas, Grasas, Azúcares) conforme a RacionGr
    _____________
_

Cuando de un dato hay muchos, creas una lista (una tabla de Ids (códigos), que referencian luego a otra tabla con todos los detalles que se precisen.
Así la tabla para buscar es muy rápida y sencilla y una vez encontrado el código, se usa para ir a al tabla de detalles (si se precisa tomar más info que sólo la existencia).

- De igual modo habría que proceder con la tabla cocineros, dividiéndola en dos, en una solo la lista de códigos de cocineros y en otra los detalles de cada cocinero.
- Lo mismo con la tabla restaurantes, una tabla sólo con los códigos y otra con los detalles de cada uno.
- Ídem con los proveedores.
- Como también te piden restaurantes por ciudades:
puedes tener, el campo Ciudad en la tabla tblRestaurantesDestalles.

En cambio las recetas, salvo que un mismo menú tenga diferentes recetas (y esto suceda con muchísimos menús), yo la descartaría. En su caso ese sería un campo en la tabla tblMenuDetalles.
Ingredientes() es un array, dentro de menús que podría referenciarse conforme al campo NumIngredientes, cada Ingrediente puede disponerse como una pareja de campos, para otra tabla:
tblIngredientesMenu
________________
PK Cod_Menu
Producto
Cantidad

Incluso podría ponerse un tercer campo: un FK Cod_Menu, para saber en qué menú aparece este ingrediente en esa cantidad... No obstante quizás sea demasiado detallar si no se ha especificado expresamente, pero la menos si lo siguiente:

Donde producto es Cod_Producto (ó Cod_Ingrediente).
La razón de esto, es que con ello se puede al mismo tiempo llevar la cuenta de existencias y consumo de ingredientes y por tanto facilitar hacer un pedido cuando esté próximo a agotarse...

Por tanto te faltaría también dos tablas:
tblIngredientes
_______________
Pk Cod_Ingrediente


tblIngredientesDetalles
____________________
FK  Cod_Ingrediente
Fk  Cod_Proveedor
    CantidadStock  //Cantidad que queda en el almacén
    CantidadPedido  // cantidad que se suele pedir de cada vez (kg, cajas, palets, camiones).
    CantidadReserva // Cantidad mínima que cuando se alcanza (o menos) dispara un trigger, para hacer el pedido.
    PrecioKg  // precio aprox. porkg. para facilitar hechar cuentas sobre costes al ahcer un pedido. sería un dato a actualizar constantemente con cada nuevo pedido 8probablemente).
    DetallesIngrediente //un string que defina el ingrediente de modo básico.



y bueno, mirándolo así por encima básicamente esa es la idea... pero no lo tienes mal, aunque se puede mejorar en la forma indicada...




#3329
Para casos como el que comnentas, lo más sencillo es asignar un valor numérico que denote que el usuario a cancelado. en tu caso podría ser un valor 0.
Es decir:

Ingrese otro número (0 para finalizar): 56'3

Entonces tu detectas si se entró "0" u otro valor... considera también como 0, un valor no procesable como número, por ejemplo:

Ingrese otro número (0 para finalizar): hola

#3330
Hace ya mucho que no actualizo una BIOS... peor he actualizado muchas y en algunos equipos varias versiones.

En general:
Antes te descargabas desde el fabricante dos cosas: el programa flasheador, propiamente y la copia de la verión que ibas a instalar.
Y los pasos a seguir eran:
1 - Tomabas un diskette (era laforma antigua), y lo formateabas como un diskette del sistema (con el comando Sys, que transfería ciertos ficheros de arranque y así lo dotaba como "bootable"
2 - Luego se copiaban ambos ficheros descargados. Había que asegurarse que todavía sobraba espacio o bien disponer de una segunda disquettera (o acceso a la unidad de disco duro durante esa fase, no todos los BIOS "veían" tu disco duro).
3 - Arrancar desde diskette, lo que a menudo suponía el paso previo de reiniciar y entrar en la BIOs, para configurarlo así (entonces no había un sistema de parada para elegir el dispositivo de arranque, como hoy casi incluyen todos aunque no se suelan usar).
4 - Arrancar el programa flasheador. Este no hace un reconocimiento básico durante ese arranque (realmente los programadores de BIOS, son programadores de segunda clase, por no llamarlos mediocres directamente, pero afortunados de tener la decripción completa del sistema para poder programarlos).
5 - Dentro de las opciones, lo útil era pedirle que antes quieres hacer una copia al diskette/disco duro de la versión del BIOS actual (por si el nuevo no va bien).
6 - Proceder a sobrescribir el BIOS con la nueva versión. Típicamente era un comando del programa flasheador, similar a:  flash.exe /n "a:\fkr760.BID"
venían extensiones peregrinas para los ficheros. algunos más sofisticados tenían un menú que te permitían elegir que quieres actualizar en la BIOS, y muy pocos te dejaban elegir el idioma.
Al menos la mayor parte de las veces si el BIOS no era correcto, te informaba y no lo sobrescribía. O también te informaban si la versión a instalar era menor que la actual, y te pedía confirmación... pero esto no siempre.

En la actualidad, ha mejorado el modelo, pero sigo pensando que son los programadores más retrasados quienes diseñan estos programas, porque básicamente siguen siendo igual de malos.
Descarta actualizar desde la red, es el modo más fácil de que falle. Si descargas copia, mira si en la web viene el hash del mismo para asegurarte que coincide.
aunque no las necesites, o creas no necesitarlo, bájate todas las versiones y guárdalas. nunca sabes si una versión anterior era más estable que una actualización posterior. A veces arreglan un fallo que no se aplicaba a tu caso, pero dejaban otro fallo que si se aplica a tu caso.
No es que sea preciso instalar todas las versiones una tras otra, porque si no falle la actualización, no, la razón para ello, es que cuando veas que corrige el problema que tienes, pares la actualización... aunque no estés en la última versión. Si como digo conviene descargar todas las actualizaciones que haya en la web para tu sistema, porque pasados x años, desaparecen y ya no tienes opciones. eso sí, renómbralas en corto, y refleja perfectamente su versión.

Ahora casi todos los sistemas permiten recuperar la BIOS si falla. Incluso hace 30 años, en algunos sistemas era posible al menos resetearlo al estado original de fábrica, operando sobre algún jumper en la placa base. Para todo ello es imprescindible un manual de la placa base (de esos de 300 páginas, no esos de especificaciones básicas de 30 páginas).

Deja copia de la ROM que vas a instalar, en el disco duro, aparte de en el USB desde el que quieras arrancar (es preferible así). Si la propia BIOS incluye el programa para actualizar la BIOS, simplemente te pedirá que elijas el origen de la ROM, hará un breve chequeo para comprobar que esa ROM, pertenece al equipo y alguna más y hará la copia.

Como sugerencia te indicaría que antes de proceder, pongas los valores por defecto en la BIOS (guarda en papel las opciones que tienes actualmente si tienes dudas de configurarlo luego como lo tienes ahora), ya que dudo mucho que las ROMs sean probadas a fondo, con diferentes opciones en activo en el BIOS. Luego de actualizada, vuelve a configurarlo como lo tenías.
También te recomiendo que si tiene opción de guardar la BIOS actual, lo hagas antes de actualizar.
Si el BIOS presentara muchas opciones de actualización, esto es poder elegir diferentes áreas para actualizar, la que menos interesa es el bloque de datos del usuario.