09.07.2008 19:08    

Harbi65
Aşağıda ki kod da ikinci döngü çalışırsa bazen tıkanıyor...
Sanırım döngüler arasında AND - OR kullanmam gerkiyor ama onuda uygulayamadım...
bu konuda yardım istiyorum....

Kod:

(if (> 2mahya_mes 2goguslememes)
(progn
  (if (> Mhdi_mes Mdik_min)
    (progn
      (while (< Mhdi_mes dikmin)
(setq Mdik_ad  (- Mdik_ad 1)
      Mdik_ad  (/ 2mahya_mes 2gogusmes)
      Mhdi_mes (/ 2mahya_mes Mdik_ad)
)
      )
      (while (> Mhdi_mes Mdik_max)
(setq Mdik_ad  (+ Mdik_ad 1)
      Mdik_ad  (/ 2mahya_mes 2gogusmes)
      Mhdi_mes (/ 2mahya_mes Mdik_ad)
)
      )
    )
    (progn
      (setq test1 0)
    )
  )
)
      )

09.07.2008 20:43    

yazgunesi
3562-if_and_or konu anlatımı.rar

Lispin tamamı göremediğim için ne yapmak istediğini anlayamadım, ama örnek kodlar işine yarayabilir diye düşünüyorum.. Dökuman ingilizcedir !

09.07.2008 20:53    

Harbi65
bu linkden ulaşılmıyor.... Ayrıca ingilizce olduğu içinde yararlanabiliceğimi sanmıyorum...

Lispin tamanı buraya eklemek biraz uzun olduğu için zor... eklesem de vakıf olmak zor olur...
nedenini de tam anlayamadım. Genellikle çalışıyor ama bazen burda kısır döngüye giriyor... AND - OR fonksiyonu mu kurulmalı acaba diye düşündüm... bunuda kodlayamadım. bu fonksiyonu kurmak istiyorum burda...

10.07.2008 06:04    

ehya
ikinci döngüde tıkanması çok doğal. çünkü yazdığın komut tıkanmasını istiyor.

Kod:

(if (> mhdi_mes mdik_min)
(progn
(if (< mhdi_mes dikmin)
(progn
(setq Mdik_ad  (- Mdik_ad 1)
      Mdik_ad  (/ 2mahya_mes 2gogusmes)
      Mhdi_mes (/ 2mahya_mes Mdik_ad)
))
(progn
(setq Mdik_ad  (+ Mdik_ad 1)
      Mdik_ad  (/ 2mahya_mes 2gogusmes)
      Mhdi_mes (/ 2mahya_mes Mdik_ad)
))
  )
)
  .....
  .....




Bu şekilde kodlarını yaz...

10.07.2008 07:58    

Harbi65
ilgilendiğin için sağol...
burda while döngüsü kurmak gerekiyor...
2mahya_mes değerine göre Mdik_ad eksilmeli ya da artmalı....
zaten yukarda ki kodlarda mantıksız bi işlem var. bende sonradan farkettim... aynı değeri
(setq Mdik_ad (- Mdik_ad 1)
Mdik_ad (/ 2mahya_mes 2gogusmes)

Mdik_ad artırıyorum ama sonra ona başka değer atamışım... saçmalamışız yani...
bunu sende farketmedin galiba:)
akşam bakarım artık... ama burda yardımınıza ihtiyacım olabilir tekrar... tekrar teşekkürler

10.07.2008 08:00    

ehya
nerden farkedebilirim... olayın ortasını yazmışsın. neyin ne olduğunu bu şekilde anlamam kolay değil..
sadece while döngüsünü gördüm.. bu şekilde olmayacağını belirtmek istedim..

10.07.2008 08:24    

Harbi65
haklısın ehya...
peki bu işlem mantığını böyle kullanmak doğru mu?
yani;
mdik_min
mdik_max değerlerine göre;

2mahya_mes mesafesinde Mdik_ad artması ya da eksilmesi gerekiyor....

yani; Mhdi_mes minimum mesafeden küçükse 2mahya_mes değerinde Mdik_ad i artırmalı... aksi durumda eksiltmeli... burda yaptırmak istediğim bu...
buna göre bu şekilde mi while döngüsü kurmak doğru olur?
yoksa AND-OR fonksiyonu mu kurmak gerekir.....

10.07.2008 08:29    

ehya
and ile or bir defalık sonuç verir..
senin yaptığın çokluı bir seçenek sanıyorum..
bunun için while fonksiyonunu kullanmalısın. Ama bir şarta bağlayarak..
bu sınırı neye göre belirlersin birşey diyemem..

Lisp yazmak demek, programı açıp aklına gelen kodları yazmak değildir. Önce ne yapmak istediğine karar verirsin. Daha sonra kafanda bu kodların çözümlemesini yaparsın.. Daha sonra yazarsın.. Yoksa bu şekilde sürekli hatalar çıkar karşına...

10.07.2008 08:40    

Harbi65
Ehya;
ne yapmak istediğimi, proğramın akışınıda kurdum... ve çalışıyor da... ancak bu döngüde bazen kısır döngüye gidiyor...
döngüde ki şart belli...
(while (< Mhdi_mes mdik_min)
(setq Mdik_ad (- Mdik_ad 1))
)
(while (> Mhdi_mes mdik_max)
(setq Mdik_ad (+ Mdik_ad 1))
)

mantık doğru görünüyor da.. neden kısır döngüye giriyor...
kafama takılan if fonksiyonu altında bu şekilde 2 while döngüsü yanlış mı acaba....?

[URL=http://imageshack.us][IMG]http://img75.imageshack.us/img75/1386/dikmezn3.jpg[/IMG][/URL]
[URL=http://g.imageshack.us/g.php?h=75&i=dikmezn3.jpg][IMG]http://img75.imageshack.us/img75/1386/dikmezn3.06e77385e7.jpg[/IMG][/URL]

böyle bir duruma göre;
Maximuma göre hesapladı ama son döngüye girdiğinde son hesaplanan mesafeyi bu seferde minumumdan küçük gördüğü için mi tıkanır ki acaba...?

Harbi65 (10.07.2008 08:57 GMT)

10.07.2008 11:12    

Harbi65
Alıntı
wolf :
(progn
(while)
(while)
);progn

şeklinde dene istersen



wolf nasıl dedin anlamadım...?
while döngüleri ilk mesajda ki kod gibi progn altında çalışıyor zaten.. senin dediğin bundan farklı mı anlamadım...?

10.07.2008 11:39    

ehya
Alıntı
Harbi65 :
Ehya;
ne yapmak istediğimi, proğramın akışınıda kurdum... ve çalışıyor da... ancak bu döngüde bazen kısır döngüye gidiyor...
döngüde ki şart belli...
(while (< Mhdi_mes mdik_min)
(setq Mdik_ad (- Mdik_ad 1))
)
(while (> Mhdi_mes mdik_max)
(setq Mdik_ad (+ Mdik_ad 1))
)






iyi de, yazdığın kod da mhdi_mes mdik_min den küçükse sürekli olarak mdik_ad değerinden 1 eksiltmek istediğini söylüyorsun..
ama bunun içinde mdik_mes değeri her döngü içinde aynı kalıyor ve her zaman küçük görünüyor..
buna arttırma yapmak zorunda değilmisin? yoksa sürekli olarak bu döngüyü tekrarlar durur...

10.07.2008 11:47    

Harbi65
mevcut kod da koşul bu şekilde zaten... ilk mesajda da böyle... bu senin dediğinden farklı mı ben mi yanlış anlıyorum....?


(if (> Mhdi_mes Mdik_min)
(progn
(while (< Mhdi_mes Mdik_min)
(setq Mdik_ad (- Mdik_ad 1)
Mhdi_mes (/ 2mahya_mes Mdik_ad))
)
(while (> Mhdi_mes Mdik_max)
(setq Mdik_ad (+ Mdik_ad 1)
Mhdi_mes (/ 2mahya_mes Mdik_ad))
)
)
(progn
(setq test1 0)
)
)


Ehya;
İlk mesajda dikkat edersen Mhdi_mes (/ 2mahya_mes Mdik_ad)) döngü içinde yeniden hesaplatıyorum... aynı kalmıyor yani...

Artık burda ki durumun resimde anlattığım durumdan kaynaklanacağını düşünüyorum....

10.07.2008 12:16    

Harbi65
Arkadaşlar kusura bakmayın yordum sizleride.... yardımlarınız için teşekkür ederim...
Ancak kodların sadece bu kısmıyla sorunu çözemiyeceğiz gibi...
ben biraz daha kafa yoruyum olmazsa buraya kadar olan kodların üzerinde tekrar tartışırız....

> 1 <
Copyright © 2004-2022 SQL: 1.058 saniye - Sorgu: 78 - Ortalama: 0.01356 saniye