Add to Technorati Favorites

8 Ağustos 2008 Cuma

Adım Sayısı Belli Olmayan Döngüler

-

Merhabalar arkadaşlar..Bugün ve gelecek birkaç günü de kapsayacak olan, 1 hafta öncesinde başlamış olan bir yoğunluğum var.Bu sebeple programlama biraz aksadı.Yakında şablon değişikliği sonrası burada hem edebi (:P) hem de pascal harici programlama yazılarıma da yer vermeye çalışacağım.
--
Bir ufak bilgilendirmenin ardından adım sayısı belli olmayan döngülere değinirsek; bu döngüler yapacağımız bir sürü işlem varken, bunların nerede sonlanacağını , kaç adım süreceğini bilmediğimiz durumlarda kullanacağımz kalıplardır.Bunları While ve Repeat-Until diye 2ye ayırırsak, while döngüsünde istenilen durum başta verilir ve bu durum gerçekleştiği müddetçe döngüye girilir.Repeat-Untilde ise durum sonda kontrol edilir örneğin; bilgisayara bir A sayısı girsin kullanıcı ve de diğer kullanıcı bunu tahmin etsin ve de tahmini B'de tutalım..Bunu while ile yaptığımızda while A<>B iken kullanıcıdan sayı isteyip bunu B'ye yazacağız.A<>B olduğu müddetçe yeniden sayı isteyeceğiz.Repeat-Until'de ise Repeat'ten sonra kullanıcıdan B sayısını isteyeceğiz, A sayısı repeat'ten önce 1.kullanıcıdan alınmış olacak ve de en sonda Until A=B diyeceğiz ve de sayılar eşit olduğunda döngüden çıkacak.
--
Dikkat edilmesi gereken bir husus while ve repeatte aynı problemi çözmek için farklı durumlar kullanılmasıdır yani while "-ken" anlamında olduğu için A<>B "iken" diyip işlemleri yapıyoruz ama until "-e kadar" olduğu için A=B "ye kadar" işlemleri yapıyoruz.Gördüğünüz gibi iki durumda da işlemler A B'ye eşit değilken yürüyor ama bunun ifade edilmesi kalıplardan dolayı değişiyor.Umarım anlatabilmişimdir.
--
Bunlar biraz havada kalmış olabilir zira bunların komutlarını daha göstermedim.Şimdi komutlarını ve algoritmasını göstereceğim ama yukarıda belirttiğimiz örneğin bir uç noktası var ve de bu noktada programda bir aksaklık gerçekleşiyor.Biraz bilgi vermek gerekirse while ve repeat-until kullanımı farkından.Repeat-Until de kolayca çözülen bu problem, while'a geçtiğimizde repeat-until'den farklı birşey istiyor.Yani algoritmalardan birinde bir eksiklik var, sadece ufak bir durumda kullanıcıyı yanlış bilgilendirmeye sebep olan.Bunu görebildiyseniz yorum olarak post etmenizi rica ediyorum.Birkaç gün sonra uç noktayı belirteceğim.
--
-
Sayı tutulmasını istemişiz ve 1.kullanıcıdan sayı almışız.Tahmin değişkeninde, 2.kullanıcının tahmin sayısını tutmuşuz. 2.kullanıcıdan tahminini istemişiz.Repeat-Until'in gösterimi olan bu algoritmada A=B değilse "False" kolundan tahmini isteme kısmına dönmüşüz.A=B olan "-a kadar" bu işi yapacağız işte repeat-until mantığımız bu.Kodumuz ise;
-
Program tahminsay(input,output);
Var
a,b,tahmin:integer;
Begin
Writeln('sayi tutun');
Readln(a);
tahmin:=0;
Repeat {repeat'ten sonra ; yok}
writeln('Tahmininiz');
readln(b);
tahmin:=tahmin+1;
Until A=B; {until'den sonra ; var}
writeln(tahmin,' de buldunuz')
End.
-
--

Benzer şeyleri burada da yapmışız.Ama burada A<>B "iken" diyip işlemleri yürütmüşüz ve de A=B olacak bir tahmin olduğunda yani "False" koluna düştüğünde çıkıp gitmişiz.Kodlarımız ise;
-
Program tahminsay(input,output);
Var
a,b,tahmin:integer;
Begin
Writeln('sayi tutun');
Readln(a);
tahmin:=0;
while a<>b do
begin
writeln('tahmininiz');
readln(b);
tahmin:=tahmin+1
end;
writeln(tahmin,' de bulundunuz')
End.
--
Program kodunda değil de burada belirtmek istedim gördüğünüz gibi while'da, bir until terimi gibi sonlandırıcı olmadığı için, begin end bloklarıyla while'ın nereden başlayıp nerede bittiğini bildirmemiz gerekir.Bunun dışında programın binlerce durumundan yalnızca bir durumunda kullanıcıya yanlış bilgi verdiği algoritma, bu algoritmada :)
--
Şu sıralar yaşadığım yoğunluk sebebiyle gülücük işareti kullanmadığım bir yazı ortaya çıkmış şimdi farkettim:)..Daha neşeli programlama yazıları yazabilmem ümidiyle, bir sonraki yazıda görüşmek üzere...
--

8 yorum:

Ahmet Dursun dedi ki...

Evet arkadaşlar, bir arkadaşım problemi tespit etmiş yalnız bana göndermiş yorumunu :)..Bir de yenilerin aklını karıştırma demiş bana:))..Kendisinden yorumunu buraya bırakmasını rica ettim umuyorum ki haftasonu yorumu burada olur :))

Adsız dedi ki...

evet yorumumu buraya da eklemeye karar verdim :))
sevgili arkadaşım ahmet,
bloğuna eklediğin 'Adım Sayısı Belli Olmayan Döngüler' başlığı altındaki yazılarını okudum, okudum ama ne anladım orası daha önemli :)) yorum istemişsin al sana yorum :D while döngünde B yi baştan girmiyosun ya ama A ile karşılaştırıyosun program bunu nasıl yapıyor sorması ayıp? daha değeri girilmemiş bişeyle nasıl karşılaştırıyor??? he bide adam ilk tahminde daha buldu diyelim ozaman da adama hiç o döngüye girmeden çıkıyor ve 'sıfır' tahmin diyecek. Lütfen while'den önce oku B'yi, yeni öğrenenleri yanlış yönlendirme :PPP
sevgilerimle, iyi çalışmalar..

Ahmet Dursun dedi ki...

şimdi ilk yorumda doğru cevap gelince mecbur ben de orayı düzeltmek zorunda kalacağım:))..Bunu yazı olarak yayınlacak da olsam burada da belirteyim.Orada tahmin edilmesi istenen sayı 0 olursa hiç while'a girmeden olay bitecek.Dolayısıyla dışarıda tahmin=0 değil de tahmin=1 demeli ve de dışarıda bir kereye mahsus B'yi okumalıyız...
Tebrikler!!! :D:D:D

TolgA Ünvermiş dedi ki...

burcuyu tebrik ediyorum, ödülü nedir ahmet dursun bey?

Ahmet Dursun dedi ki...

ödüllü bir soru değildi ama ödüllendirilebilir tabi ki:)).. Ödül sponsorum siz olun efem:))

TolgA Ünvermiş dedi ki...

Tamam! Bizim dükkandan yani ÜNPA Kültür Merkezi sponsorluğunda bir adet 0,5 Uç olan ödülümüzü dönem başında Burcu arkadaşımıza gözterdiği eşsiz performanstan dolayı takdim edileceğini duyurmak istiyorum. Başarılarının devamını diliyoruz... :)

Adsız dedi ki...

çok teşekkürler :D ama şey ödülüm 0.5 yerine 0.7 uç olsa olur mu =))

Ahmet Dursun dedi ki...

Olur olur, ben sponsora bildiririm:P :))