Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Modelleme sayı kombinasyonu
#1
Merhabalar  aşağıdaki örnekteki gibi bir modelleme koduna ihtiyaçım var

Sorum : 0 ila 1 arasında 5 ve yukarı kombinasyonun tüm ihtimalleri listeleyen koda ihtiyacım var
0 0 0 0 0
0 0 0 0 1
0 1 0 0 0
.
.
1 1 1 1 1 

Bunu sırayla yapması gerekiyor random kullanamam milyondan fazla satır oluştuğundan dolayı her defasında kombinasyon varmı diye kontrol zaman kaybı olur 
Ayrıca her üretilen kombinasyonu kontrol etmek zaman alacağından nihai hesaplama ile dataya ekleyeceğim
Cevapla
#2
Sorunuzu ben şahsen anlamadım
(11111)₂ = (1 × 2⁴) + (1 × 2³) + (1 × 2²) + (1 × 2¹) + (1 × 2⁰) 

= 31

0 ve 1 olacak şekilde 31 tane rakam elde edebilirsiniz demek.

Kaç tane 1 yanyana olacak?

0'dan 31'e kadar bir integer for döngüsü kurup, her rakamı 2'lik (binary) dönüşüm yapmak kafi olmalı.

Ya da soruyu ben anlamadım...
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
(29-07-2024, Saat: 18:00)mrmarman Adlı Kullanıcıdan Alıntı: Sorunuzu ben şahsen anlamadım
(11111)₂ = (1 × 2⁴) + (1 × 2³) + (1 × 2²) + (1 × 2¹) + (1 × 2⁰) 

= 31

0 ve 1 olacak şekilde 31 tane rakam elde edebilirsiniz demek.

Kaç tane 1 yanyana olacak?

0'dan 31'e kadar bir integer for döngüsü kurup, her rakamı 2'lik (binary) dönüşüm yapmak kafi olmalı.

Ya da soruyu ben anlamadım...

Muharrem hocam cevap verdiğiniz için teşekkür ederim 
sorumu izah etmeye çalışayım  
öncelikle binary değil (0101010) olarak gördüğünüz   
Farklı rakamda olabilir ,  A,B olabilir ,True False de olabilir
(3 5 3 5 3 5 3 5  3)  (A B B A B A B A B A B A B A )   (T F T T T T T F F F)
 
modelleme yapmak istiyorum daki kastım
 
A A A A A A A A A A A A A
B A A A A A A A A A A A A
A B A A A A A A A A A A A
A A B A A A A A A A A A A.......
........
.........
B B B B B B B B B B B A B
B B B B B B B B B B B B A 
B B B B B B B B B B B B B

Bir sıra halinde tüm kombinasyonları üretmek istiyorum ,sonra bunları bir veri tabanına yedekliyeceğim, 
yedeklediğim bu varyasyonları ,başka bir veriyi tabanına referans alarak  atıyacağım .
böylelikle programım bu varyasyonlara göre modellimi oluşturacak.
Cevapla
#4
ikililer halinde olduğunu teyit edebilirseniz yine aynı kapıya çıkıyor derim, hepsini binary olarak 0/1 olarak kurabilir, sonra bunları 
* 0 için true, A, F     
* 1 için false, B, T   

olarak değerlendirirsiniz.

Bu haliyle dahi tek bir fonksiyon işinizi görecektir. Hane sayısının hepsinin 1 olduğu hali kaç ise hiç  veritabanı kurmanıza dahi lüzum olmadan direkt kombinasyon sayısını bulabilirsiniz.

Gereği olduğunda da direk rakamların binary karşılığını alıp 0/1 için karşılığını yerine koymak kalacaktır.

Siz de model için decimal rakam olarak karşılaştırma yapma özgürlüğüne kavuşursunuz.

örneğin karşılaştırılacak model ABAABAABAABBBABABBABABAB olsun... bunun A olanlarını 0,  B olanlarını 1 yaptığınızda  010010010011101011010101 çıkar ki bunun Decimal karşılığı 4799189 olduğuna göre veritabanı için düşündüğünüz model için sadece bu rakamı değerlendirecek bir karşılık işinizi görecektir.


TFTFTTFTFTFTFTTFTFTFTFTFTFTTTTTTFFFTFTFFFFTFTFTTFFFF gibi bir şablon dahi
şak diye
1010110101010110101010101011111100010100001010110000 binary dönüşümü ile
3049403895071408
rakamına ulaşma imkanı sunar.

Limit fonksiyonları ile bir X/Y alanının içinde mi olduğunu anlamak da kolaylaşır benzetimler oluşturabilirsiniz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
hocam bir örnek procedure eklemeniz mümkünmü acaba ?
Cevapla
#6
Göreceğiniz üzere basit matematik içerir. Çözümü uzaklarda aramayın.

Fonksiyonlar 

function DecToBin(iDec: LongInt): string;
begin
 Result:='';
 while iDec > 0 do
 begin
   Result := IntToStr(iDec and 1) + Result;
   iDec   := iDec shr 1;
 end;
end;

function BinToDec(Value: String): LongInt;
var
 i, iValueSize: Integer;
begin
 Result      := 0;
 iValueSize  := Length(Value);
 for i := iValueSize downto 1 do
   if Value[i] = '1' then
     Result := Result + (1 shl (iValueSize - i));
end;

function ModelToDec( aText: string; aTrue:Char = '1'; aFalse:Char = '0' ): LongInt;
begin
 aText   := StringReplace( aText, aTrue,  '1', [rfReplaceAll] );
 aText   := StringReplace( aText, aFalse, '0', [rfReplaceAll] );
 result  := BinToDec(aText);
end;

function DecToModel( aVal: LongInt; aTrue:Char = '1'; aFalse:Char = '0' ): String;
begin
 Result  := DecToBin(aVal);
 Result  := StringReplace( Result, '1', aTrue,   [rfReplaceAll] );
 Result  := StringReplace( Result, '0', aFalse,  [rfReplaceAll] );
end;


Kullanımı :

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 LValStr : String;
 LVal    : LongInt;
 LModel  : String;
begin
 LValStr := 'TFTFTTFTTTFTTFTFFFTFTFTTFTFTTF';

 LVal    := ModelToDec( LValStr, 'T', 'F');
 Memo1.Lines.Add( Format('%s = %d', [ LValStr, LVal ]) );

 LModel  := DecToModel( LVal, '1', '0' );
 Memo1.Lines.Add( Format('%s', [ LModel ]) );

 LModel  := DecToModel( LVal, 'A', 'B' );
 Memo1.Lines.Add( Format('%s', [ LModel ]) );

 LModel  := DecToModel( LVal, 'T', 'F' );
 Memo1.Lines.Add( Format('%s', [ LModel ]) );

 LModel  := DecToModel( LVal, 'X', 'Y' );
 Memo1.Lines.Add( Format('%s', [ LModel ]) );

end;


Sonuç :
TFTFTTFTTTFTTFTFFFTFTFTTFTFTTF = 729189078
101011011101101000101011010110
ABABAABAAABAABABBBABABAABABAAB
TFTFTTFTTTFTTFTFFFTFTFTTFTFTTF
XYXYXXYXXXYXXYXYYYXYXYXXYXYXXY
Unutmuşum
Model olarak A, B hallerini veya 'X', 'Y' verince de yine  729189078 rakamına ulaşırsınız. Karşılaştırma için bu decimal sayı kafi

Örneğin :

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  LValStr : String;
  LVal    : LongInt;
  LModel  : String;
begin
  LValStr := 'TFTFTTFTFTFTFTTFTFTFTFTFTFTTTTT';

  LVal    := ModelToDec( LValStr, 'T', 'F');
  Memo1.Lines.Add( Format('%s = %d', [ LValStr, LVal ]) );

  LModel  := DecToModel( LVal, '1', '0' );
  LVal    := ModelToDec( LModel, '1', '0');
  Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );

  LModel  := DecToModel( LVal, 'A', 'B' );
  LVal    := ModelToDec( LModel, 'A', 'B');
  Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );

  LModel  := DecToModel( LVal, 'T', 'F' );
  LVal    := ModelToDec( LModel, 'T', 'F');
  Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );

  LModel  := DecToModel( LVal, 'X', 'Y' );
  LVal    := ModelToDec( LModel, 'X', 'Y');
  Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );

end;
TFTFTTFTFTFTFTTFTFTFTFTFTFTTTTT = 1454069087
1010110101010110101010101011111 = 1454069087
ABABAABABABABAABABABABABABAAAAA = 1454069087
TFTFTTFTFTFTFTTFTFTFTFTFTFTTTTT = 1454069087
XYXYXXYXYXYXYXXYXYXYXYXYXYXXXXX = 1454069087
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#7
Smile 
(29-07-2024, Saat: 21:17)mrmarman Adlı Kullanıcıdan Alıntı: Göreceğiniz üzere basit matematik içerir. Çözümü uzaklarda aramayın.
Sayın hocam  (dönülmez akşamların ufkundayım, kendimi acme roketine bağlayıp uzaya fırlatmış ve oradan da marsa doğru rota bilgisayarım olmadan pencereden bakarak mars gitmeye çalışan coyote gibi hissediyorum )  Shy
vermiş olduğunuz kod ile Regresyon analizi tarzındaki doğrulamalarda ve modellemelerde kullanabilirim
ayrıca programımın sonraki aşamasını daha önce yazmış olduğum binlerce satırı sayenizde modifiye ederek az satırla çok daha verimli ve stabil çalışmasını sağlayacağım bunun için teşekkür ederim. 
Maalesef aradığım program parçacığı bu değil.  Sizin beni anlayamamanız gibi bir şey söz konusu değil, ben doğru cümleler ile kendimi ve sorumu ifade edemedim.
Öncelikle:
"Kronolojik özgeçmişim :1972 doğumlu 1989 yılında programcılığa başlamış olup commodore 64 te basic ile oyunlar ve hesaplamalar yapardım sonrasında  foltran Python cobol assembly  Gwbasic pascal delphi devam ederek 2000 yılına değin bilgisayar ile haşir neşir oldum  sonrası yok bir ara program ihtiyacı nedeni ile delphide bir kaç program yazdım 2005 - 2008 arası sonrası yine yok 
eğitim durumum iş ihtiyacı dolayısı ile lise yarım yamalak kaldı benim için matematik (toplama, çıkarma,çarpma,bölme) den ibaret
ha birde abaküsten Smile sonuçta bunlarla da olsa geçte olsa işimi yapmaya çalışan iş insanıyım. "
Hocam affınıza sığınarak forumda her soru soran üniversite öğrencisi matematik kurdu profesyonel programcı olmayabilir kendini geliştirmeye çalışan veya yeni başlamış kendine bir gelecek kurma ümidi ile yanıp tutuşan programcı adayları olabilir.
onlar sizin seviyenize çıkamıyabilirler "en azından 40 fırın ekmek yemeleri gerekiyor ilerde belki" ama siz onların seviyesine inip onlara yol gösterebilirsiniz Saygılarımla 
Şimdi Hocam ve değerli forum üyeleri sorumu örnekle göstereyim 
 
