Comptadors simultànis

  1. En el fitxer compta.py desenvolupeu la funció:

    compta(mn, mx):

    Cada segon, visualitza pel canal estàndard de sortida un element de la sèrie mn, mn + 1, mn + 2, …, fins arribar a mx. Els paràmetres mn i mx son del tipus int.

    La funció no retorna res.

    Per fer que surti un element cada segon podem usar la funció time.sleep() la biblioteca time. Per fer que a la pantalla (canal estàndard de sortida) surti un número al mateix lloc cada segon ho podem fer amb la funció predefinida de python print(). El retorn de línia que print() fa per omissió, es pot evitar amb el paràmetre end="r". El valor "r" fa que el cursor del terminal vaig a l’inici de la línia sense saltar a la següent.

    L’enviaments de caràcters a pantalla en el sistema es fa quan s’inclou el salt de línia al final ( "n"). En el nostre cas no volem saltar de línia, haurem de forçar l’enviament mitjançant el paràmetre flush de print(). Fent flush=True farà que s’enviïn els caràcters sense esperar el salt de línia.

  2. Feu un guió python compta executable que invoqui la funció i subministri els paràmetres de la funció a partir dels arguments de la línia de la comanda. Un exemple de comanda és:

    $ compta 1 10
    
  3. Escriviu un guió bash en el fitxer comptadors que executi cinc comptadors que comptin simultàniament. El primer comptador comptarà de 3 a 16, el segon, de 33 a 46, el tercer de 333 a 46, el quart de 3333 a 3346, i el darrer, de 33333 a 33346.

    Executar en un sol terminal serà confòs doncs han de compartir el mateix canal estàndard de sortida. Per fer que cada procés tingui el seu propi terminal podeu fer servir la comanda xterm amb les opcions -e i -geometry. Per exemple,

    $ xterm  -geometry 10x2+100+200  -e "./compta 1 10
    

    obre un nou terminal que hi caben 2 línees de text de 10 caràcters (10x2) a posició x de pixel 100, i la posició y 200 de pantalla, (les y positives van cap avall. ) i cada segon surt un nombre de l’1 al 10.

    Feu que el guió comptadors obri cinc xterms de mida 10x2 en les posicions (0, 200), (100, 200), (200, 200), i (300, 200) i (400, 200).

    Un exemple gràfic és

    ../../../_images/comptadors1.png