You are on page 1of 68

Yorumum; ilk olarak bilginin bulunduu yer segmenti ileye, Offset i ise bunun uzants olan mahalleye benzetebiliriz.

Bilgisayar yaadmz binaya benzetirsek tipleri binann katlarna, belli bir tip olarak benzetilmi deikeni odalara benzetebiliriz. Son olarak deikene aktarlan veriyi ise oda ierisindeki malzemeye benzetebiliriz. Kim kim diye sormaya devam edersek DEVLET, ANA MANTIK biz, kendimiz diyebiliriz.

Sonu olarak balangntakikonumun devam olarak adreslerle oluturulmu belli bir balang, bina, dosya, bilgisayar ile ilemler balar veya kontrol edilir. Program Satrlar Bir Borland/turbo Pascal program, deiik program elemanlarn ieren satrlardan oluur. Bir program satrnn fiziksel uzunluu 126 karekteri gemez. Eer bir satrn her hangi bir nedenle 126 karakterden uzun olmas gerekiyorsa, duruma uygun bir sonlandrc ile kesilip alt satrdan devam etmesi salanr. SABTLER Pek ok derleyici Borland/Turbo pascal da deikenlere kendiliinden ilk deer ( initialvalue ) atamaz. Deikenlerin ilk deer atamas ilemi ( initialization ), programc tarafndan gerekletirilmesi gereken nemli bir konudur.Bu amala sabitler ve sabit ifadeleri kullanlr. Bir sabit ( constant), deimez bir deeri gsteren bir tantcdr. Sabit bildirimi ( constantdecleration) ise sabitlerin tanmland program bloudur. Borland/Pascal, standart pascaldan farkl olarak sabit ifadelerine( constantexpression ) izni verilir. Sabit ifadeleri, derleyici tarafndan derleme aamasnda hesaplanr. Derleme srasnda zmlenemeyen sabit ifadeleri programlama hatas olarak kabul edilirler. Deiik trde sabitlere ve sabit ifadelerine ilikin rnekler aada verilmitir. 123 123.456 Z Grcan++Banger Chr(13) Ord(G)-ord(B)+1 $FF $CA-12 ^C #69

80-length(bir katar) div 2 *0..9+ *A..Z,a..y+ Sabit bildirimi ileminde Pascal n ayrlm szc olan CONST kullanlr.

Program Sabit_rnekleri; Usescrt; Const On=7+3; Yaz=0; Tura=yaz+1; lk_harf=A; Son_harf=Z; Mesaj=bir tua basnz; Begin Writeln(on+on+3); Writeln(Yaz,,tura); Writeln(ilk harf,ilk_harf); Wrileln(son harf, son_harf); Write(mesaj); While not keypressed do; , keypressed herhangi bir tua baslnca Wrilteln; Writeln( Teekkrler); End. Sabit ifadelerinde kullanlmasna izin verilen ve baz standart fonksiyonlar ifade eden pascal ayrlm szckleri unlardr. Ayrlm pascal szckleri { True olan bir fonksiyon }

ABS CHR HI HIGH

LENGTH LO LOW ODD

ORD PRED PTR ROUND

SIZEOF SUCC SWAP TRUNC

Sabitler tiplendirilmi (typed) ve tiplendirimemi olarak (untyped) olmak zere ikiye ayrlrlar. Tiplendirilmi sabit bildirimine ilikin baz rnekler aada verilmitir.

Const Sondeger=999; lkharf=A; Sfr=0; Uzunluk=80-length(toplam)div2; Harfler=*A..Z,a..z+; Tiplendirilmemi sabitler pascaln gerek sabitleridir ve deerlerinin programn herhangi bir yerinde deitirilmeleri mmkn deildir. Tiplendirilmi sabitler ise ilk deer alm deikenler gibidir. Bu tr sabitler tayan deikenlerin ieriklerinin(deerlerinin) daha sonra deitirilmesi mmkndr. Bunlara ilikin baz rnekler aada verilmitir. Const Sondeger:integer=999; lkharf:char=A; Uzunluk:byte=80-length(toplam)div 2; Harfler:set of char=*A..Z,a..z+; Programda kullanlan bellek yerini anazlamak kar karya iseniz(zellikle katar(string) sabitlerinin kullanmnda ) tiplendirilmi (typed) sabitler kullanmanz nerilir. (uzman programcya not: tiplendirilmemi(untyped) sabitlerin deerleri, derleme srasnda program satrlarnda yerine konur; bu nedenle sonu kod, tiplendirilmi sabit kullanmna oranla daha byk olur. Tiplendirilmi (typed) sabitler ise gerek anlamda ilk deer alm deikenler olduundan datasegment ismi verilen veri bltnde saklanrlar ve sabit deerlerine bellek adresleri aracl ile eriilir.) DEKENLER, TPLER ve TP BLDRMLER Bir deiken (variable) bellein isimlendirilmi ve ayrlm bir ya da birka gzdr. rnein SAYAC bir tamsay(integer) deiken ise bellein iki bytenn bu isimle ayrld ve SAYAC n anlmas ilede bu iki byten ifade edilecei anlalr.

Bir pascal programnda tm deikenler bildirilmeli tanmlanmaldr. Bu bildirim srasnda deikenin ( ya da tiplendirilmi sabitlerde sabitin ) tipi kesinlikle verilmelidir. Deiken bildirimi iin VAR ayrlm szc kullanlr. Var SAYAC: integer; gibi. Bu rnekte integer szc SAYAC isimli deikenin tipini bildirir. Deikenlere ilikin tip bildirimlerinde BOOLEAN, REAL, NTEGER gibi standart pascal veri tipleri dnda TYPE szc ile tanmlanm zgn veri tipleride kullanlabilir. Basit tiplerin kullanm ile baz deiken bildirimleri aada rneklenmitir. Var :integer; j.k,n:integer; t1,r:real; Bayrak BOOLEAN; Standart pascal, programlama hatalarnn nne gemek amac ile tip uyumu konusunda kat kurallar olan (strongtyped) bir dildir. rnein K deikeninin integer (tamsay) olarak tanmlanmas durumunda K:=1+1; satr normal biiminde ilerken K:=1.0+1; hatal: tip uyumsuzluu hatas vererek kesilecektir. nk sa taraftaki ifadede 1.0 bir gerel sabittir. Bu nedenle 1.0+1 ifadesinin sonucu gerel(real) kmakta ve bu deer, tam say(integer) bir deikene atanamamaktadr. Dier yandan borland/turbo pascal standart pascaln tip uyumu konusundaki kuralclna baz esneklikler getirmitir. Borland/turbo pascal da type komutu ile tanmlanan kullanc tipleri dnda be temel tip snf vardr. 1 basit tip(simpletype) 2 katar tipi(stringtype) 3 yapsal tipi(structuredtype) 4 gsterge tipi(pointertype) 5 yordamsal tip(procedural tip) Borland/turbo pascal tip snflarnn ayrntlandrlm bir listesi, anahtar szckleri ile birlikte aada verilmitir. 1 Basit tipler A gerel tipler: Real Single

Double Extended

B Ordinal(saylabilir zellikte olanlar) tipler. Tamsay(integer) Ksa tamsay(shortint) Uzun tamsay(longint) ok uzun tamsay(comp) Bayt(byte) Mantksal tipler . BOOLEAN . BYTEBOOL . WORDBOOL . LONGBOOL Karakter(char) Numaralandrlm(enumerated) Alt-menzil tipi (subrange)

2 katar tipi(string) 3 yapsal tip

A DZ(ARRAY) B Kayt(record) C nesne(object) D kme( set of) E ktk (file,file of, text) 4 gsterge tipi A standart pascal gsterge tipi(^tip) B POINTER C pchar 5 yordamsal tip(proceduraltype) Pascal programlama dilinde kullanc tanml tip bildirimleri type szcnn kullanmyla gerekletirilir. rnein Type TAMSAYI=integer; Gercel=real;

Tip bildirimlerini yaptktan sonra Var M:tamsay; T,x:gercel; Deiken tanmlamalarn yapabiliriz. rnek bir program paras yazarak baz tip tanm ve bildirimlerini zetleyelim: , *** Numaralandrlm (enumerated) tiplerMetal_para=(yazi,tura); Renk=(siyah,beyaz,mavi,yesil,sari; RGB=(red,green,blue); {*** alt-menzil ( subrange) tip} lkyuz=1..100; K_tam=-128..127; Color=black..white; {***Katar(string) tipi} Str2=string[2]; {***dizi(array)tipi } A=array[1..10] of integer; R= array[1..10,[1..8] of real; W=packetarray[1..10,1..8]of boolean; , kayt (record) tipi Memurtipi=record Adi:string[20]; Soyadi:stirng[20]; Sicilno:string[10]; End; Nesne(object) tipi

Tnokta=object X,Y:integer; End;

Tdikdrtgen=object A,B:Tnokta; Procedure basla(XA,YA:integer); Procedure hareket(DX,DY:integer); End; { Ktk(file)tipi } Memurfiletype=file of memurtipi; Kutuktipi=file; {Kme (set) tipi } ASCII =set of char; Harfler=*A..B,a..b+; Boskmetipi=[]; { Gsterge ( pointer) tipi; nt=nteger; RL=nteger; P=pointer; TR record X,Y,Z:Word; End; TRP=^TR; { yordamsal tip } Proc=procedure;

SWAPPROC=procedure(var A,B:Word); Katarproc=procedure(s:string); Realfunc=function(A:real):real; Devfunc=function(var F:text):integer; Maxfunc=function(X,Y:real; Fn:Realfunc):real; Var Memur:memurtipi; Memurkutugu:file of memurtipi; Memursicilkutugu:memurfiletype; Empty:boskumetipi; P_I:int; P_j:^nteger; Cset:harfler; X:packed array [1..25] of char; I:longint; St:string; PString:^String; PC:Pchar; Kbdstat:byteabsolute $0040:$0017; P3:pointer; Dokuman:text; Procptr:proc; ( tip ve deiken bildirimlerine ilerleyen blmlerde daha arlkl olarak tekrar dnlecektir. ) BLOKLAR: Programn bal ile tip ve deiken bildirimlerinden sonra bir program blouna gz atalm. Pasalda yordam ve altyordamlar BEGIN szc ile baslar ve END szc ile biter. Program PGM; , Program bal Procedure P1;

Begin , Procedure blouEnd;

Function F1:intger; Begin ,Fonksiyon blouEnd; Begin , Ana program blouEnd. Turbo pascaln blok yaps, bu dille yazlan programlarn yapsal ve modler olmasn salar. Bir Borland/Turbo pascal programn daha modler hale getirmenin yollarndan biride bamsz birinler (unit) gelitirmektir. Birim (unit) bir araya getirilmi ilikili bildiri ve komutlar topluluudur. Birimler, baka program ve birimler tarafndan eriilebilen program paralardr. Tip bildirimleri, deiken tanmlamalar ve alt yordamlar ierirler. Birim (unit) kullanmann temel avantajlar unlardr; 1 modler yapnn zenginletirilmesi; 2 ktphane benzeri ortak kullanmn salanmas. 3 ayrntlarn temel uygulamadan ayrlmas. Borland Pascal 7.0 paketi ile birlikte yirminin zerindeki kullancya ak birim salanmaktadr. Bunlardan system birimi, ayr bir bildirime ihtiya duyulmakszn derleyici ile birlikte kullanlabilmektedir. Dier birimlerin uses komut ile birlikte programa eklenmesi gerekmektedir. rnein silen clrscr komutunun kullanlabilmesi iin crt birimin program eklenmesi gerekir. Program Birimler; Usescrt; Begin Clrscr; Writeln(merhaba);

Readln, End. Borlandpascaln hazr birimleri yannda kullancnn kendi birimlerinidegelitirnesi mmkndr. Fakat bu amala bir birimin nasl yazlacann bilinmesi gerekir. Bir pascal biriminin genel yazm biimi aada verilmitir.

Unitbirim_ismi; nterface { kullanma ak bildirimler mplementation , eriilemeyen bildirim ve bloklar , birim blou Birimin derlenmesi ile ikinci ismi ( extension ) TPU olan bir ktk yaratlr. Aadaki rnein incelenmesi, birimin yap ve ileyiinin anlalmasnda yardmc olacaktr. , Birimin anahtar szckleri olan uit, interface ve implementation deyimlerine dikkat ediniz. } Unittool; nterface Usesdos; Type Str8=string[8]; Var C:char; Procedurecursoron; Procedurecursorof; mplementation Var Regs:registery; Procedurecursoroff; Begin

Regs.AX:=$0100; Regs.CX:=$1F00; ntr($10,regs); End;

Procedurecursoron; Begin Regs.AX:=$0100; Regs.CX:=$000C; ntr($10,regs); End; Begin , buraya balama ( ilkleme ) kodu yerletirilir End. rnek birimde Str8 katar tipi, C karakter deikeni ve cursoron ile cursoroff yordamlar baka program ve birimlerce eriilebilen elemanlardr. Dier yandan regs deikenine dardan erimek mmkn deildir. ( not: birimde Str8 tipi ile C deikeninin kullanlmyor olmas sizi artmasn. ok daha byk bir birimin paras olan bu program parasn yalnz uygulama rnei olarak alnz. ) Bu rnek birimi kullanan bir kk program aada verilmitir. Program birimi_kulllanma; Usescrttool, crt, Begin Clrscr, Cursoron; Write(imleci grdnz m ?>>>); While not keypresseddo ; Writeln; Clrscr; Write(imle imdi yok. );

Writeln; Clrscr, Cursoron; Writeln(imle yine geldi );

Writeln; End. nclude ktkleri Bir pascal programn yazp gelitirirken kullandmz borland turbo pascal editrnn depolayp ileyebilecei maximum kaynak program kt ( source program file ) bykl, yaklak 62 KB tr. Olaan koullarda bu durumun bir engel oluturmamas gerekir; hele ki birimler ( unit ) kullanyorsanz ad geen snr byklklere erimeniz pek olas deildir. Yinede 62 KB snrn zorladnz dnrsek, bu durumda kaynak programnz paraya blmeniz gerekebilir. Daha iyi kavrayabilmek iin aadaki rnek program inceleyiniz. Program include; Var ,j,k:integer; {$I Ekran1.scr} {$i Ekran2.scr} ,$I Bakm.incBegin Bilgilerioku; Bilgilerikontrolet; Hesapla; Sonucuyaz; End. rnekte grld gibi $I komutu ile belirtilen program paralar ( Ekran1. scr,Ekran2. scr,bakm.inc ) belirtilen noktalara programn derlenmesi srasnda monte edilecektir. $I komutu ile birlikte ktn ikinci isminin ( file extension ) belirtilmemesi durumunda INC kabul edilir.

BELLEKTE YER KAPLAMA Turbo pascalnoverlay isimli birimi ( unit ) tarafndan gerekletirilen yer paylama ilemi, bilgisayarn kullanlabilir belleinden daha byk programlarn iletilebilmesini salar. ( Windows altnda gerekletirilen borland/turbo pascal uygulamalar iin overlay kullanmna ihtiya yoktur; bu ii, Windows un kendi bellek yneticisi halleder. ) Turbo pascal ile birlikte bellekte yer paylama yaklamn kullanmak iin yaplacak ilemler olduka kolaydr. 1 programn ve kulland tm birimlerin ( unit ) bana uzak ary ( far call ) mmkn klan , $F+komutu yerletirilmelidir. 2 uses komutu ile listede ilk olmak zere overlay birimi ierilmelidir. 3 yer paylamada kullanlacak birimler ( unit ) ,$O+- komutu ile derlenmelidir. 4 yer paylamada kullanlan tm birimler ,$O ktk ismi - komutu ile listelenmelidir. 5 yer paylaan ktklere ilikin komutlarla ilgili birimlerin balang blmlerini ( unitinitializationblock ) iletmeden nce kesinlikle ovrinit yordam arlmaldr. Aadaki rnek program ile birlikte konu biraz daha aklk kazanacaktr. {$O+,$F+} Unit yerpay1; nterface Procedure yordam1; mplementation Procedure yordam1; Begin Writeln( yer paylama program ); End; End. {$O+,$F+} Unit yerpay2; nterface Procedure yordam2; mplementation

Procedure yordam2; Begin Writeln( yer paylama kt 2 ); End; End. {$O+,$F+} Program AnaPgm; Uses overlay,yerpay1,yerpay2; {$O yerpay1} {$O yerpay2} Begin Ovrinit(anapgm.ovr); Yordam1; While not keypressed do; Yordam2; While not keypressed do; End. Blm 2 Basit veri tipleri ve Aritmetik. Basit veri tipleri pascal ile programlamada yaygn olarak kullanlan ve daha basit bileenlere ayrlamayan tiplerdir. Bunlardan tamsay tipler arasnda INTEGER, BYTE, WORD, SHORTINT, LONGINT ve COMP SAYILABLR. Kesirli saylar gstermek zere REAL, SINGLE, DOUBLE, ve EXTENDET saylabilir. Pascal n mantksal temeli TRUE ya da FALSE deerlerini alabilen BOOLEAN tipi zerine kurulmutur. Karakterleri ifade etmek iin ise CHAR tipinden yararlanlr. Kullanclarn basit tip yaratma ynteminde ise daha nce szn ettiimiz saylabilir olan verilere ilikin numaralandrma ( enumeration ) yaklam kullanlmaktadr. Saysal Tipler Turbo pascal da saysal tipler 1 tamsay tipler 2 gerel say tipler

3 80x87 snf Olmak zere ayr grupta anlrlar. Tamsay snfna giren tiplerin ilki bytedr. Gerekten bir byte byklndedir. aretsiz kabul edildiinden 0 ile 255 arasnda kalan tamsaylar depolamak ve ilemek zere kullanlr. Dier yandan SHORTINT tipi de bir byte olmakla birlikte alabilecei deerler -128 ile +127 arasndadr. INTEGER ifade edilen deerler 2 bayt (16 bit ) uzunluunda bir bellek yeri igal ederler. Tamsaylar snfnn dier yeleri gibi kesir blmleri ve kesir noktalar yoktur. INTEGER tipindeki tamsaylar -32768 ile +32767 arasndaki deerleri gsterirler. WORD tipi de iki byte (16 bit) uzunluunda olmakla birilikte iaretsiz olduu kabul edildiinden 0 ile 65535 arasndaki tam say deerlerin temsiline ynelik grev yapar. Tamsaylarn en kapsamls LONGINT tipidir. Bellekte drt byte byklnde yer kaplar ve 2147483648 ile 2147483647 arasndaki deerleri ifade eder.

TP Shortint Integer Longint Byte Word

MENZL -128..127 -32768..32767 -2147483648..+2147483647 0..255 0..653535

GSTERM BM iaretli 8 bit iaretli 16 bit iaretli 32 bit iaretsiz 8 bit iaretsiz 16 bit

Tm tamsay snf birbirleri ile tip uyumu iindedir. Bir tamsay tipin bir baka tamsayya atanmasnda herhangi bir tip uyumsuzluu hatas olmaz. Yalnz tiplerin depolayabilecei byklkler konusunda dikkatli olmak gerekir. Program deneme; Var :integer; B:byte; Begin :=1000; B:=i; Writeln(b); End. rnekteki programda i isimli deikene 1000 deeri konmakta ve ardndan da bu deikenin deeri b isimli byte tipindeki deikene aktarlarak ekrana yazlmaktadr. Program ilettiimizde ise ekrana

1000 deil fakat 232 yazldn greceiz. Yukarda akladmz gibi bir byte byklnde olan BYTE tipli b deikeni ancak iki byte sabilen 1000 saysn tayabilecek byklkte deildir. Bir tamsay (overflow) olay gereklemitir.

TP Real Single Double Extended Comp

MENZL 2.9E-39..1.7E+38 1.5E-45..3.4E+38 0.5E-235..1.7E+308 3.4E-4932..1.1E+4932 -2^63-1..2^63-1

HASSAS BASAMAK 11-12 7-8 15-16 19-20 19-20

UZUNLUK 6 byte 4 byte 8 byte 10 byte 8 byte

Kesir blm olan ya da deeri LONGINT snrn aan saylar gstermek iin REAL tip kullanlr. REAL tipi kayan noktal (floatingpoint ) say tipi olaraktaanlr.Borland turbo pascal da REAL tipi 6 byte uzunluundadr ve 2.9E-39 ile 1.7E38 arasndaki saylar gstermek iin kullanlr. Karmak depolama yaps nedeni ile REAL ile yaplan aritmetik tamsay snf ile yaplan ilemlere oranla daha uzun sre gerektirir. REAL tipindeki deikenlerin ilenmesi srasnda sklkla karlalan sorunlardan biri tama (overflow) durumudur. rnein aada verilen program iletildiinde Program Real_denenme; Var R1,R2,R3:real; Begin R1:=1.7E+38; R2:=1.7E+38; R3:=R1+R2; Writeln(R1,R2,R3); End. REAL snr aldndan ileyi Runtime error 205:floating pointoverflow hatas ile sona erecektir. Dier yandan ayn program R2:=1.7E+38 Satrn

R2:=1.0; Yaparak ilettiimizde matematik olarak REAL snrn atmz halde tama hatas ile karlamayacaz. Borland/turbo Pascal n REAL deerleri 11-12 hassas basamaa sahiptir. Bu nedenle sonunda 38 tane sfr olan bir sayya 1 eklenmesi deeri deitirmediinden tama hatas oluturmamaktadr. Dier yandan hesaplamalar sonucunda oluan mutlak deeri 2.9E-38 dan kk REAL saylar Borland Turbo Pascal tarafndan sfr kabul edilirler. Bilindii gibi PC grubundaki kiisel bilgisayarlarn mikro ilemcileri 80x86 olarak isimlendirilirler. Bu ilemci ailesinin matematik ykn hafifletmek iin 80x87 olarak anlan matematik ilemci ailesi kullanlr. Borland Turbo Pascal da bu ilemci ailesi ile birlikte kullanlmak zere bir dizi temel tip tanmlanmtr: SINGLE,DOUBLE,EXTENDED, COMP. SINGLE veri tipi hassas basamak says 7-8 dolaynda olan drt byte uzunluundaki ksa gerel saylar ifade eder. Az yer kaplamalar nedeni ile veri hacmi byk fakat hassas olmayan hesaplama ilemlerinde kullanlr. Dier yandan DOUBLE veri tipi ise duyarl basamak says 15-16 olan 8 byte uzunluunda uzun gerel saylar gstermek iin kullanlr. 19-20 basamak uzunluundaki gerel saysal deerleri ifade etmek iiin ise 10 byte yer kaplayan EXTENDED veri tipi kullanlr. 80x87 say snfna giren saysal veri tiplerinden biri de ok uzun tamsaylar gsteren COMP veri tipidir. Sekiz byteuzuluundaki COMP ile 19-20 basamakl tamsaylar ifade etmek mmkndr. 80x87 snfndaki veri tiplerinin kulllanlabilmesi iin ,$N+- derleyici komutu verilmelidir. Eer makine ek matematik ilemciye sahip deilse borland turbo pascal {$E+} ile emlasyon konumuna srlmelidir. {$N+}{$E+} Program 80x87; var R1:single; R2:double; R3:extended; R4:comp; Begin { program gvdesi } End.

Saysal Olmayan Saylabilir Veri Tipleri

Pascal da yaygn olarak kullanlan veri tiplerinden biride CHAR dr. CHAR tipi kodu 0 ile 255 arasnda deien tek bir ASCII karekterini ifade eder. Byte gibi CHAR da bir byte byklnde bellek yeri igal eder. Fakat C programlama dilinden farkl olarak CHAR tipi aritmetik ilemlerde kullanlmaz. CHAR tipindeki deikenin deerini aritmetik ilemlerde kullanabilmek iin ORD fonksiyonundan yararlanmak gerekir. CHAR tipi tek karakterli katarlarla uyumludur. CHAR tipinde bir sabit yazlrken ASCII karakterinin bana ve sonuna kesme(apostrof) iareti konulur. A,*,I ya da gibi. Eer kesme iaretleri arasna bir ey yazlmazsa bo karakter ( Nullcaracter ) elde edilir. Program Char_Tipi; Var Ch:char; K:byte; Begin Ch:=A; K:=ord(ch); K:=K+1; Ch:=Chr(K); Writeln(Ch,K); Ch:=Pred(Ch); Writeln(Ch); Ch:=Succ(ch); Writeln(ch); End. , bytenchar a dnm,Ekrana B ve 66 yazlr {ChA, Ekrana A yazlr { chB ,Ekrana B yazlr , Char deikeni ve sabiti, Charnbyte dnm -

rnek programda ordinal ( saylabilir) veri tiplerinden CHAR tipi ile birlikte kullanlan ORD, CHR, PRED ve SUCC fonksiyonlar sergilenmitir. ORD fonksiyonu karakterin ASCII sra numarasn, PRED fonksiyonu sradaki nceki karakteri, SUCC sradaki sonraki karakteri vermektedir. Dier yandan CHR fonksiyonu ASCII sra numaras verilen karakteri retir. Pascal da mantksal (logical) deiken ve sabitler BOOLEAN tipi ile ifade edilirler. BOOLEAN deikenler iki temel mantksal deer alrlar. True ve FALSE. Dier yandan mantksal doruluk deerleri ile ilgili u noktalar nemlidir.

FALSE<TRUE ORD(FALSE)=0 ORD(TRUE)=1 SUCC(FALSE)=TRUE PRED(TRUE)=FALSE BOOLEAN tipindeki deikenler bir byte byklnde bellek alan igal ederler. Borland/turbo pascal7.0 da mantksal veri tipi C gibi dier programlama dilleri ve Windows ortam ile uyum salamak zere geniletilmitir. Bu amala bir byte uzunluunda BYTEBOOL iki byte uzunluunda WORDBOOL ve drt byte uzunluunda LONGBOOL tipleri eklenmitir. Yukardaki ORD fonksiyonu ile ilgili yaplan aklamalardan anlalaca gibi BOOLEAN tipi sayma saylar asndan 0 ve 1 ile ifade edilirken bu yeni tipler dier iaretsiz tamsay deerleri de alabilmektedirler. Fakat her durumda mantksal bir mantksal deikenin FALSE deerini almas ordinal deerinin sfr olmas anlamna gelir. Bylece BYTEBOOL, WORDBOOL ve LONGBOOL iin ( C dilinde olduu gibi ) tm sfrdan farkl deerler TRUE kabul edilirler. Program Logical; Var B:Boolean; K,N:integer; Begin K:=1; N:=3; B:=(K>3); Writeln(B); B:=not B; Writeln(B); End. Pascal n stn niteliklerinden biri de kullancnn kendi veri tiplerini yaratabilmesidir. Kullanc tarafndan gelitirilebilen tiplerin banda saylabilir zellikli numaralandrlabilen byklkler , Ekrana TRUE yazlr {Ekrana FALSE yazlr -

(enumeratedscaler) olarak isimlendirebileceimiz veri tipi gelir. Bu veri tipindeki bir deiken bellekte bir byte yer igal eder ve depolayabilecei deer says en ok 256 tanedir. Numaralandrlabilen kullanc tanml veri tipinin amac program daha okunur ve gelitirilebilir hale getirmektir. Baz rnekler aada verilmitir.

RENK:(Siyah, Beyaz, Mavi, Yeil, Kirmizi); CNSYET:(Erkek, Kadin ); Bilgisayar:(Ultra, MicroStar, Karel, Optimal ); Dikkatleri yukardaki rneklerden ilkine evirelim. Bilgisayar RENK isimli deikeni bir byte olarak depolarken alabilecei deerlerede sra numaras vermektedir. Bylece Siyah=0, Beyaz=1, Mavi=2, Yesil=3 ve Kirmizi=4 olarak kabul edilmektedir. Program Enumerated_Tip; Var Renk:(Siyah, Beyaz, Mavi, Yesil, Kirmizi); M:integer; Begin Renk:=Yesil; f Renk=Siyah thenwriteln(Siyah) else writeln( baka renk); Renk:=Kirmizi; M:=Ord(Renk); Writeln(M); End. Yukardaki Enumerated_Tip isimli rnein iletilmesi ile ekrana Baka renk 4 Yazldn gzleyeceiz. rnekte grld gibi M:=Ord(Renk); Satr ile o srada (Kirmizi) deerini tamakta olan RENK in sra numaras M integer deikenine atanmaktadr. Bu doru ve olanakldr. Dier yandan M:=2; , Bu satrda hata yok {kirmizi=4}

RENK:=M;

, Bu satrda hata verir -

Biiminde bir atama ise typemismatch(tip uyumsuzluu) hatasna neden olacaktr. Byle bir atamay yapabilmek iin borland/turbo pascaln standart fonksiyonu olan FILLCHAR komutunu kullanabiliriz FILLCHAR(RENK,2,M); Bylece RENK deikeni mavi deerini alm olacaktr. GEC TP DNMLER Tip dnm (typecasting) belli bir tipteki deikenin geici olarak baka bir tip gibi davranmas ilemidir. rnein 1.0 deerini tayan R isimli real deikeni integer olarak kullanmak zere integer olan K deikenine atamak iin K:=integer(R); Yazabiliriz. Benzer biimde CH isimli bir CHAR deikenini LG isimli LONGINT deikenine atamak iin LG:=integer(CH); Biiminde bir komut kullanabiliriz. Tip dnmn genel izgileri ile kavrayabilmek iin aadaki rnei inceleyebilirsiniz; {$N+,E+} Program Type_Casting; Usescrt; Var Ch:Char; nt:integer; Bol:boolean; Ptr:pointer; Rel:real; Str:string; Begin Clrscr; Ch:=Chr(128); Writeln(CH=,Ch); nt:=integer(CH);

Writeln(int=,int); Bol:=boolean(int); Writeln(bol=,bol); Ptr:=@ch; Rel:=real(Ptr^); Writeln(real=,rel); Str:=String(ptr^); Writeln(Str =,str); While not keypressed do End. Aritmetik ve Bit Operatrleri Tm saysal programlama dillerinde olduu gibi pascaln da en nemli kavramlarndan biri ifade (expression ) dr. Aada bir dizi matematik ifade rnei verilmitir. 2+2, K+M1, 4.0*Arctan(1,0)*sin(Pi+0,12) rneklerde de grld gibi bir ifade ierisinde sabitler deikenler ve fonksiyonlarla birlikte operatrler ile zel iaretler bulundurur. Pascal da bir ifadenin anlaml olabilmesi iin sa taraftaki ifade sol taraftaki bir deikene atamal ay da ***writeln gibi bir k komutunun listesinde bulunmaldr. Dort:=2+2; Writeln(K+M-1); Alpha:=4,0*arctan(1,0)*sin(pi+0,12); Gibi pascal da atama (assignment) simgesi olarak := kullanldna dikkat ediniz. := Atama ( Assimnet) = . Eit ( Equal ) iareti Pascal da tm terimleri tam say olan ya da son ilemde DIV, MOD operatrlerinden veya TRUNC, ROUND fonksiyonlarndan biri ile tam say haline getirilmi ifadeler tam say ifade ( integerexpression) olarak kabul edilir. fadenin gerel (realexpression ) saylabilmesi iin tek teriminin gerel REAL olmas yeterlidir. Daha nce belirtiimiz gibi veri tipleri asndan kuralc bir dil olan pascal tamsay ve tam say ifadeleri biribirinden farkl olarak deerlendirir.

Gerel deerleri tamsayya evirmek iin kullanlan fonksiyonlardan TRUNC, kesirli saynn kesir blmn kesmekte kullanlr. ROUND fonksiyonu ise 4 / 5 kuralna gre kesir blmn tam sayya yuvarlar. ARTMETK LEMLER Toplama karma arpma Blme Tamsay blme Tamsay kalan (modl) Ve(AND) Veya(OR) Dlayc veya(XOR) Sola bit teleme Saa bit teleme OPERATORLER + * / DIV MOD AND OR XOR SHL SHR

Pascal da tamsayl blme yapabilmek iin DIV operatr kullanlr. rnein 7/2=3,5 7 DIV 2 = 3 Olur. Tam say kalan bulma ( modl) ilemi iin kullanlan operatr MOD dur. Bu operatr uyarnca rnein 7 mod 2 = 1 Olur. Dier yandan pascal bit temelinde ilem yapabilen bir dildir. Bit ilemleri iin AND, OR, XOR, SHL ve SHR operatrleri kullanlr. Program bit ilemleri Var B1,B2:byte; B4, B5, B6, B7, B8, B9:byte; Begin

B1:=13; B2:=23;

{ikilik: 00001101} { ikilik: 00010111}

B3:=B1 and B2; {B3=00000101=5} B4:=B1 or B2; {B4=00011111=31} B5:=B1 xor B2; {B5=00011010=26} B6:=B1 SHL 1; {B6=00011010=26} B7:=B1 SHL 2; {B7=00110100=52} B8:=B1 SHR 1; {B8=00001011=6} B9:=B1 SHR 2; {B9=00000011=3} Writeln(B1,B2); Writeln(B3, B4, B5, B6, B7, B8, B9 ); End. NOT, AND, OR, XOR, bit ilemleri dier dillerde ve mantkta kullanld gibidir. Durum aadaki tabloda zetlenmitir. A 0 0 1 1 B 0 1 0 1 NOT A NOT B A AND B 1 1 0 0 1 0 1 0 0 0 0 1 A OR B 0 1 1 1 A XOR B 0 1 1 0

SHL (Shiftleft) ve SHR (shiftright) operatrleri sola ve saa bit telemek (kaydrmak) iin kullanlr. 13 shl 1 ilemi 13 tamsaysn bir bit sola teler ve den bir bit yerine sadan bir sfr biti koyar. Bylece sonuta 13 says 2 ile arplm olur. Dier yandan 13shr1 ilemi 13 saysn bir bit saa teler ve sadan den bir bit yerine soldan bir sfr biti koyar. Bylece 13 says ikiye blnm olur. Genel olarak K shl N ya da K shr N ileminde k tam says saa veya sola N tane bit telenir. (shl ve shr ilemleri iki ve katlar ile arpma ve blme ilemlerine oranla daha hzldr. ) Pascal da aritmetik yapmann dier ilgin bir yan da aritmetik operatrlerin ncelik srasdr. En ok kullanlan operatrlere ilikin ncelik srasna ilikin bir tablo aada verilmitir.

OPERATR aret ilemi Parantez arpma, Blme Toplama,karma

NCELK 1 (En yksek) 2 3 4 (En dk)

Ayn dzeyde olan operatrlerin ncelii ise soldan saa dorudur. Pascal n nceliklerle ilgili temel ilkeleri yle zetlenebilir. 1-iki farkl dzeyde operatr arasnda bulunan terim yksek ncelikli operatre gre ilenir. 2- iki eit ncelikli ncelikli operatr arasnda bulunan terim soldaki operatre gre ilenir. 3- parantez ierisindeki ifadeler bamsz basit terimlere gre nce ilenir. 4- Ayn dzeyde olan operatrler soldan saa doru ilenmekle birlikte borland turbo pascal kod etkinliini artrmak iin sonucu etkilemeden sray deitirebilir.

Yukardaki verilen ilkler nda aritmetik ifadelerde kullanlan tm operatrlere ilikin genel abonelik sras aadaki tabloda verilmitir. OPERATR @, NOT, +/( ) parantezler *, /, DIV, MOD, AND SHL, SHR +, -, OR, XOR =, <>, >, <, <=, >=, IN arpma/blme toplama/karma iliki 3 4 5(iliki) CNS iaret ncelik dei. NCELK 1(nce) 2

Pascal da fonksiyonlar, iaret ilemi dzeyinde ncelie sahiptirler. Kat kuralcl nedeni ile borland turbo/ pascal ile programlamada bir noktaya dikkatli olunmas gerekir. rnein K tamsay olarak tanmlanmken K:=2.0*X+Y; Gibi bir ifadeye tip uyumsuzluu nedeni ile izin verilmez. Dier yandan A gerel (real) B ve C tamsay olarak tanml iken A:= B*C;

fadesi bir tip hatasna neden olmaz. Fakat burada B*C ifadesinin tamsay olarak hesaplanaca unutulmamaldr. Bu nedenle B*C ifadesinin sonucu tamsay snrlarn aan bir deer olursa (bir tamsay tama ilemi gerekleeceinden) A ya atanan deer hatal olacaktr. rnein borland turbo pascalinteger tipler 32767 den byk olamazlar. Halbuki B=7000 ve C=7000 olduunda B*C 49000000 olacak ve bu deerde 32767 yi atndan A deikenine (tamsay tama nedeni ile) -20928 atanacaktr. Bu durumu nlemek iin yukardaki atama cmlesi; A:=1.0*B*C; Biiminde yazlmaldr. Bataki 1.0gerel sabiti ifadenin tipini gerel olmaya zorlayacaktr.

MANTIKSAL FADE ve OPERATRLER Pascal n destekledii operatrler arasnda iliki operatrleri (relationaloperators) nemli bir yer tutar. <, <=, >, >=, <>, = biimindeki iliki operatrleri basit veri tiplerinin hepsi ile kullanlabilir.

OPERATR >= < <= = Byktr

AIKLAMA

byk ya da eittir Kktr kk ya da eittir eittir.

Ayrca iliki operatrleri kullanlarak mantksal ifadeler de yazlabilir. Bu ifadeler BOOLEAN tipinde deikenlere atanabilir. Mantksal deiken ve ifadeler genellikle IF-THEN-ELSE, WHILE, REPEATUNTIL gibi program ak denetimi yaplarnda kullanlrlar.

BLM 3 DZ, KATAR, KAYIT, NESNE ve KME TPLER

Bu blmde turbo pascaln karmak veri tipleri olan dizi (array), katar (string), kayt (record), nesne (object) ve kme (set) tiplerini ele alacaz. Bu veri tiplerinin temel zellii basit veri tiplerinden yola klarak daha karmak biimde oluturulmalardr.

DZLER

Ksaca dizi (array) ok sayda zde veri tipinin ayn isimle anlmasdr. Her hangi bir veri tipi dizi oluturacak ekilde dzenlenebilir. Tek boyutlu bir dizi tanmlamak iin genel yazm biimi yledir. DiziTipi=array*alt_snr..st_snr+ of temeltip; Bu yazm biiminde ARRAY ve OF szckleri pascaln anahtar szckleridir.Alt_snr ve st_snr ise saylabilir zellikte (integer, Word, byte, char, boolean gibi) byklktedir. Diziler genellikle bir listeyi oluturan benzer bilgileri depolamak iin kullanlrlar. rnein renci okul numaralarn depolamak iin yle bir tanmlama yaplabilir: Type OgrNo_Tipi=array[1..100] of Word; Var Ogrencino:ogrno_Tipi; Dizideki herhangi bir gze(rnein 15 inci sradaki rencinin gzne) bilgi yerletirmek (12906 olan okul numarasn atamak) iin dizi indisi belirlemek yeterlidir. OgrenciNo[15]:=12906; Dizilerde boyutun alt snrnn (dier pek ok dilde olduu gibi) 1 ya da sfr olma zorunluluu yoktur. rnein -50 den balayp 100 kadar uzanan indise sahip olabilir. Dizi:array [-50..100] of real; Dizilerden en temel kurallarndan biri dizi boyutunun ve dolays ile indisinin saylabilir olmasdr. Bu nedenle Var Dizi:array *A..Z+ of integer; Gibi dizi tanmlamalar da yapabiliriz. Diziler birden fazla boyutlu olabilirler aada bir dizi rnek verilmitir. Var Dizi1:array [1..10,3..7] of real; Dizi2:array [-10..10,1..5,1..20] of char; Dizi3:array *A..Z,a..z+ of char; Dizi4:Array [FALSE..TRUE] of byte; ok boyutlu dizilerin elemanlarn ifade edebilmek iin keli parantezler arasna virgllerle ayrlarak tm indisler yazlmaldr. Baz nedenler aada listelenmitir.

Dizi1[3,4]:=16.12; Dizi1[7,6]:=Dizi1[3,4]-3.14; Writeln(dizi2[-3,2,15]); Dizi3*G,b+:=12906; Diziler bellekte (eleman says) * (eleman bykl) kadar yer kaplar. rnein yukarda ttanmlanan dizi1 isimli dizinin ilk boyutu 10 ikinci boyutu 5 byklndedir. Ayrca diziyi oluturan elemanlar real olarak tanmlandklarndan herbiri alt byte yer igal etmektedirler. Bylece dizi 10*5*6=300 byte bellek yer igal eder.

KATARLAR Katarlar(string) zel tanml dizilerdir. Bu nedenle pascaln veri tiplerinden olan STRING tipinin Type String=packedarray [0..255] of char; Olarak tanmlandn dnebiliriz. Bir deikenin yalnz STRING olarak tanmlanmas ile bellekte 256 bytelk bir yer ayrlr. Eer daha ksa katarlar kullanlacak ise STRING*10+ rneinde olduu gibi katarn uzunluu STRING szcnn yannda belirtilebilir. STRING*10+ tipinde bir deiken bellekte 10+1; byte yer igal eder. Pascal da katarn 0 numaral (0 indisli+ byte katarn uzunluunun depolanmas amac ile kullanlr ve katara dahil edilmez. Bu byte uzunluk byte (lengthbyte) olarak bilinir. Bu yaklam pascaln geleneksel katar depolama biimidir ve C programlama dilinin sfr sonlandrmal katar (nullterminatedstring) yaklamndan farkldr.

G R C 1 4 5 2

A 3 4

N 5

* 6

& 7 6 7

! 8 8 &

9 9 . .

Uzunluk byte (0) 0 G 1 2 3 R

C A

N ASCII sfr C dili (#0) *

! .

Borlandpascal7.0 programlama dili Windows ortam ve C gibi dier programlama dilleri ile uyum saylayabilmek iin sfr sonlandrmal katar yaklamn getirmitir. Bu tr katar gsteriminde katarn sonu ASCII sfr (#0) karakteri ile belirtilir. Sfr sonlandrmal bir katar tanmlamak iin alt_snr 0 olan bir katar dizisi tanmlanmaldr. Type C_str:array [0..79] of char;

Bu durumda bir karakteri ASCII sfr (#0) iin ayrlm bir karakter dizisi tanmlanmaktadr. Bu tr katarlar ileride ele alacamz ve Type Phar=^Char; Biiminde tanmlanm Pchar tipi ile yakndan ilgilidir.

KAYITLAR

Bir kayt (record) daha basit tiplerin bir yap oluturacak biimde bir arada yeniden tanmlanmasdr. Genel yazm kurallar uyarnca Kayttipi=record Alan1:veri tipi1; Alan2:veritipi2; . . . End; Biiminde tanmlanrlar. Kayt (record) tanmlanmsnda kullanlan veri tipleri basit ve/veya karmak trden olabilirler. ou zaman kayt tanmnda kullanlan bir tip daha sonra tanmlanm karmak bir veri tipidir. Doal olarak kaytlarda bir araya toplanan bilgi alanlar birbiri ile yakn alanlardr. Aadaki rnei inceleyiniz. vb..

Type Dt_tipi=record Gn,ay,yil:word; End; Kimlik_tipi=record Adi:string[20]; Soyadi:string[20]; *** DogumTarihi:DT_tipi; Geliri:real; Evlimi:char; End; Var Pesonal:kimlik_tipi; Aday:kimlik_tipi; *** Personelkutuu:file of kimlik_tipi;

Kayt (record) biimindeki yapsal veri tiplerinin kullanlmasnn iki temel avantaj vardr. Birincisi ilgili bilgiler bir arada depolanr. kincisi kaytlarn alt blmlemelerinin ayrntsna girmeden (ktk ilemlerinde olduu gibi) dorudan kayt yaplar ile ilem yaplabilir. Yukardaki rnek bildirimine bakarak aday isimli deikenin adi alann, personel isimli deikenin adi isimli alanna aktarmak istersek Personel.adi:=aday.adi; Yazabiliriz. Dier yandan aday isimli kaydn tamamn personel isimli kayda aktarmak istersek Personel:=aday; Yazmamz yeterlidir. Benzer biimde bir kte yazarken kaydn tamamn bir seferde kaydedeiliriz. Write(personelkutugu,personel); personel.adi ya da aday.dogumtarihi gibi . Kullanlarak yaplan alan seviyelendirmesi (tantc nitelenmesi) ilemi WITH deyiminin kullanm ile daha basit hale getirilebilir.

WITH personel DO BEGIN Readln(adi); Readln(soyadi); WITH dogumtarihi do BEGIN Readln(gun); Readln(ay); Readln(yil); End; Readln(dogum yeri); Readln(geliri); Readln(evlimi); End; Borlan turbo pascaln esnek yapsal yaklam kaytlarn (record) sabit yapda olma zorunluluunu kaldrr. Deiken yapl kaytlarn (variantrecord) genel yazm biimi yledir. Deg_kayittipi=record Alan1:veritipi1; Alan2:veritipi2, . . . Case (dal:) dal tipi of Dal1:(Dalalani11:daltipi11; Dalalani12:daltipi12; . . .

Dal2:(dalalani21:daltipi21; Dalalani22:dalalani22;

. . . End; Genel kullanlm dizilimine bakarak anlalmas hayli zor olan deiken yapdaki kaytlarla ilgili aklayc bir rnek aada verilmitir. Type Biim=(dikdrtgen,ucgen,cember); Cokgen=record X,Y:real; Case cins:bicim of Dikdrtgen:(yukseklik,genilik:real); Ugen:(kenar1,kenar2,kenar3:real); Cember:(yaricap:real); End; Bu rnekte cins olarak belirlenen alan dal (tagfiled) olarak bilinir. dal alani nn bildirilmesi zorunlu deildir. rnein yukardaki tanmlamayi dal alan n kaldrarak Type Cokgen = record X,Y:real; Case byte of 1:(yukseklik,genislik:real); 2:(kenar1,kenar2,kenar3:real); 3:(yaricap:real); End;

Biiminde de tanmlayabiliriz. (bu biimde deien kayt tanmlamas COLBOL un REDEFINES, C nn SRUCT ve FORTRAN n EQUIVALENCE deyimlerini hatrlatr. ) Deiken yapdaki kaytlarn bu blmde harcanan bellek yeri en uzun kayt uzunluu kadardr. rnein yukardaki rnekte tane real yeri (3*6=18 byte) harcanacaktr Aadaki deiken kaytlar aklayc bir rnek program paras verilmitir. Program Degisken_Kayit; Type Bicim=(dikdrtgen,Ucgen,Cember); Cokgen=record X,Y:real; Case cins:bicim of Dikdortgen:(yukseklik,genislik:real); Ucgen:(kenar1,kenar2,kenar3:real), Cember:(yaricap:real); End; Var Sekil:cokgen; Begin ,..With sekil do Begin X:=10.0; Y:=15.0; cins:=dikdortgen; Readln(yukseklik,genislik); ,Cins:=ucgen; Readln(kenar1,kenar2,kenar3); ,..-

Cins:=cember; Readln(yaricap); End; End. Ayn bellek yerinin iki farkl deiken tarafndan nasl kullanldna ilikin bir baka rnek aadadr. Program Degisken_kayt; Type Ornektip=record Case boolean of False:(ch:array *A..Z+ of char); True:(no:array*A..Z+ of byte); End; Var Deneme:Ornektip; Begin { karakter gir } Deneme.ch*2+:=B; {kodunu yaz } Writeln(deneme.no[2]); , Readln; End. Bu rnktechar olarak girilen bir deer byte olarak grntlenmektedir. NESNELER Bu kesimde son yllarda ad ok duyulan nesne ynelimli programlamaya ( NYP, objectorientedprogramming, OOP ) ynelik baz konular ele alacaz. Turbo pascal5.5 versiyonu ile ilave edilen nesne ynelimli programlama (NYP), 7.0 versiyonu ile daha gelimi bir teknik olarak gze arpmaktadr. Nesne (object) yaklamnn dayand temel kavram bulunmaktadr.

1- Program kodunun ve verilerin birletirilmesi 2- Kaltm (inheritance) 3- Tmleme (encapsulation) Pascal programclar (rnein BASIC ile program yazanlara oranla ) verilerini yaplar halinde dzenleme alkanl iindedirler. Nesne ynellimli bir programlamada ise veriler yordamlarla birlikte nesneleri (object) olutururlar. Bir nesne iki temel zellik ierir: 1- Varlk zellii ( veriler) 2- Davran zellii (yordamlar) Bu iki zelliin bir araya gelmesi ile nesne (object), bamsz davranabilme yeteneini elde eder. Nesneleri daha iyi kavrayabilmek iin bir rnee bavurabiliriz. Bir rencinin zelliiklerini ve yaamn ele alalm. rencinin zellikleri arasnda adn, soyadn, okulunu, snfn, alt dersleri, yani kilosunu sayabiliriz. rencinin yaamna ilikin olarak ise okula gittiini, okuldan dndn, yemek yediini, ders altn, uyuduunu ya da spor yaptn syleyebiliriz. renciyi tanmlayan bir veri tipini yle bildirebiliriz.

Type renci_tip=record Adi,soyadi,okulu:string[30]; Sinifi:byte; Dersler:(turkce,tarh,fen); Yasi:byte; Kilosu:byte; Boyu:real; End; Bu tanmlama renci ile ilgili bilgileri toplamaktadr. rencinin davran ve eylemleri konusunda herhangi bir bilgi vermemektedir. renciinin eylemlerini bir dizi yordam(procedure) ve/veya fonksiyon ile tanmlayabiliriz. Procedure okulagitmek; Begin ,.End;

Proedure okuldandonmek; Begin ,End; Procedure yemekyemek; Begin ,End; Procedure derscalsmak; Begin ,End; Function uyumak :real; Begin ,.End; Procedure sporyapmak; Begin ,End; Nesne ynelimli programlama (NYP, OOP) yaklamnda yukarda verilen veri ve eylemler birletirilerek nesne (object) haline getirilir. Bir nesne (object) veri ve yordamlar bir arada iermelidir. Nesne ynelimli programlamada bir nesne (object) iinde tanmlanan yordam (procedure) ve fonksiyonlara yntem (method) ismi verilir. Nesne tanmlamas yalnz yntemin baln verir (method header) verir. Gerek yntem kodu ayrca yazlr. renciye ilikin rnek nesne (object) tanmlamasn aadaki gibi yapabiliriz.

Type Ogrnesne=object Adi,soyadi,okulu:string[30]; Sinifi,yasi,kilosu:byte; Dersler:(turkce,tarih,fen); Boyu:real; Procedure basla; Procedure okulagitmek; Procedure okuldandonmek; Procedure yemekyemek; Procedure derscalismak( ,.- ); Function uyumak:real; Procedure sporyapmak; End; Ogrnesne isimli tipten yararlanarak deikenler tanmlamak iin Var Ogrenci:ogrnesne; Snf:array*1..50+ of ogrnesne; Bildirimleri kullanabiliriz. Artk ilgili ana programn gvdesine yazacamz satrlar yle gzkecektir.

With ogrenci do Begin Basla; Okulagitmek; Okuldandonmek; Yemekyemek; Derscalismak( ,..- +; Sporyapmak; Sure:=uyumak; End; Hi szn etmediimiz ve ( ileride init olarak isimlendireceimiz) basla isimli yordam sizi artmasn. Bu baslang deerleri ile ilgili ilkleme (initilization) yordamdr. lerleyen kesimlerde ayrca ele alacaz. Bu noktadan balayarak nesne ynelimli programlamann (NYP, OOP) baz avantajlarn grebiliriz. Bu yaklam bir nesneyi (object) etkileyen tm eylemler nesnenin kendisine basvurularak gerekletirilebirlir. rnein rencinin alt bir dersi belirtirken Ogrenci.dersler:=Fen; Yerine Ogrenci.derscalsmak(fen); Yazabiliriz. Bu rnekte belirtmek istediimiz temel nokta nesne ynelimli programlama bir nesnenin bilgi alanlarna dorudan eriimi geeksiz klar. Bilgi alanlarna eriim yntem (method) ismi verilen yordamlar aracl iile gerekletirilebilir. Bir nesne (object) kendi iinde tanml veri ve yordamlarn yannda baz veri ve yordamlar dier nesnelerden kaltm (inheritance) yolu ile alabilir. Nesne ynelimli programlamann temel zelliklerinden biri olan kaltm (inheritance) Pascal da kayt (record) bildirimi iinde kayt kullanma yaklamna benzer.

Type Dt_tipi=record Gun,ay,yil:word; End; Kimlik_tipi=record; Adi,soyadi:string[20]; doumTarihi:Dt_tipi; doumyeri:string*15+; end; Bu rnekte daha nce DT_tipi tanmlamas ile birlikte birlikte bildirilen kayt veri tipi daha sonra kimlik_tipi isimli kayt tipinin bildirilmesinde kullanlmtr. Bir baka rnekle devam edelim:

Type Yasi=0..125; Kimlik bilgisi=record Adi,soyadi:string[20]; Yas:yasi; End; Derskodu=0..30; Ogrencibilgisi=record Kimlik.kimlikbilgisi; Ders:derskodu; Danisman:stirng[30]; End; Yukardaki rnekte Kimlikbilgisi tipi herhangi bir kiiyi tanmlamak iin kullanlmtr. kinci kayt tipi ise kimlikbilgisi tipinden yararlanlarak bir renci kimliini tanmlamak zere bildirilmitir. Nesne ynelimli programlamada bu yaklam karmak nesne yaplar oluturmak zere kullanlr. ie gemi nesne tanmlamalarna ilikin bir rnek aada verilmitir.

Type Yasi=0..125; Kisi=object Adi,soyadi:string[20]; Yas:yasi; Procedure basla; Procedure isimver(Y_soyadi,Y_adi:string); End; Derskodu=0..30; Ogrenci=object Ders:derskodu; Danisman:stirng[20]; Procedure Basla; End; Ogenci isimli nesnenin tanmlanmasnda kisi isimli nesneye basvurulduuna dikkat edin; Ogrenci=object(kisi) Bu basvuru nedeni ile kisi isimli nesnenin veri (data) ve yntemleri ( method) kaltm yolu ile ogrenci isimli nesneye gemektedir. Bu nedenle artk ogrenci.soyadi isimli bir veri alanndan szedebiiriz. Bu rnekte kisi isimli nesne ata tipi ( ancestor type) ve ogrenci isimli nesne nesil tipi (descanted type) olarak anlrlar. Bir nesnenin birden fazla ata tipi (ancestor type) olabilir. Bu rnekte verilen ata ve nesil tipleri yakn ata tipi (immediate ancestor type) ve yakn nesil tipi (immediate descentant) olarak anlrlar. Bu biimdeki ata-nesil silsilesine nesne hiyerarisi (object hierarchy) denir. Canllarn kaltsal olarak atalarndan kaltsal zelliklerini aldklar gibi nesneler de kaltm (inheritance) yolu ile ata tiplerinin yntemlerini (method ) edinirler. Yukardaki rnekte isimver(.)isimli yordam kisi tipi ile tanmlanm nesneye bir isim atamak iin yazlmtr. Ogrenci isimli nesne kisi isimli nesnenin zellik ve eylemlerini kaltm yolu ile aldndan isimver() yordamn (yntemini) da edinmitir. Bylece her nesne iin ayr bir isimver(..) yntemi yazma ihtiyac ortadan kalkmtr. Kisi ve ogrenci isimli nesnelerde gzlenen basla isimli yntem (yordam) nesneyi oluturan veri alanlarnn balang deerlerini vermek amac ile yazlmtr. Balang atamalarna ilikin rnek aada verilmitir.

Procedure kisi.basla; Begin Adi,soyadi:=; Yas:=0; End; Procedure ogrenci.basla; Begin nherited basla Ders:=0; Danisman:=; End; Ogrenci tipindeki nesneye balang deeri verirken ilk yaplan ilem ogrencinin yakn atamas olan kisi isimli tipinin basla ynteminin carlmasdr. Bylece ogrenci iindeki kaltm yolu ile gelen alanlarn ikinci kez balatlmas gerekmez. Borland/turbo pasal 7.0 n yeni anahtar szcklerinden olan INHERITED deyimi balatlan nesnenin balatlan nesnenin atasnn ismini bilmeden balatma ileminin yaplabilmesini salar. Bir nesnenin veri alanlar arasnda ismi atasnda bulunan ile ayn olan veri alan olamaz. rnein kisi isimli nesne iinde aoyadi tanmlanmi olduundan kisi neslinden olan ogrenci iinde soyadi isimli bir bilgi alan bulunamaz. Yntemler (virtual fiili yntemlerde olduu gibi ) bu yasaklamann dndadr. Nesne ynelimli programlamann temel hedeflerinden biri de tmleme(Encapsulation) dir. Tmleme ile vurgulanmak isenen nokta programcnn bir nesneyi oluturan bilgi alanlarna dorudan erime ihtiyacnn ortadan kalkmasdr. Daha nce belirttiimiz gibi verilerin ilenmesi amac ile yntem isimli(method) ismi verilen yordamlar kullanlr. Doal olarak nesne ynelimli programlama teknikleri bilgi alanlarna sradan erimeye oranla daha yorucu ve karmak gibi grnmektedir. Fakat bu yaklamn tmleme (escapsulation) zellii sayesinde nesneyi oluturan bilgi alanlarnn yan etkilerden korunduu noktasda gzden karlmamaldr. Bu zellik nedeni ile nesneler ile ilgili yordamlar kolaylk birimler(unit) biiminde dzenlenebilir. Borland/turbo pascal 7.0 ile birlikte gelitirilen yeni deyimlerden biri de PUBLIC anahtar szcdr. PRIVATE ( =zel ) ve PUBLIC(= herkese ak eriilebilir ) anahtar szcklerinin kullanm ile nesne tanmlamasn zel ve genel paralara blmek mmkndr. PUBLIC zellii olan veri ve yntemler tm dier program paralar tarafndan kullanlabilir ve eriilebilir haldedir. Dier yandan PRIVATE zellii tanmlanm olan veri ve yntemler ise yalnz ayn modlndeki (program ya da birimdeki ) alt programlarn (ye altprogramlarn) kullanm ve eriiminde aktr. PRIVATE ya da PUBLIC belirlemesi ile snflandrlmam olan tm tanmlamalar PULIC saylrlar.

Bir rnek ile konuyu daha anlalabilir hale alalm: Type Seenekler:(sinema, Tiyatro, Mac); Elence=object Seenek=seenekler; Function nereyegideyim:seenekler; Procedure sinemayagit; Procedure tiyatroyagit; Procedure macagit; End; rnekte eylemler konusunda gerekli yntemler yazlm olduundan Secenek isimli veri PRIVATE blgeye aktarlabilir. Type Seenekler:(sinema,tiyatro,mac); Elence=object Function nereyegideyim:seenekler; Procedure sinemayagit; Procedure tiyatroyagit; Procedure macagit; PRIVATE Seenek:seenekler; End; Bylece rnek nesne tanmlamasnda seenek isimli bilgi alan yalnz elence isimli nesnenin yntemlerine ak braklmtr. Baka yntemlerin bu alanlara erimesi mmkn deildir. PUBLIC ve PRIVATE alanlar ayn amaca ynelik olarak daha ak olarak belirtmek iin aadaki gibi bir bildirimde de bulunabilirdik.

Type Seenekler:(sinema,tiyatro,mac); Elence=object PRIVATE Seenek:seenekler; PUBLIC Function nereyegidelim; Procedure sinemayagit; Procedure tiyatroyagit; Procedure macagit; End; Bylece zel ve genel kullanma ak alanlar, daha net biimde belirlenmi olmaktadr. Nesneler ve yntemler altyordamlar ele alan blmde ayrntl olarak yeniden ilenecektir. Ne yazk ki Nesne ynelimli programlama konusunda henz yeterli Trke kaynak bulunmamaktadr.

KMELER

Kme bir ilikili elemanlar koleksiyonudur. Pascal da kme (set) ilgili karekterler ya da saylar topluluudur. rnein alfebenin byk harflerinden oluan bir kmeyi Var Harf:set of A..Z; Tanmlayabiliriz. Kmeler ierdikleri elemanlara gre ayr grupta ele alnabilirler. 1- Saysal kmeler 2- Karakter kmeleri 3- Kullanc tanml kmeler Saysal kmelerdeki elemanlar yalnz byte trnde tamsay elemanlar olabilirler. Bu nedenle saysal kmedeki bir deer 0 ile 255 arasnda olmaldr. Baz saysal kme rnekleri aada verilmitir.

Var Notlar:set of 0..100; Birkume:set of byte; Yukardaki rnekte bir kume tanmlanmasn elemanlar belirtilmemitir. Bu belirleme programn ilerleyen blmlerinde yaplabilir. rnein 25 ten 50 ye kadar olan deerleri iermesini istersek Birkume:=[25..50]; Biiminde bir satr kodlayabiliriz. Bir kmenin herhangi bir elman ierip iermedii IN operatr ile sorgulanr. rnein varyok bir boolean deiken ise Varyok:=32 in birkume; Cmlesi sonucunda varyok deikeni TRUE deerini alacaktr. Dier yandan Varyok:=75 in birkume; Cmlesinde varyok deikeni FALSE deerini alacaktr. Karakter kmeleri , elemanlar ASCII karakterleri olan kmelerdir. Tamam 256 tane olan ASCII (0-255) karakterlerini ieren bir kme yazmak istersek Var Tumkar: set of char, Biiminde bir bildirimde bulunabiliriz. Yine Var Tmharf=set of char; Biiminde bir tanmlama yapp bu kmenin byk ve kk harfleri iermesini istediimizde Tmhar:=*A..Z++*Z..z+; Komutunu verebiliriz. Kullanc tanml kmeler ise say ve karakter dnda elemanlar ierirler. rnein renkleri ieren bir kme gelitirmek iin Renk:set of (sari,kirimizi,yesil,mavi); Biiminde bir tanmlama yapabiliriz. Bir byk aileyi kme halinde bildirirken Var Aile:set of (sari,krmz,yesil,mavi); Tanmlamasn kullanabiliriz.

Sfr sayda elemanl bo kmeyi (empty set) tanmlamak iin * + ifadesi kullanlr. Btn kmelere bo kme atamas yaplabilir. Bir kme maximum 32 byte lk bellek yeri kullanr. Genel olarak sylendiinde 256 dan az sayda eleman olan kmeler 32 bytettan daha az bellek yeri igal ederler. Bir kmenin her eleman bir bitle gsterilir. En ok 256 (32*8=256) elemana izin verilmesinin nedeni de budur.

ALTYORDAMLAR, FONKSYONLAR ve YNTEMLER Borland turbo pascal n modler zellikleri nedeni ile bu dilde altyordamlar (procedure) ya da fonksiyon (function) ve nesne ynelimli programlamann eylem biimi olan yntemler (method) nemli bir yer tutar.

PROCEDURE Yapsal programlamann asal yaklamlarndan biri temel programlamay birtakm paralara blerek gerekletirmekdir. Pascal da bu paralar Altyordam(procedure) ya da fonksiyon(function) olarak kodlanrlar. Yapsal programlamann temel tercih nedeni modllerin bamsz olarak gelitiirlmesi ve kolaylkla snanmasdr. Dier yandan program modllerine parametre geirerek bilgi aktarmadaki kolaylk tevik edici bir zelliktir. Bir program ya da bir birim (unit) iindeki bir altyordam (procedure) iki eden oluur: 1- Tantc ismi (altyordam bal=procedure ismi) 2- Altyordam blou (procedure kodlar) Alt yordamn yapsna ilikin bir rnek aada verilmitir. Program ornek41; Var A,B,T:integer; Procedure toplam; Begin T:=A+B; End;

Begin , tamsaylarn girilmesi Writeln(birinci tamsayy giriniz); Readln(A); Writeln(ikinci say giriniz); Readln(B); , alt yordamn arlmas { Sonucun grntlenmesi } Writeln(A,+,B,=,T); End.

PROCEDURE deyimi pascal n ayrlm anahtar szcklerinden biridir ve bir altyordam tanmlamasnn baladn bildirir. PROCEDURE deyiminden sonra tek ve esiz olan bir altyordam ismi gelmelidir. Bu rnekte PROCEDURE ismi olarak toplam kullanlmtr ve bu program kapsamnda toplam ismi bir baka amala kullanlamaz. Genelde altyordamlara isim verilmesi tantc isimlerine uygulanan kurallarla bamldr. Toplam isimli rnek altyordam A ve B tamsaylarn toplayarak sonucu T isimli deikene atamaktadr. Dikkat edilecei gibi A, B ve T isimli deikenler toplam isimli procedure iinde deil ana program bal altnda tanmlanmtr. Bu biimde ana program iinde tanml ve procedure iinde de geerli olan deikenlere global (btnsel) deikenler (global variable) ismi verilir. Global deikenler (procedurelerde ayn isimle yeniden tanmlanmadklar srece) tm procedure ve funtion blmlerinde geerli olurlar. Alt yordamlara bilgi aktarmann tek yolu global deikenler kullanmak deildir. Ayrca srekli global deiken kullanma yaklamda ( bu deikenlere yanllkla farkl deerler atabilecei varsym ile ) yapsal programlama bak asn zedelediinden tercih nedeni deildir. Procedure bilgi aktarmann temel yollarndan bir dieri parametre geirmektir. Bu yaklam aadaki programla rneklenmitir

Program ornek42; Var A,B,T:integer;

Procedure toplam(x:integer; y:integer; var z:integer); Begin Z:=X+Y; End; Begin , tamsaylarn girilmesi Write(birinci tamsayy girin ); Readln(A); Write(iikinci tamsayy giriniz); Readln(B); , alt yordamn arlmas Toplam(A,B,T); { sonucun grntlenmesi } Writeln(A,+,B,=,T); End. Yukardaki rnekte toplam(A,B,T); satr ile toplam bulmak zere procedure arlmaktadr. Bu ar ile ana programdaki A deikeninin tad deer, procedurun X deikenine B deikeninin deeri Y deikenine kopyalanmaktadr. arnn yapld anda ana programdaki t deikeni henz deer almadndan Z deikenine aktarlan deerin bir nemi yoktur.

rnek procedure baln incelediimizde Z deikeni tanmlamasnn X ve Y deikenlerinin tanmlamasndan farkl olarak var anahtar szcn ierdiini grmekteyiz. Bu szck bize z isimli deikenin procedurede ald deeri ana programa geri getireceini bildirmektedir.(Ayrca bu yaplan ilemin farkl tanmlamalara yol aabileceini ve bunun aktarlabilecek durumda olduunuda gsterir.) X ve Y deikenleri sadece procedure ye bilgi (deer) gtrmektedirler. Bu tr parametrelere deer parametreleri (value parameter) ismi verilir. Procedure balnda var ile ifade edilen Z deikeni gibi parametreler ise procedure hem deer aktarrlar hem de procedurede edinile deerleri geri getiriler. Bu tr parametreler referans parametreleri (referance parameter ) olarak isimlendirilirler. Dier yandan borland/turbo pascal 7.0 a C programlama dilinin zelliklerinden olan deimez parametreler (constant parameter) de eklenmitir. Bu amala procedure balnda const deyimi kullanlmaktadr. rnek programdaki deikenlerin snflandrlmas aadaki tabloda zetlenmitir.

arrken deer aktarma A.>X B......>Y

dnerken deer geri getirme -

parametre tr

deer parametresi deer parametresi

T..>Z

T<.Z

referans parametresi

Bir procedure var anahtar szc ile referans parametresi olarak geirilen bir deiken, procedure de ald deeri procedurenin ileyii bittikten sonra depolamaya devam eder. k borland/turbo pascal procedure referans parametresinin deerini deil bellek adresini geirir. Procedurede yaplan deiiklikler bu bellek gz nnde gerekleir. Yukardaki rnekte ana programn T deikeni ve procedure Z deikeni ayn bellek yerini paylamaktadrlar. Bu nedenle birinde yaplan deiiklik dierinde de yaplm saylr. Deer parametreleri, var ile tanm ile geirilen referans parametrelerinden farkldr. rnek programda X ve Y deikenleri deer parametreleridir. Deer parametreleri kullanmnda procedurede yeni bir deiken yaratlr ve arma komutunda kullanlan deikenin deerinin kopyas bu yeni deikene aktarlr. Procedure iinde ad geen yeni deiken kullanlr. Bu nedenle orijinal deikenin deeri proceduredekki deiikliklerden etkilenmez. Procedure iindeki yeni deikenin deeri ayn nedenle d ortama yansmaz. Procedureden klmas ile yaratlan yeni deikenler deerleri ile birlikte yok olurlar. Procedure her yeniden arlnda bu tr deikenler bellekte batan yaratlrlar. Baz deikenlerin procedure ya da fonksiyon gibi altyordamlarda yanllkla deimesi istenmez. Yukarda anlatld gibi bu amala sadece deer kopyalayan deer parametreleri kullanlr. Fakat diziler (array) ok byk miktarda bilgi ieren deikenlerin deer parametreleri olarak aktarlmas istenmeyen bir durumdur. lem sresinin artmas yannda bellek yetmezlii sorunlarna da neden olabilir. Bu sorunlarn almasna ynelik olarak borland turbo passcal 7.0 versiyonunda deimez parametreler (constant parametre) zellii gelitirilmitir. C programlama dilinin temel elerinden olan bu yeni pascal zelliini bir rnekle aklamaya alalm:

Program degerparametresiaktarma; Uses crt,dos; Type Dizitipi=array[1..2000] of integer; Var Dizi:dizitipi; K:word; Procedure ornekproc(pardizi:dizitipi); Begin Writeln(ilk eleman:,pardizi*1+); Pardizi[1]:=-999; End; Begin ,diziye ilk deerler veriliyorFor k:=1 to 2000 do Dizi][K]:=K; ,dizinin ilk eleman grntleniyor Writeln(dizi[1]); , procedure arlyorOrnekproc(dizi); , dizinin eleman son kez grntleniyorWhile not keypressed do; End.

rnek programda 2000 elemanl bir dizi yaratldktan sonra dizinin tm elemanlarna ilk deer verilmektedir. Daha sonra Dizi*1+isimli birinci eleman deeri ekrana yazdrlmakta ve ardndan dizinin tamam procedureye geirilerek ornekproc isimli altyordam arlmaktadr. Altyordam, dizinin ilk elemann ekranda grntledikten sonra bu elemann deerini deitirmektedir. Altyordamn sona ermesi ile ana ekrana dnlmekte ve dizinin birinci eleman bir kez daha ekrana yazlmaktadr.

Sonuta ekrana yazlan deerde birbirinin ayn olacaktr. nk ad geen dizi, altyordama deer parametresi olarak geirildiinden altyordam iinde yaplan deiikliin d ortamdaki orijinal diziye yansmas beklenmez. Buradaki temel sorun altyordamn her arlnda 2000 elemanl bir yeni dizinin almas ve 2000 elemann yeni diziye kopya edilmesinin getirdii verimsizliktir. Procedure balnda var kullanarak referans parametresi yaklam ile Procedure ornekproc(var pardizi:dizitip); Biiminde deitirilen tanmlama ise dizinin ilk elemannn altyordamda deimesinin d ortama yansmasna neden olacaktr. Halbuki procedure balnn Procedure ornekproc(const: pardizi:dizitipi); Biiminde deitirilmesi, 2000 elemann kopyalanmas ihtiyacn ortadan kaldrrken yan etkilere neden olabilecek istenmeyen deiiklikleri yakalayacaktr. CONST kullanm ile aktarlan bir deiken zerinde deiiklik yaplmas durumunda derleyici, 122 numaral hatal deiken kullanm(invalid variable referance) hatasn verecektir. Bylece programc deitirmemesi gereken bir deiken zerinde yanllkla deiiklik yapmak zere olduunu kavrayacaktr.

FUNCTION Pascal da altprogramlar bal altnda anlalan yapsal modllerden bir dieri fonksiyonlardr. Fonksiyonlarn altyordamlara (procedure) oranla farkn anlatabilmek iin altyordam ve fonksiyon olarak ayr ayr yazlm bir uygulama rnei zerinde alalm:

Procedure toplam(X,Y:integer; var z:integer); Begin Z:=x+y; End; Function toplam(x,y:integer):integer; begin Toplam:=x+Y; End;

rnekte toplam isimli altyordam (procedure) X ve Y tamsaylarnn toplamn referans parametresi trndeki Z deikeni aracl ile getirilir. Procedure durumunda geri dndrlecek deer var ile tanmlanm bir deikene aktarmaktadr. Fonksiyon olarak tanmlanm toplam modl ise toplam

kendisi getirmektedir. Fonksiyon sona erdirilmeden nce geri dndrlecek deer fonksiyonun ismine atanmaktadr. Dier yandan procedure olarak yazlan toplam altprogram Toplam(A,B,T); { procedure iin} Olarak arlrken function biiminde gelitirilmi toplam altprogram T:=toplam(A,B); { fonksiyon iin} Komutu ile arlr. Ayrca fonksiyonun deikenler gibi integer, Word,string vb. biiminde bir veri tipi olmas nedeni ile ifadelerde de kullanlmas mmkndr. f (toplam(A,B)-23>0 then bakiye:=alacak-toplam(R,S); Bu nedenle tanml tek bir deerin geri dndrlecei durumlarda fonksiyon(function) yaklam kullanlr. Birden fazla deerin geri dnmesi beklenen ya da geri dnecek deerin bulunmad veya belirsiz olduu durumlarda ise procedure yaklam tercih edilir. C programlama dilinde altprogramlar yalnz fonksiyon trnde gelitirilirler. MS-DOS iletim sisteminin ve WNDOWS ortamnn temelini oluturan C dilinin bu zellii borland/turbo pascal 7.0 da yanstlmtr. Gelitirilmi sz diizim (extended syntax) olarak bilinen ,$X+- derleyici komutunun kullanm ile pascal fonksiyonlar geri dndrlen deer dikkate alnmakszn procedure gibi arlabilirler. Konu ile ilgili bir rnek aada verilmitir. { $X+} {extended sytanx} Function yenitoplam(X,Y:integer):integer; Var W:integer; Begin W:=X+Y; Writeln(W); Yenitoplam:=W; End; Yeni toplam isimli fonksiyonun geri dnen deerine ihtiya duyulduu anda fonksiyon ars T:=yenitoplam(A,B); Biiminde yaplabilir. Fakat toplamn ekranda grntlenmesinin yeterli olduu bir durumda dnen deeri herhangi bir deikene atamann gerei yoktur. Bu durumda ,$X+- derleyici komutu yardm ile yenitoplam(A,B);

Yazarak fonksiyonu bir altyordam (procedure) gibi armak yeterlidir. ,$X+- derleyici komutu aracl ile fonksiyonlarn altyordam gibi arlabilmesi SYSTEM birimi(unit) iinde tanmlanm yerleik(builtin) fonksiyonlar iin geerlidir. Bu durumlarn dnda denenmesi durumunda derleyici geersiz deiken kulllanm (invalid variable reference) hatas verecektir. ALTPROGRAMLARIN NCEL ve TANIM BLGELER Pascal n ayrt edici zelliklerinden en belli balcas, blok yapl bir dil olmasdr. Bu zellii ile rnein C dilinden daha yapsaldr. Pascal bir programn her cmlesi, bir kod blounun parasdr. Bir pascal programnn en d ve en dk dzeyli blou ana program bloudur. Ana program iinde, i ie gemi dier bloklar oluturan bloklar, ana program zerinde temellendirilir. Bir pascal programna yeni altyordam(procedure) ve fonksiyonlarn eklenmesi, yeni tanm dzeyleri oluturulmas anlamna gelir. Aadaki rnekte birden fazla bloktan oluan ok dzeyli bir pascal program verilmitir. Program cokblokluprorgam1; {dzey 1} Procedure altyordam1; { dzey2} Begin ,End; Function fonksiyon1; {dzey2} Begin ,.End; Procedure altyordam2; {dzey2} begin ,.End; Begin , dzey1 in devam ,.End. okblokluprogram1 isimli rnek program, iki dzeyden olumaktadr. Dzeylerin i ie geirilmesi, daha karmak bir hale getirilebilir.

PROGRAM okblokluprogram2;{dzey1} Procedure altyordam-a;{dzey2} Procedure altyordam1;{dzey3} Begin ,..End; Function fonksiyon1;{dzey3} Begin ,End; Begin ,dzey2 nin devam,End; Procedure altyordam-b;{dzey2} Begin ,End; Begin , dzey1 in devam,.End. Procedure ( ya da fonksiyon) bloklarnn i ie geirilmesi, zel tanm blgeleri yaratr. Bir procedure (ya da fonksiyon), ereveleyen altprograma zg hale gelir. Dier altprogramlarn ieride kalm bu bloa erimeleri mmkn deildir. bu yolla baz yordamlarn zelletirilmesi, baka program paralar tarafndan kullanmn engelleyerek olas hatalarn nne geer. okblokluprogram2 isimli rnekte, hangi yordamlarn hangi yordamlar arabilecei aada listelenmitir.

AIRAN Altyordam-a

AIRILAN altyordam-a Fonksiyon1 Altyordam1

Altyordam1

altyordam1 Altyordam-a

Fonksiyon

fonksiyon1 Altyordam1 Altyordam-a

Altyordam-b

altyordam2 Altyordam-a

Tabloda dikkatinizi ekecei gibi, borland/turbo pascal altprogramlar kendi kendilerini de arabilmektedirler. C gibi baz programla dillerinde altprogramlarn sras nemli deildir. fakat Cye gre daha dzenli bir dil olan pascal da henz tanmlanmam bir altprogramn arlmasna izin verilmez. Bu nedenle yukardaki rnekte FONKSYON1, altyordam1 i arabilirken alyordam1 henz tanmlanmam olan fonksiyon1 i aramamaktadr. Henz tanmlanmam bir alt programn arlabilmesinin yolu FORWARD anahtar szcnn kullanmdr. FORWARD kullanmna ilikin bir rnek aada verilmitir. Procedure sonrakiproc( ,- ); FORWARD; Procedure oncekiproc( ,.- ); Begin ,.Sonrakiproc( ,.- ); , .. End; Procedure sonrakiproc; Begin , . End;

Bu rnekte FORWARD ile bildirilen satrn bulunmamas durumunda 3 numaral bilinmeyen tantc (unknown identifier) hatas oluacaktr. ( FORWARD ile yaplan tanmlama olmasa idi daha sonra tanmlanan sonrakiproc isimli altyordam aramayacaktk). Dier yandan procedure balnn FORWARD tanmlamasnda tam olarak, fakat bloun tanmlanmas srasnda sadece ismen verildiine dikkat ediniz. FORWARD bildirimi ile aklayc bir baka rnekte devam edelim. Program donmedolap; Uses crt; Var M:longint; Procedure yordam2(K:longint);FORWARD; Procedure yordam1(N:longint); Begin nc(N); Writeln(N); Yordam2(N); End; Procedure yordam2; Begin nc(K); Writeln(K); f keypressed then halt; Yordam1(K); End; Begin Writeln( kesmek iin bir tua basnz ); M:=0; Yordam1(M); End.

Bu rnekte Yordam1 ve Yordam2 isimli altprogramlar bir tua baslncaya kadar srekli olarak birbirlerini armaktadrlar. Yordam1 den arlmasna ramen daha sonra tanmlanan Yordam2 altprogramnn bu durumu FORWARD deyimi ile derleyiciye iletilmektedir. BASIC ve COBOL gibi baz dillerde ak veya kapal biimde tanmlanan tm deikenler programn tamamnda geerlidirler. Bir baka deyimle bu tr deikenler global deikenler (global variable) olarak anlrlar. Global deikenler pascal nda bir zellii olmakla birlikte bu yapsal dil, tercihini yerel deikenlerden (local variable) yana kullanr. Yerel (local) deikenler programn ancak bir blmnde tanmldrlar. Yerel deikenler aracl ile verilerin tanm blgelerinin kstlanmas bu bilgilerin istenmeyen yan etkilerden zarar grmemesini salar. Yerel deiken kavramn aklamak zere aada bir rnek gelitirilmitir. Program yerel_degisken; Var A:real; , A nn tanm blgesi dzey=1-

Procedure ornekyordam1; Var B:real; { B nin tanm blgesi dzey=2Procedure ornekyordam2; Var C:real; , C nin tanm blgesi dzey=3Begin , dzey=2 tanm blou } End; Begin , dzey=1 tanm blou End; Begin , ana program tanm blou End. Bu rnekte A, B ve C isimleri ile bildirilen deikenlerin tanm blgeleri iaretlenmitir. C deikeni yalnz Ornekyordam2 altprogram iinde tanmldr. B deikeni ise Ornekyordam1 ve Ornekyordam2 altprogramlar iinde tanmldr. A deikeninin tanm blgesi ise programn tamamdr. Eer A

deikeni, Ornekyordam2 altprogramnda yeniden tanmlanm olsa idi altprogram iinde bu yeni deiken ve dnda ana programn bildirim blmnde tanmlanan deiken geerli olacakt. ALTPROGRAM PARAMETRELER imdiye kadar olan rneklerde altprogramlar arrken gerekletirdiimiz parametre geirme ilemlerinde veren ve alan parametrelerin ayn tipten olmasna zen gsterdik. rnein arann real ve arlann integer olduu bir durumda ne ile karlaacamz belirlemedik. Bir altprogramn parametre listesinde kullanc tanml tiplerde dahil olmak zere PAscal n izin verdii tm veri tiplerine uygun parametreler bulunabilir. rnein aadaki procedure bal deiik trden parametrelerden olumutur. Program kataruzunlugu; Type Str80=string[80]; Str11=string[11]; Var St:str80; St:str11; X:real; Procedure Sayiyap(st:str11; var R:real); Var K:integer; Begin Val(St,R,K ); End; Begin Readln(st2); Sayiyap(st2,X); { tip uyumu var } Writeln(X); Readln(st1); Sayiyap(st1,X); , hatal: tip uyumu yok -

Writeln(X); End. Bu rnekte ikinci altprogram arsnda 80 uzunluunda bir katar 11 uzunluundaki bir katara aktarlmak istendiinde bir tip uyumu hatas oluacaktr. Fakat byle bir ilemi yapmak kimi durumlarda gerekli ve geerli olabilir. Bu amaca ynelik olarak programn banda ,$V-}(strict varstring) derleyici komutu kullanlmaldr. Bylece Pascal n katar konusundaki kuralcl geici olarak iptal edilmi olacaktr. Altprogramlarda yapsallk salama yaklamndaki temel baklardan biri de tekrar kullanlabilir modller yaratmaktr. Bu nedenle pascal programlarnda sklkla yaplan iler, altprogramlar halinde dzenlenirler. Borland/turbo Pascal bu amaca ynelik olarak yeni bir zellik, ak parametre (open parameter) yaklam getirmitir. Ak parametre taklamnda, bir altprograma geirilen bir dizinin(array) boyutlar, arlan deil, fakat aran yordam tarafndan belirlenir. Dilin yeni versiyonundan nceki durumu belirlemek iin bir rnekler devam edelim. Geleneksel pascal da bir programa bir diziyi parametre olarak geirmenin yolu aada rneklenmitir. Program ackparametreyok; Const Son=100; Type Dizitipi=array[1..son] of real; Var Dizi:dizitipi; K:1..son; Function toplam(Fdizi:dizitipi):real; Var T:real; M:integer; Begin T:=0.0; For M:=1 to son do

T:=T+Fdizi(M); Toplam:=T; End; Begin { dizinin retilmesi } For K:=1 to son do Dizi[K]:=1.0*k*k+1.0; , Dizi toplamnn grntlenmesi Writeln(toplam(dizi)); ,.. Readln; End. Dier yandan bu rnei, ak parametre yaklamn kullanarak dizi boyutuna baml olarak kurtarabiliriz. Program deiik boyuttaki real dizilerle ileyebilir hale getirmek iin programda aadaki deiiklikleri yapmak gerekir. Program acikparametrevar; {$P+} { open string params} Const Son=100; Type Dizitipi =array {1..son] of real; Var Dizi:dizitipi; K:1..son; Function toplam(Fdizi:array of real ):real; Var T:real; M:integer;

lkno,sonno:integer; Begin T:=0.0; lkno:=low(fdizi); sonno:=High(fdizi); For M:=ilkno to sonno do T:=t+Fdizi[M]; Toplam:=T; End; Begin { dizinin retilmesi } For K:=1.0*K*K+1.0; , dizi toplamnn grntlenmesi Writeln(toplam(dizi)); , . Readln; End. Ak parametre kullanm ile dizi tanmlamas yapabilmek iin dizi_ismi:array of eleman_tipi dizilimi kullanlmaldr. Dizilime ilikin baz altprogram balklar aada verilmitir. Procedure ortalama(basinc:array of real); Procedure istatistik(dizi:array of byte); Function kucuk(terim:array of char):char; arlan altprogram, boyutlarnn alt ve st snrlarn bulmak iin LOW ve HIGH fonksiyonlarn kullanabilir. Yukardaki rnek programda Fdizi isimli real dizinin ilk indis numarasn (boyut balangcn) bulmak iin LOW(fdizi) ve son eleman numarasn ( boyut sonunu ) bulmak iin HIGH(fdizi) ifadeleri kullanlmtr. Dier yandan yine rnekte grld gibi, ak parametrelerin kullanmna izin vermek iin ,$P+- derleyici komutu verilmelidir.

Karakter katarlar (string) esas olarak char dizileri olduundan, farkl uzunluktaki katarlarn parametre olarak geirilmelerindeki uyumsuzluklar da ak parametre opsiyonu ile giderilebilir. Daha nce verdiimiz katar rnei aadaki gibi gelitirilebilir. Program kataruzunlugu; {$P+} {<-- Ak parametre komutuType Str80=string[80]; Str11=string[11]; Var St1:str80; St2:str11; X:real; U:byte; Procedure sayiyap(st:str11; var R:real); Var K:integer; Begin Val(st,R,K); End;

Begin Readln(st2); Sayiyap(st2,X); Writeln(x); U:=high(st2)-low(st2)+1; Writeln(U); Readln(st1); Sayiyap(St1,x); Writeln(X); End.

Kmelerin (set) parametre olarak geirilmesi de katarlar andrr. Bu amala nceden tanmlanmaldr. Konuya ilikin bir rnek aada verilmitir. Program parammetrekume; Type ABC_tipi:set of A..Z; Var Alfabe:ABC_Tipi; Katar:string; M:byte;

Function alfabetik(c:char; ABC:ABC_tipi):boolean; Begin Alfabetik:=C in ABC; End;

Begin Readln(katar); For M:=1 to lenght(st) do writeln(st*M+, ,alfabetik(st*M+, alfabe)); Readln; End.

Bu rnek programda klavyeden girilen bir katar oluturan karakterler sorgulanarak alfabetik olan ve olmayanlar ayrlmaktadr. Herhangi bir karakterin alfabetik olup olmad ise fonksiyon aracl ile saptanmaktadr. Yukarda verilen rnekte olduu zere Function alfabatik(c:char; abc:Abc_tipi):boolean; Char ya da ABC_Tipi gibi veri tipi belirtilerek bildirilen parametrelere tiplendirilmi parametreler (typed parameter) ismi verilir. Turbo Pascal, tipi bildirilen parametreler yannda tiplendirilmemi parametreler (untyped parameter) n kullanmnada izin verir. Tiplendirilmemi parametreler kullanmaktaki temel avantaj, bu parametreler aracl ile geirilecek bilgilerin herhangi bir tipte uygun olma zorunluluunun kaldrlmasdr. Herhangi uzunlukta herhangi iki deikenin eitlik karlatrmasn yapan aadaki rnekte bir ve iki isimli tiplendirilmi parametreler kullanlmaktadr. Function esitmi(var bir, iki; uzunluk:uzunluk word):boolean; Typed Alan=array [1..65534] of byte; Var S:word; Begin S:=uzunluk; While (s>0) and (alan(ilk)[S]=alan(iki)[S]) do Dec(s); Esitmi:=(S=0); End;

Grld gibi yukardaki rnekte fonksiyon balnda bir ve iki isimli parametrelerin tipleri verilmemitir. Bu deikenlerin tipleri, programn ilerleyen satrlarnda tip dnm (typed casting) teknii ile belirlenmitir. Tip bildirimli para geirilmesi srasnda derleyici, hatal veri geirilmesi ilemini yakalamak zere ilemi izlemektedir. Tiplendirilmemi parametrelerde ise bu ilem gerekletirilmez. Bu nedenle tipi bildirilmeyen parametrelerin tipinin belirlenmesi ve bylece ilenmesi kullancya kalmtr. Bu tr parametrelerle almann zorluuda bu noktadan kaynaklanr. Fakat tip bildirimsiz parametrelerin yazlm daha genel geer klmak gibi stn zelliide unutulmamaldr. Aadaki rnekte tip bildirimsiz olarak verilen X ve Y isimli iki deikenin tad bilgiler yer deitirilmektedir. Program degiskendegistir; Var B1,B2:byte; I1,I2:integer; R1,R2:real; S1,S2:string; Procedure degistir( X,Y; U:byte); Type Dizi=array [0..255] of byte; Var B,M:byte; Begin For M:=0 to U-1 do begin B:=dizi(X)[M]; Dizi(X)[M]:=dizi(Y)[M]; Dizi(Y)[M]:=B; end; End; Begin { byte } B1:=1; B2:=2;

Writeln(B1,B2); Degistir(B1,B2,sizeof(B1)); Writeln(B1,B2); { integer } I1:=100; I2:=200; Writeln(I1,I2); {REAL } R1:=1000.1; R2:=2000.2 Writeln(R1,R2); Degistir(R1,R2,sizeof(R1)); Writeln(R1,R2); {Stirng} S1:grcan; S2:Banger; Writeln(S1,S2); Writeln(S1,S2); End. Bu son rnekte grld gibi X ve Y deikenlerin durumuna gre byte, integer, real veya string olabilmektedirler.imdi ayn rnei tiplendirilmemi parametre yaklamn sergilemek zere bir baka biimde yazalm. Bu rnekte de X ve Y deikenlerinin durumuna gre tip deitirebildiklerine dikkat edin: Program degiskendegistir; Var B1,B2:byte; I1,I2:integer; R1,R2:real; S1,S2:string; Procedure degistir(var X,Y; c:char;

Var B:byte; I:integer; R:real; S:string; Begin Case UPCASE(C) of B:begin B:=X; X:=Y; Y:=B; End; I:begin I:=X; X:=Y: Y:=I; End; R:begin R:=X; X:=Y; Y:=R; S:begin S:=X; X:=Y; Y:=S; End; End; End; Begin {byte} B:=1; B:=2; Writeln(B1,B2); Degistir(B1,B2,B); Writeln(B1,B2);

{integer} I1:=1; I2:=2; Writeln(I1,I2); Degistir(I1,I2,I); Writeln(I1,I2); { Real} R1:=1; R2:=2; Writeln(R1,R2); Degistir(R1,R2,R); Writeln(R1,R2); {string} S1:=Grcan; S2:=Banger; Writeln(s1,s2); Degistir(S1,S2,S); Writeln(S1,S2); End. Tiplendirilmemi parametrelerin (untyped) parametrelerin neminden sz ettikten sonra altprogramlara sabit deerlerin de geirilebilecei olgusu ile devam edelim. Bir deer parametresinin (value parameter) geirilebilecei her durumda bir sabit deerde geirilebilir. Dier yandan referans parametresi olarak tanmlanm deikenlere ise sabit deer geirilmesi mmkn deildir. nk pascal da sabitler adresleri deil fakat deerleri ifade ederler. Aada konuya ilikin hatasz kk bir rnek verilmitir. Program sabitdegergecirme; Function toplam(A,B:integer):integer; Begin Toplam:=A+B; End;

Begin Writeln(toplam(10,5)); Readln; End.

You might also like