Bize verilen metin belgesi içerisindeki kelimeleri dizi kullanmadan kelimelerin metin içindeki tekrar sayısı değerlerinin büyüklüklerine göre sıralanması ve anlık olarak oluşturulan bağlı listeye eklenmesi istenmektedir.
- Projede kullanmamız gereken konu ve yöntemlere karar verdik.
- Bağlantılı liste hakkında araştırmalar yaptık.
- Verilen dosyadaki metini dizi kullanmadan almakta ve kıyaslamada sıkıntı yaşadık.
- Alınan metni stdlib.h kütüphanesindeki malloc fonksiyonu kullanılarak bellekte metnin tutulabileceği bir yer ayırdık. fgets() fonksiyonu kullanılarak metni kopyaladık.
- Alınan metindeki kelimeleri ayırırken sıkıntı yaşadık.Alınan metni string.h kütüphanesindeki strtok() fonksiyonu kullanılarak kelimelere ve işaretlere ayırdık. Alınan kelimeleri malloc fonksiyonu kullanılarak bellekte tuttuk.
- Alınan kelimelerin metindeki sayılarının bulunmasında sıkıntı yaşadık.Metindeki kelimelerin adet sayılarını bulurken kullandığımız iç içe yerleştirdiğimiz döngüler kıyaslama ve sayma yaparken gönderilen adresler de karışma oluyordu .Bu hatalardan kurtulmak için kelimelerin karşılaştırılmasında kullanmak için yeni bir metin belgesi oluşturduk ve metni değiştirerek yeni metin belgesine kaydettik.
- Bağlı listeyi oluştururken eklenen kelimelerin tekrar etmelerini önlemekte sıkıntı yaşadık.Kelimelerin tekrar etmelerini önlemek için bağlı listeyi dolaşan ve alınan kelimeyle kıyaslayan bir fonksiyon yazdık.
- Bağlı listeyi oluştururken kelimelerin adet sayılarını kıyaslanması ve konumlarının bulunmasında sıkıntı yaşadık.Kelimelerin tekrar sayıları ve bağlı listede bulunmadıkları kontrol eden bir fonksiyon yazdık.
Projede yapmak istediğimiz metinde geçen kelimelerin adet sayılarına göre bağlı listedeki düğümlerde sıralamaktır. Bu işlemi yaparken her düğümü temsil eden bir struct kullandık. Bu struct içinde S_kelime adında kelimenin adresinin tutulduğu pointer ,bir sonraki düğümün adresini tutan kendi tipinden olan sonraki adlı pointer ve kelimenin metinde bulunma sıklığını tutan adet isimli integer tipinde değişkenimiz bulunmaktadır.Düğümü gösteren struct aşağıdaki şekildeki gibidir.
Fonksiyonumuzun başlangıcında alınan pointerın adresinde bulunan kelimenin ozelMi fonksiyonu ile bağlı listede bulunup bulunmadığının kontrolü yapılır.Alınan kelimenin adet sayısının integer olarak tutulan enBuyuk ve enKucuk değerleriyle kıyaslanarak kelimenin basaEkle,sonaEkle veya arayaEkle fonksiyonlarından birine gönderilmesi sağlanarak bağlı listeye eklenir.
Fonksiyonumuzun başında metin belgesinden okuma yapılır. Kullandığımız malloc fonksiyonu ile bellekten yer ayırılır. Ayırdığımız alana metin belgesinde bulunan metini kopyalanır. Say fonksiyonuna gönderilen pointer ile metin belgesindeki ayrılan kelimeler while döngüsü içinde karşılaştırılarak sayaç yardımıyla kelimenin metin içinde kaç adet olduğu bulunur ve return edilir.
Fonksiyonumuzda bağlı listede bulunan düğümlerdeki S_kelime ile fonksiyona gönderilen kelime pointerının tuttukları adreslerdeki kelimeler karşılaştırılır.Kelimeler eşitse 0 değeri return edilir,değilse 1 değeri return edilir.Böylece aynı kelimenin tekrarından kaçınılmış olunur.
Metinden aldığımız kelimenin adet sayısı bağlı listenin başlangıcındaki düğümde bulunan adet sayısından büyük ise kelime bağlı listenin başlangıç konumuna yerleştirilmesi için başaEkle fonksiyonuna gönderilir.Fonksiyonumuzda yeni bir düğüm oluşturulur ve bağlı listenin başlangıç konumuna yerleştirilir.
Metinden aldığımız kelimenin adet sayısı bağlı listenin başlangıcındaki düğümde bulunan adet sayısından küçük ise ve integer olarak tutulan enKucuk değerinden büyük ise kelimenin adresi fonksiyona gönderilir.Fonksiyonumuzda yeni bir düğüm oluşturulur ve düğümün yerinin bulunması için bağlı listede karşılaştırılma yapılır.Bulunan konuma düğüm yerleştirilir.
Metinden aldığımız kelimenin adet sayısı integer olarak tutulan enKucuk değerinden küçük ise kelime bağlı listenin bitiş konumuna yerleştirilmesi için sonaEkle fonksiyonuna gönderilir.Fonksiyonumuzda yeni bir düğüm oluşturulur ve bağlı listenin bitiş konumuna yerleştirilir.
Fonksiyonumuzda bağlı listede bulunan düğümlerin elemanları olan adet ve S_kelime sırasıyla yazdırılır.
Projemizde başlangıç olarak metin dosyası içinde bulunan metin alınır. Metin malloc fonksiyonu ile bellekte ayırdığımız alan içerisine yerleştirilir. Sonrasında metnin içerisinde düzenlemeler yapılır. Oluşturduğumuz yeni metin belgesine bu metin yerleştirilir ve yeni oluşan metin bellekteki ayırdığımız alana atılır. Sonrasında metindeki kelimeler teker teker ayrılarak ekle fonksiyonuna gönderilir. İlk olarak kelimenin tekrar sayısına ve bağlı listede bulunma durumuna bakılır. Bu kıyaslamalar yapıldıktan sonra kelimenin adet sayısına göre basaEkle , sonaEkle ve arayaEkle fonksiyonları ile kelimeler bağlı listeye eklenir. Ekleme işlemi bittikten sonra yazdır fonksiyonu yardımıyla kelimeler ekrana yazdırılır.
https://www.youtube.com/watch?v=lTFmKiyo0nU&list=PLUUSh8du1azZEsdngPxMQGLnatId0V4h9