54
Veri Yapıları ve Algoritmalar Giriş (Genel Tanımlar ve Kavramlar) Dr. Öğr. Üyesi M. Ozan AKI 20.10.2018

Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

  • Upload
    ngotruc

  • View
    262

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Veri Yapıları ve Algoritmalar

Giriş(Genel Tanımlar ve Kavramlar)

Dr. Öğr. Üyesi M. Ozan AKI

20.10.2018

Page 2: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Bilgisayar YapısıBilgisayar

Donanım Yazılım

Mikroişlemci

Mikrodenetleyici

CPU, uP, MCU, uC

Memory

Bellek, Hafıza

I/O

Input Output

Giriş Çıkış

Instructions

Komutlar

Data

Veriler

CISC / RISC

8 Bit, 16 Bit,

32 Bit, 64 Bit

Register, Cache,

RAM, ROM, FLASH

SSD, HDD, FDD

CD, DVD, Bray...

COM, LPT, PS/2,

USB, 1394, VGA,

DVI, HDMI...

Donanım Mimarileri / Hardware Architectures

Von-Neuman / Harvard

Data BUS (Veri yolu)

Address BUS (Adres Yolu)

Control BUS (Kontrol Yolu)

CPU Instruction Set

Machine Language

(Assembler)

Bit (Flags)

Registers,

Data BUS

(8,16,32,64 Bit)

Düşük Seviyeli

Diller

(C)

Orta Seviyeli Diller

(Basic, C++,

Pascal,)

Yüksek Seviyeli

Diller

(Visual Basic, C++,

Java, Delphi, C#,

Pyton, Prolog..,)

Signed / Unsigned

Integer / Floating P.

Structures / Unions

Signed / Unsigned

Integer / Floating P.

Structures / Unions

Classes / Objects

Signed / Unsigned

Integer / Floating P.

Structures / Unions

Classes / Objects

Page 3: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Donanım Mimarileri

Donanım Mimarileri: Mikroişlemci, Bellek ve Giriş/Çıkış birimlerinin arasındaki veri aktarımını sağlayan fiziksel yolların bağlantı tasarımları ve belleklerin organizasyonunu belirleyen tasarımlardır.

Günümüzde yaygın olarak kullanılan iki Mimari türü mevcuttur:

• Von Neumann Mimarisi (John Von Neumann 1945)

• Harvard Mimarisi (Harvard Mark I, Harvard Univ. 1944)

Page 4: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Von Neumann Mimarisi

Mikroişlemcinin çalışması için gerekli komutlar ve bu komutların işleyeceği veriler aynı fiziksel bellek üzerinde bulunurlar.

Bu veriler, «Adres Yolu» ile adreslenen bellek bölgesinden «Veri Yolu» aracılığı ile Mikroişlemci ile Bellek üniteleri arasında aktarılır.

Page 5: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Harvard Mimarisi

Harvard Mimarisinde, Mikroişlemcinin çalıştıracağı komutlar (instructions) «Program Belleği»nde, bu komutların işleyeceği veriler ise «Veri Belleği»ndebulunur. Bu bellekler fiziksek olarak ayrı bellekler olup, ayrı adres ve veri yollarından Mikroişlemciye bağlıdır. Veri belleğinde komut ya da program belleğinde veri bulunamaz.

Page 6: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Donanım Mimarileri

DEP (Data Execution Preventation)Windows: Bilgisayarım -> Özellikler -> Gelişmiş Ayarlar -> Sistem özellikleri -> Advanced -> Performance -> Ayarlar -> Data Execution Prevention

Page 7: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Mikroişlemci (CPU, P)Temel lojik ve aritmetik işlemleri, bir dizi komutla sıralı bir şekilde gerçekleştirebilen sayısal tüm devrelerdir.

Çalışması gerekli komutları, komutların saklı olduğu bir bellekten okunması gerekir.

Ayrıca komutların işleyeceği verileri almak ve işlemlerin sonuçlarını saklamak için bir veri belleği gereklidir

Tüm işlemler, mikroişlemciye saat darbelerini (pulse) sağlayan osilatörün her bir çevriminde gerçekleşir.

Saat darbelerinin bir saniyedeki sayısı (Hz), işlemlerin ne kadar hızlı yapılacağını belirler.

Page 8: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Mikroişlemci Temel Birimleri

Mikroişlemci Temel Birimleri• ALU (Arithmetic-Logic Unit) (Aritmetik-lojik Birim)• Registers (Kaydediciler)• Control Unit (Kontrol Birimi)

Page 9: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Mikroişlemci ile ilgili Kavramlar•Reset Vectorİlk Enerji verildiğinde ya da Resetlendiğinde Çalıştırılacak komutların başlangıç adresidir. Genelde 0x0000 adresidir.

•Fetch & ExecutionKomutların bellekten sırasıyla alınır işlenmesidir. Bu işlem içinde ayrıca işemci zamanı harcanır. (Pipeline?)

•Flags (PSW – Program Status Word)Çalışma durumu ve komutların çalışma sonuçları ile ilgili bilgilerin bit olarak tutulduğu kaydedicidir.

•Instruction Pointer (IP) / Program Counter (PC)Komutları sırasıyla çalışmasını sağlayan sayaçtır. Bu sayaç dallanma komutları ile değiştirilerek komut işleyişinin sırası değiştirilir. (Kaç bit olmalı?)

Page 10: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

CISC / RISC Komut Setleri

CISC (Complex Instruction Set Computer) Örn: 8086/8088

RISC (Reduced Instruction Set Computer) Örn: PIC16F84A

AAA, AAD, AAM, AAS, ADC, ADD, AND, CALL, CBW, CLC, CLD, CLI, CMC, CMP, CMPSB, CMPSW, CWD, DAA, DAS, DEC, DIV, ESC, HLT, IDIV, IMUL, IN, INC, INT, INTO, IRET, JA, JAE, JB, JBE, JC, JCXZ, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ, JMP, LAHF, LDS, LEA, LES, LOCK, LODSB, LODSW, LOOP, MOV, MOVSB, MOVSW, MUL, NEG, NOP, NOT, OR, OUT, POP, POPF, PUSH, PUSHF, RCL, RCR, REP, REPE, REPNE, REPNZ, REPZ, RET, RETN, RETF, ROL, ROR, SAHF, SAL, SAR, SBB, SCASB, SCASW, SHL, SHR, STC, STD, STI, STOSB, STOSW, SUB, TEST, WAIT, XCHG, XLAT, XOR

ADDWF, ANDWF, CLRF, CLRW, COMF, DECF, DECFSZ, INCF, INCFSZ, IORWF, MOVF, MOVWF, NOP, RLF, RRF, SUBWF, SWAPF, XORWF, BCF, BSF, BTFSC, BTFSS, ADDLW, ANDLW, CALL, CLRWDT, GOTO, IORLW, MOVLW, RETFIE, RETLW, RETURN, SLEEP, SUBLW, XORLW

Page 11: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

CISC vs RISC

CISC Komut SetiCMP A,B

JB X

MOV AX,[A]

JMP Z

X:

MOV AX,[B]

Z:

MOV [C],AX

A ve B Bellek adreslerindeki iki sayıyı karşılaştıralım ve büyük olan sayıyı C adresine yazalım

RISC Komut SetiMOVF B,W

SUBWF A,W

BTFSS STATUS,C

GOTO X

MOVF A,W

GOTO Z

X:

MOVF B,W

Z:

MOVWF C

Page 12: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Flags – Durum Bayrakları

8086 Program Status Word (PSW) Flag Register

Page 13: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Bellek – Hafıza - MemoryBellekÜzerinde bilgi saklanabilen tüm birimler «Bellek» olarak adlandırılır.

Bilgiyi Tutma Durumuna Göre Bellekler Çeşitleri

Bilgiyi Tutma Durumuna Göre

Bellek Çeşitleri

Kalıcı Bellekler Geçici Bellekler

ROM, PROM, EPROM, EEPROM, FlashCD-ROM, DVD-ROM, BlueRay Harddisk, Disket, Kartuş, Kaset

RAM, SRAM, DRAM, SDRAM, DDR

Page 14: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Fiziksel Ortamına Göre Bellek Çeşitleri

Page 15: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Erişim Durumuna Göre Bellek Çeşitleri

Analoji: Depo -> Toptancı -> Bakkal -> Buzdolabı -> Masadaki Tabak

Page 16: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Belleğin Adreslenmesi

RegisterDoğrudan kaydedici adı ile kullanılırlar, bellek adresleri söz konusu değildir.Kaydedicilerin bellek adresi yoktur, «Instruction Word» içerisinde kodlanmıştır.

BellekBellek adresi ile kullanılırlar.Her adres bir bellek hücresine işaret eder.Her hücre, veriyolu bit sayısı kadar veri saklar

Page 17: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Yazılım & Program

Yazılım (Software)Yazılım, bir işin gereklerini tümüyle karşılamak amacıyla tasarlanmış ve birçok alt bileşenden ve alt programdan oluşan bir sistemdir.

Program (Programm)Program, bir algoritmanın belirli bir programlama dilinde kodlanmasını kapsar. Sadece spesifik bir amaca yönelik olup, bir yazılımın parçası olabilirler.

Page 18: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Kaynak Kod & Derleyici & BağlayıcıMakine Dili (Machine Language)Komut setlerini oluşturan ikili sayılardır. Doğrudan mikroişlemciye girilebilir.

Birleştirici Dil (Assembly)İnsan tarafından okunabilir ve anlaşılabilir OPCODE lar makine diline çevrilir.

Kaynak Kod (Source Code)Yüksek seviyeli dillerin kaynak kodlarını makine diline çevirerek object file olarak kaydeder.

Compiler (Derleyici)Yüksek seviyeli dillerin kaynak kodlarını makine diline çevirerek object file olarak kaydeder.

Cross Compiler (Çapraz Derleyici)Yüksek seviyeli dillerin kaynak kodlarını üzerinde çalıştığı makineden farklı bir işlemcinin makine diline çevirerek object file olarak kaydeder.

Linker (Bağlayıcı)Daha önce derlenmiş olan object dosyaları birleştirerek çalıştırılabilir (COM, EXE, DLL, BIN, HEX) dosyayı elde eder ve kaydeder.

Page 19: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Kaynak Kod & Derleyici & Bağlayıcı

Page 20: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Makine Kodu & Assembly DiliMakine dili, mikroişlemcinin tasarımından doğan komut seti (instruction set) komutlarıyla oluşturulan programlardır.Makine dili komutları doğrudan ikilik taban (binary) ya da onaltılık taban (hexadecimal) şeklinde gösterilebilen sayıt formatındadır. Bu nedenle makine dilinde bir programın kodlanması oldukça zor ve karmaşıktır.

Sayısal formdaki her bir makine kodunun, insanlar için daha anlamlı olan ve komutun icrasını hatırlatan kısaltma şeklindeki kelimelere dönüştürülmesiyle Assembly Dili oluşturulmuştur.

Makine ve Assembly dilleri, doğrudan mikroişlemciye özgü makine dilleri olup, ek bir derleyiciye ihtiyaç duymazlar. Derleme işleminde sadece kelime olan komutlar ikilik sayılara dönüştürülür. Bu diller, mikroişlemciye sıkı sıkıya bağlıdır.

Page 21: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Programlama DilleriBelirli bir Derleyici ya da Yorumlayıcıya bağlı olarak, kendine özgü yazım kuralları çerçevesinde makine dilinden soyutlanmış ve konuşma diline yakın formatta komutlar yazılabilmesini sağlayan kurallar bütünüdür.

Bir dilin derleyicileri, birçok mikroişlemci türüne göre makine dili üretebilecek şekilde geliştirilmiş olabilir. Kodun hangi mikroişlemcide çalışması isteniyorsa, kod o mikroişlemci için derlenmelidir.

Böylece, aynı dilin farklı mikroişlemciler için yazılmış derleyicileri ile, kaynak kodda herhangi değişiklik yapmadan tekrar derleme yoluyla farklı platformlar için çalıştırılabilir kodlar elde etmek mümkün olur.

Page 22: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Programlama Dilli Yaklaşımları

Programlama Dillerinde Dört yaklaşım vardır;

•Prosedürel Yönelimli (Fortran, Pascal, ..)•Nesne Yönelimli (C++, C#, Java, ..)•Mantık Yönelimli (Prolog, ..)•Görev Yönelimli (Verilog, SQL, Mathematica, ..)

Programlama Dilleri, Veri yapıları ve Algoritmalardanoluşur.

Page 23: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

İşletim Sistemleri (Operating Systems - OS)

Donanım, uygulama yazılımları ve kullanıcı(lar) arasında standart bir platform sağlayan, donanımın işlevselliği ve sistem kaynaklarının yönetiminden sorumlu yazılımdır.

Bazı gömülü sistemlerde işletim sistemi bulunmaz ve kullanıcı doğrudan mikrodenetleyiciyi kodlamak zorundadır. Ancak Bilgisayar gibi genel amaçlı ve büyük sistemlerde işletim sistemi bulunur ve uygulama geliştirme, işletim sistemlerinin sağladığı platformlara göre gerçekleştirilir.

Window, Linux, MacOS, Novell, Unix, Android, iOS, SymbianOS, Minix, RTOS birer işletim sistemleridir ve birçok farklı dağıtım ve sürümleri mevcut olabilir.

Page 24: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

İşletim Sistemlerinin GörevleriPOST süreci başarıyla tamamlandıktan sonra BIOS, Disk, CD-ROM, Flash bellek gibi depolama aygıtlarında yükleyici arar (Boot Loader; XP:NTLDR, WIN7:BOOTMGR, Linux:LILO vs.) ve bulduğunda görevi yükleyiciye devreder. Yükleyici ise işletim sistemini başlatır.

İşletim Sisteminin Görevleri•CPU Yönetimi•Görev Zaman Paylaşımı•Giriş-Çıkış İşlemleri•Ana Bellek Yönetimi•Dosya Sistemi (Disk) Yönetimi•Kullanıcı Yönetimi•Güvenlik ve Koruma

Page 25: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Ham Veriden Bilgiye DönüşümBellekte tutulan tüm bilgiler sadece bit dizileri şeklindedir. Bu bit dizileri, sistematik bir şekilde yorumlanarak anlamlı bilgilere dönüştürülür.

Örneğin 0 1 0 0 0 0 0 1 bit dizisi için;

Tamsayı -> 65Hexadecimal -> 41BCD -> 41ASCII -> A

Benzer şekilde, bilgisayar ortamında bulunan tüm veriler (döküman, resim, ses, video, v.s.) tanımlı veri yapılarından türetilmiş ikili kodlar şeklindedir.

Page 26: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Bilgi Büyüklüğünün ÖlçülmesiTüm sayısal sistemlerde bilgi temel bilgi boyutu BYTE tır.BYTE’ı aşan veriler için WORD ifadesi kullanılır.

Bir Byte, 8 bitten oluşur. Gerektiğinde üst katları kullanılır.Byte – Kilo Byte – Mega Byte – Giga Byte – Tera Byte

Üst katlar gerçekte 1024 kat artar. Bazı işletim sistemleri kolaylık bakımından 1000 kat olarak alır. Bu durumda gerçek boyut ile görünen boyut arasında fark oluşur.

Örn: 2GB Bir bellekte;1000 kat hesabı ile; 2*1000*1000*1000 = 2,000,000,000 Byte,1024 kat hesabı ile; 2*1024*1024*1024 = 2,147,483,648 ByteBululunur. Gerçek kapasite 147MB daha büyüktür.

Page 27: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Temel Veri Yapıları

Hemen her derleyicide temel veri yapıları küçük farklılıklarla birlikte aynıdır.

Bazı derleyiciler, kendine özgü veri yapıları içerebilir.Eğer algoritmaya uygun veri yapıları bulunmuyor ise bunu kullanıcı kendisi tanımlamalıdır.

•Karakter•İşaretli / İşaretsiz Tamsayılar•Gerçel Sayılar

Page 28: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Karakterlerin Kodlanması

Çoğu derleyicilerde bulunan temel veri yapısıdır.

char 1 Byte (8 Bit) uzunluğundadır.

ASCII tablosundaki karakterlerin tanımlanması amacıyla kullanılır.

Ancak bunun yanında 8 bit tamsayı olarak ta işlemlere katılabilir.

8 Bit (256 karakter), Standart ASCII tablosunun tümünü adresler. (ALT + Keypad ASCII Code)

Page 29: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

ASCII (American Standart Code for Information Interchange)

Page 30: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

UNICODE Karakter KodlamasıAncak günümüzde farklı alfabelerin ve kullanılan özel karakterlerin tanımlarını kapsamak üzere geliştirilen bu kodlama sistemi 16 bitlik bir tabloyo tanımlar.

Toplam 65535 karakter içeren bu tablo UTF-8 gibi kodlama sistemleri kullanılarak kaydedilir.

Böylece, evrensel bir kod tablosu ile, uluslar arası yazılımların kolayca yazılması ve uyumluluk sorunlarının ortadan kaldırılması sağlanmıştır.

Uygulama: Aynı bilgiyi içeren UNICODE ve ASCII metin dosyalarını kaydederek boyutlarını karşılaştırınız. (https://unicode-table.com/)

Page 31: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

İşaretsiz Tam Sayıların Kodlaması

Tamsayılar, İşaretli ya da İşaretsiz olarak tanımlanırlar.

İşaretsiz tamsayılar, bellekte doğal karşılığı (ikilik taban karşılığı) ile saklanırlar.

Bu sayılar, derleyicinin varsayılan bit sayısı (8, 16, 32, 64) ile sınırlıdırlar.

Örneğin; 39 Sayısı, 8 bit genişliğindeki bellekte 0 0 1 0 0 1 1 1 olarak saklanır.

Eğer bellek hücresinin bit genişliği daha fazla ise, üst bitler 0 (sıfır) ile doldurulur.

Page 32: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

İşaretli Tam Sayıların Kodlaması

İşaretli Tamsayılarda durum biraz farklılaşır;

Aynı bit sayısına sahip bir alanda kodlanacak işaretli sayı ile işaretsiz sayının maksimum ve minimum değerleri farklı olur.

Neden ?

Çünkü işaretli sayının değer bitlerinden biri işaret biti olarak kullanılmak zorundadır.

Bu nedenle,İşaretsiz bir tamsayı, 0 < n < 2n-1 aralığında iken,İşaretli bir tamsayı, -2n-1 < n < 2n-1-1 aralığında olur.

Page 33: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

İşaretli Tam Sayıların Kodlaması

İşaretli Tamsayılar iki yöntemle kodlanabilir;

1) Sayının en solundaki bit işaret biti kabul edilir ve negatif sayılar için bu bir 1, pozitif sayılar için 0 yapılır.

2) İşaret biti için özel bir alan ayrılmaz, negatif sayılar 2’ye tümleyen şeklinde saklanır.

Page 34: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Tam Sayıların Kapladıkları Alanlar

short int -32,768 -> +32,767 (16 bit) unsigned short int 0 -> +65,535 (16 bit) unsigned int 0 -> +4,294,967,295 (32 bit) int -2,147,483,648 -> +2,147,483,647 (32 bit) long int -2,147,483,648 -> +2,147,483,647 (32 bit) signed char -128 -> +127 (8 bit)unsigned char 0 -> +255 (8 bit)

Uygulama: C ile tanımlanan bir tamsayı değişkeninin maksimum ve minimum değerlerini gösteren c programını yazınız.

Page 35: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Gerçek (Kesirli) Sayılar

İki tip gösterim şekli vardır;•Sabit Noktalı (Fixed Point)•Kayan Noktalı (Floating Point)

Bilgisayar uygulamalarında büyük çoğunlukla Kayar Noktalı sayılar kullanılmaktadır.

Ancak kısıtlı bellek ve işlemci gücüne sahip gömülü sistemlerde sabit noktalı sayılar tercih edilir.

Page 36: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Gerçek (Kesirli) Sayılar

Kayan Noktalı (Floating Point) Sayı Formatı (IEEE 754)Bu formatta;1 bit : İşaret biti (sign)8 bit : Üs (exponent) 2’ye Tümleyen şeklinde bulunur.23 bit : Çarpan (fraction)

Sayı = ±Ç x T±Ü (T:Taban=2)

http://www.h-schmidt.net/FloatConverter/

Page 37: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle
Page 38: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Gerçek Sayıların Çözümlenmesi

Örn; 2.5 sayısını IEEE 754 formatında göstriniz.

2.5 = (-1)i · (1 + k) · 2üs-bias

Burada;i : sayının işareti (0:Pozitif ya da 1:Negatif)(1+k) : Çarpan (1 <= Ç < 2, k < 0)bias : sabit (32 bit formda: 127, 64 bit formda:1023)

i=02.5 / 2n = (1+k) n=1 için, 2.5 / 2 = (1 + k), k = 0.25

Böylece, 2.5 = IEEE 754 formatında 1.25· 21 olarak gösterilir.

Page 39: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Gerçek Sayıların Çözümlenmesi

Örn; 3.14 Pi sayısını IEEE 754 formatında göstriniz.

3.14 = (-1)i · (1 + k) · 2üs-bias

Burada;i : sayının işareti (0:Pozitif ya da 1:Negatif)(1+k) : Çarpan (1 <= Ç < 2, k < 0)bias : sabit (32 bit formda: 127, 64 bit formda:1023)

i=03.14 / 2n = (1+k) n=1 için, 3.14 / 2 = (1 + k), k = 0.57

Böylece, 3.14 = IEEE 754 formatında 1.57· 21 olarak gösterilir.

Page 40: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Gerçek (Kesirli) Sayıların Kapladığı Alan

Page 41: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Bellek ile Veri Yapısı Bit SayısıEğer veri yapısını bit sayısı, belleğin tek adres hücresinde saklanamayacak kadar büyük ise, bu veri yapısı, ardaşık bellek alanlarını kullanır.

Page 42: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Little-Endian & Big-EndianEğer bir veri birden fazla bellek alanı kaplayacaksa, bu bilgi nasıl yazılıp okunmalıdır? Rafadan yumurtanızı nasıl yersiniz?

Page 43: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

C Dili Anahtar Sözcükleri

Anahtar sözcükler, değişken, fonksiyon adı olarak kullanılamazlar.

auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while

Page 44: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

FonsiyonlarFonksiyonlara gönderiler sabit değer ya da değişkenlere parametre adı verilir.

Fonksiyonlardan elde edilen sonuç ise dönüş değeri olarak adlandırılır.

Bir fonksiyon, •Hiçbir parametre almayıp, Hiçbir değer döndürmüyor olabilir.•Sadece parametre alıp, Değer döndürmüyor olabilir•Hiçbir parametre almayıp, Değer döndürüyor olabilir.

Fonksiyonlar, birden fazla parametre alabilir ancak, sadece bir değer döndürebilirler. (Birden fazla değer gerekirse ne olacak?)

Page 45: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

FonsiyonlarFonksiyonlar, dönüş adreslerini Yığın (Stack) Bellekte saklar.Yığın bellek, en son girenin ilk çıktığı (LIFO) bir bellek türüdür.PUSH, POP

Ancak Fonksiyonlar Parametre alıyor ya da Değer Döndürüyor ise,Bu değerlerde yine Yığın Bellek üzerine kaydedilerek fonksiyon çağırılır.

İç içe çağırılan fonksiyonlarda Yığın bellek kümülatif olarak dolar.

Bu nedenle, özellikle Recursive (Yinelemeli – kendi kendini çağıran) fonksiyonlar Yığın bellek taşmalarına (Stack Overflow) neden olabilir.

Page 46: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Karakter Dizileri (String)Karakter dizileri, bellekte ardaşık olarak dizilmiş anlamlı karakterler bütünüdür.

Programlamada anlamlı olan karakter dizisi uzunlu açıkça belirtilmiş olmalıdır. Bunun için, farklı diller farklı yaklaşımlar getirmişlerdir;

Pascal / Delphi dillerinde karakter dizilerinin uzunluğu ilk karakerde saklanır.isim[] = [19, T, r, a, k, y, a, ,U, n, i, v, e, r, s, i, t, e, s, i]

C / C++ dillerinde ise karakter dizisi NULL, \0 ile bitmek zorundadır.isim[] = [T, r, a, k, y, a, ,U, n, i, v, e, r, s, i, t, e, s, i, \0]

Page 47: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

DizilerBelleğin ardaşık adreslerinde aynı veri tipindeki değişkenlerin saklanması yoluyla diziler elde edilir.

Diziler, birçok veri modeli için uygun bir veri yapısı sunar. Böylelikle liste, yığın, graf, ağaç gibi yapılar diziler üzerinde kolayca uygulanabilir.

C dilinde diziler, doğrudan değişken bildirimi sırasında tanımlanır;

int boy[20];float kilo[25];char *ad[40];char harf[29];float yillik_oran[12][31];int xyz[10][20][30];

Page 48: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

DizilerÖntanımlı veri tipleri dışında, struct yapıları kullanılarak özel dizilerde kolayca oluşturulabilir;

struct tarih {unsigned char gun;unsigned char ay;short int yil;

}

struct tarih dogum_gunleri[2000];

Page 49: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Structure & UnionStructure yapısı içerisinde C dilinin ön tanımlı veri tipleri kullanıldığı gibi, bit sayıları özelleştirilerek özel yapılar oluşturulabilir. Bu, özellikle çeşitli dosya formatlarının okunup yazılmasında oldukça kullanışlıdır.Bunun yanında Structure ve Union birlikte kullanılarak değişkenlere bitsel düzeyde erişim de sağlanabilir;

Örn; IEEE 754 Sayı Formatının Bitlerini struct ve union ile ayırabiliriz

union {float f;struct {

unsigned carpan:23;unsigned us:8;unsigned isaret:1;

} bit;} ortak;

Page 50: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Structure & UnionÖrneğin 8 bitlik bir sayıyı bitlerine ayırabilir, isteiğimiz bir biti okuyabilir ya da değiştirebiliriz.

union {unsigned char butun;struct {

unsigned b0:1;unsigned b1:1;unsigned b2:1;unsigned b3:1;unsigned b4:1;unsigned b5:1;unsigned b6:1;unsigned b7:1;

} bit;} sayi;

Page 51: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Structure & UnionDaha güncel uygulamalar için, örneğin personel kaydı tutan bir programda her bir personel kaydı struct olarak tanımlanabilir.

struct tarih {unsigned char gun;unsigned char ay;unsigned short yil;

};struct personel {

char tc_no[11];char ad[20];char soyad[20];tarih dogum_tar;tarih ise_baslama;int maas_carpan;

} ;Sizde okul numaranızı struct ile çözümleyerek birinci öğretim, ikinci öğretim, kayıt yılı, okul kodu, bölüm ve sıra numarası bilgilerini çıkarınız.

Page 52: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Operatörler ile Bit MaskelemeBir abc integer değişkenin 3. biti 1 ise;if(abc & 0x0008) { ... }

Bir abc integer değişkenin 6. biti 0 ise;if((abc & 0x0040)==0) { ... }

Bir abc integer sayının 2. bitini 1 yapalım;

abc |= 0x0004; // (abc = abc | 0x0004)

Bir abc integer değişkenin 4. bitini 0 yapalım;

abc &= ~0x0010; // abc = abc & (~0x0010)

Page 53: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Operatörler ile Bit MaskelemeBir abc integer değişkenin 3,4,5. bitlerini başka bir değişkene alın;baska = (abc & 0x0038) >> 3;

Bir abc integer değişkenin 6,7,8. bitlerin yerine 5 sayısını yazalım;abc = (abc & ~(0x01C0)) | (5<<5);

16 bit integer bir değişkenin üst 8 biti ile alt 8 bitini yer değiştirin;

yeni = (abc & 0x00ff)<<8 | (abc & 0xff00)>>8;

integer bir sayının 1., 4., 7. bitleri aynı anda 1 olduğunda doğru (true) döndüren ifadeyi yazınız

if(abc&0x0092) { ... }

Page 54: Veri Yapıları ve Algoritmalar - ozanaki.comozanaki.com/wp/wp-content/uploads/01-Giriş.pdf · saklar. Yazılım & Program Yazılım (Software) Yazılım, bir işin gereklerini tümüyle

Operatörler ile Bit MaskelemeBir sayının bitlerini en sağdaki bit en solda, en soldaki bit en sağda olacak şekilde tersine çeviren programı yazınız

unsigned char i, sayi, yeni=0;

sayi=??;int bitsay = 8*sizeof(sayi);

for(i=0; i<bitsay; i++){

if(sayi&(1<<i)) yeni|=1<<(bitsay-i-1);}

printf("yeni= %u\n", yeni);