logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Edycja czasu, budzik. Format czasu zaczyna się psuć po dodaniu 5 min.

PluszowyMisiu 16 Mar 2006 17:13 2133 8
REKLAMA
  • #1 2421817
    PluszowyMisiu
    Poziom 14  
    Posty: 151
    Ocena: 11
    Witam. Chce zrobic budzik i potrzebuje czegos takiego co by dodalo do aktualnego czasu np 5 min.
    Zrobilem juz ze mam czas w formacie Int. Wszystko dziala poprawnie dopuki nie dodam np 5 minut. Wtedy zaczyna sie sypac format daty bo wyswietla mi napszyklad w extremalnych przypadkach 17:64:23 . Dodal poprostu 5 min. Jak powrocic do normalnego czasu wiem ze to sie jakops robilo ( mnozylo *60*60*24 podczas dodawania jakiejs liczby czy cos takiego ) Nigdzie nie potrafie tego znalesc. Prosze o pomoc.

    Pozdrawiam
  • REKLAMA
  • #2 2422282
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    czas nalezy przechowywac w sekundach, a nie jak prawdopodobnie zrobiles, czyli osobno w: godzinach min i sek.

    (prawie) Kazdy jezyk posiada jakies funkcje do wspomagania obliczen na czasie. jesli nie posiada mozna napisac je sobie samemu.

    napisz jakiego jezyka uzywasz, jakich funkcji potrzebujesz. A tak na marginesie: nie wiesz jak sie przelicza czas?
  • REKLAMA
  • #3 2423814
    PluszowyMisiu
    Poziom 14  
    Posty: 151
    Ocena: 11
    Witam .

    Jestem poczatkujacym maniakiem C++ a dokladnie C++ Builder 6.0.
    Nie wiem jak sie przelicza czas. Czas przechowuje caly czyli "hhmmss".
    I nie wiem jak co dalej zrobic. Kiedys robilem to ( jakos dzielilem czy mnozylem w jednej lini i wszystko bylo ok).
    Znasz moze jakies fajne strony o programowaniu w C++ ?? Z czego najlepiej sie nauczyc buildera??

    Pozdrawiam
  • #4 2425634
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    no to moze jak juz sie uparles na wlasny czas w postach hh:mm:ss to po kazdym dodaniu jakiegos czasu (w postaci hh:mm:ss) musisz zrobic korekte sekund i minut:

    int extraminuty = ToInt(ss) / 60;
    ss = ZInt(ToInt(ss) % 60);

    mm = ZInt(ToInt(mm) + extraminuty);
    int extragodziny = ToInt(mm) / 60;
    mm = ZInt(ToInt(mm) % 60);

    hh = ZInt(ToInt(hh) + extragodziny);

    nie wiem w jakim formacie przechowujesz ss mm hh wiec wystepuja tam dwie funkcje ToInt oraz ZInt ktore maja za zadanie dokonac stosownych kondersji z twojej reprezentacji do inta (ToInt) oraz w druga strone (ZInt). jesli trzymasz je w postaci intow to masz problem z glowy - nie muszisz ich pisac. wtedy korekta wyglada tak:

    int extraminuty = ss / 60;
    ss = ss % 60;
    mm += extraminuty;
    int extragodziny = mm / 60;
    mm = mm % 60;
    hh += extragodziny;

    a w jednej linii:
    nowess = (staress + dodaness) % 60;
    nowemm = (staremm + dodanemm + (staress + dodaness) / 60) % 60;
    nowehh = (starehh + dodanehh + (staremm + dodanemm + (staress + dodaness) / 60) / 60);

    raczej ten ostatni przyklad nie jest godny nasladowania zwlaszcza ze nie sprawdzalem czy to wogole dziala :)
  • REKLAMA
  • #5 2436306
    PluszowyMisiu
    Poziom 14  
    Posty: 151
    Ocena: 11
    Dziekuje za pomoc. Sprawdze czy to dziala. Jednak nie do konca mi o to chodzilo :). Chodzilo mi o operacje na calej godzinie czyli hhmmss w jednej lini. Teraz zaluje ze sobie nie zachowuje tego co kiedys robilem. wygladalo to miej weicej tak:
    zmiana czasu=120000+500 ( dodalem 5 minut do aktualnego czasu )
    zmana czasu= zmiana czasu / XXXXXX( i tutaj dzielilem przez cos i moze jeszcze z jedna operacje zrobilem i to dzialalo :).
    Moze masz jakas inna sugestje jak wykoknac drzemke w budziku ( dodaje do czasu aktualnego 5 min i czekam na czas który to spelni)
    Jednak nie chce stosowaczadnych licznikow w stylu TTimer_a :)
    Pozdrawaim i dzieki za pomoc.
  • #6 2439674
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    jak nie TTimery to nie wiem co. generalnie do liczenia czasu mozesz wykorzystywac cokolwiek co ten czas odmierza bez wzgledu na to w jakiej skali to robi. najwyzej bedziesz sobie skalowal.
    mozesz uzyc timerow z nastawnym interwalem,
    mozesz uzyc przerwania zegarowego (~18,2 raza na sekunde),
    mozesz uzyc nawet zegara taktujacego porty i/o (programowalny np na 9,6k/s) albo dobrac sie do jakiegokolwiek kawalka kwarcu ktory ten czas jakos bedzie mierzyl specyficznie do potrzebnych dokladnosci i czestotliwosci (no bo szkoda liczyc takty procesora jesli okreslamy czas w minutach z dokladnoscia do kilku sekund). jak takiego zegara nie ma to mozemy sobie co najwzej przewracac klepsydre co jakis czas albo obserwowac cien kijka wbitego w ziemie.
    te obserwacje mi uzmyslowily ze mozna zrobic zegarek naprawde fajny i inteligentny analogowy ale na komputerze. mianowicie ustawiasz kamerke naprzeciw wahadla i piszesz program do rozpoznawania tych obrazow. kazde rozpoznanie ruchu wahadla to jeden takt. fajne nie? a zegar sloneczny bez tarczy tylko cien wokol slupka i rozpoznawanie obrazu i przetworzenie na czas ktory uplynal? albo liczenie objetosci w obserwowanej klepsydrze? ciekawy pomysl. jutro sobie cos takiego napisze :)
    pozdrawiam
  • REKLAMA
  • #7 2439794
    wiso
    Poziom 15  
    Posty: 92
    Pomógł: 12
    Ocena: 2
    PluszowyMisiu napisał:
    Witam. Chce zrobic budzik i potrzebuje czegos takiego co by dodalo do aktualnego czasu np 5 min.
    Zrobilem juz ze mam czas w formacie Int. Wszystko dziala poprawnie dopuki nie dodam np 5 minut. Wtedy zaczyna sie sypac format daty bo wyswietla mi napszyklad w extremalnych przypadkach 17:64:23 . Dodal po prostu 5 min. Jak powrocic do normalnego czasu wiem ze to sie jakops robilo ( mnozylo *60*60*24 podczas dodawania jakiejs liczby czy cos takiego ) Nigdzie nie potrafie tego znalesc. Prosze o pomoc.

    Pozdrawiam


    Może to nie jest najlepsze rozwiązanie, ale załączam mój program EXIT w C, prosty zegar i odliczanie na timerach, także właśnie różne obliczenia tego typu co szukałeś.

    EDYCJA: Usunąłem link do pliku i dodałem go jako załącznik!

    PS. Program jest na licencji GPL.

    OPIS PROGRAMU (Z MOJEJ STRONY WWW), TO BYŁO DAWNO TEMU:

    Cytat:
    Bardzo zaawansowany program do Wylaczania Komputera, Systemu, Restartu lub Wylogowania o zadanej Godzinie, Minucie lub nawet Sekundzie. Posiada zegar, licznik do odlicznia, pasek odliczajacy oraz mily interfejs (kilka bajerow pod XP i 2000). Jest to naprawde skuteczny i dobry program. UWAGA: Niektore programy tego typu maja problemy pod NT, 2000 i XP gdyz nie uwzgledniaja innej budowy systemu i braku uprawnien programow do wylaczania komputera, moj program dziala bez zarzutu, nawet pod Win32s. Poza tym ma wiele opcji konfiguracji. Mozna go takze ukryc w Tray'u.
    Załączniki:
    • exit_1_0.rar (27.8 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #8 2439824
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    wiso napisał:


    Sprobuj umiescic plik na elektrodzie. Republika ma to do siebie ze moze, np. nie dzialac, zniknac (konto, plik), moze sie wyczerpac limit transferu.

    A pliki na elektrodzie beda i znikna (chyba) wraz z calym forum :)
  • #9 2439985
    wiso
    Poziom 15  
    Posty: 92
    Pomógł: 12
    Ocena: 2
    one_eddie napisał:
    wiso napisał:


    Sprobuj umiescic plik na elektrodzie. Republika ma to do siebie ze moze, np. nie dzialac, zniknac (konto, plik), moze sie wyczerpac limit transferu.

    A pliki na elektrodzie beda i znikna (chyba) wraz z calym forum :)


    Ok, jeśli nie stwarza to problemu, gdyż mam złe doświadczenia z umieszczaniem plików na forach. Nie zawsze jest to mile widziane.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu z dodawaniem minut do czasu w formacie hhmmss w programie C++ Builder 6.0, gdzie po dodaniu np. 5 minut format czasu ulega zniekształceniu (np. 17:64:23). Zalecane jest przechowywanie czasu w sekundach zamiast oddzielnych godzin, minut i sekund, co ułatwia operacje arytmetyczne. Podano przykładowe algorytmy korekty wartości sekund i minut po dodaniu czasu, wykorzystujące dzielenie i modulo, aby prawidłowo przenosić nadmiar sekund do minut i minut do godzin. Wskazano, że można wykonywać obliczenia w jednej linii, stosując operacje modulo i dzielenia całkowitego. Poruszono także temat implementacji budzika bez użycia standardowych timerów, sugerując alternatywne metody odmierzania czasu, choć nie podano gotowego rozwiązania. Udostępniono przykładowy program w C z prostym zegarem i odliczaniem na timerach, który może służyć jako wzór do dalszych modyfikacji. Wskazano, że pliki z kodem lepiej umieszczać na dedykowanych forach programistycznych, aby uniknąć problemów z dostępnością.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA