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

"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

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
1

mobil görünümden çık