Klavye algoritması

Başlatan Zoroaster, 06 Aralık 2016, 01:11:22

Zoroaster

Butonlarla yapılmış bir klavye düşünün.

1) Herhangi bir tuşa basılınca o tuşa ait lamba yanacak.
2) Birden fazla tuşa basılırsa sadece basılan en son tusa ait lamba yanacak. Bir önceki sönecek.
3) Birden fazla tuşa basılmış ve son basılan tusa ait lamba yanarken herhangi bir basılı tus bırakılırsa gene en son basılanla ilgili lamba yanacak. Anlatamayacağım örnek üzerinde açıklayacağım.

Örneğin 5 butonumuz varve sıra ile soldan sağa doğru 12345 tuşlarına basınca (butonlar bırakılmadan) sıra ile 10000  02000 00300 00040 00005 şeklinde lambalar yanacak.

Yukarıda ki sırada basılan butonlarda en son 00005 lambası yanıyordu.

Şimdi 1234 şeklinde parmağımı 5 den çekince  00040 lambası yandı.
Şimdi 234 şeklinde  parmağımı 1 den çekince 00040 lambası yanmaya devam ediyor.
Şimdi 23 şeklinde parmağımı 4 den çekince 00300 lambası yandı.
Şimdi 2 şeklinde parmağımı 3 den çekince 02000 lambası yandı.

Bunu N adet buton ve N adet lamba için düşünün.

Lambaları yakma algoritmasını kurabilirmisiniz?
Seytan deliginden kacti.

sinus

#1
{1,2,3,4,5..} değerlikli girişler var, hangisi en büyük ise hafızada onu tutuyoruz.

Çıkış, dizinin max. değerine eşit oluyor.

Kısaca : "En büyüğü bulma algoritması"


edit: Basılma sırasını da hafızada tutmak gerekiyor.

Zoroaster

Örneğimde butonlara basış sırasını 12345 vermiştim.

Bu kez de 54321 olarak bastığımızı düşünelim.

Düşündüğün algoritma sorunu çözüyor mu?
Seytan deliginden kacti.

sinus

Şöyle düzelteyim;

Yazılımda girişlere ait değişkenler mevcut. Buton_5, Buton_4...

Değişkenler basılma sırasına göre değer alıyor.

Buton_5=1
Buton_4=2
Buton_3=3
Buton_2=4
Buton_1=5

Çıkışta, en büyük değere ait lamba yanacak.

Örneğin 15324 sırası ile basıldığında;

Buton_1=1
Buton_5=2
Buton_3=3
Buton_2=4
Buton_4=5

Bu durumda 4. lamba yanmalı.

Gözden kaçırdığım bir şey var mı?




Zoroaster

Ben henüz algoritmayı kuramadım. Senin mantık üzerine gidilirse işe yarayacak gibi görünüyor.
Seytan deliginden kacti.

Zoroaster

Yalnız söndürmeye başladık sonra  tekrar yakmaya başladık ne olacak?

12345 bastık  2'i kaldırdık 1345 basılı ve 5 yanıyor. Tekrar 2'e basınca bu kez 2 yanacak.

Algoritmada biraz daha oynamak lazım.
Seytan deliginden kacti.

sinus

Bu durumda; Buton_2=6 değerini alacak.

Fakat eksilen butonlar nedeniyle, sıralamanın buton sayısı ile ilişkili güncellenmesi gerekecek.

Yoksa max değer sürekli arttığı için program şişme yapar.

serdararikan


JOKERAS

Butonları tara zorO usta.
Tarayıp karşılaştır hangi buton basılmış.

Cemre.

Linked list kullanımı bir çözüm olabilir. Her bir butona basma event'ında sona bir node eklenecek. Led yakma işini yapan döngü ise her defasında list'i tarayıp next'i null olan elemanı bulacak (son elemanı bulma yöntemi) ve içindeki değere bakarak hangi ledi yakacağına karar verecek. Buton bırakıldığında ise list taranıp o butonu içeren en son node silinecek.

Galiba böyle bir şey yapılabilir @Zoroaster hocam.
@CoDeR hocam duymasın... :)