Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanMetin Yenal Değiştirilmiş 8 yıl önce
1
PASCAL PROGRAMLAMA DİLİ MAŞUK GÜNGÖR O6104418 1MASUK GUNGOR
2
PASCAL NEDİR ? Pascal bilgisayar programlama dilİ pek çok öğrenciye bilgisayar programlamayı öğreten ve çeşitli versiyonları bugün hala yaygın olarak kullanılmaya devam eden en önemli programlama dillerinden biridir. İlk Macintosh işletim sisteminin çoğu ve TeX Pascal ile yazılmıştır. 2MASUK GUNGOR
3
NE ZAMAN, KİM TARAFINDAN, NE AMAÇLA GELİŞTİRİLDİ Bilgisayar bilimcisi Niklaus Wirth Pascal'ı 1970'te yapısal programlamayı derleyiciler için daha kolay işlenir hale getirebilmek amacıyla geliştirmiştir. Adını matematikçi ve düşünür Blaise Pascal'dan alan Pascal, Algol programlama dilinden türemiştir. Wirth, Pascal'dan başka Modula-2 ve Oberon programlama dillerini de geliştirmiştir. Bu diller Pascal'a benzerler ve ayrıca nesneye yönelik programlamayı da desteklerler. 3MASUK GUNGOR
4
Temel Veri Tipleri Veri tipi (data type), değişken veya sabitin tuttuğu verinin tipini belirtmektedir. Programda kullanılan veriler genellikle aşağıdaki altı veri tipinden birine aittir: Tamsayı ( byte, shortint, integer, word, longint ) Gerçel Sayı ( real, single, double, extended, comp^ ) Karakter ( character ) Karakter dizisi ( string ) Boolean ( false, true ) Programda kullanılan sabitlerin bildirimi ise const kısmında yapılır. Sabit ismi ile değeri arasında '=' sembolü kullanılır. Sabitin veri tipi atanan değere bağlı olarak derleyici tarafından tespit edilir. const {sabit bildirim başlangıcı} Pi=3.1415; {sabit ismi = değer} test=false ; {Boolean sabiti} Değişkenlerin bildirimi veri tipleri belirtilerek var bölümünde yapılır. Değişkenlerin ismi ile veri tipi arasında ':' sembolü kullanılır. Aynı veri tipinde birden fazla değişken var ise değişkenlerin arasına ',' sembolü konarak değişken listesi oluşturulur. var {değişken bildirim başlangıcı} X:real; {değişken ismi : veri tipi} I,J:integer; {değişken listesi : veri tipi} tus:char; {karakter değişkeni} ad:string[30]; {30 karakter uzunluğunda karakter dizisi değişkeni} devam:Boolean; {Boolean değişkeni} 4MASUK GUNGOR
5
Program Yapısı Pascal programları bildirim (declaration) ve ifade (statement) olmak üzere iki temel bölümden oluşur. Aşağıda temel program yapısı görülmektedir. program ad; const sabit1=değer; : sabitN=değer; var değişken1:tip; : değişkenM:tip; begin ifade1; : ifadeK; end Pascal programları, program adını belirtildiği başlık satırıyla başlar. Başlık satırı ';' ile sonlandırılır. Eğer programa isim verilmeyecekse bu satır yazılmaz. Programda sabitler, değişkenler, program ve altprogramlar isimlendirilirken aynı isim birden fazla kullanılmaz. Programda kullanılacak tüm sabit ve değişkenler programın en üstünde const ve var bölümünde belirtilir. Sabitlere değer atarken '=', değişkenlerin tipini belirtirken ':' kullanılır. Pascal ifadeleri birbirinden noktalı virgül ile ayrılmıştır. const, var, begin gibi Pascal'ın saklı kelimelerinden sonra noktalı virgül kullanılmaz. Programın veya program parçasının bittiğini belirten end kelimesinden önceki satır sonunda noktalı virgül kullanmak gerekmez. 5MASUK GUNGOR
6
Giriş/Çıkış İşlemleri Programın kullandığı veriler isimlendirilerek bellekte saklanmaktadır. Bir ismin temsil ettiği değer belleğe üç değişik şekilde yüklenebilir; sabit olarak, değişken değer atayarak ve değişkenin değerini okuyarak. Bir silindirin hacmini bulan aşğıdaki örnekte her üç yöntemde kullanılmıştır. program silindir; const; pi=3.14; {sabit} var yükseklik, yarıçap, hacim:real; begin yükseklik:=5.0; {Değer atama} ReadLn(yarıçap); {okuma} hacim:=pi*yaricap*yaricap*yükseklik; {değer atama} WriteLn(hacim); end Yukarıdaki programda; pi sabit olarak tanımlanmıştır, yükseklik değişkenine 5.0 değeri atanmıştır, yaricap değişkeni tuş takımından okunmaktadır. hacim değişkeninin değeri hesaplama sonucu atanmaktadır. Tuştakımı veya disk gibi birimlerden okuma işlemine giriş (input), ekran ve yazıcı gibi birimlere yazdırma işlemine çıkış (output) denmektedir. Program yazarken sık sık kullnılması gereken program parçaları Pascal'da altprogram şeklinde yazılmıştır. Altprogramlar, fonksiyon (function) ve prosedür (procedure) şeklinde düzenlenmiştir. Pascal'da giriş işlemleri Readln, çıkış işlemleri ise Writeln prosedürleri kullanılarak yapılmaktadır. Programda açıklamalar '{', '}' sembolleri arasında yazılır. 6MASUK GUNGOR
7
Aritmetik ve Boolean İşlemler Aritmetik İşlemler Pascalda 5 ve 5.0 farklı sayılardır. 5 bir tamsayıdır ve gerçek değerdir. 5.0 ise gerçel bir sayıdır ve yaklaşık bir değer ifade eder. Bu nedenle veri tiplerinin karşılaştırılması gerekir. Eğer x bir gerçel sayı değişkeni ise; x:=5; veya x:=5.0; yazabiliriz. Ama y tamsayı değişkeni için; y:=5; yazmak zorundayız. Atamada ':=' kullanılmalıdır. Sabit ve değişkenleri kullanarak yazılan aritmetik ifadelerde operatör kullanılmaktadır. Operatörler bir veya iki değeri (operand) kullanarak yeni bir değer bulan fonksiyonlardır. Aritmetik operatörler nümerik değerleri kullanarak nümerik sonuç verir. İki değer kullanan operatörlere ikili (binary) operatörler denir. Örneğin A+B ifadesindeki toplama operatörü ikili operatördür. -A ifadesindeki eksi işareti bir değer üzerinde işlem yaptığı için tekli (unary) operatördür. Tam sayı operatörleri İşlem Operatör Örnek Toplama + 7+3=10 Çıkarma - 7-3=4 Çarpma * 7*3=21 Bölme(Katsayı) DIV 7 DIV 3=2 Bölme(kalan) MOD 7 MOD 3=1 7MASUK GUNGOR
8
Operatörler kullanılarak yazılan aritmetik ifadelerin sonucu bir değişkene aktarılır. Eğer yazılan ifade gerçel sonuç veriyorsa yalnız gerçel tipli bir değişkene atama yapılabilir. İfade tam sonuç veriyorsa tamsayı veye gerçel tipli bir değişkene atama yapılabilir. Gerçel sayı operatörleri İşlem Operatör Örnek Toplama + 5.5+2.25=7.75 Çıkarma - 5.5-2.25=3.25 Çarpma * 5.6*2.0=11.2 Bölme / 5.6/2.0=2.8 Birden fazla operatörün kullanıldığı durumlarda: Parantez içindeki ifadeler öncelikle işlenir. İçiçe parantezler varsa en içteki parantezden başlanır. Operatörlerin hepsi aynı önceliğe sahip değildir. *, /, DIV ve MOD işlemleri önce, + ve - işlemleri sonra yapılır. Aynı önceliğe sahip operatörler soldan sağa doğru işleme koyulur. Pascalda bir değişken eşitliğin her iki tarafında yer alabilir: Toplam:=Toplam+Değişken; burada toplam değişkeninin mevcut değerine Değişken eklenerek yeni toplam değeri olarak saklanmaktadır. 8MASUK GUNGOR
9
Boolean İşlemler Boolean değişkenleri ve sabitleri True veya False değerlerini alabilmektedir. Eğer bir ifadenin sonucu True veya False değerini alıyorsa bu ifadeye "boolean ifade" denir. Boolean ifadelerde ilişkisel ve mantıksal operatörler kullanılır. İlişkisel operatörler; verilen iki büyüklük arasındaki ilişkinin doğru olup olmadığına bağlı olarak boolean değer veren operatörlerdir. Karşılaştırılacak büyüklükler aynı veri tipinde olmalıdır. K=5 ve J=6 değerleri kullanılarak kullanılan ilişkisel operatörler aşağıda verilmiştir. İlişkisel operatörler Operatör İsim İfade Değer = eşit K=J False <> eşit değil K<>J True < küçük K< J True <= küçük eşit K<=J True > büyük K>J False >= büyük eşit K>=J False İlişkisel operatörler kullanılarak yalnız nümerik değerler değil aynı zamanda karakter dizileri de karşılaştırılabilir. Karakterlerin karşılaştırılmasında ASCII kodları kullanılır. Eğer karşılaştırılacak dizilein uzunluğu farklı ise karakter sayısı az olan dizinin küçük olduğu kabul edilir. Karşılaştırma sonucu elde edilen boolean değer, boolean değişkene aktarılabilir. Aşağıdaki program satırında iki karakter dizisi karşılaştırılarak sonuç, tamam boolean değişkene aktarılmaktadır. Örnekte tamam boolean değişkenine True değeri aktarılır: tamam:='ALP'<'ALPER'; { tamam boolean değişkeni true değerini alır } 9MASUK GUNGOR
10
Aritmetik ifadelerde nümerik değer kullanılarak, yeni bir nümerik değer elde edilir. Benzer şekilde boolean ifadelerde boolean değerler kullanılarak yeni bir boolean değer elde edilebilir. Boolean değişkenler, mantıksal operatörler ile birleştirilir. Aşağıda mantıksal operatörler verilmiştir. Mantıksal operatörler Operatör İsim Açıklama OR Veya Herhangi biri Doğru ise sonuç Doğru AND Ve İkiside Doğru ise sonuç Doğru XOR Özel Veya Biri Doğru biri Yanlış ise sonuç Doğru NOT Değil Yanlış ise sonuç Doğru Boolean ifadelerde; aritmetik, ilişkisel ve mantıksal operatörler kullanılabilir. İfadeler yazılırken öncelik sıralarına dikkat etmek ve gerekirse parantez kullanılması gerekir. Boolean operatörlerin öncelik sıraları aşağıda verilmiştir. Boolean operatörlerin önceliği Boolean operatör Öncelik not 1 En büyük and 2 or, xor 3,=, =,<> 4 En düşük Boolean ifadeler yazılırken; aritmetik operatörler nümerik değerler, mantıksal operatörler boolean değer ve ilişkisel operatörler aynı tipteki veriler ile kullanılır. 10MASUK GUNGOR
11
BÖLÜM 2 : KONTROL YAPILARI Sıralı Kontrol Yapısı Sıralı kontrol yapısında ifadeler yazıldığı sırayla ve bir kez icra edilir. Bu yapıda sırayla ifade-1 ifade- 2 ifade N icra edilir. Sıralı yapıdaki ifadeler, giriş, çıkış, hesaplama veya bir kontrol yapısı olabilir. Pascal ifadelerinin gruplandırılmasıyla oluşturan ifadeye ifade bloğu adı verilir. İfade bloğu, begin ve end sözcükleri arasında yazılan ifadelerden oluşur. İfade bloğunun formatı aşağıdaki gibidir: begin ifade-1; ifade-2; : ifade-N end İfade bloğunda, ifadeler birbirinden noktalı virgül ile ayrılırlar. Bloktaki son ifadeden sonra noktalı virgül konulmaz. 11MASUK GUNGOR
12
Seçimli Kontrol Yapısı İfade veya ifade bloklarının icra edilmesi bir koşula bağlı olabilir. Boolean ifade olarak yazılan koşulun doğru veya yanlış olmasına bağlı olarak icra edilecek ifade seçilir. Pascal'da bu amaçla İf/then, if/then/else ve case ifadeleri kullanılmaktadır. If/then İfadesi En basit seçim yapısı if / then ifadesidir. Bu ifadede; verilen koşul doğru ise bir ifade veya ifade bloğu icra edilir, verilen koşul yanlış ise ifade icra edilmez if/then ifadesnin formatı: if koşul then ifade X değişkeni negatif ise ekran x negatiftir yazan İf/ then ifadesini yazalım: if x<0 then writeln('x negatiftir'); if/then ifadesi tek satır halinde de yazılabilir: if x < 0 then writeln ('x negatiftir'); X değişkeni sıfırdan farklı ise 1/x'i hesaplayıp ekrana yazan if then ifadesini yazalım: if x 0 then begin Y : = 1/x ; Writeln (y) end Örnekte koşul doğru olduğununda iki ifade icra edileceği için bu ifadeler ifade bloğu haline getirilmiştir. 12MASUK GUNGOR
13
If/then/else İfadesi If/ then/ else ifadesinde iki ifade veya ifade bloğundan birisi icra edilir. Bu ifadede verilen koşul doğru ise then kısmındaki ifade, yanlış ise else kısmındaki ifade icra edilir. If/then ifadesinin formatı aşağıdaki gibidir: if kosul then ifade-D {noktalı virgül kullanılmaz.} else ifade-Y; 13MASUK GUNGOR
14
Case İfadesi Koşul olarak bir boolean ifadesinin kullanıldığı if ifadesinde seçilebilecek ifadelerin sayısı ikiyi aştığı zaman programın okunması güçleşmektedir. Eğer boolean ifadesi yerine bir değişkenin aldığı değere bağlı olarak icra edecek ifade seçilebiliyorsa case ifadesi kullanılır. Seçici değişkenin tam sayı, karakter veya boolean gibi sıralanabillir tipte olması gerekir. Seçici olarak gerçel sayı değişkeni kullanılmaz. Aşağıda case ifadesinin formatı görülmektedir. case secici of etiket-1:ifade-1; etiket-2:ifade-2;... etiket-N:ifade-N; end; 14MASUK GUNGOR
15
Case/Else İfadesi Case ifadesindeki seçici hiçbir etiketle uyuşmadığında case bloğunun dışına çıkılmaktaydı. Uyuşmazlık halinde icra edilecek ifadeler varsa case/else ifadesi kullanılır. Case/else ifadesinin formatı aşağıdaki şekildedir: case secici of etiket-1:ifade-1; etiket-2:ifade-2;..... etiket-N:ifade-N; else; ifade-1;... etiket-M; end; 15MASUK GUNGOR
16
Tekrarlı Yapı Bir ifade bloğunu birden fazla icra edilmesine iterasyon veya döngü (loop) denir. Pascal'da döngüler; While/Do, Repeat/Until, For/Do ifadeleri kullanılarak yapılır. While/Do İfadesi Giriş kontrollü döngülerde, koşulun doğru olup olmadığına döngü ifadelerinden önce bakılır. Eğer koşul doğru ise döngü ifadeleri icra edilir. İfadenin formatı aşağıdaki gibidir: while koşul do döngü ifadesi; Eğer döngü ifadesi, ifade bloğu şeklinde ise while/do formatı aşağıdaki şekle dönüşür: while koşul do begin İfade-1; İfade-2;... İfade-N; end; 16MASUK GUNGOR
17
Repeat/Until İfadesi Çıkış kontrollü döngüler Repeat/until ifadesi kullanılarak yapılır. İfadenin formatı aşağıda verilmiştir: Repeat ifade-1; ifade-2;... ifade-N Until koşul; Döngü ifadeleri Repeat ve Until kelimeleri arasında kullanıldığından begin ve end kelimelri kullanılmaz. 17MASUK GUNGOR
18
For/Do İfadesi Döngü ifadelerinin belli sayıda icrası için For/Do ifadesi kullanılır. Bu ifadede, sayaç olarak kullanılan değişkene başlangıç ve bitiş değerleri verilir. Sayaç değeri her iterasyonda 1 arttırılır. Sayaç bitiş değerini geçtiği zaman döngüden çıkılır. Sayaç arttırılması ve kontrolü For/Do ifadesi tarafından gerçekleştirilir. Sayacın veri tipi genellikle tamsayıdır ama karakterde kullanılabilir. For/Do ifadesinin formatı aşağıda verilmiştir: For sayaç:=başlangıç to bitiş Do döngü ifadesi; Döngü ifadesi blok ifade şeklinde ise For/Do ifadesinin formatı aşağıdaki şekilde olur: For sayaç:=başlangıç to bitiş Do begin ifade-1 ifade-2... ifade-N end; 18MASUK GUNGOR
19
ALT PROGRAMLAR Fonksiyonlar Fonksiyon verilen parametreler üzerinde bir takım işlemler yaparak bir değer veren bağımsız program parçasıdır. Fonksiyonlar Pascal'ın stanadart fonksiyonları ve kullanıcı tarafından tanımlanan fonksiyonlar olmak üzere iki kısımda incelenebilir. Standart Fonksiyonlar Pascal'da aritmetik, skaler ve transfer olmak üzere üç çeşit standart fonksiyon vardır. Fonksiyon Tanımlama Standart Pascal fonksiyonları ihtiyaca cevap vermiyorsa, programcı tarafından yeni fonksiyonlar tanımlanabilir. Fonksiyonlar, global sabit ve değişkenlerin bildirim bölümünden sonra ve ana program ifadelerinden önce yazılır. Global sabit ve değişkenler tüm programda kullanılabilir iken yerel sabit ve değişkenler sadece tanımlandıkları fonksiyon içinde kullanılabilirler. Fonksiyonların çağrıldıkları yerden önce yazılması gerekir. Eğer fonksiyonlar ana programdan önce çağrılıyorsa ana programın üstünde yazılması yeterlidir. Eğer f2 fonksiyonunda f1 fonksiyonu kullanılıyorsa, f1 fonksiyonunun f2 fonksiyonundan önce yazılması gerekir. 19MASUK GUNGOR
20
Fonksiyon aşağıdaki formata uygun olarak tanımlanır: Function Fonksiyon_adi(parametre listesi):fonksiyon veri tipi; {Başlık} const sabit-1=deger; : sabit-N=deger; {Bildirim var degisken-1=veri tipi; Bölümü} : degisken-M=veri tipi; begin ifade-1; {İfade : Bölümü} ifade-K; end; 20MASUK GUNGOR
21
BÖLÜM 4 : SAYMA VERİ TİPLERİ Önceki bölümlerde yazmış olduğumuz programlarda gerçel sayı,tamsayı, katakter ve boolean standart veri tiplerini kullanmıştık. Sadece standart veri tipleri kullanarak program yazmanın yeterli olmadığı durumlarda kullanıcı tarafından yeni veri tipleri tanımlanabilir. Tanımlanacak yeni veri tipleri, herhangi bir standart veri tipinin alt kademesi ( subrange ) olabileceği gibi elemanlarının tamamı kullanıcı tarafından belirtilen liste şeklinde ( enumerated ) olabilir. Bir veri tipinin elemanları küçükten büyüğe doğru sıralanabiliyorsa bu veri tipine sayma veri tipi denir. Örneğin tamsayılar -maxint,...,-2,-1,0,1,2,.. maxint şeklinde sıralıdır. Sayma veri tiplerinde bir elemanı izleyen eleman SUCC( ), öncesindeki eleman ise PRED( ) fonksiyonu kullanarak bulunabilir. Boolean veri tipi de sayma tipindedir. Bu tipte FALSE, TRUE'dan önce gelir, yani FALSE < TRUE şeklindedir. Karakterler ise ASCII kodlarına göre sıralanırlar. Gerçel sayılarda ise bir sayının hemen önündeki ve arkasındaki sayı bilinmediğinden sıralı tipte değildir. 21MASUK GUNGOR
22
Tip Bölümü Yeni veri tipleri, değişkenlerin tanımlandığı var bölümünden önce yer alan Type bölümünde belirtilir. Type bölümünde yeni veri tipleri tanımlanabileceği gibi daha önce tanımlanmış veri tiplerine yeni isimler de verilebilir. Type bölümünün formatı aşağıdaki gibidir: type isim-1=tip-1; isim-2=tip-2;... isim-N=tip-N; Type bölümünde tanımlanan yeni veri tipleri var bölümünde değişkenlerin veri tipi olarak kullanılır: type sembol=char; mantik=boolean; var tus, harf :sembol; devam :mantik; x,y :integer; Yukarıda verilen örnekte; karakter veri tipi sembol, boolan veri tipi de mantik olarak yeniden isimlendirilmiştir. Değişken bildiriminde değişkenlerin veri tipi olarak sembol ve mantik kullanılmıştır. 22MASUK GUNGOR
23
DİZİLER Tek Boyutlu Diziler Bu veri tipinde dizinin elemanları bellekte sırayla yer alırlar ve elemanlara indis kullanılarak erişilir. Dizinin her bir elemanı için bellekte gerekli yerin ayrılabilmesi için dizinin elemanlarının veri tipinin bilinmesi gerekmektedir. 23MASUK GUNGOR
24
Çok Boyutlu Diziler Tek boyutlu dizide herhangi bir elemana satır ye sütun numarası verilerek doğrudan erişilemez. Satır ve sütun numarasını vererek herhangi bir elemana doğrudan erişebilmek için dizinin satır ye sütun şeklinde iki indeksi olması gerekir. Diğer bir deyişle dizinin iki boyutlu olması gerekir. İki boyutlu dizilere değer atayabilmek için iç içe döngü kullanmak gerekir. 24MASUK GUNGOR
25
KAYITLAR Kayıtların Tanımlanması Kayıtların tanımlama işlemi tip bildirim kısmında yapılır. Kayıtlar aşğıda verilen formata uygun şekilde tanımlanırlar: type Kayittip=record Alan-1 : tip-1; Alan-2 : tip-2;...; Alan-N : tip-N; end; Yukarıda görüldüğü gibi, kayıt veri tipine bir isim verilmektedir. Alan isimleri ve bu alanlarda saklanacak verinin tipi record ve end arasında yazılmaktadır. Örneğin bir ürünün adı, numarası ve fiyatını saklamak amacıyla kullanılacak ürüntip kaydı aşağıdaki şekilde tanımlanaqbilir: type UrunTip=record adi :string[20]; numara :integer; fiyat :real; end; 25MASUK GUNGOR
26
Burada; UrunTip veri tipinin adıdır. Adi, numara ve fiyat ise alan isimleridir. Diğer isimlendirmelerde uygulanan kurallar alan isimleri içinde geçerlidir. Adi alanının veri tipi 20 karakterlik karakter dizisidir. Numara alanı tamsayı tipindedir. Fiyat alanı ise gerçel tiptedir. Verilerin bellekte saklanabilmesi için bir değişkene gereksinim vardır. Bu nedenle sadece kayıt tipini tanımlamak yetmez aynı zamanda tanımlanan kayıt tipini bir değişken için kullanmak gerekir. Yukarıda tanımlanan kayıt tipi Urun1 değişkeninin veri tipi olarak aşağıdaki şekilde tanımlanabilir: var urun1 : UrunTip; Kayıtların İşlenmesi Dizinin elemanlarına indeks kullanarak erişildiği gibi kayıtın elemanlarına alan isimleri kullanılarak erişilir. Kayıt içindeki herhangi bir alana erişmek için kayıt isminden sonra nokta ve alan ismi kullanılır: KayıtIsmi.AlanIsmi Urun1 kayıdının alanlarına Urun1.Adi, Urun1.Numara ve Urun1.Fiyat şeklinde erişilebilir. Kayıtlara değerler atama veya okuma yoluyla aktarılabilir. Aşağıda ürün adı ve numarası atanmıştır, fiyat ise okunmaktadır: Urun1.Adi :='Disket'; Urun1.Numara :=111; Readln(Urun1.Fiyat); 26MASUK GUNGOR
27
With İfadesi Aynı kaydın değişik alanlarına erişebilmek için devamlı kayıt ismini yazmak sıkıcı olabilir. Bunu gidermenin yolu with ifadesi kullanmaktır. With ifadesi kullanıldığı zaman kayıt ismini vermeden doğrudan alan isimleri kullanılabilir. With ifadesinin formatı aşağıda verilmiştir: with KayitIsmi do ifade; With ifadesinde, With ile do arasında kayıt ismi belirtilmektedir. Burada ifade içindeki alanlar için kayıt ismini yazmak gerekmez. Örneğin Urun1 kaydının fiyat alanına Urun1.Fiyat yerine aşağıdaki şekilde erişilebilir: with Urun1 do writeln(fiyat); Eğer with ifadesi bir ifade bloğu için kullanılacak ise ifadeler begin ve end arasında yazılır: with Urun1 do begin writeln(Adi); writeln(numara); writeln(fiyat); end; Eğer alan isimleri farklı olan birden fazla kayıt ismi virgülle ayrılarak with ifadesinda kullanılabilir: with Ogrenci, Urun1 do ifade; Bu tanımlama ile her iki kaydın alan isimlerini doğrudan kullanma olanağına kavuşulur. 27MASUK GUNGOR
28
Kayıt Dizileri Diziler temel veri tipleri kullanarak oluşturulduğu gibi kayıt tipi kullanarak da oluşturulabilir. Kayıt kullanarak oluşturulan dizilerde dizinin her bir elemanı kayıt tipinde olacaktır. Örneğin UrunTip kaydına bir ürünün adı, numarası ve fiyatı saklanmış olsun. 20 tane ürünün adı,, numarasu fiyatı saklanmak istendiğinde aşağıda oldugu gibi elemanları UrunTip olan bir dizi tanımlanır: type UrunTip=record adi :string[20]; numara : integer; fiyat :real; end; UrunDiziTip : array[1..20] of UrunTip; var Urunler : UrunDiziTip; Urunler dizisinin elemanlarının alanlarına aşağıdaki gibi erişilebilir: Urunler[1].Adi, Urunler[1].Numara, Urunler[1].Fiyat 28MASUK GUNGOR
29
Kayıt İçinde Kayıt Kullanmak Bazen kayıt elemanlarından birbiriyle yakından ilişkili olanların da bir kayıt olarak tanımlanaması daha anlamlı olabilir. Bir öğrencinin adı soyadı ve doğum tarihi birer kayıt olarak düzenlenebilir. Yani üst seviyede AdSoyad ve DoğumTarihi alanları bulunmaktadır. DoğumTarihi alanı ise Gun, Ay ve Yıl alt alanlarından oluşmaktadır. Bu tür kayıt yapısını tanımlarken işleme en alt seviyeden başalanabilir. Önce Gun, Ay ve Yıl'dan oluşan TarihTip kaydı tanımlanır, daha sonra bu kayıt kimliktip kaydını tanımlamada kullanılabilir: type TarihTip = record Gun : 1..31; Ay : 1..12; Yil : 0..99 end; KimlikTip = record AdSoyad : string[25]; Doğumtarihi : TarihTip end; var Personel : KimlikTip; Yukarıda tanımlana personel kaydının elemanlarına aşağıdaki şekilde erişilebilir: Personel.AdSoyad Personel.DogumTarihi.Gun Personel.DogumTarihi.Ay Personel.DogumTarihi.Yil Bu düzenleme alt programlara veri transferinde de kolaylık sağlar. Örneğin tarihi okumak amacıyla bir altprogram yazılmış ise bu altprograma tüm personel biligilerini göndermek yerine sadece tarih bilgileri gönderebilir. 29MASUK GUNGOR
30
Değişken Kayıtlar Aynı kayıt yapısında saklanmak istenen değerler bir takım farklılıklar gösteriyorsa kayıt yapısının değişken olması gerekir. Örneğin üniversitedeki akademik ve idari personelin bilgileri içinde ortak olanlar (Kimlik bilgileri,fakültesi v.b) olduğu gibi farklılık gösterenler de vardır ( anabilimdalı, akademik ünvanlar v.b) Her iki personelin de kaydedilebileceği kayıt tipinin değişken tipte olması gerekmektedir. Değişken kayıt tipi sabit ve değişken olmak üzere iki kısımdan oluşmaktadır. Değişken tipin tanımlanması case ifadesine benzer. Etiket alanının içeriğine bağlı olarak kayıt düzenlenir. Değişken kayıt tipinin formatı aşağıda görülmektedir. Type KayitTip = record alan -1 : tip-1; alan -2 : tip-2 ; { Sabit kısım}.... alan-N ; tip-N; case etiket : EtiketTipi of etiket -1 : (alan listesi -1) ; etiket-2 : (alan listesi-2) ; {değişken kısım}.... etiket -M : (alan listesi-M) ; end ; 30MASUK GUNGOR
31
KÜMELER Pascal'daki küme (Set) kavramı matematikteki kumelerden gelmektedir. Elemanları 1,3,5 olan küme matematikte {1, 3, 5} şekIinde gösterilmektedir. Pascal'da '{' ve '}' sembolleri açıklama amacıyla kullanıldığı için kümeler köşeli parantez içinde [1,3,5] şeklinde yazılırlar. Kümenin elemalarının sıralı olaması gerekmediği için diğer veri tiplerinden farklılıklar gösterir.Bu nedenle kümenin elemanlarına doğrudan erişilmez. Küme Veri Tipi Kümeler bir bilgisayar diliyle oluşturulduğu zaman bazı kısıtlamaları beraberinde getirmektedir. Örneğin matematikte kümeler sonsuz sayıda elemana sahip olabilir ama Pascal'da bu sayı 256 ile sınırlıdır. Bir kümenin elemanları çözülecek problem için tanımlanan evrensel küme (Universal Set) den seçilir. Örneğin sesli harfler kümesi için evrensel küme tüm harflerden oluşan küme olabilir. Pascal programında kümenin tüm elemanları aynı tipte olmalıdır. Kümenin taban tipi olarak adlandırılan bu tipin sayma veri tipinde olmalıdır. Kümenin taban tipi olarak adlandırılan bu tipin sayma veri tipinde olması gerekir. Küme tanımlamada set of sözcüğü kullanılır. Type SetTip = set of Taban tip; 31MASUK GUNGOR
32
Rakam1 değişkeni Rakamlar veri tipinde olduğu icin 0-9 aralığında bir değer içerebilir. Rakam ise RakanKumesi tipinde olduğu için 0-9 aralığındaki değerlerden herhangi bir sayıda eleman içerebilir. Benzer şekilde Gun1 değişkeninde haftanın günlerinden biri saklanabilirken, Gun degişkeninde haftanın günlerinden oluşmuş bir küme saklanabilir. Pascal'da küme sabitleri köşeli parantezler içinde yazılır. Kümenin elemanlarının sıralı olanlar iki nokta ile tanımlanır diğerleri virgülle ayrılır. Kümeye atanan değerler kümenin taban tipiyle aynı olması gerekmektedir. 32MASUK GUNGOR
33
Küme İşlemleri Nümerik değerler ve aritmetik operatörler kullanılarak aritmetik ifadelerden nümerik sonuçlar elde edildiği gibi kümeler ve küme operatörleri kullanılarak yazılacak küme ifadelerinden de küme tipinde sonuçlar elde edilir. Verilen iki küme kullanılarak yeni bir küme oluşturulabilir. Oluşturulacak kümenin elemanları ; verilen kümelerin tüm elemanları, ortak elemanları veya farklı elemanları olabilir. Bu yeni kümeler sırasıyla ; birleşim, kesişim, ve fark kümeleridir. Birleşim işlemi + işareti ile gösterilir ve sonuç verilen kümelerin tüm elemanlarını içerir. [1,2,5] + [2,4]..... [1,2,4, 5] Kesişim işlemi * işareti ile gösterilir ve sonuç verilen kümelerin ortak elemanlarını içerir: [1,2,5] * [2,4].... [2] Fark işlemi - işareti ile gösterilir ve sonuç A kümesinin B’de olmayan elemanlarıdır: ['A','B','G','H'] - ['A','B','C','D']....['G','H'] İfadelerde kullanılacak kümelerin taban tiplerinde aynı olması gerekmektedir. Verilecek bir küme ifadesinde öncelikler kesişim işlemi (*) daha sonra birleşim veya fark işlemi (+/- ) yapılır. Aritmetik ifadelerde olduğu gibi parantezler kullanılarak işlem sırası değiştirilebilir. 33MASUK GUNGOR
34
Kümelerin Karşılaştırılması İlişkisel operatörler yardımıyla iki kümenin eşit olup olmadıklarına veya bir kümenin diğerini kapsayıp kapsamadığına bakılabilir. Aşagıda iki küme arasında kontrol edilebilecek ilişkiler görülmektedir. Ave B kümeleri ayni eleinanlardan oluşuyorsa eşittir (A=B), Ave B kümelen aym elemanlardan oIuşmuyorsa eşit degildir (A<>B), A küniesinin her elemanı B kumesinin de elemanı ise A kümesi B kumesinin alt kumesidir (A =A). Kümelerin karşılaştırılması ile ilgili örnekler ve sonuçları aşağıda görülmektedir: [1,2,3] = [1,3,2] Doğru [1,2,3] <> [1,3,2,] Yanlış [1,2,3] = [1,3,2,4] Yanlış Kümelerin Okunması ve Yazdırılması Bir çok veri tipinde olduğu gibi küme tipi de standart Read ve Write prosedürleri ile okutulup yazdırılamaz. Okuma işleminde küme elemanları teker teker okunarak başlangıçta boş olan kümeye birleşme işlemi ile eklenir. Kümeyi yazdırmak için taban tipinin alabileceği tüm değerlerin küme içinde yer alıp almadığı in ifadesi ile kontrol edilir, yer alıyorsa yazdırılır. 34MASUK GUNGOR
35
DOSYALAR Metin Dosyalar Tekst dosyalarının temel elemanı karakterlerdir. Tekst dosyasında 0-9 rakamları, 'A'..'Z' büyük harfler 'a'..'z' küçük harfler, noktalama işaretleri, diğer semboller ve kontrol karakterleri yer alabilir. Karakterler satırlar şeklinde düzenlenmiştir. Satır uzunluğunda herhangi bir sınırlama yoktur. Satır sayısında da bir sınırlama yoktur. Sınırlama ancak yardımcı belleğin kapasitesinden ileri gelebilir. Dosya bir editör kullanılarak yazıldığında dosya sonu karakteri editör tarafından otomatik olarak eklenir. Eğer dosya kullanıcı tarafından giriliyorsa ^Z (Kontrol-Z) gibi bazı kontrol karakterlerinin kullanıcı tarafından girilmeis gerekir. Tekst dosyaları yalnız çıkış veya yalnız giriş için kullanılabilir. Diğer deyişle bir tekst dosyası hem giriş hem de çıkış için kullanılamaz Tekst dosyası kullanabilmek için TEXT tipinde bir dosya değişkeninin tanımlanması gerekir: var GirisDosyasi, CikisDosyasi : text ; 35MASUK GUNGOR
36
Dosyaların kullanılmadan önce açılması gerekir. Açma işlemi mevcut bir dosyadan veri okumak için yapılabileceği gibi verileri yazılabileceği yeni bir dosya oluşturmak için de yapılabilir. Dosya açılmadan önce yardımcı bellekte dosyanın adının ne olduğunun belirtilmesi gerekir. Bu amaçla assign ifadesi kullanılır. Örneğin tekst olarak tanımlanan GirisDosyasi'nın adı GIR.DAT ise Assign (GirisDosyasi, 'GIR.DAT' ) ;İfadesiyle dosyanın adı belirtilir. Tekst dosyasının okunması Aşağıda GIR DAT dosyasını okuyarak ekrana yazan programın tamamı görülmektedir. Program TekstOku ; var GirisDosyasi : text; Begin assing (GirisDosyasi, 'GIR. DAT') ; reset (GirisDosyası) do while not eof (GirisDosyasi) do Begin ReadLn (GirisDosyasi, Sayi, Kare,Kup); WriteLn (Sayi,Kare,Kup); end Close (GirisDosyası) ; end 36MASUK GUNGOR
37
Metin Dosyaya Yazma Verilen tekst dosyalarına yazdırılabilmesi için dosyanın rewrite ifadesiyle açılması gerekmektedir. Rewrite ifadesi diskette belirtilen isimde dosya yoksa oluşturur varsa dosyanın içindekileri siler. Rewrite ifadesi ile açma işlemi yapılmadan önce dosya okumada olduğu gibi assing ifadesiyle dosya değişkenin temsil ettiği dosyanın adının belirtilmesi gerekir. Örneğin verileri yazdırmak amacıyla CIKTI.DAT adlı dosyayı CikisDosyasi adlı dosya değişkenini, kullanarak Assing (CikisDosyasi, 'CIKTI.DAT') ; Rewrite (CikisDosyasi) ; ifadeleriyle açabilir. Dosyaya verileri yazdırmak için standart Write Prosedürü kullanılır. Daha önceki kullanımından farklı paremetre olarak dosya değişkeninin belirtilmesidir. İşlemler bittikten sonra açılan dosya yine close ifadesi ile kapatılmalıdır. Aşağıda 1'den 100'e kadar sayıları kareleri ve küpleri ile birlikte tekst sosyaya yazan program görülmektedir: Program TekstYaz ; Var CikisDosyasi : text; Sayi : integer ; Begin Assing (CikisDosyasi, 'CIKTI.DAT') ; Rewrite (CikisDosyasi); for sayi : = 1to 100 do WriteLn (CikisDosyasi, Sayi :10,Sayi* Sayi:10,Sayi*Sayi*Sayi:10); Close (CikisDosyasi); end 37MASUK GUNGOR
38
İkili Dosyalar İkili dosyalar bir kaç yönden tekst dosyalarından farklıdır. İkili dosyalar rasgele erişilebilirdirler yani dosyayı satır satır okumak yerine dosyanın herhangi bir yerine doğrudan erişebilirsiniz. İkili dosyanın okunması program DataFiles; var f: file of Byte; b: Byte; begin Assign(f,'MyFile.txt'); Reset(f); Seek(f,0); Read(f,b); end 38MASUK GUNGOR
39
İkili Dosyaya Yazma Write komutu ile dosyaya bir değer yazmak için öncelikle o değeri bir değişkene atamak gerekir. Yazmak istediğimiz yeri bulmak için Seek komutunu kullanırız. Ve ayrıca unutmamalıyız ki ikili dosyalar 1’den değil 0’dan başlar: program DataFiles; var f: file of Byte; b: Byte; begin Assign(f,'MyFile.txt'); Reset(f); b := 1; Seek(f,0); Write(f,b); end. 39MASUK GUNGOR
40
POINTERS Typed pointer’ları deklare etmek ve kullanmak Bir typed pointer deklare etmek için bu pointer’in işaret etmesini istediğiniz değişken türünün önüne bir ^ işareti koymalısınız. Bir tamsayiyi işaret eden bir pointer örneği şu şekildedir: var p: ^integer; @ işareti bir değişkenin önüne konularak o değişkenin adresi elde edilir. Daha sonra bu adres bir pointer’a kaydedilir, çünkü pointer’lar adres tutan değişkenlerdir. Bir tamsayinin adresini tutan bir pointer şu şekilde elde edilebilir: program Pointers; var i: integer; p: ^integer; begin p := @i; end. 40MASUK GUNGOR
41
Bir tamsayi değişkenini işaret eden bir pointer kullanarak o tamsayi değişkeninin değerini değiştiren program örneği aşağıdaki gibidir: program Pointers; var i: integer; p: ^integer; begin i := 1; p := @i; p^ := 2; writeln(i); end Hafızadan yer ayırmak ve bu yeri geri vermek ise şu şekilde yapılır: program Pointers; var p: ^integer; begin new(p); p^ := 3; writeln(p^); dispose(p); end 41MASUK GUNGOR
42
Untyped pointer’ları deklare etmek ve kullanmak Deklerasyonu şu şekildedir: var p: pointer; Bu tür pointer kullanırken new ve dispose yerine getmem ve freemem fonksiyonlarini kullanırız: program Pointers; var p: pointer; begin getmem(p,sizeof(integer)); freemem(p,sizeof(integer)); end. 42MASUK GUNGOR
43
MAŞUK GÜNGÖR TEŞEKKÜRLER 43 MASUK GUNGOR
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.