Mostrando entradas con la etiqueta LOGO. Mostrar todas las entradas
Mostrando entradas con la etiqueta LOGO. Mostrar todas las entradas

lunes, 14 de noviembre de 2016

Algunas propiedades útiles para el cálculo del mínimo común múltiplo y del máximo común divisor

P1.    $\text{m.c.m.}(a,b,c)=\text{m.c.m.}\left(\text{m.c.m.}(a,b),c\right)=\text{m.c.m.}\left(\text{m.c.m.}(a,c),b\right)=$
            $=\text{m.c.m.}\left(\text{m.c.m.}(b,c),a\right)$

      Ejemplo: Sea $a:=6$, $b:=15$, $c:=30$. Entonces, $\text{m.c.m.}(6,15,30)=\text{m.c.m.}\left(\text{m.c.m.}(6,15),30\right)=30$
            $=\text{m.c.m.}\left(\text{m.c.m.}(6,30),15\right)=\text{m.c.m.}(30,15)=30$
            $=\text{m.c.m.}\left(\text{m.c.m.}(15,30),6\right)=\text{m.c.m.}(30,6)=30$

P2.    $\text{m.c.d.}(a,b,c)=\text{m.c.d.}\left(\text{m.c.d.}(a,b),c\right)=\text{m.c.d.}\left(\text{m.c.d.}(a,c),b\right)=$
            $=\text{m.c.d.}\left(\text{m.c.d.}(b,c),a\right)$

      Ejemplo: Sea $a:=6$, $b:=15$, $c:=30$. Entonces, $\text{m.c.d.}(6,15,30)=\text{m.c.d.}\left(\text{m.c.d.}(6,15),30\right)=3$
            $=\text{m.c.d.}\left(\text{m.c.d.}(6,30),15\right)=\text{m.c.d.}(6,15)=3$
            $=\text{m.c.d.}\left(\text{m.c.d.}(15,30),6\right)=\text{m.c.d.}(15,6)=3$


P3.    $a\cdot b=\text{m.c.d.}(a,b)\cdot\text{m.c.m.}(a,b)$

      Ejemplo: Sea $a:=6$, $b:=15$. Entonces, $\text{m.c.d.}(6,15)=3$, $\text{m.c.m.}(6,15)=30$, y $a\cdot b=6\cdot 15=90$; y se cumple que $$6\cdot 15 = 30\cdot 3=90$$

OBSERVACIÓN. Esta tercera propiedad es muy útil, pues permite emplear los métodos de las restas sucesivas y el de las divisiones sucesivas ( algoritmo de Euclides ) para calcular, primero, el máximo común divisor de los dos números; y, a partir de éste, calcular el mínimo común múltiplo, pues es claro que deberá cumplirse que $$\text{m.c.m.}(a,b)=(a \cdot b) \div \text{m.c.d.}(a,b)$$

Recordemos que dos programa recursivos ( escritos en lenguaje LOGO ), bien sencillos, para calcular el máximo común divisor de dos números naturales son

procediment mcd_restes_successives :a :b
  si :a=:b 
     [escriu.seguit [mcd=] escriu :a  acaba] 
     [
       si :a<:b 
         [posa.a "b :a] 
       [posa.a "a (:a - :b) mcd_restes_successives :a :b]
     ]
fi



procediment mcd_Euclides :a :b
  fes.local "r residu :a :b
  si :r=0 
       [escriu.seguit [mcd=] escriu :b  acaba] 
     [
       posa.a "a :b
       posa.a "b :r
       mcd_Euclides :a :b
     ]
fi

Con ayuda de un intérprete de LOGO, escribimos
%mcd_restes_successives 3742036 1500872
o bien
%mcd_Euclides 3742036 1500872
y obtenemos
$$\text{m.c.d}(3742036,1500872)=4$$

Por consiguiente, y empleando la propiedad P3., $$\text{m.c.m.}(3742036,1500872)=(3742036 \cdot 1500872) \div \text{m.c.d.}(3742036,1500872)$$ y por tanto $$\text{m.c.m.}(3742036,1500872)=(3742036 \cdot 1500872) \div 4=1404079263848$$
$\square$

miércoles, 9 de noviembre de 2016

Encontrar el máximo común divisor de dos números naturales, por el método de las restas sucesivas

ENUNCIADO. Calcular el máximo común divisor de $1150$ y $220$ empleando el algoritmo de las restas sucesivas

SOLUCIÓN. Tengamos en cuenta la siguiente propiedad, que es muy evidente: Sean $a$ y $b$ dos números naturales, entonces si $a=b$ se tiene que $\text{m.c.d}(a,b)=a$; y, en caso contrario, si $a {>} b$ o bien $b {>}a$, deberá cumplirse que $$\text{m.c.d}(a,b)=\text{m.c.d.}\left(\text{máximo}(\{a,b\}),\text{máximo}(\{a,b\})-\text{mínimo}(\{a,b\}\right)$$ Iterando este operación [ intercambiando los términos de la resta si el minuendo fuese menor que el sustraendo ], hasta el paso en que el resultado de dicha resta sea cero, deberemos concluir entonces que el máximo común divisor de $a$ y $b$ ha de ser igual a los valores iguales de los términos de esta última resta.

La siguiente tabla ilustra el procedimiento cuando lo implementamos manualmente, organizando los cálculos en una tabla

OBSERVACIÓN. Si bien este método es menos eficaz que el de Euclides ( véase [éste otro artículo] en el que se utiliza dicho método para otro par de números ) -- ambos métodos se atribuyen a Euclides --, es muy fácil programarlo en un ordenador. En primero y segundo de ESO, recomiendo emplear el lenguaje Logo, si se dispone de un intérprete de dicho lenguaje de programación. Es preferible este método al m. basado en la descomposición en factores primos, en el caso de que los números dados no sean pequeños y sus descomposiciones en factores sean demasiado laboriosas. Y es tanto más eficaz cuanto menor sea la diferencia entre los dos números dados

El algoritmo se puede escribir en un lenguaje de programación, por ejemplo en Logo ( muy apropiado para los primeros cursos de ESO ), para poder implementarlo en un ordenador en el que tengamos instalado un intérprete de Logo:

procediment mcd_restes_successives :a :b
  si :a=:b 
     [escriu.seguit [mcd=] escriu :a  acaba] 
     [
       si :a<:b 
         [posa.a "b :a] 
       [posa.a "a (:a - :b) mcd_restes_successives :a :b]
     ]
fi

Para poner en marcha el programa en el intérprete de Logo escribimos (en la línea de comandos):
% mcd_restes_successives 1150 220
y validamos la petición ( pulsando la tecla Enter )
dando como respuesta
mcd=10


$\square$

Cálculo del máximo común divisor de dos números naturales empleando el algoritmo de Euclides

ENUNCIADO. Calcular el máximo común divisor de $1050$ y $22$, empleando el algoritmo de Euclides

SOLUCIÓN. Dados dos números naturales $a$ y $b$, con $a \ge b$, se cumple la siguiente propiedad $$\text{m.c.d.}(a,b)=\text{m.c.d}(b,r)$$ donde $r$ representa el resto de la división $a \div b$. Iterando esta propiedad, hasta llegar a una división con resto igual a $0$, vemos que el máximo común divisor pedido ha de ser igual al divisor de la última división.

Así, pues, organizando los cálculos en una tabla con los números del ejercicio, se llega a
con lo cual $$\text{m.c.d}(1050,22)=2$$

OBSERVACIÓN. Este método es más eficaz que el m. basado en la descomposición en factores primos de los dos números dados. El siguiente programa escrito en Logo puede implementarse en un ordenador en el que hayamos instalado un intérprete de dicho lenguaje de programación ( muy apropiado para los primeros cursos de ESO ):

Siendo $a \ge b$, el siguiente programa recursivo lleva rápidamente a la solución:
procediment mcd_Euclides :a :b
  fes.local "r residu :a :b
  si :r=0 
       [escriu.seguit [mcd=] escriu :b  acaba] 
     [
       posa.a "a :b
       posa.a "b :r
       mcd_Euclides :a :b
     ]
fi

Este otro programa utiliza el mismo algoritmo, si bien es una versión no recursiva del de arriba
procediment mcd_Euclides_2 :a :b 
  fes.local "r 
  fes.local "dividend 
  fes.local "divisor 
  si :a > :b 
     [
       posa.a "dividend :a 
       posa.a "divisor :b
     ]  
     [
       posa.a "dividend :b  
       posa.a "divisor :a
     ]   
  repeteix :dividend
    [
      posa.a "r residu :dividend :divisor
      si :r=0 
        [
           escriu.seguit  [mcd =] escriu :divisor 
           acaba
        ]
      [
         posa.a "dividend :divisor 
         posa.a "divisor :r
      ]
     ]  
fi
Una vez preparado con el editor de Logo, lo pondremos en marcha mediante la siguiente petición ( línea de comandos del entorno de programación ):
%mcd_Euclides 1050 22
dando como respuesta
mcd=2
$\square$

martes, 14 de octubre de 1997

Semejanzas: dibujando casitas de diversos tamaños con WinLogo (LOGO)

; ---------------------------------------------------------
; Semblances: dibuixant casetes 
; de diverses gradàries i d'igual forma
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment cases.decreixents :costat 
  si :costat < 20 [acaba]
  rep 4 [avança :costat gira.dreta 90]
  pinta.façana 9
  teulada :costat
  cases.decreixents :costat - 10
fi

procediment pinta.façana :color
no.llapis gd 45 av 2 llapis fes.color :color pinta
no.llapis recula 2 ge 45 llapis fes.color 1
fi

procediment pinta.teulada :color
no.llapis gd 30 av 2 llapis fes.color :color pinta
no.llapis recula 2 ge 30 llapis fes.color 1
fi

procediment fes.teulada :costat
  av :costat gd 30 
  rep 3 [av :costat gd 120]
fi

procediment teulada :costat
  fes.teulada :costat
  pinta.teulada 10
  no.llapis gd 60 av :costat ge 90 recula :costat llapis
fi

procediment cases.creixents :costat 
  si :costat < 20 [acaba]
  cases.creixents :costat - 10
  rep 4 [avança :costat gira.dreta 90]
  pinta.façana 9
  teulada :costat
fi

procediment cases :costat ;procediment principal
id
no.llapis ge 90 av 200 gd 90 llapis
cases.decreixents :costat
cases.creixents :costat
no.llapis centre llapis
fi 

; ---------------------------------------------------------
cases 60 ;exemple
id

Números cuadrados con WinLogo (LOGO)

; ---------------------------------------------------------
; Uns quants nombres quadrats
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment llista.de.nombres.quadrats :num
  si :num > 15 [acaba]
  (escriu [el quadrat de] :num "és :num * :num) 
  llista.de.nombres.quadrats :num + 1
fi
; ---------------------------------------------------------
llista.de.nombres.quadrats 1 ;exemple

Introducción al cálculo numérico con WinLogo (LOGO). Conversión de horas a minutos

; ---------------------------------------------------------
; Conversió d'hores a minuts
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------

procediment conversor.hores.a.minuts
  esborra.text
  mou.cursor [6 2]
  escriu.seguit [Digues un nombre d'hores: $ ]
  posa.a "hores paraula.llegida
  mou.cursor [9 4]
  (escriu :hores [hores són] :hores*60 "minuts)
  escriu " ;salt de linia
  mou.cursor [12 6]
  escriu [Voleu continuar ? (s/n)]
  posa.a "resposta caràcter.llegit
  si :resposta = "n [acaba]
  conversor.hores.a.minuts
fi
; ----------------------------------------------------------

% conversor.hores.a.minuts ;posta en marxa

lunes, 13 de octubre de 1997

Una flor con WinLogo (LOGO)

; ---------------------------------------------------------
; Model d'una senzilla flor 
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------

procediment flor :n :color
  id
  repeteix :n [pètal :color gd 360 / :n]
fi

procediment pètal :color
  repeteix 2 [repeteix 90 [av 1 gd 1] gd 90]
  no.llapis gd 45 av 50 llapis fes.color :color pinta
  no.llapis centre ge 45 llapis
  fes.color 1
fi

; ---------------------------------------------------------
flor 15 10 ;un exemple 

Modelo de diana con circunferencias concéntricas. Un ejercicio de programación con WinLogo (LOGO)


; ---------------------------------------------------------
; Model d'una diana amb circumferències concètriques 
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------

procediment circumferència.centrada :radi :color
  repeteix 200 
    [
      avança 2 * pi * :radi / 200 gira.dreta 360 /200
    ]
  no.llapis 
  gd 90 
  av 15 
  ge 90 
  llapis
  acoloreix :color
fi


procediment acoloreix :nombre.color
  no.llapis 
  gira.dreta 45
  av 4 
  llapis
  fes.color :nombre.color 
  pinta
  no.llapis recula 4
  gira.esquerra 45
  llapis
  fes.color 1
fi

procediment diana
  id
  circumferència.centrada 70 10
  circumferència.centrada 55 11
  circumferència.centrada 40 10
  circumferència.centrada 25 11
  circumferència.centrada 10 1
  desapareix
fi
; ---------------------------------------------------------

;Exemple:
% diana

Modelo de una mariposa con WinLogo (LOGO)

; ---------------------------------------------------------
; Model d'una senzilla papallona
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------

procediment acoloreix :nombre.color
  no.llapis gira.dreta 30
  av 3 llapis
  fes.color :nombre.color pinta
  no.llapis recula 3
  gira.esquerra 30 llapis fes.color 1
fi

procediment ales :radi :nombre.costats
  posa.a "color 13
  id
  repeteix 4 
    [
      dues.circumferències :radi :nombre.costats :color 
      posa.a "radi :radi - 10 posa.a "color :color - 1
    ]
fi

procediment circumferència :radi :nombre.costats :color
  repeteix :nombre.costats 
    [
      avança 2 * pi * :radi / :nombre.costats gira.dreta 360 / :nombre.costats
    ]
  acoloreix :color
fi


procediment dues.circumferències :radi :nombre.costats :color
  repeteix 2 
  [
    circumferència :radi :nombre.costats :color gd 180
  ]
fi

procediment ull :llarg :radi
  av :llarg
  ge 90
  repeteix 100 
    [
      avança 2 * pi * :radi / 100 gira.dreta 360 / 100
    ]
  gd 90
fi

procediment cos.papallona
  recula 60
  av 90
  ge 20
  ull 10 5 acoloreix 1
  recula 10
  gd 40
  ull 10 5 acoloreix 1
fi


procediment papallona :radi :nombre.costats
  ales :radi :nombre.costats
  cos.papallona 
  desapareix
fi

; ---------------------------------------------------------
;Exemple:
% papallona 100 100

Dibujo de dos circunferencias con colores con WinLogo (LOGO)

; ---------------------------------------------------------
; Dibuix de dues circumferències acolorides
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment acoloreix :nombre.color
  no.llapis gira.dreta 30
  av 3 llapis
  fes.color :nombre.color pinta
  no.llapis recula 3
  gira.esquerra 30 llapis fes.color 1
fi

procediment circumferència :radi :nombre.costats
  repeteix :nombre.costats 
    [avança 2 * pi * :radi / :nombre.costats gira.dreta 360 / :nombre.costats]
  acoloreix 10
fi

procediment dues.circumferències :radi :nombre.costats
  id
  repeteix 2 [circumferència :radi :nombre.costats gd 180]
  fi
; ---------------------------------------------------------
;Exemple:
% dues.circumferències 80 500
 

Dibujando y pintando polígonos regulares con WinLogo (LOGO)

; ---------------------------------------------------------
; Dibuixant i pintant polígons regulars
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment polígons :mida.costat :nombre.costats
  id
  repeteix :nombre.costats 
     [av :mida.costat gd 360 / :nombre.costats]
  acoloreix 1 + atzar 14
fi

procediment acoloreix :nombre.color
  no.llapis gira.dreta 30
  av 3 llapis
  fes.color :nombre.color pinta
  no.llapis recula 3
  gira.esquerra 30 llapis fes.color 1
fi
; ---------------------------------------------------------
;Exemples:
% polígons 60 3
% polígons 60 4
% polígons 60 5
% polígons 60 6
...

Espiral poligonal equiangular. Un ejercicio de programación con WinLogo (LOGO)

; ------------------------------------------------------------
; Espiral poligonal equiangular con un cierto número de tramos
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ------------------------------------------------------------
procediment espiral :longitud.costat :nombre.costats 
id
repeteix :nombre.costats [av :longitud.costat 
                          gira.dreta 360/:nombre.costats 
                          posa.a "costat :longitud.costat+5
                         ] 
fi
; ------------------------------------------------------------
; Exemple:
% espiral 40 5

miércoles, 8 de octubre de 1997

Horquilla compuesta de cinco brazos radiales. Un ejercicio de programación con WinLogo (LOGO)

; ---------------------------------------------------------
; Forqueta composta de cinc braços radials
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment forca
  av 70 ge 90 no.llapis av 20 gd 90 llapis
  repeteix 2 [av 20 gd 90 no.llapis av 10 llapis gd 90]
  repeteix 2 [av 20 gd 90 no.llapis av 20 llapis gd 90]
  repeteix 2 [av 20 gd 90 no.llapis av 30 llapis gd 90]
  repeteix 2 [av 20 gd 90 no.llapis av 40 llapis gd 90]
  gd 90 av 40 ge 90
  no.llapis
  centre
  llapis
fi

procediment forqueta_composta
  id
  fes.color 13
  fes.gruix 2
  repeteix 5 [forca gd 72]
  fes.color 1
fi
; ---------------------------------------------------------
% forqueta_composta

Hoja compuesta con WinLogo (LOGO)

; ---------------------------------------------------------
; Fulla composta
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment fulla
  fes.gruix 2
  av 20
  repeteix 2 [gira.esquerra 30 av 40 gira.dreta 60 av 40 gira.dreta 150]
  no.llapis av 40
  fes.color 11 llapis pinta
  fes.color 3 fes.gruix 5 recula 60
  fes.color 1 fes.gruix 1
fi

procediment fulla_composta
  inicia.dibuix
  no.llapis ge 90 av 90 gd 90
  repeteix 4 [llapis fulla no.llapis gd 90 av 60 ge 90]
fi
; ---------------------------------------------------------
% fulla_composta

Hoja múltiple de cinco lóbulos rotulada. Otro ejercicio de programación en WinLogo (LOGO)

; ---------------------------------------------------------
; Hoja de cinco lóbulos con el mismo rótulo en cada uno
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment fulla_retolada
  inicia.dibuix
  fes.fons 16
  fes.gruix 2
  av 20
  repeteix 2 [gira.esquerra 30 av 40 gira.dreta 60 av 40 gira.dreta 150]
  no.llapis av 40
  fes.color 11 llapis pinta
  fes.color 3 fes.gruix 5 recula 60
  fes.color 1 fes.gruix 2
  no.llapis recula 30 gira.esquerra 90 av 30 gira.dreta 180 llapis
  fes.tipus "caligraf retola [fulla]
  desapareix
fi
; ---------------------------------------------------------
% fulla_retolada

Hexágono regular con WinLogo (LOGO)

; ---------------------------------------------------------
; Hexagon regular
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
procediment hexagon
  id
  fes.fons 16
  fes.gruix 2
  fes.color 10
  repeteix 6 [av 80 gd 60]
  no.llapis gd 60 av 10
  fes.color 13
  llapis pinta
  no.llapis centre llapis ge 60
  fes.color 1 fes.gruix 1
fi
; ---------------------------------------------------------
% hexagon

Polígono estrellado de cinco vértices con WinLogo (Logo)

; ---------------------------------------------------------
; Poligon estrellat de cinc vèrtexs
;    © Joan Aranes Clua, 1997
                CC BY 4.0
; ---------------------------------------------------------
rocediment estel5
  id
  fes.color 15
  fes.fons 5
  fes.gruix 5
  gd 18
  repeteix 5 [av 100 gd 144]
  desapareix
fi
; ---------------------------------------------------------
% estel5

martes, 7 de octubre de 1997

Un sencillo ejercicio con WinLogo (Logo) para activar y posicionar más de una tortuga

; ---------------------------------------------------------
; Activant i posicionant més d'una tortuga
;    © Joan Aranes Clua, 1997
                  CC BY 4.0
; ---------------------------------------------------------

fes.actives [1 2]
escriu actives ;dóna el número de les tortugues actives
crida [1] [fes.color 10 apareix posa't [-10 -10]]
crida [2] [fes.color 32 apareix posa't [10 10]]
id