Konuyu Oyla:
  • Derecelendirme: 5/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
(Sadeleştirildi) Girilen sayı adedinde iç içe for döngüsü oluşturma
#1
Tekrar merhaba,

Öncelikle herkese gösterdiği ilgi ve alakadan ötürü, ve vakit ayırıp okuyup, anlatım bozukluklarına rağmen cevaplandırmaya çalıştıkları için teşekkürü borç bilirim.

Bu ve bir önceki soruyu oluşturmamın ana gayesi, DelphiCan'da "sinerji oluşturma" çabasıdır. Ancak soracağım sorularda yine gerçek dünyada işimize yarayacak, bir şekilde bir projede karşımıza çıkacak şeylerden ibarettir.

Nitekim bu soru, henüz ar-ge aşamasında olan özel ve gizli bir projenin içinde kullanılan özel bir konu. Bu yüzden betimlemek adına "depo" ve "ürün" kavramları ile anlatmaya çalıştım. İşin kötü yanı, bu konuyu anlatabilmek için bir video çekmem gerekiyor. Kağıt üzerinde peşpeşe cümle kurarak 5-10 cümle ile çizim ve görsel destekli izah etmesi bile sorunlu oluyor. Bu anlatanın yada dinleyenin algısal durumundan değil, olayın biraz sıradışı olmasından kaynaklanıyor.

Proje, bir kuruluşun gizlilik anlaşması doğrultusunda gerçekleştiği için sizlere detay veremiyor olmaktan olayı özür dilerim.

Şimdi daha sade, mümkün mertebe teknik kavramlar geçirmeden izah etmeye çalışacağım.

Projede x kavramı var. Bir de bu x'lerin y değerleri var. Yani şöyle bir şey dersek yanlış olmaz;


type
TXModel = class(TObject)
id:integer;
value:variant;
ylist: array of variant;
end;


X modelinin YList alanındaki değerler bir aradayken bir anlam ifade ediyor. Bir X için 12 tane Y var. Yani YList'in uzunluğu her zaman 12'dir. Her Y'nin değeri 0~30 arasında olacaktır. Ancak eksi değere düşmediği için Gaussian elimination method geçerli değil çünkü değerler negatif olmamak zorunda.

X modelinden en az 2 tane olmak zorunda. En fazla da 8 tane olabilir. Buradaki kıstas şu; Girilecek modellerin YList'leri doğrultusunda oluşacak bir değer var. Bu değeri sağlamak için modellerin YListlerini deneme-yanılma yaparak her türlü ihtimali denememiz gerekiyor. Tekrar ediyorum Smile Girilen modellerin girilmesinde bir sebep var. Bağımsız örneklem yaparsam; Kimyasal bir karışım oluşturacaklar gibi düşünebiliriz. Bu karışımda hangisinden ne kadar koyulması gerektiğini yine diğerlerinin miktarlarıyla ölçeceğiz. Bu bahsi geçen for döngüleri, girilen modellerin ylist değerlerinin miktarlarını tespit etmek.

---
Varsayımsal çıktı; X modelinden 2 tane, ve ylist (12 dediğim) ilk 5 değeri bu şekilde;

x1.y1 = 5
x1.y2 = 4
x1.y3 = 3
x1.y4 = 2
x1.y5 = 1

x2.y1 = 2
x2.y2 = 6
x2.y3 = 5
x2.y4 = 1
x2.y5 = 3

---

Buradaki mantık; y1'lerin her x değerinde girdiği formül sayesinde x1'den şu kadar koyarsak y1 değeri ihtiyacımızı karşılar, x2'den şu kadar koyarsak y1 değeri ihtiyacımızı karşılar, dememiz gerekiyor.


Soru
2 ila 8 tane satır girilecek. 12 tane de kolon var. Oluşan matristeki değerlerin hepsinin bir anlamı var. Bu değerleri çarp-böl-kes-biç yapıp uygun miktarları hesaplayacağız. Bunun için yatay olarak kolonlar asıl mesele gibi gözükse de, her satır, bu miktar meselesini karıştırıyor. Burada da permütasyon olasılık işimizi çözdü. Demostrasyon ve test birimlerinde başarılı sonuçlar aldık. Ancak bunu statik çözmek için 2li, 3lü, 4lü...8li çözüm fonksiyonları yazmam gerekiyor.

