dongu hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
aydin038
Üye
Mesajlar: 75
Kayıt: 08 Eki 2003 05:58

dongu hakkında

Mesaj gönderen aydin038 »

selam arkadaslar .. hekese kolay gelsin..

benim kucuk bi sorunum var ama iki gundur buna ugrasiyorum..
yardim ederseniz minnnattar kalırım.
veritabani:firebird

şekildeki gibi tablo1 deki rakamlari tablo2 deki alan3 e dagilim yapmak istiyorum..yanlılız tablo1 ve tablo2 aynı olan kayıtlar için geçerli.
.sorum biraz karısık oldu biliyorum özü dilerim..

[img]http://aydin_038.sitemynet.com/graphic1.gif[/img]

teskurler sayglılar..
En son aydin038 tarafından 30 Mar 2005 03:27 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

hangi şekil..
sorundan hiç birşey anlayamadım..
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

Resimle göstermek yerine biraz daha yazarak açıklayabilirsin. Böylece resmin kaynağındaki url kapansa bile ilerde bu konuya bakan kişiler de faydalanabilirler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Anladığım kadarıyla yorumlamaya çalışayım...

- Method Tablo2'den yola çıkılmak üzere çözümlenebilir görünüyor..

- Tablo 2'deki ilk değer olan 10 rakamını elde etmek için Tablo1'in ilk elemanından itibaren artan olana kadar toplama işlemi yapılıyor. Sonra artan kısım Tablo 2'deki bir sonraki sıraya devrediyor. ,

- Sonra Tablo2'deki bu devreden üzerine tablo1!den tekrar sıradaki veri alınıyor ve artan değer olana kadar devam ediyor. Tablo1'in eşitliğin sağındakilerin toplamı daima Tablo2'nin eşitliğinin sağındaki toplama eşit olduğu görülüyor...

- Merak ettiğim husus şudur. Ya artan (devreden rakam) Tablo2'deki sıradaki kayıtlı rakamdan büyükse, bu taktirde nasıl bir işlem yapılıyor...

Resim Linki kaybolursa diye code tagı içinde veridiğin örneğimn aynısını yazıyorum...

Kod: Tümünü seç

 TABLO-1   TABLO-2
 -------   ----------------------
 A  5      A  10   = 5 +  5
 B 10      B  30   = 5 +  7 + 18
 C  7      C  20   = 2 + 10
 D 20      D   8   =
 A 10      A   9   =
Bu bilgiler ışığında, aşağıdaki kodu bir button'un click olayına kopyala yapıştır yapıp; forma üç tane TListBox ekliyor ve ListBox1'i Tablo1 rakamlarını, ListBox2'yi Tablo2 rakamlarını koyup RUN ediyorsun... Bakalım ListBox3'de göreceklerin tatmin edecek mi ?

Kod: Tümünü seç

Var
  iSayac1, iSayac2,
  iTablo1,  iTablo2, iToplam, iArtan, iDevir : Integer;
begin
  iToplam := 0;
  iDevir  := 0;
  iSayac1 := 0;
  iSayac2 := 0;
  Repeat // Tablo2 için ana döngü...
    If ListBox3.Items.Count < iSayac2 then ListBox3.Items.Add('') // iDevir eklenmişse Item eklenmesin.
                                      else ListBox3.Items.Add(Format('%d', [iDevir]));
    iTablo2 := StrToInt(ListBox2.Items[iSayac2]); // 10, 30, 20, 8, 9
    If iTablo2 >= iDevir then // Başlamadan, belki de Artan yeterlidir...
    Repeat // iTablo2'yi elde edene kadar Tablo1'den rakamları topluyoruz...
      iTablo1 := StrToInt(ListBox1.Items[iSayac1]); // 5, 10, 7, 20, 10
      Inc(iToplam, iTablo1);
      If iTablo2 >= iToplam then ListBox3.Items[iSayac2] := ListBox3.Items[iSayac2] + Format(' + %d', [iTablo1])
                            else begin
                                   iArtan := iTablo2 - (iToplam-iTablo1);
                                   iDevir := iToplam-iTablo2;
                                   ListBox3.Items[iSayac2] := ListBox3.Items[iSayac2] + Format(' + %d', [iArtan]);
                                end;
      Inc(iSayac1);
    Until (iSayac1 > ListBox1.Count-1) or (iToplam >= iTablo2)
    else begin
           ShowMessage('Ugh');
           iDevir := iDevir-iTablo2;
           ListBox3.Items[iSayac2] := ListBox3.Items[iSayac2] + Format(' + %d', [iTablo2]);
           ListBox3.Items.Add(Format('%d', [iDevir]));
         end;
    If idevir > 0 then iToplam := idevir;
    Inc(iSayac2);
  Until (iSayac2 > ListBox2.Count-1) or (iSayac1 > ListBox1.Count-1);
end;
Eğer durum aşağıdaki gibi ise işler değişir, o zaman negatif artan olur ve devir adına ortalık biraz karışır.

- Şimdi buna göre çözüm üretilir ama ya Tablo2'deki değer daha yukarda bahsettiğim gibi artandan büyük değil de ufak olursa ?

Kod: Tümünü seç

 TABLO-1   TABLO-2
 -------   ----------------------
 A  5      A  10   = 5 +  5
 B 10      B   4   = ? ? ?
 C  7      C  20   =
 D 20      D   8   =
 A 10      A   9   =
o zaman oraya artanın yazılıp sonra artanı daha alta mı aktarmak gerekiyor

Kod: Tümünü seç

 TABLO-1   TABLO-2
 -------   ----------------------
 A  5      A  10   = 5 +  5
 B 10      B   4   = 4
 C  7      C  20   = 1 + 7 + 12
 D 20      D   8   = 8
 A 10      A   9   = 9 (+1)
- Şeklinde mi oluyor... ? Geri kalanını sen de halledersin artık... :wink:
Resim
Resim ....Resim
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Teşekkürler Muharrem Bey... :)
Kullanıcı avatarı
aydin038
Üye
Mesajlar: 75
Kayıt: 08 Eki 2003 05:58

Mesaj gönderen aydin038 »

selamlar..

cevap için çok tesekkur ederim. bir fikir oldu..
calışmlarınızda başarılar..

saygılar..
Cevapla