Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Delphi => Konuyu başlatan: z - 18 Mayıs 2014, 16:29:18

Başlık: Delphi for dongusundeki gariplik
Gönderen: z - 18 Mayıs 2014, 16:29:18

       for  a:=0 to 127
           begin
                Data=Buffer[a];
                ......
           end;


Gibi donguleri debug ederken integer tanimlanmis a degiskeninin sirayla 128, 127 126, 125 degerlerini aldigini  goruyorum. Haliyle kodlarim yanlis calisiyor.

For dongusunde bu tersligin sebebi nedir?
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: t2 - 18 Mayıs 2014, 16:51:20
A nin yerel degisken olmasi gerekiyor. Hatta bununla ilgili warning cikmis fakat gözardı edilmis olabilir
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: muuzoo - 18 Mayıs 2014, 16:53:33
Delphi'den anlamam ama, acaba derleme sırasındaki optimizasyonla alakalı olabilir mi? 127'ye eşitliği kontrol etmektense 0 eşitliği kontrol etmek daha kolay, derleyici bu yüzden loop sırasını mı değiştiriyor acaba?
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: Klein - 18 Mayıs 2014, 17:11:30
Evet a nın yerel değişken olması gerek. Ancak global bile olsa böyle bir şey yapmaması gerekir.  Ben hiç rastlamadım böyle bir duruma.
koddaki tek hata 'for...'  satırının sonunda 'do' olmaması,  o da buraya yazılırken atlanmıştır.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: t2 - 18 Mayıs 2014, 17:14:58
Sorun sadece global olmasından ibaret değildir. değişken global ise başka fonksiyonlar olaylar içinden  değiştiriliyor bu yüzden değeri istenen şekilde kalmıyor olsa gerek.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: Salih - 18 Mayıs 2014, 17:26:28
Ben şimdi kullandığım RAD 2010 da denedim, problem yok.
Değişkenler global tanımlı.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: t2 - 18 Mayıs 2014, 18:03:11
Sizin denemede sorun cikmaz asıl program baska bir yerde global degiskeni bozuyor olsa gerek.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: picusta - 18 Mayıs 2014, 18:03:24
signed / unsigned meselesi, 
ya da step - 1 yapan bir yapi / parametre var.
a 'nin nasil tanimlandigini yazmamis arkadas.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: Kabil ATICI - 18 Mayıs 2014, 18:23:33
@z
Kullandığınız Delphi sürümünü bilmiyorum, Delphi 7 üzerinde
for  a:=0 to 127 do
           begin
                Data=Buffer[a];
                ......
           end;

şeklinde kullanılıyor. Belirttiğiniz durumu başka bir değişken ile kullandığınız zaman da aynı şekilde hata oluşturuyor mu?
Yukarıdaki gibi mi yazdınızı, yoksa taşırken mi bir hata oldu?
Eşitlikte aşağıdaki gibi olması gerek .
Data:=Buffer[a]; //>>??

Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: z - 18 Mayıs 2014, 18:27:36
Bu sorun cogu kez basima geliyor.

Klein evet buraya yazarken do yu unutmusum.

Sorunu for degiskeni yerine bir for dongusu icinde baska degisken kullanarak cozdum.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: Salih - 18 Mayıs 2014, 18:33:45
Alıntı yapılan: t2 - 18 Mayıs 2014, 18:03:11
Sizin denemede sorun cikmaz asıl program baska bir yerde global degiskeni bozuyor olsa gerek.

Haklı olabilirsin. Fakat bozulma nasıl bir şeyse 128 den başlıyor. Tesadüf de olabilir.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: z - 18 Mayıs 2014, 19:06:52
for dongusunun daha girisinde ilk deger 0 olmasi gerekirken 128 ile basliyor.  Zaten bildigim kadariyla dongu icindeyken for degiskenine kendiniz forda tanimlanan haricinde deger falan atamiyorsunuz.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: t2 - 18 Mayıs 2014, 19:18:37
Senin değişken %99 globaldir. zaten sorunun farkında olsan çözersin buraya yazmazsın. o değişken diğer fonrksiyonlar taradından değiştiriliyor bozuluyor. bu yüzden umduğun gibi olmuyor.

Sorunu gösterebilmek için basit bir örnek hazırlamak istesen muhtemelen sorun filan çıkmayacak. Orijinal program sorunlu. yerel zannettiğin değişken başka yerde kullanılıyor.  o  program olmamış, şişme yapar. baştan yaz onu.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: z - 07 Haziran 2014, 13:25:21
Tum kodu veremiyorum ote yandan kodda degisiklik yaptigimda sorun duzeliyor yada yeniden ortaya cikiyor.

Bu sabah gene ayni sorunla karsilastim.

Artik for dongusunu asagidaki gibi yapmaya karar verdim.

Sorun cikartabilen yapi asagida


for a:=0 to 100 do
  begin
       n:=Data[a];
       .....
       .....
       .....
  end;


Zorlama ile sorunu kaldirilmis yapi


b:=0;
for a:=0 to 100 do
  begin
       n=Data[b];
       .....
       .....
       .....
       b:=b+1;
  end;


for dongusu kodumda 0 dan basliyor artarak son degere gidiyor. Fakat bazi kodlarimda ise buyuk degerden 0 a geri sayarak gidiyor.

Kisa bir kodda bu sorunla karsilasir karsilasmaz yayinlayacagim.

@T2

Lokal degiskenler kullaniyorum. Global degisken kullanmis olup ornegin for a:=0 to 128 dongusunde a degerini bir sekilde 128 yazarak ezsem bile dongunun 128 127 126 seklinde ters yone saymamasi lazim lazim.

Sorun kesinlikle derleyicinin bir bugundan kaynaklaniyor. Derleyiciyi (D6) zamaninda crackli temin etmistim. Belki de ondandir. Update falan etmedim. Neyse zaten Delphi 7 indirdim de eve bir turlu yukleyemedim.

Yuklemeye de cekiniyorum. Isyerindeki makineye Delphi 7 yukledim. Evden de cok siradan bir kod goturup derledigimde bir dll olmadigi icin kizdi. Su siralar bu tip sorunlarla ugrasmak da istemiyorum.

Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: Kabil ATICI - 07 Haziran 2014, 15:29:14
Buradaki anlatımlarınızdan uğraşmak zorunda kalacaksınız gibi görünüyor. Muhtemelen istediği dll ya o delphi serisinde olupta sonradan kaldırılan ya da sizin sonradan eklediğiniz  (veya aldığınız yerde eklenmiş) bir bileşen.
Bu işi zaman ayırıpta halletmediğiniz sürece ileride dar zamanınızda yapmak zorunda kalabilirsiniz.

Elbette tercih sizindir.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: t2 - 07 Haziran 2014, 17:20:24
Belki pointer yanlış  kullanıldı.  Ondan oldu.
Bug dan değildir.
Z,  suçlu kesin sensin. 
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: engerex - 07 Haziran 2014, 17:53:42
 Delphi 6'dan 7'ye terfi edin derim. 150MB'lik modifiyeli Delphi 7 hafif taşınabilir sürüm mevcut. Kurmakla uğraşmazsınız. Kilitlenme sorunu olursa bir defaya mahsus ayarlardan bir seçeneği değiştirmek gerekebilir. Windows 8 ile çalışmayabilir.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: z - 07 Haziran 2014, 18:09:25
Delphi 7 yi iş yerinde kurdum.  Dediğim gibi Delphi 6 da standart pakete hiç bir şey ilave etmeden daha önce yazdıgım programı Delphi7 de derleme aşamasında uses satırındaki bileşenlerden birisine ait dll eksikliği hatası alınca eve kurmakta acele etmiyorum.

Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: t2 - 07 Haziran 2014, 18:27:38
Değişken lokal olsa da bir pointer vasıtasıyla dışarıdan değiştirilmiş olabilir mi? ^işaretinin yanlış kullanımı?
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: z - 07 Haziran 2014, 18:32:27
Alıntı yapılan: z - 18 Mayıs 2014, 16:29:18

       for  a:=0 to 127
           begin
                Data=Buffer[a];
                ......
           end;



Kodum aynen böyle. a degişkenine hiç bir şekilde müdahale etmiyorum. Zaten for döngüsüne başlar başlamaz a, 0 ile değil 127 yada her neyse onunla başlıyor. Tek tek geriye sayıyor.
Bunu benim hatam olarak açıklamak çok zor. Pointer vs kullanmıyorum. Neyse ilk fırsatta örnek yayınlayacağım.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: engerex - 07 Haziran 2014, 19:32:50
 Dediğine benzer standart bir bileşenin yazımı bir kaç sürümde farklı yazıma sahip. (DesignIntf, DesignEditors, DsgnIntf...) Böyle bir şey ekli mi? (Geçerli güncel yazım: DSIntf)
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: Yuunus - 07 Haziran 2014, 22:38:57
"Z" senin buffer'a gelen veride sorun olabilir mi yada Buffer in tipinde?

       for  a:=0 to 127 do begin
           Buffer[a]:=a;
                Data:=Buffer[a];
       end;

bu şekilde dener misin?
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: z - 07 Haziran 2014, 23:21:22
Yok hocam for dongusu  for a:=0 to 100 olarak yazdigim dongu calismaya basladiginda for a:=100 downto 0 tipinde calisiyor.

Kodlari adimlatirken a degiskenine bakiyorum sorunu burdan yakaliyorum zaten.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: t2 - 07 Haziran 2014, 23:26:36
Sorunu görmek için, sıfır proje hazırlamak 1 dakika kadar sürecektir. Uzun bir süre olsa gerek. File > new> application..

    for  a:=0 to 127
           begin
                sayi=a
                ......
           end;


böyle yapıp tüm sayiları inttostr(sayi) ile memo içine veya metin dosyaya satır satır yazdırın. göreceksiniz  negatiften  başladığı yoktur.

Data veya Buffer belki yanlış tanımladınız ki bu soruna yol açtı

Alıntı yapılan: z - 07 Haziran 2014, 23:21:22
calismaya basladiginda for a:=100 downto 0 tipinde calisiyor.

Kodlari adimlatirken a degiskenine bakiyorum sorunu burdan yakaliyorum zaten.

Görüntüleme biçimini yanlış seçmişsinizdir. byte olan değişkeni  signed integer veya shortin olarak göstermeye çalışıyor olabilir. a değişkenini nasıl gözlemlediniz? ona da bir baksak hep beraber hak versek.

sıfır bir proje yapıp sorunu gösterseniz çok mu zor ? Muhtemelen o zaman  sorun çıkmayacak.

Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: sadettinpolat - 08 Haziran 2014, 03:15:34
Yillardir delphi kullanirim boyle bir hataya rastlamadim.
Degisken tanimlarinizda bir problem olabilir.
Sifir basit bir ornek uygulama yazip buraya gonderebilirseniz bakariz. Bu sekilde yorum yapmak bosa kurek cekmek gibi.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: engerex - 08 Haziran 2014, 12:02:49
Sıfır projede sorun belki hiç yaşanmaz. Projenizi kopyalayıp görmemizi istemediğin yerleri silip yollarsan daha uygun olur.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: engerex - 01 Temmuz 2014, 19:55:07
Alıntı yapılan: z - 18 Mayıs 2014, 16:29:18

       for  a:=0 to 127
           begin
                Data=Buffer[a];
                ......
           end;


Gibi donguleri debug ederken integer tanimlanmis a degiskeninin sirayla 128, 127 126, 125 degerlerini aldigini  goruyorum. Haliyle kodlarim yanlis calisiyor.

For dongusunde bu tersligin sebebi nedir?

Olay çözüldü mü?
Dögüdeki a değişkeni Integer mi ShortInt mi?
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: z - 01 Temmuz 2014, 20:28:34
Sorun çözülmedi fakat for döngüsündeki değişkeni döngü içinde kullanmayarak işimi görüyorum.

Bu durumda for döngüsüne girmeden önce bir başka değişkeni sıfırlıyorum. Döngünün içinde de bunu artırıyorum. Döngü içindedeyken asıl döngü değişkeni yerine bu yardımcı değişkeni kullanıyorum.

Değişken olarak integer değişken kullanıyorum.

Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: JOKERAS - 01 Temmuz 2014, 23:42:47
func(const char *buffer) {
   int a;
   for(a = 0; a < 127; ++a) {
      Data = buffer[a];
   }
}
Eğer döngü fonksiyon içindeyse, fonksiyon parametresini "const" tanımlayıp denermisiniz?
Sanırım pointer, a değişkeninizi eziyor.
Delphiden anlamam.
Başlık: Ynt: Delphi for dongusundeki gariplik
Gönderen: engerex - 02 Temmuz 2014, 00:38:03
Bugün bir hesap makinası kurcalıyordum. Veri tipi işaretli 8 bitti. 120 121 122 123 124 125 126 127 diye arttırırken -128,  -127 -126 -125 diye devam etti. Negatif olması dışında dizin tanımlamanıza uyuyordu. Delphini tepkisini merak edip uygulamaya çalıştığımda xe6 bu hatayı vermedi.