Bedava Ödev İndir > Akademik-Üniversite Kaynaklar > Bilgisayar Kaynaklar > PASCAL DERS NOTLARI

Reklamlar

Sayfa: 1
  Yazdır  
Gönderen Konu: PASCAL DERS NOTLARI  (Okunma Sayısı 293 defa)
Mayıs 11, 2008, 12:58:06 ÖS
Abruzzi
Çalışkan öğrenci
****

Rep +6/-0
Mesaj Sayısı: 1031



Üyelik Bilgileri
« : Mayıs 11, 2008, 12:58:06 ÖS »


                                                         Unit tanımlama
Yazılımı : UNIT ünite_ismi; INTERFACE Global Tanımlamalar IMPLEMENTATION Lokal Tanımlamalar Global prosedür ve fonksiyonlar END .
Örnek 8.1 : Unit ikisayi; Interface Procedure degis (var x, y : real) ; Implementation Procedure degis (var x, y : real) ; Var Yed : real ; Begin Yed : = x ; X : = y ; Y : = yed ; End ; End . Unit kelimesiyle başlayan bir unit 'in, normal programlar gibi bir de ismi vardır. Derlendikten sonra diskte bu isimde saklanır. Bu unit 'in ismi aynı zamanda dosya ismi olarak kullanıldığından 8 karakteri geçmemelidir. Bir ünite derlenir, ancak bir program gibi çalıştırılamaz. Sadece normal programlar içersinde kullanılabilir. Bir unit interface ve implementation adı verilen iki bölümden oluşur. Interface bloğu, global tanımlamaları içerir. Global tanımlamalar; üniteyi kullanan programlar tarafından kullanılacak olan değişken, sabit, prosedür veya fonksiyon isimleriyle varsa parametreleridir. Unit içersinde kullanılacak standart bir unit (dos, crt gibi ...) veya kullanıcının kendisinin hazırladığı bir unit varsa onlar da buraya yazılır. Implementation bloğunda ise; lokal tanımlamalar, unit içersinde yazılan prosedür veya fonksiyon tarafından kullanılacak olan değişken, sabit, tip tanımlamalarıdır.
Örnek 8.2 : Unit Ekran ; Interface Uses crt; Procedure sil ; Implementation Procedure sil ; Begin Clrscr ; End ; End . Standart bir komut olan "clrscr" komutunu kullanarak aynı işlemi yapan Türkçe isimli prosedürün tanımlandığı unit 'in hazırlanması Alt + F9 ile derlenir. ("Compile menüsü" içersindeki "destination" seçeneğinin karşısında "disk" yazılı olmalıdır.) Program EKRAN.TPU adıyla derlendikten sonra diske kaydedilecektir.
Örnek 8.3 :"Ekran" adlı unit 'i kullanarak ekranda belirli sürelerle yanıp sönen yazı yazdıran program. Program Ekran_kullan ; Uses ekran, crt ; Var I : integer ; Begin Sil ; Repeat Write ('Mehmet Kemal Coşkunöz Anadolu Teknik Lisesi') ; Delay (500) ; Sil ; Until keypressed ; End .
Unit kuvvet ; Interface Procedure kare (var x : integer) ; Procedure kup (var y : integer) ; Implementation Procedure kare (var x : integer) ; Begin X : = x * x ; End ; Procedure kup (var y : integer) ; Begin Y : = y * y * y ; End ; End . Örnek 8.4 :
Kuvvet adında bir kullanıcı ünitesi hazırlayarak bir sayının karesini ve küpünü alan prosedürleri içersine yazmak. Alt + F9 ile derlendikten sonra kuvvet.tpu adı altında derlendikten sonra kaydedilecektir.
Örnek 8.5 : Program hariciproc ; Uses crt, kuvvet ; Var a, b : integer ; Begin Clrscr ; Write ('Bir Tam sayı giriniz : >') ; readln (a) ; Writeln ('1. Kare Alma') ; Writeln ('2. Küp Alma') ; Write ('Seçiminiz>') ; readln (b) ; Case b of 1 : kare(a) ; 2 : kup(a) ; end ; Writeln ('Sonuç :' , a ) ; End .
"Kuvvet" ünitesini programın içerisindeki uses bloğunda tanımlayarak klavyeden girilen bir sayının karesini ya da küpünü seçime göre alan program.
Bu programda klavyeden okunan sayı, "a" değişkeni içerisine atanmıştır. Daha sonra, kare ya da küp alma için seçim yapıldığında, "b" değişkeni içerisine 2 atandığından, kup(a) prosedürü çalıştırılmıştır. Bu prosedürde "a" değişkeni içerisindeki 2 sayısı, örnek 8.4 deki ünitenin interface bloğu içerisindeki "kup (var y : integer)" tanımında bulunan "y" değişken parametresine aktarılmıştır. Daha sonra implementation bloğundaki prosedürdeki "y" değişkeni, kendisiyle üç defa çarpılarak yine "y" değişkeni içersine atanmıştır. "y" değişkeni prosedürün değişken parametresi olduğundan, elde edilen değeri tekrar ana programa gönderebileceğini biliyoruz. Böylece ana programda "a" değişkeni içersine gönderilen sonuç, writeln komutuyla ekrana yazdırılmıştır.
STANDART PROSEDÜR ve FONKSİYONLAR CHR Fonksiyon Chr fonksiyonu ASCII kod numarasının karşılığı olan karakteri verir. Yazılımı : CHR (N) ; Örnek : Chr (66) ; {B harfini verir} Chr (13) ; {zil sesi verir}
Chr fonksiyonunun sonucu char tipidir. N sayısı 0-255 arasında bir tam sayı ya da bir tam sayı değişken ismi olması gerekir. Chr fonksiyonuyla yapılan işlem, write komutu ile de yapılabilir. Örneğin : Writeln (chr(63)) yerine writeln (#63) Yazıldığında sonuç aynıdır. Her ikisinde de 63 sayısının ASCII kodu karşılığı olan "?" ekrana yazdırılır.
Örnek 1 :ASCII kod numarası 14-255 arasında olan sayıları karakter karşılığı yanlarına numaraları ile birlikte yan yana yazdıran program. Uses crt ; Var i : integer ; Begin Clrscr ; For i := 14 to 255 do write (i:3, '=', chr(i)) ; Writeln ; Writeln (' "65" in ASCII karşılığı =',#65, 'dır') ; Writeln (#7) ; {zil sesi üretir} End .
ORD Fonksiyon Bir elemanın tanımlı olduğu kümede kaçıncı sırada olduğunu bulmak için kullanılır. ORD fonksiyonu CHR fonksiyonunun tersine çalışır. Yani, verilen karakterin ASCII kod numarasını verir.
Yazılımı : ORD (N) ; Örnek : Ord ('B') ; {66 sayısını verir} Ord ('Mart') ; {Mart stringinin tanımlı olduğu sıralı tip bir veride mart Verisinin kaçıncı sırada olduğunu verir. Ord (False) {true} Ord (1) {1}
Ord fonksiyonunun sonucunun tipi longint 'tir. Eğer ord fonksiyonunun sonucu bir değişkene aktarılmak isteniyorsa, bu değişkenin tipi mutlaka tamsayı tipinde olmalıdır. N 'in tipi byte, integer, boolean, char veya sıralı tip bir verideki elemanın ismi olabilir. Örnek 2 : Sıralı bir veri tipindeki bir elemanın kaçıncı sırada olduğunu ve 'A' harfinin ASCII kod numarasını bulan program. Type Renkler = [kirmizi, mavi, yesil, sari, siyah] ; Begin Writeln ('Yesil in sıralı veri tipindeki sırası=', ord (yesil)) ; Writeln (' "A" harfinin ASCII kodu', ord('A'), 'dır') ; End .
TEXTBACKGROUND Prosedür Text modunda zeminin rengini değiştirmek için kullanılır. Yazılımı : TextBackGround (N) ; Örnek : TextBackGround (7) ; {ekran zeminini beyaz yapar} TextBackGround (White) ; {ekran zeminini beyaz yapar}
N, 0-7 arasında bir sayı ya da, bu sayılara karşılık gelen standart sabit isimlerdir. Standart sabit isimler İngilizce 'deki renk isimleridir.
TEXTCOLOR Prosedür Text modunda ekrandaki karakter rengini değiştirmek için kullanılır. Yazılımı : TextColor (N); Örnek : TextColor (1) ; {karakter rengini mavi yapar} TextColor (blue) ; {karakter rengini mavi yapar} N, 0-15 arasında bir tam sayı ya da, bu sayılara karşılık gelen standart sabit isimlerdir. Standart sabit isimler İngilizce 'deki renk isimleridir. Eğer N 'den sonra "blink" yazılırsa, karakterin rengi yanıp sönen biçimde olur. Kod Sabit İsmi Renk Kod Sabit İsmi Renk 0 Black Siyah 8 Darkgray Koyu gri 1 Blue Mavi 9 Lightblue Açık mavi 2 Green Yeşil 10 Lightgreen Açık yeşil 3 Cyan Turkuaz 11 Lightcyan Açık turkuaz 4 Red Kırmızı 12 Lightred Açık kırmızı 5 Magenda Bordo 13 Lightmagenda Açık bordo 6 Brown Kahverengi 14 Yellow Sarı 7 lightGray Açık gri 15 white beyaz
READKEY Fonksiyon Klavyeden sadece bir karakter okuyup char tipi bir değişkene aktarmak için kullanılır. Yazılımı : Readkey ; Örnek : ch := Readkey ; İşlem sırası readkey prosedürüne gelince program durur ve klavyeden bir karakter girilmesi beklenir. Herhangi bir tuşa basılır basılmaz readkey prosedürü bu değeri okur ve değişkene aktarır. Ancak klavyeden yazılan karakter ekranda görülmez.
Örnek 3 :Readkey prosedürü ile klavyeden okunan bir tuşun ASCII kod numarasını ekrana yazdıran program. Uses crt ; Var ch : char ; Begin Repeat Writeln ('Bir tuşa basınız') ; Ch := readkey ; If ch = #0 then Begin Ch := readkey ; Writeln ('Tuş numarası:', ord(ch), 'olan bir kontrol tuşuna bastınız' ) ; End Else Writeln ('ASCII kod numarası', ord(Ch), 'olan tuşa bastınız') ; Until ch = #27 ; End . KEYPRESSED Fonksiyon Programın çalışması sırasında klavyeden bir tuşa basılıp basılmadığını kontrol etmek için kullanılır. Yazılımı : Keypressed ;
Keypressed fonksiyonu bir boolean değişkenidir. Programın çalışması esnasında bir tuşa basılmış ise fonksiyonun sonucu true 'dir, basılmamışsa False 'dir. Crt standart ünitesi program içinde tanımlı olması gerekir.
Örnek 4 :Klavyeden bir tuşa basılıncaya kadar ekrana çeşitli karakterlerle dolduran program. Uses crt ; Begin Repeat Write (#176, #219, #178) ; Until keypressed ; End .
GOTOXY Prosedür Kursör pozisyonunu istenilen ekranın istenilen koordinatlarına konumlandırmak için kullanılır. Yazılımı : GotoXY (Sütun_no, Satır_no) ; Örnek : Gotoxy (1,1) ; {ekranın sol üst köşesi} Gotoxy (80,25) ; {ekranın sağ alt köşesi} Sütun_no 1-80 arasında bir sayı, Satır_no 1-25 arasında bir tamsayı veya bunların yerine kullanılacak bir tamsayı değişken adıdır.
Örnek 5:ekranın sol üst köşesine ve sağ alt köşesine ASCII karakter kod numarası 219 olan karakteri ve ayrıca ekranın ortasına "Uygulamalarla Temel Bilgisayar" yazan program. Uses crt ; Begin Clrscr ; Gotoxy (1,1) ; write(#219) ; Write (2burası ekranın sol üst köşesidir') ; Gotoxy (35,12) ; Write ('Uygulamalarla') ; Gotoxy (33,13) ; Write ('Temel Bilgisayar') ; Gotoxy (80,24) ; write (#219) ; End .
WINDOW Prosedür Text modunda ekranda pencere oluşturmak için kullanılır. Yazılımı : Window (X1,Y1,X2,Y2) ; Örnek :Window (1,1,80,25) ;
X1 ve Y1 pencerenin sol üst köşesinin sütun ve satır numaralarını, X2 ve Y2 ise pencerenin sağ alt köşesinin sütun ve satır numaralarını gösterir. Window ile ayrılan alan ekranın aktif çalışma alanıdır. Yani crt standart ünitesi içinde bulunan (gotoxy, clrscr, clreol, delline, insline, wherex, wherey) prosedürlerle, writeln ve readln komutları bu pencere içerisinde işlev görürler.
Örnek 6: Ekranın belirtilen koordinatları içerisinde pencere oluşturan ve bu pencere içerisinde gotoxy prosedürünü kullanan program. Uses crt ; Begin Window (1,10,60,20) ; Gotoxy (1,1) ; Textcolor (black) ; Textbackground (white) ; Clrscr ; Writeln ('Burası pencerenin sol üst köşesidir.') ; Writeln ; Write ('Çıkış için enter tuşuna basınız') ; Readln ; Textbackground (black) ; Textcolor (white) ; Window (1,1,80,25) ; Clrscr ; End .
LENGTH Fonksiyon Bir stringin kaç karakterden oluştuğunu bulmak için kullanılır. Length fonksiyonunun sonucu integer tiptir. String sabit değeri yerine bir değişken adı da kullanılabilir. Yazılımı : Length (String) ; Örnek : Length ('Bilgisayar') ; {10 tamsayı üretir} Length (' Levent') ; {11 tamsayı üretir} Length ('Alperen ') ; {15 tamsayı üretir}
Örnek 7: Klavyeden bir string okuduktan sonra, bu stringi oluşturan karakterleri bir sonraki ile değiştirerek şifreleyen ve sonra da ekrana yazdıran program. Var Asckod, uz, j : integer ; Sif, st, st2 : string ; K, ch : char ; Begin Write ('Bir string giriniz :') ; readln (st) ; Sif :=' ' ; Uz := length (st) ; Writeln ('Girilen string in uzunluğu =', uz) ; For j := 1 to uz do Begin St2 := copy (st, j, 1) ; For k:= 'a' to 'z' do If st2 = k then Begin Ch := k ; Asckod := ord (ch) ; Asckod := asckod + 1 ; Sif := sif + chr (asckod) ; End ; End ; Writeln ('Şifrelenmiş string =', sif) ; End .
EXIT Prosedür İşlenmekte olan program bloğundan direkt olarak çıkmak için kullanılır. İşlenen blok bir prosedür ise, bu prosedürün çağrıldığı noktaya geri dönülür. Eğer işlenen blok ana program bloğu ise, programın işlemesi tamamen sona erer. Yazılımı : Exit ;
Örnek 7:Klavyeden 0 'dan farklı bir sayı girildiği sürece program akışını devam ettiren, 0 girildiğinde ise programın işlemesini sona erdiren program. Uses crt ; Var i : byte ; Begin Repeat Write ('0-255 arasında sayı giriniz') ; readln (i) ; If i=0 then exit ; Writeln ('Sayının ASCII karakter karşılığı :', chr(i)) ; Until false , End . HALT Prosedür İşlenmekte olan bir program herhangi bir noktada sona erdirmek için kullanılır. Halt prosedürü ister bir prosedür içerisinde, ister ana program içinde kullanıldığında programın işlemesi o noktada kesilir. Yazılımı : HALT ;
DELAY Prosedür Çalışmakta olan bir programın işlenmesini belirlenen bir süre durdurur. Yazılımı : Delay (N) ; Örnek : Delay (200) ; {program 200 milisaniye durdurulur} N bir tamsayıdır. Delay prosedürü kullanıldığında program N milisaniye kadar durur.
SOUND Prosedür Bilgisayarın ses üretecinden farklı sesler elde etmek için kullanılır. Yazılımı : Sound (N) ; Örnek : Sound (350) ; {350 Hz. Frekansında ses üretir} Sound prosedürü, sistemin içinde bulunan hoparlörden N frekansında ses üretilmesini sağlar. N, sesin frekansını belirleyen bir tam sayıdır. Sistemde ses üretilmeye başlandıktan sonra, program diğer komutlarını işletmeye devam etse de bu ses kesilmez. Sesi kesmek için nosound prosedürünü kullanmak gerekir. Örnek 8 : Frekansı değiştirerek ses çıkaran ve belirli sürelerle bekleyerek ekrana Coşkunöz Anadolu Teknik Lisesi yazdıran program. Uses crt ; Var i:integer ; Begin Repeat Clrscr ; For i := 100 to 300 do Begin Delay (4) ; sound (i) ; End ; Gotoxy (35,10) ; writeln ('Coşkunöz') ; Nosound ; Delay (40) ; For i := 300 to 500 do Begin Delay (2) ; sound (i) ; End ; Gotoxy (33,12) ; writeln ('Anadolu') ; Gotoxy (33,14) ; writeln ('Teknik') ; Delay (40) ; For i := 500 to 1 do Begin Delay (3) ; sound (i) ; End ; Gotoxy (34,16) ; writeln ('Lisesi') ; Nosound ; Delay (20) ; Until keypressed ; End .
RANDOM Fonksiyon Sistemin rasgele sayı üretecinden tesadüfi sayılar elde etmek için kullanılır. Yazılımı : Random (N) ;
Random fonksiyonu işlendiğinde 0 ile N arasında önceden ne olacağı bilinmeyen bir sayı üretir. Ancak random fonksiyonu her çalıştırılışında aynı sayıyı üretir. Eğer randomize prosedürü program içerisinde önceden yazılırsa bu durumda rasgele sayı üretecinin başlangıç değeri sistemin saatine göre her an değiştirilmiş olur. böylece random fonksiyonu her çalıştırıldığında birbirinden farklı sayılar üretir.
Örnek 9 : TextAttr standart değişkeni içerisine her defasında farklı bir sayı atayarak yazılacak karakterin renk niteliğini her an değiştiren ve ekrana 255 farklı renkte karakter yazdıran program. Uses crt ; Begin randomize ; repeat textAttr := random (16) ; write (#176) ; until keypressed ; end .
Örnek 10 : Enter tuşuna basıldığı sürece ekranın ortasında görülecek biçimde üç adet zar atılışını gerçekleştiren program. Uses crt ; Var I : integer ; Ch : char ; Begin Clrscr ; Gotoxy (20,8) ; Writeln ('Üç adet zar atmak için enter tuşuna basınız') ; Ch := readkey ; While ch=#13 do Begin Gotoxy (35,12) ; For i := 1 to 3 do Begin Write (random (6) : 3) ; End ; Ch := readkey ; End ; End .
IORESULT Fonksiyon Pascal programları çalışırken oluşan run-time hata kod numarasının Pascal ortamına alınmasını sağlar.
Yazılımı : IORESULT Örnek : If IOResult <> 0 then Writeln ('Directory bulunamadı') ; Bu fonksiyon {I-} compiler bildirisi ile birlikte kullanılır. Eğer program çalışırken bir giriş, çıkış hatası yapılırsa, bu hatanın kod numarası IOResult fonksiyonuna aktarılır. Programcı, bu kod numarasını kullanarak hatanın giderilmesini sağlayabilir.
Örnek 11: Var Intsay : integer ; Label Hata ; Begin {I-} hata : write ('Bir sayı giriniz :') ; readln (intsay) ; If IOResult = 106 then Begin Writeln ('Tam sayı girişi yapmalısınız !') ; Goto hata ; End ; Writeln ('Sayının karesi :', intsay*intsay) ; End .
Integer bir değişken içerisine karakter bilgi girildiğinde 106 nolu run-time hata kod numarası üretildiğini ve programın icrasının kesildiğini biliyoruz. Bu program, kullanıcı tam sayı girinceye kadar her defasında gerekli uyarıyı ekrana yazar ve programın hatalı giriş nedeniyle kesilmesini önler.
COMPILER BİLDİRİLERİ
Turbo Pascal derleyicisinin, bazı özellikleri, compiler bildirileri ile kontrol altında tutulabilir. Compiler bildirileri program text 'i içinde istenilen her noktada yer alabilir. Her bildiri ifadesinin açıklama karakterleri {} içerisine alınması zorunludur. Her compiler bildirisi bir harften oluşur. Bu harfin solunda $ işareti, sağında ise "+" veya "-" karakteri bulunur. Bildiriyi takiben yazılan "-" işareti, bu bildiri ile sağlanan özelliğin pasif duruma geçmesi için "+" işareti ise aktif duruma geçmesi için kullanılır. Her compiler bildirisinin bir default değeri vardır. Bu bildiriler programcı tarafından aksi belirtilmediği sürece bazıları aktif bazıları da pasif durumdadır. Bir bildirinin aktif olması programın çalışma hızını düşürecek, ancak pasif durumda iken de bildiri kontrolü yapılamayacaktır.
{$I+} ve {$I-} Giriş çıkış işlemleri sırasında, yapılacak hataların kontrol edilip edilmemesini sağlar. Diğer bir deyişle, Pascal 'ın hata yakalama rutinlerini aktif ya da pasif hale geçirmek için kullanılır. Default I+ 'dır. Böyle bir durumda bir giriş çıkış hatası yapılırsa, hatayı gösteren bir mesaj ile programın icrası kırılır. I bildirisi pasif durumda iken, bir giriş çıkış hatası yapılırsa, programın icrası kırılmaz. Bunun yerine IOResult fonksiyonuna aktarılan değeri kontrol ederek hatanın giderilmesi sağlanabilir.
{$R+} ve {$R-} Kullanım amacı, sınırlı tip değişkenlere, sınır dışı değer verildiğinde, Pascal compiler 'ın gerekli run-time hatasını vermesini sağlamaktır. {$R-} bildirisi default 'tur. Yani sınır kontrolü yapılmamasını compiler 'a bildirir. {$R+} ise sınır kontrolünün yapılmasını sağlar. İndis değerlerinin kontrolü için kullanılır. Default değeri R- olup, pasiftir. Böyle bir durumda, indis değerleri üzerinde veya byte ve dizisel tipteki değerler üzerinde sınır kontrolü yapılamaz. Bu da çeşitli hatalara yol açabilir. R bildirisi aktif duruma geçirildiğinde, bu tür değerler üzerinde sınır kontrolü yapılacak ve bir hata bulunduğunda, programın çalışması kırılacaktır.
{$B+} ve {$B-} Giriş/çıkış modunu kontrol etmek için kullanılır. Default B+ 'dır. Aktif durumda iken giriş/çıkış işlemleri için CON: aygıtı kullanılır. Bu da default giriş/çıkış aygıtı demektir. Bildiri pasif durumda iken TRM: aygıtı kullanılır. Bu bildiri global özelliğe sahiptir. Diğer bir deyişle program içinde aktif ya da pasif duruma geçirilemez. Programın başında kullanılan bir B bildirisi, bu özelliğin program sona erinceye kadar ya aktif durumda ya da pasif durumda kalmasını sağlar. B bildirisi pasif durumda ise, değer okunuşu sırasında kullanılan read deyimleri readln gibi çalışacaktır. Diğer bir deyişle giriş sırasında giriş sırasında, klavyeden son olarak gönderilen CR karakteri, read deyimine etki edecek ve ekranda, imlecin bir alt satıra inmesini sağlayacaktır.
{$C+} ve {$C-} Ctrl C ve Ctrl S tuşlarını aktif ya da pasif duruma geçirmek için kullanılır. Bu bildirinin default değeri C+ 'dır. Yani aktif durum default 'tur. C bildirisi aktif durumda iken (u bildirisi de pasif durumda ise), sadece giriş çıkış işlemleri sırasında ctrl c ve ctrl s tuşlarının kullanılmasına izin verir.bir çıkış aygıtına veri yazılırken, ya da giriş aygıtından bilgi okunurken ctrl c tuşlarına basılırsa programın icrası kırılır. Ctrl s tuşlarına basılırsa, başka bir tuşa basıncaya kadar programın icrası durdurulur. C bildirisi pasif duruma düşürülürse, giriş çıkış işlemleri sırasında ctrl s ve ctrl c tuşlarının kontrol özelliği ortadan kalkar. Bu bildiri programın içinde sadece bir kez ve programın en başında olmak şartı ile kullanılabilir.
{$V+} ve {$V-} v bildirisi alt programlar ile ana program arasında veya sadece alt programlar arasında, değer transferi için kullanılan string tipteki parametrelerin uzunluk kontrolünü yapar. Default V+ olup aktiftir. Böyle bir durumda string tipteki formal ve aktual parametrelerin uzunlukları farklı ise hata tespit edilir ve derleme işlemi durdurulur. V bildirisi pasif duruma geçirilirse, değer transferi için kullanılacak formal ve aktual parametrelerin uzunlukları kontrol edilmeyecektir.
{$U+} ve {$U-} Ctrl c tuşunun etkisini kontrol altında tutmak için kullanılır. Default değeri U- olup pasiftir. Bu durumda, sadece giriş çıkış işlemleri gerçekleşirken ctrl c tuşlarına basılırsa, çalışmakta olan programın icrası kırılır.
{$F+} ve {$F-} Herhangi bir programın çalışması sırasında, aynı anda açılabilecek dosya sayısını bildirmek için kullanılır. Global yapıya sahip bu bildiri sadece programın başında kullanılabilir. Bildirinin default değeri F16 'dır. Aksi belirtilmedikçe aynı anda açık tutulabilecek dosya sayısı 16 'dır.
{$D+} ve {$D-} Text dosyalar için aygıt kontrolü yapan bu bildirinin default değeri D+ 'dır. Bu bildiri aktif olduğu sürece, açılan her text dosya için, işletim sistemi aracılığıyla kontrolü yapılır. Açılan dosya direkt olarak bir aygıtı gösteriyorsa, bu dosya için dosya buffer 'ı ayrılmaz. Böyle bir dosyanın giriş çıkış işlemi değişkenler ve aygıt arasında direkt olarak gerçekleştirilir. Bildiri pasif duruma düşürülürse her dosya için buffer ayrılacaktır.
{$G+} ve {$G-} G bildirisi "-" ya da "+" işareti ile değil, bir tamsayı değer ile kullanılır. Bildirinin default değeri G0 'dır. G bildirisi ile 0 kullanılmış ise, Pascal tarafından belirlenen giriş buffer 'ı kullanılır. Bildiri ile beraber kullanılan rakam sıfırdan farklı bir rakam ise, dos tarafından gösterilen standart giriş buffer 'ı kullanılacaktır.
{$P+} ve {$P-} G bildirisi gibi, bir tamsayı ile birlikte kullanılır. Default değeri P0 'dır. Bu durumda Pascal tarafından kontrol edilen dosya (çıkış) buffer 'ı kullanılır. P bildirisi ile birlikte kullanılan rakam 0 'dan farklı ise, dos tarafından gösterilen standart çıkış buffer 'ı kullanılacaktır.
TURBO PASCAL HATA MESAJLARI COMPILER HATA MESAJLARI Hata Kodu Mesaj Açıklama 1 Out of memory Sistem hafızası (ram) yetersiz veya program çok büyük. Config.sys dosyasından gereksiz sürücüleri çıkartınız. 2 Identifier Expected Bir Pascal reserved kelimesi tanımlama bloğunda kullanılıyor. 3 Unknown Identifier Var bloğunda tanımlanmamış bir değişken programda kullanılıyor. 4 Duplicate Identifier Bir değişken veya sabit aynı tanımlama bloğunda iki defa tanımlanıyor. 5 Syntax error Program içerisinde geçersiz bir karakter kullanılıyor. 6 Error in real constant Sabit real tanımında hata var. 7 Error in integer constant Sabit integer tanımında hata var. 8 String constant exceeds line String sabitlerin sonundaki tırnak unutulmuş veya fazladan tırnak konulmuş. 10 Unexpected end of file Bir program bloğu sonuna end yazılmamış veya "." Unutulmuş. 11 Line too long Bir satıra 126 karakterden daha fazla yazılmış. 12 Type identifier expected Type tanımlayıcı bekleniyor. 13 Too many open files Aynı anda açık olan dosya sayısı çok fazla config.sys files satırı 20 olmalı. 14 Invalid file name Dosya ismi geçersiz ya da belirtilen path yanlış 15 File not found Belirtilen dosya aktif directory içerisinde bulunamıyor. 16 Disk full Disket ya da hard disk dolu. 17 Invalid compiler directive Geçersiz compiler bildirisi. 18 Too many files Aynı anda açılmış çok sayıda dosya var gereksiz dosyaları kapatınız. 19 Undefined type in pointer Pointer tanımında bilinmeyen tip. 20 Variable identifier expected Değişken tanımlayıcısı bekleniyor. 21 Error in type Bu sembol ile tip tanımlamasına başlanamaz. Tip hatası var 26 Type mismatch Bir atama deyiminde değişken içine atanan değer ile değişken tipi arasında uyuşmazlık var. 28 Lower bound greater than upper bound Sınırlı tip veri tanımında alt sınır, üst sınırdan fazla 29 Ordinal type expected Real, string veya sınırlı tip veri burada kullanılamaz. 30 Integer constant expected Sadece integer sabit kullanılabilir. 31 Constant expected Burada sadece sabit kullanılır. 32 Integer or real constant Sadece sayısal sabit kullanılabilir. 33 Type identifier expected Tip tanımı gerekiyor. Tipinin tanımlanması gerekli olan bir değişkenin tipi tanımlanmamış. 34 Invalid function result type Geçerli olan fonksiyon tipi sadece standart veri tipleri ve string tiptir. 36 Begin expected Begin kelimesi kullanılmamış. 37 End expected End kelimesi kullanılmamış. 38 Integer expression expected İfade integer tipte olmalıdır. 39 Ordinal expression expected İfade sıralı (ordinal) tip olmalıdır. 40 Boolean expression expected İfade boolean tip olmalı. 41 Operand type does not match operator Aritmetik operatör bu tip veriler için uygun değildir. Örneğin ('A' div '2') 42 Error in expression Bir ifade içersinde operatör yazmak unutulmuş. Örneğin "a:=5*" 50 Do expected Do yazılmamış. 54 Of expected Of yazılmamış. 55 Interface expected Interface yazılmamış. 57 Then expected Then yazılmamış. 58 To or downto expected To veya downto yazılmamış. 62 Division by zero /, div veya mod operatörü ile bir sayının sıfıra bölümü oluşuyor. 63 Invalid file type Readln komutu record tip dosyada veya seek komutu text tipi dosyada kullanılmış. 64 Cannot read or write variables of this type Bu tip veri read veya write komutu ile kullanılamaz. 66 String variable expected Bu değişken string tip olmalı. 67 String expression expected İfade string tipte olmalı. 73 Implementation expected Implementation yazılmamış. 74 Constant and case type do not match Case deyiminin seçici değişkeni ile etiket tipleri arasında uyumsuzluk var. 75 Record variable expected Bu değişken record tipte olmalı. 76 Constant out of range Sınır dışında kalan bir sabit değer, değişkene atanmış. 79 Integer or real expression expected İfade integer veya real tipte olmalı. 84 Unit expected Unit yazılması gerekiyor. 85 ";" expected ";" yazılması gerekiyor. 86 ":" expected ";" yazılması gerekiyor. 87 "," expected ":" yazılması gerekiyor. 88 "(" expected "(" yazılması gerekiyor. 89 ")" expected ")" yazılması gerekiyor. 90 "=" expected "=" yazılması gerekiyor. 91 ":=" expected ":=" yazılması gerekiyor. 92 "[" or "(." expected "[" veya "(." yazılması gerekiyor. 93 "]" or ")." expected "]" veya ")." yazılması gerekiyor. 94 "." expected "." yazılması gerekiyor. 95 ".." expected ".." yazılması gerekiyor. 97 Invalid for control For deyimi içerisindeki kontrol variable değişkeni integer tipte olmalı. 98 Integer variable expected Integer değişken kullanılmalı. 102 String constant expected String sabit kullanılmalı. 113 Error in statement Bu sembol ile bir deyim yazmaya başlanamaz. 116 Must be in 8087 mode to compile this Bu ifadenin derlenmesi için compiler 8087 modunda olmalı. 121 Invalid qualifier Array olarak tanımlanmamış bir değişken indeksli olarak kullanılmaya çalışılıyor. 132 Critical disk error Kritik bir disk hatası mevcut. Örneğin sürücüde disk yok. 133 Cannot evaluate this expression Bu ifade debug fonksiyonu ile değerlendirilemez. Örneğin sin fonksiyonu veya bir sabit watch penceresinde yazılmış. RUN-TIME HATA MESAJLARI Hata Kodu Mesaj Açıklama 1 Invalid function number Geçersiz fonksiyon numarası. Mevcut olmayan dos fonksiyonu çağrılıyor. 2 File not found Reset, append, rename veya erase komutlarıyla belirlenen dosya bulunamıyor. 3 Path not found Reset, rewrite, append, rename, erase, chdir, mkdir veya rmdir komutlarıyla belirtilen path bulunamıyor. 4 Too many open file Aynı anda açılan dosya sayısı çok fazla. 5 File access error Reset, append, rewrite, rename, erase, rmdir komutları kullanıldığında ortaya çıkar. a) read-only bir dosya silinmeye çalışılıyor. b) Directory dolu. c) İsim değiştirilirken var olan bir dosya ismi kullanılıyor. d) Var olan bir directory isminde bir directory açılmaya çalışılıyor. e) İçi boş olmayan veya var olmayan bir directory silinmeye çalışılıyor. f) Açık olmayan bir dosyadan veri okunmaya ya da yazılmaya çalışılıyor. 6 Invalid file handle Geçersiz bir dosya isteği dos sistemine iletilmiş. 12 Invalid file access code Geçersiz dosya erişim kodu. Reset veya append komutlarıyla geçersiz dosya modu değeri kullanılmış. 15 Invalid drive number Getdir komutu ile geçersiz bir sürücü numarası kullanılmış. 16 Cannot remove current directory Rmdir komutu ile aktif directory silinmeye çalışılıyor. 17 Cannot rename accross drives Rename komutu ile aynı sürücüdeki dosyaların ismi değiştirilmeye çalışılıyor. 100 Disk read error Read komutu ile eof karakterinden sonraki bir kayıt okunmaya çalışılıyor. 101 Disk write error Close, write, writeln komutlarıyla dolu bir diskete işlem yapılıyor. 102 File not assigned Assign komutu ile dosya bir temsilci değişkene atanmamış. 103 File not open Açılmamış bir dosya üzerinde işlem yapılıyor. 104 File not open for input Text dosyası giriş için açık değil. Bu hata read, readln, eof, eoln, seekeof veya seekeoln komutlarının açık olmayan dosyaya kullanılması esnasında verir. 105 File not open for output Text dosyası çıkış için açık değil. Bu durumdaki dosyaya write ya da writeln komutlarının kullanımı sırasında ortaya çıkar. 106 Invalid numeric format Text dosyasından read veya readln komutu ile sayısal bir veri okunurken uygun olmayan bir sayısal değer ile karşılaşıldı. 150 Disk is write protect Disket yazmaya karşı korumalı. 151 Unknown unit Tanımsız ünite. 152 Drive not ready Disket, sürücüye takılmamış veya sürücü kolu kapatılmamış. 154 CRC error in data Diskete kaydedilmiş datada hata var. Disk yüzeyinde fiziksel hata olabilir. 156 Disk seek error Disketten data okunurken hataya rastlandı. 157 Unknown media type Disket dos tarafından tanınmıyor. Formatsız veya uyumsuz formatlı bir disk okutulmaya çalışılıyor. 158 Sector not found Disket bozuk olduğundan data bulunamıyor. 159 Printer out of paper Yazıcıya kağıt takılmamış 160 Device write fault Donanım hatası nedeniyle disket ya da hard diske yazılamıyor. 161 Device read fault Donanım hatası nedeniyle disket ya da hard diskten data okunamıyor. 162 Hardware failure I/O portunda arıza tespit edildi. 200 Division by zero /, div veya mod operatörü ile bir sayının sıfıra bölümü oluşuyor. 201 Range check error {$R+} compiler bildirisi kullanıldığında bir değişkene sınırları dışında veri girilmekte veya bir dizi değişkenin boyutları sınır dışında kalıyor. 205 Floating point overflow Tanımlanmamış bir real değişkene sınırları dışında veri atanmaya çalışılıyor.
ANLATILACAK KONULAR: 9- DOSYALAR A-Dosya Kavramı B-Text Dosyalar 1-Dosya Yaratma 2-Dosyaya Bilgi Yazma 3-Dosyadan Bilgi Okuma 4-Dosyaya Bilgi Ekleme 5-Dosyadan Bilgi Silme 6-Dosyada Bilgi Değiştirme Giriş : Kullanılan programlama dili ne olursa olsun, programcı tarafından ele alınacak dosyalar iki grupta incelenebilir. Bunlar program ve veri dosyalarıdır. Program ve veri dosyaları, kendi içlerinde alt sınıflara ayrılabilir. 1. Program Dosyaları a. Source Dosyalar i. Ana Program Dosyaları ii. Include Dosyalar b. Object Dosyalar i. COM uzantılı dosyalar ii. CHN uzantılı dosyalar iii. Overlay dosyalar iv. External dosyalar 2. Veri Dosyaları a. Sırasal Erişimli Dosyalar (Text dosyalar) b. Rasgele Erişimli Dosyalar (Record tipi dosyalar) c. Byte tipi Dosyalar
Object Program Dosyaları : Source program (program text'i) dosyalarının derlenmesi sonucunda elde edilir. Object dosyalar, sadece object kodları içeren icra edebilir dosyalardır. Bunlardan com uzantılı olanlar, isimlerinin sistem komut satırından girilmesi durumunda icra görürler. Diğer object kod dosyaları ise, com uzantılı bir program dosyasının icrası sırasında çağrılarak icra ettirilir. Diğer bir deyişle, overlay ve external dosyalar ile chn uzantılı dosyalar, com uzantılı dosyalar tarafından kullanılırlar. Ancak bir com uzantılı dosya, başka bir object kod programı tarafından da çağrılarak icra ettirilebilir. Com ve chn uzantılı dosyaların, başka programlar tarafından çağrılarak icra ettirilebilmesi için execute ve chain prosedurleri kullanılır.
Overlay dosyalar : Ana programa ait object kodun bir parçası olmakla birlikte, ana programa ait dosyadan ayrı olarak oluşturulan dosyalara overlay dosya adı verilmektedir. Bilgisayarın belleğine sığmayacak büyüklükteki programların parçalara ayrılması, bu parçaların dosyalar halinde disk/diskete kayıt edilmesi ve icra sırasında her bir dosyanın ayrı ayrı, aynı bellek bölgesine aktarılarak icra ettirilmesi Turbo Pascal tarafından sunulan bir tekniktir. Bu tekniğe overlay dosya sistemi adı verilir. Ana programın hacmini büyüten alt programlar (prosedur ve fonksiyonlar), programcı tarafından overlay olarak tanımlanabilir. Derleme sırasında bu tür programlara rastlanırsa, alt programa ait object kod, ana programın oluşturduğu object kod dosyasına değil ayrı bir dosyaya yazılır. Bu tür dosyalar da overlay dosyalardır. Overlay alt programları içeren bir ana program icra ettirilmek istendiğinde, overlay dosyaların yükleneceği boş bir bellek bölgesi ile birlikte ana programa ait object kod belleğe yerleşir. Bu boş bellek bölgesine overlay alanı adı verilir. Overlay alanlarının sayısı, derleme esnasında oluşturulan overlay dosyalarının sayısı kadardır. Overlay bellek alanının büyüklüğü, en büyük overlay alt programını kapsayacak şekilde düzenlenir. Böylece ayrılan alanın, bütün overlay alt programlarını alabilecek genişlikte olması sağlanmış olur.
External dosyalar : Daha önceden yazılmış ve object kod halinde disk/diskete kaydedilmiş programlar Pascal programı içersinden çağrılarak kullanılabilir. Örneğin, daha çok makine dili ile yazılmış olan, fakat Pascal programı içinden kullanılabilen object dosyalar, başka bir program dosyası olup, external dosya olarak isimlendirilir. External dosya içinde yer alan programlar, Pascal tarafından birer alt program olarak ele alınırlar. Tanımlanırken, tanım başlığını takiben external bildirisi kullanılan alt programlara (fonksiyon veya prosedurlere) external alt program adı verilmektedir. External alt programların bir tanım veya icra blokları yoktur. Bu tür bir alt programın tanımlanmasında sadece tanım başlığı kullanılır. Tanım cümlesinin bitiminde yazılan external bildirisini takiben, bu alt program tarafından kullanılacak external dosyanın adı yazılır. Bu ad string forma uygun olmalıdır. Derleme sırasında bir external bildirisine rastlanırsa, external dosya içindeki object kod okunarak, tanımlanan alt program için ayrılan alana yerleştirilir. Bu object kodun Doğru veya yanlış olması Pascal tarafından kontrol edilmez.
Include dosyalar : Turbo Pascal editörü içinde yazılabilecek kaynak programların maksimum uzunluğu 64 K dır. Bu uzunluk, küçük belleğe sahip bilgisayarlar için daha da azalmaktadır. 64 K yı geçen, oldukça geniş kapsamlı programlar yazılmak istendiğinde, editörün sunduğu hacim yeterli olmayacaktır. Turbo Pascalın $I bildirisi, bellekte yani editörün içinde bulunmayan fakat o anda diskette bulunan program parçalarının derleme esnasında okunmasını ve bellekteki programın bir parçası olarak kabul edilmesini sağlar. Bu tür kaynak program dosyalarına include dosyalar adı verilir. Include dosyalarının diğer bir kullanım amacı ise; programcı tarafından library niteliğinde oluşturulan program parçaları veya rutinlerinin ayrı dosyalar halinde disk/diskette saklanması ve her ihtiyaç duyulduğunda, include dosya olarak, başka program textlerine ilave edilmesidir.
Veri Dosyaları : Veri dosyaları, derleme anında değil icra anında, programları tarafından oluşturulur ve kullanılır. Bu dosyaların içeriklerinde object kodlar değil, programlar tarafından işlenen bilgiler yer alır. Aynı yapıdaki kayıtların oluşturduğu bütündür. Sürekli olarak saklanması gereken bilgiler ya program içersinde sabit olarak tanımlanırlar ya da dosyalarda saklanırlar. Program içersinde sabit olarak bilgiler yazılabilir. Ancak bir okuldaki öğrenci listesi, bir işletmenin müşteri kayıtları ve bunlara ait hareketler veya muhasebe kayıtları gibi bilgiler program içersinde yazılamazlar. Bu bilgilerin dosyalarda tutulması gerekir.
Turbo Pascal programlama dilinde üç farklı dosyalama şekli mevcuttur. Veri Dosyaları ? Sırasal Erişimli Dosyalar (Text dosyalar) ? Rasgele Erişimli Dosyalar (Record tipi dosyalar) ? Byte tipi Dosyalar Sırasal Erişimli Dosyalar (Text Dosyalar) : Metin dosyaları olarak adlandırılan bu dosyalarda kayıtlar arka arkaya yazılırlar. Her kaydın sonunda CR (Carriage Return) (EOL = End Of Line) işareti vardır. Dosyaya yazılan ilk kayıt dosyanın başında, son girilen kayıt ise dosyanın en sonunda bulunur. Bir kayıta erişmek için o kayıta kadar olan bütün kayıtların okunması gerekir. Çok kayıttan oluşan dosyalarda kayıtlara erişim yavaş, yani çok zaman gerektirdiğinden text dosyalar tavsiye edilmez. Bu dosyaların içerikleri herhangi bir editör programı ile görülebileceği gibi DOS'un type komutu yardımı ile de görülebilir. Text dosyalarda dosyaya kayıt yazmak veya okumak için dosya farklı komutlarla açılmalıdır. Bunun için dosyanın her defasında kapatılıp yeniden açılması gerekir. Okunan kayıtları tekrar okumak için dosyanın kapatılıp yeniden açılması gerekir. Text dosyalar, diğer bir tabirle sırasal erişimli dosyalar, karakterleri içeren satırlardan oluşur. Dosya içinde yer alan her bir satır, bu dosyanın bir kaydı olarak kabul edilir. Sırasal erişimli dosya organizasyonunda, gerek kayıt yapılması, gerek mevcut kayıtların okunması sırasal yapıda gerçekleşir. Ayrıca, aynı anda, hem okuma hem yazma işlemi yapılamaz. Text dosyaların sırasallığını daha net belirtmek üzere, text dosyanın kayıtlarının normal satırlara benzediğini kabul edelim. Böyle bir durumda, kayıt yapma işlemi, ilk satır üzerinde başlayacak, daha sonra yapılacak kayıt ise bir sonraki satır üzerine gerçekleştirilecektir. Diğer bir deyişle 2 nolu satır üzerine kayıt yapabilmek için 1 nolu satıra kayıt yapılması zorunludur. Aynı kural, mevcut bir dosyanın kayıtlarının okunması sırasında da geçerlidir. Dosya açıldığında ilk okunacak kayıt, dosyanın ilk satırındaki kayıt olacaktır. Her okuma işlemi sonrasında, bir sonraki pozisyonda bulunan kayıt, okunabilecek yeni kayıt olarak belirlenir. Diğer bir deyişle, istenilen bir kaydın okutulabilmesi için, bir önceki kayıtın okutulmuş olması şarttır. Disk veya disket sürücüsündeki okuma/yazma kafası, her bir giriş/çıkış işleminden sonra, bir sonraki satırın üzerine gelecek şekilde hareket eder. Dosya açık olduğu sürece, daha önce okutulan veya yazılan bir kayıt tekrar okutulamaz veya yazılamaz. Diğer bir deyişle, sırasal dosyalar için okuyucu ve yazıcı kafaların geriye hareket ettirilmesi mümkün değildir. Sırasal dosyalar üzerinde kullanılan üç ayrı açılış komutu iki ayrı açılış moduna karşılık gelir. Bunlar yazma ve okuma modlarıdır. Bir dosya yazma modunda açılmışsa, bu dosya üzerine sadece kayıt yapılabilir. Okuma modunda açılan dosyalarda ise, sadece okuma işlemlerinin yapılmasına izin verilir. Sırasal erişimli dosyanın her bir kaydı, ASCII karakterlerinden oluşur. Disk veya diskete ise bu karakterlerin ASCII kodları, byte'lar halinde yazılır. Byte'ları içermesi nedeniyle sırasal erişimli dosyalar, içerik bakımından byte tipi dosyalardan farksızdır. Dosyanın her bir kaydı, bir satır sonu işareti içerir. Bu işaret CR/LF ikili karakterlerinden meydana gelir ve her kayıtın sonunda yer alır. Bu işaret kayıtların birbirinden ayrı tutulmasını sağlar. Sırasal dosyalarda kayıt uzunlukları sabit değildir. Diğer bir deyişle, her bir satırın içerdiği karakter sayısı bir diğerinden farklı olabilir. Son kayıtın sonunda, yani dosyanın sonunda dosya sonu işareti bulunur. Bu işaret Ctrl + Z karakterine karşılık gelir. Dosya sonu işareti, yazma modunda açılan bir dosyanın kapatılması esnasında dosya sonuna yerleştirilmektedir. Sırasal dosyanın her bir kaydı birden fazla bilgiyi içerebilir. Bu bilgiler, aralarında bir ayraç karakteri olmadan dosyaya yazdırılır. Aynı kayıt veya aynı satır üzerinde yer alan bilgilerin, birbirine karıştırılmaması programcının sorumluluğu altındadır. Text dosyalar için kullanılan deyim, prosedur, fonksiyon ve bildiriler aşağıda listelenmiştir: Text : Bildiri deyimi Assign : Aktarma deyimi Reset : Dosyanın açılması Rewrite : Dosyanın açılması Append : Dosyanın açılması Write, WriteLn : Kayıt yapma Read, ReadLn : Kayıt okuma Eoln : Satır sonu kontrolü SeekEoln : Satır sonu kontrolü Eof : Dosya sonu kontrolü SeekEof : Dosya sonu kontrolü Truncate : Dosyanın kesilmesi Close : Dosyanın kapatılması Dosya Kullanma Aşamaları Sırasal bir dosyanın programcı tarafından kullanıma hazır hale getirilmesi, kullanılması ve kullanım sonrasındaki işlemleri inceleyelim : Dosya Değişkeninin Tanımlanması : Disket veya diskte açılacak sırasal bir dosya, program içersinde sabit isimlerle değil, bir değişken ile temsil edilir. Dosyaları temsil eden değişkenlere dosya değişkeni adı verilir. Sırasal dosyaların bellekteki temsilcisi olan dosya değişkenleri TEXT bildiri deyimi, veri tipi ile tanımlanır. Tanımlama VAR bölümünde gerçekleştirilir. Tanımlamanın genel formu aşağıda verilmiştir.
DosyaDeğişkeni : TEXT ; veya DosyaDeğişkeni : TEXT [XX] ;
Text bildirisi ile tanımlanan her dosya değişkeni için, bellekte bir alan ayrılır. Bu alan buffer olarak isimlendirilir ve tanımlanan dosya değişkeni ile temsil edilir. Bu alanın uzunluğu 128 byte'tır. Ancak bu default uzunluk, yukarıdaki ikinci tanım cümlesi kullanılarak değiştirilebilir. İkinci tanım cümlesinde köşeli parantezler içersinde yazılan XX sayısı, bir tamsayı değer olup, dosya değişkeni için ayrılacak alanın uzunluğunu gösterir.
Dosya Buffer'ları : Text dosyaları temsil eden her bir dosya değişkeni için, compiler tarafından bir bellek bölgesi ayrılır. Dosyaya yazdırılacak veya dosyadan okutulacak bilgilerin, disk ile bellek arasındaki transferleri bu bellek bölgesi üzerinden yapılır. Bu bellek bölgesine söz konusu dosyanın buffer'ı denilir. Text dosyalar için, Turbo Pascal tarafından ayrılan buffer'ın uzunluğu 128 byte'tır. Ancak bu default uzunluk programcı tarafından değiştirilebilir. Buffer uzunluklarının küçük ya da büyük olması, disk veya disketlerle olan okuma veya yazma işlemlerinin yoğunluğunu etkiler. Dosyaya üst üste kayıt yapılması sırasında, dosyaya yazılacak bilgiler önce buffer'a aktarılırlar, bu bilgiler buffer dolduğunda toplu halde dosyaya yazılırlar. Dosya değişkeni için ayrılan buffer ne kadar küçükse , bu yazma işlemi de o kadar sık tekrarlanır ve her yazma işlemi programın icrasını belli bir süre durdurur. Buffer uzunluğu yeteri kadar büyükse yazma işlemi bu denli sık tekrarlanmayacak ve programın icrası daha çok hızlanacaktır. Çünkü dosyaların açıldığı disk/disket sürücüleri elektronik özellikleri olmakla birlikte daha çok mekanik kısımlardan meydana gelmektedir. Bilgisayar sisteminin mekanik kısımları elektronik kısımlarına oranla çok daha yavaş çalışırlar. O halde mekanik kısımlarının birkaç kez yerine sadece bir kez kullanılması hızı artıracaktır. Bu nedenle, dosya buffer'larının büyük olması tercih edilir. Ancak buffer'ların büyük olmasının dezavantajı da vardır. Bu dezavantaj, kullanılan belleğin önemli bir kısmının dosya için harcanmasıdır. Programda kullanılacak herhangi bir text dosyasının buffer uzunluğunu değiştirmek için; TEXT bildiri deyimini takiben köşeli parantez içersinde istenilen buffer uzunluğu verilir. Örneğin aşağıdaki tanım cümlesi, Dos isimli dosya değişkeni tarafından temsil edilecek sırasal dosya bufer'ının 2 K olmasını sağlar;
Dos : Text [ 2048 ] ;
Not : Text dosyaya ait herhangi bir kaydın maksimum uzunluğu ile, buffer uzunluğunun aynı olması şeklinde bir kural yoktur.
Text Dosyalarda Kullanılan Komutlar 1- Dosya Değişkenlerine Değer Aktarılması : Dosya değişkenleri üzerinde yapılacak işlemler diğer değişkenlere göre oldukça farklıdır. Her şeyden önce bir dosya değişkenine değer aktarımı için bilinen yöntemler kullanılamaz. Tanımlanan bir dosya değişkeninin temsil edeceği değerler gelişigüzel veriler değil, aygıt isimleri veya disketler üzerindeki dosya isimleridir. Böyle bir ismin, dosya değişkenine aktarılması için ASSIGN deyimi kullanılır.
ASSIGN (DosD, St - Procedure) Dosya değişkenine dosya ismini atamak için kullanılır. Formda yer alan DosD bir dosya değişkeni, St ise bir string sabit veya string değişkendir. Assign prosedürü, dosya isimlendirme kurallarına uygun olarak verilen ve St ile temsil edilen dosya ismini DosD isimli dosya değişkenine aktarır. Kısaca assign prosedürünün işlevi; dosya oluşturmak, bilgi girişi yapmak, girilen bilgileri okutmak amacı ile dosyanın açılmasını sağlar. Yazılımı : ASSIGN (Dosya Tanımı , '[Bulunduğu çalışma alanı] Dosyanın Manyetik ortamdaki Adı . Uzantısı') ;
"Dosya tanımı" dosyanın program içinde kullanılacak ismidir. Tek tırnak içinde; dosya manyetik ortamda hangi çalışma alanında, hangi isim ve uzantı ile bulunduğu belirtilmelidir. DOS'ta dosya ismi en fazla 8 karakter, uzantısı ise en fazla 3 karakter olabilir. İsmi ve uzantısı arasına nokta işareti konulur. Örnek : ASSIGN (dosya,'MUSTERI.DAT'); ASSIGN (dosya,'C:\YAZI\MUSTERI.DAT'); ASSIGN (dosya,'A:\HESAP\MUS\MUSTERI.DAT'); Sürücü ve director adı verilmediğinde dosya default sürücü ve directorde bulunduğu kabul edilir. Dosya adının değişken olması durumunda aşağıdaki gibi işlem yapılabilir. Örnek : Var Dos : TEXT ; Begin ASSIGN (Dos,'Ornek.Dat') ; ... Örnek : Var Dosyaadi : String [67] ; Dosya : Text ; Begin Write ('Dosya Adı :') ; Readln (Dosyaadi) ; Assign (Dosya, dosyaadi ) ; ... End.
2-Dosyaların Açılması : Sırasal bir dosya üzerinde giriş/çıkış işlemlerini yapabilmek için, bu dosyanın açılması gerekir. Dosyanın açılması file pointer denilen, disket sürücüsündeki okuyucu veya yazıcı kafanın dosya üzerine konumlandırılmasıdır. Bu konumlanma gerçekleştikten sonra, dosyaya bilgi yazılması veya dosyadan bilgi okunması işlemlerine geçilebilir. Sırasal dosyalar birkaç farklı şekilde açılır. Reset, ReWrite ve Append komutlarının icrası, sırasal dosyayı yazma modunda açar. Reset komutu ise söz konusu dosyayı okuma modunda açacaktır. Dosyanın açılma modu, dosya üzerinde yapılacak işlemin amacına bağlıdır. Dosyadan kayıt okunacaksa reset, dosyaya kayıt yapılacaksa ReWrite veya Append komutları kullanılır.
REWRITE DosD - Procedure Dosyaya bilgi yazılması için dosyanın açılmasını sağlar. Bu prosedür, DosD ile temsil edilen dosyayı disk/diskette ilk defa oluşturmak için kullanılır. Eğer bu dosya belirtilen manyetik ortamda mevcutsa bu dosya yeniden oluşturulacak ve içindeki bilgiler silinecektir. ReWrite ile açılmış sırasal dosyalar yazma modunda açılacağına göre, bu dosya üzerinde sadece Write ve WriteLn deyimleri çalıştırılabilir. Yazılımı : REWRITE (dosya değişkeni) Dosya açılmadan önce dosya değişkenine Assign komutu tarafından dosya isminin atanması gerekir. {$I-} ve IOResult fonksiyon değerinin sıfır olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılmadığını gösterir.
APPEND DosD - Procedure Dosyaya bilgi eklemek için dosyanın açılmasını sağlar. Bu prosedür, DosD ile temsil edilen ve disk/diskette mevcut olan dosyayı yazma modunda açar ve yazıcı kafayı dosyanın sonuna konumlandırır. Böylece dosyanın sonundan itibaren, dosyaya kayıt ilavesi gerçekleştirilebilir. Belirtilen manyetik ortamda eğer dosya mevcut değilse, bir run-time hatası meydana gelir ve programın çalışması kırılır. Append ile açılmış sırasal dosyalar üzerinde sadece write ve writeln deyimleri çalıştırılabilir. Yazılımı : APPEND (Dosya Değişkeni) {$I-} ve IOResult fonksiyon değerinin sıfır olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılmadığını gösterir.
RESET DosD - Procedure Mevcut dosyadan bilgilerin okunması için dosyayı açar. Bu prosedür, DosD ile temsil edilen ve disk/diskette mevcut olan dosyayı okuma modunda açar. Diğer bir deyişle, Disk/disket sürücüsünde bulunan okuyucu kafa dosyanın ilk kaydı üzerine konumlandırılır. Belirtilen manyetik ortamda eğer dosya mevcut değilse, bir run-time hatası meydana gelir ve programın çalışması kırılır. Reset ile açılmış sırasal dosyalar üzerinde sadece read ve readln deyimleri çalıştırılabilir. Yazılımı : RESET (Dosya değişkeni) Dosyada kayıt okuma işlemi dosya sonu (EOF=End Of File) işaretine kadar yapılabilir. {$I-} ve IOResult fonksiyon değerinin sıfır olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılmadığını gösterir.
Sonuç olarak; dosya okunacaksa reset, dosya ilk defa oluşturularak yeni kayıt yapılacaksa ReWrite, mevcut bir dosyaya kayıt ilavesi yapılacaksa Append komutlarının kullanılacağını söyleyebiliriz. Ayrıca disk/diskette mevcut olmayan bir dosyanın Reset veya Append ile açılmasının hataya sebep olacağı açıktır.
3- Giriş / Çıkış İşlemleri : Dosyaya kayıt yapılması veya dosyanın mevcut kayıtlarının okunması şeklindeki giriş/çıkış işlemleri dosya açık olduğu sürece gerçekleştirilebilir. Giriş/çıkış amacıyla kullanılan Write/WriteLn deyimleri yazma modu altında, Read/ReadLn deyimleri ise okuma modu altında çalıştırılabilir. Ayrıca okuma modu altında açılan dosyalar üzerinde, kontrol amacıyla kullanılan fonksiyonlar vardır. Reset ile açılmış bir dosya üzerinden kayıt okunurken, her okuma işleminin öncesinde, okunabilecek bir bilgi ya da kayıdın bulunup bulunmadığının kontrol edilmesi gerekir. Çünkü, olmayan bir kayıdın okunmak istenmesi hatalara yol açabilir. Bu tür kontroller için Eoln, Eof, SeekEoln ve SeekEof fonksiyonları kullanılır.
WRITE DosD,D1,D2,..Dn - Procedure Formda yer alan, D1, D2, .. Dn değerleri, DosD ile temsil edilen dosyaya yazılacak olan değişken, sabit veya ifadelerdir. Write deyiminin bir dosya üzerindeki etkisi, ekran üzerindeki etkisinden farksızdır. Farklı olan tek şey, değer çıktısı yapılacak alanın imleç ile değil, disk/disketteki yazıcı kafa ile gösterilmesidir. Write deyiminin icrası ile, verilen değerler söz konusu dosyaya, o anki pozisyondan itibaren yazılırlar ve yazıcı kafa son yazılan değerin yanında kalır. Yazılımı : Write (dosya değişkeni, Bilgi veya değişken listesi) Giriş yapılan bilgiler, birden fazla satırdan oluşuyor ve her satır girişinden sonra, enter tuşuna basılmışsa bile bilgilerin tamamını tek bir satır gibi yazdırır.
Örnek: Var x2 : text ; Cins : String [20] ; Mik : integer ; Begin assign (x2,'C:\lesson\pascal\x2.dat') ; rewrite (x2) ; Write ('Cinsi = ') ; readln (cins) ; Write ('Miktarı = ') ; readln (mik) ; Write (x2 , cins) ; Write (x2 , mik) ; close (x2) ; Assign (x2 , 'C:\lesson\pascal\x2.dat') ; reset (x2) ; ReadLn (x2 , cins , mik) ; WriteLn ('Cinsi = ' , cins , 'miktarı = ' , mik ) ; ReadLn ; close (x2) ; End . Program çalıştırıldığında; Cinsi = XYZ Miktarı = 789 Cinsi = XYZ789 miktarı = 0
Komut ; write (x2,cins,mik); şeklinde verilirse de sonuç aynı olur.
WRITELN DosD,D1,D2,..Dn - Procedure WriteLn deyimi tamamen Write deyimi gibi çalışır. Write deyiminden farklı olarak, yazım işleminin sonrasında son yazılan değerin sonuna satır sonu işareti yazdırılır. Bu işaret satırın sonunu gösterdiğine göre, yazıcı kafanın bulunduğu yeni pozisyon bir sonraki satırın ilk byte 'ı olacaktır. Böylece satır sonu işaretleri, dosyanın kayıtları arasında, ayraç karakteri olarak kullanılmış olur. Bu nedenle Write yerine WriteLn deyimlerinin kullanılması tercih edilir. Yazılımı : WriteLn (dosya değişkeni, Bilgi veya değişken listesi) Bu komutun kullanılabilmesi için dosyanın ReWrite veya Append komutları ile açılmış olması gerekir. Dosya değişkeni, text dosyalar için TEXT veri tipi ile tanımlanmış olmalıdır.
WriteLn deyimi kullanılarak klavyeden girilen her satır bilgisi enter yapıldığında satır sonuna <CR> ve <LF> satır sonu işaretlerini vererek manyetik ortama yazdırır. Komut girilen bilgileri manyetik ortama yazdırırken 0D ve 0A satır sonu işaretlerini her satırın sonuna ekler.
<CR> Carriage Return : Decimal 13, hexadecimal 0D olan belirleyicidir. <LF> Line Feed : Decimal 10, hexadecimal 0A olan belirleyicidir.
Örnek : Write (dd, maas) ; Writeln (dd, saat:3 , maas:4:2) ; Değişken listesi içerisindeki veriler, istenilen formata göre "dd" ile temsil edilen dosya içersinde yazılırlar. Değişken listesi içerisindeki değişkenlerin tipi standart (Boolean, Char, integer, real) tip olduğu gibi string tip de olabilir. Değişken char tipinde ise, dosyaya sadece bir tek karakter yazılır. Diğer tiplerde ise bir dizi karakter yazdırılabilir.
Örnek: Her satır için, yazdırma komutu ayrı ayrı verilirse istenilen normal çıktı alınır. Var x1 : text ; Cins : String [20] ; Mik : integer ; Begin assign (x1,'C:\lesson\pascal\x1.dat') ; rewrite (x1) ; Write ('Cinsi = ') ; readln (cins) ; Write ('Miktarı = ') ; readln (mik) ; WriteLn (x1 , cins) ; WriteLn (x1 , mik) ; close (x1) ; Assign (x1 , 'C:\lesson\pascal\x1.dat') ; reset (x1) ; ReadLn (x1 , cins , mik) ; WriteLn ('Cinsi = ' , cins , 'miktarı = ' , mik ) ; ReadLn ; close (x1) ; End . Program çalıştırıldığında; Cinsi = ABC {manyetik ortama ABC0D0A şeklinde verilir.} Miktarı = 123 {manyetik ortama 1230D0A şeklinde verilir.} Cinsi = ABC Miktarı = 123 Ancak komut; writeln (x1,cins,mik) ; şeklinde verilirse, cins ve miktar bilgilerinden sonra satır sonu işareti verilir (ABC0D0A) ve write komutu gibi sonuç alınır.
READ DosD,D1,D2,..Dn - Procedure Genel formda yer alan D1, D2, ...Dn lerin her biri, değerleri dosyadan okunacak olan değişkenlerdir. Reset deyimi ile açılan bir dosyadan ilk okunacak olan kayıt dosyanın ilk kaydıdır. Read deyiminin her icrasından sonra, okuyucu kafa ile okutulan karakter sayısı kadar ilerler. Eof fonksiyonu true değerini veriyorsa, okuyucu kafa daima aynı yerde, yani dosya sonu işaretinin üstünde kalır. Yazılımı : Read (Dosya değişkeni , değişken listesi) Text dosyasındaki kaydın satır sonu kontrol karakteri de dahil bilginin tamamını tanımlanan değişkenlere okur. Satır sonu belirleyicisi olan <CR> veya <LF> işaretleri dahil tüm bilgilerin okunmasını sağlar. Örnek : Read (dd, x, y, z) ; Read deyimi her işleyişinde dosyanın ilk kaydının ilk karakterinden itibaren okuyucu kafayı okutulan karakter kadar ilerletir. Okuyucu kafa her ilerleyişinde dosya içersindeki veriler değişken listesindeki değişkenlere atanır. Değişken listesindeki her bir değişkenin tipi char, integer veya real olabilir. Eğer değişkenin tipi char ise değişken içersine sadece bir karakter okunur. Şayet değişken tipi integer veya real ise bir dizi sayı okunur ve okuyucu kafa boşluk karakterinden sonraki sayıya ilerler.
READLN DosD,D1,D2,..Dn - Procedure ReadLn deyimi, Read deyimi gibi çalışır, read deyiminden farklı olarak her icradan sonra okuyucu kafa bir sonraki kayıdın ilk karakteri üzerine konumlanır. Diğer bir deyişle okuyucu kafa okutulan karakter sayısı kadar ilerledikten sonra, kayıdın sonunda yer alan satır sonu işaretini arar ve bu işareti takip eden ilk karakterin üstüne konumlanır. Yazılımı : ReadLn (Dosya değişkeni , değişken listesi) Reset komutu ile açılmış dosyadan kayıt okumak için kullanılır. Text dosyasındaki kaydın satır sonu kontrol karakteri hariç tamamını tanımlanan bellek değişkenlerine okur. Diğer bir deyişle, satır sonu belirleyicisi olan <CR> veya <LF> işaretlerine kadar bilgilerin okunmasını sağlar. Dosyanın mevcut ve EOF (dosya sonu) fonksiyonunun sonucunun False olması gerekir. Bilgi okuma işleminin EOF işaretinden sonra yapılması hata oluşmasına sebep olur. Örnek : ReadLn (dd, ch1, ch2) ; Aşağıdaki tabloda read ve readln prosedürleri için çeşitli örnekler verilmiştir. Bu örnekte, "R" real, "I" integer, "C" char tipi değişkenlerdir. Veriler arasındaki boşluklar "_" alt çizgi ile gösterilmiştir. Buna göre Prosedürün icrasından sonra aldığı değerler yine bu tabloda görülmektedir. Read veya ReadLn ifadesi ve icrasından sonra aldığı değerler Veriler Read (dd , R , I , C ) ; R = 1234.56 , I = 789, C = ' ' 1234.56_789_A345.67 <eoln> W<eoln><eof> ReadLn (dd , R , I , C ) ; R = 1234.56 , I = 789, C = ' ' 1234.56_789_A345.67<eoln> W<eoln><eof> Read (dd , R , C , I ) ; R = 1234.56, C = ' ' , I = 789 1234.56_789_A345.67<eoln> W<eoln><eof> ReadLn (dd , R , C , I ) ; R = 1234.56 , C = ' ', I = 789 1234.56_789_A345.67<eoln> W<eoln><eof> Read (dd , C , R , I ) ; C = 1 , R = 234.56 , 1234.56_789_A345.67<eoln> W<eoln><eof> ReadLn (dd , C , R , I ) ; C = 1 , R = 234.56 , C = 789 1234.56_789_A345.67<eoln> W<eoln><eof> Readln (dd , R , I ) ; Read (dd , C) ; R = 1234.56 , I = 789 , C = 'W' 1234.56_789_A345.67<eoln> W<eoln><eof> Readln (dd , R ) ; Readln (dd , C ) ; R = 1234.56 , C= 'W' 1234.56_789_A345.67<eoln> W<eoln><eof>
Örnek : ... assign (xdosya,'C:\LESSON\PASCAL\xdosya.dat') ; reset (xdosya) ; ReadLn (xdosya, kayit) ; ...
Örnek : Sayısal verilerden oluşan bir text dosyası oluşturalım. Aşağıdaki sayıları yazalım. Sayılar arasında en az bir karakter boşluk bırakılacak. 1234 567 <enter> 999 -17 23 <enter> Program ekrayaz2 ; Var i : integer ; dd : text ; {1} Begin Assign (dd, 'text2.dat') ; {2} Reset (dd) ; {3} While not eof (dd) do {4} Begin Read (dd, i ) ; {5} Write (i : 5) ; {6} end ; close (dd) ; {7} End . Program çıktısı : 1234 567 999 -17 9 Açıklama : {1} "dd" değişkeni, program içersinde kullanılacak olan text tipi dosyayı temsil edeceğinden, "dd" değişkeni var bloğunda text tipi olarak tanımlandı. {2} Data dosyasının ismi, dosya değişkeni içersine atandı. {3} Reset prosedürü disk/disket sürücünün okuyucu kafasını "dd" ile temsil edilen "text2.dat" dosyasının ilk kaydı üzerine konumlandırır. {4} While döngüsü, <eof> fonksiyonunun değeri döngü içersindeki read deyimi ile okunan veri "true" olmadığı sürece devam eder. Çünkü <eof> un değeri dosya sonuna ulaşılmadığı sürece "false" değerindedir. Buna göre "eof (dd)= false" ise, "not eof(dd) = true" dir. {5} "dd" ile temsil edilen "text2.dat" dosyasından her defasında yan yana yazılan bir dizi sayı okunur. Read deyiminin her icrasında ise okuyucu kafa aradaki boşluk ne kadar olursa olsun, bir sonraki sayı üzerine konuşlanır ve o sayıyı "i" değişkeni içersine atar. {6} "i" değişkeni içersine okunan her değer verilen formata göre ekrana yan yana yazılır. {7} Reset ile açılan dosya close prosedürü ile tekrar kapatılır.
EOLN DosD - Function (End of Line) Lojik bir fonksiyon olan eoln, okuyucu kafanın kayıt sonu işareti üzerinde bulunup bulunmadığını kontrol eder. Okuyucu kafa kayıt sonu işareti olan CR / LF ikilisinin ilk karakteri üzerinde ise true değerini aksi takdirde false değerini verir. Eoln fonksiyonunu kullanmaktaki amaç, üzerinde bulunulan kaydın, bulunulan pozisyondan itibaren okunabilecek karakteri olup, olmadığını öğrenmektir. Yazılımı: Eoln (Dosya değişkeni) ; While not Eoln (dosya değişkeni) ; WriteLn (Dosya,satır) komutuyla satır sonuna verilen, 0D ve 0A işaretlerini kontrol ederek, satır sonuna gelindiği için okuyucu kafasının bir alt satır başına yönelmesi sağlanır. Bir pascal programı, char tipi bir değişken içersine <eoln> karakterini read komutu ile okuduğunda, o değişkenin içersindeki değer Ctrl + M tuşlarının (enter) ürettiği karakterdir. Eğer değişkenin içersindeki değer ekrana yazdırılacak olursa bir şey görülmez. Örnek : Eoln (dosya) ; Eoln (d) ; Dosya değişkeni ile temsil edilen text dosyası içersinde, okunan karakter <eoln karakteri ise, fonksiyonun sonucu true dir. Aksi halde fonksiyon sonucu false dir. Buradan anlaşıldığı gibi fonksiyon sonucunun tipi boolean dir. Örnek : Var x1 : text ; satir : string [50] ; i : integer ; Begin Assign (x1,'c:\lesson\pascal\x1.dat') ; ReWrite (x1) ; For i : = 1 to 4 do Begin Write (i,' .satır = ' ) ; Readln (satir) ; WriteLn (x1, satir ) ; End ; Close (x1) ; Assign (x1,'c:\lesson\pascal\x1.dat') ; Reset (x1) ; If eoln (x1) then halt ; Readln (x1, satir) ; Writeln (satir) ; ReadLn ; close (x1) ; End . Açıklama : Program çalıştırıldığında art arda dört satır girildiği halde, okuma bölümünde satır sonu kontrolü yapıldığından, ilk satır bilgisinin görüntüsü alındıktan sonra program durdurulur. SEEKEOLN DosD - Function Tamamen eoln fonksiyonu gibi çalışır. Eoln 'dan farklı olarak okuyucu kafanın bulunduğu pozisyon ile kayıt sonu işareti arasında boşluk karakterleri varsa bu karakterleri atlar. Diğer bir deyişle bulunulan pozisyon ile kayıt sonu işareti arasında sadece boşluk karakteri varsa veya bulunulan pozisyon direkt olarak kayıt sonu işareti ise true değerini, aksi takdirde false değerini verir.
EOF DosD - Function End Of File. Okuma işlemi sırasında dosya sonuna gelinip gelinmediğini kontrol etmek amacıyla kullanılır. Sonucu boolean tipinde bir fonksiyondur. Okuyucu kafa, DosD ile temsil edilen dosyanın sonunda ise, yani dosya sonu işaretinin üzerinde bulunuyorsa true, aksi halde false değerini verir. Eof fonksiyonu doğru değerini verdikten sonra read veya readln deyimleri kullanılamaz. Eof fonksiyonunu kullanmaktaki amaç, bulunulan pozisyondan itibaren okunabilecek kayıt olup olmadığını öğrenmektir. Yazılımı : Eof (Dosya değişkeni ) ; Örnek : Eof (dosya) ; Eof (d) ; Eof karakteri sistem tarafından otomatik olarak konulur ve bu karakterin DOS'taki karşılığı Ctrl + Z dir. Text dosyası okutulmak amacıyla açıldığında close deyimiyle kapatılarak koruma işareti verilen konumuna kadar olan bilgilerin okunması sağlanır. Yapılan bu kontrol ile programın dosya sonu işaretine rastlandığında okuma işlemi durdurulur.
SEEKEOF DosD - Function Eof fonksiyonu gibi çalışır. Eof fonksiyonundan farklı olarak, bulunulan pozisyonda dosya sonu işareti varsa veya bulunulan pozisyon ile dosya sonu işareti arasında sadece boşluk karakteri varsa true, aksi takdirde false değerini verir.
4- Dosyaların Kapatılması : Reset, ReWrite veya Append ile açılmış bir dosya üzerinde istenilen giriş / çıkış işlemleri yapıldıktan sonra, bu dosyanın kapatılması gerekir. Dosyanın kapatılması için Close prosedürü kullanılır.
CLOSE DosD - Procedure Close deyimi DosD ile temsil edilen dosyayı kapatır. Dosya ilk defa açılmış ise veya dosyanın sonuna yeni kayıt ilaveleri yapılmış ise dosya sonu adresinin directory'e kayıt edilmesini sağlar. Kayıt işlemleri sonrasında close deyimi kullanılamazsa, dosyanın disk / disketteki yeni durumu directory'e kayıt edilmez, böyle bir durumda da dosya üzerinde yapılan son işlemler geçersiz sayılır. Yazılımı : CLOSE (dosya değişkeni) ;
TRUNCATE DosD - Procedure Okunmak üzere açılan dosyalarda kullanılır. Truncate prosedürünün icrası ile, okuyucu kafanın bulunduğu pozisyona dosya sonu işareti yerleştirilir, böylece bu pozisyondan sonraki kayıtlar silinmiş olur. Truncate prosedürünün bir başka etkisi close gibi çalışması yani dosyayı kapatmasıdır. Yazılımı : TRUNCATE (dosya değişkeni) ; Truncate prosedürü ile close prosedürü arasındaki fark, close prosedürü eof özel karakterini dosya sonuna (kayıtların bulunduğu en son karakterden sonra) koyar. Truncate ise, okuyucu kafanın bulunduğu pozisyona koyar. Böylece bu pozisyondan sonraki kayıtların tamamı silinmiş olur.
Dosya Oluşturmak Örnek : Turbo Pascal editöründe yeni bir dosya açıp aşağıdakileri aynen görüldüğü gibi yazınız. Satır sonlarında enter tuşuna basınız. Bu bir text dosyasıdır. <enter> İki satırı vardır. <enter> Bu dosyayı text1.dat adında kaydediniz. Yukarıda yazılan text dosyasını okuyup ekrana yazdıran program aşağıda görülmektedir. Program ekrana_yaz ; Var Ch : char ; Dosya : text ; Begin Assign (dosya,'text1.dat') ; Reset (dosya) ; While not eof (dosya) do Begin Read (dosya,ch) ; Write (ch) ; End ; Close (dosya) ; End . Açıklama : Program çıktısı : Bu bir text dosyasıdır. İki satırı vardır. Yukarıdaki programda while do döngüsünde kullanılan not eof ifadesi şunu belirtmektedir: Dosya sonu işareti true olmadıkça yani ch değişkeni ile okunan karakterler içersinde Ctrl + Z tuşlarının oluşturduğu karakter olmadığı sürece, read komutu ile text dosyasından bir karakter oku ve write komutu ile ekrana yaz. Program çıktısından görüldüğü gibi, text dosyasına daha önce yazdığınız tüm karakterler ekrana yazıldı. Şimdi de <eoln> fonksiyonunu kullanarak sadece bir satırı ekrana yazdıralım. Yukarıdaki programda eof yerine eoln yazıp programı tekrar çalıştırınız. Bu defa ekranda sadece ilk satır olan, "Bu bir text dosyasıdır" satırını ekranda göreceksiniz. Çünkü while döngüsü ile ch değişkeni içersindeki karakter Ctrl + M tuşunun (enter) oluşturduğu karakter okununcaya kadar devam edildi. Örnekteki text1.dat dosyasının yerine istenilen bir text dosyasının içeriği de görüntülenebilir. Örneğin autoexec.bat dosyasının içeriğini görüntüleyebiliriz.
Dosyaya Bilgi Yazmak Örnek : Klavyeden girilen öğrenci isimlerini ve bir dersten aldığı iki sı
Logged

OgrenciForum.Org
Sponsor Bağlantı

SON SAVAŞ (ONLİNE STRATEJİ OYUNU)
HEMEN ÜYE OL. ORDUNU KUR SAVAŞMAYA BAŞLA.
İYİ DERECELER ELDE EDENE BÜYÜK ÖDÜLLER VERİLECEK.

Logged
Mayıs 11, 2008, 13:03:47 ÖS
Abruzzi
Çalışkan öğrenci
****

Rep +6/-0
Mesaj Sayısı: 1031



Üyelik Bilgileri
« Yanıtla #1 : Mayıs 11, 2008, 13:03:47 ÖS »

PASCAL DERS NOTLARI
II: SABİTLER, DEĞİŞKENLER VE OPERATÖRLER A- Sabitler (Const) B- Değişkenler (Var) 1- Değişken isimleri (Identifier names) 2- Değişken tipleri a) Standart değişken tipleri 1) Tamsayı değişken tipleri aa) Byte ab) Short ac) Integer ad) Longint 2) Gerçek (Real) değişken tipi 3) Karakter (Character) değişken tipi 4) String değişken tipi 5) Mantık (Boolean) değişken tipi 6) Boolean değişken tipi
Pascalın tarihçesi PASCAL Programlama dili 1968 yılında Niklaus Wirth tarafından Zürih ETH'de (Eindgenossische Technische Hocshule) konuşma diline yakın, öğrenilmesi kolay bunun yanında etkin ve güvenilir bir programlama dili olarak geliştirildi. ALGOL 60 programlama dilinde bulunan yapısal programlama tekniğini de bünyesine katarak zamanının yaygın olarak kullanılan FORTRAN ve COBOL dilleri karşısında önemli bir üstünlük sağlama başarısını gösterdi. Basit ve anlaşılır bir kodlama ve kontrol yapısına sahip olan PASCAL aynı zamanda prosedür, fonksiyon tanımlama ve dinamik veri yönetimi gibi önemli özelliklere sahip. Pascalın uluslararası alanda kazandığı başarının artması ve değişik bilgisayar sistemleri için değişik türevlerinin yazılması zamanla bazı sıkıntılara yol açamaya başladı bunu üzerine 1980 yılında PASCAL Uluslararası Standartlar Enstitüsü (ISO) tarafından standartlaştırıldı. (Jensen ve Wirth'in raporu esas olarak hazırlanan Standart PASCAL'ın tanımı ISO'nun DP7185 nolu belgesinde bulunmaktadır). Amerikan Ulusal Standartlar Enstitüsü (ANSI)'de kısa bir süre sonra buna benzer bir standardı kabul etti.
o Pascal programlama dilini seçmeniz için bir çok neden var işte bazıları : 1. Komutlarındaki sadelik, 2. Hızlı bir derleyici, 3. Direk assembly kullanımı, 4. Turbo Vision arabirimi sayesinde, editor, file manager hazırlanabilmesi ve mouse desteği verilebilmesi, 5. Muhasebe programı hazırlayacaksanız mükemmel bir komut seti. Hesaplar ne kadar tutarsa tutsun PASCAL katrilyonlara kadar destek veriyor. 6. MSDOS altında oyun yazmak isteyenler için ideal bir programlama dili.
Pascalda Veri Tipleri Veri Tipleri: Sınırları Kapladığı alan Açıklama TAMSAYI DEĞİŞKEN TİPLER: Byte (0...255 ) 1 byte tamsayı ShortInt (-128 ... 127) 1 byte Word (0 ... 65535) 2 byte Integer (Tamsayı) (-32768 ... 32767) 2 byte LongInt (-21474836482147483647) 4 byte GERÇEK (REAL) SAYI TİPLER: Real (2.9*10-39...1.7*1038) 6 byte Single (1.5*10-45...3.4*1038) 4 byte Double (5.0*10-324...1.7*10308) 8 byte Extended (3.4*10-4932...1.1*104932) 10 byte Comp (-263+1...263-1) 8 byte STRING TİP: String 1...255 karakter 256 byte String[n] n?1...255 karakter n+1 KARAKTER (CHAR) TİP: Char 1 karakter 1 byte hesaplarda geçersiz BOOLEAN (MANTIK) TİP: Boolean 1 byte true-false değerini alır
Program Başlığı : Yazılımı : Program progismi ; Program progismi (Input, output) ; Örnek : Program merhaba ; Program merhaba (Input, output) ; Bir program başlığı, program deyimi ve bir program isminin aralarına bir karakter boşluk bırakılarak aynı satırda yazılmasıyla oluşur. İkinci yazılış formu ise sadece standart Pascalda geçerlidir. Input kelimesi keyboarddan data girileceğini, output ise program çıktısının ekrana yazılacağını belirtir. Turbo Pascal da program başlığı kullanmak isteğe bağlıdır. Kullanılmaması hataya sebep olmaz.
Uses Bloğu: Turbo Pascal standart ünitesi altında tanımlanmış olan prosedür ve fonksiyonları program içersinde kullanabilmek amacıyla yer alır.
Yazılımı : Uses ünite_listesi ; Örnek : Uses Crt , Dos, Printer, Verigir ; Turbo Pascalda bazı standart prosedürler (clrscr, gotoxy gibi...) Unit denilen bir dosya adı altında tanımlanmışlardır. Bu prosedürleri kullanabilmek için hangi unit altında bulunduğunu uses tanımlama bloğu içersinde yazmak gerekir. Yukarıdaki örneklerden ilk üçü (crt, dos, printer) Turbo Pascal standart ünitesidir. Dördüncü örnek "verigir" ise programcı tarafından hazırlanmış ünitedir ve bu ünite içersinde çeşitli prosedür ve fonksiyonlar tanımlanabilir. Crt, dos, printer gibi standart üniteler Turbo Pascal dosyaları arasında bulunan Turbo.tpl içerisindedirler. Programcı tarafından yapılan ünitelerin uzantısı ise *.tpu 'dur. Yukarıda programcının tanımladığı ünite örneği olarak verigir.tpu dosyası verilmiştir.
Const Bloğu: Pascalda sabit tanımları CONST bloğunda yapılır. Sabitlerin (constant) özelliği program içerisinde değerlerinin değiştirilememesidir. Bir sabitin tanımlanması için önce sabitin adı, sonra "=" ve sabit değeri yazılır.
Sabit tanımlamak için CONST Yazılımı : CONST Sabit adı [:tip] = değer; (Tip değeri belirtilmek zorunda değildir) Örnek: Const Pi = 3.14; Bu blokta yapılabilecek diğer bir tanım ise değişkenlere ilk değer verilmesidir. Bunun için önce değişkeninizin adını yazıyorsunuz sonra ":" koyup tipini belirliyorsunuz ve ilk değer vermek için "=" yazıp ilk değerini veriyorsunuz. Örnek: Const Sayac : byte = 0; Örnek :
Const Max : Integer = 999; Min : Integer = 0; Enter : Char = #13; Esc : Char = #27; Sifre : String[9] = `BURSA`; Mesaj :`iyi çalışmalar`;
Var Bloğu: Pascalda değişken tanımlamak için VAR bloğu kullanılır. Bu blokta bir değişken (variable) tanımlamak için önce değişkenin adı, sonra ":" (iki nokta üst üste) ve son olarak da değişkenin tipi belirtilir. Aynı tipte olan değişkenleri virgülle ayırarak bir defada da tanımlayabilirsiniz. Değişken tanımlamak için VAR komutları kullanılır.
Yazılımı : VAR Değişken1[,değişken2...] : tip; Matematik biliminde bir değişken, sabit olmayan bir nümerik değerin yerini tutan bir karakterdir (rakamsal değeri değişebilen bir harf). Turbo Pascalda da bu olay temelde aynidir.Bu işaret basit olarak 'iki nokta üst üstenin yanına gelmiş bir eşittir dir, yani ':='. Farz edelim ki sayi adını verdiğim bir değişkenim var (C.N. - değişken tanımlarken Türkçe karakterler kullanmıyorum. Çünkü hatalı sonuçlar doğurabilir.) ve ben bunun içine '2' değerini atadım. Demek ki artık sayi değişkenim 2 değerini belirtmeye başlamıştır. Örnek olarak aşağıdaki işaretler ve verdikleri sonuçları inceleyiniz. İfadeler: sayi := 2; writeln('SAYI: ',sayi); Ekran çıktısı: SAYI: 2 veya sayi := 2+1; writeln('SAYI: ',sayi); Ekran çıktısını bu sefer öncekinden farklı olarak: SAYI: 3 şeklinde gözükecektir. (Dikkat ettiyseniz bu ifadelerdeki writeln komutu hem yazı (text) ifadeleri hem de değişkenleri birlikte bulundurmaktadır ve virgülle de birbirlerinden ayrılmışlardır. Bu uygulama tamamıyla kurallara uygundur.) Bir değişkene başta bahsettiğimiz ayrılmış sözcüklerden biri olmamak kaydıyla istediğiniz ismi verebilirsiniz. Yani bir değişkene begin veya end gibi adları koyamazsınız. İsterseniz değişkeninizin içeriğini ekrana da bastırabilirsiniz. Ancak normal yazılarda yaptığınız gibi değişkenlerinizi de tek tırnak (') içinde yazmayın; yoksa ekrana değişkenin içeriği yerine adi basılır. Mesela aşağıdaki program parçacığı sayi := 3; writeln(sayi); writeln('sayi'); aşağıdaki çıktıyı verecektir. 3 sayi Değişken ve Sabit İsmi Seçilirken Dikkat Edilmesi Gereken Kurallar : 1. Daima bir harfle başlaması gerekir. Değişken isimleri rakamla başlayamaz. 2. Değişken ve sabit ismi olarak Pascal deyim ve komut adları kullanılamaz. 3. 63 Karakterden daha uzun olamaz. Eğer daha uzun isim verilirse ilk 63 karakter geçerli olur. 4. Aritmetik ve işlem operatörlerini içeremezler. 5. Değişken ve sabit isimleri arasında boşluk bırakılamaz. Ancak alt çizgi "_" karakteri birbirinden ayırmak için kullanılabilir. 6. İçersine atanacak değeri anımsatacak kısaltmalardan oluşmalıdır.
Örnek 2.1: Var Sayi : integer; İsim, Soyisim : string; Örnek 2.2: Var Maas : LongInt; Fatura_tut : Real; Not1,Not2,Not3 : Byte; Adres : String [50]; Telefon : String [12]; Ad_Soyad : String [30]; Tus : Char; I : Integer; J : Byte; Devammi : Boolean; Örnek 2.3: program degiskenleriOgreniyoruz; uses crt; var Numara1,Numara2,Numara3:Integer; Kelime:String; begin clrscr; Numara1 := 76; Numara2 := 53; Numara3 := Numara1 + Numara2; Kelime := 'Sum'; writeln(Kelime, ': ', Number3); readln; end. Var bloğu başka bir bloğun başlaması ile biter. Programınızın daha okunaklı olması için ":" leri alt alta getirmeye özen gösterebilirsiniz. Unutmayın ki iyi bir programcı kodunun okunurluğundan belli olur.
Karakter ve Alfanümerik Tipler Bu tip değişkenlerin içinde isim, adres gibi sayısal olmayan değerler tutulur. Tip Değer Açıklama Char 'a','z'... Tek karakterlik değişkenler (8 bit). String (0..254 karakter) Karakterlerden oluşan dizidir String değişken tipleri kelime değeri olan değişkenlerdir. Bu tipin değişkenleri, herhangi bir karakter dizisini ve sayıları da içeren herhangi bir değeri tutabilir. Fakat önemli olan nokta şu ki; bir string değişken herhangi bir sayı değerini tutuyor da olsa sadece bir grup karakter ifade eder ve kesinlikle real veya integer tipi değişkeni gibi değerlendirilmemelidir. Şunu da hatırdan çıkarmayalım: Herhangi bir string değişkenine değer ataması yapılırken atanan değer tek tırnak (') arasına konulur. Örnek: kelime := 'Merhaba'; Char değişken tipi bildiğimiz karakterleri (characters) tutar. Fakat Turbo Pascal bu kelimeyi char adıyla kısaltmıştır. Bu değişken tipleri tamamıyla string tipi gibi düşünülebilir. Fakat tek fark, char tipi tek karakter uzunluğunda bir karakter olabildiği gibi ASCII karakter tablosundaki herhangi bir karakter de olabilir. String'ler gibi sayı değerleri tutabilirler ama yine onlar gibi bu sayi değerleriyle işlem yapamazlar. Örnek: 'a' , 'A' , '3' , '!' , '&' , '{' , '+' , vb.
Tamsayı Tipleri Pascalda değişkenleriniz için tanımlayabileceğiniz veri tiplerini aşağıda bulabilirsiniz. İşaretli veya işaretsiz tamsayıları ifade etmek için kullanabileceğiniz çeşitli aralıkları kapsayan değişken tipleridir. Programlarınızda en çok kullanacak olduğunuz tipler de yine bu tiplerdir. Tip Değer Açıklama Byte 0..255 İşaretsiz tamsayılar (8 bit). Shortint -128..127 İşaretli tamsayılar (8bit). Integer -32768..32767 İşaretli tamsayılar (16 bit) Word 0..65535 İşaretsiz tamsayılar (16 bit). Longint -2147483648..2147483647 İşaretli tamsayılar(32 bit).
Tamsayı Tipleri Bu sayı tipleri sabit veya kayar noktalı gerçel sayıları ifade etmekte kullanılırlar. Özellikle büyük rakamlarla veya bilimsel araştırmalarla uğraşıyorsanız bu tip değişkenlere çok işiniz düşecek demektir. Tip Değer Basamak Açıklama Real 2.9e-39..1.7e38 11-12 6 byte lık yer tutar Single 1.5e-45..3.4e38 7-8 4 byte lık yer tutar Double 5.0e-324..1.7e308 15-16 8 byte lık yer tutar Extended 3.4e-4932..1.1e4932 19-20 10 byte lık yer tutar Comp -9.2e18..9.2e18 19-20 8 byte lık yer tutar
Aşağıdaki değerler bilimsel notasyonda yazılmıştır. Düzgün görüntüsü için şu örnekten yararlanabilirsiniz : 2.9e-39 = 2.9 * 10-39 Mantıksal Tip Sadece doğru veya yanlış değerini tutabilen değişkenlerdir. Karar vermenizde size yardımcı olacaklarına emin olabilirsiniz. Doğru için 1, yanlış için 0 olarak düşünebilirsiniz. Boolean değişkenleri sadece iki değer alabilir. TRUE (doğru) ve FALSE (yanlış). Bunlar kullanışlı birer işaretçidirler (flag) ve karsılaştırma amaçlı kullanılırlar. Tip Değer Boolean True,False (1,0)
Örnek 2.4 :Pascal da kullanılan değişkenlerin örneklenmesi. pascal değişkenler Program Degiskenler; Const i : integer = 567; b : boolean = True; c : char ='A'; s : String[10] = 'Pascal'; Begin WriteLn ('123456789'); WriteLn (i:9); WriteLn (b:9); WriteLn (c:Karizmatik; WriteLn (s:9); WriteLn (i:1); WriteLn (b:1); WriteLn (c:1); WriteLn (s:1); WriteLn (i,b,s); WriteLn (i,'..',b); WriteLn ('i = ',i); WriteLn (s:5); readln; End.
 
ANLATILACAK KONULAR: II: SABİTLER, DEĞİŞKENLER VE OPERATÖRLER B -Programcının tanımladığı değişken tipi 1) Küme veri tipi (set type) 2) Dizi veri tipi (Array Type) 3) (Type) Basit veri tipi 4) Record veri tipi (record type) B- Programcının Tanımladığı Değişken Tipleri : Pascal 'da tanımlı olmayan, programcı tarafından type tanımlama bloğunda oluşturulan ve özel amaçlar için kullanılan veri tipleridir. Pascal 'ın standart veri tipleri (real, integer, char, boolean, string), bir programda tanıma gerek duyulmaksızın kullanılabilir. Ancak bazı durumlarda verilerin işlenmesinde yetersiz kaldıkları görülür. Örneğin, haftanın günlerinin veri olarak kullanılacağı bir programda hiçbir standart tipi uygun değildir. 1-SET (Küme) Tip Aynı tipte ve birbirleriyle ilgili bilgilerin oluşturduğu bütündür. Kümedeki elemanların arasına virgül konulur. Eğer kümedeki elemanlar birbirini takip eden elemanlardan oluşuyorsa bu değerler arasına iki nokta ( .. ) konulur. Aynı tipte ve birbiriyle ilgili bilgilerden oluşan nesneler topluluğuna küme denilir. Bir küme birbirinden farklı bilgilerden meydana gelir. Kümeyi oluşturan bilgilerin her birine bu kümenin elemanı denilir. Elemanı olmayan kümeye boş küme denir. Pascal daki kümeler de matematikteki tanımı gibidir. Ancak şu iki özelliğe dikkat etmek gerekir. 1. Küme elemanlarının tipi aynı olmalıdır. 2. Küme elemanları real sayılardan oluşamaz. Kümeyi oluşturan elemanların arasına virgül konularak, köşeli parantez içinde yazılırlar. Kümeyi oluşturan elemanların sıralanışı önemli değildir. Örneğin [1,2,3] ve [2,3,1] kümeleri aynıdır. Pascal küme elemanı olarak değişkenler de kullanılabilir. Örneğin[I, J] kümelerinde I ve J birer değişkendir. Örnek : ['X'] ['A'..'Z'] [0..9] ['E','H',#27] [1,2,3,4] [1..4] Açıklama: Son iki örnekte verilen kümeler birbirine eşittir. Küme tipinde bir tip tanımlamak için Type deyiminden yararlanılır. Özel bir tip olan küme tipi verileri için Set Of ifadesi kullanılır.
IN Operatörü IN operatörü, bir elemanın, bir küme içerisinde bulunup bulunmadığını test eder. Yazılımı : eleman IN küme Örnek : sayı IN [1,2,5,6] Yukarıdaki örnekte verilen ifadenin sonucu, sayı değişkeninin içerisindeki değer küme içerisinde bulunuyorsa true, yoksa false 'dir. Küme Tipi Değişkenlerin Tanımlanması Yazılımı :VAR Değişken_Listesi : SET OF sıralı_tip_veri ; Örnek : Var Kume1, kume2 : set of 'A'..'Z' ; Kume3 : set of 1..12 ; Değişken listesinde birden fazla değişken yazıldığında, değişkenler arasına "," konulması gerekir. "set of" kelimesinden sonra yazılan veri_tipi sırasal tip, yani sınırları belirlenmiş tam sayılar veya harfler olmalıdır. Küme tipi değişkenler direkt olarak "var" bloğunda tanımlandığı gibi, "type" bloğunda özel bir tip_ismi oluşturularak da tanımlanabilirler. Örneğin : Type Aylar = (oc,sub,mart,nis,may,haz,tem agu,ey,ek,kar,ar) ; Renkler = (sari,mavi,yesil,kirmizi, turuncu, mor) ; Sayi = set of 1..9 ; Var Yaz, ilkbahar : aylar ; Anarenk : renkler ; Teksayi : sayi ; Var bloğunda tanımlanan "yaz" ve "ilkbahar" değişkenlerinin tipi, "aylar" tipidir. Yani bu değişkene atanabilecek değerler, "type" bloğunda parantez içerisinde yazılan aylardır. "anarenk" değişkeni ise "renkler" tipindedir. Atanabilecek değerler ise "type" bloğunda belirtilmiştir.
Örnek : TYPE Kodlar = Set of 0..255 ; Harf = Set of 'A'..'Z' ; Rakam = Set of 0..9 ; Açıklama: Bir kümede eleman sayısı maksimum 256 olabilir. Herhangi bir karşılaştırma sırasında kümelerdeki elemanların sıralanışları önemli değildir. Kümeler üzerinde aritmetik ve ilişkisel operatörler uygulanabilir.
Küme Tipi Değişkenlere Değer Atama Yazılımı : küme_değişkeni := küme_değerleri ; Örnek : kis := [ara, oc, sub] ; Teksayi := [1,3,5,7,9] ; Anarenk := [kırmızı..turuncu] ; Küme tipi değişkenlere aynen diğer değişkenlere atama yapılırken kullanılan ":=" atama sembolü kullanılır. Küme değeri olarak, o kümeye atanabilecek küme elemanları olabileceği gibi, sınırlandırılmış küme elemanları da olabilir. (kırmızı..turuncu veya 1800..1993 gibi.) Bir küme tipi değişken ifadelerde kullanılmadan önce bir başlangıç değeri almalıdır. Örneğin sayı:=[ ]. Bu değer genellikle boş küme "[ ]" olur.
2-ARRAY (Dizisel) Tip Aynı tipteki birden fazla bilginin tutulduğu değişken ve sabit isimlere dizi denir. Dizileri tanımlamak için array deyimi kullanılır. Program içersinde aynı tür bilginin aynı anda saklanması durumu söz konusu olunca, dizi tipi değişkenlerden yararlanılır. Örneğin 100 kişinin isimlerini bellekte değişkenler içerisinde tutmak istersek, birbirinden farklı 100 adet değişken ismini var bloğu içinde tanımlamamız gerekir. Halbuki "A" ismindeki bir değişkene A[1], A[2], A[3] ... gibi indisler vererek farklı isimde değişken oluşturmamız mümkündür. İndis sayısı en fazla 32767 olabilir. Yazılımı : TYPE Dizi_tip_ismi =ARRAY [minindis..maxindis] OF eleman_tipi ; Var Dizi_değişkeni : dizi_tip _ismi ; Veya Var Dizi_değişkeni : ARRAY [minindis..maxindis] OF eleman_tipi ; Örnek : Type İsim = ARRAY [1..10] of string [15] ; Var Ogrisim : isim ; Veya Var Ogrisim : ARRAY [1..10] of string [15] ; Dizi_tip_ismi, programcının oluşturduğu özel bir veri tipidir ve dizi tipi değişkenlerin tanımlanmasında kullanılır. Minindis değeri 0, maxindis değeri 32767 olabilir. Köşeli parantez içinde yazılan değerler boolean veya char tipi veri olabileceği gibi, sınırlı tip bir veri de olabilir. Eleman_tipi, dizi içersindeki her bir elemanın tipini belirlemek için kullanılır. Bir dizi içersindeki elemanların aynı tipte olduğu unutulmamalıdır. Eleman_tipi, standart bir tip (real, integer, char, boolean, string) olabildiği gibi programcının tanımladığı özel bir veri tipi de olabilir. Örnek : Array [1..100] of Real Array [1..10,1..5] of byte
3-TYPE (Basit) Tip Kullanıcının kendi isteğine göre özel veri tipleri tanımlaması için kullanılır. Yazılımı : TYPE Tip adı = Tip ;
Data tipleri programcının compilere datanın nasıl saklanacağını bildirmekte kullandıkları bir yoldur. Bir değişken tanımlandığı anda onun data tipini de mutlaka tanımlamak zorundasınızdır. Bazı data tipleri kullanılan dil tarafından standart olarak tanımlanmıştır zaten.Diğer tipleri ise kullanıcı kendisi tanımlayabilir.Pascal bu tip bir esnekliği ilk sağlayan dillerden birisidir. Kullanıcı tarafından tanımlanan tipler Pascalda TYPE bloğunda tanımlanır.
Type tip1 = tip_tanımı1; (* Her yeni tipe bir isim verilir ve önceden tanımlı tipler *) (* kullanılarak tanımlanır *) tip2 = tip_tanımı2; (* İstediğimiz kadar tip tanımı yapabiliriz *) tip3 = tip1; { Yeni tanımladığımız bir tipi başka bir tip tanımı için de kullanabiliriz. Tip tanımları bazen çok karmaşık olabilecekleri gibi bazen de çok basit olabilirler } int = integer; CharData = array['A'..'Z'] of Byte;
Var var1 : tip3 (* her yeni değişken için bir isim ve bir tip verilir. *) var2, var3 : tip2 (* aynı tipte olan değişkenler bir defada tanımlanabilir *) Sayı : int; Char_dizi : CharData;
Type bloğunun en önemli kullanım yerleri ise record (kayıt) ve set (küme) tipi tanımlardır.
Örnek 2.5 : Type St = String [20] ; Stg = String [10] ; Isim_t = Array [1..100] of st ; Soyad_t = Array [1..100] of st ; Tel_t = Array [1.100] of stg ; Var Isim : Isim_t ; Soyad : soyad_t ; Tel : Tel_t ;
Örnek 2.6 : Type Dizi = Array [0..4] of Byte ; Const Sayilar : Dizi = (1,2,3,4,5) ;
Açıklama : Bu tanımlama ile sayılar isimli indisli değişkenin değerleri aşağıdaki gibi olur. Sayilar
  • = 1 Sayilar [1] = 2 Sayilar [2] = 3 Sayilar [3] = 4 Sayilar [4] = 5
Örnek 2.7 : Const Sayilar : Array[0..1,0..2] of = ((1,2,3),(4,5,6)) ;
Açıklama : Bu tanımlama ile Sayilar [0,0] = 1 Sayilar [0,1] = 2 Sayilar [0,2] = 3 Sayilar [1,0] = 4 Sayilar [1,1] = 5 Sayilar [1,2] = 6 olur.
Örnek 2.8 : Type Dizi = Array [0..2] of String [10] ; Const Sehirler : Dizi = ('Bursa','Ankara','Ordu') ;
Açıklama : Bu tanımlama ile sehirler değişkenine; Sehirler
  • ='Bursa' Sehirler [1] ='Ankara' Sehirler [2] ='Ordu' bilgileri aktarılır.
Örnek 2.9 : Type Dizi = Array [0..100] of Integer; St20 = String [20]; Açıklama : Buradaki Dizi ve St20, birer tip isimleridir. (Integer gibi) Bu isimler birer değişken olarak kullanılamamakla birlikte tip adı olarak kullanılabilirler.
Örnek 2.10 : Var Isim = St20 ; Sayilar = Dizi ; Açıklama : Isim ve Sayilar isimli değişkenler kullanıcının tanımladığı tiplerdir.
Örnek 2.11 : Type Tamsayi = Integer ; Notlar = 0..100 ; Sayi = -99..99 ; Bilgitipi = Array [1..40] of String [30] ; Ekrantipi = Array [1..25,1..80,1..2] of Byte ; Ekran = Array [1..4000] of Char ;
4-RECORD (Kayıt) Tip Alt alan olarak adlandırılan birden fazla ifadenin oluşturduğu yapıdır. Record tipinde olan veriler Type bölümünde, record-end bloğu içinde tanımlanırlar. Record bloğu içersinde birden fazla alan tanımlanabilir. Her record tip tanımı end deyimi ile son bulur.
Yazılımı : KayıtTipAdı = RECORD AlanAdı1 : TipAdı ; AlanAdı2 : TipAdı ; END ;
Örnek 2.12 : DOGUM_TARİHİ = RECORD GUN : 1..31 ; AY : 1..12 ; YIL : INTEGER ; END;
Nüfus kaydını tümüyle kodlayalım: NUFUS_KAYDI = RECORD SOYADI : STRING [20] ; ADI : STRING [15] ; BABA_ADI : STRING [15] ; ANA_ADI : STRING [15] ; DOG_YERI : STRING [20] ; D_TARIHI : DOGUM_TARIHI ; MEDENI_HL : CHAR ; DINI : STRING [10] ; END; Örnek 2.13 : Musteri = Record Ad , Soyad : String [15] ; Adres : String [40] ; Telefon : String [12] ; Borc : LongInt ; End;
Verilen musteri tip ismi özel bir tip olarak kabul edilir. Değişkenleri tanımlamada kullanılır. Yukarıda tanımlanan musteri tipinde bir değişken tanımlamak için VAR değişken tanımlama bloğu kullanılır: Var Mus : Musteri ; Mus değişkenine bağlı olan alt alanları tanımlamak için, bu değişken ismi ile alt alan ismi arasına nokta konulur. Mesela ad ve soyad alanlarına bilgi atamak için : Mus.Ad : = 'ÖMER' ; Mus.Soyad : = 'GÖÇEBELER' ;
Record'u oluşturan alanlar herhangi bir tipte olabilir. Bir record tanımı içersinde daha önce tanımlanmış olan başka bir record ismi, alt alana ait bir tip ismi olabilir.
Örnek 2.14 :
TYPE ISIMKAY = RECORD Ad : String [15] ; Soyad : String [15] ; END; MUSTERIKAY = RECORD İsim : isimkay ; Adres : String [40] ; Sehir : String [15] ; Meslek : String [20] ; END; VAR Kayit : Musterikay ; Index : Isımkay ; ( : : : ) Begin Index . Ad : = 'Mehmet' ; Index . Soyad : = 'Göbek' ; Kayit . Isim : = Index ; Kayit . Meslek : = 'Mühendis' ; Kayit . Adres : = 'Göbekli Köyü' ; Kayit . Sehir : = 'ŞanlıUrfa' ; ( : : : ) End.
Record tipi dosyalama işlemlerinde kayıt desenini oluşturmakta kullanılır.Yani bir tek kayıt için, o kaydın hangi alanına hangi değişkenlerle erişilebileceğinin tanımlanmasında kullanılır.Örneğin öğrenci takibi programı yapılacaksa, bunun için aynı kayıtta hem adı, hem soyadı hem de öğrenci no'su tutulacak olsun.Bu kayıtları tek tek değişkenlere atayıp sonra dosyaya tek tek yazdırmak yerine, hepsini record yapısı içindeki değişkenlere atayıp bir defada dosyaya yazdırmak daha kolaydır.Buna benzer şekilde record yapısında tanımlı bir değişkenin içine dosyadan bir kayıt okuduğunuzda istediğiniz alanlara kolaylıkla erişirsiniz.
Örnek 2.15 : Type Ogr_Kayit = record No : integer; Ad : String[30]; Soyad : String[30]; end; var Ogrenci : Ogr_Kayit; { Ögrenci değişkeni içinde No, Ad ve Soyad alanları } ... { bulunur. Bu alanlarla ilgili işlemler sadece öğrenci } ... { değişkeni kullanılarak yapılabilir. } Record yapısında tanımlanmış bir değişkenin içindeki değişkenlere direkt olarak erişemezsiniz. Bu değişkenlere erişmek için Ogrenci.Ad, Ogrenci.No,... formatını kullanmalısınız. Var_bloğunda_tanımlanan_değişken.alanın_adı
Örnek 2.16 : Şimdi yukarıdaki örneğimizi geliştirerek gerçek bir örnek program yapalım. Bir sınıftaki öğrencilerin tamamının Ad,Soyad ve Nosunu tutabilen ve istendiğinde ekrana dökebilen bir program yapalım. Örneğin 10 öğrenci için yapalım. 10 rakamını değiştirerek daha az/fazla öğrenci kaydı yapabilirsiniz. Yada indeks değerini 100 yapıp sadece 10 tanesi için bilgi girişi yapabilirsiniz.
1. Type 2. Ogr_kaydi = record 3. No : integer; 4. Ad : String[30]; 5. Soyad : String[30]; 6. end; (* of record *) 7. int = integer; 8. Var 9. Ogrenci : array [1..10] of Ogr_Kaydi; 10. i,n : int; 11. Begin (* Program Body *) 12. write('Kaç ogrenci bilgisi girilecek (max 10) : '); 13. readln(n); 14. for i := 1 to n do 15. begin 16. write(I,'.Ogrenci Nosu : '); readln(Ogrenci.No); 17. write(I,'.Ogrenci Adı : '); readln(Ogrenci.Ad); 18. write(I,'.Ogrenci Soyadı : '); readln(Ogrenci.Soyad); 19. end; {of for} 20. writeln('Girilen kayıtlar :'); 21. for i := 1 to n do 22. begin 23. write(i,'-',Ogrenci.No); 24. write(' ',Ogrenci.Ad); 25. writeln(' ',Ogrenci.Soyad); 26. end; {of for} 27. End. (* of program *)
Açıklamalar : 1. Type bloğu tanımlamasına başladığımı bildiriyorum. 2. İsmi Ogr_Kaydı olan bir record tanımlamasına başlıyorum. Arada eşittir kullandığıma dikkat edin. 3. Artık record yapısının içindeki elemanlar tanımlanmaya başlandı. Bu kısımda sanki Var bloğunda imişiz 4. gibi değişkenin adı'ndan sonra iki nokta üst üste (Gülümseme ve değişken tipi verilir ve noktalı virgülle (Göz kırpan o tanım 5. sona erdirilip bir sonraki tanıma geçilir. Biz basit bir sınıf listesi hazırlayacağımıza göre No, Ad ve Soyad bizim için yeterli olacaktır. 6. record tanımlamamızın sona erdiğini belirten end; deyimi. Her record deyimi bir end ile bitmelidir. 7. integer tipinde int diye bir değişken tanımladım. Bu özellikle C kullanıcılarının yaptığı bir triktir. C de integer tanımlamaları int deyimi ile yapılır. Burada da bundan sonraki integer tanımlamalarımızı int ile yapabileceğiz. Eğer ilk olarak bu komutu kullanmış olsaydık record içinde bile kullanmamız mümkün olabilirdi. Bunu siz deneyebilirsiniz. 8. Artık Type bloğunda işimiz bitti. Var bloğuna geçiyoruz. 9. İlk iş olarak tanımladığımız record tipini hemen bir değişkende kullanıyoruz.Hem de dizi olarak tanımlıyoruz. Unutmayın ki Type bloğunda yaptığımız tip tanımlamasıydı. Şimdi bu tanımladığımız tipi değişken tanımlamada kullanıyoruz. Tip tanımlarınızı değişkenmiş gibi kullana