SensiZOlmuyoR.org  
Geri git   SensiZOlmuyoR.org > Pc - Bilgisayar > Programlama > C ve C++
İhbar sistemini kullanmak istermisin?


En iyi Paylaşımınız Ney¿

Cevapla
 
Konu Araçları Stil
Eski 28-01-2008, 14:35   #1 (permalink)
Banlandı
 
*MeLeK* - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Kas 2007
Nerden: napıcan ziyaretemi geLcen!!
Mesajlar: 0
Konular: 2724
Üye No: 11416
Ruh halim:
Rep Gücü : 0
Rep Puanı : 0
Rep Seviyesi : *MeLeK* has a little shameless behaviour in the past


Standart Hanoi kuleleri


Recursive algoritmaya iyi bir örnek.
Hanoi Kuleleri, birçok proglamlama dilinde öğretici bir algoritmadır. Öncelikle soruyu açıklayayım:

Elimizde üç tan kule var ve kulelerin ilkinde n tane disk var. Diskler, kuleye, en küçük en üstte olmak üzere küçükten büyüğe dizilmiştir. Yapılması gerekense 1. kuledeki tüm diskleri 3. kuleye taşımak (İkinci kule taşırken aracı olarak kullanılacak). Yalnız taşırken dikkat edilmesi gereken iki önemli kural var.

1) Asla büyük disk, küçük diskin üstüne gelmeyecek.
2) Bir seferde yalnızca 1 tane ve en üstte olan disk taşınacaktır.

Bu kurallar doğrultusunda soruyu çözmeye çalışalım. Bu taşıma işlemlerini kalem kağıt ile denerseniz göreceksinizki n - 1 tane diski taşımak için yaptığınız işlem sayısı a ise, n diski taşımak için yapacağınız işlem sayısı 2a + 1 olacaktır. Aslında bunun çıktığı nokta şurasıdır: n - 1 disk önce 1 den 2 ye taşınır (a tane işlem). Daha sonra n. disk 1 den üçe taşınır (1 işlem). Daha sonra 2. kuledeki n - 1 disk 3. kuleye taşınır (a tane işlem daha). Bu şekilde olayı ele alırsak 1 tane diski taşıyabiliyorsak hepsini taşıyabiliriz demektir.


(1 -> 2) 1. kuledeki taşınabilir disk 2. kuleye taşınsın manasında olmak üzere iki diskin taşınmasını

1 -> 2
1 -> 3
2 -> 3

şeklinde ifade edebiliriz. Yani üç işlemde.

Üç disk için:
1 -> 3
1 -> 2
3 -> 2
1 -> 3
2 -> 1
2 -> 3
1 -> 3
şeklindedir. Yani toplam yedi işlem yapılmaktadır. Ayrıca dikkat edersek n tan diski taşıma için 2^n - 1 tane işlem yapmamız gerekiyor.


Kod:
Algoritmayı anladıktan sonra programlama kısmı oldukça basit. C'ye yakın birçok kişi algoritmayı anlamışsa eğer kodu anlamakta güçlük çekmeyecektir, yeterince sade olduğunu düşünüyorum.

#include <stdio.h>
#include <conio.h>

void disk_mov(int value, int kule1, int kule3, int kule2);

main()
{
int disks;

printf("Tasinacak disk sayisini girin:");
scanf("%d", &disks);

disk_mov(disks, 1, 3, 2);


getch();
return 0;
} 

void disk_mov(int value, int kule1, int kule3, int kule2)
{
if (value == 1) {
printf("%d -> %d\n\
", kule1, kule3);
return;
}

disk_mov(value - 1, kule1, kule2, kule3);
printf("%d -> %d\n\
", kule1, kule3);
disk_mov(value - 1, kule2, kule3, kule1);
}
*MeLeK* isimli üyemiz çevrimdışıdır. (Offline)  
Bu Mesajı Google'a Ekle!Bu Mesajı FaceBook'da Paylaş!
Alıntı ile Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz!

Konu Araçları
Stil

Yetkileriniz
Konu Açma Yetkiniz Yok
Mesaj Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı

Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar son Mesaj
Ağrı Dağı'na sığınma kuleleri yapılacak ayş€ Haberler 0 11-08-2007 01:21


Tüm Saatler GMT +3. Şuan Saat: 09:52 .
(Türkiye için GMT +2 seçilmelidir.)


Powered by vBulletin Version 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
www.SensiZOlmuyoR.org © 2007 - 2008


Bağış yapın

* Metin2 * Trendy Bayan *Sohbet * Bilgisonsuz