procedure TForm1.Button1Click(Sender: TObject);
var
X:array[1..10] of integer;//BİR SIRADA KAÇ ADET OLACAK
a,b:integer;
c:string;
begin
for a:=1 to 100 do// BELİRTİLEN ADET KADAR ÜRET
begin
c:='';
randomize;
for b:=1 to 10 do X[b]:=ABS(random(2)-1);
for b:=1 to 10 do c:=c+inttostr(X[b])+' ';
Listbox1.Items.Add(c);
//ListBox1.Items.Add(inttostr(X[1])+' '+inttostr(X[2])+' '+inttostr(X[3])+' '+inttostr(X[4])+' '+inttostr(X[5])+' '+inttostr(X[6])+' '+inttostr(X[7])+' '+inttostr(X[8])+' '+inttostr(X[9])+' '+inttostr(X[10]));
end;
end;
  kod : 1 satırda 1 veya 0 olmak üzere 10 adet random değer üretiyor 
benim yapmak istediğim random olarak değilde  örnek olarak  her satırda 3  adetli bir kombinasyon ile 
000                   00000000000000000       <---  sadece görsel
001                    .
010                    ..
011
100                    ...
110                    ........
101                    ..............
111                    11111111111111111
nihai kombinasyonu kısa sürede oluşturmak her defasında aceba bu kombinasyon varmı diye aratmak istemiyorum 
örnek kod eklemenizi rica ediyorum iyi sabahlar
Cevapla
#8
Üzgünüm hala anlamadım.

Tüm kombinasyonlar demek basamak sayısı maksimum değere kadar for döngüsü ile Binary oluşturmak demektir.

Size başarılar diliyorum.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#9
ikili sayı sisteminde (0 ve 1) için kaç basamak varsa 2 ^ n dir (n = basamak sayısı) bunun formülü budur.
Eğer 0 ile 9 arasındaki değerler isteniyorsa o zaman 10 ^ n dir. Açıkçası ne istiyor ben de anlamadım.
Cevapla
#10
procedure TForm1.GenerateCombinations;
var
 i, j: Integer;
 combination: string;
begin
 for i := 0 to 7 do  // 2^3 - 1 = 7, tüm 3 bitli kombinasyonlar
 begin
   combination := '';
   for j := 0 to 2 do
   begin
     if (i and (1 shl j)) <> 0 then
       combination := '1' + combination
     else
       combination := '0' + combination;
   end;
   ListBox1.Items.Add(combination);
 end;
end;


procedure TForm1.GenerateCombinations;
var
 i, j: Integer;
 combination: string;
begin
 for i := 0 to 15 do  // 2^4 - 1 = 15, tüm 4 bitli kombinasyonlar 
 begin
   combination := '';
   for j := 0 to 3 do
   begin
     if (i and (1 shl j)) <> 0 then
       combination := '1' + combination
     else
       combination := '0' + combination;
   end;
   ListBox1.Items.Add(combination);
 end;
end;

gibi bir şey mi?
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Databasedeki total sayı Altıner 2 1.212 12-12-2022, Saat: 11:14
Son Yorum: Altıner
  random 0001 ile 1000 arası sayı üretme erdogan 4 2.207 14-04-2022, Saat: 00:27
Son Yorum: enigma
  dizideki en buyuk sayı ve id si sadikacar60 2 1.389 27-10-2021, Saat: 18:59
Son Yorum: sadikacar60
  inputbox'a sadece harf / sayı gimek ? cooxed 2 1.748 30-06-2021, Saat: 20:45
Son Yorum: mcuyan
  Edit Sayı Girme OZCANK 5 4.844 16-12-2020, Saat: 01:54
Son Yorum: mustafaozpinar



Konuyu Okuyanlar: