Anasayfa > Dökümanlar > Pascal ile programlama

Pascal ile programlama

Pascal ilkel bir yazılım dilidir. Bu dil genelde yazılımın mantığını kavramak için öğrenilir. Pascalda komutlar birbirini tamamlayacak şekilde yazılmaktadır. Eğer komutlar birbirini tamamlamazsa program hata verir ve kapanır. Örneğin;

1)Mutfağa git.
2)Buzdolabını aç.
3)3 adet yumurta al.
4)Eğer Yumurta yoksa bakkaldan yumurta sipariş et. [Eğer bu basamak atlanırsa ve buzdolabında yumurta yoksa program hata verecek ve kapanacaktır.]
5)Yumurtaları bir kaseye kır.
6)Yumurtaları çırp.[Eğer 5. basamak atlanırsa program gene hata verecektir çünkü kırılmamış yumurta nasıl çırpılır.]

Pascal’da ana mantık budur. Pascal kodları herhangi bir yere yazılır fakat çalıştırılması için bir derleyiciye ihtiyaç vardır. Size tavsiyem Turbo Pascal for Windows’tur. Bu program kodlarınızı compile etmeye yani “.exe” uzantısına çevirip program elde etmenize yarar. Pascal için farklı derleyeciler de vardır.

Pascal’da kodların derlenmemiş halleri *.pas uzantısıyla saklanır. Kodları not defterine yazıp “hebele hübele” diye kaydettiğimizde dosya adı hebele hübele.txt olacaktır bunu tekrar adlandırarak .txt kısmını .pas yaparsak program yine görecektir.

Her satırdan sonra noktalı virgül “;” koyulur. Bunun amacı derleyicinin kodları anlayabilmesi içindir. Kodlar Begin ve End ile başlar ve biter. Uses koduyla kütüphaneden tanımlı kodları çağırır tanımlayabilmek için. Genelde “crt” kullanılır ama bizim kullandığımız derleyici for Windows olduğu için bizim kütüphanemiz “wincrt” olacak. Eğer bunu kullanmazsak kodları tanımlayamaz ve hata verir programı çalıştırmaz.

Örnek;
Program ilk;
uses wincrt;
begin
write(‘Tarikatul tahribat’);{Ekrana Tarikatul tahribatk yazdırdık}
end.

Program ilk1;
uses wincrt;
begin
write(‘Tarikatul’);
write(‘tahribat’);
end.

Böyle yazdığımızda da aynı şekilde tek satırda yazdı peki bu yazıları alt alta nasıl yapacağiz bunun için “writeln” kodunu kullanırız:

Program ilk2;
uses wincrt;
begin
writeln(‘Tarikatul’);
writeln(‘tahribat’);
end.

“Readln” kodumuz ise programa girdi girilmesini sağlar. Bu girdiyi girdikten sonra enter’a basılmasını ister ama eğer girdi girilmesini istemiosak ve programın enter’a basıldıktan sonra kapanmasını istiyorsak da bu kodu kullanabilirz. Eğer “readln” kodunu yazmazsak kodlar yine çalışır fakat bir anda yazıp kaybolur ve programın çalışmadığını düşünürüz.

Program ilk3;
uses wincrt;
begin
writeln(‘Tarikatul’);
writeln(‘tahribat’);
readln;
end.

Değişkenler

Programın başında “Var” deyimi ile değişkenlerimizi tanımlamak ve cinsini (Yazimi, tam sayımı, reel sayımı…) belirtmek zorundayız. Pascal’da bu mecburidir. Genellikle:

Var
m:degiskenin_turu; tarzinda kullanilir eğer birden fazla değişken aynı cinstense
m,n:degiskenin_turu; şeklinde yazılır.

Sayısal Değişkenler

Sayısal değişkenler kendi arasında ikiye ayrılır tam sayılar ve reel sayılar(gerçek sayılar, ondalıklı sayılar…)
Bunlara göre değişkenlerin çeşitleri vardır.
Tam sayı değişkenleri;
Değişken türü Sınırları
Shortint -128…127
Byte 0…255
Integer -32768…32767
Word 0…65535
Longint -2147483648…2147483647

Bu değişkenleri birer örnekle gösterelim:

Program toplama;
uses wincrt;
Var
sayi1,sayi2:integer; toplam;integer;
Begin
clrscr;{Sayfayi temizler. Kısacası yeni bembeyaz bir sayfa gözükür (:}
sayi1:=30;
sayi2:=32;
toplam:=sayi1+sayi2;
write(‘Iki sayinin toplami ‘, toplam );
readln;
end.

Bu programı çalıştırdığımızda karşımızda Iki sayinin toplami 62 yazacaktır ve enter’a basana kadar program kapanmayacaktır. Değişkenlerin değerini biz verdik o yüzden kendisi otomatik bi şekilde 62 yazdı fakat biz programı kullanan kişiden sayıları girmesini isteseydik şu şekilde olacaktı:{Bu programda da çarpma yapalım. Çeşitlilik olsun.}

Program carpma;
uses wincrt;
Var
a,b,c:integer;{Degiskenlerin adini bu sefer a,b,c diye verdik}
Begin
clrscr;
writeln(‘Birinci sayiyi giriniz’);
readln(a);
writeln(‘Ikinci sayiyi giriniz’);
readln(b);
c:=a*b;
writeln(‘Iki sayinin carpimi: ‘,c );
readln;
end.

Bu programda a ve b değişkenlerini kullanıcıdan girmesini istiyor ve c değişkenini a ve b değişkenlerinin çarpımı olarak alıyor ve Iki sayinin carpimi c değişkeni diyor.

Reel sayı değişkenleri;
Değişken Türü Sınırı
Real 2.9×10^-39…1.7×10^38
Single 1.5×10^-45…3.4×10^38
Double 5.0×10^-324…1.7×10^308
Extended 3.4×10^-4932…1.1×10^4932
Comp -2^63…2^63-1

En yaygın kullanılanı Real’dir ve yeterlidir.

Bir örnek yapalım;

Program ortalama;
uses wincrt;
var
not1,not2,not3:integer;
ort:real;
Begin
clrscr;
writeln(‘1. Sınav notunuzu giriniz:’);
readln(not1);
clrscr;
writeln(‘2. Sınav notunuzu giriniz:’);
readln(not2);
writeln(‘3. Sınav notunuzu giriniz:’);
readln(not3);
ort:=(not1+not2+not3)/3 {matematikteki gibi parantez içi işlemlerin önceliği vardır}
clrscr;
writeln(‘Ortalamaniz: ‘ , ort:6:2); {:6:2 kısmını sayımızın düzgün gözükmesi için yaptık çünkü bu reel sayı}
readln;
end.

String değişkeni

Bu değişken tipi sayısal olmayan değerler yani harfli değişkenler için kullanılır.

program string;
uses wincrt;
var
isim:string;
yas:byte;
begin
clrscr;
writeln(‘Adinizi giriniz:’);
readln(isim);
clrscr;
writeln(‘Yasinizi giriniz:’);
readln(yas);
clrscr;
writeln(isim,’demekki ‘,yas,’yasindasin… Guzel’);
readln;
end.

Normalde string degiskeni 255 karaktere kadar izin verir. Siz bunu sınırlamak isterseniz

var
isim:string[40]; şeklinde 40 a indirebilrsiniz.

Kayit (Record) Tipli Değişkenler

Bu değişken değişkenleri bir ana değişkenin altında alt değişkenler olarak tutmamızı sağlar dosyalama işlemi yaparken bu bölüm çok işimize yarayacak.
Type
kayit_tipi=Record
diger degiskenler…
end;
var
kayit_adi:kayit_tipi;
begin

end.

bu şekilde yapılır. Bir örnekle açıklayalım:

Program deneme;
uses wincrt;
Type
ogrenci_tipi=Record
isim:string[40];
not1, not2, not3:byte; orta:real;
end;
Var
ogrenci:ogrenci_tipi;
Begin
clrscr;
writeln(‘Isminizi giriniz.’);
readln(ogrenci.isim);
writeln(‘1. Sinav notunuzu griniz’);
readln(ogrenci.not1);
writeln(‘2. Sinav notunuzu giriniz’);
readln(ogrenci.not2);
writeln(‘3. Sinav notunuzu giriniz’);
readln(ogrenci.not3);
clrscr;
ogrenci.orta:=(ogrenci.not1+ogrenci.not2+ogrenci.not3)/3;
writeln(‘Ortalamaniz: ‘, ogrenci.orta:6:2);
readln;
end.

Set(Küme) Tipleri

Aynı tipteki karakterlerle kümeler oluşturabiliriz. Mesela 0 ile 9 rakamlarından oluşan bir kümeye A’yı dahil edemeyiz çünkü “A” bir harftir. Kümenin elemanları birbirinden virgülle ayrılır. Harflerde ise harfleri apostrofla ayırıp ayrıca virgül koymalıyız. Örnek
[0,1,2,3,4,5,6,7,8,9]
['A','B','C'] gibi… Eğer birbirini takip eden sıralı diziler ise virgül koymadan arasına iki nokta “..” koyarak da kullanabiliriz.
[0..9]
['A'..'Z','a'..'z']Yukarıdaki örneklerle bu örnekler arasında hiçbir fark yoktur. Kümeler böyle bunları type blogunda şöyle tanımlarız:
Type
harfler=Set of ['A'..'Z','a'..'z'];
rakamlar=Set of [0..9];
cevaplar=Set of ['EVET','HAYIR'];

Bir örnek yapalım anlamadığınız yerler olabilir;
Program Kumeler;
Uses wincrt;
Label
ilk;
var
tus:char;
Begin
ilk:
tus:=readkey;
Clrscr;
if tus in ['0'..'9'] then begin
writeln(‘Bastiginiz Rakam: ‘,tus);
goto ilk;
end else begin
clrscr;
writeln(‘Bastiginiz tus: ‘,tus ,’. Bu bir rakam degil. ‘);
end;
readln;
End.

Gotoxy

Bu komut yazacağımız yazıyı ekranın istediğimiz yerine yazdırmaya yarar. x kolon sayısı y ise satır sayısıdır. Genellikle 80 kolon ve 24 satır vardır. Bu komutu ona göre kullanmalıyız yoksa istediiğimiz görüntüye ulaşamayız. Kullanımı kolaydır.
Gotoxy(30,15);
writeln(‘Yazi’);
şeklindedir.

Program gotoxy;
uses wincrt;
begin
gotoxy(25,14);
writeln(‘www.tahribat.com’);
readln;
end.

If…then…elseYazımızın başında dediğimiz gibi bir şarta bağlı olarak yaptıracağımız işler bu komutlarla yapılıyor işte. Kullanımı da gayet basittir.
If şartlar then
begin
yapılacaklar
end else
begin
şartlar yanlışsa yapılacaklar
end;
end.

Bir örnekle gösterelim;
Program yas_programi;
uses wincrt;
var
yas:integer;
begin
clrscr;
writeln(‘Yasinizi giriniz:’);
readln(yas);
clrscr;
If yas>25 then{begin ve end’i şartın sonucunda birden fazla satırlı işlem yaptırmak istiyorsak kulalnacağız. gerek yok ve önemli olan elseden önceki satırın sonunda “;” kullanmamamızdır.}
writeln(‘Buyukmussun’)
else
writeln(‘Kucukmussun’);
end.

Eşitlikler şu şekildedir: <(küçüktür), >(büyüktür), <>(eşit değildir), =(eşittir), <=(küçük eşittir), >=(büyük eşittir), in(soldaki değer sağdaki kümenin içinde ise).

Bir de and,or ve not eşitlikleri vardır. and iki şartta doğruysa or en az biri doğruysa not doğru değilse anlamı verir.
9. sınıfta gördüğümüz ve öss de çıkmadığı için aman ne aptal konu dediğimiz mantık konusu işte burada işe giriyor. ve, veya olayı.

Program mantik;
uses wincrt;
var
x,y:integer;
Begin clrscr;
writeln(‘bir sayı giriniz’);
readln(x);
clrscr;
writeln(‘bir sayi daha giriniz’);
readln(y);
clrscr;
if (x in [1..9]) and (y in [1..9]) then
writeln(‘Girdiginiz iki sayı da 1den 9a kadar bi sayı’)
else
writeln(‘Girdiginiz sayilardan biri veya ikisi de 1 ile 9 arasında degil’);
readln;
end.

Burada anlayacağınız gibi sayılardan ikisinin de 1 ile 9 arasında olması drumu ve birisinin olmama durumu söz konusu.

Program mantik;
uses wincrt;
var
x,y:integer;
Begin clrscr;
writeln(‘bir sayı giriniz’);
readln(x);
clrscr;
writeln(‘bir sayi daha giriniz’);
readln(y);
clrscr;
if (x in [1..9]) or (y in [1..9]) then
writeln(‘Girdiginiz iki sayı dan en az biri 1den 9a kadar bi sayı’)
else
writeln(‘Girdiginiz sayilardan ikisi de 1 ile 9 arasında degil’);
readln;
end.

Aradaki farkı anlamışsınızdır umarım.

Case .. Of
Case .. of komutu if’e göre daha az alan kaplar ve aynı ifteki gibi farklı değerler için farklı işemler yapmaya yarar. Kullanımı da if kadar basittir.

Case degisken of
deger1: islem1;
deger2: islem2;
deger3: islem3;


end;

Ama unutmayın eğer bu işlemler birden çok satırsa begin ve end başlıklarını kullanıcaz.

Şimdi bir program yapalım ve bu programda menü olsun bir sayı girilsin ve menüdeki işlemlere göre sayı üzerinde işlemler yapılsın.

Program menulu_program;
uses wincrt;
Label
first;
var
x:integer;
secim:char;
cikis:boolean;
begin
clrscr;
cikis:=false;
writeln(‘Bir sayı giriniz: ‘);
readln(x);
first:
clrscr;
gotoxy(20,8);
writeln(‘:.:.:.:.MENU.:.:.:.:’);
gotoxy(20,10);
writeln(‘[1] Sayinin karesini göster’);
gotoxy(20,11);
writeln(‘[2] Sayinin kubunu goster’);
gotoxy(20,12);
writeln(‘[3] Sayinin karekokunu goster’);
gotoxy(20,13);
writeln(‘[4] Programdan cik’);
gotoxy(10,18);
writeln(‘Menuden bir seçenek seçiniz.’);
gotoxy(20,15);
writeln(‘Seçiminiz: ‘);
secim:=readkey;
case secim of
‘1’: begin
clrscr;
gotoxy(20,10);
writeln(x,’nin karesi: ‘, x*x);
secim:=readkey;
end;
‘2’: begin
clrscr;
gotoxy(20,10);
writeln(x,’nin kubu: ‘, x*x*x);
secim:=readkey;
end;
‘3’: begin
clrscr;
gotoxy(20,10);
writeln(x,’nin karekoku: ‘, sqrt(x):10:4);
secim:=readkey;
end;
‘4’: cikis:=true;
end; {Case burada bitiyor.}
if (not cikis) then goto first;
clrscr;
writeln(‘ Anlamissinizdir umarim’);
end.

secim:=readkey; komutuyla basılan tuşu okuyor ve case secim of komutuyla 1,2,3,4 olması durumlarında neler yapılacağını söylüyor programa.4 e basıldığında cikis true oluyor ve program kapanıyor ama 4 e basilana kadar cikis false tur çünkü biz bunu programın başında belirttik.Çok basit bir örnek daha yapalım;

program basit;
uses wincrt;
var
sayi:integer;
begin
writeln(‘Bir sayi giriniz: ‘);
readln(sayi);
case sayi of
0..9: writeln(‘Girdiginiz sayi bir basamaklidir’);
10..99: writeln(‘Girdiginiz sayi iki basamaklidir’);
100..999: writeln(‘Girdiginiz sayi uc basamaklidir’);
else writeln(‘Bu sayi ucten daha fazla basamaklıdır’);
end;
end.

Case .. of kalıbıyla birden çok değer için farklı işlemler yapmaya yarar. Önemli olan bu komutu kullanırken girilen değerle var bloğunun altında belirttiğimiz değişkenin tipinin aynı olması gerekmektedir. Örneğin değişken sayı tipindeyse yani integerse ‘Z’ diye case .. of da bir değer belirtemeyiız. Ya da char yani karakterse 9 diye belirtemeyiz ‘9’ diye belirtmemiz gerekmektedir ki iki yukarıdaki örnekte böyle yaptık.

Pascal’da ifleri bağlıyorduk bunları iç içe de kullanabiliriz.

If a>b then begin {a b’den büyükse}
If a=0 then writeln(‘b sıfırdan küçüktür’); {a sıfıra eşitse b sıfırdan küçüktür}
if b=0 then writeln(‘a sıfırdan büyüktür’);{b sıfıra eşitse a sıfırdan büyüktür}

Repeat .. until Döngüsü

Bu döngü ile vereceğimiz bir şart doğru olana kadar istediğimiz labele döndürüp işlemi sürekli yaptırırz. Kullanımı ;

Repeat
Islem 1
Islem 2
Islem 3


Until(sart);

Şart olarak eşitlik olan herşeyi kullanabilirsiniz. Mesela “until 0=1″ dersek 0 hiçbir zaman 1 e eşit olamayacağına göre döngü sonsuza kadar devam eder. Şimdi basit bir örnek daha yapalım:

Program deneme;
uses wincrt;
var
a:integer;
begin
clrscr;
a:=0;
repeat
a:=a+1;
writeln(a);
until a=100;
readln;
end.

Bu programın mantığı şöyle: a 100 e eşit oluncaya kadar a ya bir ekle ve bu yeni a değeri olsun ve her yeni a değerini ekrana yazdır.

Bir program daha yapalım. Bu programda da girdiği sayının karesini alsın ama ne zamana kadar girilen sayı 1 olana kadar. 1 girildiğinde program yine 1 in karesini verecek ama sonra kendini kapatacaktır. Eğer bunun sonsuza dek gitmesini istiyorsanız until sayi=1 degil until 0=2 deriz.

Program deneme2;
uses wincrt;
var
sayi:integer;
begin
clrscr;
repeat
writeln(‘Bir sayi giriniz’);
readln(sayi);
writeln(‘Karesi: ‘,sayi*sayi);
until sayi=1;
end.

Şimdi bi program daha yapalım bu programda da her enter’a basıldığında çarpım tablosu artıyor. Bu örnekte iç içe döngü kullanıcaz.

Program icice;
uses wincrt;
var
x,y:byte;
begin clrscr;
x:=0;
repeat
x:=x+1;
y:=0; {x ve y’nin ilk değerleri 0 ve her döngüde 1 arttırılıyor.}
repeat
y:=y+1;
writeln(x:2,’ x ‘,y:2,’ = ‘,(x*y):3);
until y=10; {y 10 olana kadar devam et}
readln;
clrscr;
until x=10; {x 10 olana kadar devam et}
end.

Bir de tek bir sayfada bütün çarpım tablosunu yazalım.

Program Carpim_Tablosu;
uses wincrt;
var
x,y:byte;
begin clrscr;
gotoxy(27,1);write(‘Ç A R P I M T A B L O S U’);
x:=0;
repeat
x:=x+1;
y:=0;
repeat
y:=y+1;
if x<=5 then gotoxy(x*16-15,y+2) else gotoxy((x-5)*16-15,y+13);
write(x:2,’ x ‘,y:2,’ = ‘,(x*y):3);
until y=10;
until x=10;
readln;
end.

While .. Do Döngüsü
Repeat..until döngüsünde bir şart oluncaya kadar yap diyorduk while..do döngüsünde ise bir şart olduğu sürece yap diyoruz. Kullanımı if’in kullanımına benzer:
While sart ya da sartlar do
begin
islemler
end;

Şimdi while..do döngüsüyle 100 e kadarki sayıları yazan bir program yapalım;

Program deneme3;
uses wincrt;
var
sayi:integer;
begin
clrscr;
sayi:=1;
while (sayi<=100) do {sayi 100 den küçük olduğu sürece aşağıdaki işlemi yap}
begin
writeln(sayi);{sayi yi yaz}
sayi:=sayi+1; {sayinin üstüne bir ekle ve yeni değeri sayi olarak ata}
end;
end.

For – to [downto] – do Döngüsü

Kullanımı while..do ya benzer ama bu döngüde bir değerden başka bir değere kadar ilk değerin birer birer arttırılması ve her arttırılmada bir işlem yapılması sağlanır. Komutun kullanımı açıklamasından daha basit:

For x:=ilk_deger to son_deger do
begin
islemler
end;

Daha demin while..do ile 100 e kadar olan sayıları ekrana yazdırmıştık şimdi aynı şeyi for..to..do ile yapalım.

Program yuzekadar;
uses wincrt;
var
x:integer;
begin
clrscr;
for x:=1 to 100 do
writeln(x);
readln;
end.

Aynı while.doo ile yaptığımız işlemi çok daha kısa kodlarla hallettik. Döngülerin avantajlarını görüyoruz. Bir örnek daha yapalım anlamak için:

Program yuzekadarkare;
uses wincrt;
var
x,kare:integer;
begin clrscr;
for x:=1 to 100 do
begin
kare:=x*x;
writeln(x,’ karesi: ‘,kare);
end;
end.

to ile birer birer arttırır downto ile birer birer azaltırız yani;

Program yuzekadarkare;
uses wincrt;
var
x,kare:integer;
begin clrscr;
for x:=100 downto 1 do
begin
kare:=x*x;
writeln(x,’ karesi: ‘,kare);
end;
end.

yukardaki ile aynı işlemi yapar.Sadece tersten gider.

Bu döküman ZoRKaYa tarafından Tahribat.Com için yazılmıştır.

About these ads
Kategoriler:Dökümanlar Etiketler:
  1. 05/04/2011, 11:57

    gzellllllllllllll

  2. 05/04/2011, 11:58

    çok ii olmuş ama insan bazen bsit olan şeyi ble sırf saçma bi sebebden beri yapma istegnı kaybediyo

  3. 09/04/2011, 12:54

    karışık görünüyor ama aslında basit…

  4. ercüment
    18/04/2011, 13:15

    bana yardımcın ola bilirmisiniz bir konuda

  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter picture

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

Takip Et

Her yeni yazı için posta kutunuza gönderim alın.

Diğer 900 takipçiye katılın

%d blogcu bunu beğendi: