Pascal kitabı

CorsaiR

Emektar
27 Ara 2005
1,228
18
Çekirdekten
Pascal kitabı
Pascalın tarihcesi


PASCAL Programlama dili 1968 yılında Niklaus Wirth tarafından Zürih ETH’de (Eindgenossische Technische Hocshule) konuşma diline yakın, öğrenilmesi kolay bunun yanında etkin ve güvenilir bir programlama dili olarak geliştirildi.

ALGOL 60 programlama dilinde bulunan yapısal programlama tekniğini de bünyesine katarak zamanının yaygın olarak kullanılan FORTRAN ve COBOL dilleri karşısında önemli bir üstünlük sağlama başarısını gösterdi. Basit ve anlaşılır bir kodlama ve kontrol yapısına sahip olan PASCAL aynı zamanda prosedür, fonksiyon tanımlama ve dinamik veri yönetimi gibi önemli özelliklere sahip.

Pascalın uluslararası alanda kazandığı başarının artması ve değişik bilgisayar sistemleri için değişik türevlerinin yazılması zamanla bazı sıkıntılara yol açamaya başladı bunu üzerine 1980 yılında PASCAL Uluslararası Standartlar Enstitüsü (ISO) tarafından standartlaştırıldı. (Jensen ve Wirth’in raporu esas olarak hazırlanan Standart PASCAL’ın tanımı ISO’nun DP7185 nolu belgesinde bulunmaktadır). Amerikan Ulusal Standartlar Enstitüsü (ANSI)’de kısa bir süre sonra buna benzer bir standardı kabul etti.

Pascalda Verı Tipleri


Tamsayı Tipleri
Pascalda değişkenleriniz için tanımlayabileceğiniz veri tiplerini aşağıda bulabilirsiniz. İşaretli veya işaretsiz tamsayıları ifade etmek için kullanabileceğiniz çeşitli aralıkları kapsayan değişken tipleridir. Programlarınızda en çok kullanacak olduğunuz tipler de yine bu tiplerdir.
Tip Değer Açıklama
Byte 0..255 İşaretsiz tamsayılar (8 bit).
Shortint -128..127 İşaretli tamsayılar (8bit).
Integer -32768..32767 İşaretli tamsayılar (16 bit)
Word 0..65535 İşaretsiz tamsayılar (16 bit).
Longint -2147483648..2147483647 İşaretli tamsayılar(32 bit).

Tamsayı Tipleri
Bu sayı tipleri sabit veya kayar noktalı gerçel sayıları ifade etmekte kullanılırlar. Özellikle büyük rakamlarla veya bilimsel araştırmalarla uğraşıyorsanız bu tip değişkenlere çok işiniz düşecek demektir.
Tip Değer Basamak Açıklama
Real 2.9e-39..1.7e38 11-12 6 bytelık yer tutar
Single 1.5e-45..3.4e38 7-8 4 bytelık yer tutar
Double 5.0e-324..1.7e308 15-16 8 bytelık yer tutar
Extended 3.4e-4932..1.1e4932 19-20 10 bytelık yer tutar
Comp -9.2e18..9.2e18 19-20 8 bytelık yer tutar

Aşağıdaki değerler bilimsel notasyonda yazılmıştır. Düzgün görüntüsü için tu örnekten yararlanabilirsiniz :
2.9e-39 = 2.9 * 10-39

Karakter ve Alfanümerik Tipler
Bu tip değişkenlerin içinde isim, adres gibi sayısal olmayan değerler tutulur.
Tip Değer Açıklama
Char ‘a’,’z’... Tek karakterlik değişkenler (8 bit).
String (0..254 karakter) Karakterlerden oluşan dizidir

Mantıksal Tip Sadece doğru veya yanlış değerini tutabilen değişkenlerdir. Karar vermenizde size yardımcı olacaklarına emin olabilirsiniz. Doğru için 1, yanlış için 0 olarak düşünebilirsiniz.
Tip Değer
Boolean True,False (1,0)

Pascal'da Değişken ve Sabit Tanımlamala


Var Bloğu:
Pascalda değişken tanımlamak için VAR bloğu kullanılır. Bu blokta bir değişken tanımlamak için önce değişkenin adı, sonra “:” (iki nokta üstüste) ve son olarak da değişkenin tipi belirtilir. Aynı tipite olan değişkenleri virgülle ayırarak bir defada da tanımlayabilirsiniz.

[, ,…] : ;
Örnek :
Var
Sayi : integer;
İsim, Soyisim : string;
Var bloğu başka bir bloğun başlaması ile biter. Programınızın daha okunaklı olması için “:” leri alt alta getirmeye özen gösterebilirsiniz. Unutmayın ki iyi bir programcı kodunun okunurluğundan belli olur.
Const Bloğu:
Pascalda sabit tanımları CONST bloğunda yapılır. Sabitlerin özelliği program içerisinde değerlerinin değiştirilememesidir. Bir sabitin tanımlanması için önce sabitin adı, sonra “=” ve sabit değeri yazılır.

= ;
Örnek:
Const
Pi = 3.14;
Bu blokta yapılabilecek diğer bir tanım ise değişkenlere ilk değer verilmesidir. Bunun için önce değişkeninizin adını yazıyorsunuz sonra “:” koyup tipini belirliyorsunuz ve ilk değer vermek için “=” yazıp ilk değerini veriyorsunuz.

: = ;
Örnek:
Const
Sayac : byte = 0;
Programlara Açıklama Eklenmesi


Program yazımı sırasında kodlarımıza çok sık ekleme ve çıkarmalar yaparız bunlar bazen programları içinden çıkılmaz hale getirebilir, bunu engellemek için Pascalda programlara açıklama satırları ekleyebilirsiniz. Açıklama satırları eklemeniz ileride programda yaptığınız değişiklikleri ve program akışını kolayca hatırlamanızı ve programınızı inceleyen diğer kişilerin programı kolayca anlamalarını sağlayacaktır.

Pascalda açıklama satırı yazımı için {,} sembolleri veya (*,*) ikilileri kullanılır bunlar açıklamanın nerede başlayıp nerede bittiklerini belirtir. Programın derlenmesi esnasında bu satırlar derleyici tarafından gözardı edilir, yani derlenmiş kodda açıklama satırları yer almaz. Açıklamalar birinci tipte { ile başlar } ile biter. İkinci tipte ise (* ile başlar ve *) ile biter.
Programlarınızda açıklama satırlarına sıkça yer vermeniz hem sizin hem de programı inceleyen diğer kişilerin programı rahat anlamalarını sağlayacaktır.
Örnek:
Var
sayi:integer;
{sayi değişkeni kaç kişinin adını gireceğimizi saymak için kullanıldı. Bu bir açıklama satırıdır ve derleyici tarafından gözardı edilir}
adi:string[20];
(* Bu da bir açıklama satırıdır ve bu satır da derleyici tarafından gözardı edilir*)
Pascalda değişken tanımlamalarının ve kod satırlarının sonuna noktalı virgül geldiği halde açıklama satırlarının sonuna noktalı virgül gelmediğine özellikle dikkat edin.
Değer Atama ve Tip Dönüşümleri


Pascalda diğer programlama dillerinden farklı olarak değer ataması yapılırken ":=" (iki nokta üst üste ve eşittir işaret ikilisi kullanılır). Yani sayi diye bir integer tipindeki değişkene 20 değerini atamak istediğimizde yapmamız gerekenler şöyle olacaktır.

Örnek:
Var
sayi : integer;
{ sayi adında integer tipinde bir değişken tanımladık }
...
sayi := 20;
(* sayi değişkenine 20 değerini atadık *)
sayi := sayi + 1;
(* sayi değişkeninin değerini 1 arttırdık *)
...
Pascalda değişkenlere değer atarken iki nokta üstüstü ve eşittir birlikte kullanılır. Eşittir tek başına kullanıldığında karşılaştırma operatörü olarak görev yapar.

Pascalda, Standart Veri Tipleri sayfasında da bahsedildiği gibi değişik tiplerde ve değişik uzunluklarda sayılar tanımlama imkanımız var. Programımızın akışı dolayısıyla bazen değişik tip ve uzunluklardaki değişkenlerin birbirlerine değer aktarmaları gerekebilir veya değişik tiplerdeki değişkenler tek bir ifade içinde işleme konulabilir. Böyle durumlarda bu değişkenlerin tiplerinin birbirine dönüştürülmesi gerekir buna tip dönüşümü (Type Casting) denir.
Pascalda bu işlem için tu fonksiyonlar kullanılır.

trunc(real):longint { real bir değişkeni longint tipine dönüştürür.}
int(real):real {real bir değerin tam kısmını alır}
frac(real):real {real bir değerin ondalık kısmını alır}
round(real):longint {real bir değişkeni en yakın tam sayıya yuvarlayarak longint tipine dönüttürür}
str(x,y) { x sayısını karakter dizisi olarak string tipindeki y değişkenine atar}
val(x,y,code) {x stringini y integer değişkenine atar. Eğer bu dönüşüm sırasında bir hata oluşursa code değişkeni 0 (sıfır)'dan farklı bir değer alır. Code değişkenin aldığı değer hatanın stringin kaçıncı elemanında oluştuğunu gösterir.}
Operatörler

Pascalda programlama esnasında en fazla ihtiyaç duyulan şeyler herhalde operatörlerdir. Değer atamalarından mantıksal karşılaştırmalara ve aritmetik işlemlere kadar onlar bizim en büyük yardımcılarımızdır. İşin aslı onlarsız herhengi bir dil de olamazdı. Şimdi kısaca bu operatörleri inceleyelim.

Aritmetik Operatörler
Operator İşlemi İşlem Tipleri Sonuç tipi
+ Toplama integer,real integer,real
- Çıkarma integer,real integer,real
* Çarpma integer,real integer,real
/ Bölme integer,real real,real
Div Tamsayı Bölme integer,real integer,real
Mod Kalan integer integer

Mantıksal Operatörler
Operator İşlem İşlem Tipi Sonuç Tipi
Not Değil integer integer
And Ve integer integer
Or Veya integer integer
Xor 1 sayacı integer integer
Shl Sola kaydırma integer integer
Shr Sağa kaydırma integer integer

Karşılaştırma Operatörleri Bu operatörlerin sonucu daima boolean döner.
Operatör Açıklaması
= Eşit olup olmadığını kontrol eder
<> Farklı olup olmadığını kontrol eder
< Küçük mü?
> Büyük mü?
<= Küçük veya eşit mi?
>= Büyük veya eşit mi?
Pascal'da Operatörlerin Önceliği


Operatör Öncelik
@, Not Yüksek
*, /, div, mod, and, shl, shr İkinci derece
+, -, or, xor Üçüncü derece
=, <>, <, >, <=, >=, in Dördüncü derece

1- İki operand arasındaki farklı operatörlerde önceliği yüksek olan önce işleme girer. Tips : Yani daha önce okullarda gösterilen ÇaBuTÇu örneği gibi.
2- Eğer aynı önceliğe sahip operatörler kullanılıyorsa öncelik soldakinindir.

3- Tüm bu operatörlerin önceliğini değiştirebilecek tek şey parantezlerdir. Parantezler daima ilk olarak işleme girer. Parantez içi işlemlerde de yukarıdaki öncelikler geçerlidir.
Programınızın sizin istemediğiniz bir sonuç çıkarmasını istemiyorsanız bol bol parantez kullanın. Ama açtığınız parantezleri kapatmayı da unutmayın.
Pascal Programının Genel Yapısı


Pascalın en önemli özelliklerinde birisi de yapısal bir programlama dili olmasıdır. Bu programınızı yazarken size maksimum esneklik sağlar. Aynı zamanda yazdığınız program parçalarını problemsiz bir şekilde birleştirmenizi de sağlar.
Her pascal programının ana kodu mutlaka bir BEGIN deyimi ile başlar ve END. deyimi ile biter. (End den sonra nokta olduğuna dikkatinizi çekerim. Pascal derleyicisi için bu tüm programın bittiği yer anlamına gelir.) Eğer program içerisinde aynı blok içerisinde işlem görmesini istediğiniz kodlarınız varsa bunları bir BEGIN - END bloğu içerisine alırsınız. Fakat bu sefer END’den sonra noktalı virgül (;) kullanmalısınız.

Bir Pascal programının genel yapısı aşağıdaki gibidir.
Program (* Program başlığı. Buraya yazacaklarınızın programa bir etlisi olmaz *)

Uses (* Kullanılacak harici kütüphaneleri belirler*)

Type (* Tip tanımalamalarının yapıldığı blok *)



Const (* Sabit tanımları ve ilk değer atamaları *)



Var (* değişken tanımlamalarının yapıldığı blok *)



Procedure (* Procedure ve functionlar ana programdan önce yazılırlar. *)

Function (* Onların içinde de yerel değişken ve tip tanımalamaları için *)



Const (* tıpkı ana programda olduğu gibi bloklar kullanılır.*)



Var



Type



begin



end; { procedure veya function}

begin {ana program }

komutlar;



end.

Pascal'da Giriş/Çıkış İşlemleri


Bir bilgisayar işlemi genel olarak üç temel bölümden oluşur bunlar giriş - işlem - çıkış'tır.

Pascal'da giriş ve çıkış işlemleri için Readkey, Read, Readln, Write ve Writeln fonksiyonları kullanılır. Şimdi bu fonksiyonlara sırasıyla göz atalım.

Readkey:

Klavyeden bir karakter okumak için kullanılır.
1. Readkey ile okunan karakter ekranda görünmez. Fonksiyon sadece bir karakteri bir değişkenin içine getirmek için kullanılır.
2. Readkey fonksiyonu Crt.Tpu Pascal kutuphanesi içinde tanımlı olan bir fonksiyon oldugu için bu fonksiyonu kullandığımızda programımıza "uses Crt;" satırını mutlaka eklemek zorundayız. Bu readkey fonksiyonu ile ilgili tanımların bizim yazdıgımız program tarafından tanınmasını saglıyor.
Örnek :
Uses Crt;
var
C: Char;
Begin
Writeln('Lutfen bir tusa basin');
C := Readkey;
Writeln(' Bastiginiz tus ', C, ');
end.
Read:
Belirtilen sayıda değişkeni klavyeden sırasıyla okur.

Komutun genel yapısı su sekildedir: read(p1,p2,p3, ... , pn) p:parametre
1. Read komutu ile string deger okutulamaz.
2. Integer veya real degerler pespese girilecekse aralarında en az bir bosluk olmalı.
3. Karakter okunurken okunacak karakter sayısı kadar karakter pespese girilir. Bosluk ve virgul gibi ayraçlar kullanılmaz kullanılırsa bunlarda karakter olarak okunur.
Örnek :
Uses Crt;
var
isim: string;
Begin
Write('Lutfen isminizi girin :');
Read(isim);
Writeln(' Merhaba ', isim);
end.

Readln:
Belirtilen sayıda değişkeni klavyeden sırasıyla okur. Read komutundan farkı herbir deger okunduktan sonra kursor ekranda bir alt satıra konumlanır ve sıradaki deger burdan itibaren girilir.

Komutun genel yapısı su sekildedir: readln(p1,p2,p3, ... , pn) p:parametre

Örnek :
Uses Crt;
var
isim: string;
Begin
Write('Lutfen isminizi girin :');
Readln(isim);
Writeln(' Merhaba ', isim);
end.


Write:
Belirtilen sayıda değişkeni ekranda görüntülemek için kullanılır. Değerler ekranda birbiri peşi sıra görüntülenir.
Pascal'da Çıktı Düzeni


Pascal'da değişken tanımları bölümündende hatırlayacağınız gibi sayıları ifade etmek için real, integer gibi tip tanımları kullanıyoruz. Fakat bu tip tanımları ile tanımlanan değişkenlerin içerdiği sayısal ifadeler bizim günlük hayatta kullandığımız ve ihtiyaç duyduğumuz şekilde değil bilgisayarın saklayabileceği şekillerde bulunmaktadır. Örneğin sizin "birim" diye real tipinde tanımladığınız bir değişkene "4.5" değerini girdiğimizi düşünelim bu değişkeni ekranda görüntülemek istediğimizde elte edeceğimiz görüntü şu şekilde olacaktır.
4.5000000000E+00
İşte bu tür görüntüleri düzgün hale sokmak ve çıktı düzenini sağlamak için aşağıda anlatılan yöntem kullanılır.
Tip Yöntem Açıklama
Integer Değişken : n Integer tipindeki bir değişkenin adının arkasına n gibi sayısal bir değer yazılırsa bu n karakterlik bir saha içinde bu sayının sağa doğru dayalı bir şekilde yazılmasını sağlar.
Real Değişken:n:m Real tipinde bir değişkenin adının arkasına n ve m gibi sayısal değerler yazılırsa bunlar n karakterlik alan içinde ondalık kısmı noktadan sonra m tane karakter içermek üzere sağa dayalı olarak yazdırılır.
String Değişken:n String tipindeki bir değişkenin adının arkasına n gibi sayısal bir değer yazılırsa bu n karakterlik bir saha içinde bu karakter dizisinin sağa doğru dayalı bir şekilde yazılmasını sağlar.

Clrscr fonksiyonu ekranı temizlerken o anda ekranda aktif olan zemin rengini kullanır. Yani eğer zemin rengi o anda Textbackground(Yellow); komutu kullanılarak sarıya çevrilmişse bu satırdan sonra kullanılacak bir clrscr; komutu ekranın tamamen sarıya dönüşmesini sağlayacaktır.
ClrScr Fonksiyonu
O andaki ekranı temizler ve kursör ekranın sol üst köşesine konumlanır.

GotoXY Fonksiyonu
Kursörün ekranın istenilen bir pozisyona konumlanmasını sağlamak için kullanılır.
Gotoxy(sütun,satır);

şeklinde kullanılır
Clrscr ve Gotoxy fonksiyonları CRT Kutuphanesi içinde tanımlıdır. Bu komutları program içinde kullanacağınız zaman programınızın en başına "uses crt;" cümlesini eklemeyi unutmayın.

Örnek:

Uses Crt;
Var
Ad : String[20];
Begin
ClrScr;
Write('Adiniz : '); Readln(Ad);
Gotoxy(30,12);
write(Ad);
End;
Ekranın 80 sütun ve 24 satırdan oluştuğunu unutmayın...
Karşılaştırma Komutları


Pascalda genel olarak kullanılan karşılaştırma deyimleri şunlardır:

IF..THEN..ELSE
CASE..OF

If...Then...Else


Eğer…ise…değilse (If..then..else) Karar yapısı : Program yazarken en çok yapılan işlerin başında elinizdeki verilere bakarak bir karar vermek ve programın akışını bu karara göre yönlendirmek gelir. İyi programda gerekli yerlerde doğru ve etkili karar yapıları oluşturmak çok önemlidir. Çünkü bir programda en yavaş işleyen komutlardan birisi karşılaştırma komutlarıdır. Pascalda en çok kullanılan karşılaştırma ve kontrol komutu If..then..else dir.

If deyiminden sonra yapılacak karşılaştırmanın sonucu doğru(True) ise then deyiminden sonraki blok işler. Eğer karşılaştırmanın sonucu yanlış(False) ise bu sefer de else deyiminden sonraki blok işler.Else deyimi seçimlik bir deyimdir. Yani isterseniz, ya da gerekmezse bu kısmı kullanmayabilirsiniz. Bu durumda eğer karşılaştırma sonucu yanlış ise program bir sonraki komutla akışına devam eder.
Eğer else kullanacaksanız else den önceki satırda noktalı virgül kullanmamalısınız.
...
If then
begin

komutlar

end;
[ else
begin

komutlar

end;]

Karşılaştırma için kullanabileceğiniz operatörler için buraya tıklayın.
ÖRNEK: Girilen bir sayının pozitif veya negatif olduğunu söyleyen program.

Var
Sayi : integer;
begin
write(‘Bir sayı girin : ‘);
readln(Sayi);
if Sayi < 0 then
writeln(‘Sayi negatiftir’)
else
writeln(‘Sayi Poszitiftir’);
end.
Eğer isterseniz iç içe if kullanmaya devam edebilirsiniz. Bu oldukça karmaşık bir yapı oluşturabilir ancak bazı durumlarda böylesi uygulamalar zaruri olur.

Örneğin, yazdığımız bir programda eğer girilmiş olan sayı 0’dan büyükse ve 128’den küçükse I değişkenine 1 eklesin, 128..256 arasında ise I’ya 10 eklesin, 256’dan büyükse I’ya 100 eklesin. Aynı zamanda eğer bu sayı 0’dan küçükse ve –127’den büyükse 1 eksiltsin, -127..-255 arasındaysa 10 eksiltsin ve –255’den de küçükse 100 I’dan 100 eksiltsin. Bir okuyuşta anlaması bile zor olan böyle bir işlem için karşılaştırma işlemlerini ayrı ayrı yapmak veya iç içe if kullanmak durumunda kalırız ve tabii sonuç genellikle yanlış çıkar. Fakat biraz dikkat ve biraz da pratik yapmakla bu işi halletmek mümkündür. Şimdi size 2 çalışır program örnegi vereceğim. İkisi de doğru çalışıyor fakat birisi daha profesyonelce hazırlanmış. Örnekleri incelerseniz karşılaştırma komutlarından ilki olan if..then..else deyimi ile hiçbir probleminiz kalmaz.

Const
I : integer = 500;
Var
Sayi : integer;
Begin
Write('Bir sayı girin : ');
Readln(Sayi);
If (sayi > 0) and (sayi < 128) then
I := I+1;
If (sayi >= 128) and (sayi < 256) then
I := I+10;
If (sayi >= 256) then
I := I+100;
If (sayi < 0) and (sayi > -127) then
I := I-1;
If (sayi <= -127) and (sayi > -255) then
I := I-10;
If (sayi =< -255) then
I := I-100;
Writeln('İşlem sonucu I da kalan= ',I);
End.
Const
I : integer = 500;
Var
Sayi : integer;
Begin
Write(‘Bir sayı girin : ‘);
Readln(Sayi);
If sayı > 0 then
If sayı > 128 then
If sayı > 256 then
I := I + 100
Else
I := I +10
Else
I:= I+1
Else
If sayi < -127 then
If sayi < -256 then
I := I – 100
Else
I := I – 10
Else
I := I – 1;
Writeln(‘İşlem sonucu I da kalan=‘ , I);
End.
case...of

Bir önceki konuda bahsedilen kontrol deyimi if..then..else genellikle az sayıda olan karşılaştırmalarda kullanılır. Ama eğer yapılan karşılaştırma çok karmaşıksa o zaman bu deyimi kullanmak oldukça zor olur ve çok fazla miktarda mantık hataları bulunur. Bunu engellemek için blok if deyimi diyebileceğimiz Case yapısını kullanırız.

Case yapısında karşılaştırmanın yapılacağı değişkenin alabileceği değerler göre çeşitli işlemleri toplu olarak yapabiliriz. Bir önceki konuda gösterdiğimiz örneği ele alalım. Bir if deyimi için oldukça karmaşık olan bu örnekği bir de case ile çözelim. Tabii öncelikle Case’in genel yazılışını veriyoruz.
case degişken of

durum-1 : işlem(ler);

...

durum-n : işlem(ler);

end;



Veya



case değişken of

durum-1 : işlem(ler);

...

durum-n : işlem(ler);

else

işlem(ler)

end;



Durum dediğimiz yerlerde bir yada daha fazla, virgülle ayrılmış, sabitler veya aralıklar olabilir. Mesela :
case Ch of



'A'..'Z', 'a'..'z' : WriteLn('Harf');

'0'..'9' : WriteLn('Rakam');

'+', '-', '*', '/' : WriteLn('Operator');

else

WriteLn('Özel karakter');



Else kısmı ise tamamen seçimliktir. İstemezseniz kullanmayabilirsiniz. Şimdi gelelim örneğimize… Eğer daha bakmadıysanız önceki konuyu (if-then-else)okumanızı tavsiye ederim. Yine de soruyu tekrar soruyorum. Bu sorunun hiçbir amacı olmadığını sadece bir örnek olduğunu belirtmek isterim. Boşboşuna "Buna bu nedir?..Ne işe yarar?..Ben kimim?.. Niye burdayım?" gibi felsefi konulara girmeyin. Siz örneği anlayın yeter.

Yazdığımız bir programda girilmiş olan sayı eğer 0’dan büyükse ve 128’den küçükse I değişkenine 1 eklesin, 128..256 arasında ise I’ya 10 eklesin, 256’dan büyükse I’ya 100 eklesin. Aynı zamanda eğer bu sayı 0’dan küçükse ve –127’den büyükse 1 eksiltsin, -127..-255 arasındaysa 10 eksiltsin ve –255’den de küçükse I’dan 100 eksiltsin.
Const

I : integer = 500;

Var

Sayi : integer;

Begin

Write(‘Bir sayı girin : ‘);

Readln(Sayi);

If (sayi > 0) and (sayi < 128) then

I := I+1;

If (sayi >= 128) and (sayi < 256) then

I := I+10;

If (sayi >= 256) then

I := I+100;

If (sayi < 0) and (sayi > -127) then

I := I-1;

If (sayi <= -127) and (sayi > -255) then

I := I-10;

If (sayi =< -255) then

I := I-100;

Writeln(‘İşlem sonucu I da kalan=‘ , I);

End.


Const

I : integer = 500;

Var

Sayi : integer;

Begin

Write('Bir sayi girin : ');

readln(Sayi);

case Sayi of

0..128: I:= I + 1;

128..256: I := I + 10 ;

256..32767 : I := I + 100;

-127..0 : I := I - 1;

-255..-128 : I := I - 10;

-32768..-256 : I := I - 100;

end;

writeln('Islem sonunda I değeri =',I);

end.

Döngüler


Pascalda genel olarak kullanilan 3 tip döngü vardir. Bunlar

1. FOR..DO döngüsü
2. REPEAT..UNTIL döngüsü
3. WHILE..DO döngüsü

For...Do Dongusu


Bilgisayarların en güzel yanlarından birisi de hiç sıkılmadan, şikayet etmeden aynı şeyleri yapabilmeleridir. Böylesine tekrar tekrar çalışması gereken işlemleri, bir programlama dilinde ancak döngüler vasıtası ile sağlayabiliriz. Aşağıda bu döngülerin çeşitlerini ve Pascalda nasıl kullanıldıklarını görebilirsiniz.

FOR...TO DÖNGÜSÜ
En basit döngü çeşididir. Kendisinden sonra gelen deyim veya deyimler gurubunu verilen sayı kadar çalıştırmaya yarar. Öncelikle yapısını görelim :
for değişken := ilk_değer to son_değer do komut;
veya

for değişken := ilk_değer to son_değer do
begin
komut(lar)
end;
FOR..DOWNTO DÖNGÜSÜ
for değişken := ilk_değer downto son_değer do komut;

Veya

for değişken := ilk_değer downto son_değer do
begin
komut(lar)
end;
Şimdi bu yapıya bakarak sizlere çalışma mantığını anlatmaya çalışalım. For deyiminden sonra sayaç olarak kullanılacak bir tamsayı değişken kullanılır. Döngü işlemi bu değişkenin ilk değerinden başlar ve son değere kadar 1’er 1’er artar (to) veya azalır(downto). Bazı başka dillerdekinin aksine ne artış miktarını ayarlayabilirsiniz ne de ondalıklı sayıları kullanabilirsiniz. Döngü kendisinden sonra gelen ilk deyimi veya begin..end bloğunu işletir. Döngü içinde iken döngü değişkenine müdahale etmek mümkün olmakla birlikte bunu yapmak sakıncalı olabilir. Bu yüzden döngü değişkenleri genellikle döngü içerisinde işleme tabi tutulmaz.

Bu kadar teorik bilgiden sonra şimdi bir örnek ile konumuzu pekiştirelim.

Örnek:
var
i: integer;
ismin : string;
begin
write('Ismini gir sahip :');
readln(ismin);
for i := 1 to 15 do
writeln('Merhaba ',ismin,' sahip');
end.

Repeat..Until döngüsü


Repeat deyimi ile until deyimi arasında kalan işlemleri untildeki koşul yanlış olduğu sürece tekrarlar. Untildeki koşul(lar) doğru olduğu anda döngüden çıkar.
Repeat

işlemler;

Until koşul(lar);


Örnek :
Var
I : Integer;
begin
repeat
Write('Bir sayı giriniz : ');
ReadLn(I);
until (I >= 0) and (I <= 9);
writeln(‘Sayı 0..9 arasındadir.’);
End.
Ne olursa olsun şarta bakana kadar döngüyü bir kez çalıştırır.
Until'de belirtilen şart doğru olduğu sürece çalışır.
While-Do Döngüsü


Whiledan sonraki koşul doğru olduğu sürece işlem(ler) tekrarlanır. Whiledaki koşul(lar) doğru olduğu anda döngüden çıkar.

While koşul(lar) do
Begin

işlemler;

End;


Örnek :
Var
I : Integer;
begin
I := 100;
while((I >= 0) and (I <= 9)) do
begin
Write('Bir sayı giriniz : ');
ReadLn(I);
end;
writeln(‘Sayı 0..9 arasındadir.’);
End.
Repeat-Until Döngüsünden farklı olarak öncelikle koşual bakılır sonra döngü başlar.
1-Döngüden çıkabilmek için mutlaka koşulun döngü içinde değişmesi gerektiğine dikkat edin.
2-Birden fazla koşul kullanacaksanız bu koşulların tümünü bir parantez içine alın.
Pascalda Type Bloğunun Kullanımı

Data tipleri programcının compiler’e datanın nasıl saklanacağını bildirmekte kullandıkları
bir yoldur. Bir değişken tanımlandığı anda onun data tipinide mutlaka tanımlamak zorundasınızdır.
Bazı data tipleri kullanılan dil tarafından standart olarak tanımlanmıştır zaten.Diğer tipleri
ise kullanıcı kendisi tanımlayabilir.Pascal bu tip bir esnekliği ilk sağlayan dillerden birisidir.
Kullanıcı tarafından tanımlanan tipler Pascalda TYPE bloğunda tanımlanır.

Type
tip1 = tip_tanımı1; (* Her yeni tipe bir isim verilir ve önceden tanımlı tipler *)
(* kullanılarak tanımlanır *)
tip2 = tip_tanımı2; (* İstediğimiz kadar tip tanımı yapabiliriz *)
tip3 = tip1; { Yeni tanımladığımız bir tipi başka bir tip tanımı için de kullanabiliriz.
Tip tanımları bazen çok karmaşık
olabilecekleri gibi bazen de çok basit olabilirler }
int = integer;
CharData = array['A'..'Z'] of Byte;

Var
var1 : tip3 (* her yeni değişken için bir isim ve bir tip verilir. *)
var2, var3 : tip2 (* aynı tipte olan değişkenler bir defada tanımlanabilir *)
Sayı : int;
Char_dizi : CharData;

Type bloğunun en önemli kullanım yerleri ise record (kayıt) ve set (küme) tipi tanımlardır.

Record yapısı:

Record tipi dosyalama işlemlerinde kayıt desenini oluşturmakta kullanılır.Yani bir tek kayıt için,
o kaydın hangi alanına hangi değişkenlerle erişilebileceğinin tanımlanmasında kullanılır.Örneğin
öğrenci takibi programı yapılacaksa, bunun için aynı kayıtta hem adı, hem soyadı hem de öğrenci
no’su tutulacak olsun.Bu kayıtları tek tek değişkenlere atayıp sonra dosyaya tek tek yazdırmak
yerine, hepsini record yapısı içindeki değişkenlere atayıp bir defada dosyaya yazdırmak daha
kolaydır.Buna benzer şekilde record yapısında tanımlı bir değişkenin içine dosyadan bir kayıt
okuduğunuzda istediğiniz alanlara kolaylıkla erişirsiniz.

Örnek :

Type
Ogr_Kayit = record
No : integer;
Ad : String[30];
Soyad : String[30];
end;

var
Ogrenci : Ogr_Kayit; { Ögrenci değişkeni içinde No, Ad ve Soyad alanları }
... { bulunur. Bu alanlarla ilgili işlemler sadece öğrenci }
… { değişkeni kullanılarak yapılabilir. }
Record yapısında tanımlanmış bir değişkenin içindeki değişkenlere direkt olarak erişemezsiniz.
Bu değişkenlere erişmek için Ogrenci.Ad, Ogrenci.No,… formatını kullanmalısınız.
Var_bloğunda_tanımlanan_değişken.alanın_adı
Şimdi yukarıdaki örneğimizi geliştirerek gerçek bir örnek program yapalım.
Örnek Program


Bir sınıftaki öğrencilerin tamamının Ad,Soyad ve Nosunu tutabilen ve istendiğinde ekrana dökebilen
bir program yapalım. Örnekği 10 öğrenci için yaptım çünkü 10 kişinin bilgilerini girmek bile sıkıcı.
10 rakamını değiştirerek daha az/fazla öğrenci kaydı yapabilirsiniz. Yada indeks değerini 100 yapıp
sadece 10 tanesi için bilgi girişi yapabilirsiniz.

1. Type
2. Ogr_kaydi = record
3. No : integer;
4. Ad : String[30];
5. Soyad : String[30];
6. end; (* of record *)
7. int = integer;
8. Var
9. Ogrenci : array [1..10] of Ogr_Kaydi;
10. i,n : int;
11. Begin (* Program Body *)
12. write('Kaç ogrenci bilgisi girilecek (max 10) : ');
13. readln(n);
14. for i := 1 to n do
15. begin
16. write(I,'.Ogrenci Nosu : '); readln(Ogrenci.No);
17. write(I,'.Ogrenci Adı : '); readln(Ogrenci.Ad);
18. write(I,'.Ogrenci Soyadı : '); readln(Ogrenci.Soyad);
19. end; {of for}
20. writeln('Girilen kayıtlar :');
21. for i := 1 to n do
22. begin
23. write(i,'-',Ogrenci.No);
24. write(' ',Ogrenci.Ad);
25. writeln(' ',Ogrenci.Soyad);
26. end; {of for}
27. End. (* of program *)

Açıklamalar :

Örnek programımızın açıklamalarını satır satır size gösterebilmek için satır başlarını numaraladım.
Şimdi açıklamalar başlıyor. Aman dikkatli takip edin. Eğer bu örneği anlayabilirseniz Type bloğu ve
record tanımlamalarını da aynı şekilde anlamışsınız demektir.

1. Type bloğu tanımlamasına başladığımı bildiriyorum.
2. İsmi Ogr_Kaydı olan bir record tanımlamasına başlıyorum. Arada eşittir kullandığıma dikkat edin.
3. Artık record yapısının içindeki elemanlar tanımlanmaya başlandı. Bu kısımda sanki Var bloğunda imişiz
4. gibi değişkenin adı'ndan sonra iki nokta üstüste :)) ve değişken tipiverilir ve noktalı virgülle (;) o tanım
5. sona erdirilip bir sonraki tanıma geçilir. Biz basit bir sınıf listesi hazırlayacağımıza göre No, Ad ve Soyad bizim için yeterli olacaktır.
6. record tanımlamamızın sona erdiğini belirten end; deyimi.
Her record deyimi bir end ile bitmelidir.
7. integer tipinde int diye bir değişken tanımladım. Bu özellikle C kullanıcılarının yaptığı bir triktir. C de integer
tanımlamaları int deyimi ile yapılır. Burda da bundan sonraki integer tanımlamalarımızı int ile yapabileceğiz. Eğer
ilk olarak bu komutu kullanmış olsaydık record içinde bile kullanmamız mümkün olabilirdi. Bunu siz deneyebilirsiniz.
8. Artık Type bloğunda işimiz bitti. Var bloğuna geçiyoruz.
9. İlk iş olarak tanımladığımız record tipini hemen bir değişkende kullanıyoruz.Hem de dizi olarak tanımlıyoruz.
Unutmayın ki Type bloğunda yaptığımız tip tanımlamasıydı. Şimdi bu tanımladığımız tipi değişken tanımlamada kullanıyoruz.
Tip tanımlarınızı değişkenmiş gibi kullanamazsınız.

10. i ve n adında ve int (!!) tipinde 2 değişken tanımladık.
11. Artık programımıza başlayabiliriz. (* *) açıklama parantezleri. İhtiyaç duydukça ama programın okunabilirliğini bozmadan bolca kullanabilirsiniz.
12. En fazla kaç kayıt yapılacağını kullanıcıya soruyoruz. En fazla 10 olabileceğini de belirtiyoruz ki kullanıcı uçup absürd değerler yazmasın.
Tabii ben kontrol ettirmedim ama siz 10'dan fazla girmeyi bir deneyin bakalım ne olacak. Öncelikle F2'ye basıp programınızı save etmeyi unutmayın tabii ki.
13. readln deyimi ile kaç kayıt yapılacağını n değişkeninin içine okuttuk. Eğer aynı satırda bir şeyler yazdırıp sonunda soru soracaksanız. write - readln çiftini kullanın.
Neden Acaba ??
14. Bir döngü başlattık. 1'den başlayacak ve n içinde kaç varsa o kadar dönecek.
15. döngü içinde birden fazla işlem yapılacağından hepsini begin - end bloğu içine alıyoruz.
16. İşte az evvel bahsi geçen write - readln çiftleri... Write deyiminde i'yı ne güzel kullanmışım değil mi? Ama daha önemlisi readln deyimi içinde neler olduğu :
readln( Ogrenci.No );
17. Ogrenci dizisinin i. elemanının No'sunu klavyeden oku . Tipi ne olursa olsun bizim dizimizin adı Ogrenci. Dolayısı ile indisi onun yanında belirtiyoruz. Sonra bir
nokta (.) ve No yazıyoruz ki bu değişkenin alt seviyesinde bulunan No değişkenine ulaşabilelim.
18. aynı mantıkla i değişmediği için hala aynı değişkenin değişik alt değişkenlerine değerler okutuyoruz.
19. İşte for döngüsü bitti. Bir begin ile blok başladığı için de bir end; ile bloğu kapattık.
20. Şimdi de girdiğimiz kayıtları ekrana listeleyeceğiz. Bir başlıktan sonra işimize başlıyoruz.
21. Yine i değişkenini döngümüze indis olarak kullanabiliriz. Başka bir işe yaramıyor zaten. Yine dizinin n'e kadar olan bilgilerinin dökümünü yapacağız.
22. Hmm demek blok gerekiyor. Begin ile bir blok başlangıcı yapalım.
23. yine i'yi çok akıllıca kullanmışım. Helal bana. Onun dışında değişkene erişmek için aynı yolu kullandığımızı söyleyebiliriz. Önce değişken ve indisi Nokta
altdeğişken.write(i,'-', Ogrenci.No );
24. Bu seferki write'ın ilk elemanı 3 boşluk. Amaç ekran çıktısı okunabilir olsun. Onun yerine tab karakteri de kullanılabilirdi. Ama numarasını hatırlayamadım. Eğer ne
olduğunu bulabilirseniz chr(#numarası) şeklinde kullanabilirsiniz. Mesela 9 ise write chr(#9) ),'Ogrenci.Ad);
25. Son olarak ise writeln kullandım. Çünkü bundan sonraki değerin alt satırdan çıkmasının istiyorum.
26. For döngüsü bitti. End; ile kapattık.
27. Program da bitti. Onu de End. ile kapattık.


Recor tanımı içinde yeni record tanımları yapılabilir. Mesela

Stk_har=record
Stk_NO : integer;
Har_tipi : char;

Har_tarihi=record
Yil : byte;
Ay : byte;
Gün : byte;
end;

Miktar : real;
end;
Peki sizce yil-ay-güne nasıl erişilebilirdi? Cevaplarınızı bekliyorum.
Pascalda Dizi Kullanımı


Hangi programlama dilini kullanıyor olursanız olun değişken tanımalmanın mantığı aynıdır. Saklanacak bilginin tipine göre bir tip seçilir buna bir isim verilir ve hafızada bu değişken için bellek ayrılır. Her değişken için durum aynıdır. Pascalda bu işlemi Var bloğunda yapıyoruz. Peki aynı özelliklere sahip birden fazla değişkene ihtiyaç duyarsak ne olacak. Mesela bir öğretmen düşünün. Değişik sayılarda öğrencisi olan sınıflara girsin ve bu öğrencilerin notlarını bilgisayarda tutmaya çalışsın. Eğer dizi değişkenleri kullanmayı bilmiyorsa en kalabalık sınıfındaki öğrenci sayısı kadar değişken tanımlayacak sonra da her öğrencinin notunu kendi değişkenine ayrı ayrı atamak zorunda kalacaktır. Oysa bunu halletmenin daha kolay bir yolu var. Dizileri kullanmak. Dizilerin en önemli özelliği aynı tipteki ve birbiri ile alakalı verileri toplu olarak tanımlamaya yaramasıdır. Bu durumda örneğimizdeki öğretmen en kalabalık sınıfındaki öğrenci sayısı kadar elemanı olan bir tek dizi değişkeni tanımlar ve bilgileri bir döngü içerisinde indis kullanarak dizinin uygun yerine yerleştirir. Bu iki durumu her zamanki gibi bir tablo içinde gösterelim.
I
Dizi kullanmayan öğretmen
Var
OgrenciNotu1 := integer;
OgrenciNotu2 := integer;
OgrenciNotu3 := integer;
OgrenciNotu4 := integer;
...
...
OgrenciNotu30 := integer;
Begin
Write(‘1.Ogrencinin notu = ‘);
Readln(OgrenciNotu1);
Write(‘2.Ogrencinin notu = ‘);
Readln(OgrenciNotu2);
Write(‘3.Ogrencinin notu = ‘);
Readln(OgrenciNotu3);
...
...
write(’30.Ogrencinin notu = ‘);
readln(OgrenciNotu30);
end.
I
Dizi kullanan öğretmen
Var
OgrenciNotu : array[1..30] of integer;
I : integer;
Begin
for I := 1 to 30 do
begin
write(I,'.Ogrencinin notu = ');
readln(OgrenciNotu);
end;
End.


Artık dizi kullanmanın avantajlarını biliyoruz. Bize aynı türden ve birbiri ile ilişkili bilgilere kolay erişmemizi sağlıyor. İsterseniz artık bir dizi tanımının nasıl yapıldığına bakabiliriz. Dizileri VAR bloğunda tanımlayabileceğimiz gibi, Type bloğunda da tanımlayabiliriz. Eğer TYPE bloğunu kullanırsak tanımlamış olduğumuz yeni tipi direkt değişken tipi olarak kullanabiliriz.,

değişken_ismi : array [boyut_büyüklüğü] of dizi_tipi

Boyut büyüklüğü herhangi bir standart veri tipinde olabilir. Eğer çok boyutlu bir dizi ise bunlar birbirinden virgüllerle ayrılır. Dizi tipinde ise istediğimiz herhangi bir tipi kullanabilirz. Yani hem standart tipleri hem TYPE bloğunda tanımladığımız kendi tiplerimizi kullanabiliriz. Dizinin elemanlarına köşeli parantez içerisinde verilen indis numarası ile erişiriz. Eğer dizilerimiz çok boyutlu olacaksa

Örnek tanımlamalar :

Type
arr_type = array[1..25] of real;
Str20 = String[20];

Var
IntList : array[1..100] of integer; {İnteger tipinde bir boyutlu dizi}
CharData : array['A'..'Z'] of Byte; {Char tipinde bir boyutlu dizi}
Matris : array[0..9, 0..9] of real; {real tipinde 2 boyutlu dizi}
MyStrArr : array[1..10] of Str20; {Yukarıda tanımladığım Str20 tipinde 10 elemanlı dizi}
KupData : array[1..20,1..20,1..20] of Word {Word tipinde 3 boyutlu dizi}
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.