GithubHelp home page GithubHelp logo

oguzhankoc55 / counting-words-with-the-linked-list-prolab_1.3 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ysfarslan1/counting-words-with-the-linked-list-prolab_1.3

0.0 0.0 0.0 784 KB

C 100.00%

counting-words-with-the-linked-list-prolab_1.3's Introduction

Prolab1 3.Proje

BAĞLI LİSTE İLE KELİME SAYMA

Problem Tanımı

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.

Yapılan araştırmalar

  • 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.

Tasarım

Akış Şeması

image

Yazılım Mimarisi

1- Düğüm İşlemleri

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.

image

2- Fonksiyonlar

void ekle(char *kelime) fonksiyonu:

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.

image

int say(char * deneme1) fonksiyonu:

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.

image

int ozelMi(char *kelime) fonksiyonu:

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.

image

void basaEkle(char *kelime) fonksiyonu:

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.

image

void arayaEkle(char *kelime) fonksiyonu:

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.

image

void sonaEkle(char *kelime) fonksiyonu:

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.

image

void yazdir() fonksiyonu:

Fonksiyonumuzda bağlı listede bulunan düğümlerin elemanları olan adet ve S_kelime sırasıyla yazdırılır.

image

Genel Yapı

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.

KAYNAKÇA

https://www.youtube.com/watch?v=lTFmKiyo0nU&list=PLUUSh8du1azZEsdngPxMQGLnatId0V4h9

http://edestek2.kocaeli.edu.tr/course/view.php?id=50

https://stackoverflow.com/

https://github.com/

https://www.geeksforgeeks.org/

counting-words-with-the-linked-list-prolab_1.3's People

Contributors

ysfarslan1 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.