Bedava ödev indir
Ana Sayfa
Yardım
Giriş Yap
Kayıt
Merhaba,
Ziyaretçi
. Lütfen
giriş yapın
veya
üye olun
.
1 Saat
1 Gün
1 Hafta
1 Ay
Her zaman
Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz
Duyurular
:
2008 OKS Soruları ve Cevapları
Bedava ödev indir
>
Akademik-Üniversite Kaynaklar
>
Bilgisayar Kaynaklar
>
PASCAL DERS NOTLARI
Sayfa:
1
Yazdır
Gönderen
Konu: PASCAL DERS NOTLARI (Okunma Sayısı 222 defa)
Abruzzi
Çalışkan öğrenci
Rep +4/-0
Mesaj Sayısı: 1031
PASCAL DERS NOTLARI
«
:
Mayıs 11, 2008, 18: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 Baglanti
Logged
Abruzzi
Çalışkan öğrenci
Rep +4/-0
Mesaj Sayısı: 1031
Ynt: PASCAL DERS NOTLARI
«
Yanıtla #1 :
Mayıs 11, 2008, 19: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:
; 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 (
ve değişken tipi verilir ve noktalı virgülle (
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 kullanamazsınız.
10. i ve n adında ve int (!!) tipinde 2 değişken tanımladık. 11. Artık programımıza başlayabiliriz. (* *) açıklama parantezleri. İhtiyaç duydukça ama programın okunabilirliğini bozmadan bolca kullanabilirsiniz. 12. En fazla kaç kayıt yapılacağını kullanıcıya soruyoruz. En fazla 10 olabileceğini de belirtiyoruz ki kullanıcı uçup absürd değerler yazmasın. 13. readln deyimi ile kaç kayıt yapılacağını n değişkeninin içine okuttuk. Eğer aynı satırda bir şeyler yazdırıp sonunda soru soracaksanız. write - readln çiftini kullanın. Neden Acaba ?? 14. Bir döngü başlattık. 1'den başlayacak ve n içinde kaç varsa o kadar dönecek. 15. döngü içinde birden fazla işlem yapılacağından hepsini begin - end bloğu içine alıyoruz. 16. İşte az evvel bahsi geçen write - readln çiftleri... Write deyiminde i'yı ne güzel kullanmışım değil mi? Ama daha önemlisi readln deyimi içinde neler olduğu : readln( Ogrenci
.No ); 17. Ogrenci dizisinin i. elemanının No'sunu klavyeden oku . Tipi ne olursa olsun bizim dizimizin adı Ogrenci. Dolayısı ile indisi onun yanında belirtiyoruz. Sonra bir nokta (.) ve No yazıyoruz ki bu değişkenin alt seviyesinde bulunan No değişkenine ulaşabilelim. 18. aynı mantıkla i değişmediği için hala aynı değişkenin değişik alt değişkenlerine değerler okutuyoruz. 19. İşte for döngüsü bitti. Bir begin ile blok başladığı için de bir end; ile bloğu kapattık. 20. Şimdi de girdiğimiz kayıtları ekrana listeleyeceğiz. Bir başlıktan sonra işimize başlıyoruz. 21. Yine i değişkenini döngümüze indis olarak kullanabiliriz. Başka bir işe yaramıyor zaten. Yine dizinin n'e kadar olan bilgilerinin dökümünü yapacağız. 22. Blok gerekiyor. Begin ile bir blok başlangıcı yapalım. 23. yine i'yi çok akıllıca kullanmışım. Helal bana. Onun dışında değişkene erişmek için aynı yolu kullandığımızı söyleyebiliriz. Önce değişken ve indisi Nokta altdeğişken.write(i,'-', Ogrenci
.No ); 24. Bu seferki write'ın ilk elemanı 3 boşluk. Amaç ekran çıktısı okunabilir olsun. Onun yerine tab karakteri de kullanılabilirdi. Ama numarasını hatırlayamadım. Eğer ne olduğunu bulabilirseniz chr(#numarası) şeklinde kullanabilirsiniz. Mesela 9 ise write chr(#9) ),'Ogrenci
.Ad); 25. Son olarak ise writeln kullandım. Çünkü bundan sonraki değerin alt satırdan çıkmasının istiyorum. 26. For döngüsü bitti. End; ile kapattık. 27. Program da bitti. Onu da End. ile kapattık.
Record tanımı içinde yeni record tanımları yapılabilir. Mesela
Stk_har=record Stk_NO : integer; Har_tipi : char;
Har_tarihi=record Yil : byte; Ay : byte; Gün : byte; end;
Miktar : real; end;
WITH Record tipine sahip bir değişkenin program içersindeki kullanımında, değişken ismi ile alt alan ismi arasına nokta konuluyor. Her alt alan isminden önce değişken isminin yazılması hem programı uzatmakta, hem de yazılması zaman almaktadır. Bunu engellemek için WITH deyimi kullanılır.
Örnek 2.17 : Begin With Index Do Begin Ad : = 'Mehmet' ; Soyad : = 'Göbek' ; End ; With Kayit Do Begin Isim : = Index ; Meslek : = 'Mühendis' ; Adres : = 'Göbekli Köyü' ; Sehir : = 'ŞanlıUrfa' ; ( : : : ) End.
LABEL Etiket tanımlamak için kullanılır. Etiketler programlar içersinde GOTO komutu ile işlemin gideceği yeri belirler. Bir etiket adı tanımlanabileceği gibi aralarına virgül konulmak suretiyle birden fazla da etiket adı tanımlanabilir.
Yazılımı : LABEL Etiket adı1 [,Etiket adı2, ...] ;
Örnek 2.18 : LABEL Basla , Cikis , 20 , Proc5 , hesaplama ;
Pascal Programlarının Yazım Kuralları Noktalama İşaretleri ve Tanımlama Kuralları : 1. Programlar, program başlığı ile başlar. Ancak kullanımı zorunlu değildir. 2. Program içinde kullanılacak tüm isimler tanımlama bloğu içinde tanımlanmalıdır. 3. Bütün sabit tanımlamaları Const kelimesinden sonra gelir. 4. Bütün değişken tanımlamaları Var kelimesinden sonra gelir. 5. Begin kelimesi Ana Program bloğunun başladığını bildirir. 6. Ana program bloğu, makine diline çevrilip çalıştırılacak olan deyimlerden oluşmuştur. 7. Programın en son satırı "end ." kelimesidir. 8. Her program bloğu birden fazla end deyimi içerebilir, ancak bu end deyimleri program sonunu değil alt blokların sonunu gösterir ve sonlarında ";" işareti vardır. 9. Program bloğu içindeki deyimler ";" ile birbirinden ayrılmalıdır. 10. ";" işareti ilk deyimden önce ve son deyimden sonra konulması gerekmez. 11. Begin kelimesinden sonra ";" işareti konulmaz.
Büyük ve Küçük Harf Kullanımı : Turbo Pascal da, standart deyim veya kullanıcının belirlediği isimlerin büyük veya küçük harfle yazılması tamamen serbesttir. Çünkü Pascal derleyicisi büyük ve küçük harfler arasında ayırım yapmaz. Pascal deyimleri istenirse karışık olarak da yazılabilir.
Deyimler Arasındaki Boşluklar : Pascal programlarında satır numarası olmadığından, programın okunabilirliğini artırmak gerekir. Pascal da bu konuda büyük serbestlik vardır. Ancak bir Turbo Pascal satırı en fazla 127 karakter uzunluğunda olabilir.
Okunurluluğu Kolaylaştıran Bazı Kurallar : 1. Virgül ve aritmetik operatörlerden (*,-,/,+) önce ve sonra bir boşluk bırakınız. 2. Begin, end, var, const kelimeleri dışında kalan diğer program satırlarını içeriye girintili olarak yazınız. 3. Bir atama deyimi gibi iki karakter birlikte kullanılan sembolleri birbirinden ayırmayınız. ":=" 4. Tanımlama isimleri arasında boşluk bırakılmaz. Örneğin "net maas" bir değişken ismi olarak kullanılamaz. Ancak okunurluğu kolaylaştırmak için iki kelime arasına "_" konulabilir. "net_maas" gibi.
ANLATILACAK KONULAR: C - Operatör 1) Aritmetikal operator 2) İlişkisel operatör 3) Mantıksal operator Operatörler
Pascalda programlama esnasında en fazla ihtiyaç duyulan şeyler herhalde operatörlerdir. Değer atamalarından mantıksal karşılaştırmalara ve aritmetik işlemlere kadar onlar bizim en büyük yardımcılarımızdır. İşin aslı onlarsız herhangi bir dil de olamazdı. Şimdi kısaca bu operatörleri inceleyelim.
? Aritmetik Operatörler ? Mantıksal Operatörler ? İlişkisel (Karşılaştırma) Operatörleri
Aritmetik Operatörler : Aritmetik işlemlerin yapılmasında kullanılan operatörlerdir. Operator İşlemi İşlem Tipleri Sonuç tipi + Toplama integer,real integer,real - Çıkarma integer,real integer,real * Çarpma integer,real integer,real / Bölme integer,real real,real Div Tamsayı Bölme integer,real integer,real Mod Kalan integer integer
Matematik formüllerinin Pascal 'a aktarılmasında dikkat edilmesi gereken ilk nokta, aritmetik operatörlerin işlem önceliklerine göre doğru olarak kullanılmasıdır. İşlem öncelikleri : Parantez içi, üs alma, çarpma, bölme, toplama ve çıkarma şeklindedir.
Div operatörü tamsayılı bölme işlemi için kullanılır. Sonucu integer tipte bir bilgidir.
Örnek : 3 Div 15 = 0 3 Div -15 = 0 15 Div 3 = 5 15 Div -3 = -5 16 Div 3 = 5 16 Div -3 = -5 17 Div 3 = 5 -17 Div 3 = -5 18 Div 3 = 6 -18 Div -3 = 6 Mod operatörü, bölme işlemi sonucunda kalan değeri verir. Sonucu integer tipte bir bilgidir.
Örnek : 3 Mod 4 = 3 10 Mod 3 = 1 -10 Mod 3 = -2 4 Mod 4 = 0 10 Mod 4 = 2 -10 Mod 4 = -1 5 Mod 4 = 1 25 Mod 5 = 0 -25 Mod 5 = 0 6 Mod 4 = 2 25 Mod 6 = 1 -25 Mod 6 = -3 7 Mod 4 = 3 25 Mod 7 = 4 -25 Mod 7 = -1 8 Mod 4 = 0 25 Mod 8 = 1 25 Mod 0 = Tanımsız Şunu gözlemlemek mümkündür ki sayıları birbirine birçok kez bölüyorsak cevabı tamsayı olarak alamayız. Mesela '3/2 = 1.5'. Burada 3 ve 2 gibi tamsayıların birbirine bölünmesinde gerçel (real) sayı elde ediyoruz. Buradaki tamsayılar arası bölme işlemi gibi işlemlere özel olarak Turbo Pascalda iki ayrılmış sözcük kullanılır. 'div' sözcüğü bir sayının diğeri içinde kaç kere bulunduğunu bulmaya yarar. Yani writeln('Uc, onbir"in icinde ',11 div 3,'kere var.'); (Tek tırnak içindeki string ifadelerin arasında üçüncü bir tek tırnağın nasıl bir hataya yol açacağını inceleyin. Onun için mecburî hallerde çift tırnağa başvurmanız göz zevkini bozsa da hataya yol açmayacaktır.) program parçacığı, Üç, on bir"in içinde 3 kere var.Sonucunu üretir. 11, 3'e bölündüğünde tam olarak 3'e eşit olmaz; fakat 11 sayısını 3'e böldüğümüzde bolum hanesinde 3 sayısını görmekteyiz. Dolayısıyla '11 div 3 ifadesi 3 sonucunu verir.' diyebiliyoruz. 'mod' sözcüğü ise kalanı verir. Şöyle ki; writeln('Uc, onbir"e bölündüğünde bolum ',11 div 3,' kalan ise ',11 mod 3,' olur.'); şeklinde bir program parçacığı, Üç, on bir"e bölündüğünde bolum 3 kalan ise 2 olur. Çıktısını üretir. 3 sayısı 11'in içerisinden 3 defa (maksimum sayıda) çıkartıldığında (3*3 = 9) 11' e ulaşmak için geride hala sayılar kaldığını görüyoruz. Sonuçta o sayıya ulaşmak için kalan sayıyı 'mod' ile buluyoruz. İkinci bir örnek: writeln('25, 867"ye bölündüğünde ',867 div 25,' bölümünü ve , '867 mod 25' kalanını verir.'); aşağıdaki gibi bir ekran çıktısı verecektir. 25, 867"ye bölündüğünde 34 bölümünü ve 17 kalanını verir.
Pascal'da Operatörlerin Önceliği
Operatör Öncelik @, Not Yüksek *, /, div, mod, and, shl, shr İkinci derece +, -, or, xor Üçüncü derece =, <>, <, >, <=, >=, in Dördüncü derece
1- İki operand arasındaki farklı operatörlerde önceliği yüksek olan önce işleme girer. 2- Eğer aynı önceliğe sahip operatörler kullanılıyorsa öncelik soldakinindir. 3- Tüm bu operatörlerin önceliğini değiştirebilecek tek şey parantezlerdir. Parantezler daima ilk olarak işleme girer. Parantez içi işlemlerde de yukarıdaki öncelikler geçerlidir.
Mantıksal Operatörler : Logic işlemlerin yapılmasını sağlayan operatörlerdir.
Operatör Görevi Operand tipi Sonuç Not Değil Boolean Boolean And Ve Boolean Boolean Or Veya Boolean Boolean Xor Veya Değil Boolean Boolean
İlişkisel (Karşılaştırma) Operatörleri:Karşılaştırma işlemlerinin yapılmasında kullanılan operatörlerdir. Operatörleri Bu operatörlerin sonucu daima boolean döner. Operatör Açıklaması = Eşit olup olmadığını kontrol eder <> Farklı olup olmadığını kontrol eder < Küçük mü? > Büyük mü? <= Küçük veya eşit mi? >= Büyük veya eşit mi?
Boolean önermeleri : Bir Boolean önermesi basit şekilde TRUE (doğru) ya da FALSE (yanlış) değerlerinden birini alabilen bir karşılaştırmadır. Peki niye Boolean denmiş? E tabii her bilimsel terimde olduğu gibi bu terimler de bir bilim adamının ismini almıştır. Bütün Boolean önermeleri <,>,= gibi işaretleri içermek zorundadırlar. bir Boolean önerme örneği: 3 > 4 Bu bir Boolean önermedir ve aldığı değer FALSE'tur. (Önermenin yanlış olduğu açıkça görülüyor. Önermenin değerinin FALSE olması onun hatalı veya geçersiz bir önerme olmasını gerektirmez. Tamamen geçerli bir önermedir ve kullanılması halinde hata mesajı gibi bir sonuç çıkarmaz. Bu yolla ayni zamanda değişkenleri de karsılaştırabiliriz. Real, String, Integer ve Char tipi değişkenleri karşılaştırmada bu yöntem kullanılabilir. Char ve String tipleri alfabetik değer bazında karsılaştırılırlar. Diğerinden alfabetik olarak önce gelen bir stringin sayısal değeri, kendinden alfabetik olarak sonra gelen bir stringden küçüktür. kamil < kemal Yukarıdaki Boolean önerme TRUE' dur. Bu işlem karakter değişkenlerinde (char tipi) de aynidir. String tiplerle karakterleri karşılaştırırken (birbirleriyle değil; kendi aralarında) hatırda tutulması gereken önemli bir nokta vardır. Bir bilgisayar, harfleri karşılaştırırken onların ASCII değerlerini göz önüne alır ve birbirleriyle bu yolla karşılaştırır. Bu yöntem gerçekten ise yarar tâ ki kelimelerin içinde büyük ve küçük harflerin birlikte bulunduğu durumlara kadar. ASCII tablosunda bütün büyük harfler, küçük harflerden önce gelir. Eğer ASCII'nin ne olduğu bilemiyorsanız endişe etmenize gerek yok. Su an için o kadar da önemli değil. Sadece büyük harflerin küçüklerden önce geldiğini bilmemiz yeterli. Bu kuralı göz önüne alırsak aşağıdaki ifade: Z < a TRUE sonucunu verecektir. Bir küçük 'a' nın değeri, büyük harflerin 'A' dan 'Z' ye kadar olan tamamından büyüktür. Bütün bunların nerede kullanılacağını merak ediyor olmalısınız. Boolean önermelerle ilgili derinlemesine bilgi sahibi olmak çok önemlidir. and - or (ve - veya) Bir Boolean önermesi 'and' ve 'or' ayrılmış sözcüklerini de kullanarak birden çok karşılaştırma ifadesini bünyesinde bulundurabilir. Bu iki kelimeyi ileride bazı durumlarda çok faydalı bulacak ve sik sik kullanacaksınız. Çünkü bazen bir ifadenin çalıştırılmasından önce, birden çok şartın ayni anda sağlanması gerektiği durumlar söz konusu olabilmektedir. Veya bazen de iki durumdan herhangi biri ortaya çıktığında başka bir ifadenin isletilmesi gerekiyor olabilir. Su an için sadece aşağıdaki örneği inceleyelim: (not >= 80) and (not < 90) 'and' ve 'or' kullanırken iadeler etrafındaki paranteze dikkat ediniz. Bu önermeler ancak bu formda doğru kullanılabilir. 'and' kullandığımız durumlarda bu ifadenin TRUE değerini alabilmesi için 'and' in her iki tarafındaki karşılaştırmaların TRUE değerini almaları gerekmektedir. Yani yukarıdaki örnekte eğer not 80' den büyük ve 90' dan küçük bir integer değişkeniyse yukarıdaki ifadenin Boolean değeri TRUE dur. Fakat bu ifadenin herhangi bir parçası FALSE olursa ifadenin tümünün Boolean değeri FALSE olur. 'and' kullanarak yaptığımız kombinasyonlara aşağıdaki gibi örnek verebiliriz: TRUE and TRUE = TRUE TRUE and FALSE = FALSE FALSE and TRUE = FALSE FALSE and FALSE = FALSE 'or' un durumu ise biraz değişiktir: (not >= 80) or (not < 90) Burada iki karşılaştırmadan herhangi biri TRUE olduğunda bütün bir ifade TRUE değerini alır: TRUE or TRUE = TRUE TRUE or FALSE = TRUE FALSE or TRUE = TRUE FALSE or FALSE = FALSE
ANLATILACAK KONULAR: III: TEMEL GİRİŞ ÇIKIŞ KOMUTLARI A- Write B- Writeln C- Read D- Readln E- Formatlı çıkış F- Veri kontrolü (compiler bildirileri)
TURBO PASCAL TEMEL GİRİŞ - ÇIKIŞ KOMUTLARI Pascal Programının Genel Yapısı
Pascalın en önemli özelliklerinde birisi de yapısal bir programlama dili olmasıdır. Bu programınızı yazarken size maksimum esneklik sağlar. Aynı zamanda yazdığınız program parçalarını problemsiz bir şekilde birleştirmenizi de sağlar. Her pascal programının ana kodu mutlaka bir BEGIN deyimi ile başlar ve END. deyimi ile biter. (End den sonra nokta olduğuna dikkatinizi çekerim. Pascal derleyicisi için bu tüm programın bittiği yer anlamına gelir.) Eğer program içerisinde aynı blok içerisinde işlem görmesini istediğiniz kodlarınız varsa bunları bir BEGIN - END bloğu içerisine alırsınız. Fakat bu sefer END'den sonra noktalı virgül (
kullanmalısınız.
Pascal Program yapısında kullanılan terimler : Program : Bu komut ile program için herhangi bir isim yazılır. Kullanımı zorunlu değildir. Uses : Pascal 'ın kendi unit 'lerini (crt, dos, printer, overlay ...) ve/veya kullanıcının kendi hazırladığı unit'leri kullanmak için uses deyimi kullanılır. Type : Özel veri tipleri hazırlamak için kullanılır. Const : Sabit tanımlamak için kullanılır. Var : İstenen tipte değişken tanımlamak için kullanılır. Label : Goto komutu ile program akışının gideceği bölümleri tanımlamak için kullanılır. Procedure : Program parçalarının belli isimler altında yazılarak bir komut gibi kullanılması amacı ile hazırlanır. Function : Program parçalarının belli isimler altında yazılarak bir fonksiyon gibi kullanılmasını sağlamak amacı ile kullanılır. Pascal program yapısı içinde kullanılan bazı işaretler : { } veya * * ? Program içersinde programın istenen bölüm veya bölümlerine açıklama yazmak için kullanılır. : = ?Değişkenlere değer atamak için kullanılır. ' '? Dizgi türü ifadeler iki apostrof işareti arasına yazılır. ; ? Her komuttan sonra kullanılır. Ancak blok başlatan komutların sonunda bulunmaz. # ? Kod numaraları ile karakter veya tuşu belirtmek için kullanılır. Turbo Pascal 'da bir programın yapısı genel olarak aşağıdaki gibidir: Program Prog_Adı Tanımlamalar Procedure ve Function'lar Ana program kesimi Yukarıdaki yapı biraz daha genişletilirse ;?
Program ProgramAdı Uses Kullanılacak unit'ler Type Özel veri tipleri Const Sabitler Var Değişkenler Label Etiketler (goto için) Procedure ProcedureAdı Type ... Const ... Label ... Var ...
Begin : Procedure : alt program kesimi End ;
Function FunctionAdı Type ... Const ... Label ... Var ...
Begin : Procedure : alt program kesimi End ;
Begin : : Ana Program Kesimi : End .
Turbo Pascal 'da işlemler Begin - End blokları arasında yapılır. İç içe istenen sayıda Begin - End bloğu kullanılabilir. Turbo Pascal İngilizce dokümanlarında (öğretici bilgi içeren - tutorial) statement ve expression adlarında iki sözcük geçer. Bunların ikisinin de sözlükteki karşılığı ifade kelimesi olmasına rağmen ikisinin belirttiği şeyler birbirinden farklıdır.
Statement: Turbo Pascalda işletilebilecek anlamlı bir komutun bütününün yazımı tamamlandıktan sonra, bu komut noktalı virgül ";" ile sonlandırılır. Ve bu işaret Turbo Pascal derleyicisi için çalıştırılabilir komutun bittiği manasına gelir. Mesela, Sabah olduğunda yataktan kalk; Yatağını topla; Yüzünü yıka; Kahvaltını yap; vs...
Halbuki,
Sabah; olduğunda yataktan kalk;
şeklinde kullanmış olsaydık iki komut zinciri de anlamsız olacağından hata mesajıyla karsılaşacaktık. İşte Turbo Pascalda, iki noktalı virgül ";" arasında kalan anlamlı komut ya da komutlar zincirine statement diyoruz. Bu sözcüğü Türkçe'de ifade olarak çevirebiliriz.
Expression: Her ne kadar C programlama dilinde statement in ";" konmamış haline expression dense de bu dokumanda bu kelime daha farklı bir işlevde kullanılmış. Şöyle ki; Turbo Pascalda doğru veya yanlışlığı kesin olarak söylenebilen matematiksel önermeler ve bunların ve-veya (and-or) kelimeleriyle birlikte kullanılarak oluşturulan komutların içinde bulunduğu ifadelere Boolean expression denmektedir. Bu sözcükleri de Türkçe'ye Boolean önermeleri olarak çevirebiliriz. Bütün Turbo Pascal programları bir program adıyla başlamak zorundadır. (Bu kural Pascal standardında geçerli olmakla beraber yeni derleyiciler böyle bir mecburiyeti ortadan kaldırmış ve bunu isteğe bırakmıştır.) Öncelikle 'program' yazar; bir boşluk bırakır ve programınızın adinin ne olmasını istiyorsanız boşluktan sonra da onu yazarsınız. Turbo Pascal'ın ayrılmış sözcükleri(reserved words) vardır. Bu sözcükler, programlama dilinde bir komut bildirir ve amacı dışında kullanılamazlar. Dolayısıyla siz de program adinizi bu ayrılmış sözcüklerin dışında bir şey olarak atamalısınız. Mesela 'program' kelimesi bir ayrılmış sözcüktür ve programınıza bir isim atamaya yarar. Ayrıca yazdığınız programın çalıştırılabilir olduğunu da belirtir. Daha sonra başka bir ayrılmış sözcük olan 'begin' ifadesini bir satırda tek başına kullanırsınız; ki bu da Turbo Pascala komutları nereden itibaren çalıştırmaya başlayacağını belirtir. Programınız 'end.' ifadesiyle son bulur. program Ornek;
begin ...; ...; ...; end.
Programlara Açıklama Eklenmesi Program yazımı sırasında kodlarımıza çok sık ekleme ve çıkarmalar yaparız bunlar bazen programları içinden çıkılmaz hale getirebilir, bunu engellemek için Pascalda programlara açıklama satırları ekleyebilirsiniz. Açıklama satırları eklemeniz ileride programda yaptığınız değişiklikleri ve program akışını kolayca hatırlamanızı ve programınızı inceleyen diğer kişilerin programı kolayca anlamalarını sağlayacaktır. Pascalda açıklama satırı yazımı için {,} sembolleri veya (*,*) ikilileri kullanılır bunlar açıklamanın nerede başlayıp nerede bittiklerini belirtir. Programın derlenmesi esnasında bu satırlar derleyici tarafından göz ardı edilir, yani derlenmiş kodda açıklama satırları yer almaz. Açıklamalar birinci tipte { ile başlar } ile biter. İkinci tipte ise (* ile başlar ve *) ile biter. Programlarınızda açıklama satırlarına sıkça yer vermeniz hem sizin hem de programı inceleyen diğer kişilerin programı rahat anlamalarını sağlayacaktır.
Örnek: Var sayi:integer; {sayi değişkeni kaç kişinin adını gireceğimizi saymak için kullanıldı. Bu bir açıklama satırıdır ve derleyici tarafından göz ardı edilir} adi:string[20]; (* Bu da bir açıklama satırıdır ve bu satır da derleyici tarafından göz ardı edilir*) Pascalda değişken tanımlamalarının ve kod satırlarının sonuna noktalı virgül geldiği halde açıklama satırlarının sonuna noktalı virgül gelmediğine özellikle dikkat edin. Değer Atama ve Tip Dönüşümleri
Pascalda diğer programlama dillerinden farklı olarak değer ataması yapılırken ":=" (iki nokta üst üste ve eşittir işaret ikilisi kullanılır). Yani sayi diye bir integer tipindeki değişkene 20 değerini atamak istediğimizde yapmamız gerekenler şöyle olacaktır.
Örnek: Var sayi : integer; { sayi adında integer tipinde bir değişken tanımladık } ... sayi := 20; (* sayi değişkenine 20 değerini atadık *) sayi := sayi + 1; (* sayi değişkeninin değerini 1 arttırdık *) ... Pascalda değişkenlere değer atarken iki nokta üst üste ve eşittir birlikte kullanılır. Eşittir tek başına kullanıldığında karşılaştırma operatörü olarak görev yapar. Pascalda, Standart Veri Tipleri sayfasında da bahsedildiği gibi değişik tiplerde ve değişik uzunluklarda sayı