SlideShare une entreprise Scribd logo
1  sur  52
PASCAL
PROGRAMLAMA DİLİ
PASCAL NEDİR ?
• Pascal bilgisayar programlama dilİ pek çok
  öğrenciye bilgisayar programlamayı öğreten
  ve çeşitli versiyonları bugün hala yaygın olarak
  kullanılmaya devam eden en önemli
  programlama dillerinden biridir. İlk Macintosh
  işletim sisteminin çoğu ve TeX Pascal ile
  yazılmıştır.
NE ZAMAN, KİM TARAFINDAN, NE AMAÇLA
             GELİŞTİRİLDİ
• Bilgisayar bilimcisi Niklaus Wirth Pascal'ı 1970'te
  yapısal programlamayı derleyiciler için daha kolay
  işlenir hale getirebilmek amacıyla geliştirmiştir.
  Adını matematikçi ve düşünür Blaise Pascal'dan alan
  Pascal, Algol programlama dilinden türemiştir.
  Wirth, Pascal'dan başka Modula-2 ve Oberon
  programlama dillerini de geliştirmiştir. Bu diller
  Pascal'a benzerler ve ayrıca nesneye yönelik
  programlamayı da desteklerler.
BÖLÜM 1 : PASCAL’ A GİRİŞ

                                     İsimlendirme


•    Pascal'da büyük ve küçük harf ayırımı olmadığından "x" ile "X" aynı anlamdadır. Aşağıda
     geçerli ve geçersiz isimlendirmeye örnekler verilmiştir:

•     Geçerli isimlere örnek;
    x1 Toplam Adi Sayi METRE SAYI1 SAYI2

•     Hatalı isimlere örnek;
    1Y begin iki*2 sayı sayi-1 X'KARE %X
Temel Veri Tipleri
  Veri tipi (data type), değişken veya sabitin tuttuğu verinin tipini belirtmektedir. Programda kullanılan veriler
• genellikle aşağıdaki altı veri tipinden birine aittir:
  Tamsayı ( byte, shortint, integer, word, longint )
• Gerçel Sayı ( real, single, double, extended, comp^ )
• Karakter ( character ) ( 'A', '5', '*', '}' )
• Karakter dizisi ( string ) ( 'GYTE' ) ( 'Türkiye''nin başkenti' )
• Boolean ( false, true )
•
  Programda kullanılan sabitlerin bildirimi ise const kısmında yapılır. Sabit ismi ile değeri arasında '=' sembolü
• kullanılır. Sabitin veri tipi atanan değere bağlı olarak derleyici tarafından tespit edilir.
   const {sabit bildirim başlangıcı}
  Pi=3.1415; {sabit ismi = değer}
     test=false ; {Boolean sabiti}

  Değişkenlerin bildirimi veri tipleri belirtilerek var bölümünde yapılır. Değişkenlerin ismi ile veri tipi arasında ':'
• sembolü kullanılır. Aynı veri tipinde birden fazla değişken var ise değişkenlerin arasına ',' sembolü konarak
  değişken listesi oluşturulur.
   var {değişken bildirim başlangıcı}
  X:real; {değişken ismi : veri tipi}
  I,J:integer; {değişken listesi : veri tipi}
     tus:char; {karakter değişkeni}
     ad:string[30]; {30 karakter uzunluğunda karakter dizisi değişkeni}
     devam:Boolean; {Boolean değişkeni}
Program Yapısı



  Pascal programları bildirim (declaration) ve ifade (statement) olmak üzere iki temel bölümden oluşur. Aşağıda
• temel program yapısı görülmektedir.
   program ad;
const
 sabit1=değer;
 :
 sabitN=değer;
var
 değişken1:tip;
 :
 değişkenM:tip;
begin
 ifade1;
 :
 ifadeK;
end

  Pascal programları, program adını belirtildiği başlık satırıyla başlar. Başlık satırı ';' ile sonlandırılır. Eğer programa
• isim verilmeyecekse bu satır yazılmaz. Programda sabitler, değişkenler, program ve altprogramlar
  isimlendirilirken aynı isim birden fazla kullanılmaz. Programda kullanılacak tüm sabit ve değişkenler programın en
  üstünde const ve var bölümünde belirtilir. Sabitlere değer atarken '=', değişkenlerin tipini belirtirken ':' kullanılır.

  Pascal ifadeleri birbirinden noktalı virgül ile ayrılmıştır. const, var, begin gibi Pascal'ın saklı kelimelerinden sonra
• noktalı virgül kullanılmaz. Programın veya program parçasının bittiğini belirten end kelimesinden önceki satır
  sonunda noktalı virgül kullanmak gerekmez.
Giriş/Çıkış İşlemleri
  Programın kullandığı veriler isimlendirilerek bellekte saklanmaktadır. Bir ismin temsil ettiği değer belleğe üç değişik şekilde
• yüklenebilir; sabit olarak, değişken değer atayarak ve değişkenin değerini okuyarak. Bir silindirin hacmini bulan aşğıdaki
  örnekte her üç yöntemde kullanılmıştır.

   program silindir;
const;
 pi=3.14; {sabit}
var
 yükseklik, yarıçap, hacim:real;
begin
 yükseklik:=5.0; {Değer atama}
 ReadLn(yarıçap); {okuma}
 hacim:=pi*yaricap*yaricap*yükseklik; {değer atama}
 WriteLn(hacim);
end

  Yukarıdaki programda; pi sabit olarak tanımlanmıştır, yükseklik değişkenine 5.0 değeri atanmıştır, yaricap değişkeni tuş
• takımından okunmaktadır. hacim değişkeninin değeri hesaplama sonucu atanmaktadır. Tuştakımı veya disk gibi
  birimlerden okuma işlemine giriş (input), ekran ve yazıcı gibi birimlere yazdırma işlemine çıkış (output) denmektedir.

  Program yazarken sık sık kullnılması gereken program parçaları Pascal'da altprogram şeklinde yazılmıştır. Altprogramlar,
• fonksiyon (function) ve prosedür (procedure) şeklinde düzenlenmiştir. Pascal'da giriş işlemleri Readln, çıkış işlemleri ise
  Writeln prosedürleri kullanılarak yapılmaktadır. Programda açıklamalar '{' , '}' sembolleri arasında yazılır.
Aritmetik ve Boolean İşlemler
    Aritmetik İşlemler

    Pascalda 5 ve 5.0 farklı sayılardır. 5 bir tamsayıdır ve gerçek değerdir. 5.0 ise gerçel bir sayıdır ve yaklaşık bir
•
    değer ifade eder. Bu nedenle veri tiplerinin karşılaştırılması gerekir. Eğer x bir gerçel sayı değişkeni ise;
     x:=5; veya x:=5.0; yazabiliriz. Ama y tamsayı değişkeni için;
     y:=5; yazmak zorundayız. Atamada ':=' kullanılmalıdır.

    Sabit ve değişkenleri kullanarak yazılan aritmetik ifadelerde operatör kullanılmaktadır. Operatörler bir veya
•
    iki değeri (operand) kullanarak yeni bir değer bulan fonksiyonlardır. Aritmetik operatörler nümerik değerleri
    kullanarak nümerik sonuç verir. İki değer kullanan operatörlere ikili (binary) operatörler denir. Örneğin A+B
    ifadesindeki toplama operatörü ikili operatördür. -A ifadesindeki eksi işareti bir değer üzerinde işlem yaptığı
    için tekli (unary) operatördür.

    Tam sayı operatörleri
•

    İşlem          Operatör           Örnek
    Toplama           +                  7+3=10
    Çıkarma           -                  7-3=4
    Çarpma            *                  7*3=21
    Bölme(Katsayı)   DIV                 7 DIV 3=2
    Bölme(kalan)     MOD                 7 MOD 3=1
Operatörler kullanılarak yazılan aritmetik ifadelerin sonucu bir değişkene aktarılır. Eğer yazılan ifade
•
    gerçel sonuç veriyorsa yalnız gerçel tipli bir değişkene atama yapılabilir. İfade tam sonuç veriyorsa
    tamsayı veye gerçel tipli bir değişkene atama yapılabilir.

    Gerçel sayı operatörleri
•

    İşlem           Operatör         Örnek
    Toplama               +          5.5+2.25=7.75
    Çıkarma             -         5.5-2.25=3.25
    Çarpma              *         5.6*2.0=11.2
    Bölme               /         5.6/2.0=2.8



    Birden fazla operatörün kullanıldığı durumlarda:
•

  Parantez içindeki ifadeler öncelikle işlenir. İçiçe parantezler varsa en içteki parantezden başlanır.
  Operatörlerin hepsi aynı önceliğe sahip değildir. *, / , DIV ve MOD işlemleri önce, + ve - işlemleri sonra
yapılır.
  Aynı önceliğe sahip operatörler soldan sağa doğru işleme koyulur.

  Pascalda bir değişken eşitliğin her iki tarafında yer alabilir:
•
   Toplam:=Toplam+Değişken;
   burada toplam değişkeninin mevcut değerine Değişken eklenerek yeni toplam değeri olarak
saklanmaktadır.
Boolean İşlemler

  Boolean değişkenleri ve sabitleri True veya False değerlerini alabilmektedir. Eğer bir ifadenin sonucu True veya
• False değerini alıyorsa bu ifadeye "boolean ifade" denir. Boolean ifadelerde ilişkisel ve mantıksal operatörler
  kullanılır.

  İlişkisel operatörler; verilen iki büyüklük arasındaki ilişkinin doğru olup olmadığına bağlı olarak boolean değer
• veren operatörlerdir. Karşılaştırılacak büyüklükler aynı veri tipinde olmalıdır. K=5 ve J=6 değerleri kullanılarak
  kullanılan ilişkisel operatörler aşağıda verilmiştir.

    İlişkisel operatörler
•
    Operatör       İsim                İfade       Değer
    =         eşit      K=J            False
    <>      eşit değil    K<>J            True
    <         küçük       K< J            True
    <=      küçük eşit    K<=J            True
    >         büyük       K>J             False
    >=      büyük eşit    K>=J            False

  İlişkisel operatörler kullanılarak yalnız nümerik değerler değil aynı zamanda karakter dizileri de
karşılaştırılabilir. Karakterlerin karşılaştırılmasında ASCII kodları kullanılır. Eğer karşılaştırılacak dizilein uzunluğu
farklı ise karakter sayısı az olan dizinin küçük olduğu kabul edilir. Karşılaştırma sonucu elde edilen boolean
değer, boolean değişkene aktarılabilir. Aşağıdaki program satırında iki karakter dizisi karşılaştırılarak sonuç,
tamam boolean değişkene aktarılmaktadır. Örnekte tamam boolean değişkenine True değeri aktarılır:

    tamam:='ALP'<'ALPER'; { tamam boolean değişkeni true değerini alır }
Aritmetik ifadelerde nümerik değer kullanılarak, yeni bir nümerik değer elde edilir. Benzer şekilde boolean
• ifadelerde boolean değerler kullanılarak yeni bir boolean değer elde edilebilir. Boolean değişkenler, mantıksal
  operatörler ile birleştirilir. Aşağıda mantıksal operatörler verilmiştir.

    Mantıksal operatörler
•

    Operatör      İsim            Açıklama
    OR         Veya            Herhangi biri Doğru ise sonuç Doğru
    AND        Ve              İkiside Doğru ise sonuç Doğru
    XOR      Özel Veya      Biri Doğru biri Yanlış ise sonuç Doğru
    NOT        Değil           Yanlış ise sonuç Doğru

   Boolean ifadelerde; aritmetik, ilişkisel ve mantıksal operatörler kullanılabilir. İfadeler yazılırken öncelik
sıralarına dikkat etmek ve gerekirse parantez kullanılması gerekir. Boolean operatörlerin öncelik sıraları aşağıda
verilmiştir.

    Boolean operatörlerin önceliği
•

    Boolean operatör     Öncelik
    not              1 En büyük
    and              2
    or, xor            3
    <,>,=,<=,>=,<>     4 En düşük

    Boolean ifadeler yazılırken; aritmetik operatörler nümerik değerler, mantıksal operatörler boolean değer ve
ilişkisel operatörler aynı tipteki veriler ile kullanılır.
BÖLÜM 2 : KONTROL YAPILARI

                                  Sıralı Kontrol Yapısı
    Sıralı kontrol yapısında ifadeler yazıldığı sırayla ve bir kez icra edilir. Bu yapıda sırayla ifade-1 ifade- 2
•
    ifade N icra edilir. Sıralı yapıdaki ifadeler, giriş, çıkış, hesaplama veya bir kontrol yapısı olabilir.

    Pascal ifadelerinin gruplandırılmasıyla oluşturan ifadeye ifade bloğu adı verilir. İfade bloğu, begin ve end
•
    sözcükleri arasında yazılan ifadelerden oluşur. İfade bloğunun formatı aşağıdaki gibidir:

    begin
      ifade-1;
      ifade-2;
         :
     :
      ifade-N
    end

    İfade bloğunda, ifadeler birbirinden noktalı virgül ile ayrılırlar. Bloktaki son ifadeden sonra noktalı virgül
•
    konulmaz.
Seçimli Kontrol Yapısı
•   İfade veya ifade bloklarının icra edilmesi bir koşula bağlı olabilir. Boolean ifade olarak yazılan koşulun
    doğru veya yanlış olmasına bağlı olarak icra edilecek ifade seçilir. Pascal'da bu amaçla İf/then, if/then/else
    ve case ifadeleri kullanılmaktadır.
      If/then İfadesi
•   En basit seçim yapısı if / then ifadesidir. Bu ifadede; verilen koşul doğru ise bir ifade veya ifade bloğu icra
    edilir, verilen koşul yanlış ise ifade icra edilmez
•   if/then ifadesnin formatı:
    if koşul then
    ifade

•   X değişkeni negatif ise ekran x negatiftir yazan İf/ then ifadesini yazalım:
    if x<0 then
       writeln('x negatiftir');
•   if/then ifadesi tek satır halinde de yazılabilir: if x < 0 then writeln ('x negatiftir');
•   X değişkeni sıfırdan farklı ise 1/x'i hesaplayıp ekrana yazan if then ifadesini yazalım:

    if x < > 0 then
    begin
       Y : = 1/x ;
       Writeln (y)
    end

    Örnekte koşul doğru olduğununda iki ifade icra edileceği için bu ifadeler ifade bloğu haline getirilmiştir.
If/then/else İfadesi

•   If/ then/ else ifadesinde iki ifade veya ifade bloğundan birisi icra edilir. Bu ifadede verilen koşul
    doğru ise then kısmındaki ifade , yanlış ise else kısmındaki ifade icra edilir.
•   If/then ifadesinin formatı aşağıdaki gibidir:

       if kosul then
           ifade-D   {noktalı virgül kullanılmaz.}
       else
       ifade-Y;

•   x 10'dan büyükse karesini değilse yarısınıbulan if/then/else ifadesi aşağıdaki şekilde yazılabilir:

      if x >0 then
         begin
            y:=x*x;
            writeln('Karesi..:' ,y);
          end
         else
           begin
            y:=x/2;
            writeln('Yarısı..:' ,y);
           end

    Eğer x 10'dan büyükse if kısmı değilse else kısmı icra edilecektir.
Case İfadesi

•   Koşul olarak bir boolean ifadesinin kullanıldığı if ifadesinde seçilebilecek ifadelerin sayısı ikiyi aştığı zaman
    programın okunması güçleşmektedir. Eğer boolean ifadesi yerine bir değişkenin aldığı değere bağlı olarak
    icra edecek ifade seçilebiliyorsa case ifadesi kullanılır. Seçici değişkenin tam sayı, karakter veya boolean gibi
    sıralanabillir tipte olması gerekir. Seçici olarak gerçel sayı değişkeni kullanılmaz.

•   Aşağıda case ifadesinin formatı görülmektedir.

       case secici of
          etiket-1:ifade-1;
          etiket-2:ifade-2;
          ...
          etiket-N:ifade-N;
       end;

•   Bir dersten alınan puanı harf sistemine dönüştürmek için gerekli case ifadesini yazalım:

     case puan of
          90..100: writeln('A');
          80..89: writeln('B');
          70..79: writeln('C');
          50..69: writeln('D');
          0..49: writeln('F');
     end;

    Case ifadesinde puan değişkenin bulunduğu kademe tespit edilerek ilgili ifade icra edilir. Örneğin; puan 85
    ise ekrana 'B' yazılacaktır.
Case/Else İfadesi

  Case ifadesindeki seçici hiçbir etiketle uyuşmadığında case bloğunun dışına çıkılmaktaydı. Uyuşmazlık halinde
• icra edilecek ifadeler varsa case/else ifadesi kullanılır. Case/else ifadesinin formatı aşağıdaki şekildedir:

     case secici of
          etiket-1:ifade-1;
          etiket-2:ifade-2;
          .....

             etiket-N:ifade-N;
     else;
             ifade-1;
             ...
             etiket-M;
     end;

    Rakam olarak verilen ay geçerli ise ekrana yazan değilse hata mesajı veren case/else ifadesi:
•
     case ay of
           1: writeln('OCAK');
           2: writeln('ŞUBAT');
           ...
           12: writeln('ARALIK');
     else;
            writeln('yanlış girdiniz');
     end;

    Ekrana yazılması istenen ay 1'den küçük veya 12'den büyük ise "yanlış girdiniz" mesajı ekrana yazılır.
Tekrarlı Yapı
•   Bir ifade bloğunu birden fazla icra edilmesine iterasyon veya döngü (loop) denir.
•   Pascal'da döngüler; While/Do, Repeat/Until, For/Do ifadeleri kullanılarak yapılır.

     While/Do İfadesi

•   Giriş kontrollü döngülerde, koşulun doğru olup olmadığına döngü ifadelerinden önce bakılır. Eğer koşul
    doğru ise döngü ifadeleri icra edilir.
•   İfadenin formatı aşağıdaki gibidir:

    while koşul do
       döngü ifadesi;

•   Eğer döngü ifadesi, ifade bloğu şeklinde ise while/do formatı aşağıdaki şekle dönüşür:

    while koşul do
     begin
         İfade-1;
         İfade-2;
         ...
         İfade-N;
     end;
Repeat/Until İfadesi


• Çıkış kontrollü döngüler Repeat/until ifadesi kullanılarak yapılır.
• İfadenin formatı aşağıda verilmiştir:
   Repeat
        ifade-1;
   ifade-2;
   ...
   ifade-N
 Until koşul;

Döngü ifadeleri Repeat ve Until kelimeleri arasında kullanıldığından begin ve end kelimelri kullanılmaz.


• Vize ve final notlarını okuyarak ortalamayı bulan programın Repeat/Until ifadesi kullanarak yazılması:

  program ortalama;
  const
    Vizekat=0.4;     {Vize notu katsayısı}
    Finalkat=0.6;     {Final notu katsayısı}
  var
    Vize,Final,Ortalama: real;
    Devam:char;
  begin
    Repeat
        Write('Vize notu..:'); Readln(Vize);
        Write('Final notu..:'); Readln(Final);
        Ortalama:=Vize*Vizekat + Final*Finalkat;
        Writeln('Ortalama..:',Ortalama:6:0);
        Writeln;
        Write('Devam '); Readln(Devam);
    Until (Devam='H') OR (Devam='h')
  end.

Programda Devam değişkeni 'H' veya 'h' olana dek vize ve final notları okunarak ortalama hesaplanmaya devam edilir.
For/Do İfadesi

•   Döngü ifadelerinin belli sayıda icrası için For/Do ifadesi kullanılır. Bu ifadede, sayaç olarak kullanılan
    değişkene başlangıç ve bitiş değerleri verilir. Sayaç değeri her iterasyonda 1 arttırılır. Sayaç bitiş
    değerini geçtiği zaman döngüden çıkılır. Sayaç arttırılması ve kontrolü For/Do ifadesi tarafından
    gerçekleştirilir. Sayacın veri tipi genellikle tamsayıdır ama karakterde kullanılabilir.

•   For/Do ifadesinin formatı aşağıda verilmiştir:
     For sayaç:=başlangıç to bitiş Do
    döngü ifadesi;

•   Döngü ifadesi blok ifade şeklinde ise For/Do ifadesinin formatı aşağıdaki şekilde olur:

For sayaç:=başlangıç to bitiş Do
  begin
    ifade-1
    ifade-2
    ...
    ifade-N
  end;


•   1'den 5'e kadar tamsayıları ve karelerini yazan For/Do ifadesi:

For sayi:=1 to 5 Do
     Writeln(sayi,'',sayi*sayi);
•   For/Do ifadesinde To yerine Downto kullanarak sayaç değeri azalan şekilde döngü kurulabilir.

•   5'ten 1'e kadar tamsayıları yazan For/Do ifadesi:

For sayi:=5 Downto 1 Do
     Writeln(sayi);

•   Verilecek sayının faktöriyelini bulan program:

Program Faktöriyel;
var
    faktoriyel,sayi,son:integer;
begin
    write('faktöriyeli bulunacak sayı..:'); Readln(son);
    faktoriyel:=1;
    For sayi:=2 to son Do
       faktoriyel:=faktoriyel*sayi;
    writeln(son,'in faktöriyeli',faktoriyel,'dir.');
end

Faktöriyeli okunacak sayı son olarak okunmaktadır. Döngüye girmeden önce faktoriyel
değişkenine başlangıç değeri olarak 1 atanmaktadır. Döngüde sayi 2'den son değere kadar
arttırılırken faktoriyel değeri o anki faktoriyel değerininsayi ile çarpılmasıyla bulunmaktadır.
Döngüden çıkıldığında bulunan faktöriyel değeri ekrana yazdırılmaktadır.
BÖLÜM 3 : ALT PROGRAMLAR

                                   Fonksiyonlar
•   Fonksiyon verilen parametreler üzerinde bir takım işlemler yaparak bir değer veren bağımsız
    program parçasıdır. Fonksiyonlar Pascal'ın stanadart fonksiyonları ve kullanıcı tarafından
    tanımlanan fonksiyonlar olmak üzere iki kısımda incelenebilir.

Standart Fonksiyonlar
• Pascal'da aritmetik, skaler ve transfer olmak üzere üç çeşit standart fonksiyon vardır.

      Fonksiyon Tanımlama
•   Standart Pascal fonksiyonları ihtiyaca cevap vermiyorsa, programcı tarafından yeni fonksiyonlar
    tanımlanabilir.
•   Fonksiyonlar, global sabit ve değişkenlerin bildirim bölümünden sonra ve ana program
    ifadelerinden önce yazılır. Global sabit ve değişkenler tüm programda kullanılabilir iken yerel sabit
    ve değişkenler sadece tanımlandıkları fonksiyon içinde kullanılabilirler. Fonksiyonların çağrıldıkları
    yerden önce yazılması gerekir. Eğer fonksiyonlar ana programdan önce çağrılıyorsa ana programın
    üstünde yazılması yeterlidir. Eğer f2 fonksiyonunda f1 fonksiyonu kullanılıyorsa, f1 fonksiyonunun
    f2 fonksiyonundan önce yazılması gerekir.
•   Fonksiyon aşağıdaki formata uygun olarak tanımlanır:

     Function Fonksiyon_adi(parametre listesi):fonksiyon veri tipi; {Başlık}
const
  sabit-1=deger;
     :
  sabit-N=deger;      {Bildirim
var
  degisken-1=veri tipi; Bölümü}
     :
  degisken-M=veri tipi;
begin
  ifade-1;             {İfade
     :             Bölümü}
  ifade-K;
end;

•   1'den N'e kadar tamsayıların toplamını bulan fonksiyon aşağıda verilmiştir.

    Function toplam (n:integer):integer;
    var
      alttoplam, sayi:integer;
    begin
      alttoplam:=0;
      for sayi:=1 To n Do
         alttoplam:=alttoplam + sayi;
      toplam:=alttoplam;
    end;
Prosedürler

•   Program ifadelerinin gruplandırılarak bağımsız program dilimi olarak yazılmasıyla prosedürler
    elde edilir.Aslında fonksiyonlardan farkı parametre almayabilmesi ve değer döndürmemesidir.

•   Ekrana kare çizdiren programın prosedür kullanılarak yazılması:

    program KareProgrami;

    procedure Kare;      {Kare Çizme}
    begin
        writeln('****');
        writeln('* *');
        writeln('* *');
        writeln('****');
    end; {Kare}

    {Anaprogram ifadeleri}
    begin
        Kare;
     end
Rekürsif Altprogramlar

•   Kendi kendini çağıran altprogramlara rekürsif altprogramlar denir. Çözümü güç olan bazı
    problemler rekürsif altprogramlar kullanılarak daha kolay çözülebilir. İteratif altprogramların
    yerine rekürsif altprogramlar kullanılabilir.

•   Rekürsif faktoriyel

program rekürsifFaktoriyel;
var
   sayi:integer;
function faktoriyel (N:integer):integer;
begin
   if N=1 then faktoriyel:=1
         else faktoriyel:= N * Toplam(N-1)
end;
begin
   write('Sayı...:'); readln(sayi);
   writeln(faktoriyel(sayi));
end.
BÖLÜM 4 : SAYMA VERİ TİPLERİ

•   Önceki bölümlerde yazmış olduğumuz programlarda gerçel sayı,tamsayı, katakter ve boolean
    standart veri tiplerini kullanmıştık. Sadece standart veri tipleri kullanarak program yazmanın
    yeterli olmadığı durumlarda kullanıcı tarafından yeni veri tipleri tanımlanabilir. Tanımlanacak
    yeni veri tipleri, herhangi bir standart veri tipinin alt kademesi ( subrange ) olabileceği gibi
    elemanlarının tamamı kullanıcı tarafından belirtilen liste şeklinde ( enumerated ) olabilir.

•   Bir veri tipinin elemanları küçükten büyüğe doğru sıralanabiliyorsa bu veri tipine sayma veri
    tipi denir. Örneğin tamsayılar -maxint,...,-2,-1,0,1,2,.. maxint şeklinde sıralıdır. Sayma veri
    tiplerinde bir elemanı izleyen eleman SUCC( ), öncesindeki eleman ise PRED( ) fonksiyonu
    kullanarak bulunabilir. Boolean veri tipi de sayma tipindedir. Bu tipte FALSE, TRUE'dan önce
    gelir, yani FALSE < TRUE şeklindedir. Karakterler ise ASCII kodlarına göre sıralanırlar. Gerçel
    sayılarda ise bir sayının hemen önündeki ve arkasındaki sayı bilinmediğinden sıralı tipte
    değildir.
Tip Bölümü


• Yeni veri tipleri, değişkenlerin tanımlandığı var bölümünden önce yer alan Type bölümünde belirtilir.
  Type bölümünde yeni veri tipleri tanımlanabileceği gibi daha önce tanımlanmış veri tiplerine yeni isimler
  de verilebilir. Type bölümünün formatı aşağıdaki gibidir:

      type
        isim-1=tip-1;
        isim-2=tip-2;
           ...
        isim-N=tip-N;



• Type bölümünde tanımlanan yeni veri tipleri var bölümünde değişkenlerin veri tipi olarak kullanılır:
      type
        sembol=char;
        mantik=boolean;
      var
        tus, harf :sembol;
        devam :mantik;
        x,y     :integer;

  Yukarıda verilen örnekte; karakter veri tipi sembol, boolan veri tipi de mantik olarak yeniden
  isimlendirilmiştir. Değişken bildiriminde değişkenlerin veri tipi olarak sembol ve mantik kullanılmıştır.
Birebir Sayma Veri Tipi

    Bire bir sayma veri tipinde (enumerated), veri tipinin değerleri liste halinde tanımlanır. Elemanlar parantez
•
    içinde ve birbirlerinden virgül ile ayrılarak yazılır. Örneğin haftanın günlerini liste halinde aşağıdaki şekilde
    yazılabilir:

       (Pazartesi, Sali, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar)


    Bire bir veri tipinin elemanları sıralı bir şekilde verilir. Örneğin: Çarşamba'dan önce Salı, sonra ise Perşembe
•
    gelmektedir. Verilen listenin veri tipi olarak kullanılabilmesi için Type kısmında veri tipine bir isim verilir:

      type
       GunTip=(Pazartesi, Sali, Carsamba, Persembe, Cuma, Cumartesi, Pazar)
      var
       gun:guntip;

    Bire bir veri tipindeki değerler ilişkisel operatörler kullanılarak karşılaştırılabilir. Yukarıda tanımladığımız
•
    GunTip kullanılarak aşağıdaki ifade yazılabilir:

      if(gun <> Cumartesi) and (gun <> Pazar) then
         writeln('Hafta içi');

    Bu ifadede, gun değişkeninin değeri Cumartesi ve Pazar değilse hafta içi mesajı ekrana yazdırılır. Yukarıda
    ifade aşağıdaki şekilde de yazılabilir:

      if(gun >=Pazartesi) and (gun <= Cuma) then
         writeln('Hafta içi');
Alt Kademe Veri Tipi

  Standart veya tanımlanmış veri tiplerinin bir bölgesi yeni veri tipi olarak tanımlanabilir. Bir veri tipinde bir aralığı belirtmek
• için aralıktaki ilk değer ile son değer arasına iki nokta konur:

       ilkdeğer...sondeğer

    Örneğin, karakter veri tipinde büyük harfler, küçük harfler, rakamlar ve özel semboller yer almaktadır. Karakter veri tipi
    kullanılarak büyük ve küçük harfler aşağıdaki şekilde tanımlanabilir:

       type
         BuyukHarfler= 'A'..'Z';
         KucukHarfler= 'a'..'z';
       var
         kucuk : KucukHarfler;
         buyuk : BuyukHarfler;

  Alt kademe tipinde tanımlanmış bir değişkene alabileceği değerler dışında bir değer atandığı zaman kademenin dışına
• çıkıldığı ( out of range ) şeklinde bir hata mesajı verilerek programın çalışması kesilir. Yukarıda verilen örnekte küçük harf
  tipinde bir değişkene büyük harf ataması yapılmak istenirse hata mesajı alınacaktır.

    Tamsayıların belli bir bölgesi veri tipi olarak tanımlanabilir:
•
       type
         AyinGunu=1..31;
         YilinGunu=1..366;
         KucukPozitif=0..100;
         KucukNegatif=-1..-100;

    Yukarıdaki tanımlamalardan sonra bugun değişkeninin veri tipi AyinGunu olarak verilirse bu değişkenin alabileceği değerler
    1-31 kadamesinde tamsayılar olabilir. 32 değeri bu değişkene atanmak istendiği zaman hata mesajı alınacaktır.
BÖLÜM 5 : DİZİLER
     Tek Boyutlu Diziler

•   Bu veri tipinde dizinin elemanları bellekte sırayla yer alırlar ve elemanlara indis kullanılarak
    erişilir.

•   Dizinin her bir elemanı için bellekte gerekli yerin ayrılabilmesi için dizinin elemanlarının veri
    tipinin bilinmesi gerekmektedir. Örneğin, 40 adet sınav notu için notların tamsayı oIduğu
    kabul edilirse SınavNot dizi değişkenini aşağıdaki gibi tanımlanabilir:

       var
         SınavNot: Array[ 1.. 40] of integer;

•   SinavNot tüm notların yer aldığı diziyi, SinavNot[1] ise bu dizideki ilk elemanı temsil
    etmektedir. Bir dizi elemanına değer atamak için:

       SinavNot[1]:= 70;
•   Temel veri tipi kullanarak yazılan sınav notlarını okuyan program:

       const
           max =40;
       type
           dizi = Array [1..max] of integer;
       var
           SinavNot: dizi;
           i:integer;
       begin
       ...
       for i:=1 to max do
            begin
             Write(i,'Sınav Notu..:'); ReadLn(SinavNot[i]);
             end
       end

•   Fonksiyonlara dizileri yollamak için yukarıdaki örnekte yaptığımız gibi ilk önce yeni bir tip
    oluşturup bu tipi bir dizi olarak belirtmemiz gerekir. Daha sonra fonksiyonumuzun parametre
    listesine bu yeni oluşturduğumuz tipi ekleyebiliriz.
Çok Boyutlu Diziler

•   50 satr ve 80 sütundan oluşan bir sayfa bellekte 4000 uzunluğunda tek boyutlu dizi kullanarak
    saklanabilir. Tek boyutlu dizide herhangi bir elemana satır ye sütun numarası verilerek
    doğrudan erişilemez. Satır ve sütun numarasını vererek herhangi bir elemana doğrudan
    erişebilmek için dizinin satır ye sütun şeklinde iki indeksi olması gerekir. Diğer bir deyişle
    dizinin iki boyutlu olması gerekir. İki boyutlu sayfa veri tipi aşagıdaki şekilde tanımlanablir:

     type
       SayfaTip =Array[1.. 50, 1..80]of char;
     var
       Sayfa: SayfaTip;

•   Yukarıda görüldüğü gibi, boyutların kademeleri virgül ile birbirlerinden ayrılmaktadırlar.
    Birinci kademe birinci indekse, ikinci kademe ise ikinci indekse aittir. Sayfanın elemanlarının
    Sayfa[satır,sütun] şeklinde erişilr. Örneğin 2. satır 5. sütundaki elemana Sayfa[2,5] ifadesiyle
    erişilir.

•   İki boyutlu dizilere değer atayabilmek için iç içe döngü kullanmak gerekir. Yukarıdaki sayfa
    değişkenin 'A' karakteri ile için aşağıdaki ifade yazılabilir:

     for satir:= i to 50 do
       for sutun:1 to 80 do
         sayfa[satir,sutun]:='A';
BÖLÜM 6 : KAYITLAR
     Kayıtların Tanımlanması

•   Kayıtların tanımlama işlemi tip bildirim kısmında yapılır. Kayıtlar aşğıda verilen formata uygun şekilde
    tanımlanırlar:

      type
        Kayittip=record
           Alan-1 : tip-1;
           Alan-2 : tip-2;
            ...;
           Alan-N : tip-N;
         end;

•   Yukarıda görüldüğü gibi, kayıt veri tipine bir isim verilmektedir. Alan isimleri ve bu alanlarda saklanacak verinin
    tipi record ve end arasında yazılmaktadır. Örneğin bir ürünün adı, numarası ve fiyatını saklamak amacıyla
    kullanılacak ürüntip kaydı aşağıdaki şekilde tanımlanaqbilir:

     type
       UrunTip=record
        adi :string[20];
        numara :integer;
        fiyat :real;
       end;
•    Burada; UrunTip veri tipinin adıdır. Adi, numara ve fiyat ise alan isimleridir. Diğer
     isimlendirmelerde uygulanan kurallar alan isimleri içinde geçerlidir. Adi alanının veri tipi 20
     karakterlik karakter dizisidir. Numara alanı tamsayı tipindedir. Fiyat alanı ise gerçel tiptedir.

•    Verilerin bellekte saklanabilmesi için bir değişkene gereksinim vardır. Bu nedenle sadece kayıt
     tipini tanımlamak yetmez aynı zamanda tanımlanan kayıt tipini bir değişken için kullanmak
     gerekir. Yukarıda tanımlanan kayıt tipi Urun1 değişkeninin veri tipi olarak aşağıdaki şekilde
     tanımlanabilir:

         var
          urun1 : UrunTip;

       Kayıtların İşlenmesi

•    Dizinin elemanlarına indeks kullanarak erişildiği gibi kayıtın elemanlarına alan isimleri kullanılarak
     erişilir. Kayıt içindeki herhangi bir alana erişmek için kayıt isminden sonra nokta ve alan ismi
     kullanılır:
         KayıtIsmi.AlanIsmi

Urun1 kayıdının alanlarına Urun1.Adi, Urun1.Numara ve Urun1.Fiyat şeklinde erişilebilir. Kayıtlara
değerler atama veya okuma yoluyla aktarılabilir. Aşağıda ürün adı ve numarası atanmıştır, fiyat ise
okunmaktadır:

    Urun1.Adi :='Disket';
    Urun1.Numara :=111;
    Readln(Urun1.Fiyat);
With İfadesi

    Aynı kaydın değişik alanlarına erişebilmek için devamlı kayıt ismini yazmak sıkıcı olabilir. Bunu gidermenin yolu
•
    with ifadesi kullanmaktır. With ifadesi kullanıldığı zaman kayıt ismini vermeden doğrudan alan isimleri
    kullanılabilir. With ifadesinin formatı aşağıda verilmiştir:
          with KayitIsmi do
         ifade;

    With ifadesinde, With ile do arasında kayıt ismi belirtilmektedir. Burada ifade içindeki alanlar için kayıt ismini
•
    yazmak gerekmez. Örneğin Urun1 kaydının fiyat alanına Urun1.Fiyat yerine aşağıdaki şekilde erişilebilir:

        with Urun1 do
          writeln(fiyat);

    Eğer with ifadesi bir ifade bloğu için kullanılacak ise ifadeler begin ve end arasında yazılır:
•
        with Urun1 do
          begin
            writeln(Adi);
            writeln(numara);
            writeln(fiyat);
          end;

    Eğer alan isimleri farklı olan birden fazla kayıt ismi virgülle ayrılarak with ifadesinda kullanılabilir:
•
        with Ogrenci, Urun1 do
          ifade;

    Bu tanımlama ile her iki kaydın alan isimlerini doğrudan kullanma olanağına kavuşulur.
Kayıt Dizileri

•     Diziler temel veri tipleri kullanarak oluşturulduğu gibi kayıt tipi kullanarak da oluşturulabilir.
      Kayıt kullanarak oluşturulan dizilerde dizinin her bir elemanı kayıt tipinde olacaktır. Örneğin
      UrunTip kaydına bir ürünün adı, numarası ve fiyatı saklanmış olsun. 20 tane ürünün adı,,
      numarasu fiyatı saklanmak istendiğinde aşağıda oldugu gibi elemanları UrunTip olan bir dizi
      tanımlanır:
          type
     UrunTip=record
       adi :string[20];
       numara : integer;
       fiyat :real;
    end;
     UrunDiziTip : array[1..20] of UrunTip;
    var
      Urunler : UrunDiziTip;

Urunler dizisinin elemanlarının alanlarına aşağıdaki gibi erişilebilir:
     Urunler[1].Adi, Urunler[1].Numara, Urunler[1].Fiyat
Kayıt İçinde Kayıt Kullanmak

•    Bazen kayıt elemanlarından birbiriyle yakından ilişkili olanların da bir kayıt olarak tanımlanaması daha anlamlı
     olabilir. Bir öğrencinin adı soyadı ve doğum tarihi birer kayıt olarak düzenlenebilir.
      Yani üst seviyede AdSoyad ve DoğumTarihi alanları bulunmaktadır. DoğumTarihi alanı ise Gun, Ay ve Yıl alt
alanlarından oluşmaktadır. Bu tür kayıt yapısını tanımlarken işleme en alt seviyeden başalanabilir. Önce Gun, Ay ve
Yıl'dan oluşan TarihTip kaydı tanımlanır, daha sonra bu kayıt kimliktip kaydını tanımlamada kullanılabilir:

     type
     TarihTip = record
        Gun : 1..31;
        Ay : 1..12;
        Yil : 0..99
       end;

     KimlikTip = record
         AdSoyad : string[25];
         Doğumtarihi : TarihTip
       end;
     var
       Personel : KimlikTip;

Yukarıda tanımlana personel kaydının elemanlarına aşağıdaki şekilde erişilebilir:

       Personel.AdSoyad
       Personel.DogumTarihi.Gun
       Personel.DogumTarihi.Ay
       Personel.DogumTarihi.Yil

•   Bu düzenleme alt programlara veri transferinde de kolaylık sağlar. Örneğin tarihi okumak amacıyla bir altprogram
    yazılmış ise bu altprograma tüm personel biligilerini göndermek yerine sadece tarih bilgileri gönderebilir.
Değişken Kayıtlar

    Aynı kayıt yapısında saklanmak istenen değerler bir takım farklılıklar gösteriyorsa kayıt yapısının değişken olması
•
    gerekir. Örneğin üniversitedeki akademik ve idari personelin bilgileri içinde ortak olanlar (Kimlik bilgileri,fakültesi
    v.b) olduğu gibi farklılık gösterenler de vardır ( anabilimdalı, akademik ünvanlar v.b) Her iki personelin de
    kaydedilebileceği kayıt tipinin değişken tipte olması gerekmektedir. Değişken kayıt tipi sabit ve değişken olmak
    üzere iki kısımdan oluşmaktadır. Değişken tipin tanımlanması case ifadesine benzer. Etiket alanının içeriğine bağlı
    olarak kayıt düzenlenir. Değişken kayıt tipinin formatı aşağıda görülmektedir.

      Type
        KayitTip = record
          alan -1 : tip-1;
          alan -2 : tip-2 ;      { Sabit kısım}
              ....
          alan-N ; tip-N;
      case etiket : EtiketTipi of
        etiket -1 : (alan listesi -1) ;
        etiket-2 : (alan listesi-2) ;     {değişken kısım}
          ....
        etiket -M : (alan listesi-M) ;
      end ;
•   Örneğin idari personelin adı soyadı, sicil numarasını ve görevini akademik personelin ise adı
    soyadı, sicil numarası ve ünvanı içeren bir değişken kayıt aşağıdaki şekilde tanımlanabilir.

       Type
         PersonelTip = (Akademik,idari) ;
         KayitTip = record
             Adsoyad : string[20];
             SicilNo : string[10];
           Case personel : PersonelTip of
             Akademik : (Unvan : string[7]) ;
             İdari : ( Görev : String[15]);
           end ; {KayıtTip}
       var
         eleman : Kayit Tip ;
•   Değişken kayıtların sabit kısımları diğer kayıtlarda olduğu gibi görüntülenir. Değişken
    kısımların görüntülenmesinde ise case ifadesinden yararlanılır:

      With eleman do {Sabit kısımların yazılması}
       begin
          WriteLn('Ad Soyad.....:', AdSoyad);
          WriteLn('SicilNo.....:',SicilNo);
       Case personel of {Değişken kısımların yazdırılması}
          Akademik : WriteLn ('Unvanı...:', Unvan);
          İdari : WriteLn ('Görevi...:', Görev);
       End ; {case}
BÖLÜM 7 : KÜMELER

•   Pascal'daki küme (Set) kavramı matematikteki kumelerden gelmektedir. Elemanları 1,3,5 olan
    küme matematikte {1, 3, 5} şekIinde gösterilmektedir. Pascal'da '{' ve '}' sembolleri açıklama
    amacıyla kullanıldığı için kümeler köşeli parantez içinde [1,3,5] şeklinde yazılırlar. Kümenin
    elemalarının sıralı olaması gerekmediği için diğer veri tiplerinden farklılıklar gösterir.Bu
    nedenle kümenin elemanlarına doğrudan erişilmez.

     Küme Veri Tipi

•  Kümeler bir bilgisayar diliyle oluşturulduğu zaman bazı kısıtlamaları beraberinde
   getirmektedir. Örneğin matematikte kümeler sonsuz sayıda elemana sahip olabilir ama
   Pascal'da bu sayı 256 ile sınırlıdır.
• Bir kümenin elemanları çözülecek problem için tanımlanan evrensel küme (Universal Set) den
   seçilir. Örneğin sesli harfler kümesi için evrensel küme tüm harflerden oluşan küme olabilir.
   Pascal programında kümenin tüm elemanları aynı tipte olmalıdır. Kümenin taban tipi olarak
   adlandırılan bu tipin sayma veri tipinde olmalıdır. Kümenin taban tipi olarak adlandırılan bu
   tipin sayma veri tipinde olması gerekir. Küme tanımlamada set of sözcüğü kullanılır.
       Type
 SetTip = set of Taban tip;
•   Rakam ve gün kümeleri aşağıdaki şekilde tanımlanabilir:
      Type
       Rakamlar = 0..9;
       Gunler = (Pazartesi, Salı, Carşamba, Persembe, Cuma, Cumartesi, Pazar);
       RakamKumesi = set of Rakamalar;
       GunKümesi = set of Gunler;
      Var
       Rakam1 : Rakamlar ;
       Gun1 : Gunler;
       Rakam : RakanKumesi;
       Gun: GünKumesi;

•   Rakam1 değişkeni Rakamlar veri tipinde olduğu icin 0-9 aralığında bir değer içerebilir. Rakam ise
    RakanKumesi tipinde olduğu için 0-9 aralığındaki değerlerden herhangi bir sayıda eleman içerebilir.
    Benzer şekilde Gun1 değişkeninde haftanın günlerinden biri saklanabilirken, Gun degişkeninde
    haftanın günlerinden oluşmuş bir küme saklanabilir.
•   Pascal'da küme sabitleri köşeli parantezler içinde yazılır. Örneğin 0-9 aralığında çiftsayılardan
    oluşan küme sabiti şu şekilde yazılır: [ 0, 2, 4, 6, 8]
•   Kümelerde elemanların sırası önemli olmadığı için yukarıdaki küme [ 2,0,4,8,6 ] veya [ 8,6,4,2,0 ]
    şeklinde de yazılabilir. Kümenin elemaları sıralı ise şu şekilde de yazılabilir: [ 0..4 ]
•   Kümenin elemanlarının sıralı olanlar iki nokta ile tanımlanır diğerleri virgülle ayrılır. Örneğin 0-9
    rakamları ve A-F harflerinden oluşan onaltılı sayı kümesi şu şekildede yazılabilir : [ '0'..'9', 'A'..F'.]
•   Kümeye atanan değerler kümenin taban tipiyle aynı olması gerekmektedir. Yukarıda görüldüğü gibi
    kümeye değer atarken sabitler veya değişkenler kullanılabilmektedir. Gun kümesine Pazartesi,
    Çarşamba ve Cuma sabitleri atanırken Rakam kümesine Rakam1 değişkeninin içeriği atanmaktadır.
•   Pascal'da boş küme içi boş köşeli parantezler kullanılarak belirtilir. Örneğin Rakam kümesi boş
    küme olarak aşagıdaki şekilde tanımlanabilir: Rakam : = [ ];
Küme Üyeliği

•   Bir elemanın verilen kümenin elemanı olup olmadığını bulmak için in ilişkisel operatörü
    kullanılır. Küme üyeliğini test etmek için kullanılan booean ifadesi aşağıdaki gibidir:
        eleman in küme

•   Bu ifade küme; küme sabiti, küme değişkini veya küme ifadesi şeklinde olabilir. Rakam1 ve
    Teksayi değişkenlerini aşağıdaki şekilde tanımlanır:
      Type
      Rakamalar = 0..9 ;
      RakamKümesi = set of Rakamlar ;
      Var
      Rakam1 : Rakamlar;
      TekSayı : RakamKümesi ;

•   TekSayi kümesine Teksayi : = [ 1,3,5,7,9] değerleri atandığında yazılan boolean ifadeleri ve
    sonuçları aşağıda görülmektedir:
      4 in Teksayı    Yanlış
      5 in Teksayı    Doğru

•   Yukarıdaki ifadelerde 4 ve 5 sabit olarak kullanılmıştır. Bu ifadelerde sabit yerine
    değişkenlerde kullanılabilir. Eğer Rakam1 değişkenine 4 değerini atayarak aşagıdaki ifadeler
    yazılabilir:
      Rakam1 in TekSayi            Yanlış
      Rakam1+1 in TekSayı          Doğru
Küme İşlemleri

•     Nümerik değerler ve aritmetik operatörler kullanılarak aritmetik ifadelerden nümerik sonuçlar
      elde edildiği gibi kümeler ve küme operatörleri kullanılarak yazılacak küme ifadelerinden de
      küme tipinde sonuçlar elde edilir.

•     Verilen iki küme kullanılarak yeni bir küme oluşturulabilir. Oluşturulacak kümenin elemanları ;
      verilen kümelerin tüm elemanları, ortak elemanları veya farklı elemanları olabilir. Bu yeni
      kümeler sırasıyla ; birleşim, kesişim, ve fark kümeleridir.

•     Birleşim işlemi + işareti ile gösterilir ve sonuç verilen kümelerin tüm elemanlarını içerir.

          [1,2,5] + [2,4]..... [1,2,4, 5]

•     Kesişim işlemi * işareti ile gösterilir ve sonuç verilen kümelerin ortak elemanlarını içerir:

          [1,2,5] * [2 ,4].... [2]

•     Fark işlemi - işareti ile gösterilir ve sonuç A kümesinin B’de olmayan elemanlarıdır:

    ['A','B','G','H'] - ['A','B','C','D']....['G','H']

•     İfadelerde kullanılacak kümelerin taban tiplerinde aynı olması gerekmektedir. Verilecek bir
      küme ifadesinde öncelikler kesişim işlemi (*) daha sonra birleşim veya fark işlemi (+/-) yapılır.
      Aritmetik ifadelerde olduğu gibi parantezler kullanılarak işlem sırası değiştirilebilir.
Kümelerin Karşılaştırılması

•   İlişkisel operatörler yardımıyla iki kümenin eşit olup olmadıklarına veya bir kümenin diğerini
    kapsayıp kapsamadığına bakılabilir. Aşagıda iki küme arasında kontrol edilebilecek ilişkiler
    görülmektedir.

•   Ave B kümeleri ayni eleinanlardan oluşuyorsa eşittir (A=B),
•   Ave B kümelen aym elemanlardan oIuşmuyorsa eşit degildir (A<>B),
•   A küniesinin her elemanı B kumesinin de elemanı ise A kümesi B kumesinin alt kumesidir (A<=B)
    veya B, A'yi kapsar( B>=A).

•   Kümelerin karşılaştırılması ile ilgili örnekler ve sonuçları aşağıda görülmektedir:

      [1,2,3] = [1,3,2]      Doğru
      [1,2,3] <> [1,3,2,]    Yanlış
      [1,2,3] <= [1,3,24]     Doğru
      [1,2,3] >= [1,3,2,4]   Yanlış



     Kümelerin Okunması ve Yazdırılması

•   Bir çok veri tipinde olduğu gibi küme tipi de standart Read ve Write prosedürleri ile okutulup
    yazdırılamaz. Okuma işleminde küme elemanları teker teker okunarak başlangıçta boş olan kümeye
    birleşme işlemi ile eklenir. Kümeyi yazdırmak için taban tipinin alabileceği tüm değerlerin küme
    içinde yer alıp almadığı in ifadesi ile kontrol edilir, yer alıyorsa yazdırılır.
BÖLÜM 8 : DOSYALAR

                                    Metin Dosyalar
•    Tekst dosyalarının temel elemanı karakterlerdir. Tekst dosyasında 0-9 rakamları, 'A'..'Z' büyük
     harfler 'a'..'z' küçük harfler, noktalama işaretleri, diğer semboller ve kontrol karakterleri yer alabilir.
     Karakterler satırlar şeklinde düzenlenmiştir. Satır uzunluğunda herhangi bir sınırlama yoktur. Satır
     sayısında da bir sınırlama yoktur. Sınırlama ancak yardımcı belleğin kapasitesinden ileri gelebilir.

•    Dosya bir editör kullanılarak yazıldığında dosya sonu karakteri editör tarafından otomatik olarak
     eklenir. Eğer dosya kullanıcı tarafından giriliyorsa ^Z (Kontrol-Z) gibi bazı kontrol karakterlerinin
     kullanıcı tarafından girilmeis gerekir.

•    Tekst dosyaları yalnız çıkış veya yalnız giriş için kullanılabilir. Diğer deyişle bir tekst dosyası hem giriş
     hem de çıkış için kullanılamaz Tekst dosyası kullanabilmek için TEXT tipinde bir dosya değişkeninin
     tanımlanması gerekir:

    var
    GirisDosyasi, CikisDosyasi : text ;
•    Dosyaların kullanılmadan önce açılması gerekir. Açma işlemi mevcut bir dosyadan veri okumak
     için yapılabileceği gibi verileri yazılabileceği yeni bir dosya oluşturmak için de yapılabilir. Dosya
     açılmadan önce yardımcı bellekte dosyanın adının ne olduğunun belirtilmesi gerekir. Bu amaçla
     assign ifadesi kullanılır. Örneğin tekst olarak tanımlanan GirisDosyasi'nın adı GIR.DAT ise

        Assign (GirisDosyasi, 'GIR.DAT' ) ;   İfadesiyle dosyanın adı belirtilir.



       Tekst dosyasının okunması

•    Aşağıda GIR DAT dosyasını okuyarak ekrana yazan programın tamamı görülmektedir.

    Program TekstOku ;
    var
      GirisDosyasi : text;
    Begin
      assing (GirisDosyasi, 'GIR. DAT') ;
      reset (GirisDosyası) do
      while not eof (GirisDosyasi) do
        Begin
           ReadLn (GirisDosyasi, Sayi, Kare,Kup);
           WriteLn (Sayi,Kare,Kup);
        end
      Close (GirisDosyası) ;
    end
Metin Dosyaya Yazma

  Verilen tekst dosyalarına yazdırılabilmesi için dosyanın rewrite ifadesiyle açılması gerekmektedir. Rewrite
• ifadesi diskette belirtilen isimde dosya yoksa oluşturur varsa dosyanın içindekileri siler. Rewrite ifadesi ile
  açma işlemi yapılmadan önce dosya okumada olduğu gibi assing ifadesiyle dosya değişkenin temsil ettiği
  dosyanın adının belirtilmesi gerekir. Örneğin verileri yazdırmak amacıyla CIKTI.DAT adlı dosyayı CikisDosyasi
  adlı dosya değişkenini, kullanarak

      Assing (CikisDosyasi, 'CIKTI.DAT') ;
    Rewrite (CikisDosyasi) ;

  ifadeleriyle açabilir. Dosyaya verileri yazdırmak için standart Write Prosedürü kullanılır. Daha önceki
kullanımından farklı paremetre olarak dosya değişkeninin belirtilmesidir.

    İşlemler bittikten sonra açılan dosya yine close ifadesi ile kapatılmalıdır.
•

    Aşağıda 1'den 100'e kadar sayıları kareleri ve küpleri ile birlikte tekst sosyaya yazan program görülmektedir:
•
      Program TekstYaz ;
      Var
        CikisDosyasi : text;
        Sayi : integer ;
      Begin
        Assing (CikisDosyasi, 'CIKTI.DAT') ;
        Rewrite (CikisDosyasi);
        for sayi : = 1to 100 do
          WriteLn (CikisDosyasi, Sayi :10,Sayi* Sayi:10,Sayi*Sayi*Sayi:10);
        Close (CikisDosyasi);
      end
İkili Dosyalar
•   İkili dosyalar bir kaç yönden tekst dosyalarından farklıdır. İkili dosyalar rasgele
    erişilebilirdirler yani dosyayı satır satır okumak yerine dosyanın herhangi bir yerine doğrudan
    erişebilirsiniz.

      İkili dosyanın okunması

      program DataFiles;

var
 f: file of Byte;
 b: Byte;

begin
 Assign(f,'MyFile.txt');
 Reset(f);
 Seek(f,0);
 Read(f,b);
end
İkili Dosyaya Yazma

•   Write komutu ile dosyaya bir değer yazmak için öncelikle o değeri bir değişkene atamak
    gerekir. Yazmak istediğimiz yeri bulmak için Seek komutunu kullanırız. Ve ayrıca
    unutmamalıyız ki ikili dosyalar 1’den değil 0’dan başlar:

      program DataFiles;

var
 f: file of Byte;
 b: Byte;

begin
 Assign(f,'MyFile.txt');
 Reset(f);
 b := 1;
 Seek(f,0);
 Write(f,b);
end.
BÖLÜM 9 : POINTERS
     Typed pointer’ları deklare etmek ve kullanmak

•   Bir typed pointer deklare etmek için bu pointer’in işaret etmesini istediğiniz değişken türünün
    önüne bir ^ işareti koymalısınız. Bir tamsayiyi işaret eden bir pointer örneği şu şekildedir:

    var
     p: ^integer;

•   @ işareti bir değişkenin önüne konularak o değişkenin adresi elde edilir. Daha sonra bu adres
    bir pointer’a kaydedilir, çünkü pointer’lar adres tutan değişkenlerdir. Bir tamsayinin adresini
    tutan bir pointer şu şekilde elde edilebilir:

     program Pointers;

var
 i: integer;
 p: ^integer;

begin
 p := @i;
end.
Bir tamsayi değişkenini işaret eden bir pointer kullanarak o tamsayi değişkeninin değerini değiştiren program örneği
• aşağıdaki gibidir:


    program Pointers;

var
 i: integer;
 p: ^integer;

begin
 i := 1;
 p := @i;
 p^ := 2;
 writeln(i);
end

    Hafızadan yer ayırmak ve bu yeri geri vermek ise şu şekilde yapılır:
•

    program Pointers;

var
 p: ^integer;

begin
 new(p);
 p^ := 3;
 writeln(p^);
 dispose(p);
end
Untyped pointer’ları deklare etmek ve kullanmak


• Deklerasyonu şu şekildedir:

var
 p: pointer;

• Bu tür pointer kullanırken new ve dispose yerine getmem ve freemem fonksiyonlarini kullanırız:

   program Pointers;

var
 p: pointer;

begin
 getmem(p,sizeof(integer));
 freemem(p,sizeof(integer));
end.
Furkan EYBEK
 05104414

Teşekkürler…

Contenu connexe

Tendances

Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeSANG WON PARK
 
Apache Tez – Present and Future
Apache Tez – Present and FutureApache Tez – Present and Future
Apache Tez – Present and FutureDataWorks Summit
 
S3 classes and s4 classes
S3 classes and s4 classesS3 classes and s4 classes
S3 classes and s4 classesAshwini Mathur
 
MapReduce Scheduling Algorithms
MapReduce Scheduling AlgorithmsMapReduce Scheduling Algorithms
MapReduce Scheduling AlgorithmsLeila panahi
 
Portable Lucene Index Format & Applications - Andrzej Bialecki
Portable Lucene Index Format & Applications - Andrzej BialeckiPortable Lucene Index Format & Applications - Andrzej Bialecki
Portable Lucene Index Format & Applications - Andrzej Bialeckilucenerevolution
 
OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]
OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]
OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]vasuballa
 
Data mining query languages
Data mining query languagesData mining query languages
Data mining query languagesMarcy Morales
 
Uml activity diagram
Uml activity diagramUml activity diagram
Uml activity diagramSally Jarkas
 
Machine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlibMachine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlibIMC Institute
 
Parametric & Non-Parametric Machine Learning (Supervised ML)
Parametric & Non-Parametric Machine Learning (Supervised ML)Parametric & Non-Parametric Machine Learning (Supervised ML)
Parametric & Non-Parametric Machine Learning (Supervised ML)Rehan Guha
 
Graph Analytics for big data
Graph Analytics for big dataGraph Analytics for big data
Graph Analytics for big dataSigmoid
 
PL/SQL Code for Sample Projects
PL/SQL Code for Sample ProjectsPL/SQL Code for Sample Projects
PL/SQL Code for Sample Projectsjwjablonski
 

Tendances (20)

Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflake
 
Spark SQL
Spark SQLSpark SQL
Spark SQL
 
Apache Tez – Present and Future
Apache Tez – Present and FutureApache Tez – Present and Future
Apache Tez – Present and Future
 
S3 classes and s4 classes
S3 classes and s4 classesS3 classes and s4 classes
S3 classes and s4 classes
 
Apache spark
Apache sparkApache spark
Apache spark
 
MapReduce Scheduling Algorithms
MapReduce Scheduling AlgorithmsMapReduce Scheduling Algorithms
MapReduce Scheduling Algorithms
 
Portable Lucene Index Format & Applications - Andrzej Bialecki
Portable Lucene Index Format & Applications - Andrzej BialeckiPortable Lucene Index Format & Applications - Andrzej Bialecki
Portable Lucene Index Format & Applications - Andrzej Bialecki
 
OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]
OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]
OOW16 - Online Patching with Oracle E-Business Suite 12.2 [CON6710]
 
Data mining query languages
Data mining query languagesData mining query languages
Data mining query languages
 
Uml activity diagram
Uml activity diagramUml activity diagram
Uml activity diagram
 
MapReduce
MapReduceMapReduce
MapReduce
 
Machine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlibMachine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlib
 
Parametric & Non-Parametric Machine Learning (Supervised ML)
Parametric & Non-Parametric Machine Learning (Supervised ML)Parametric & Non-Parametric Machine Learning (Supervised ML)
Parametric & Non-Parametric Machine Learning (Supervised ML)
 
Graph Analytics for big data
Graph Analytics for big dataGraph Analytics for big data
Graph Analytics for big data
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
 
Nosql data models
Nosql data modelsNosql data models
Nosql data models
 
Apache Flink Deep Dive
Apache Flink Deep DiveApache Flink Deep Dive
Apache Flink Deep Dive
 
PL/SQL Code for Sample Projects
PL/SQL Code for Sample ProjectsPL/SQL Code for Sample Projects
PL/SQL Code for Sample Projects
 
cloud computing basics
cloud computing basicscloud computing basics
cloud computing basics
 
Hadoop scheduler
Hadoop schedulerHadoop scheduler
Hadoop scheduler
 

Similaire à Pascal

PROGRAMLAMA OPERATÖRLER
PROGRAMLAMA OPERATÖRLERPROGRAMLAMA OPERATÖRLER
PROGRAMLAMA OPERATÖRLERCJFail
 
Programlama Temelleri Değişkenler
Programlama Temelleri DeğişkenlerProgramlama Temelleri Değişkenler
Programlama Temelleri Değişkenlerkadirolmez
 
C#, Microsoft Yaz Okulu 2010 - İzmir
C#, Microsoft Yaz Okulu 2010 - İzmirC#, Microsoft Yaz Okulu 2010 - İzmir
C#, Microsoft Yaz Okulu 2010 - İzmirEnterprisecoding
 
Değişkenler hakkında bilgilendirici slayt
Değişkenler hakkında bilgilendirici slaytDeğişkenler hakkında bilgilendirici slayt
Değişkenler hakkında bilgilendirici slaytMusa Kılıç
 
Programlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır MetodlarProgramlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır Metodlarkadirolmez
 
php nin yapı taşları
php nin yapı taşlarıphp nin yapı taşları
php nin yapı taşlarıforummsn
 
matlab basic introduction with plot commands
matlab basic introduction with plot commandsmatlab basic introduction with plot commands
matlab basic introduction with plot commandslkeE2
 
Ders 9 formul ve uygulamalar
Ders 9 formul ve uygulamalarDers 9 formul ve uygulamalar
Ders 9 formul ve uygulamalarfehimk
 
Nesne tabanlı programlamada metotlar
Nesne tabanlı programlamada metotlarNesne tabanlı programlamada metotlar
Nesne tabanlı programlamada metotlarErol Dizdar
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculumustafa sarac
 
Az ve Öz Matlab - Muhammet ÇAĞATAY
Az ve Öz Matlab - Muhammet ÇAĞATAYAz ve Öz Matlab - Muhammet ÇAĞATAY
Az ve Öz Matlab - Muhammet ÇAĞATAYMuhammet ÇAĞATAY
 
tarih zaman fonksiyon alfanumerik
tarih zaman fonksiyon alfanumeriktarih zaman fonksiyon alfanumerik
tarih zaman fonksiyon alfanumerikŞaban Akkuş
 

Similaire à Pascal (20)

Matlab Seminer2005
Matlab Seminer2005Matlab Seminer2005
Matlab Seminer2005
 
PROGRAMLAMA OPERATÖRLER
PROGRAMLAMA OPERATÖRLERPROGRAMLAMA OPERATÖRLER
PROGRAMLAMA OPERATÖRLER
 
Ders1-Deği̇şkenler-C#
Ders1-Deği̇şkenler-C#Ders1-Deği̇şkenler-C#
Ders1-Deği̇şkenler-C#
 
Programlama Temelleri Değişkenler
Programlama Temelleri DeğişkenlerProgramlama Temelleri Değişkenler
Programlama Temelleri Değişkenler
 
C#, Microsoft Yaz Okulu 2010 - İzmir
C#, Microsoft Yaz Okulu 2010 - İzmirC#, Microsoft Yaz Okulu 2010 - İzmir
C#, Microsoft Yaz Okulu 2010 - İzmir
 
Değişkenler hakkında bilgilendirici slayt
Değişkenler hakkında bilgilendirici slaytDeğişkenler hakkında bilgilendirici slayt
Değişkenler hakkında bilgilendirici slayt
 
Programlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır MetodlarProgramlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır Metodlar
 
php nin yapı taşları
php nin yapı taşlarıphp nin yapı taşları
php nin yapı taşları
 
C# Sunusu - 1
C# Sunusu - 1C# Sunusu - 1
C# Sunusu - 1
 
matlab basic introduction with plot commands
matlab basic introduction with plot commandsmatlab basic introduction with plot commands
matlab basic introduction with plot commands
 
Ders 9 formul ve uygulamalar
Ders 9 formul ve uygulamalarDers 9 formul ve uygulamalar
Ders 9 formul ve uygulamalar
 
Nesne tabanlı programlamada metotlar
Nesne tabanlı programlamada metotlarNesne tabanlı programlamada metotlar
Nesne tabanlı programlamada metotlar
 
MS Excel 2013
MS Excel 2013MS Excel 2013
MS Excel 2013
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
 
Az ve Öz Matlab - Muhammet ÇAĞATAY
Az ve Öz Matlab - Muhammet ÇAĞATAYAz ve Öz Matlab - Muhammet ÇAĞATAY
Az ve Öz Matlab - Muhammet ÇAĞATAY
 
Delphi xe5
Delphi xe5Delphi xe5
Delphi xe5
 
Delphi xe5
Delphi xe5Delphi xe5
Delphi xe5
 
tarih zaman fonksiyon alfanumerik
tarih zaman fonksiyon alfanumeriktarih zaman fonksiyon alfanumerik
tarih zaman fonksiyon alfanumerik
 
başlıkk 11111
başlıkk 11111başlıkk 11111
başlıkk 11111
 
sunu (Asp-1)
sunu (Asp-1)sunu (Asp-1)
sunu (Asp-1)
 

Plus de Cumhuriyet Üniversitesi (8)

Gereksinim Analizi Dokümanı Hazırlama
Gereksinim Analizi Dokümanı HazırlamaGereksinim Analizi Dokümanı Hazırlama
Gereksinim Analizi Dokümanı Hazırlama
 
ALGOL ailesi programlama dilleri
ALGOL ailesi programlama dilleriALGOL ailesi programlama dilleri
ALGOL ailesi programlama dilleri
 
Phyton Programlama Dili
Phyton Programlama DiliPhyton Programlama Dili
Phyton Programlama Dili
 
Prolog
PrologProlog
Prolog
 
Teknik Rapor Nasıl Yazılır?
Teknik Rapor Nasıl Yazılır?Teknik Rapor Nasıl Yazılır?
Teknik Rapor Nasıl Yazılır?
 
Veri madenciliği ve ids
Veri madenciliği ve idsVeri madenciliği ve ids
Veri madenciliği ve ids
 
Veritabanları
VeritabanlarıVeritabanları
Veritabanları
 
Delphi 7
Delphi 7Delphi 7
Delphi 7
 

Pascal

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