Engranatges i politges ====================== Volem representar un mecanisme format per una sèrie de rodes dentades i politges mitjançant un :ref:`graf de networkx `. En aquest graf, cada node correspondrà a una roda dentada i hi haurà una aresta entre dos nodes sempre que les dents de les dues rodes corresponents engranin o bé si estan unides mitjançant una politja. Les arestes del graf estaran etiquetades amb l'atribut :py:const:`'unio'`, que valdrà :py:const:`'DENT'` si les dues rodes engranen o :py:const:`'POL'` quan les dues rodes estan unides amb una politja. Vegeu-ne un exemple: .. figure:: engranatge.svg :align: center :width: 70 pc Mecanisme compost d'engranatges i politges i el seu graf associat .. note:: Per tal de poder fer proves fàcilment disposeu del fitxer :download:`crea_graf.py`, on hi ha la funció :py:func:`engranatge_exemple`, la qual crea i retorna el graf del mecanisme d'aquesta figura. .. py:module:: engranatges Implementeu les funcions que es demanen a continuació i deseu-les al mòdul :mod:`engranatges` (fitxer :file:`engranatges.py`). Funció `npolitges` ------------------ .. function:: npolitges(gm) :param ~networkx.Graph gm: Graf que representa un mecanisme d'engranatges i politges :return: Nombre de politges que té `gm` Per exemple, essent `g` el mecanisme de la figura: .. literalinclude:: test-npolitges.txt :language: python :start-after: --inici-- :end-before: --fi-- Disposeu de més jocs de proves al fitxer :download:`test-npolitges.txt`. Funció `quantes_unions` ----------------------- .. function:: quantes_unions(gm, r1, r2, un) :param ~networkx.Graph gm: Graf que representa un mecanisme d'engranatges i politges :param str r1: Nom d'una roda dentada de `gm` :param str r2: Nom d'una altra roda dentada de `gm` :param str un: Tipus d'unió (:py:const:`'DENT'` o :py:const:`'POL'`) :return: Nombre d'unions `un` que hi ha en el camí que uneix les rodes `r2` i `r2` en el mecanisme `gm`. Si no hi ha camí entre `r1` i `r2` en `gm`, ha de retornar 0 independentment del valor `un`. Per exemple, essent `g` el mecanisme de la figura: .. literalinclude:: test-quantes_unions.txt :language: python :start-after: --inici-- :end-before: --fi-- Observeu que els grafs de mecanismes són acíclics i per tant, si ha ha camí entre dos nodes, aquest és únic (i és mínim). Disposeu de més jocs de proves al fitxer :download:`test-quantes_unions.txt`. Funció `moviment` ----------------- .. function:: moviment(gm, rd) :param ~networkx.Graph gm: Graf que representa un mecanisme d'engranatges i politges :param str rd: Nom d'una roda dentada de `gm` :return: conjunt de rodes dentades de `gm` que es mouen quan es fa girar la roda `rd`, exceptuant la pròpia `rd`. Per exemple, essent `g` el mecanisme de la figura: .. literalinclude:: test-moviment.txt :language: python :start-after: --inici-- :end-before: --fi-- Disposeu de més jocs de proves al fitxer :download:`test-moviment.txt`. Funció `grup_d_engranatges` --------------------------- .. function:: grup_d_engranatges(gm, rd, un) :param ~networkx.Graph gm: Graf que representa un mecanisme d'engranatges i politges :param str rd: Nom d'una roda dentada de `gm` :param str un: Tipus d'unió (:py:const:`'DENT'` o :py:const:`'POL'`) :return: Conjunt de rodes dentades de `gm` que es mouen mitjançant una unió de tipus `un` quan es fa girar la roda dentada `rd`. `rd` ha d'estar exclosa del conjunt. :rtype: :class:`set` Per exemple, essent `g` el mecanisme de la figura: .. literalinclude:: test-grup_d_engranatges.txt :language: python :start-after: --inici-- :end-before: --fi-- Disposeu de més jocs de proves al fitxer :download:`test-grup_d_engranatges.txt`. .. rubric:: Solucions Disposeu de solucions al fitxer :download:`engranatges.py`.