Basic'de saat ve dakika hesaplaması

Başlatan transistor, 07 Temmuz 2025, 09:06:40

transistor

    TOPLAM=(DAK+EKSURE)
    YENISAAT=SAAT+(TOPLAM/60)
    YENIDAK=TOPLAM MOD 60

Herkese merhaba, gerçek zamana maksimum 60dk olmak üzere ek süre eklemek istiyorum. Ek süreyi hesaplamada sorun yaşıyorum. Saat 23.45 iken 30dk ekleyince saat 25.15 oluyor. Yeni saate MOD 24 ekleyince de 00.15 olmak yerine 24.15 oluyor. Görüş ve önerilerinizi bekliyorum.

Teşekkürler,

transistor

#1
div32 ile bir türlü yapamadım içime sinmedi ama aşağıdaki kod parçası işimi kısmen çözdü.

TOPLAM=(DAK+EKSURE)+1 '1 DAKKA TOLERANS EKLE
X=0
WHILE TOPLAM>=60
    TOPLAM=(TOPLAM-60)
    X=X+1
WEND
YENIDAK=TOPLAM
YENISAAT=SAAT+X
YENISAAT=YENISAAT MOD 24

ete

Amacını belirtmemişsin. Bu nedenle çok fazla fikir yürütemedim.
Diyelimki saat 23:45 iken 30 dak eklemek istedin. Bu eklemeden sonra hesaplanan saat değerini bir yerde kullanacak isen o zaman dakika bazlı olarak ekleme yapman ve toplam dak değeri 60 dan büyük ise saati bir artırıp toplam dak değerinden 60 çıkartıp kalanı yeni dak değeri olarak kullanmak gerekir. Tabiiki saat toplamıda 24 veya üzeri ise saat değerinden 24 çıkarmak da getekir.
Senin örnekde 23:45 in 45 tarafına 30 eklersen 75 bulursun. Bundan 60 çıkartırsan dak değerin 15 dak olur. Saat ise 23+1=24 olur ve bundan 24 çıkınca yeni saat değerin 00:15 olarak hesaplanmış olur.
Ete
Ete

transistor

1-60 arasındaki sayıyı dakikaya ekleyerek ortaya yeni bir zaman çıkartmaya çalıştım. Gerçek zamanla bulduğum saat eşit olunca çıkışa buzzer bağlayarak alarm vermesini sağladım. İlk kodlar eksik çalıştı ikinci kodum çalıştı hocam teşekkür ederim mantığınıda anlatmışsınız.

aRci

konu çözülmüş bir fikir olarak bu tarz uygulamada kendi yaklaşımım dan bahsetmek istiyorum. burada bir süre sonra buzzer ses alacaksak bunu için saate ekleme yapmaktansa bir geri sayım sayacı ile de yapabilirsiniz.

Ornekte Her dakikak değişiminde birkere GeriSay değişkeni değeri sıfır değilse çıkartma işlemi yapılıyor ve değer 1 olunca buzzer dan ses alıyoruz. GeriSay kontrolünde istediğiniz kadar dakika çeşidinden değer yükleyerek gecikme sağlayabilirsiniz.

EskiDak var byte
Dongu:

if EskiDak != Dak then
   EskiDak = Dak
   if GeriSay != 0 then GeriSay = GeriSay - 1
   if GeriSay = 1 then 
      high Buzzer:pause 100:low Buzzer
   endif
endif
Return

 

Powered by EzPortal
▲