[]

MATLAB'de while komutunu anlayamıyorum

for'u çok rahat anladığım ve kullanabildiğim halde while'ı bir türlü kavrayamıyorum. while'la yazılmış örnekleri inceliyorum, o an anlar gibi oluyorum ama ardından yine unutuveriyorum. while'ı özetleyebilecek olan ve aşağıdaki segmenti programda çalıştırmadan açıklayabilecek olan yardımsever mühendisler var mıdır acaba?

B=ones(3,3);
X=eye(3,3);
r=2;
c=1;
ctl=true;
while (ctl)
B(r+1, c) = X(r+1, c) + B(r+1, c);
r=rem(r+1, 3);
c=rem(c, 3);
ctl=(r==0 | c==0);
end
fprintf('r=%d c=%d ctl=%d\n' r,c,ctl);
disp(B);

teşekkürler şimdiden efendim.

 
ctl nin değeri true (1) olduğu sürece o döngü dönmeye devam ediyor o kadar,
eğer r veya c den biri, 0 olursa, r==0 | c==0, karşılaştırması 1 veriyor onu da ctl ye atıyor. while döngünü çevirmeye devam ediyor.
eğer ikisi de 0 dan farklı olursa ctl 0 oluyor.
Böylece while komutu döngüyü çevirmeyi bırakıyor çünkü artık ctl true değil, 0, yani false.

yukarıdaki işlem r veya c üçün katları olduğu sürece, 3 bölümden remainder 0 olduğu sürece devam ediyor. Eğer hiçbir zaman iki remainder da 0 dan fark etmezse sonsuza kadar dönmeye devam eder. Fordan aslında tek farkı bu.

Bir de for döngüsünde for var=1:5 gibi, bir parametrenin her yinelemede belli bir miktar değişmesini sağlayabiliyoruz, aynı şey while da böyle olmuyor, eğer while da böyle bir değişken ihtiyacımız varsa kendimiz işi halletmeliyiz

var1=0
while var1~=60
var1=var1+1
end

While ın pek bir numarası yok.

Segmentte ne işlem yapmak istemiş bir bakışta anlayamadım ama bir çalıştırıp deneyeceğim ne iş yapıyor bu segment
  • furciferpardalis  (22.11.12 23:01:50 ~ 23:11:23) 
"ctl" true(1) olarak tanımlanmış ve while'ın koşulu olarak verilmiş.

While(Koşul)
kod bloğu
end

koşul(ctl), true(1) oldukça kod bloğu yukarıdan aşağı tekrar tekrar çalıştırılır. her defasında başa döner for'da olduğu gibi. Koşul'un içine müdehale edecek bir ibare yoksa, sonsuz döngü oluşur. çünkü ctl hep true kalacaktır. "ctl" 1'den farklı bir değer alırsa kod bloğu tekrar çalıştırılmaz. End altındaki satırlar işlenerek akış devam eder.

while (r==0 | c==0)
B(r+1, c) = X(r+1, c) + B(r+1, c);
r=rem(r+1, 3);
c=rem(c, 3);
end

şeklinde de yazılabilirdi.
  • karacahil  (22.11.12 23:05:30 ~ 23:05:53) 
while (ctl) , parantez içindeki değer true oldukça end' e kadar olan kısım çalışır. her end e ulaşıldığında, parantez içi tekrar kontrol edilir, kod uygulanır, ta ki ctl false olana kadar.


  • transall  (22.11.12 23:07:38) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.