YER1[1]=SAAT
YER1[2]=DAK
YER1[3]=GUN
YER1[4]=AY
YER1[5]=YIL
YER2[1]=YER1[1]
YER3[1]=YER2[1]
YER4[1]=YER3[1]
YER5[1]=YER4[1]
YER2[2]=YER1[2]
YER3[2]=YER2[2]
YER4[2]=YER3[2]
YER5[2]=YER4[2]
YER2[3]=YER1[3]
YER3[3]=YER2[3]
YER4[3]=YER3[3]
YER5[3]=YER4[3]
YER2[4]=YER1[4]
YER3[4]=YER2[4]
YER4[4]=YER3[4]
YER5[4]=YER4[4]
YER2[5]=YER1[5]
YER3[5]=YER2[5]
YER4[5]=YER3[5]
YER5[5]=YER4[5]
Yukardaki kodda yer1 değişkeni ilk kayıt olan saat tarih verisi.Ben bu veriyi 4 farklı veri olarak her olay olduğunda bir kaydırarak kaydetmek istiyorum.Fakat ekranda tüm veriler aynı geliyor.Şu an itibarı ile net düşünemiyorum.Yanlışım nerde?
mesaj birleştirme:: 26 Mayıs 2015, 00:43:21
Arkadaşlar kafa dank etti.Hatayı buldum hatam aktarma sırası ile ilgili olunca değerler sürekli aynı oluyordu sıralama değişince düzeldi.Bu saatte bu kadar olur heralde :))
doğrusu bu şekil olacak.
YER1[1]=SAAT
YER1[2]=DAK
YER1[3]=GUN
YER1[4]=AY
YER1[5]=YIL
YER5[1]=YER4[1]
YER4[1]=YER3[1]
YER3[1]=YER2[1]
YER2[1]=YER1[1]
YER5[2]=YER4[2]
YER4[2]=YER3[2]
YER3[2]=YER2[2]
YER2[2]=YER1[2]
YER5[3]=YER4[3]
YER4[3]=YER3[3]
YER3[3]=YER2[3]
YER2[3]=YER1[3]
YER5[4]=YER4[4]
YER4[4]=YER3[4]
YER3[4]=YER2[4]
YER2[4]=YER1[4]
YER5[5]=YER4[5]
YER4[5]=YER3[5]
YER3[5]=YER2[5]
YER2[5]=YER1[5]
Ayrıca bu tip bir kaydı daha sade nasıl yapabiliriz varmı bir yöntemi?
Hepsini tek bir dizide toplarsanız, veya 2 boyutlu bir dizi yaparsanız, tek tek yazmaya gerek kalmaz, döngü kullanarak halledilebilir.
5 adet yer var, her yerin 5 adet verisi var: "saat dakika gün ay yıl"
#define YER_SAYISI 5
#define VERI_SAYISI 5
int bilgiler[YER_SAYISI][VERI_SAYISI]= {
0,0,0,0,0, //1.yerin verileri
0,0,0,0,0, //2.yerin verileri
0,0,0,0,0, //3.yerin verileri
0,0,0,0,0, //4.yerin verileri
0,0,0,0,0, //5.yerin verileri
};
bilgiler[0][1]=SAAT;
bilgiler[0][2]=DAK ;
bilgiler[0][3]=GUN;
bilgiler[0][4]=AY;
bilgiler[0][5]=YIL;
//manuel yontem ile böyle, tek tek yazmak gerekir:
bilgiler[1][0]=bilgiler[0][0]
bilgiler[1][1]=bilgiler[0][1]
bilgiler[1][2]=bilgiler[0][2]
bilgiler[1][3]=bilgiler[0][3]
bilgiler[1][4]=bilgiler[0][4]
//döngü ile böyle
unsigned char i=0;
unsigned char k=0;
for(i=0;i<4;i++){
k=0;
for(k=0;k<5;k++){
bilgiler[i+1][k]=bilgiler[i][k]
}
}
Ancak yukarıdaki yazdığım örnekte sıralama düz yapıldığı için bütün veriler aynı olur. Döngüyü geriye doğru döndererek yazmanız gerekir. Sadece örnek olsun diye yazdım.
Gökhan hocam verdiğiniz yöntem güzel yalnız pek anlayamadım.Değişkenleri protonda bu şekilde kullanma olanağı varmı.Varsa anlayabilmek için basit düzeyde bir örnek olursa güzel olurdu.
Konunun proton'da açıldığını farketmemişim.
Proton bilmiyorum ama "çok boyutlu array" kavramı her dilde vardır sanırım.
Şöyle bir örnek var mesela: http://www.protonbasic.co.uk/content.php/472-Two-Dimensional-Arrays (http://www.protonbasic.co.uk/content.php/472-Two-Dimensional-Arrays)
Hocam inceledim fakat istediğim gibi değil.En iyisi kendi yöntemimi kullanayım.
tek boyutlu diziyi 2 boyutlu gibi kullanabilirsiniz.
örnek;Dim kayit[25] As Byte ' 5 erli 5 grup
Dim olay As Byte
Dim a As Byte
Dim kayit_a As Byte
Dim sonuc As Byte
For olay=0 To 4
' blok gerçekleşmesine ait kod buraya eklenecek
For a=0 To 4 'olay=0 ise 0-4 arası ilk 5 kayit, olay=4 ise 21-25 arası son 5 kayit
'sonuc'un elde edilmesine ait kod buraya eklenecek
kayit_a=olay*5+a
kayit[kayit_a]= sonuc 'sonuc kaydedeceğiniz bilgi
' EWrite kayit_a, [sonuc] ' doğrudan eproma kayıt ilk satırdaki 25 bytlık RAM kullanına gerek kalmaz
Next
Next
ferit06 hocam ilginiz için teşekkür ediyorum.ben 5 adet farklı oluşan olayda kayıtlar oluşturucam ve bu kayıtlar her olayda kayarak aşağı doğru gidicek.aşağıda verdiğim yöntem ile kaydırma yapıp eeproma kayıt ettim ve sıkıntı yok.benim merak ettiğim bu işi ptotonda daha az kod kullanarak hafızayı daha tasarruflu bir şekilde kullanarak bir algoritma ile bu iş yapılabilirmi.
sizin son kod eklenmemiş ama;
benim verdiğim örnek şu şekle dönebilir. Oluşan kod benim verdiğim örnek için 80 byte oluyor.
Dim kayit[25] As Byte ' 5 erli 5 grup
Dim olay As Byte
Dim a As Byte
Dim kayit_a As Byte
Dim sonuc As Byte
'olay : gosub olay_gerceklesme
'....
olay_gerceklesme:
'For olay=0 To 4
olay=olay+1
If olay=5 Then olay=0
' blok gerçekleşmesine ait kod buraya eklenecek
For a=0 To 4 'olay=0 ise 0-4 arası ilk 5 kayit, olay=4 ise 21-25 arası son 5 kayit
'sonuc'un elde edilmesine ait kod buraya eklenecek
kayit_a=olay*5+a
kayit[kayit_a]= sonuc 'sonuc kaydedeceğiniz bilgi
EWrite kayit_a, [sonuc] ' doğrudan eproma kayıt ilk satırdaki 25 bytlık RAM kullanına gerek kalmaz
Next
' Next
Return
Hocam teşekkürler örneği deneyip geliştirmeye çalışayım.