Cáculo MCD y MCM con Python sin librerías

He necesitado conocer el máximo común divisor y el mínimo común múltiplo de dos números, para ello en vez de utilizar alguna de la múltiples herramientas disponibles para calcularlos, he creado un sencillo script en python, sin recurrir a librerías.

Como recordatorio, las definiciones de MCD y MCM.

El máximo común divisor (MCD) de dos o más números naturales o enteros (no números con decimales) es el número más grande que les divide


El mínimo común múltiplo (MCM) de dos o más números naturales o enteros (no números con decimales) es el número más pequeño que es múltiplo de ambos.

y sin mayor dilación el script:



#!/usr/bin/env python3

# Calculo del máximo común divisor (MCD) y minimo común múltiplo (MCM) de dos números

def calculo_MCD_MCM(a,b):
# La función recibe dos números enteros, se haya el mayor y el menor
 if a > b:
  max = a
  min = b
 else:
  max = b
  min = a

# Buscamos  el MCD partiendo del número menor, en orden descendente, el primero que
# encuentre será el MCD y no necesitamos buscar más.
  for i in range(min,0,-1):
  if min % i == 0 and max % i == 0:
   MCD = i
   break
# ya conocemos el MCD, descubrir el MCM es sencillo, solo necesitamos
# dividir el resultado de multiplicar ambos números entre MCD
 MCM = (min * max)/MCD
# Mostramos los resultados por pantalla
 print(' El Máximo común divisor y el Minimo común múltiplo de',min,'y',max,'\n son respectivamente',
 MCD,MCM,sep=' ')
 
a = int(input(' primer numero para el calculo '))
b = int(input(' segundo numero para el calculo '))
calculo_MCD_MCM(a,b)
  
    
 

20 Puertas lógicas con dos entradas


Las puertas lógicas son una de las herramientas fundamentales, no solo a la hora de diseñar algoritmos, también es conocida su importancia a la hora de diseñar circuitos lógicos, eléctricos, etc.

Como dice el titulo del post, se pueden crear 20 puertas lógicas, de dos entradas, mediante la conexión de las puertas más conocidas, la puerta And ( & ), la puerta Or( | ), y la puerta Xor( ^ ) más el conector Not aplicado a una puerta o un conector.

A continuación mostraremos el código de cada una de ellas, en python3, comenzando por las tres fundamentales, And, Or y Xor, mostrando después de cada una, la salida que ofrece, a esas puertas no usuales las llamaremos Esp.

La puerta Xor, es de uso corriente en la vida cotidiana, " Si es Miércoles o Viernes como pescado", dado que no puede ser Miércoles y Viernes a la vez, esa seria la puerta indicada para resolver la operación booleana.

Como es bien conocido el conector Not, invierte el valor de la entrada o el resultado, si es True lo convierte en False y  viceversa. Para lograr las mismas salidas de las denominadas puertas especiales, se pueden utilizar también otro tipo de conexiones.




boolean = [True, False] print('Puerta Lógica And\n') print('Val I','Val J','Res.','\n',sep='\t',) for i in boolean: for j in boolean: print(i, j, i and j, sep ='\t')
Puerta Lógica And Val I Val J Res. True True True True False False False True False False False False

print('\nPuerta Lógica Or\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i or j, sep ='\t')
Puerta Lógica Or Val I Val J Res. True True True True False True False True True False False False

print('\nPuerta Lógica Xor\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i ^ j, sep ='\t')
Puerta Lógica Xor Val I Val J Res. True True False True False True False True True False False False

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i and (i ^ j), sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True False True False True False True False False False False

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, j and (i ^ j), sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True False True False False False True True False False False

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not i and not j, sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True False True False False False True False False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i or (i and j), sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True True True False True False True False False False False

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, j or (i and j), sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True True True False False False True True False False False

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not (i ^ j), sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True True True False False False True False False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not j, sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True False True False True False True False False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not i, sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True False True False False False True True False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,i or not j, sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True True True False True False True False False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,j or not i, sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True True True False False False True True False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,not (i and j), sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True False True False True False True True False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,(i ^ j) or not(i ^ j), sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True True True False True False True True False False True

print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i and not i, sep ='\t')
Puerta Lógica Esp Val I Val J Res. True True False True False False False True False False False False



El Dilema del prisionero y las mascarillas Quirúrgicas o FP2

El dilema del prisionero, se puede aplicar a numerosos campos, como administración de empresas, psicología, o biología. Por qué no aplicarlo a un tema de actualidad como el uso de mascarillas de un tipo u otro, con el fin de determinar la búsqueda del mejor beneficio propio o el mejor beneficio conjunto, siendo el objetivo miniminizar la transmisión del Coronavirus

Para este supuesto he partido del uso de dos tipos de mascarillas de protección, las quirúrgicas y las Fp2 con válvula.

Las mascarilla quirúrgicas tienen como principal objetivo impedir que el portador transmita virus y bacterias a otras personas, y sirven como una ligera protección propia.

Las mascarilla fp2 con válvula tienen como principal objetivo impedir ser infectado por virus y bacterias, pero permiten que por la válvula, que permite un uso más cómodo para el portador, salgan partículas infecciosas.

En el modelo aplicado del dilema existen  escenarios diferentes en función del tipo de mascara utilizado por ambas personas y del estado de contagio, las dos contagiadas, solo una de ellas, o ambas sanas.

Existen otros factores a tener en cuenta, la distancia entre las personas, y el tiempo que permanecen a esa distancia. No es lo mismo cruzarse a un metro, que estar hablando a la misma distancia durante unos minutos.

 Persona A		Persona B	        Resultado A/B
 Mascarilla-Salud       Mascarilla-Salud

 Quirúrgica Sana	Quirúrgica Sana		No varia				
 Quirúrgica Sana	Quirúrgica Infectada	No varia			
 Quirúrgica Infectada	Quirúrgica Infectada	No varia			

 FP2 Sana		FP2 Sana		No varia			
 FP2 Sana		FP2 Infectada		No varia			
 FP2 Infectada		FP2 Infectada		No varia				

 Quirúrgica Sana	FP2 Sana		No varia			
 Quirúrgica Sana	FP2 Infectada		Puede variar A		
 Quirúrgica Infectada	FP2 Sana		No varia			
 Quirúrgica Infectada	FP2 Infectada		No varia

El único caso en el que alguna de las personas puede cambiar de estado, es decir contagiarse es cuando una de ellas, usa mascarilla FP2 y contagia a la otra que usa quirúrgica.

Parece que el dilema del prisionero aconseja que el uso de la mascarilla quirúrgica, asegura mejor el beneficio común, esto es evitar el contagio.

Simple Screen Recorder Video Streaming

En el articulo anterior hablamos de Simple Screen Recorder, una simple como su nombre indica y a la vez potente aplicación para la grabación del escritorio, y comentamos que también permitía hacer Video Streaming.

El perfil puede escogerse entre los tres predeterminados Live_Stream(1000kbps, 2000kbps, o 3000kbps)

La configuración para este menester es sencilla, en la pantalla de configuración, en vez de dar un nombre al archivo en el que se grabará, se introducen los parámetros que nos da la plataforma en la que vamos a realizar la emisión en directo.

En el ejemplo escribiríamos o copiaríamos rmtp://a.rmtp.youtube.com/live2/

y a continuación la clave que en la imagen viene oculta, lo más sencillo es utilizar la opción copiar y seguidamente pegarla a continuación quedando de esta forma

rmtp://a.rmtp.youtube.com/live2/aqui_la_clave.

Al ser una transmisión en directo es aconsejable tener una buena conexión, en cuanto al formato el aconsejable es flv para video, en cuanto al audio esta vez no es aconsejable el audio sin comprimir, y optaremos por mp3, acc o vorbis, y un bitrate apropiado al tipo de transmisión (musical, tutorial, etc).

En la pantalla final iniciaremos la grabación y en unos segundos, la plataforma nos informa de que ya se esta emitiendo en directo.

Para finalizar la transmisión lo haremos desde la plataforma, y seguidamente pararemos Simple Screen Recorder.

Adjunto una emisión en directo de mi canal en youtube



La Luna Llena del 1 de Agosto

 El martes día uno hay luna llena y un buen momento para realizar el estudio que se indica en el siguiente enlace  Cristales No Empañados Al...