Orada da yazılımın revize görmesi yada kriterlerin değişmesi durumunda gidip onlarca satır kodu revize etmek ve gözden kaçmaması için daha çok efor sarf etmek gerekecek. Bu yüzden tek fonksiyon ile, hepsinde aynı işi yapacak formülün kullanımını ortak hale getirmek istiyorum. 2 satırsa iç içe 2 satır olacak ki, satırların yatay değerleri birbirleriyle hesaplamaya girip doğru miktarı bize sunsun. Aynı şekilde 4 satır olduğunda, iç içe 4 döngü olacak ve bu kez yatay olarak 12, dikey olarak 4 satırdan oluşan matris kontrole girecek. Burada da oluşan değer yukarıda söylediğim gibi (0~30) arasında olacak.

Tekrar vakit ayırıp buraya kadar okuyanlara teşekkür ederim.

İyi günler.

Merhaba,

Çeşitli parametreler doğrultusunda yapılacak bir kombinasyon kodlaması var. Bu kodlamayı gerçekleştirmek için girilen input adedi önemli. Şöyle ki; en az 2 adet karşılaştırma değeri girilmeli fakat değer sayısı 2~8 arasında olabilir. Bu noktada her değerin yatay matris karşılaştırmalarının kodları hazır. Tek yapılması gereken 8 tane girildiyse 8, 5 tane girildiyse 5, 3 tane girildiyse 3 tane for döngüsünü çalışma anında oluşturmak.

Toplarsak; İstenilen olay delphi'de dynamic nested for loop. Bu yüzden dolayı iç-içe çağırma gibi bir olay olmayacak. Her biri bağımsız ve derine indikçe farklı değerler çıkartacak.

+10 Beyin Fırtınası Puanı sizi bekliyor Smile


Örneklem:
3 için;

0, 0, 0
1, 0, 0
...
9, 0, 0
0, 1, 0
...
1, 5, 0
...
2, 3, 4
...
9, 9, 9


ilk for 0-9
  ikinci for 0-9
      ucuncu for 0-9


---

Detaylı Anlatım (23.08.2017):

Bir depo düşünün. Bu depodaki rafa yerleştireceğimiz ürünler var. Her ürünün kendisine göre genişliği-yüksekliği-derinliği var. Bir rafta tek seferde en az 2, en fazla 8 tane ürün yerleştirilebiliyor. Ürün çeşiti n tane olabilir (tüm ölçeklerde olma ihtimali var).

Toplamda 8 ürün olacağı için 8 ürünün birbirlerinin ölçülerine, materyallerine bakarak en ideal yerleştirmeyi yapmak için permütasyon olasılık konusuna değinmemiz gerekiyor. Bu yüzden ürün miktarınca, her ürünü diğer ürünlerle kontrole almamız gerekiyor.

Yani,
2 ürün için 2 for iç içe olacak
3 ürün için 3 for iç içe olacak
4 ürün için 4 for iç içe olacak
.. ürün için .. for iç içe olacak
8 ürün için 8 for iç içe olacak


ilk for;
 ikinci for;
   { bu blok tamamlandı }  // burayı ilk ürün ve ikinci ürün için gezdiriyoruz.
   if (urunlist[i].materyal = materyal.metal) then
   // kod...
   // tüm kontrol ve denetlemeler...
   { bu blok tamamlandı }
 ikinci for son;
ilk for son;

Bu olaya yabancılar dynamic nested diyorlar. Ancak orada aynı bloğu indeks uzunluğu kadar iç içe döndürüyorlar. Benim yapmak istediğimde for içinde yapılacaklar hazır ancak ne kadar for olacağı eklenen ürün miktarına göre belirlenecek.

Ön koşullar;
  1. Asla bir ürün tek başına raf yerleştirmeye girmez (tamam)
  2. En az 2 ürün, en fazla 8 ürün yerleştirmeye girer (tamam)
  3. Her rafta X tipinden bir ürün olma zorunluluğu vardır (tamam)
Kontrol;
  1. Yerleştirmeye hazır ürün adedinin tespiti (tamam)
  2. Her ürünün aynı lota yerleştirilecek ürünlerle yerlerinin kontrolü (iç içe for burası)
  3. En ideal yerleştirme tamamlanınca barkodlama, lokasyon, len,lon bilgisi (tamam)
Save
Save
Cevapla
#2
Konuyu tekrar yukarıya çekmek istiyorum. Bu soruya cevap veren geliştiriciye +10 Beyin Fırtınası Puanı verilecektir. Konu ile ilgili görüş, bilgi, düşünce, tavsiye yada herhangi bir fikir paylaşımında bulunarak katkı yapabilirsiniz. Yine bu katkılarınız size puan olarak yansıtılacaktır.
Cevapla
#3
Ben soruyu ilk okuduğumda anlamamıştım. Sonra belki birileri cevap verince anlarım demiştim.
Şimdi tekrar okudum yine anlamadım Sad

Bunca zamandır kimse cevap yazmadığına göre; acaba sorun bende değil de soruluş şeklinde mi diye düşünmeye başladım  Angel
There's no place like 127.0.0.1
WWW
Cevapla
#4
Kombinasyon gibi bir olay anladığım kadarı ile ?
Şimdi baktım, şöyle bişimiş deger1=(a,b,c,d,) deger2=(1,2,3,4) sonuç (a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4)
WWW
Cevapla
#5
Bende soruyu tam anlamadığım için bir şeyler yazmadım. Recursive metodlarımı kastediyor acaba şeklinde bir düşünce oluştu sadece fakat oradan ilerisine gidemedim.
WWW
Cevapla
#6
(23-08-2017, Saat: 09:40)SimaWB Adlı Kullanıcıdan Alıntı: Ben soruyu ilk okuduğumda anlamamıştım. Sonra belki birileri cevap verince anlarım demiştim.
Şimdi tekrar okudum yine anlamadım Sad

Bunca zamandır kimse cevap yazmadığına göre; acaba sorun bende değil de soruluş şeklinde mi diye düşünmeye başladım  Angel

Detaylı açıklama ekledim (SimaWB) abi Smile
Save

(23-08-2017, Saat: 09:53)esistem Adlı Kullanıcıdan Alıntı: Kombinasyon gibi bir olay anladığım kadarı ile ?
Şimdi baktım, şöyle bişimiş  deger1=(a,b,c,d,) deger2=(1,2,3,4) sonuç (a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4)

Permütasyon sistemine sadık kalacak şekilde olacak. Detaylı açıklama ekledim.

(23-08-2017, Saat: 10:04)witalihakko Adlı Kullanıcıdan Alıntı: Bende soruyu tam anlamadığım için bir şeyler yazmadım. Recursive metodlarımı kastediyor acaba şeklinde bir düşünce oluştu sadece fakat oradan ilerisine gidemedim.

Recursive işimi çözmüyor çünkü buradaki olay for miktarına göre for döngülerinin iç içe yazılması. Yani bir metodu iç içe tetiklemek işimi çözmüyor. Detaylı açıklama ekledim.
Cevapla
#7
Merhaba hocam, ben yine anlamadım Smile şimdi elinizde raflar var, rafların yüksekliği derinliği belli (?), her bir raf max 8 ürün alıyor. Mesela yüksekliği belli seviye olan ürünler aynı rafa girebiliyor mu yoksa her rafta aynı türden ürünler olmak zorundamı? Sizin yapmak istediğiniz elimize örneğin 3 adet ürün geldi, bunların ebatları alınıp hangi raf uygunsa (boşsa) sıradan ürünleri o raflara yerleştirmekmi?
WWW
Cevapla
#8
memtable kullanmak serbest mi Smile
Cevapla
#9
Bende okuyunca anlar gibi oldum ama sonra baktım yine anlamamışım Smile
WWW
Cevapla
#10
Kodu bir çalıştırın hocam donguolustur(int n) fonksiyonuna hangi değeri verirseniz o kadar döngü oluşur.
Umarım soruyu doğru anlamış ve cevaplandırmışımdır.Doğruıysa delphiye uyarlarız.
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.
https://play.google.com/store/apps/developer?id=ONGUN
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma Abdullah ILGAZ 8 9.999 04-03-2020, Saat: 23:45
Son Yorum: OldyCoder



Konuyu Okuyanlar: