Gönderen Konu: Saat Problemi  (Okunma sayısı 5056 defa)

Çevrimdışı Burak Özpoyraz

  • OTOKON Üyesi
  • *
  • İleti: 192
Saat Problemi
« : Ağustos 04, 2017, 05:00:27 ÖS »
Arkadaşlar harika bir algoritma sorusu soracağım. Şu üzerinde çalıştığım bir android projesi için takıldığım bir algoritma var. Olay şu:

Seçim kutularından (Spinner olarak bilinir) saat ve dakika seçiyoruz. Önce 1.saati seçiyoruz. Bunun için Hours dizimiz (0-23)'ten oluşuyor. Daha sonra 1.dakikayı seçiyoruz. Bunun için de tahmin edebileceğiniz gibi Minutes dizimiz (0-59)'dan oluşuyor. Şimdi gelelim eğlenceli kısma. Diğer saat ve dakika seçimi bir öncekinden 4 saat uzaklıkta olmak zorunda. Ve bu koşula göre Hours ve Minutes dizilerini dolduracak algroitmaya ihtiyacım var. Örnek verecek olursak;
  • 1.saat : 1.dakika = 15 : 39 olsun diyelim.
Bu durumda 2. saat için Hours dizisi (19-20-21-22-23-00-01-02-03-04-05-06-07-08-09-10-11)'den oluşacak. 2.dakika için ise durum saate göre değişiyor. Mesela 2.saati 19 seçersek 2.dakika için Minutes dizisi (39-40-41-42-...-59)'dan oluşacak. Çünkü (15:39 + 4 saat) = 19:39 oluyor ve daha öncesi seçilemez. Veya 2.saati 11 seçersek 2.dakika için Minutes dizisi (00-01-02-03-04-...-39)'dan oluşacak. Çünkü (15:39 - 4 saat) = 11:39 oluyor ve daha sonrası seçilemez.

İşte bu ikinci saat seçimini yapabildim yani durumlara göre dizileri doldurabiliyorum. Ancak üçüncü saat seçimi de yapmak gerektiğinde, dizileri doldurmak için gereken algoritmayı yazamadım. Yine örnek verecek olursak;
  • 1.saat : 1.dakika = 01 : 53 olsun diyelim,
  • 2.saat : 2.dakika = 14 : 25 olsun diyelim.
Bu durumda 3.saat için Hours dizisi (18-19-20-21)'den oluşmalı. Çünkü en son ki seçim olan 14'ten 4 saat sonra 18 oluyor ve ilk seçim olan 01'den 4 saat önce yani 21'e kadar olmalı. 3.dakika için de yine farklı durumlar var. Mesela 3.saat 18 seçilmiş ise 3.dakika için Minutes dizisi (25-26-27-28-...-59)'dan oluşmalı. Eğer 3.saat 21 seçilmiş ise 3.dakika için Minutes dizisi (00-01-02-03-04-05-...53)'den oluşmalı. Var mı algoritma kodunu çıkarabilecek ? Anlamadığınız yer olursa sorabilirsiniz. Görelim şeklinizi :D


Çevrimdışı İsmail ULUTÜRK

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 1386
  • Festina Lente
Ynt: Saat Problemi
« Yanıtla #1 : Ağustos 05, 2017, 03:41:39 ÖS »
Öncelikle 2. saati bulup 3. yü bulamamanın sebebini açıkçası anlayamadım. Anlattığın kadarıyla sadece bir önceki saat önemli, ilki için çağırdığın fonksiyonu tekrar çağırman yetmeyecek mi?

İkincisi de dizilerle uğraşmak yerine bütün değerleri saniyeye çevirirsen basit aritmetikle işini çözebilirsin.

Progress isn't made by early risers. It's made by lazy men trying to find easier ways to do something.
- Robert Heinlein

Çevrimdışı Burak Özpoyraz

  • OTOKON Üyesi
  • *
  • İleti: 192
Ynt: Saat Problemi
« Yanıtla #2 : Ağustos 05, 2017, 04:15:23 ÖS »
Aslında öyle değil, bu seçim otomatik seçim için. Yani bu seçtiğimiz her gün sürekli olacak. Yani ilk saat 13 : 30 ise 3. seçim bir sonraki gün 13.30'dan 4 saat önce olmalı. Problem ondan kaynaklanıyor.

Çevrimdışı Onur Varol

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 3029
Ynt: Saat Problemi
« Yanıtla #3 : Ağustos 05, 2017, 04:51:54 ÖS »
Öncelikle 2. saati bulup 3. yü bulamamanın sebebini açıkçası anlayamadım. Anlattığın kadarıyla sadece bir önceki saat önemli, ilki için çağırdığın fonksiyonu tekrar çağırman yetmeyecek mi?

İkincisi de dizilerle uğraşmak yerine bütün değerleri saniyeye çevirirsen basit aritmetikle işini çözebilirsin.

Soruyu ben de cok iyi anlamadim ama genel bir cozum istiyorsa illa 4 saatle sinirli degilde 4saat15dk sonrasi icinde calissin istiyorsa meselaherseyi dakikaya cevirerek baska H*60+M yapip. Sonrasinda dakika cinsinden istedigini ekle cikar. Diger bir onemli nokta sonraki gune gecince olacak. Ozamanda mod alabilirsin 24*60 ile