Engranatges i politges

Volem representar un mecanisme format per una sèrie de rodes dentades i politges mitjançant un 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 'unio', que valdrà 'DENT' si les dues rodes engranen o 'POL' quan les dues rodes estan unides amb una politja.

Vegeu-ne un exemple:

../../../_images/engranatge.svg

Mecanisme compost d’engranatges i politges i el seu graf associat

Nota

Per tal de poder fer proves fàcilment disposeu del fitxer crea_graf.py, on hi ha la funció engranatge_exemple(), la qual crea i retorna el graf del mecanisme d’aquesta figura.

Implementeu les funcions que es demanen a continuació i deseu-les al mòdul engranatges (fitxer engranatges.py).

Funció npolitges

engranatges.npolitges(gm)
Paràmetres:

gm (Graph) – Graf que representa un mecanisme d’engranatges i politges

Retorna:

Nombre de politges que té gm

Per exemple, essent g el mecanisme de la figura:


>>> npolitges(g)
3
>>> g.add_edge('A', 'J', unio='POL')
>>> npolitges(g)
4

Disposeu de més jocs de proves al fitxer test-npolitges.txt.

Funció quantes_unions

engranatges.quantes_unions(gm, r1, r2, un)
Paràmetres:
  • gm (Graph) – Graf que representa un mecanisme d’engranatges i politges

  • r1 (str) – Nom d’una roda dentada de gm

  • r2 (str) – Nom d’una altra roda dentada de gm

  • un (str) – Tipus d’unió ('DENT' o 'POL')

Retorna:

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:


>>> quantes_unions(g, 'A', 'E', 'DENT')
3
>>> quantes_unions(g, 'A', 'E', 'POL')
2

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 test-quantes_unions.txt.

Funció moviment

engranatges.moviment(gm, rd)
Paràmetres:
  • gm (Graph) – Graf que representa un mecanisme d’engranatges i politges

  • rd (str) – Nom d’una roda dentada de gm

Retorna:

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:


>>> moviment(g, 'B') == {'C', 'F', 'H', 'E', 'G', 'I', 'D', 'A'}
True
>>> moviment(g, 'J') == {'K'}
True

Disposeu de més jocs de proves al fitxer test-moviment.txt.

Funció grup_d_engranatges

engranatges.grup_d_engranatges(gm, rd, un)
Paràmetres:
  • gm (Graph) – Graf que representa un mecanisme d’engranatges i politges

  • rd (str) – Nom d’una roda dentada de gm

  • un (str) – Tipus d’unió ('DENT' o 'POL')

Retorna:

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.

Tipus de retorn:

set

Per exemple, essent g el mecanisme de la figura:


>>> grup_d_engranatges(g, 'I', 'DENT') == {'D', 'H', 'G'}
True
>>> grup_d_engranatges(g, 'I', 'POL') == {'F'}
True

Disposeu de més jocs de proves al fitxer test-grup_d_engranatges.txt.

Solucions

Disposeu de solucions al fitxer engranatges.py.