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..
dongu hakkında
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
dongu hakkında
En son aydin038 tarafından 30 Mar 2005 03:27 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
- pentiumkivanc
- Üye
- Mesajlar: 350
- Kayıt: 19 Şub 2004 10:24
- İletişim:
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...
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 ?
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 ?
o zaman oraya artanın yazılıp sonra artanı daha alta mı aktarmak gerekiyor
- Şeklinde mi oluyor... ? Geri kalanını sen de halledersin artık... 
- 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 =
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;
- Ş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 =
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)

-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN