Bölüm 6. Veri Tipleri ISBN 0-321 49362-1



Benzer belgeler
Bölüm 6. Veri Türleri ISBN

Bölüm 6. Veri Tipleri ISBN

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

Yrd. Doç. Dr. Caner ÖZCAN

Bölüm 7. İfadeler ve atamalar ISBN

Ders 6. Bölüm 6: Veri Tipleri (devam)

Yrd. Doç. Dr. Caner ÖZCAN

Bölüm 9. Altprogramlar ISBN

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

ALGORİTMA VE PROGRAMLAMA II

Pointers (İşaretçiler)

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Bağlama (Binding) Kavramı

Pointer Kavramı. Veri Yapıları

Bölüm 10. Altprogramların gerçeklenmesi ISBN

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Bölüm 5. Adlar(Names), Bağlamalar(Binding s),tip Kontrolleri (Type Checking), ve Etki Alanları ( Scopes) ISBN

HSancak Nesne Tabanlı Programlama I Ders Notları

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Bölüm 5. İsimler, Bağlama, Tür Kontrolü ve Kapsam(Etki Alanı) ISBN

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Yrd. Doç. Dr. Caner ÖZCAN

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Dr. Fatih AY Tel: fatihay@fatihay.net

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

Nesne Tabanlı Programlama

PROGRAMLAMAYA GİRİŞ DERS 2

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

PASCAL PROGRAMLAMA DİLİ YAPISI

Göstericiler (Pointers)

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

BÖLÜM 11: YAPISAL VERİ TİPLERİ

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Bölüm 5. İsimler, Bağlamalar, Tip Kontrolü, Etki Alanları ISBN

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için,

Ardışık Veri Tipleri. Prof.Dr. Bahadır AKTUĞ JFM212 Python ile Mühendislik Uygulamaları. *Kaynakça bölümünde verilen kaynaklardan derlenmiştir.

Bölüm1. İlk Bilgiler ISBN

Nesne Yönelimli Programlama

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

ALGORİTMA VE PROGRAMLAMA II

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Diziler (Arrays) Çok Boyutlu Diziler

Özyineleme (Recursion)

8. İŞARETCİLER (POINTERS)

Adresleme Modları. Mikroişlemciler ve Mikrobilgisayarlar

Nesne Tabanlı Programlama

YZM 2116 Veri Yapıları

Programlama Dilleri 1. Ders 4: Diziler

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Her veri tipine yetecek ve ancak o kadar anabellek alanı ayrılır. Programcı, ana bellekte ayrılacak adresin büyüklüğünü bilerek değişkenlerini

Yrd. Doç. Dr. Caner ÖZCAN

YZM 2105 Nesneye Yönelik Programlama

Yrd.Doç.Dr. Celal Murat KANDEMİR. Kodlama (Coding) : Bir nesneler kümesinin bir dizgi (bit dizisi) kümesi ile temsil edilmesidir.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

C Programlama Dilininin Basit Yapıları

BİL1001 Bilgisayar Bilimlerine Giriş 1

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

YZM 2105 Nesneye Yönelik Programlama

JAVADA DİZİ İŞLEMLERİ

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

Bit, Byte ve Integer. BIL-304: Bilgisayar Mimarisi. Dersi veren öğretim üyesi: Dr. Öğr. Üyesi Fatih Gökçe

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

ALGORİTMA VE PROGRAMLAMA II

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Giriş. ENF102 Jeoloji

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

Diziler İndisli Değişkenler

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

ALGORİTMA VE PROGRAMLAMA II

Hafta 13 Fonksiyonlar

Bit, Byte ve Integer. BIL-304: Bilgisayar Mimarisi. Dersi veren öğretim üyesi: Yrd. Doç. Dr. Fatih Gökçe

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

C++ Dersi: Nesne Tabanlı Programlama

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Transkript:

Bölüm 6 Veri Tipleri ISBN 0-321 49362-1

6. Bölüm konuları Giriş Basit veri tipleri Karakter dizisi tipleri Kullanıcı tanımlı sıralı tipler Dizi tipleri İlişkisel diziler Kayıt (record) tipleri İşaretçi ve referans tipleri

Giriş Veri tipi bir nesne kümesini ve bu nesneler üzeröde çalışan operasyonları tanımlar Tanımlayıcı bir değişkenin ozelliklerinin tümüdür. Nesne kullanıcı tanımlı tipin örneğidir Tasarım problemi: Hangi operasyonlar olmalı ve bunların ne iş yaptığı ne şekilde belirtilmeli?

Basit veri tipleri Hemen her dilde var Diğer veri tipleri cinsinden tanımlı değiller Bazıları donanımın direkt yansıması Diğerlerin az miktar kod desteğine ihtiyacı var

Basit veri tipleri: tamsayı (integer) Hemen her zaman donanım yansıması; eşleme kolay Bir dilde sekiz çeşitli tamsayı tipi olabilir Java işaretli (signed) tamsayı tipleri: byte, short, int, long

Basit veri tipleri: Kayan nokta Gerçel sayıları modeller ama tam olarak değil Bilimsel amaçlı dillerde en azından iki türlü kayan nokta tipi var (ör: float, double) Genellikle donımla ayni özelliklerde IEEE kayan nokta Standardı 754

Basit veri tipleri : karmaşık sayı Destekleyen diller: Fortran, Python,.. Her değerin iki kayan nokta kısmı var, gerçek ve hayali Basım şekli (Python dilinde): (7 + 3j), 7 gerçek kısmı, 3 hayali kısmı

Basit veri tipleri: Ondalık Para içeren ticari uygulamalar için COBOL için elzem C# dilinde de var Belirli sayıde ondalık rakamı BCD oalrak saklar Avantajı doğruluk Dezavantajları: Belli sınırlar içinde olur Hafızayı boşa harcar

Basit veri tipleri: Boolean Hepsinin en basiti İki elemanlı: Doğru ve yanlış Bitlerle temsil edilebilir, ama çoğunlukla byte kullanılır Avantajı okunabilirlik

Basit veri tipleri: karakter Sayısal kod olarak saklanır En çek kullanılan kodlama: ASCII Alternatif, 16 bitlik Unicode Doğal dillerin hemen bütün karakterlerini içerir İlk olarak JAVA dilinde kullanıldı C# ve JavaScript de destekler

Karakter dizisi tipleri (string) Değerleri: sıra halinde karakterler Tasarım problemleri: Basit tipmi yoksa özel bir dizi çeşidi mi? Uzunluklari statik mi, dinamik mi olmalı?

Karakter dizisi tipi işlemleri Tipik işlemler: Atama, kopyalama Mukayese (=, >, vs.) Birleştirme (concatenation) Alt dizi referansı (substring reference) Desen eşleştirme (pattern matching)

Bazı dillerde karakter dizisi tipi C ve C++ Basit değil İçi karakter olan dizi (char array) ve işlem yapan fonksiyon kütüphanesi SNOBOL4 (string manipülasyon dili) Basit Gelişmiş desen eşleme Perl, JavaScript, Ruby, and PHP - Düzenli ifade kullanarak desen eşleme

Kullanıcı-tanımlı sıralı tipler Sıralı tip elemanları kolayca tamsayılarla eşleşebilen tiplerdir. Java da basit sıralı tip örnekleri integer char boolean

Döküm (enumeration) tipleri Tanımda, olabilecek bütün değerler (isimli sabitler) var. C# örneği enum days {mon, tue, wed, thu, fri, sat, sun}; Tasarım problemleri Bir döküm sabiti birden çok tanımda yer alabilir mi? Öyle ise tip kontrolü nasıl yapılır? Döküm sabitleri tamsayıya dönüştürülür mü?

Döküm tipi değerlendirmesi Okunabilirliğe fayda sağlar (ör: renkler in tamsayı olarak kodlanmasına gerek kalmaz) Güvenirliğe fayda sağlar Ör: derleyici aşağıdakileri kontrol edebilir: işlemler (renkleri toplama!) her döküm değişkeni sadece tipindeki değerleri alabilir

Alt-dizi tipleri Sıralı bir tipin ardışık alt sırası Ör: 12..18 tamsayı tipinin alt-dizisidir Ada örneği type Days is (mon, tue, wed, thu, fri, sat, sun); subtype Weekdays is Days range mon..fri; subtype Index is Integer range 1..100; Day1: Days; Day2: Weekday; Day2 := Day1;

Alt-dizi değerlendirmesi Okunurluğa faydalı Değişkenin alabileceği değerlerin sınrlarını açıkça belirtir Güvenirlik Değişkene altidizi dışında bir değer verildiği zaman diği zaman hata oluşur

Kullanıcı tanımlı sıralı tiplerin gerçeklenmesi Döküm tipleri: tamsayı olarak Alt-dizi tipleri: türedikleri tip gibi + değer sınırlamaları için kod

Dizi (Array) tipleri Dizi (array) ayni cinsten elemanlardan oluşan, elemanların dizi içindeki yerleri ile belirlendikleri bir yapıdır.

Dizi tasarımı konuları Hangi tipler indis olarak kullanılabilir? İndislerin sınır kontrulü yapılır mı? İndis alt-üst sınırları ne zaman belirlenir? Diziye yer ne zaman ayrılır? En fazla kaç indis olabilir? Dizi nesneleri ilklenebilir mi? Dilim desteği var mı?

Dizi ilkleme Bazi dillerde yer ayrılması zamanında ilkleme yapılabilir C, C++, Java, C# örneği: int list [] = {4, 5, 7, 83} C and C++ da karakter dizileri char name [] = freddie ; C ve C++ da karakter dizisi dizileri char *names [] = { Bob, Jake, Joe ]; C ve C++ da karakter dizisi dizileri Java da karakter dizisi nesneleri dizisi String[] names = { Bob, Jake, Joe };

Heterojen diziler Elemanlar değişik tiplerde olabilir Perl, Python, JavaScript, ve Ruby tarafından desteklenir

Dizi işlemleri APL: gelişmiş dizi operatörleri Ada da atama ve birleştirme var Ruby de birleştirme var Fortran iki dizinin elamanlarını kullanan işlemler sunar Örnek: iki dizinin ayni pozisyondaki elemanlarını toplayıp 3. diziyi veren + işlemi

Dikdörtgen ve çentikli diziler Dikdörtgen: her kolon ve her sıra ayni boyutta (eleman sayıları ayni) Çentikli: Bazi sıraların eleman sayıları diğerlerine göre farklı olabilir. Dizilerin dizisi ile mümkün CC, C++, C# ve Java da çentikli dizi desteği var Fortran ve Ada da dikdörtgen desteği var

Dilimler Dizinin bir parçası Dizi operasyonu olan diller için geçerli

Dilim örnekleri Fortran 95 Integer, Dimension (10) :: Vector Integer, Dimension (3, 3) :: Mat Integer, Dimension (3, 3) :: Cube Vector (3:6) dört elemanlı bir dizi

Fortran 95 Dilim örnekleri

Dizilerin gerçeklenmesi Erişim fonksiyonları indisleri dizi içindeki bir adrese eşler Tek boyutlu diziler için erişim fonksiyonu: adres(liste[k]) = address (liste[alt_sınır]) + ((k-alt_sınır) * eleman_büyüklüğü)

Çok boyutlu dizilere erişim İki yöntem: Sıra öncelikli Kolon öncelikli

Çok boyutlu dizilere erişim...(sıra öncelikli) adres (a[i,j]) = adres (a[sıra_as,kolon_as]) + (((i - sıra_as) * n) + (j kolon_as)) * eleman_büyüklüğü

İlişkisel diziler Dizi elamlarının anahtarlarla endekslendiği dizi Anahtarların da saklanma ihtiyacı var

Perl dilinde ilişkisel diziler İsimler % ile başlar; %hi_temps = ("Mon" => 77, "Tue" => 79, Wed => 65, ); Endeksleme kıvrık parantez ve anahlarlarla yapılır. $hi_temps{"wed"} = 83; Elemanlar delete ile silinir delete $hi_temps{"tue"};

Kayıt (Record) tipleri Birbirinden ayni veya farklı tipleri olan isimli parçalar bütünü

Ada dilinde kayıt tanımı type Emp_Rec_Type is record First: String (1..20); Mid: String (1..10); Last: String (1..20); Hourly_Rate: Float; end record; Emp_Rec: Emp_Rec_Type;

Kayıtlar üzerine işlemler Atama Ada kayıtları bir bütün olarak ilklenebilir

Dizi-kayıt mukayesesi Kayıt: karışık tipte veri için Dizi: ayni cinsten veri için Dizi elemanına erişim daha yavaş (dinamik olarak adres bulunması gerekir)

Kayıt tipi gerçeklenmesi Her alan adı için relative adres (offset) (kaydın başlangıcından itibaren ne kadar gidilmesi gerektiği) bilgisi tutulur.

İşaretçi ve referans tipleri İşaretçi tipindeki değişkenlerin alabileceği değerler: adresler ve boş (nil) Endirekt adresleme olanaği sağlar Dinamik hafıza kontolüne olanak sağlar Depolamanın dinamik yapıldığı yığındaki (heap) yerleri işaret edebilir

İşaretçi işlemleri İki temel işlem: atama ve işaretçi aracılığı ile erişim (dereferencing) Atama: değişkenin içine geçerli bir adres değeri koyma Erişim: değişkenin içindeki adreste varolan değer Erişim açık veya üstü kapalı olabilir C++ açık erişim kullanır (*ptr) JAVA da üstü kapalı erişim var

İşaretçi ataması görseli Atama işlemi j = *ptr

İşaretçilerle ilgili sorunlar Boşu gösteren işaretçiler İşaret edilen yerin hafızaya geri verilmiş olma durumu Kaybolmuş yığın-dinamik değişken Hafızada alınamış bir yere erişilememesi durumu ( çöp ) p1 = new ABC(). P1 = new ABC() Bu duruma hafiza kaçağı denir

C ve C++ dillerinde işaretçiler Çok esnek ama dikkatle kullanılmalı Ne zaman ve nerede yaratıldığına bakılmaksızın işaretçiler hafızadaki yerleri gösterebilir Dinamik depolama ve adresleme için kullanılır İşaretçi aritmetiği mümkündür * ve & operatörleri Tipin sabit olmasına gerek yok. (void *) kullanarak herhangi bir tipten nesneye işaret edebiliriz (ama nesnenin içini göremeyiz)

C ve C++ da işaretçi aritmetiği float stuff[100]; float *p; p = stuff; *(p+5),stuff[5], p[5] hepsi ayni *(p+i) stuff[i], p[i] hepsi ayni

Referans Tipleri C++: Resmi parametreler (formal parameters) için kullanılan referans tipi var Java: nesne değişkenlerinin içinde nesnenin adresi var, ama * kullanilmadan otomatik olarak nesneye erişim sağlanır

İşaretçilerin değerlerndirmesi Sorunlar Boşu gösteren işaretçiler Kaybolmuş nesneler Yığın yönetimi İşaretçiler dinamik veri yapıları için gerekli: onlarsız olmaz

Boşu gösteren işaretçi çözümleri Mezartaşı (tombstone). Fazladan bir hücre ( mezartaşı ) hafızadaki nesneyi işaret eder. Değişkenin içindeki adres ise bu mezartaşının adresidir. Nesne sisteme geri verildiğinde mezartaşının içindeki adres boş (nil) olur. Değişken mezartaşını göstermeye devam eder. Zaman ve yer maliyeti yüksek

Boşu gösteren işaretçi çözümleri... Kilit ve anahtar (Locks-and-keys): İşaretçi değerleri (anahtar, adres) şeklinde Hafızadaki nesnelerin üzerinde kilit görevi gören tamasayı var Nesne yaratıldığında, bir de kilit değeri yaratılır ve bu değer hem nesnenin üstündeki kilide, hem de işaretçinin anahtar kısmına konulur. Nesne silindiğinde (sisteme geri verildiğinde) kilit değeri değiştirilir, böylece işaretçi o nesneye erişemez.

Yığın yönetimi Karmaşık bir çalışma-zamanı (runtime) işi Hücre boylarının değişken olması işi zorlaştırır Çöp toplamanın iki yöntemi Referans sayaçları (çalışkan yaklaşım): azer azer işaret edilmeyen yerleri geri alma İşaretle-süpür (tembel yaklaşım): hafızada boş yer kalmadığı zaman kullanılmayan hücreleri sisteme geri alma

Referans sayaçları Her hücrede ona kaç tane işaretçinin işaret ettiği bilgisini tut Dezavantajlar Yer Çalışma zamanı Dairesel şekilde birbirine bağlanmış hücreler problemi Avantaj Kademelidir, dolayısı ile program çalışırken önemli duraksamalar olmaz

İşaretle-Süpür Çazlışma-zamanı sistemi gerektikçe yeni hücre verir ve işaretçileri hücrelerden koparır Hafıza azaldığı zaman, işaretle-süpür başlar Her yığın hücresinde çöp toplama algoritması için fazladan bir bit vardır Tüm hücreler ilk başta çöp statüşündedir İşaretçilerden yola çıkarak, erişilebilen tüm hücreler işaretlenir İşaretlenmemis tüm hücreler yığına geri verilir

İşaretle-Süpür... Dezavantajları: İlk başlarda işaretle-süpür yeterinde sık yapılmadığından, uygulama çalışırken ciddi duraksamalara sebebiyet verirdi. Şimdilerde kademeli işaretle-süpür algoriltmaları bu işi daha sıklıkla yapıyorlar.

İşaretleme algoritması

Özet Bir dilin veri tipleri dilin stilini ve ne kadar faydalı olduğunu belirler Basit veri tipleri: sayısal, karakter, Boolean Kullanıcı-tanımlı sıralama ve altdizi tipleri programların okunabilirliğini ve güvernirliğini artırır. Diziler ve kayıtlar birçok dilde mevcut İşaretçiler adreslemede esneklik sağlarlar ve dinamik hafıza yönetimi için kullanılırlar