Google
 

8 Ekim 2007 Pazartesi

iç Pascalın Tarihesi

içPascalnTarihesi Standart Veri Tipleri gsiDeiken ve Sabit Tanmlama çiProgramlara Aklama Eklenmesi göüsüDeer Atama ve Tip Dnmleri Eklenmesi öisisiOperatrler(Aritmetik, Mantksal, Karlatrma)
· Aritmetiksel Operatörler
· Mantiksal Operatörler
· Karsilastirmali Operatörler
IsiiPascalda lem Sras iiiiPascal Programnn Blok Yaps sÇiisIsGiri/k lemleri Çiiükt Dzeni sisiiKarlatrma Komutlar
· IF..THEN..ELSE
· CASE..OF
öüiDng Komutlar
· FOR..DO
· öüüREPEAT..UNTIL dngs
· öüüWHILE..DO dngs
giiType Blounun Kullanm Diziler Pascalda Yapisal Programlama
· Function
· Procedure
· Unit
Pscalda Kullanilan Dosya Yapilari
· Text Dosyalar
· Random Dosyalar
· Binary Dosyalar
Pointer Kullanimi Nesneye Yönelik Programlama ve Pascal
· Class
· Object
· Method
· Inheritance
· Override
· Abstract Nesneler
·
·
Pascalda Veri Tipleri


Tamsayi Tipleri Pascalda degiskenleriniz için tanimlayabileceginiz veri tiplerini asagida bulabilirsiniz. Isaretli veya isaretsiz tamsayilari ifade etmek için kullanabileceginiz çesitli araliklari kapsayan degisken tipleridir. Programlarinizda en çok kullanacak oldugunuz tipler de yine bu tiplerdir.
Tip Deger Açiklama
Byte 0..255 Isaretsiz tamsayilar (8 bit).
Shortint -128..127 Isaretli tamsayilar (8bit).
Integer -32768..32767 Isaretli tamsayilar (16 bit)
Word 0..65535 Isaretsiz tamsayilar (16 bit).
Longint -2147483648..2147483647 Isaretli tamsayilar(32 bit).
Tamsayi Tipleri Bu sayi tipleri sabit veya kayar noktali gerçel sayilari ifade etmekte kullanilirlar. Özellikle büyük rakamlarla veya bilimsel arastirmalarla ugrasiyorsaniz bu tip degiskenlere çok isiniz düsecek demektir.
Tip Deger Basamak Açiklama
Real 2.9e-39..1.7e38 11-12 6 bytelik yer tutar
Single 1.5e-45..3.4e38 7-8 4 bytelik yer tutar
Double 5.0e-324..1.7e308 15-16 8 bytelik yer tutar
Extended 3.4e-4932..1.1e4932 19-20 10 bytelik yer tutar
Comp -9.2e18..9.2e18 19-20 8 bytelik yer tutar
Asagidaki degerler bilimsel notasyonda yazilmistir. Düzgün görüntüsü için tu örnekten yararlanabilirsiniz : 2.9e-39 = 2.9 * 10-39 Karakter ve Alfanümerik Tipler Bu tip degiskenlerin içinde isim, adres gibi sayisal olmayan degerler tutulur.
Tip Deger Açiklama
Char ‘a’,’z’... Tek karakterlik degiskenler (8 bit).
String (0..254 karakter) Karakterlerden olusan dizidir
Mantiksal Tip Sadece dogru veya yanlis degerini tutabilen degiskenlerdir. Karar vermenizde size yardimci olacaklarina emin olabilirsiniz. Dogru için 1, yanlis için 0 olarak düsünebilirsiniz.
Tip Deger
Boolean True,False (1,0)

Pascal'da Degisken ve Sabit Tanimlamala


Var Blogu: Pascalda degisken tanimlamak için VAR blogu kullanilir. Bu blokta bir degisken tanimlamak için önce degiskenin adi, sonra “:” (iki nokta üstüste) ve son olarak da degiskenin tipi belirtilir. Ayni tipite olan degiskenleri virgülle ayirarak bir defada da tanimlayabilirsiniz. Farkli olup olmadigini kontrol eder
<> Büyük mü?
<= Küçük veya esit mi? >= Büyük veya esit mi?

Pascal'da Operatörlerin Önceligi



Operatör Öncelik
@, Not Yüksek
*, /, div, mod, and, shl, shr Ikinci derece
+, -, or, xor Üçüncü derece
=, <>, <, >, <=, >=, in Dördüncü derece
1- Iki operand arasindaki farkli operatörlerde önceligi yüksek olan önce isleme girer. Tips : Yani daha önce okullarda gösterilen ÇaBuTÇu örnegi gibi. 2- Eger ayni öncelige sahip operatörler kullaniliyorsa öncelik soldakinindir. 3- Tüm bu operatörlerin önceligini degistirebilecek tek sey parantezlerdir. Parantezler daima ilk olarak isleme girer. Parantez içi islemlerde de yukaridaki öncelikler geçerlidir.
Programinizin sizin istemediginiz bir sonuç çikarmasini istemiyorsaniz bol bol parantez kullanin. Ama açtiginiz parantezleri kapatmayi da unutmayin.
Pascal Programinin Genel Yapisi


Pascalin en önemli özelliklerinde birisi de yapisal bir programlama dili olmasidir. Bu programinizi yazarken size maksimum esneklik saglar. Ayni zamanda yazdiginiz program parçalarini problemsiz bir sekilde birlestirmenizi de saglar. Her pascal programinin ana kodu mutlaka bir BEGIN deyimi ile baslar ve END. deyimi ile biter. (End den sonra nokta olduguna dikkatinizi çekerim. Pascal derleyicisi için bu tüm programin bittigi yer anlamina gelir.) Eger program içerisinde ayni blok içerisinde islem görmesini istediginiz kodlariniz varsa bunlari bir BEGIN - END blogu içerisine alirsiniz. Fakat bu sefer END’den sonra noktali virgül (;) kullanmalisiniz. Bir Pascal programinin genel yapisi asagidaki gibidir.
Program (* Program basligi. Buraya yazacaklarinizin programa bir etlisi olmaz *)
Uses (* Kullanilacak harici kütüphaneleri belirler*)
Type (* Tip tanimalamalarinin yapildigi blok *)

Const (* Sabit tanimlari ve ilk deger atamalari *)

Var (* degisken tanimlamalarinin yapildigi blok *)

Procedure (* Procedure ve functionlar ana programdan önce yazilirlar. *)
Function (* Onlarin içinde de yerel degisken ve tip tanimalamalari için *)

Const (* tipki ana programda oldugu gibi bloklar kullanilir.*)

Var

Type

begin

end; { procedure veya function}

begin {ana program }
komutlar;


end.
Pascal'da Giris/Çikis Islemleri


Bir bilgisayar islemi genel olarak üç temel bölümden olusur bunlar giris - islem - çikis'tir. Pascal'da giris ve çikis islemleri için Readkey, Read, Readln, Write ve Writeln fonksiyonlari kullanilir. Simdi bu fonksiyonlara sirasiyla göz atalim. Readkey: Klavyeden bir karakter okumak için kullanilir.
1. Readkey ile okunan karakter ekranda görünmez. Fonksiyon sadece bir karakteri bir degiskenin içine getirmek için kullanilir. 2. Readkey fonksiyonu Crt.Tpu Pascal kutuphanesi içinde tanimli olan bir fonksiyon oldugu için bu fonksiyonu kullandigimizda programimiza "uses Crt;" satirini mutlaka eklemek zorundayiz. Bu readkey fonksiyonu ile ilgili tanimlarin bizim yazdigimiz program tarafindan taninmasini sagliyor. Örnek : Uses Crt; var C: Char; Begin Writeln('Lutfen bir tusa basin'); C := Readkey; Writeln(' Bastiginiz tus ', C, '); end. Read: Belirtilen sayida degiskeni klavyeden sirasiyla okur. Komutun genel yapisi su sekildedir: read(p1,p2,p3, ... , pn) p:parametre
1. Read komutu ile string deger okutulamaz. 2. Integer veya real degerler pespese girilecekse aralarinda en az bir bosluk olmali. 3. Karakter okunurken okunacak karakter sayisi kadar karakter pespese girilir. Bosluk ve virgul gibi ayraçlar kullanilmaz kullanilirsa bunlarda karakter olarak okunur. Örnek : Uses Crt; var isim: string; Begin Write('Lutfen isminizi girin :'); Read(isim); Writeln(' Merhaba ', isim); end. Readln: Belirtilen sayida degiskeni klavyeden sirasiyla okur. Read komutundan farki herbir deger okunduktan sonra kursor ekranda bir alt satira konumlanir ve siradaki deger burdan itibaren girilir. Komutun genel yapisi su sekildedir: readln(p1,p2,p3, ... , pn) p:parametre Örnek : Uses Crt; var isim: string; Begin Write('Lutfen isminizi girin :'); Readln(isim); Writeln(' Merhaba ', isim); end. Write: Belirtilen sayida degiskeni ekranda görüntülemek için kullanilir. Degerler ekranda birbiri pesi sira görüntülenir.
Pascal'da Çikti Düzeni


Pascal'da degisken tanimlari bölümündende hatirlayacaginiz gibi sayilari ifade etmek için real, integer gibi tip tanimlari kullaniyoruz. Fakat bu tip tanimlari ile tanimlanan degiskenlerin içerdigi sayisal ifadeler bizim günlük hayatta kullandigimiz ve ihtiyaç duydugumuz sekilde degil bilgisayarin saklayabilecegi sekillerde bulunmaktadir. Örnegin sizin "birim" diye real tipinde tanimladiginiz bir degiskene "4.5" degerini girdigimizi düsünelim bu degiskeni ekranda görüntülemek istedigimizde elte edecegimiz görüntü su sekilde olacaktir. 4.5000000000E+00 Iste bu tür görüntüleri düzgün hale sokmak ve çikti düzenini saglamak için asagida anlatilan yöntem kullanilir.
Tip Yöntem Açiklama
Integer Degisken : n Integer tipindeki bir degiskenin adinin arkasina n gibi sayisal bir deger yazilirsa bu n karakterlik bir saha içinde bu sayinin saga dogru dayali bir sekilde yazilmasini saglar.
Real Degisken:n:m Real tipinde bir degiskenin adinin arkasina n ve m gibi sayisal degerler yazilirsa bunlar n karakterlik alan içinde ondalik kismi noktadan sonra m tane karakter içermek üzere saga dayali olarak yazdirilir.
String Degisken:n String tipindeki bir degiskenin adinin arkasina n gibi sayisal bir deger yazilirsa bu n karakterlik bir saha içinde bu karakter dizisinin saga dogru dayali bir sekilde yazilmasini saglar.
Clrscr fonksiyonu ekrani temizlerken o anda ekranda aktif olan zemin rengini kullanir. Yani eger zemin rengi o anda Textbackground(Yellow); komutu kullanilarak sariya çevrilmisse bu satirdan sonra kullanilacak bir clrscr; komutu ekranin tamamen sariya dönüsmesini saglayacaktir. ClrScr Fonksiyonu O andaki ekrani temizler ve kursör ekranin sol üst kösesine konumlanir. GotoXY Fonksiyonu Kursörün ekranin istenilen bir pozisyona konumlanmasini saglamak için kullanilir. Gotoxy(sütun,satir); seklinde kullanilir
Clrscr ve Gotoxy fonksiyonlari CRT Kutuphanesi içinde tanimlidir. Bu komutlari program içinde kullanacaginiz zaman programinizin en basina "uses crt;" cümlesini eklemeyi unutmayin. Örnek: Uses Crt; Var Ad : String[20]; Begin ClrScr; Write('Adiniz : '); Readln(Ad); Gotoxy(30,12); write(Ad); End;
Ekranin 80 sütun ve 24 satirdan olustugunu unutmayin...
Pascalda genel olarak kullanilan karsilastirma deyimleri sunlardir: IF..THEN..ELSE
· CASE..OF
If...Then...Else


Eger…ise…degilse (If..then..else) Karar yapisi : Program yazarken en çok yapilan islerin basinda elinizdeki verilere bakarak bir karar vermek ve programin akisini bu karara göre yönlendirmek gelir. Iyi programda gerekli yerlerde dogru ve etkili karar yapilari olusturmak çok önemlidir. Çünkü bir programda en yavas isleyen komutlardan birisi karsilastirma komutlaridir. Pascalda en çok kullanilan karsilastirma ve kontrol komutu If..then..else dir. If deyiminden sonra yapilacak karsilastirmanin sonucu dogru(True) ise then deyiminden sonraki blok isler. Eger karsilastirmanin sonucu yanlis(False) ise bu sefer de else deyiminden sonraki blok isler.Else deyimi seçimlik bir deyimdir. Yani isterseniz, ya da gerekmezse bu kismi kullanmayabilirsiniz. Bu durumda eger karsilastirma sonucu yanlis ise program bir sonraki komutla akisina devam eder.
Eger else kullanacaksaniz else den önceki satirda noktali virgül kullanmamalisiniz. ... If then begin … komutlar … end; [ else begin … komutlar … end;] …
Karsilastirma için kullanabileceginiz operatörler için buraya tiklayin.
ÖRNEK: Girilen bir sayinin pozitif veya negatif oldugunu söyleyen program. Var Sayi : integer; begin write(‘Bir sayi girin : ‘); readln(Sayi); if Sayi < integer =" 500;"> 0) and (sayi <>= 128) and (sayi <>= 256) then I := I+100; If (sayi <> -127) then I := I-1; If (sayi <= -127) and (sayi > -255) then I := I-10; If (sayi =< -255) then I := I-100; Writeln('Islem sonucu I da kalan= ',I); End. Const I : integer = 500; Var Sayi : integer; Begin Write(‘Bir sayi girin : ‘); Readln(Sayi); If sayi > 0 then If sayi > 128 then If sayi > 256 then I := I + 100 Else I := I +10 Else I:= I+1 Else If sayi < -127 then If sayi < -256 then I := I – 100 Else I := I – 10 Else I := I – 1; Writeln(‘Islem sonucu I da kalan=‘ , I); End. case...of Bir önceki konuda bahsedilen kontrol deyimi if..then..else genellikle az sayida olan karsilastirmalarda kullanilir. Ama eger yapilan karsilastirma çok karmasiksa o zaman bu deyimi kullanmak oldukça zor olur ve çok fazla miktarda mantik hatalari bulunur. Bunu engellemek için blok if deyimi diyebilecegimiz Case yapisini kullaniriz. Case yapisinda karsilastirmanin yapilacagi degiskenin alabilecegi degerler göre çesitli islemleri toplu olarak yapabiliriz. Bir önceki konuda gösterdigimiz örnegi ele alalim. Bir if deyimi için oldukça karmasik olan bu örnekgi bir de case ile çözelim. Tabii öncelikle Case’in genel yazilisini veriyoruz. case degisken of durum-1 : islem(ler); ... durum-n : islem(ler); end; Veya case degisken of durum-1 : islem(ler); ... durum-n : islem(ler); else islem(ler) end; Durum dedigimiz yerlerde bir yada daha fazla, virgülle ayrilmis, sabitler veya araliklar olabilir. Mesela : case Ch of 'A'..'Z', 'a'..'z' : WriteLn('Harf'); '0'..'9' : WriteLn('Rakam'); '+', '-', '*', '/' : WriteLn('Operator'); else WriteLn('Özel karakter'); Else kismi ise tamamen seçimliktir. Istemezseniz kullanmayabilirsiniz. Simdi gelelim örnegimize… Eger daha bakmadiysaniz önceki konuyu (if-then-else)okumanizi tavsiye ederim. Yine de soruyu tekrar soruyorum. Bu sorunun hiçbir amaci olmadigini sadece bir örnek oldugunu belirtmek isterim. Bosbosuna "Buna bu nedir?..Ne ise yarar?..Ben kimim?.. Niye burdayim?" gibi felsefi konulara girmeyin. Siz örnegi anlayin yeter. Yazdigimiz bir programda girilmis olan sayi eger 0’dan büyükse ve 128’den küçükse I degiskenine 1 eklesin, 128..256 arasinda ise I’ya 10 eklesin, 256’dan büyükse I’ya 100 eklesin. Ayni zamanda eger bu sayi 0’dan küçükse ve –127’den büyükse 1 eksiltsin, -127..-255 arasindaysa 10 eksiltsin ve –255’den de küçükse I’dan 100 eksiltsin. Const I : integer = 500; Var Sayi : integer; Begin Write(‘Bir sayi girin : ‘); Readln(Sayi); If (sayi > 0) and (sayi <>= 128) and (sayi <>= 256) then
I := I+100;
If (sayi <> -127) then
I := I-1;
If (sayi <= -127) and (sayi > -255) then
I := I-10;
If (sayi =< -255) then I := I-100; Writeln(‘Islem sonucu I da kalan=‘ , I); End. Const I : integer = 500; Var Sayi : integer; Begin Write('Bir sayi girin : '); readln(Sayi); case Sayi of 0..128: I:= I + 1; 128..256: I := I + 10 ; 256..32767 : I := I + 100; -127..0 : I := I - 1; -255..-128 : I := I - 10; -32768..-256 : I := I - 100; end; writeln('Islem sonunda I degeri =',I); end. Pascalda genel olarak kullanilan 3 tip döngü vardir. Bunlar 1. FOR..DO döngüsü 2. REPEAT..UNTIL döngüsü 3. WHILE..DO döngüsü For...Do Dongusu Bilgisayarlarin en güzel yanlarindan birisi de hiç sikilmadan, sikayet etmeden ayni seyleri yapabilmeleridir. Böylesine tekrar tekrar çalismasi gereken islemleri, bir programlama dilinde ancak döngüler vasitasi ile saglayabiliriz. Asagida bu döngülerin çesitlerini ve Pascalda nasil kullanildiklarini görebilirsiniz. FOR...TO DÖNGÜSÜ En basit döngü çesididir. Kendisinden sonra gelen deyim veya deyimler gurubunu verilen sayi kadar çalistirmaya yarar. Öncelikle yapisini görelim : for degisken := ilk_deger to son_deger do komut; veya for degisken := ilk_deger to son_deger do begin komut(lar) end; FOR..DOWNTO DÖNGÜSÜ for degisken := ilk_deger downto son_deger do komut; Veya for degisken := ilk_deger downto son_deger do begin komut(lar) end; Simdi bu yapiya bakarak sizlere çalisma mantigini anlatmaya çalisalim. For deyiminden sonra sayaç olarak kullanilacak bir tamsayi degisken kullanilir. Döngü islemi bu degiskenin ilk degerinden baslar ve son degere kadar 1’er 1’er artar (to) veya azalir(downto). Bazi baska dillerdekinin aksine ne artis miktarini ayarlayabilirsiniz ne de ondalikli sayilari kullanabilirsiniz. Döngü kendisinden sonra gelen ilk deyimi veya begin..end blogunu isletir. Döngü içinde iken döngü degiskenine müdahale etmek mümkün olmakla birlikte bunu yapmak sakincali olabilir. Bu yüzden döngü degiskenleri genellikle döngü içerisinde isleme tabi tutulmaz. Bu kadar teorik bilgiden sonra simdi bir örnek ile konumuzu pekistirelim. Örnek: var i: integer; ismin : string; begin write('Ismini gir sahip :'); readln(ismin); for i := 1 to 15 do writeln('Merhaba ',ismin,' sahip'); end. Repeat..Until döngüsü Repeat deyimi ile until deyimi arasinda kalan islemleri untildeki kosul yanlis oldugu sürece tekrarlar. Untildeki kosul(lar) dogru oldugu anda döngüden çikar. Repeat islemler; Until kosul(lar); Örnek : Var I : Integer; begin repeat Write('Bir sayi giriniz : '); ReadLn(I); until (I >= 0) and (I <= 9); writeln(‘Sayi 0..9 arasindadir.’); End. Ne olursa olsun sarta bakana kadar döngüyü bir kez çalistirir. Until'de belirtilen sart dogru oldugu sürece çalisir. While-Do Döngüsü Whiledan sonraki kosul dogru oldugu sürece islem(ler) tekrarlanir. Whiledaki kosul(lar) dogru oldugu anda döngüden çikar. While kosul(lar) do Begin islemler; End; Örnek : Var I : Integer; begin I := 100; while((I >= 0) and (I <= 9)) do begin Write('Bir sayi giriniz : '); ReadLn(I); end; writeln(‘Sayi 0..9 arasindadir.’); End.
Repeat-Until Döngüsünden farkli olarak öncelikle kosual bakilir sonra döngü baslar.
1-Döngüden çikabilmek için mutlaka kosulun döngü içinde degismesi gerektigine dikkat edin. 2-Birden fazla kosul kullanacaksaniz bu kosullarin tümünü bir parantez içine alin.
Pascalda Type Blogunun Kullanimi


Data tipleri programcinin compiler’e datanin nasil saklanacagini bildirmekte kullandiklari bir yoldur. Bir degisken tanimlandigi anda onun data tipinide mutlaka tanimlamak zorundasinizdir. Bazi data tipleri kullanilan dil tarafindan standart olarak tanimlanmistir zaten.Diger tipleri ise kullanici kendisi tanimlayabilir.Pascal bu tip bir esnekligi ilk saglayan dillerden birisidir. Kullanici tarafindan tanimlanan tipler Pascalda TYPE blogunda tanimlanir. Type tip1 = tip_tanimi1; (* Her yeni tipe bir isim verilir ve önceden tanimli tipler *) (* kullanilarak tanimlanir *) tip2 = tip_tanimi2; (* Istedigimiz kadar tip tanimi yapabiliriz *) tip3 = tip1; { Yeni tanimladigimiz bir tipi baska bir tip tanimi için de kullanabiliriz. Tip tanimlari bazen çok karmasik olabilecekleri gibi bazen de çok basit olabilirler } int = integer; CharData = array['A'..'Z'] of Byte; Var var1 : tip3 (* her yeni degisken için bir isim ve bir tip verilir. *) var2, var3 : tip2 (* ayni tipte olan degiskenler bir defada tanimlanabilir *) Sayi : int; Char_dizi : CharData; Type blogunun en önemli kullanim yerleri ise record (kayit) ve set (küme) tipi tanimlardir. Record yapisi: Record tipi dosyalama islemlerinde kayit desenini olusturmakta kullanilir.Yani bir tek kayit için, o kaydin hangi alanina hangi degiskenlerle erisilebileceginin tanimlanmasinda kullanilir.Örnegin ögrenci takibi programi yapilacaksa, bunun için ayni kayitta hem adi, hem soyadi hem de ögrenci no’su tutulacak olsun.Bu kayitlari tek tek degiskenlere atayip sonra dosyaya tek tek yazdirmak yerine, hepsini record yapisi içindeki degiskenlere atayip bir defada dosyaya yazdirmak daha kolaydir.Buna benzer sekilde record yapisinda tanimli bir degiskenin içine dosyadan bir kayit okudugunuzda istediginiz alanlara kolaylikla erisirsiniz. Örnek : Type Ogr_Kayit = record No : integer; Ad : String[30]; Soyad : String[30]; end; var Ogrenci : Ogr_Kayit; { Ögrenci degiskeni içinde No, Ad ve Soyad alanlari } ... { bulunur. Bu alanlarla ilgili islemler sadece ögrenci } … { degiskeni kullanilarak yapilabilir. } Record yapisinda tanimlanmis bir degiskenin içindeki degiskenlere direkt olarak erisemezsiniz. Bu degiskenlere erismek için Ogrenci.Ad, Ogrenci.No,… formatini kullanmalisiniz. Var_blogunda_tanimlanan_degisken.alanin_adi
Simdi yukaridaki örnegimizi gelistirerek gerçek bir örnek program yapalim.
Örnek Program


Bir siniftaki ögrencilerin tamaminin Ad,Soyad ve Nosunu tutabilen ve istendiginde ekrana dökebilen bir program yapalim. Örnekgi 10 ögrenci için yaptim çünkü 10 kisinin bilgilerini girmek bile sikici. 10 rakamini degistirerek daha az/fazla ögrenci kaydi yapabilirsiniz. Yada indeks degerini 100 yapip sadece 10 tanesi için bilgi girisi yapabilirsiniz. 1. Type 2. Ogr_kaydi = record 3. No : integer; 4. Ad : String[30]; 5. Soyad : String[30]; 6. end; (* of record *) 7. int = integer; 8. Var 9. Ogrenci : array [1..10] of Ogr_Kaydi; 10. i,n : int; 11. Begin (* Program Body *) 12. write('Kaç ogrenci bilgisi girilecek (max 10) : '); 13. readln(n); 14. for i := 1 to n do 15. begin 16. write(I,'.Ogrenci Nosu : '); readln(Ogrenci[i].No); 17. write(I,'.Ogrenci Adi : '); readln(Ogrenci[i].Ad); 18. write(I,'.Ogrenci Soyadi : '); readln(Ogrenci[i].Soyad); 19. end; {of for} 20. writeln('Girilen kayitlar :'); 21. for i := 1 to n do 22. begin 23. write(i,'-',Ogrenci[i].No); 24. write(' ',Ogrenci[i].Ad); 25. writeln(' ',Ogrenci[i].Soyad); 26. end; {of for} 27. End. (* of program *) Açiklamalar : Örnek programimizin açiklamalarini satir satir size gösterebilmek için satir baslarini numaraladim. Simdi açiklamalar basliyor. Aman dikkatli takip edin. Eger bu örnegi anlayabilirseniz Type blogu ve record tanimlamalarini da ayni sekilde anlamissiniz demektir. 1. Type blogu tanimlamasina basladigimi bildiriyorum. 2. Ismi Ogr_Kaydi olan bir record tanimlamasina basliyorum. Arada esittir kullandigima dikkat edin. 3. Artik record yapisinin içindeki elemanlar tanimlanmaya baslandi. Bu kisimda sanki Var blogunda imisiz 4. gibi degiskenin adi'ndan sonra iki nokta üstüste (:) ve degisken tipiverilir ve noktali virgülle (;) o tanim 5. sona erdirilip bir sonraki tanima geçilir. Biz basit bir sinif listesi hazirlayacagimiza göre No, Ad ve Soyad bizim için yeterli olacaktir. 6. record tanimlamamizin sona erdigini belirten end; deyimi.
Her record deyimi bir end ile bitmelidir.
7. integer tipinde int diye bir degisken tanimladim. Bu özellikle C kullanicilarinin yaptigi bir triktir. C de integer tanimlamalari int deyimi ile yapilir. Burda da bundan sonraki integer tanimlamalarimizi int ile yapabilecegiz. Eger ilk olarak bu komutu kullanmis olsaydik record içinde bile kullanmamiz mümkün olabilirdi. Bunu siz deneyebilirsiniz. 8. Artik Type blogunda isimiz bitti. Var bloguna geçiyoruz. 9. Ilk is olarak tanimladigimiz record tipini hemen bir degiskende kullaniyoruz.Hem de dizi olarak tanimliyoruz.
Unutmayin ki Type blogunda yaptigimiz tip tanimlamasiydi. Simdi bu tanimladigimiz tipi degisken tanimlamada kullaniyoruz.
Tip tanimlarinizi degiskenmis gibi kullanamazsiniz. 10. i ve n adinda ve int (!!) tipinde 2 degisken tanimladik. 11. Artik programimiza baslayabiliriz. (* *) açiklama parantezleri. Ihtiyaç duydukça ama programin okunabilirligini bozmadan bolca kullanabilirsiniz. 12. En fazla kaç kayit yapilacagini kullaniciya soruyoruz. En fazla 10 olabilecegini de belirtiyoruz ki kullanici uçup absürd degerler yazmasin.
Tabii ben kontrol ettirmedim ama siz 10'dan fazla girmeyi bir deneyin bakalim ne olacak. Öncelikle F2'ye basip programinizi save etmeyi unutmayin tabii ki.
13. readln deyimi ile kaç kayit yapilacagini n degiskeninin içine okuttuk. Eger ayni satirda bir seyler yazdirip sonunda soru soracaksaniz. write - readln çiftini kullanin. Neden Acaba ?? 14. Bir döngü baslattik. 1'den baslayacak ve n içinde kaç varsa o kadar dönecek. 15. döngü içinde birden fazla islem yapilacagindan hepsini begin - end blogu içine aliyoruz. 16. Iste az evvel bahsi geçen write - readln çiftleri... Write deyiminde i'yi ne güzel kullanmisim degil mi? Ama daha önemlisi readln deyimi içinde neler oldugu : readln( Ogrenci[i].No ); 17. Ogrenci dizisinin i. elemaninin No'sunu klavyeden oku . Tipi ne olursa olsun bizim dizimizin adi Ogrenci. Dolayisi ile indisi onun yaninda belirtiyoruz. Sonra bir nokta (.) ve No yaziyoruz ki bu degiskenin alt seviyesinde bulunan No degiskenine ulasabilelim. 18. ayni mantikla i degismedigi için hala ayni degiskenin degisik alt degiskenlerine degerler okutuyoruz. 19. Iste for döngüsü bitti. Bir begin ile blok basladigi için de bir end; ile blogu kapattik. 20. Simdi de girdigimiz kayitlari ekrana listeleyecegiz. Bir basliktan sonra isimize basliyoruz. 21. Yine i degiskenini döngümüze indis olarak kullanabiliriz. Baska bir ise yaramiyor zaten. Yine dizinin n'e kadar olan bilgilerinin dökümünü yapacagiz. 22. Hmm demek blok gerekiyor. Begin ile bir blok baslangici yapalim. 23. yine i'yi çok akillica kullanmisim. Helal bana. Onun disinda degiskene erismek için ayni yolu kullandigimizi söyleyebiliriz. Önce degisken ve indisi Nokta altdegisken.write(i,'-', Ogrenci[i].No ); 24. Bu seferki write'in ilk elemani 3 bosluk. Amaç ekran çiktisi okunabilir olsun. Onun yerine tab karakteri de kullanilabilirdi. Ama numarasini hatirlayamadim. Eger ne oldugunu bulabilirseniz chr(#numarasi) seklinde kullanabilirsiniz. Mesela 9 ise write chr(#9) ),'Ogrenci[i].Ad); 25. Son olarak ise writeln kullandim. Çünkü bundan sonraki degerin alt satirdan çikmasinin istiyorum. 26. For döngüsü bitti. End; ile kapattik. 27. Program da bitti. Onu de End. ile kapattik. Recor tanimi içinde yeni record tanimlari yapilabilir. Mesela Stk_har=record Stk_NO : integer; Har_tipi : char; Har_tarihi=record Yil : byte; Ay : byte; Gün : byte; end; Miktar : real; end;
Pascalda Dizi Kullanimi


Hangi programlama dilini kullaniyor olursaniz olun degisken tanimalmanin mantigi aynidir. Saklanacak bilginin tipine göre bir tip seçilir buna bir isim verilir ve hafizada bu degisken için bellek ayrilir. Her degisken için durum aynidir. Pascalda bu islemi Var blogunda yapiyoruz. Peki ayni özelliklere sahip birden fazla degiskene ihtiyaç duyarsak ne olacak. Mesela bir ögretmen düsünün. Degisik sayilarda ögrencisi olan siniflara girsin ve bu ögrencilerin notlarini bilgisayarda tutmaya çalissin. Eger dizi degiskenleri kullanmayi bilmiyorsa en kalabalik sinifindaki ögrenci sayisi kadar degisken tanimlayacak sonra da her ögrencinin notunu kendi degiskenine ayri ayri atamak zorunda kalacaktir. Oysa bunu halletmenin daha kolay bir yolu var. Dizileri kullanmak. Dizilerin en önemli özelligi ayni tipteki ve birbiri ile alakali verileri toplu olarak tanimlamaya yaramasidir. Bu durumda örnegimizdeki ögretmen en kalabalik sinifindaki ögrenci sayisi kadar elemani olan bir tek dizi degiskeni tanimlar ve bilgileri bir döngü içerisinde indis kullanarak dizinin uygun yerine yerlestirir. Bu iki durumu her zamanki gibi bir tablo içinde gösterelim.
I I
Dizi kullanmayan ögretmen Dizi kullanan ögretmen
Var Var
OgrenciNotu1 := integer; OgrenciNotu : array[1..30] of integer;
OgrenciNotu2 := integer; I : integer;
OgrenciNotu3 := integer; Begin
OgrenciNotu4 := integer; for I := 1 to 30 do
... begin
... write(I,'.Ogrencinin notu = ');
OgrenciNotu30 := integer; readln(OgrenciNotu[I]);
Begin end;
Write(‘1.Ogrencinin notu = ‘); End.
Readln(OgrenciNotu1);
Write(‘2.Ogrencinin notu = ‘);
Readln(OgrenciNotu2);
Write(‘3.Ogrencinin notu = ‘);
Readln(OgrenciNotu3);
...
...
write(’30.Ogrencinin notu = ‘);
readln(OgrenciNotu30);
end.
Artik dizi kullanmanin avantajlarini biliyoruz. Bize ayni türden ve birbiri ile iliskili bilgilere kolay erismemizi sagliyor. Isterseniz artik bir dizi taniminin nasil yapildigina bakabiliriz. Dizileri VAR blogunda tanimlayabilecegimiz gibi, Type blogunda da tanimlayabiliriz. Eger TYPE blogunu kullanirsak tanimlamis oldugumuz yeni tipi direkt degisken tipi olarak kullanabiliriz., degisken_ismi : array [boyut_büyüklügü] of dizi_tipi Boyut büyüklügü herhangi bir standart veri tipinde olabilir. Eger çok boyutlu bir dizi ise bunlar birbirinden virgüllerle ayrilir. Dizi tipinde ise istedigimiz herhangi bir tipi kullanabilirz. Yani hem standart tipleri hem TYPE blogunda tanimladigimiz kendi tiplerimizi kullanabiliriz. Dizinin elemanlarina köseli parantez içerisinde verilen indis numarasi ile erisiriz. Eger dizilerimiz çok boyutlu olacaksa Örnek tanimlamalar : Type arr_type = array[1..25] of real; Str20 = String[20]; Var IntList : array[1..100] of integer; {Integer tipinde bir boyutlu dizi} CharData : array['A'..'Z'] of Byte; {Char tipinde bir boyutlu dizi} Matris : array[0..9, 0..9] of real; {real tipinde 2 boyutlu dizi} MyStrArr : array[1..10] of Str20; {Yukarida tanimladigim Str20 tipinde 10 elemanli dizi} KupData : array[1..20,1..20,1..20] of Word {Word tipinde 3 boyutlu dizi}


·

Hiç yorum yok: