Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

picbasic karşılaştırma

Başlatan burak450, 31 Temmuz 2008, 04:51:19

burak450

arkadaşlar sorum şu: Elimde üç değişken var.K,Y,M diye.ben bunlar arasındaki eşitliği karşılaştırcam.
if k=y=m  or
k+1=y=m  or
k+2=y=m or
k+3=y=m   or
k+4=y=m  or
k+5=y=m  or
k=y+1=m
k=y+2=m
k=y+3=m
k=y+4=m
k=y+5=m
k=y=m+1
.
.
.
k=y=m+5 or
diye gidiyo aynı zamanda
k+1=Y+1=m+1
K+2=Y+1=m+1
diye bunları da karşılaştırcam.Bunlardan herhangi biri doğruysa then goto ana program dicem yani toplam karşılaŞtırmaM gereken değerler 6X6X6=216 tane oluyor.bunları yazmam ise imkansız bu işlemi kısa yoldan nasıl yapabilirim?

ete

if k=y=m or şeklinde bir eşitlik yada karşılaştırma tabiiki yanlış olur.
Bunu  doğru şekli;
if (k=y) and (y=m) şeklinde olmalıdır.

Bir birini takip eden eşitliklerde ise şu yöntemi kullan;
If y=m then
 for I=1 to 5
   if k+I=Y then goto ......
 next
endif

Bu yazdığım bir kaç satır ile aşağıdakileri kontrol etmiş olacaksın.
k+1=y=m or
k+2=y=m or
k+3=y=m or
k+4=y=m or
k+5=y=m or

Aşağıdaki satırlar içinde benzer şekilde;
IF k=m then
  FOR I=1 to 5
     If k=y+I then Goto .....
  next
endif
satırları ilede aşağıdakileri kontrol etmiş olacaksın
k=y+1=m
k=y+2=m
k=y+3=m
k=y+4=m
k=y+5=m

Aynı mantık ile diğerlerinide yapabilirsin.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

picusta

Burak arkadasim,
Probleme bakis açini degistirip, olaya ilave bir boyut katmalisin.
(k,y,m) üçlüsü 3 boyutlu bir uazyi simgeler. verdigin denklemler aslinda bu boyutta ki 6 birim kenarli bir kübü tanimlar.
Problemi esitlik yerine esitsizlik olarak yazarsan üç satirda problemi anlatirsin (k,y,m) tamsayi ise.
Esitlikleri döngü içine almak güzel, fakat gün gelir 6 yerine 100 birimlik kenar olursa 100x100x100 karsilastirma yapmak zorunda kalabilirsin, bu da epey zaman alabilir, esitsizlik kullanarak kenar uzunlugu ne olursa olsun ayni sürede ve çok daha az karsilastirma yaparak bulursun.
Ayrica tam sayi değil de virgüllü yapmak istersen, yapman gereken tek sey sayilarin virgülden sonraki kismini karsilastirman.

burak450

picusta cevabın ilginç az önce biraz düşündüm ama bu problemi eşitsizlikle çözmek imkansız.Senin dediğin ancak ve ancak 100 olasılk warsa ve 99 yazmak zorundaysan kalan 1 yazılır olur biter ama burda toplam olasılık 256X256X256 yani 16777216 bizim elimizde 216 tane war 216 tane yazmak 16777216 tane yazmaktan sen de takdir edersin ki daha kolaydır...

burak450

Ete hocam  for next içine for next yazmak olayı daha kısaltacak galiba picbasic buna izin veriyor değil mi?

ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

picusta

Alıntı yapılan: "burak450"picusta cevabın ilginç az önce biraz düşündüm ama bu problemi eşitsizlikle çözmek imkansız.Senin dediğin ancak ve ancak 100 olasılk warsa ve 99 yazmak zorundaysan kalan 1 yazılır olur biter ama burda toplam olasılık 256X256X256 yani 16777216 bizim elimizde 216 tane war 216 tane yazmak 16777216 tane yazmaktan sen de takdir edersin ki daha kolaydır...
Maalesef anlatmak istedigimi anlamamissin.
öncelikle 2 boyutta düsün (m'i kenara koy):
y - 5 <= k <= y + 5
esitsizligi problemi anlatmaya yetmez mi?

ayrica son yazdigin :
k+1=Y+1=m+1
K+2=Y+1=m+1
denklemleri aslinda
k=y=m
k+1=y=m
ile ayni değil mi?

burak450

Haklısın yazdığınla da yapilabilir.Ama 3 tane iç içe for next ile de kısa olur diye düşünüyorum.

Ayrıca o yazdıklarıından  aynı olan kendini tekrar edenler war ama 216 değilde 150 olsun yine elimizle tek tek yazamayız.

İlgilenip cevap yazdığın için teşekkürler....

ete

Picusta anlattıklarında haklı. Elinde 3 adet değişken var yada şöyle söyleyeyim 3 boyutlu bir karşılaştırma modeli var. Bu işi programı en hızlı çalıştıracak şekilde yapabilmen için boyut sayısını azaltman gerekir.
k=m=y eşitliğinde
öcelikle k=m eşitliği sağlanmışmı ona bakman gere. Daha sonra m=y eşitliğini kontrol etmen daha akıllıca olur. Yada senin örneklerinden yola çıkarsak;

if k=y=m or
k+1=y=m or
k+2=y=m or
k+3=y=m or
k+4=y=m or
k+5=y=m or
kontrolünde
ana şartlardan birisi y=m eşitliğinin sağlanması olduğuna göre önce bunun varlığı kontrol edilmelidir. Kısaca;
If y=m then
  for I=0 to 5
     if y=(k+I) then goto .....
  next
endif
şeklindeki bir uygulama ile önce boyut sayısını azaltıyorsun sonra son boyut kontrolünü yapıyorsun. Bu sana ne kazandıracak ? ,tabiiki hız. Zira,
yukarıdaki satırlar yalnızca y=m eşitliği sağlanmış ise uygulanacak aksi taktirde atlanacaktır.

Ancak sanırım Picustanında dikkate alması gereken bir husus var. Oda yapılmak istenen programda karşılaştırmalar her bir değişkenin yalın halleri ile ve birer aqrtırılmış halleri ile yapılmaktadır. Bu durumda boyut azaltma işlemi kısmi olarak uygulanabilir sanırım.
Açmak gerekir ise;
k=y=m eşitlik kontrolü hem k=0 .....k=5 aralığında
hem y=0..........y=5 aralığında
hemde m=0.....m=5 aralığında yapılacaktır.
Bu durumda olayı 3 parça halinde ele almak daha uygun olacak demektir.
Yani, k=0...k=5 aralığı için önce y=m özelliği aranmalı,
y=0....y=5 aralığı için önce k=m özelliği aranmalı
m=0....m=5 aralığı için ise önce k=y özelliği aranmalıdır.


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

picusta

Kod yazmak istemezdim, kendinden çözümü bulmani isterdim.
kod C dilinde, bunu basic'e çevirmek için :
&& yerine AND yaz
{ yerine begin (veya THEN)
}  yerine end

if ( (k>= y-5) &&(k <= y+ 5) )
{
   if ( (k>= m-5) && (k<= m+5) )
      {
       return true;
      }
}
return false;

4 adet toplama çikarma islemi, 4 adet sayi karsilastirma, 2 adet ikili karsilastirma. 2 adet if.
5 yerine istedigin rakami yaz, islem sayisi degismez.

burak450

hocam pic olayında yeni olduğum için bende bunu yazabildim
5 fazla oldu bende 4 ü denedim çalıştı  :)

for i=0 to 4
if (BILGI_k+i)=BILGI_y then
for j=0 to 4
if BILGI_Y=(BILGI_m+J) then
goto ana
endif
next
endif
next


daha sonra  BILGI_y  nin değerini 4 e  kadar arttırıp yazdım :)