Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 kwi 2026, o 17:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 5 mar 2013, o 10:00 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Witam,
jakoś sobie radziłem samodzielnie do tego momentu.
Chciałbym aby każde naciśnięcie przycisku zwiększało mi ilość minut o np. o 7. Załóżmy, że mam początkową godzine 23:52 czyli po dwóch naciśnięciach przycisku będę miał 00:06 następnego dnia.
Dla początkowej godziny 23.56 po jednym naciśnięciach przycisku będę miał 00:03 następnego dnia.

Genaralnie chodzi mi oto jak "wykrywać" MINIĘCIE godziny 00:00, aby móc po takim wykryciu zwiększyć ilość dni ?
Na pewno trzeba wszystko uzależnić od minut tzn. 24h=1440minut ale co dalej ?
Próbowałem z if() oraz z modulo, ale nie działa to tak jak powinno :cry:
Dzięki za ewentualne sugestie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2013, o 10:16 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Wszystko zalezy w jakiej strukturze/zmiennej przechowujesz czas?
Jak przechowujesz w 3 zmiennych: dzien, godzina, minuta
to pseudokod bedzie mniej wiecej taki:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wszystko mozesz sobie obudowac zmyslna funkcja przyjmujaca argument o ile ma zwiekszyc.

Mozna tez przechowywac czas jako timestamp (ilosc sekund), wtedy po prostu zwiekszasz zmienna o 7*60.
A przy wyswietlaniu konwertujesz timestamp na odpowiedni format.

Troche zgaduje bo nie wiem jak masz to zbudowane.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2013, o 13:05 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Krążyłem wokół pomysłu przedstawionego przez kolegę. Takie rozwiązanie nie działa do końca prawidło. Poniżej przedstawiam fragment kodu. Kod działa do momentu gdy dla danego przypadku d<=8. Gdy d>8 pojawiają się bzdury, ponieważ warunek if ((min= (x*d)) > 60) jest zawsze spełniony.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2013, o 13:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Według mnie to tak trochę nie logicznie podchodzisz do tematu .....

Nie lepiej tak ?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Chcesz minuty ? proszę bardzo:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oczywiście w programie warunek z minutami musi być przed warunkiem z godzinami

------------------------ [ Dodano po: 3 minutach ]

A jeżeli chcesz całe "zapętlenie" to można tak

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2013, o 16:13 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Co w sytuacji gdy tak jak napisałem we wcześniejszym poście, weźmiemy pod uwagę gdy x=7 a d=10 i po każdym naciśnięciu klawisza "d" wzrasta :?: Będziemy mieć np. minuty = 7*10;, po kolejnym naciśnięciu klawisza minuty = 7*11; itd. Kasowanie minut w warunku if() nie ma znaczenia, bo minuty zależą od x*d; i tu jest cały problem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2013, o 17:42 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

qutrit napisał(a):
Witam,
jakoś sobie radziłem samodzielnie do tego momentu.
Chciałbym aby każde naciśnięcie przycisku zwiększało mi ilość minut o np. o 7. Załóżmy, że mam początkową godzine 23:52 czyli po dwóch naciśnięciach przycisku będę miał 00:06 następnego dnia.
Dla początkowej godziny 23.56 po jednym naciśnięciach przycisku będę miał 00:03 następnego dnia.


zamienić godziny i minuty na jedną liczbę o np tak:

(hh*60)+mm

dzięki czemu trzymasz czas w minutach ;)

i wtedy porównuj jak chcesz i ile chcesz, czyli twoja godzina 23:52 to będzie (23*60)+52 = 1432, chcesz teraz dodać 7 minut ? no to proszę dodaj ;) 2*7 czyli wyjdzie ci, że minuty = 1446 prawda ? więc będzie trzeba skorygować

if( minuty > 1440 ) minuty = minuty - 1440; (napisz sobie funkcję dodającą i korygującą minuty)

czyli minuty = 6, a cała godzina = (minuty % 60) czyli 0. A zatem otrzymasz 00:06 - zgadza się ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2013, o 18:23 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Mirku, problem w tym, że nie mogę sobie poradzić w sytuacji gdy minuty zmieniają się zgodnie z równaniem min = 1432 + 7 * d; gdzie 1432 to godzina początkowa (23:52) wyrażona w minutach. Układ wyświetla głupoty dla d>3; ponieważ warunek if(min>1440) jest zawsze spełniony.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2013, o 18:36 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

jakie głupoty ? dobrze wyświetla albo napisz co za głupoty - bo tak to do niczego nie dojdziemy

poza tym czego się spodziewasz po

min = 1432 + 7 * d;

że warunek nie będzie spełniony ? no coś ty ??? widzę że masz jakiś całkiem inny problem a szukasz w jeszcze innym miejscu

no to proszę niech d=5

min = 1432 + 7 * d = 1467

więc IF się spełni i ma się spełnić bo czemu niby nie ? i wtedy w minutach masz: 27 a w godzinach 0 czyli godzina 00:27

więc w czym ty widzisz problem hmmm?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2013, o 11:54 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Dlaczego twoj kod zle dzialal? Wezmy przyklad dla d = 3:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Szedles w dobra strone ale sie zagubiles. Godziny powinienes liczyc godziny zanim obedrzesz minuty z jednej pelnej doby (1440).
Drugi blad, godzina to minuty/60.
Tak juz byloby lepiej, dla d = 3:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czyli wychodzi godzina 24:13. Jest juz prawie dobrze.

Dodajemy nowa zmienna dni. I przypisujemy jej wartosc: dni=godz/24;
a godziny obcinamy do max 23: godz=godz%24.
Ja dodatkowo zastosowalbym zmienna w ktorej przechowywalbym aktualna ilosc minut i do niej dodawal przy kazdym nacisnieciu klawisza wartosc o ile chce zwiekszyc. Liczenie za kazdym razem od liczby startowej jest troche malo optymalne.
Moja propozycja kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dodatkowo twoj kod mialby problem dla d wiekszego od 205.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2013, o 10:26 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

charsz napisał(a):
Dodatkowo twoj kod mialby problem dla d wiekszego od 205

I tu jest cały mój problem. d zmienia się w przedziale 0-120. A przyrost minut nazwijmy go x zmienia się w przedziale 1-90 minut. I teraz o ile iloczyn x*d < 1440 wszystko działa pięknie. Dlatego dla x=7minut układ będzie działał prawidłowo bo 7*120 = 840<1440. Ale gdy x=15min to układ będzie będzie prawidłowo działał do d<=96. A dla d z przedziału 97-120 układ bedzie przeliczał źle. Krótko pisząc próbuję cały czas zaprojektować układ dla maksymalnych wartości x=90min, oraz d=120. Czyli dla x*d=10800.

Jak narazie mam takie coś, ale nie wygląda to pięknie :( Napewno można, to zgrabniej napisać.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


OK, już sobie poradziłem wydaje się, że działa poprawnie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO