Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: Zoroaster - 06 Aralık 2016, 01:11:22

Başlık: Klavye algoritması
Gönderen: Zoroaster - 06 Aralık 2016, 01:11:22
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?
Başlık: Ynt: Klavye algoritması
Gönderen: sinus - 06 Aralık 2016, 01:38:10
{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.
Başlık: Ynt: Klavye algoritması
Gönderen: Zoroaster - 06 Aralık 2016, 01:44:29
Ö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?
Başlık: Ynt: Klavye algoritması
Gönderen: sinus - 06 Aralık 2016, 02:02:43
Şö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ı?



Başlık: Ynt: Klavye algoritması
Gönderen: Zoroaster - 06 Aralık 2016, 02:08:10
Ben henüz algoritmayı kuramadım. Senin mantık üzerine gidilirse işe yarayacak gibi görünüyor.
Başlık: Ynt: Klavye algoritması
Gönderen: Zoroaster - 06 Aralık 2016, 02:15:36
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.
Başlık: Ynt: Klavye algoritması
Gönderen: sinus - 06 Aralık 2016, 02:31:30
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.
Başlık: Ynt: Klavye algoritması
Gönderen: serdararikan - 06 Aralık 2016, 11:40:40
LIFO diyelim.
Başlık: Ynt: Klavye algoritması
Gönderen: JOKERAS - 06 Aralık 2016, 17:57:11
Butonları tara zorO usta.
Tarayıp karşılaştır hangi buton basılmış.
Başlık: Ynt: Klavye algoritması
Gönderen: Cemre. - 06 Aralık 2016, 19:18:28
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... :)