PBP Birden fazla değişken karşılaştırma.

Başlatan sayment, 15 Ağustos 2010, 19:25:53

RcALTIN

Alıntı yapılan: sayment - 17 Ağustos 2010, 15:27:26
define osc 4
'****************************************************************
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4    
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2   
DEFINE LCD_EREG PORTB   
DEFINE LCD_EBIT 3     
DEFINE LCD_BITS 4      
DEFINE LCD_LINES 4  
'****************************************************************
TRISB=$00
TRISD=$70
PORTD=$00
'****************************************************************
BUTON VAR BYTE
SIFRE VAR BYTE[3]
TUS VAR BYTE[3]
A var byte
B VAR BYTE
C VAR BYTE
'****************************************************************
SYMBOL SATIR1=PORTD.0
SYMBOL SATIR2=PORTD.1
SYMBOL SATIR3=PORTD.2
SYMBOL SATIR4=PORTD.3
SYMBOL SUTUN1=PORTD.4
SYMBOL SUTUN2=PORTD.5
SYMBOL SUTUN3=PORTD.6
SYMBOL KAPI  =PORTD.7
'****************************************************************
SIFRE[0] = 5
SIFRE[1] = 0
SIFRE[2] = 2
SIFRE[3] = 0
A = 0 : B = 1 : C = 0
'****************************************************************
MENU:
IF C = 4 THEN GOSUB DOGRULA
GOSUB TARAMA
GOTO MENU
'****************************************************************
TARAMA:

SATIR1=1
    IF SUTUN1=1 THEN BUTON=1  : GOSUB LCD 
    IF SUTUN2=1 THEN BUTON=2  : GOSUB LCD
    IF SUTUN3=1 THEN BUTON=3  : GOSUB LCD 
SATIR1=0

SATIR2=1
    IF SUTUN1=1 THEN BUTON=4  : GOSUB LCD 
    IF SUTUN2=1 THEN BUTON=5  : GOSUB LCD 
    IF SUTUN3=1 THEN BUTON=6  : GOSUB LCD 
SATIR2=0

SATIR3=1
    IF SUTUN1=1 THEN BUTON=7  : GOSUB LCD
    IF SUTUN2=1 THEN BUTON=8  : GOSUB LCD 
    IF SUTUN3=1 THEN BUTON=9  : GOSUB LCD 
SATIR3=0

SATIR4=1
    IF SUTUN1=1 THEN BUTON=11 : GOSUB LCD 
    IF SUTUN2=1 THEN BUTON=0  : GOSUB LCD 
    IF SUTUN3=1 THEN BUTON=12 : GOSUB LCD 
SATIR4=0

PAUSE 250
RETURN
'****************************************************************
LCD:
C = C + 1

IF B = 1 THEN
    IF A=4 THEN A=0
    TUS[A]=BUTON 
    KAPI = 1
    PAUSE 100
    KAPI = 0
    GOSUB KONTROL
    A=A+1
ELSE
    GOTO MENU 
ENDIF

RETURN
'****************************************************************
KONTROL:
    IF SIFRE[A] = TUS[A] THEN 
    B = 1
    ELSE
    B = 0 
    ENDIF
RETURN   
'****************************************************************
DOGRULA:

IF B = 1 THEN 
    LCDOUT $FE, $80, "SIFRE DOGRU" 
ELSE
    LCDOUT $FE, $80, "SIFRE YANLIS"
ENDIF
RETURN  
'****************************************************************
end


Böyle bir program yazdım ama hala tam olarak çalışmıyor. Doğru şifreyi girince kabul ediyor LCD 'de şifre doğru yazıyor. Ama sorun şu: diyelim şifre 1234 . Şifredeki rakamların dışında herhangi bir tuşa bastığımızda ikinci basışta şifre yanlış yazıyor. Normalde 4 hane tamamlanınca yazması lazım. Programı takip ederek yapması gerekenlere bakıyorum ama kaçırdığım bir nokta var galiba..

Açıkçası bir for döngüsü bile göremedim; aşırı dağınık ve düzensiz olmuş, ilerleyen zamanlarda bu şekilde yazarak işin içinden çıkmak mümkün olamaz... Bir program yazmaya başlamadan önce oturup düşünmeli ve algoritmasını oluşturmalısınız, programın işleyişini adımlamalısınız; bu program için en temel olarak şöyle düşünmek gerekir:

-basılan tuşu algıla
-basılan tuş, sıra şifrenin kaçıncı hanesine yerleşecekse oraya yerleşsin (anlaşılabileceği üzere hane yerleşimini hesaplayan bir bölüm gerekli)
-son hane girilince "şifre kontrol mekanizması"nı çalıştır
-kontrol edildikten sonra "karar mekanızması"na göre şifreyi doğrulayıp kapıyı aç veya yanlış olduğunu bildir
-yeni giriş için tüm birimleri sıfırla...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

orhanc

anladığım kadarıyla  şu kısımda sadece 1i kontrol ediyorsun. tek sayı kontrolü yapıyorsun sürekli. Değişken isimlerini daha anlamlı birşey verirsen kontrolü kolay olur.

IF B = 1 THEN
    IF A=4 THEN A=0
    TUS[A]=BUTON
    KAPI = 1
    PAUSE 100
    KAPI = 0
    GOSUB KONTROL
    A=A+1
ELSE
    GOTO MENU


i'm doing nothing... Giddy Up  http://www.drorhan.com

sayment

Alıntı yapılan: RcALTIN - 17 Ağustos 2010, 15:45:40
Alıntı yapılan: sayment - 17 Ağustos 2010, 15:27:26
define osc 4
'****************************************************************
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4    
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2   
DEFINE LCD_EREG PORTB   
DEFINE LCD_EBIT 3     
DEFINE LCD_BITS 4      
DEFINE LCD_LINES 4  
'****************************************************************
TRISB=$00
TRISD=$70
PORTD=$00
'****************************************************************
BUTON VAR BYTE
SIFRE VAR BYTE[3]
TUS VAR BYTE[3]
A var byte
B VAR BYTE
C VAR BYTE
'****************************************************************
SYMBOL SATIR1=PORTD.0
SYMBOL SATIR2=PORTD.1
SYMBOL SATIR3=PORTD.2
SYMBOL SATIR4=PORTD.3
SYMBOL SUTUN1=PORTD.4
SYMBOL SUTUN2=PORTD.5
SYMBOL SUTUN3=PORTD.6
SYMBOL KAPI  =PORTD.7
'****************************************************************
SIFRE[0] = 5
SIFRE[1] = 0
SIFRE[2] = 2
SIFRE[3] = 0
A = 0 : B = 1 : C = 0
'****************************************************************
MENU:
IF C = 4 THEN GOSUB DOGRULA
GOSUB TARAMA
GOTO MENU
'****************************************************************
TARAMA:

SATIR1=1
    IF SUTUN1=1 THEN BUTON=1  : GOSUB LCD 
    IF SUTUN2=1 THEN BUTON=2  : GOSUB LCD
    IF SUTUN3=1 THEN BUTON=3  : GOSUB LCD 
SATIR1=0

SATIR2=1
    IF SUTUN1=1 THEN BUTON=4  : GOSUB LCD 
    IF SUTUN2=1 THEN BUTON=5  : GOSUB LCD 
    IF SUTUN3=1 THEN BUTON=6  : GOSUB LCD 
SATIR2=0

SATIR3=1
    IF SUTUN1=1 THEN BUTON=7  : GOSUB LCD
    IF SUTUN2=1 THEN BUTON=8  : GOSUB LCD 
    IF SUTUN3=1 THEN BUTON=9  : GOSUB LCD 
SATIR3=0

SATIR4=1
    IF SUTUN1=1 THEN BUTON=11 : GOSUB LCD 
    IF SUTUN2=1 THEN BUTON=0  : GOSUB LCD 
    IF SUTUN3=1 THEN BUTON=12 : GOSUB LCD 
SATIR4=0

PAUSE 250
RETURN
'****************************************************************
LCD:
C = C + 1

IF B = 1 THEN
    IF A=4 THEN A=0
    TUS[A]=BUTON 
    KAPI = 1
    PAUSE 100
    KAPI = 0
    GOSUB KONTROL
    A=A+1
ELSE
    GOTO MENU 
ENDIF

RETURN
'****************************************************************
KONTROL:
    IF SIFRE[A] = TUS[A] THEN 
    B = 1
    ELSE
    B = 0 
    ENDIF
RETURN   
'****************************************************************
DOGRULA:

IF B = 1 THEN 
    LCDOUT $FE, $80, "SIFRE DOGRU" 
ELSE
    LCDOUT $FE, $80, "SIFRE YANLIS"
ENDIF
RETURN  
'****************************************************************
end


Böyle bir program yazdım ama hala tam olarak çalışmıyor. Doğru şifreyi girince kabul ediyor LCD 'de şifre doğru yazıyor. Ama sorun şu: diyelim şifre 1234 . Şifredeki rakamların dışında herhangi bir tuşa bastığımızda ikinci basışta şifre yanlış yazıyor. Normalde 4 hane tamamlanınca yazması lazım. Programı takip ederek yapması gerekenlere bakıyorum ama kaçırdığım bir nokta var galiba..

Açıkçası bir for döngüsü bile göremedim; aşırı dağınık ve düzensiz olmuş, ilerleyen zamanlarda bu şekilde yazarak işin içinden çıkmak mümkün olamaz... Bir program yazmaya başlamadan önce oturup düşünmeli ve algoritmasını oluşturmalısınız, programın işleyişini adımlamalısınız; bu program için en temel olarak şöyle düşünmek gerekir:

-basılan tuşu algıla
-basılan tuş, sıra şifrenin kaçıncı hanesine yerleşecekse oraya yerleşsin (anlaşılabileceği üzere hane yerleşimini hesaplayan bir bölüm gerekli)
-son hane girilince "şifre kontrol mekanizması"nı çalıştır
-kontrol edildikten sonra "karar mekanızması"na göre şifreyi doğrulayıp kapıyı aç veya yanlış olduğunu bildir
-yeni giriş için tüm birimleri sıfırla...

Haklısınız bende programı yazmadan önce oturup kağıt üzerinde oluşturma taraftarıyım. Öyle yaptım çalışmadı bu sabah kalkınca bu hale getirdim. Dün diğer arkadaşların söylediklerine göre oluşturdum bunu. Şifrenin herhangi bir basamağı yanlış olduğunda sizin  BOOLEAN olarak tanımlayın dediğiniz değişkeni ben burada "0" yapıyorum. Sonra o değişkene bakarak şifrenin doğru yada yanlış olduğunu kontrol ediyorum. Dün arkadaşların söylediği mantıklı geldi bir de öyle yapayım dedim. Ayrıca genelde ana menu kullanarak yapıyorum daha güzel ve toplu oluyo ama bu dediğiniz gibi biraz dağınık oldu genede söylediğiniz aşamalar programda var zaten. TARAMA isimli etiket basılan tuşun algılandığı bölüm.Tuşa basıldı ise GOSUB LCD komutu ile LCD etiketine gidiyor ki orası da basılan tuşun hanelere yerleştirildiği yer.Söylediğiniz üçüncü basamağı ise LCD etiketinin altına C isimli bir değişken koydum etikete her gelindiğinde bir artıyor ve onun değerine bakarak kaç kere tuşa basıldığını kontrol ediyoruz. Yazdığınız dördüncü adımda mevcut onuda MENU etiketinin altında IF C=4 THEN GOSUB DOGRULA komutu ile yaptım. C değişkeni 4 ise yani 4 kez tuşa basıldıysa DOĞRULA etiketine gidiyor ve orada şifrenin doğru yada yanlış olup olmadığını kontrol ediyor.Sadece yazdığınız işlem basamaklarının son kısmı yok.

sayment

Alıntı yapılan: orhanc - 17 Ağustos 2010, 15:55:23
anladığım kadarıyla  şu kısımda sadece 1i kontrol ediyorsun. tek sayı kontrolü yapıyorsun sürekli. Değişken isimlerini daha anlamlı birşey verirsen kontrolü kolay olur.

IF B = 1 THEN
    IF A=4 THEN A=0
    TUS[A]=BUTON
    KAPI = 1
    PAUSE 100
    KAPI = 0
    GOSUB KONTROL
    A=A+1
ELSE
    GOTO MENU


Bu kısmı şu yüzden yazdım. En üstteki IF komutu B değişkeninin 1 yada 0 olup olmadığını kontrol ediyor. Onuda şifrenin ilk basamağı yanlış girilirse diğer hanelere bakmadan direk başa dönüp 4 hanenin tamamlanmasıni beklesin diye yaptım. Sonuçta ilk hane yanlış olunca şifrede yanlış olacak diğerlerine bakmaya gerek duymadım zaten yazılan haneyi silme gibi bir şansım da yok şu anda.

RcALTIN

Alıntı yapılan: sayment - 17 Ağustos 2010, 16:00:20
Haklısınız bende programı yazmadan önce oturup kağıt üzerinde oluşturma taraftarıyım. Öyle yaptım çalışmadı bu sabah kalkınca bu hale getirdim. Dün diğer arkadaşların söylediklerine göre oluşturdum bunu. Şifrenin herhangi bir basamağı yanlış olduğunda sizin  BOOLEAN olarak tanımlayın dediğiniz değişkeni ben burada "0" yapıyorum. Sonra o değişkene bakarak şifrenin doğru yada yanlış olduğunu kontrol ediyorum. Dün arkadaşların söylediği mantıklı geldi bir de öyle yapayım dedim. Ayrıca genelde ana menu kullanarak yapıyorum daha güzel ve toplu oluyo ama bu dediğiniz gibi biraz dağınık oldu genede söylediğiniz aşamalar programda var zaten. TARAMA isimli etiket basılan tuşun algılandığı bölüm.Tuşa basıldı ise GOSUB LCD komutu ile LCD etiketine gidiyor ki orası da basılan tuşun hanelere yerleştirildiği yer.Söylediğiniz üçüncü basamağı ise LCD etiketinin altına C isimli bir değişken koydum etikete her gelindiğinde bir artıyor ve onun değerine bakarak kaç kere tuşa basıldığını kontrol ediyoruz. Yazdığınız dördüncü adımda mevcut onuda MENU etiketinin altında IF C=4 THEN GOSUB DOGRULA komutu ile yaptım. C değişkeni 4 ise yani 4 kez tuşa basıldıysa DOĞRULA etiketine gidiyor ve orada şifrenin doğru yada yanlış olup olmadığını kontrol ediyor.Sadece yazdığınız işlem basamaklarının son kısmı yok.

Programınız o maddeleri yerine getiriyor olabilir ama bu şekilde sorunlarla karşılaştığınızda işin içinden kolay kolay çıkamayacağınızı belirtmek istedim aslında, çok farklı etiketler altında çok farklı işlemler yaptığınızı gördüğüm için bunu belirttim önceki mesajda da. Daha derli toplu olması açısından programın işleyiş adımlarını yaptım sizin adınıza, yoksa sizin yazdığınızda bu adımları yapmıyor değil ancak tekarlıyorum çok  dağınık; bir devlet yönetimi gibi düşünün yasama, yürütme, yargı ayrı olmalıdır ki hepsi yalnızca kendi üzerine düşen kısmı gerçekleştirmeli :) Bu şekilde yazmaya devam edecek olursanız programın 4 basamaklı şifre doğruluğu kontrolü yapmaktan daha öteye pek geliştirilebileceğini sanmıyorum... Ben de pic basic ile başladım ve tamamen aynı yollardan aynı projeyle geçtiğim için tecrübelerimi paylaşıyorum yanlış anlamayın.
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

sayment

Alıntı yapılan: RcALTIN - 17 Ağustos 2010, 16:55:57
Alıntı yapılan: sayment - 17 Ağustos 2010, 16:00:20
Haklısınız bende programı yazmadan önce oturup kağıt üzerinde oluşturma taraftarıyım. Öyle yaptım çalışmadı bu sabah kalkınca bu hale getirdim. Dün diğer arkadaşların söylediklerine göre oluşturdum bunu. Şifrenin herhangi bir basamağı yanlış olduğunda sizin  BOOLEAN olarak tanımlayın dediğiniz değişkeni ben burada "0" yapıyorum. Sonra o değişkene bakarak şifrenin doğru yada yanlış olduğunu kontrol ediyorum. Dün arkadaşların söylediği mantıklı geldi bir de öyle yapayım dedim. Ayrıca genelde ana menu kullanarak yapıyorum daha güzel ve toplu oluyo ama bu dediğiniz gibi biraz dağınık oldu genede söylediğiniz aşamalar programda var zaten. TARAMA isimli etiket basılan tuşun algılandığı bölüm.Tuşa basıldı ise GOSUB LCD komutu ile LCD etiketine gidiyor ki orası da basılan tuşun hanelere yerleştirildiği yer.Söylediğiniz üçüncü basamağı ise LCD etiketinin altına C isimli bir değişken koydum etikete her gelindiğinde bir artıyor ve onun değerine bakarak kaç kere tuşa basıldığını kontrol ediyoruz. Yazdığınız dördüncü adımda mevcut onuda MENU etiketinin altında IF C=4 THEN GOSUB DOGRULA komutu ile yaptım. C değişkeni 4 ise yani 4 kez tuşa basıldıysa DOĞRULA etiketine gidiyor ve orada şifrenin doğru yada yanlış olup olmadığını kontrol ediyor.Sadece yazdığınız işlem basamaklarının son kısmı yok.

Programınız o maddeleri yerine getiriyor olabilir ama bu şekilde sorunlarla karşılaştığınızda işin içinden kolay kolay çıkamayacağınızı belirtmek istedim aslında, çok farklı etiketler altında çok farklı işlemler yaptığınızı gördüğüm için bunu belirttim önceki mesajda da. Daha derli toplu olması açısından programın işleyiş adımlarını yaptım sizin adınıza, yoksa sizin yazdığınızda bu adımları yapmıyor değil ancak tekarlıyorum çok  dağınık; bir devlet yönetimi gibi düşünün yasama, yürütme, yargı ayrı olmalıdır ki hepsi yalnızca kendi üzerine düşen kısmı gerçekleştirmeli :) Bu şekilde yazmaya devam edecek olursanız programın 4 basamaklı şifre doğruluğu kontrolü yapmaktan daha öteye pek geliştirilebileceğini sanmıyorum... Ben de pic basic ile başladım ve tamamen aynı yollardan aynı projeyle geçtiğim için tecrübelerimi paylaşıyorum yanlış anlamayın.

Estağfirullah hocam harika konuşmuşsunuz çok hoşuma gitti teşekkür ederim :) Bi akış diyagramı çizip yeniden yapayım en iyisi :)

sayment

#36
define osc 4
'****************************************************************
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4    
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2   
DEFINE LCD_EREG PORTB   
DEFINE LCD_EBIT 3     
DEFINE LCD_BITS 4      
DEFINE LCD_LINES 4  
'****************************************************************
TRISB=$00
TRISD=$70
PORTD=$00
'****************************************************************
BUTON VAR BYTE
SIFRE VAR BYTE[3]
TUS VAR BYTE[3]
BASAMAK VAR BYTE
I VAR BYTE      'Döngü elemanı 
'****************************************************************
SYMBOL SATIR1=PORTD.0
SYMBOL SATIR2=PORTD.1
SYMBOL SATIR3=PORTD.2
SYMBOL SATIR4=PORTD.3
SYMBOL SUTUN1=PORTD.4
SYMBOL SUTUN2=PORTD.5
SYMBOL SUTUN3=PORTD.6
SYMBOL LED   =PORTD.7
'****************************************************************
PROGRAM_BASI:
'**************************************************************** 
SIFRE[0] = 5
SIFRE[1] = 0
SIFRE[2] = 2
SIFRE[3] = 0
'****************************************************************
BASAMAK = 0
'****************************************************************
PAUSE 300
LCDOUT $FE,1,"SIFRE:"
'****************************************************************
MENU:
GOSUB TUS_KONTROL
GOSUB YUKLE
IF BASAMAK = 4 THEN GOSUB ONAY 'Son basamak geldikten sonra şifre kontrol et
GOTO MENU
'****************************************************************
TUS_KONTROL:
SATIR1=1
    IF SUTUN1=1 THEN BUTON=1  : GOTO CIKIS1 
    IF SUTUN2=1 THEN BUTON=2  : GOTO CIKIS1
    IF SUTUN3=1 THEN BUTON=3  : GOTO CIKIS1 
SATIR1=0

SATIR2=1
    IF SUTUN1=1 THEN BUTON=4  : GOTO CIKIS1
    IF SUTUN2=1 THEN BUTON=5  : GOTO CIKIS1
    IF SUTUN3=1 THEN BUTON=6  : GOTO CIKIS1
SATIR2=0

SATIR3=1
    IF SUTUN1=1 THEN BUTON=7  : GOTO CIKIS1
    IF SUTUN2=1 THEN BUTON=8  : GOTO CIKIS1
    IF SUTUN3=1 THEN BUTON=9  : GOTO CIKIS1
SATIR3=0

SATIR4=1
    IF SUTUN1=1 THEN BUTON=10 : GOTO CIKIS1
    IF SUTUN2=1 THEN BUTON=0  : GOTO CIKIS1 
    IF SUTUN3=1 THEN BUTON=12 : GOTO CIKIS1
SATIR4=0
PAUSE 100

GOTO TUS_KONTROL

CIKIS1:
PAUSE 250
RETURN
'****************************************************************
YUKLE:
    TUS[BASAMAK] = BUTON 
    LCDOUT "*"
    LED = 1
    PAUSE 50
    LED = 0
    BASAMAK = BASAMAK + 1  
RETURN
'****************************************************************
ONAY:
    GOSUB TUS_KONTROL
    IF BUTON = 12 THEN 
    GOTO SIFRE_KONTROL
    ELSE 
    GOTO ONAY
    ENDIF
