Pagini

joi, 29 noiembrie 2012

Script countdown (numaratoare inversa)

      Mi s-a facut dor zilele astea sa mai programez ceva.  Asa ca mi-am ales ca tema un script ce calculeaza cate zile/ore/minute etc mai sunt pana la un anumit eveniment (countdown). Folosesc ca limbaj python.
     Ce mi-ar trebui pentru script:
      - o functie ce afiseaza ora exact de fiecare data cand este apelata
      - un calendar ca sa stiu cate zile scad (depinde de cate zile are luna)
     Avand acestea pot face diferenta si transforma in zile, ore si minute. Cam pe acest algoritm voi merge, acum sa vad cum traduc toate acestea in limbaj de programare (variabile, functii, loops etc).
    Am reusit sa-mi creeaz functia ce returneaza ora exacta:

     Si output-ul ei :


    Pana aici treburile au mers ok, dar acum cand am vrut sa testez o numaratoare inversa am vazut ca se cam ingroasa gluma, pentru ca nu pot folosi sistemul traditional de scadere (daca vreau sa aflu cat mai e pana la ora 20:00 cu timpul din printscreen 15:31, el va scadea fiecare element al listei in parte, adica 20-15=5 si 00-31=-31 si va afisa ca mai sunt 5 ore si 31 de minute, ceea ce e fals, mai sunt 4 ore si 29 de minute) , trebuie sa ma gandesc cum sa fac cu 60 de min, 24 ore etc. Aici e complicat...
   Sunt 2 parti care trebuie analizate:
   1. Nu pot scadea ora cu ora (ca int ma refer) si minut cu minut separat pentru ca ele au legatura. Cum am zis mai sus, daca scad 20-15 = 5 si nu va tine cont de minute.
  2. Sa implementez sistemul cu 60 in loc de 100, sa nu dea 90 de minute..

  La 1. am ajuns la o solutie: le iau impreuna, adica de ex 20:00 iau ca 2000 si 15:31 iau ca 1531 si daca le scad va da 469, adica 4:69, acum se tine cont de legatura dintre ele, daca rezolv si problema cu 60 am terminat.
  Am inceput sa probez diferite situatii pe foaie si mi-au rezultat 3 cazuri:
  A. Cand numarul de ore si numarul de minute din cel ce se scade e mai mare decat numarul scazut. Aici e cel mai simplu, nu apar probleme si rezultatul este corect:


   B. Cand numarul de minute din cel ce se scade e mai mic decat numarul scazut, dar prima cifra (de ls stanga spre dreapta) este mai mare:

   Am gasit si o formula cu care rezolv problema (cea cu verde). E destul de logica si e verificate pe mai multe cazuri

    C. Cand numarul de minute din cel ce se scade e mai mic decat numarul scazut, dar prima cifra (de ls stanga spre dreapta) este mai mica:
    In acest caz la formula se adauga +1 ca sa rezolve diferenta de rest.

    Am gasit astfel o modalitate de a rezolva problema cu 60, dar in timp ce faceam poze sa le pun aici, mi-a venit o idee si mai buna, de ce sa nu pun eu calculatorul, ca tot e ultra-rapid sa numere minutele pentru mine, asa ca am scriu un algoritm maine pentru asta. Metoa asta ar fi valabila pentru toate cazurile.

    

Niciun comentariu:

Trimiteți un comentariu