{"id":2396,"date":"2021-04-13T11:08:35","date_gmt":"2021-04-13T16:08:35","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2396"},"modified":"2021-04-13T11:08:35","modified_gmt":"2021-04-13T16:08:35","slug":"matriz-espiral-binaria-en-python","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/matriz-espiral-binaria-en-python\/","title":{"rendered":"Matriz espiral binaria en Python"},"content":{"rendered":"<p>Se muestra un ejercicio para realizar una matriz espiral en Python, acomodando una cadena de ceros y \u00a0unos.<\/p>\n<p><!--more--><\/p>\n<p>Python es un lenguaje de programaci\u00f3n muy utilizado, que utiliza una sintaxis sencilla. Vamos a crear a continuaci\u00f3n una matriz espiral binaria, es decir que contiene una cadena de ceros y unos. Te invito a ver el siguiente video donde se explica toda la realizaci\u00f3n del programa.<\/p>\n<p>&nbsp;<\/p>\n<p><iframe loading=\"lazy\" width=\"733\" height=\"412\" src=\"https:\/\/www.youtube.com\/embed\/ozXDfFxz_dI\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h2>Descripci\u00f3n del problema: Matriz espiral binaria<\/h2>\n<p class=\"_04xlpA direction-ltr align-start para-style-body\"><span class=\"JsGRdQ\">Dado un n\u00famero entero m, escriba un programa que lo convierta a combinaci\u00f3n binaria<\/span> <span class=\"JsGRdQ\">y acomode cada uno de los bits de dicha combinaci\u00f3n en una matriz de tama\u00f1o nxn.<\/span><\/p>\n<p class=\"_04xlpA direction-ltr align-start para-style-body\"><span class=\"JsGRdQ\">El valor de n debe ser determinado en funci\u00f3n del n\u00famero de bits de la combinaci\u00f3n binaria.<\/span><\/p>\n<p class=\"_04xlpA direction-ltr align-start para-style-body\"><span class=\"JsGRdQ\">Los bits deben ser acomodados en espiral hacia el centro de la matriz, iniciando en la esquina superior izquierda, siguiendo hacia la derecha, luego hacia abajo, luego hacia la izquierda, luego hacia arriba y as\u00ed sucesivamente.<\/span><\/p>\n<p class=\"_04xlpA direction-ltr align-start para-style-body\"><span class=\"JsGRdQ\">Todas las localidades de la matriz deber\u00e1n contener un d\u00edgito.<\/span><\/p>\n<h2>Secciones del c\u00f3digo en Python<\/h2>\n<h3>Funci\u00f3n para convertir un n\u00famero a binario en Python<\/h3>\n<pre class=\"lang:python decode:true \">def binario(decimal):\r\n\tbinario = ''\r\n\twhile decimal \/\/ 2 != 0:\r\n\t\tbinario = str(decimal % 2) + binario\r\n\t\tdecimal = decimal \/\/ 2\r\n\treturn str(decimal) + binario<\/pre>\n<p>El algoritmo aqu\u00ed utilizado se muestra en la siguiente imagen:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2021\/04\/convertir-numero-a-binario-en-python-para-matriz-espiral.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2397\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2021\/04\/convertir-numero-a-binario-en-python-para-matriz-espiral.png\" alt=\"convertir numero a binario en python para matriz espiral\" width=\"169\" height=\"193\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2021\/04\/convertir-numero-a-binario-en-python-para-matriz-espiral.png 704w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2021\/04\/convertir-numero-a-binario-en-python-para-matriz-espiral-263x300.png 263w\" sizes=\"auto, (max-width: 169px) 100vw, 169px\" \/><\/a><\/p>\n<h3>Funci\u00f3n para imprimir una matriz en Python<\/h3>\n<pre class=\"lang:python decode:true \">def imprimir(md):\r\n\tfor x in md:\r\n\t\tfor y in x:\r\n\t\t\tprint (y, end=\"\")\r\n\t\tprint ()\r\n<\/pre>\n<p>Se utiliza<em> print(y,end=\u00bb\u00bb)<\/em> para indicarle que ese print no genera salto de l\u00ednea, para eso le pasamos como argumento <em>end<\/em> el valor de vac\u00edo.<\/p>\n<h3>C\u00f3digo para recibir la entrada y mandar a llamar la funci\u00f3n que convierte a binario<\/h3>\n<pre class=\"lang:python decode:true \"># Recibir la entrada\r\nm = int(input())\r\n\r\n# Convertir ese valor a binario\r\n\r\nbinario = binario(m)<\/pre>\n<h3>C\u00f3mo agregar ceros a la izquierda de una cadena binaria<\/h3>\n<pre class=\"lang:python decode:true \"># Agregar ceros a la izquierda\r\n\r\nn = math.ceil(math.sqrt(len(binario)))\r\ncerosizquierda = n*n-len(binario)\r\nstrceros = \"0\" * cerosizquierda\r\ncadena = strceros + binario<\/pre>\n<p>Aqu\u00ed utilizamos <em>ceil<\/em> para redondear un dato decimal al valor entero superior, as\u00ed un valor como 3.8 se redondear\u00e1 a 4.<\/p>\n<h3>C\u00f3mo crear una matriz de asteriscos o vac\u00eda de n x n usando una expresi\u00f3n generadora en Python<\/h3>\n<pre class=\"lang:python decode:true\"># Crear una matriz vacia de n x n\r\nmd = [[\"*\" for y in range(n)]  for x in range(n)]<\/pre>\n<h3>Llenar la matriz con los bits de la cadena binaria<\/h3>\n<pre class=\"lang:python decode:true \"># Llenar la matriz con los bits de la cadena binaria\r\n\r\nx = 0\r\ny = 0\r\ni = 0\r\nlimizq= 0\r\nlimder= n-1\r\nlimsup= 0\r\nliminf= n-1\r\ndir = 'der'\r\n\r\nwhile (i&lt;len(cadena)):\r\n\t# colocar el valor\r\n\tmd[y][x] = cadena[i]\r\n\ti+=1\r\n\r\n\t# reajustar el siguiente movimiento\r\n\r\n\tif dir=='der':\r\n\t\tlimsup=y+1\r\n\t\tif x==limder:\r\n\t\t\tdir = 'aba'\r\n\t\t\tif y&lt;liminf:\r\n\t\t\t\ty+=1\r\n\t\telse:\r\n\t\t\tx+=1\r\n\t\tcontinue\r\n\r\n\tif dir=='aba':\r\n\t\tlimder=x-1\r\n\t\tif y==liminf:\r\n\t\t\tdir = 'izq'\r\n\t\t\tif x&gt;limizq:\r\n\t\t\t\tx-=1\r\n\t\telse:\r\n\t\t\ty+=1\r\n\t\tcontinue\r\n\r\n\tif dir=='izq':\r\n\t\tliminf=y-1\r\n\t\tif x==limizq:\r\n\t\t\tdir = 'arr'\r\n\t\t\tif y&gt;limsup:\r\n\t\t\t\ty-=1\r\n\t\telse:\r\n\t\t\tx-=1\r\n\t\tcontinue\r\n\r\n\tif dir=='arr':\r\n\t\tlimizq=x+1\r\n\t\tif y==limsup:\r\n\t\t\tdir = 'der'\r\n\t\t\tif x&lt;limder:\r\n\t\t\t\tx+=1\r\n\t\telse:\r\n\t\t\ty-=1\r\n\t\tcontinue\r\n\r\n\r\n\r\nimprimir(md)<\/pre>\n<p>Te invito a ver el video de explicaci\u00f3n del c\u00f3digo para una mejor comprensi\u00f3n de lo que estamos realizando aqu\u00ed. O bien deja en un comentario tu duda.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se muestra un ejercicio para realizar una matriz espiral en Python, acomodando una cadena de ceros y \u00a0unos.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[188],"tags":[286,325,326],"class_list":["post-2396","post","type-post","status-publish","format-standard","hentry","category-programacion-basica","tag-ejercicios-python","tag-matrices","tag-numeros-binarios"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=2396"}],"version-history":[{"count":3,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2396\/revisions"}],"predecessor-version":[{"id":2400,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2396\/revisions\/2400"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2396"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2396"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}