'****************************************************************   
SIFRE_KONTROL:
    FOR  I=0 TO 3
        IF SIFRE[I]<>TUS[I] THEN 
            LCDOUT $FE,$80,"SIFRE YANLIS"
            GOTO CIKIS2
        ENDIF
    NEXT I
    
    LCDOUT $FE,$80, "SIFRE DOGRU"
    
CIKIS2:
    PAUSE 3000  'Üç saniye sonra program basa döner.
    GOTO PROGRAM_BASI
RETURN
'****************************************************************  
END


Sonunda hallettim programın çalışır hali bu.:) Onay tuşu da ekledim 4 haneli şifreyi girdikten sonra # tuşuna basarsak değerlendirmeye alıyor.Ama program sıfırlama için bir tuş eklemedim onu otomatik yaptım. Şifre yanlış yada doğru ise 3 saniye sonra program otomatik olarak başa dönüyor. Yardım eden herkeze en içten teşekkürlerimi sunarım.Herkese kolay gelsin.

Samet.

RcALTIN

Tebrikler, bahsettiğim şey buydu son hali şimdi oldukça düzenli görünüyor ...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

sayment

Alıntı yapılan: RcALTIN - 17 Ağustos 2010, 19:25:22
Tebrikler, bahsettiğim şey buydu son hali şimdi oldukça düzenli görünüyor ...

Teşekkür ederim :)

Mucit23

Merhaba arkadaşlar
İzninizle bende konuya bir ekleme yapmak istiyorum;
Şöyle bir sorum var bu devrede 4 haneli bir şifre girilmesi gerekiyor. Peki diyelim kullanıcı 4 ile 8 hane arasında bir şifre girmek istiyor. şifreyi min. 4  max.8 haneli girebilir ama tam olarak kaç haneli bir şifre gireceği bilinmiyor. Bunun için nasıl bir işlem yapmak gerekir.

RcALTIN

#40
Alıntı yapılan: mucit23 - 23 Kasım 2010, 23:45:43
Merhaba arkadaşlar
İzninizle bende konuya bir ekleme yapmak istiyorum;
Şöyle bir sorum var bu devrede 4 haneli bir şifre girilmesi gerekiyor. Peki diyelim kullanıcı 4 ile 8 hane arasında bir şifre girmek istiyor. şifreyi min. 4  max.8 haneli girebilir ama tam olarak kaç haneli bir şifre gireceği bilinmiyor. Bunun için nasıl bir işlem yapmak gerekir.

Öncelikle PBP pek hatırlamıyorum artık, biraz mantık yürütelim... kişi şifreleri eepromda saklanır genelde. o halde birde hane bilgisi saklamamızda sakınca yoktur, ilk olarak boş bir dizi oluştururuz max haneye göre boyutu olan(yani 8 boyutlu bir dizi) her haneye kullanıcının şifre olarak belirleyemeyeceği bir değer atarız (10 gibi), daha sonra kullanıcıdan şifre girilmesi istenir, şifre kaydedilirken dizide boş karakterimize (az önce 10 olarak belirlemiştik) kadar olan kısmı bir döngü ile saydırırız. Bu saydırdığımız kısım kullanıcının girdiği şifrenin hane sayısı oluyor, bunu eeproma yazarız, ardından(saydırma işlemiyle eş zamanlı da olabilir) girilen rakamları da eeproma yazarız. bu şekilde olursa dikkat edilmesi gereken nokta, herkes için 8 + hane bilgisi = 9 byte(her 2 hane birleştirilip tek byte olarak da yazılabilir, o zaman 5 byte ile kurtulunabilir) yer ayırmanız gerekiyor, çünkü eepromda karşılaştırma yaparken bir düzene göre adreslerden okuma yapmanız gerekiyor(1. kişi için 0.byte, 2. için 9.byte, 3. için 18.byte gibi), benim aklıma ilk gelen yöntem bu...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

Mucit23

Bence anlattığınız çok mantıklı. Eğer Değişken çokluğu yüzünden sorun çıkmaz ise her bir şifre bilgisi 8 dizilik değişken içerisine teker tekerde yerleştirilir. Bence böylesi karşılaştırma için daha sağlıklı olur.  Şifrenin kaç haneli olduğuda  Dögüyle ysaydırma yapıp anlarız şifre kaç haneli ise ona göre karşılaştırma yaparız. Olabilir böyle değilmi