• Sonuç bulunamadı

Kavramlar. Veri yapıları ve algoritmalar. Dr.Öğr.Üyesi Hüseyin Bilal MACİT

N/A
N/A
Protected

Academic year: 2022

Share "Kavramlar. Veri yapıları ve algoritmalar. Dr.Öğr.Üyesi Hüseyin Bilal MACİT"

Copied!
17
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

Veri yapıları ve algoritmalar

2021 ©

www.hbmacit.com

Kavramlar

Dr.Öğr.Üyesi Hüseyin Bilal MACİT

01

(2)

İçerik

Ka vr am la r

è Veri

è Veri yapısı è Veri modeli è Bellek

è Bellek sınıfları è Programlama dili

è Derleyici ve yorumlayıcı è Hata türleri

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(3)

Veri

è Tek başına bir anlam ifade etmeyen, düzensiz, işlenebilir, sayı, harf, kelime, sembol veya nesnelere veri (data) denir.

è Ölçüm, sayım gibi yöntemlerle toplanan veriye nicel veri denir. Nicel veriler genellikle hesaplanabilir ve analiz edilebilir parametreler grubudur.

è Sayısal bir değeri olmayan ve üzerinde doğrudan matematiksel işlem yapılamayan veriye nitel veri denir. Nitel veriler genellikle karakter ve kelime gruplarından oluşur.

akıl

bilgi

enformasyon

veri ham

anlam koşul aksiyon

sensör1: 30, sensör2: 65 sıcaklık 30o, nem %65 ortam sıcaklığı yüksek, nem oranı düşük

klimayı çalıştır

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

è Gruplandırılıp işlenebilir hale getirilmiş verilere enformasyon denir. Enformasyona

dönüştürülmüş verilerin işlenmesi ve

anlamlandırılması ile bilgi elde edilir. Bilgi;

karar verme ve uygulama aşamasında kullanılabilir.

(4)

Veri yapısı

è Bilgisayar dünyasında veri; bir program veya programlama dili ile üzerinde işlem yapılabilecek bir parametre veya parametreler kümesidir. Veri yapısı, verinin bellekte tutulma biçimini gösterir. Veri yapıları sayesinde bellekte veriler düzenli bir şekilde saklanır, organize edilir ve bu verilere erişilir.

Veri yapıları temel (primitive) ve bileşik (non-primitive) olmak üzere iki sınıfta incelenir.

è Temel veri yapılarının bir arada kullanılması ile bileşik veri yapıları oluşturulur. Programcı,

gereksinimine göre bu veri yapılarını kullanabilir veya bu veri yapılarını kullanarak yeni bir veri yapısı (struct) tanımlayabilir. Örneğin tek bir struct içerisinde aynı anda sayılar, karakterler veya bunları içeren diziler düzenli şekilde saklanıp kullanılabilir.

Veri yapıları

temel bileşik

integer doğrusal doğrusal olmayan

float statik dinamik

ağaç graf

char dizi bağlı liste yığın kuyruk

boolean

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(5)

Veri modeli

è Aynı türden verilerin bellekte sıralanma biçimi veya veri kümesi içindeki verilerin birbirleriyle

ilişkisine veri modeli denir. Veri modeli, programın çalışma hızı ve bellek gereksinimi ile doğrudan ilişkilidir. Bir problemin çözümü için geliştirilen yöntem ne kadar önemliyse kullanılacak veri modeli de o kadar önemlidir.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(6)

Veri modeli

è Günümüzde en çok kullanılan veri modelleri:

1. Liste veri modeli; aynı türden verilerin sırayla tutulması ilkesine dayanır. Veriler bellekte ardışık olarak veya dağınık olarak dizilmiş olabilir.

2. Ağaç veri modeli; düğümler ve dallardan oluşan ve yapı olarak ters çevrilmiş bir ağaca benzeyen veri modelidir. Kabaca her veri ağacın bir düğümünü oluşturur ve düğümler belirli kurallar

çerçevesinde birbirine bağlanır.

3. Graf veri modeli; verilerin birbirlerine ağırlıklı olarak bağlandığı veri modelidir. Bir veri yalnız bir veri ile de diğer tüm verilerle de doğrudan bağlantılı olabilir ancak her bağlantının bir sayısal ağırlık değeri vardır.

4. Durum makinası veri modeli; verileri durumlar olarak ele alıp, sistemin o anki davranışına göre durumlar arasında ilerler.

5. İlişkisel veritabanı modeli; veritabanı tablolarının birbirleriyle ilişkisini ifade eder.

6. Ağ veri modeli; katmanlı ağ mimarilerinde ağ düğümlerinin bağlantıları ve bu bağlantılar üzerinde paketlerin yönlendirilmesi ile ilgilenir.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(7)

Bellek

è Bellek; veri, bilgi ve komutları geçici veya kalıcı olarak depolamak için kullanılan fiziksel aygıttır. Bir mikroişlemcinin bir defada işleyebildiği dijit sayısına bir kelime (word) denir.

è Bellekler aşağıdaki özelliklerine göre sınıflandırılırlar.

1. Konum: Belleğin fiziksel konumuna göre dahili veya harici bellek olarak sınıflandırılırlar.

2. Kapasite: Belleğin depolayabildiği veri sayısını ifade eder.

3. Erişim metodu: Veriye erişim metoduna göre bellekler; Direct Memory Access, Sequential Access, Random Access ve Associative Access şeklinde sınıflandırılır.

4. Aktarım birimi: Bir defada aktarılan veri sayısını ifade eder. Genellikle dahili bellekler bir defada bir kelime aktarırken, harici bellekler veriyi bloklar halinde aktarırlar.

5. Performans: Belleğe ilk erişim, sıradaki adrese erişim ve diğer aygıtlara verinin iletilmesi süresi ile ilgilidir.

6. Fiziksel yapı: Belleğin manyetik, optik, yarı iletken gibi fiziksel yapısını ifade eder.

7. Karakteristik: Belleğin okunabilme ve yazılabilme durumunu gösterir.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(8)

Bellek sınıfları

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

è Bellekler dört sınıfa ayrılır.

1. Birincil bellek: bilgisayarın işlemcisi ile doğrudan ilişkili olan bellektir. Kapasitesi ikincil bellekten daha düşük ancak hızı çok daha yüksektir. İşlemci bir programı çalıştırmak istediğinde o

programın yönerge ve verileri birincil belleğe yüklenir. Günümüzde en fazla kullanılan birincil bellek modeli RAM’dir (Random Access Memory). RAM’ler; mimarileri ve çalışma şekillerine göre statik (SRAM) ve dinamik (DRAM) olarak iki sınıfa ayrılır. Tüm RAM’ler enerji kesintisinde

depoladığı veriyi kaybeder.

2. İkincil bellek: birincil bellekten daha yavaş, ancak verileri kalıcı olarak depolayan bellektir.

Harddisk, DVD-ROM, CD-ROM, USB bellek gibi bellekler bu sınıfa aittir.

3. Ön bellek: Birincil bellek ile işlemci arasında köprü olarak çalışan, belleğe erişim süresini

kısaltan küçük boyutlu bellektir. İşlemciye yakınlığına göre seviyelere (level) ayrılır ve bu şekilde adlandırılır (L1, L2, L3 vb.).

4. Yazmaç: Bilgisayarda bulunan en hızlı ve en küçük bellek tipidir. Yazmaçlar mikroişlemci içerisinde bulunur ve genellikle bir kelime boyutundadırlar.

(9)

Programlama dili

è İki insanın birbirleriyle iletişim kurmak için karakterler ile oluşturulan kelimelerin belirli kurallar çerçevesinde anlamlı ifadeler oluşacak şekilde düzenlenmesine dil denir. İnsan ile bilgisayarın iletişim kurması için ortak bir dile ihtiyaç vardır. Bilgisayara girdiler verilerek çıktılar üretmesini sağlayan, komut ve yönergelerden oluşan ve kendi içinde dil bilgisi kuralları olan formal dile programlama dili denir. Programlama dilleri, donanıma ve kullanıcıya yakınlık durumuna göre düşük seviye diller ve yüksek seviye diller olarak iki sınıfta incelenir.

è Bir programlama dili aynı anda hem kullanıcıya hem de donanıma yakın olamaz.

programlama dili

düşük seviye diller yüksek seviye diller

assembly makine dili C, C++, Java, Python vb.

donanım makine dili assembly dili yüksek seviye dil

kullanıcı

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(10)

Programlama dili Düşük seviye dil

è Düşük seviye dil, bilgisayar tarafından doğrudan çözümlenebilen tek programlama dilidir. Bilgisayar düşük seviye dil komutlarını yürütmek için bir çevirmene ihtiyaç duymaz. Bu nedenle düşük seviye dil komutları çok hızlı çalıştırılır. İnsan tarafından anlaşılması çok zordur. Bu nedenle hataları tespit etmek ve düzeltmek çok zordur. Düşük seviye dil komut setleri donanım bağımlıdır, yani bir işlemci için hazırlanmış komut seti farklı işlemci mimarisinde çalışmaz.

è Düşük seviye diller makine dili ve assembly dilidir.

1. Makine dili; yalnızca 0 ve 1’lerden oluşan, doğrudan işlemci tarafından işlenebilen komutları içerir. Bu komutların insan tarafından anlaşılması mümkün değildir. Makine dili kodları genellikle hexadecimal formda gösterilir.

2. Assembly dili; insan tarafından zor anlaşılabilen ve hiyerarşide makine dilinin üzerinde yer alan programlama dilidir. Assembly dilindeki komut setini makine diline çeviren yazılıma assembler denir. Günümüzde çok kullanılan assembler yazılımlara örnek olarak GAS, MASM, FASM ve NASM verilebilir.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(11)

è Makine dili kodları genellikle hexadecimal formda gösterilir.

Programlama dili Düşük seviye dil

assembly

kodu makine

assembler kodu

assembly kodu makine kodu (bayt) MOVL $0xFF001122, %eax B8 22 11 00 FF

ADDL %ecx, %edx 01 CA

XORL %esi, %esi 31 F6

PUSHL %ebx 53

MOVL 4(%esp), %ebx 8B 5C 24 04 LEAL (%eax, %ecx, 2), %esi 8D 34 48

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(12)

Programlama dili Yüksek seviye dil

è Yüksek seviye programlama dili, donanımın ayrıntılarından güçlü bir şekilde soyutlanmış ve günlük konuşma diline yaklaştırılmış programlama dilidir. Düşük seviyeli programlama dillerinin aksine, doğal dil öğelerini kullanabilir.

è Yüksek seviye dil, genellikle bellek yönetimini otomatikleştirir ve kullanıcının bu problemle

uğraşmasını engeller. Böylece program geliştirme sürecini kolaylaştırır. Programlama dili kullanıcıyı donanımdan ne kadar soyutlarsa o kadar üst düzey dil olarak sınıflandırılır. Ayrıca hata bulma (bug) ve hata giderme (debug) işlemleri düşük seviye dillere göre çok daha basit ve hızlı gerçekleştirilebilir.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(13)

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

Programlama dili Yüksek seviye dil

è Yüksek seviye diller 4 sınıfta incelenir.

1. Zorunlu (imperative) dil; belirli problem türlerini çözmek için tasarlanmıştır. Programcı bir problemin nasıl çözülmesi gerektiğini söyleyen bir dizi komut yazarak problemi çözebilir. Bu komutlar yüksek seviyeli kaynak koddan çalıştırılabilir obje koduna çevrilir. Kullanıcı için ön tanımlı fonksiyonlar vardır (ör: print) ve bu fonksiyonlar ile daha hızlı çözümler üretilebilir.

2. Bildirimsel (declerative) dil; çalışmak üzere tasarlandığı etki alanına göre değişir ve etki alanına özgü dil olarak da bilinir. Programcı yalnızca talebini yazar ve sonucunu alır. XML, HTML gibi çoğu işaretleme dili bu sınıfa girer. SQL gibi sorgu dilleri de bildirimsel dil sınıfındadır.

3. Fonksiyonel (functional) dil; bir tür bildirimsel dildir. Aynı tür girdinin aynı tür çıktıyla

sonuçlanacağı matematiksel ifadeler gibi yapıları (fonksiyonlar) kullanır. Fonksiyonlar diğer fonksiyonları çağırabilir ve bir fonksiyonun çıktısı diğerinin girdisi olarak kullanabilir.

4. Nesneye yönelik (object oriented) dil; problemi modellemek için nesneleri ve nesneleri tanımlamak için sınıfları kullanır. Nesne yönelimli programlama (OOP), ekip çalışmasını kolaylaştıran modüler tasarım sunar. Nesneye yönelik programlamanın dört ana ilkesi kapsülleme, soyutlama, kalıtım ve çok biçimliliktir.

Ka vr am la r

(14)

è Düşük seviye diller ile yüksek seviye diller arasındaki temel farklar tablodaki şekildedir.

Programlama dili

Düşük seviye dil Yüksek seviye dil

Makinenin anlayacağı tasarımdır. Kullanıcının anlayacağı tasarımdır.

İfadeler 0 ve 1’ lerden oluşur. İfadeler anlaşılabilir kelimelerden oluşur.

Assmebler ile veya doğrudan çalıştırılabilir. Çalışmak için derleyiciye veya yorumlayıcıya ihtiyaç duyar.

Taşınabilir değildir, yalnızca tasarlandığı makinede

çalışır. Taşınabilirdir. Uygun donanımlarda çalışabilir.

Bellek daha verimli kullanılır. Bellek daha verimsiz kullanılır.

Hata bulmak ve düzeltmek zordur. Hata bulmak ve düzeltmek kolaydır.

Daha hızlı çalıştırılır. Daha yavaş çalıştırılır.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(15)

Derleyici ve yorumlayıcı

è Derleyici (compiler); yüksek seviye programlama dilinde yazılmış kodu makine koduna dönüştüren bir bilgisayar programıdır. İnsan tarafından okunabilir kodu bir bilgisayar işlemcisinin anlayacağı dile (binary) çevirir. Derleyici tüm kaynak kodu işleyip çalıştırılabilir forma (ör: exe) dönüştürdüğü için kodun tümünün hatasız olması gerekir. Derleyici kaynak kodda bulunan hataları düzeltemez.

Dolayısıyla bir hata varsa, derleme işleminden önce tespit edilmelidir.

è Yorumlayıcı (interpreter); derleyiciden farklı olarak kodu satır satır çalıştırır. Bir satırda hata varsa yorumlayıcı diğer hataları göremeden yorumlama işlemini sonlandırabilir. Derleyici kaynak kodu çalıştırmadan önce bir çalıştırılabilir dosya üretirken yorumlayıcı çalıştırılabilir dosya üretmez.

è Derleyici kullanan program dillerine örnek olarak; C++, Pascal, Ada, Visual Basic, C verilebilir.

Yorumlayıcı kullanan program dillerine örnek olarak; HTML, XML, PHP verilebilir. Hem derleyici hem de yorumlayıcı kullanan programlama dillerinden biri Java’dır. Java kodu derlenerek byte code adlı sadece Java sanal makinede (JVM) çalıştırılabilen bir kod üretilir. Üretilen byte code, farklı

platformlarda JVM tarafından yorumlanarak çalıştırılabilir.

makine kodu

yüksek seviye dil derleyici yüksek seviye dil yorumlayıcı makine kodu

sıradaki komut

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(16)

Hata türleri

è Programın yanlış çıktılar üretmesine neden olan veya programın çalışmasını tamamen engelleyen sorunlara hata (bug) denir. Sık karşılaşılan hata tipleri:

1. Sözdizim hatası (syntax error); programlama dilinin sözdizim kurallarına uyulmaması veya yazım hatası yapılması sonucu ortaya çıkan hatalardır. Açılan bir parantezin kapatılmaması sözdizim hatası örneğidir. Tespit edilmesi ve düzeltilmesi oldukça kolaydır.

2. Çalışma zamanı hatası (runtime error); kaynak kodun derlenmesi aşamasında fark edilemez.

Bu nedenle tespit edilmesi zordur. Sıfıra bölme hatası en sık karşılaşılan çalışma zamanı hatasıdır.

3. Bağlayıcı hatası (linker error); genellikle yanlış kütüphane çağrılması veya kaynak kodda kütüphanedeki fonksiyonla aynı isimde fonksiyon tanımlanması sonucu oluşur. Bu durumda kütüphane veya ilgili fonksiyon obje koda bağlanamaz.

4. Mantıksal hata (logical error); tespit edilmesi zor bir hata türüdür. Program hatasız derlenmiştir ancak ürettiği çıktı beklenenden farklıdır.

5. Semantik hata (semantic error); kullanılan ifadenin derleyici tarafından anlaşılamadığı durumda meydana gelir.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

(17)

Hata türleri

#include<iostream>

using namespace std;

intMain() { inta = 2 b = 10;

intc = b / 0;

intd;

d = d + 3;

inttoplam = 0;

for (int i = 0; i < 5; i++);

{

toplam = toplam + i;

} }

kaynak kod

0201 03 04 0506 07 08 09 1011 12 13 14 1516

è Örnek kaynak kodda programcı tarafından yapılmış hatalar ve türleri;

1. 4.satırda bağlayıcı hata var. Ana fonksiyon adı main() olması

gerekirken Main() yazılmış. Bu durumda ana fonksiyon obje koda bağlanamaz.

2. 6.satırda sözdizim hatası var. Komut noktalı virgül ile sonlandırılmamış.

3. 7.satırda sözdizimi hatası var. Değişken türü belirtilmemiş.

4. 8.satırda çalışma zamanı hatası var. Bir sayı 0’a bölünemez.

5. 10.satırda semantik hata var. Değer ataması yapılmamış bir değişken aritmetik işleme sokulmuş.

6. 12.satırda mantıksal hata var. For döngüsü bitiminde noktalı virgül kullanılmış.

Ka vr am la r

Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com

Referanslar

Benzer Belgeler

İkinci Düzey Programlama Dilleri : Düşük Düzeyli Assembly Dili.. Bu diller makine kodundan

• Yüksek seviyeli dillerde yazılan programları makine diline çeviren çevirici programlara Derleyici (Compiler) denir. • Yüksek seviyeli diller programcılara günlük

Yüzyılın Sonunda Osmanlı-İspanya İlişkileri: İlk İspanyol Daimi Elçisi Don Juan de Bouligny Örneği.” Turkish Studies: International Periodical For The Languages,

13 bu fonksiyonu etkinleştirirseniz, açılma sırasında KAPA komutu çalışmayı durdurur, aksi halde KAPA komutu derhal veya açılmanın sonunda hareketi tersine

void setLabel (String label) Belirtilen dize ile düğmenin etiketini ayarlar..

Sabit Noktalı Sayılar: Artı veya eksi olabilen tamsayı veya ondalık sayı gösterimini içerir.. Kayan Noktalı Sayılar: Artı veya eksi olabilen ±mx10 e

ì Algoritma; belli bir problemi çözmek veya belirli bir amaca ulaşmak için tasarlanan adımlar kümesidir3.

Daha sonra, AsalKontrol altyordamı i değerini alır ve i’nin bir asal sayı olup olmadığını hesaplar. Sonuç, daha sonra altyordamın