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