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

Benzer belgeler
Bölüm 6. Veri Tipleri ISBN

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

Bölüm 6. Veri Tipleri ISBN

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

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

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

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

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

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

Pointer Kavramı. Veri Yapıları

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

PROGRAMLAMAYA GİRİŞ DERS 2

HSancak Nesne Tabanlı Programlama I Ders Notları

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

Yrd. Doç. Dr. Caner ÖZCAN

Diziler İndisli Değişkenler

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

Göstericiler (Pointers)

Bağlama (Binding) Kavramı

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

YZM 2116 Veri Yapıları

Nesne Tabanlı Programlama

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

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

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

ALGORİTMA VE PROGRAMLAMA II

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

Genel Programlama II

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

Nesne Tabanlı Programlama

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Pointers (İşaretçiler)

YZM 2105 Nesneye Yönelik Programlama

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

C Programlama Dilinde Değişkenler

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

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Yrd. Doç. Dr. Caner ÖZCAN

BİL1001 Bilgisayar Bilimlerine Giriş 1

Nesne Yönelimli Programlama

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

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

JAVADA DİZİ İŞLEMLERİ

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

ALGORİTMA VE PROGRAMLAMA I

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

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

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

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

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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

ALGORİTMA VE PROGRAMLAMA II

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Diziler (Arrays) Çok Boyutlu Diziler

Programlama Dilleri 1. Ders 4: Diziler

PASCAL PROGRAMLAMA DİLİ YAPISI

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

C Programlama Dilininin Basit Yapıları

C PROGRAMLAMA D İ L İ

Dizi ( Array ) ve Dizgi ( String )

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

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

Matlab da Dizi ve Matrisler. Mustafa Coşar

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

C Konsol Giriş Çıkış Fonksiyonları

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Programlama Dilleri 3

ALGORİTMA VE PROGRAMLAMA I

C++ Dersi: Nesne Tabanlı Programlama

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

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

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

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

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

MATLAB/Değişkene Değer Atamak

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Dr. Fatih AY Tel: fatihay@fatihay.net

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

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

ALGORİTMA VE PROGRAMLAMA II

Bölüm1. İlk Bilgiler ISBN

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

C PROGRAMLAMA D İ L İ

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.

D İ Z İ L E R A R R A Y S

8. İŞARETCİLER (POINTERS)

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

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

Programlama Dillerinde Kullanılan Veri Tipleri

Özyineleme (Recursion)

Transkript:

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

Bölüm 6 Konular Giriş İlkel Veri Türleri Karakter Dizisi Türleri Kullanıcı Tanımlı Sıra Türleri Dizi Türleri İlişkili Diziler

Giriş Bir veri türü veri nesnelerinin bütününü ve bu nesneler üzerindeki önceden tanımlanmış işlemleri tanımlar Bir tanımlayıcı, bir değişkenin niteliklerinin bütünüdür Bir nesne kullanıcı tanımlı (soyut veri) türün bir örneğini sunar

İlkel Veri Türleri Hemen hemen tüm programlama dilleri bir ilkel veri türleri kümesi sağlar İlkel veri türleri: diğer veri türleri cinsinden tanımlanamayan veri türleridir Bazı ilkel veri türleri sadece donanımın bir yansımasıdır İlkel olmayan türler donanım dışı destek gerektirir

İlkel Veri Türleri: Tamsayı Bir çok dil tamsayı veri türlerine sahiptir Bir dilde sekiz farklı tamsayı türü olabilir (C# gibi) Java nın işaretli tamsayı türleri: byte, short, int, long

İlkel Veri Türleri: Kayan Noktalı Sayı Reel sayıları modeller; fakat yalnızca yaklaşım olarak Bilimsel amaçlı kullanılan diller en az iki kayan nokta türünü destekler (ör:float ve double; kimi zaman daha da fazlası) Genelde donanım ile uygulanır; bazen uygulama yardımı gerekir IEEE 754 Kayan Nokta Standardı

İlkel Veri Türleri: Karmaşık Bazı programlama dilleri karmaşık sayı türlerini de destekler Fortran ve Python gibi Karmaşık sayılar, kayan noktalı sayıların sıralanmış biçimi olarak gösterilir Bazı dillerde sayının sanal kısmı yardımcı bir karakterle gösterilir Ör: Phyton da j veya J karakteri kullanılır. 3+7j gibi.

İlkel Veri Türleri: Ondalık İş Uygulamaları (Parasal) İçin COBOL da çok önemli C# ve F# bir ondalık veri türü sunar Belli sayıda ondalıklı basamağı tutar Ondalık sayılar BCD kodunda bellekte tutulur Avantaj: hassasiyet Dezavantaj: sınırlı aralık, hafızayı boşa harcar

İlkel Veri Türleri: Boolean En basit veri türü Değerlerin aralığı: iki eleman, biri doğru, diğeri yanlış Bit ler olarak uygulanabilir; ama çoğunlukla baytlar olarak uygulanır (bit düzeninde belleğe erişim mümkün olmadığı için) Avantaj: okunabilirlik

İlkel Veri Türleri: Karakter Sayısal kodlar olarak tutulurlar En yaygın kullanılan kodlama: ASCII Bir alternatif, 16 bitlik kodlama: Unicode Doğal dillerden karakterler içerir İlk Java da kullanıldı C# ve JavaScript de Unicode u destekler

Karakter Dizisi (String) Türü Değerler karakter dizileridir Ör: char str[] = "Bilgisayar Mühendisliği"; Tasarım sorunu: Bu bir ilkel veri türü müdür yoksa özel bir tür array (dizi) midir? Dizilerin uzunluğu statik mi olmalı yoksa dinamik mi?

Karakter Dizisi Türünün İşlemleri Tipik İşlemler Atama ve kopyalama Karşılaştırma (=, >, v.s.) Birleştirme Alt dizi referansı Desen eşleştirme

Bazı Dillerdeki Karakter Dizisi Türü C ve C++ İlkel değil char dizileri ve işlemleri sağlayan fonksiyonların kümesini kullanır SNOBOL4 (bir dizi işleme dili) İlkel Detaylı doku eşleştirmeyi de içeren pek çok işlem Java String sınıfı aracılığıyla ilkel

Karakter Dizisi Uzunluk Seçenekleri Üç tipte olabilir Statik Uzunluk: COBOL, Java nın String sınıfı, C#, Python Sınırlı Dinamik Uzunluk: C ve C++ C tabanlı dilde, uzunluğa bakmak yerine dizinin karakterlerinin sonunu belirtmek için özel bir karakter kullanılır Dinamik Uzunluk(üst sınır yok): SNOBOL4, Perl, JavaScript Ada bu üç dizi uzunluk seçeneğini de destekler

Karakter Dizi Türünün Değerlendirilmesi Yazılabilirliğe yardım Statik uzunlukta ilkel bir veri türü olarak maliyeti düşük Dinamik uzunluk çok işlevsel ancak maliyeti yüksek

Karakter Dizisi Uygulaması Statik uzunluk: Compile-time (derlenme zamanı) tanımlayıcısı Sınırlı dinamik uzunluk: Uzunluk için bir run-time (çalışma zamanı) tanımlayıcıya gereksinim duyabilir (fakat C ve C++ da ihtiyaç duyulmaz) Dinamik uzunluk: Run-time tanımlayıcıya ihtiyaç var; hafızada alan tahsis etme ve serbest bırakma en büyük uygulama problemi

Compile ve Run-Time Tanımlayıcılar Statik diziler için compile- diziler için runtime tanımlayıcı Sınırlı Dinamik time tanımlayıcı

Kullanıcı Tanımlı Sıra Türleri Bir sıra türü, muhtemel değerlerin aralığının kolayca pozitif tamsayılar kümesiyle ilişkilendirilebildiği türdür Java daki ilkel sıra türlerine örnekler: integer char boolean Genellikle diller iki sıra türü sunarlar: enum ve subrange

Sayma Türleri Sabitler denen tüm muhtemel değerler tanımda verilir C# örneği enum days {mon, tue, wed, thu, fri, sat, sun};

Sayma Türlerinin Değerlendirilmesi Okunabilirliğe yardım, ör., bir rengi sayı olarak kodlamaya gerek yok Güvenilirliğe yardım, ör., derleyici aşağıdakileri kontrol edebilir: İşlemler (renklerin toplanmasına izin vermez) Hiçbir sayma değişkeni tanımlı olduğu aralığın dışındaki bir değere atanamaz Ada, C# ve Java,sayma için C++ dan daha iyi destek sağlıyor; çünkü bu dillerdeki sayma değişkenleri tamsayı türüne zorlanmamış

Alt Aralık (subrange) Türleri Sıra türünün sıralı bitişik bir alt dizisidir Pascal ve Ada da uygulanmıştır Örnek: 12..18 tamsayı türünün bir alt aralığıdır Ada nın tasarımı 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 Aralığın Değerlendirilmesi Okunabilirliğe yardım Okuyuculara alt aralıkların değişkenlerinin sadece belli aralıktaki değerleri tutabildiğini belli etmek Güvenilirlik Bir alt aralık değişkenine belirlenen aralığın dışında bir değer atamak hata olarak algılanır

Kullanıcı Tanımlı Sıra Türlerinin Uygulaması Sayma türleri tamsayı olarak uygulanırlar Alt aralık türleri, derleyici tarafından alt aralık değişkenlerine atamayı engellemek için girilen kodları olan ebeveyn türleri gibi uygulanırlar

Dizi Türü Dizi, içinde yer alan her bir elemanın yığın içindeki ilk elemana göre olan pozisyonlarıyla tanımlandığı homojen veri elemanları yığınıdır

Dizi Tasarım Sorunları Hangi türler alt indis için uygundur? Eleman referanslarındaki alt indis ifadeleri aralık kontrollü mü? Alt indis aralıkları ne zaman sınırlı? Hafızada yer tahsis etme ne zaman olur? En fazla alt indis sayısı nedir? Dizi nesneleri ilklendirilebilir mi? Herhangi bir şekilde bölmek mümkün mü?

Dizi Oluşturma (İndeksleme) İndeksleme (veya alt indis oluşturma) indislerden elemanlara bir eşleştirmedir dizi_adı(altindis) İndeks Sözdizimi dizi_elemanı FORTRAN, PL/I, Ada normal parantez kullanır Ada parantezleri dizi referansları ve fonksiyon çağırmalar arasındaki benzerliği (çünkü her ikisi de eşleştirmedir-mapping) göstermek için parantezleri kullanır Diğer pek çok dil köşeli parantez kullanır

Dizilerin İndis Türleri FORTRAN, C: sadece tamsayı Pascal: herhangi bir sıra türü (tamsayı, Boolean, char, sayma-enumeration) Ada: tamsayı ya da sayma (Boolean ve char ı da içerir) Java: sadece tamsayı türleri C, C++, Perl ve FORTRAN aralık kontrolünü belirtmez Java, ML, C# aralık kontrolünü belirtir

İndis Bağlama ve Dizi Kategorileri İndis aralıklarına ve depo tahsisinin yapıldığı zamana bağlı olarak beş farklı kategori vardır

İndis Bağlama ve Dizi Kategorileri Statik: indis aralıkları, statik olarak sınırlıdır ve depo tahsisi statiktir (run-time dan önce) Avantaj: verimlilik (dinamik yer tahsisi yok) Dezavantaj: tüm çalışma zamanı boyunca bellek meşgul Sabit yığıt-dinamik: indis aralıkları statik olarak sınırlı;ama yer tahsisi tanımlama ayrıntılama ile yükleme zamanında yapılır Avantaj: yer verimliliği Dezavantaj: tahsis ve serbest bırakma zamanı

İndis Bağlama ve Dizi Kategorileri (devam) Yığıt (stack)-dinamik: indis aralıkları dinamik olarak sınırlı ve yer tahsisi dinamik (run-time da yapılıyor) Avantaj: esneklik (dizinin boyutunun dizi kullanılana kadar bilinmesi lazım) Sabit yığın(heap)-dinamik: sabit yığıtdinamik e benzer: depo bağlama dinamiktir; fakat yer tahsisinden sonra sabitlenir (bağlama, istendiği zaman ve depo yığıttan değil yığından tahsis edildiğinde yapılır)

İndis Bağlama ve Dizi Kategorileri (devam) Yığın-dinamik: indis aralıklarının ve depo tahsisinin bağlanması dinamiktir ve birkaç kere değişebilir Avantaj: esneklik (diziler programın çalışması sırasında büyüyebilirler, küçülebilirler)

İndis Bağlama ve Dizi Kategorileri (devam) static değiştirici içeren C ve C++ dizileri statiktir static değiştirici içermeyen C ve C++ dizileri sabit yığıt-dinamiktir Ada dizileri yığıt-dinamik olabilir C ve C++ sabit yığın-dinamik diziler sunabilir (kütüphanedeki malloc ve free ile) C# sabit yığın-dinamik sağlayan ArrayList ikinci bir dizi sınıfını içerir Perl ve JavaScript yığın-dinamik dizileri destekler

Dizi İlklendirme Bazı diller ilklendirmeye depo tahsisi zamanında izin verirler C, C++, Java, C# örneği int list [] = {4, 5, 7, 83} C ve C++ daki karakter dizileri char name [] = freddie ; C ve C++ da karakter dizilerinin dizisi char names [] = { Bob, Jake, Joe ]; String[] names = { Bob, Jake, Joe };

Dizi İşlemleri APL, birli işlemler, vektörler ve matrisler için en güçlü dizi işlemleri sunar Ada dizi atamasına ve birleştirmeye de izin verir Python ve Ruby, karşılaştırma (==) gibi basit işlemler sunar Fortran dizi çiftleri arasındaki basit işlemleri sunar Örneğin, iki dizi arasındaki + operatörü, iki dizinin eleman çiftlerinin toplamından oluşan bir diziyle sonuçlanır

Dikdörtgen ve Düzensiz Diziler Bir dikdörtgen dizi, tüm satırlarının ve sütunlarının aynı sayıda elemana sahip olduğu çok boyutlu dizilerdir Düzensiz matrislerin değişken sayıda elemanlı satırları vardır Çok boyutlu dizilerin, dizilerin dizisi olarak görüldüğü zamanlarda olabilir

Dilimler Bir dilim, dizinin bazı alt yapılarıdır Dilimler yalnızca dizi operasyonları olan dillerde kullanışlıdır Python ve Fortran dilimleme desteği sunar

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 dizidir

Fortran 95 te Dilim Örnekleri

Dizilerin Uygulaması Erişim fonksiyonu indis ifadelerini dizideki adrese eşler Tek boyutlu diziler için erişim fonksiyonu: address(list[k]) = address (list[lower_bound]) + ((k-lower_bound) * element_size)

Çok Boyutlu Dizilere Erişim İki yaygın yol: Satır esaslı sıra (satırlarla) pek çok dilde kullanılıyor Sütun esaslı sıra (sütunlarla) Fortran da kullanılıyor

Çok Boyutlu Bir Diziye Bir Eleman Yerleştirme location(a[i, j]) = address of a[0, 0] + (((i * n) + j) * element_size)

Compile-Time Tanımlayıcılar Tek boyutlu dizi Çok boyutlu dizi

İlişkili Diziler İlişkili dizi, anahtarlar denen eşit sayıda değerle indekslenen sırasız veri elemanları topluluğudur Kullanıcı tanımlı anahtarlar depolanmalı Tasarım sorunları: elemanlara yapılan referansın formu ne?

Perl de İlişkili Diziler İsimler % ile başlar; sayılar parantezlerle sınırlanmıştır %hi_temps = ("Mon" => 77, "Tue" => 79, Wed => 65, ); İndisleme kıvırcık parantezler ve anahtarlarla yapılıyor $hi_temps{"wed"} = 83; Elemanlar delete ile silinebilir delete $hi_temps{"tue"};s

İşaretçi ve Referans Türleri İşaretçi türünde bir değişkenin hafıza adresleri ve özel bir karakter, nil, içeren değer aralığı vardır Dolaylı adresleme gücü verir Dinamik hafızayı yönetmek için bir yol sağlar Bir işaretçi deponun dinamik olarak oluşturulduğu alandaki (genelde yığın denir) yerlere erişmek için kullanılabilir

İşaretçi İşlemleri İki temel işlem: atama ve referanstan ayırma Atama, işaretçi değişkeninin değerini kullanışlı bir adrese vermek için kullanılır Referanstan ayırma, işaretçinin değeriyle gösterilen yerde tutulan değeri getirir Referanstan ayırma açık ya da kapalı olabilir C++ * aracılığıyla açık işlem kullanır j = *ptr ptr de bulunan değeri j ye atar

İşaretçi Ataması Gösterimi j = *ptr atama işlemi