Pascal'a Giriş
Pascal Dersleri'ne baslamadan önce bilgisayariniza Turbo Pascal Derleyicisini
kurmamiz gerekiyor.Eger bilgisayarinizda Turbo Pascal kurulum paketi yoksa
DOWNLOAD bölümümüzden gerekli dosyalari çekebilirsiniz. Eger TurK
Pascal(c)'dan download ettiyseniz.Bilgisayarinizda tp70.zip ismindeki
sikistirilmis dosya bulunmasi gerekiyor.Bunu Winzip programi vasitasiyla tp70
isminde bir klasöre unzipleyin.Ilgili klasörü açin ve Install.exe programini
çalistirin.Eger çalistirdiginizda bir hata verirse.Ms-Dos modunda ilgili klasöre
girip install yazin.Böylece kurulum programi çalisacaktir.Simdi asagidaki
listeyi takip edin.
-Giris ekranini Enter tusuna basip geçin. -Size kaynak sürücüyü
soracaktir.Normalde install.exe programinin bulundugu sürücü otomatik
olarak yazilmis olacaktir.Enter tusuna basin. -Size kaynak sürücüyü
soracaktir.Eger gerekli dosyalar install.exe programinin bulundugu
klasördeyse degistirmeden Enter tusuna basin. -Install Turbo Pascal on a
Hard-Drive i seçip Turbo Pascali Hard Diske yükleyecegimizi belirtelim.
-Otomatik olarak C:\\Tp klasörünü ayarlayacaktir.Degistirmeden Start
Installation a basin. -Dosyalarin yüklenmesini bekletin.Mavi bir mesaj kutusu
çikacak.Herhangi bir tusa basin. -Turbo Pascal'in Ingilizce Readme yazisi
çikacaktir.Çikmak için Esc'ye basin. -Turbo Pascal hard diskinizin belirtilen
dizinine kurulmus olacaktir.
Simdi isimizi daha da kolaylastirmak için Not Defteri programini çalistirin ve
Windows'un kurulu oldugu hard diskin içindeki Autoexec.bat dosyasini açin ve
dosyanin sonuna asagidaki kodu ekleyin.
Set Path=%PATH%;C:\\Tp\\Bin;
Yalniz bunu yaparken dikkat edin.Baska bir kodu silmeyin.
Bu islemleri tamamladiysaniz bilgisayarinizi yeniden baslatin.Böylece
kodlarinizi programa(exe) çevirecek olan Turbo Pascal Derleyicisi
bilgisayariniza kurulmus olacaktir.
Bir sonraki yazi Programlama Mantigi ile ilgili.Daha önceden Qbasic,TurboC
veya farkli bir programlama dili ile ugrastiysaniz,bu bölümü atlayabilirsiniz
__________________
İlk Adımlar
Artik bilgisayarimizda Turbo Pascal Derleyicisi ve bizde programlama mantigi
olduguna göre yavas yavas örneklerle Turbo Pascal'i ve Pascal dilini
ögrenmege baslayabiliriz. Kodumuzu iki türlü yazabiliriz.Birinci yöntem kodu
Not Defteri gibi bir programda yazip kaydettikten sonra derleyici ile
derlemek.Ikinci yöntem ise Turbo Pascal'in editörünü kullanarak kodu yazip
derlemek.Eger elinizde bu derslerin yazili dökümü varsa ikinci yöntemi
kullanabilirsiniz.Eger derslerin yazili dökümü yoksa,onlari bilgisayar
ortaminda okuyup farkli bir Windows programiyla yazmaniz daha kolay
olacaktir.Çünkü Turbo Pascal'in orijinal editörü Dos ortaminda çalisiyor ve
buda size çok vakit kaybettirebilir.Yinede her sartta birinci yöntemi
öneririm.Böylece ikide bir Windows'tan çikmaniza gerek kalmaz.
Pascal Kaynak Kodlarinin(Derlenmemis) uzantisi \".pas\"dir.Turbo Pascal degisik
uzantili dosyalari derleyebilir(Pascal kodu içermek sartiyla),fakat \".pas\"
uzantisi yayginlik kazanmis ve benimsenmistir.Bu yüzden Windows'a .pas
uzantisini tanitmamiz gerekebilir.Notepad ile bir seyler yazip 1.txt ismi ile
kaydedin.Daha sonra bunu Yeniden Adlandirarak(Rename) .txt yerine .pas
yazin.Dosya türünü degistirmek istiyor musunuz diyaloguna Evet cevabini
verdikten sonra dosyayi çift tiklayin \"Birlikte Aç\" penceresi açilacaktir.Dosya
tanimina Pascal Kaynak Kodu yazin.Program listesinden de Notepad'i bulup
seçin.\"Bu dosyayi açmak için her zaman bu programi kullan\" kutusunun seçili
olduguna dikkat ederek \"Tamam\" butonuna basin.Böylece bilgisayariniz .pas
uzantili dosyalara ne isim verecegini ögrenmis olur.
Baslat(Start)-->Çalistir(Run) ile çikan kutucuga notepad yazin.Böylece
Windows'un klasik Not Defteri programi çalisacaktir.Asagidaki kodu yazin.
Program ilk;beginend.
Bu kodu ilk.pas olarak Masaüstü(Desktop)'ne kaydedin.Daha sonra tüm klasör
pencerelerini kapatip.Masaüstünde iken Baslat-->Çalistir deyip kutucuga tpc
ilk.pas yazin.
Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland
InternationalILK.PAS(3)3 lines, 1472 bytes code, 668 bytes data.
yazisini görürseniz programiniz derlenmis demektir.Masaüstünde ilk
programiniz olan Ilk.exe bulunuyorsa basardiniz demektir.Eger bu asamaya
gelemediyseniz korkarim daha önceden bir hata yapmissiniz.Kurulum yazisini
tekrar inceleyin. Ilk.exe'yi hevesle çalistirdiniz ama bir sey olmadi degil mi?
Olmamasi çok dogal çünkü programin sadece ismi,basi ve sonu var.Ama hiçbir
islem yok.Bu arada yapilacak islemler begin ile end komutlari arasina
yazilir.End komutunun sonundaki nokta(.) ise programin bittigini
gösterir.Unutmayin bir programda birden fazla begin ve end
bulunabilir.Programi bitiren end nokta ile program içerisindeki endler ise
noktali virgül(;) ile sonlandirilmalidir. Genelde pascal kod satiri noktali
virgül(;) ile sonlandirilir.Fakat bazi istisnai kodlarda noktali virgül
kullanilmaz.Bunlar begin,repeat gibi degisik sekilde sonlandirilan
komutlardir.Endise etmenize gerek yok zamani gelince her seyi daha net
anlayacaksiniz.
Yukaridaki kodu yorumlamak gerekirse \"Program ilk;\" satiri programin isminin
ilk oldugunu bildirir.\"begin\" komutu programin baslangicini \"end\" komutu ise
programin sonunu belirtir.
Pascal ile yazilabilecek en basit program budur.Bir sonraki derste daha
kullanisli programlar yazmaya baslayacagiz.
Pascal Programlama Dili Yapısı
• Algoritma Kurma
• Akış Diyagramları
• Akış Diyagramı Örnekleri
• Yazım İçin Format Belirleme
• Veri Tipleri
Menüler
• File Menüsü
• Edit Menüsü
• Compile Menüsü
• Run Menüsü
• Search Menüsü
Komutlar
• Write - Writeln
• Read - Readln
• For - Do
• For - Downto
• Repeat - Until
• While - Do
• If Deyimi
• If - Then - Else Yapısı
• Case..Of
• Continue
• Break
• Goto Deyimi
• Halt
• Exit
• Forward İfadesinin Kullanımı
Alt Programlar
• Kullanıcı Tanımlı Function Alt Programları
• Procedure Alt Programlar
• Parametreli Prosedürler
• Parametresiz Prosedürler
Ekran Komutları
Diğer Komutlar
Pascal Sözcükleri
Özel Semboller
PASCAL
Giriş
Pascal programlama dili 1968 yılında Niklaus Wirth tarafından geliştirilmiş üst düzey
programlama dilidir. Pascal programlama dilinin günümüzdeki sürümleri Turbo/Borland ve
Windows Pascal adları ile bilinmektedir. Turbo Pascal programlama dili mühendislik
problemlerinin çözümlerinde, bilimsel projelerde, sağladığı grafik desteği ve program yazmadaki
kolaylıklarıyla aranılan bir dil olma özelliğini sürdürmektedir.
Pascal programlama dilinin önemli özelliklerinden biri, program yazmadaki kolaylıkların yanısıra,
yazılan bir metinin kolaylıkla değiştirilebilmesi, program içindeki bir metinin istenilen yere
taşınabilmesi, kopyalanabilmesi, yazılan programdaki yazım kurallarının kolaylıkla kontrol
edilebilmesi, hataların kolaylıkla tespiti ve bu hataların düzeltilmesi için yaptığı öneriler vb. gibi
işlemlerin çabuk ve güvenilir bir şekilde yapılabilmesine olanak sağlamasıdır.
Pascal’ın programcıya sunduğu önemli özelliklerden biri de; bazı programlarda ortak olarak
kullanılan program parçalarının ayrı bir Pascal dosyası olarak saklanması suretiyle farklı
programlarda bu program parçalarının kullanılabilmelerine olanak tanımasıdır.
Pascal Menüleri
Pascal editöründe kullanımı kolaylaştıran bir çok menü vardır. Bu menülere ulaşmak için “Alt ”
tuşu ile birlikte menü isimlerinin ilk harflerine basmak yeterlidir. Menüye ulaştıktan sonra menü
komutlarına erişim için üç yol vardır. 1)Mouse ile, 2)Ok tuşlarıyla 3) menü komutu üzerindeki
işaretli harfe basılır.
Burada Pascal menülerinin tamamını tanıtmayıp sıklıkla kullanılan menü ve menü komutlarının
kullanımı anlatılacaktır. Burada tanımı yapılan menüler, Windows Pascal için ifade edilmekle
olup, aralarındaki küçük farklarla Turbo ve Borland Pascal 7.0 için de geçerlidir.
PASCAL PROGRAMLAMA DİLİ YAPISI
Bir Pascal programı en genel anlamda üç ayrı kısımdan oluşmuştur. Bu kısımlar bulunmaları
gereken sıraya göre aşağıda verilmiştir.
Program Başlığı;
Tanımlama Bloğu;
BEGIN
İcra Bloğu;
END.
Programların asıl icra bölümü son bölümüdür. Yukarıda icra bloğu olarak gösterilen bu bölüm,
Pascal komut cümlelerinden oluşur. ICRA bloğu, “BEGIN” ile başlar “END.” ile sona erer. Her
program bloğu birden fazla “END” içerebilir. Ancak bu end deyimleri program içinde bulunan
değişik blokların sonunu göstermek için kullanılır ve hiç birinin sonunda “.” işareti bulunmaz. “.”
işareti sadece ana programın sonunu göstermek amacıyla kullanılabilir. Ana programın sonu
haricindeki diğer “END” deyimlerinin sonunda “;” işareti kullanılır.
Program Başlığı: Bir Pascal programının ilk kısmı, kullanılması programcının seçimine bağlı olan
“program başlığı” dır. Program başlığı, programa bir isim vermek için kullanılır ve program
isimlerinde İngiliz alfabesinde bulunmayan Türkçe karakterler kullanılmamalıdır. Programa uzun
isimler verilebilir ancak sözcükler arasında boşluk bulunmamalıdır.
Tanımlama Bloğu: Pascal programının bu bölümünde program icra bloğunda kullanılan sabitler
ve değişkenlerin isimleri ve bunların ne tür sabit/değişken olduğu bildirilir. Bu blok pascal
programı içerisinde mutlaka belirtilmelidir. Örnek olarak, aşağıda değişik veri tiplerindeki
değişkenlerin bir tanımlama bloğunda nasıl tanımlanabileceği gösterilmiştir.
Tanım ve Veri Tipi
S REAL
A STRING
B INTEGER
C LONGINT
F SHORTINT
H BOOLEAN
J BYTE
KL WORD
Algoritma Kurma
Algoritma, verilen herhangi bir sorunun çözümüne ulaşmak için uygulanması gerekli adımların hiç
bir yoruma yer vermeksizin açık, düzenli ve sıralı bir şekilde söz ve yazı ile ifadesidir. Algoritmayı
oluşturan adımlar özellikle basit ve açık olarak sıralandırılmalıdır. Algoritmik çözüm yöntemlerine
ilk örneği günlük yaşantımızdan verelim.
Örnek 1: Örneğimiz bir insanın evden çıkıp işe giderken izleyeceği yolu ve işyerine girişinde ilk
yapacaklarını tanımlamaktadır.
Çözüm 1:
Evden dışarıya çık
Otobüs durağına yürü
Durakta gideceğin yöndeki otobüsü bekle
Otobüsün geldiğinde otobüse bin
Biletini bilet kumbarasına at
İneceğin yere yakınlaştığında arkaya yürü
İneceğini belirten ikaz lambasına bas
Otobüs durunca in
İşyerine doğru yürü
İş yeri giriş kapısından içeriye gir
Mesai arkadaşlarınla selamlaş
İş giysini giy
İşini yapmaya başla.
Yukarıdaki örnekte görüldüğü gibi, evden işe gidişte yapılabilecek işlemler adım adım sırasıyla,
kısa ve açık olarak tanımlanmaya çalışılmıştır. Yukarıdaki algoritma kişinin otobüsü kaçırma
olasılığı düşünülmeden oluşturulmuştur. Kişi durağa geldiğinde bineceği otobüsü kaçırmış ise
algoritmamız aşağıdaki şekilde değiştirilebilir.
Çözüm 2:
Evden dışarıya çık
Otobüs durağına yürü
Otobüsün saati geçmiş ?
Durakta gideceğin yöndeki bir sonraki otobüsü bekle
Bir sonraki otobüs gelene kadar 4. adımı uygula
Otobüsün geldiğinde otobüse bin
Biletini bilet kumbarasına at
İneceğin yere yakınlaştığında arkaya yürü
İneceğini belirten ikaz lambasına bas
Otobüs durunca in
İşyerine doğru yürü
İş yeri giriş kapısından içeriye gir
Mesai arkadaşlarınla selamlaş
İş giysini giy
İşini yapmaya başla.
Her iki örnekte görüldüğü gibi sorunu çözüme götürebilmek için gerekli olan adımlar sıralı ve açık
bir biçimde belirlenmiştir. Algoritmanın herhangi bir adımındaki küçük bir yanlışlık doğru çözüme
ulaşmayı engelleyebilir. Bu nedenle algoritma hazırlandıktan sonra dikkatle incelenmeli ve varsa
adımlardaki yanlışlıklar düzeltilmelidir.
Programlamanın temeli olan algoritma hazırlanmasında dikkat çekici bir nokta, aynı sorunu
çözmek için hazırlanabilecek olası algoritma sayısının birden çok olmasıdır. Başka deyişle, bir
sorunun çözümü için birbirinden farklı birden fazla sayıda algoritma hazırlanabilir. Bu da
gösteriyor ki herhangi bir problemin çözümü için birbirinden farklı yüzlerce bilgisayar programı
yazılabilir.
Bir bilgisayar programı için hazırlanacak olan algoritma da aynı şekilde çözüm yolunu bilmeyen
bir kişiye, çözüme ulaşmak için neler yapması gerektiği anlatılıyormuş gibi hazırlanmalı ve eksik
bir nokta bırakmaksızın gerekli tüm adımları açık ve düzenli olarak içermelidir. Çözüm için
kullanılacak bilgilerin nereden alınacağı, nerede saklanacağı ve çözümün program kullanıcısına
nasıl ulaştırılacağı algoritma adımları arasında belirtilmelidir.
Aşağıda değişik işlemlere ilişkin algoritma örnekleri verilmiştir.
Örnek 2: İki sayıyı toplamak için gerekli programa ait algoritmanın oluşturulması.
Algoritma:
A1 :Birinci sayıyı gir
A2 :İkinci sayıyı gir
A3 :İki sayının toplamını yap
A4 :Toplamın değerini yaz
A5 :Bitir.
Bu tam bir algoritmadır. Sözcüklerin ortaya çıkaracağı yanlış anlamaların ortadan kaldırmak
amacıyla semboller ve matematik dilini gerektiren bazı kısaltmalar kullanmak daha uygun
olacaktır. Bir algoritma yazılırken şu metot izlenmelidir:
1. Programda kullanılacak elemanları temsil etmek üzere uygun isimler veya değişkenler seç.
2. Bazı isimlere başlangıç değeri olarak çözümün gerektirdiği uygun değerler ver.
3. Gerekirse programa girilecek verileri düzenle.
4. Cebirsel notasyon ve kararlar kullanarak aritmetik işlemleri gerçekleştir.
5. Çıkışı düzenle.
6. Bitir.
Yukarıda iki sayının toplanması için oluşturduğumuz algoritmayı bu yeni gereksinimlere uyarak
yeniden yazalım.
Toplam adı için Z
Birinci Sayı için X
İkinci Sayı için Y değerleri kullanılırsa;
Algoritma:
A1 :X değerini gir
A2 :Y değerini gir
A3 :Z ¬ X+Y
A4 :Z’ yi yaz
A5 :Bitir
Görüldüğü üzere bu şekilde bir algoritma ile çözüm yolunu izlemek daha kolaydır. Bundan sonra
bu tip algoritma kullanılacaktır.
A6 :Bitir
Bu örnekte Ort değeri ile iki sayının ortalaması temsil edilmiştir.
Örnek 4: Beş sayının toplamını ve ortalamasını veren programa ait algoritmanın oluşturulması
Toplam adı için Top
Ortalama adı için Ort
Girilen sayılar için X
Arttırma için Sayac kullanılırsa
Algoritma:
A1 :Top ¬ 0, Sayac ¬ 0
A2 :X’i gir
A3 :Top¬ Top+X
A4 : Sayac ¬ Sayac +1
A5 :Eğer Sayac <5 ise A2’ye git
A6 :Ort¬ Top/5
A7 :Top ve Ort değerlerini yaz
A8 :Bitir
Örnek 5: Kenar uzunlukları verilen dikdörtgenin alan hesabını yapan programa ait algoritmanın
hazırlanması. Kenar uzunlukları negatif olarak girildiği durumda veri girişi tekrarlanacaktır.
Dikdörtgenin kısa kenarı : a
Dikdörtgenin uzun kenarı : b
Dikdörtgenin alanı : Alan
Algoritma:
A1 :a değerini gir
A2 :a<0 ise 1. adımı tekrarla
A3 :b değerini gir
A4 : b<0 ise 3. adımı tekrarla
A5 :Alan ¬ a*b
A6 :Alan değerini yaz
A7 :Bitir
Örnek 7: Verilesayının faktöriyelini hesaplayan programın algoritmasının oluşturulması
Sayının faktöriyeli :Fak
Faktöriyel degişkeni :X
Faktöriyeli hesaplanacak sayı :Y
Algoritma:
A1 :Fak¬ 1, X¬ 0
A2 :Y’i gir
A3 :Y<0 ise 2. adımı tekrarla
A4 :X¬ X+1
A5 :Fak¬ Fak*X
A6 :X<Y ise 4. adıma geri dön
A7 :Fak değerini yaz
A8 :Bitir
Bu algoritmada 1. adımda X e 0 ve Fak değişkenine 1 değeri atanıyor. 2. adımda Y değeri giriliyor
ve 3. adımda Y değerinin 0 dan küçük bir değer olup olmadığı denetleniyor ve denetim sonucuna
göre gerekli komut veriliyor. 4. adımda X’in değeri 1 arttırılıyor ve 5. adımda X için Fak değeri
hesaplanıyor. 6. adımda X in değerinin faktöriyeli hesaplanacak sayıdan küçük olması
durumunda 4. adımdan itibaren işlemlerin tekrarlanması komutu veriliyor, X’ in değerinin Y’ye eşit
olması durumunda işlemler tamamlanarak hesaplanan değerin yazdırılması işleminden sonra
programın çalışması sona ermektedir.
Akış Diyagramları
Geliştirilecek olan yazılımın genel yapısının şematik gösterimine akış diyagramı veya blok
diyagramı adı verilir. Akış diyagramları, yazılımı oluşturacak program parçalarını ve bu parçaların
birbirleri ile olan ilişkilerini belirler. Bir bilgisayar programının oluşturulmasında akış
diyagramlarının hazırlanması, algoritma oluşturma aşamasından sonra gelmektedir. Bilgisayar
programının oluşturulması sırasında algoritma aşaması atlanarak, doğrudan akış diyagramlarının
hazırlanmasına başlanabilir. Programlama tekniğinde önemli ölçüde yol almış kişiler bu aşamayı
da atlayarak direkt olarak programın yazımına geçebilirler.
Akış diyagramlarının algoritmadan farkı, adımların simgeler şeklinde kutular içinde yazılmış
olması ve adımlar arasındaki ilişkilerin (iş akışı) oklar ile gösterilmesidir.
Akış diyagramlarında kullanılan semboller, anlamları ve kullanış amaçları aşağıdaki tabloda
verilmiştir.
Tablo 1. İş akış diyagramlarında kullanılan semboller ve anlamları
Simge Simgenin Adı ve Anlamı
Elips Akış diyagramının başlangıç ve bitiş yerlerini gösterir. Başlangıç simgesinden çıkış oku
vardır. Bitiş simgesinde giriş oku vardır.
Paralel Kenar: Programa veri girişi ve programdan elde edilen sonuçların çıkış işlemlerini gösterir.
Dikdörtgen Aritmetik işlemler ve değişik atama işlemlerinin temsil edilmesi için kullanılır.
Eşkenar Dörtgen Bir karar verme işlemini temsil eder.
Altıgen Program içinde belirli blokların ard arda tekrar edileceğini gösterir.
Oklar Diyagramın akış yönünü ,yani her hangi bir adımdaki işlem tamamlandıktan sonra hangi
adıma gidileceğini gösterir.
Ayrıntılı bir akış diyagramı, yazılımı oluşturan işlemleri ve ilişkilerini en küçük detayına kadar
belirler.
Bir bilgisayar programının geliştirilmesinde kullanılan programlama dili ne olursa olsun bu
programların akış diyagramlarında genel olarak yalnız üç basit mantıksal yapı kullanılır. Bu
mantıksal yapılardan en basiti sıralı yapıdır. Sıralı yapı, hazırlanacak programdaki her işlemin
mantık sırasına göre nerede yer alması gerektiğini vurgular. Bu yapı sona erinceye kadar ikinci
bir işlem başlayamaz.
Şekil 1.2 Sıralı Yapı
Mantıksal yapılardan ikincisi Karar Verme yapısıdır (Şekil 1.3). Programlama sırasında If...Then...
Else yapısı ile tanıyacağımız bu mantıksal yapılar, birden fazla sıralı yapı seçeneğini kapsayan
modüllerde, hangi şartlarda hangi sıralı yapının seçileceğini belirler.
Şekil 1.3 Karar Verme Yapısı
Üçüncü mantıksal yapı çeşidini tekrarlı yapılar oluşturmaktadır. Bu yapılara Pascal programlama
dilinde For(Şekil 1.4.a), While ve Repeat..Until (Şekil 1.4.b), yapısı adı da verilir. Şartlara göre
değişik işlem gruplarının yapılmasını sağlar. Bu yapı yukarıda sözü edilen iki yapının çeşitli
kombinezonların tekrarlanmasından oluşmuştur.
Söz konusu üç değişik yapı, değişik kombinezonlarda kullanılarak istenilen işlevleri yerine
getirecek programlar hazırlanabilir. Programların bu üç basit yapı ile sınırlandırılması program
modüllerinin daha kolay tasarlanmasını sağlar.
a
b
Şekil 1.4. Tekrarlı Yapı
Akış Diyagramı Örnekleri
Bu bölümde yazılım oluşturma evrelerinden biri olan akış diyağramları ile ilgili örnekler verilmiştir.
Sözlü veya yazılı olarak oluşturduğumuz algoritmanın programa dönüştürülmesi sırasında
programın çalışma sırasını da gösteren akış diyagramlarıyla ilgili örnekler aşağıda verilmiştir.
Örnek 1: İki sayının toplamını ve ortalamasını yapan bilgisayar programının akış diyagramını
çiziniz.
Örnek 2: 1’den 100’e kadar olan sayıların toplamlarını ve ortalamalarını veren programın akış
diyagramını çiziniz.
Örnek 3: Ax+b=0 şeklinde verilen 1.derece denklemin çözümünü veren programa ait akış
diyagramını çiziniz.
Örnek 4: Ax²+Bx+C=0 şeklinde verilen 2. derece denklemin köklerini bulan programın akış
diyagramını çiziniz.
Yukarıdaki örnekte A=0 girilmesi durumunda denklem 1.derece olmaktadır. Bu durumu dikkate
alarak gerekli çözümü de gösterecek şekilde akış diyagramını değiştiriniz.
Örnek 5: 1’ den 100’e kadar sayıların karelerini, kareköklerini, küplerini, küpköklerini toplamlarını
ve ortalamalarını veren programın akış diyagramını çiziniz.
Örnek 6: Yukarıda karar mantığı yapısı ile çözümlediğimiz problemi döngü yapısı ile
çözümleyelim.
Örnek 7:10 tane N sayısının faktöriyelini hesaplayan programın akış diyagramını çiziniz.
Örnek 8: Yukarıdaki örneği tekrarlı yapı olarak tanımladığımız döngü yapısı ile çözelim.
Örnek 9: Elimizde bulunan A,B, ve C gibi 3 adet sayıdan en büyüğünü ve en küçüğünü bulan
programın akış diyagramını çiziniz.
Örnek 10: Elimizde bilinmeyen sayıda koni bulunmaktadır ve koniye ait yarıçap (R) ve yükseklik
(H) değerleri klavyeden girilmek suretiyle V=p .R².H/3 formülü ile hacim hesabı yapılacaktır.
Koniye ait yarıçap değeri 0 girildiğinde programın çalışması duracaktır. Programda her girilen veri
için hacim değeri rapor edilecek, programın çalışması bittiğinde toplam kaç koni için hacim hesabı
yapıldığı da belirtilecektir.
Verilen akış diyagramında R ve H değerlerinin negatif girilmesine engel olacak şekilde akış
diyagramını yeniden düzenleyiniz.
Örnek 11: F(x) kesikli fonksiyonunun değeri X’in aldığı değerlere göre aşağıda verilmiştir. X’in
değeri 0-10 arasında 0.5 aralıklarla arttığına göre her bir X değeri için F(x) fonksiyonunu
hesaplayan programın akış diyagramını çiziniz.
• 0£ X £ 2 f(x)= X
• 2< X £ 3 f(x)=X3-X2-2
• 3< X £ 4 f(x)=X2-2X+13
• 4< X f(x)=X4-3X2-43
Örnek 12: p sayısının formülü olduğuna göre serinin paydasındaki ifade 100 oluncaya kadar pi
sayısını hesaplayan bilgisayar programının akış diyagramını çiziniz.
Yazım İçin Format Belirleme
Writeln deyimi ile yapılan bilgi çıkışlarını düzenlemek için yazım formatları kullanılır. Yazdırılmak
istenilen değerin tipine bağlı olarak iki farklı yazım formatı kullanılır.
1. Yazım Formatı (M:n) :Bu yazım formatına göre yazdırılmak istenilen M değeri n karakterlik
alanda sağa dayalı olarak yazılır. M değerini oluşturan dijit veya karakterin uzunluğu n sayısından
küçük ise, aradaki fark kadar sol tarafta boşluk bırakılır. M değerinin uzunluğu n sayısına eşit
veya büyük ise yazdırma işlemi format belirtilmemiş gibi gerçekleştirilir.
Const
i:integer=567;
b:boolean=True;
c:char='b';
h:string[ 10] ='Nasılsınız';
begin
Writeln('123456789');Writeln;
Writeln(i:9);
Writeln(b:9);
Writeln(c:9);
Writeln(h:9);
Writeln(i:2);
Writeln(h:5);
end.
2. Yazım Formatı (M:n:k) : Bu yazım formatı real sayılar üzerinde çalışmaktadır. Bu yazım
formatıyla reel sayılar üssüz notasyonda yazdırılır. Bunu sağlamak için sadece real sayılar için
geçerli olan 2. yazım formatı kullanılır. Yazdırılacak M real değeri n karakterlik alanda sağa dayalı
olarak üssüz yazdırılır, k ise n karakterin sonundaki kesirli kısmı göstermektedir.
Örneğin; A değeri, A:7:2 şeklinde yazdırılmak istenirse; program real sayı için 7 karakterlik yer
ayırır. Bu alanın son iki hanesi ondalıklı kısım için sondan 3. hanesi ise desimal nokta için
kullanılır.
Sayının tamsayı kısmı ayrılan alanın uzunluğundan küçük ise, aradaki fark kadar sol tarafta
boşluk bırakılır. Yazdırılacak sayının tam sayı kısmı bu alana sığmıyor ise, tamsayı için ayrılan
alanın uzunluğu yazdırılan sayının tamsayı alan uzunluğuna eşit büyüklükte kabul edilir. Kesirli
kısmı ayrılan alandan daha küçük ise aradaki fark kadar sağ tarafa 0 dijiti ilave edilir. Kesirli kısım
alana sığmıyorsa yuvarlatılarak yazılır.
Yazım sırasında kesirli alanın yazılması istenmiyorsa k sayısının “0” yazılması gerekir. k sayısının
sıfır olması desimal noktanın yok olmasını sağlar.
const a:real=123.127927;
begin
Writeln('123456789');
Writeln('*********');;
Writeln(a:9:4);
Writeln(a:9:3);
Writeln(a:9:2);
Writeln(a:9:0);
Writeln(a:7:2);
Writeln(a:6:2);
Writeln(a:5:2);
Writeln(a:0:0);
end.
Programın çalışmasıyla elde edilen sonuç aşağıda verilmiştir. Program sonucuna göre sondan 2.
ve 3. satırların aynı olduğuna dikkat ediniz
Veri tipleri
Integer Tipi Veriler
Integer tipindeki veriler tamsayılardan oluşmuşlardır ve kayar nokta içermezler. Turbo Pascal’daki
tamsayılar -32768 ile +32767 arasında sınırlandırılmışladır.
Word Tipi Veriler
Word Tipi veriler, 0-65535 arasındaki tamsayılardan oluşmuşlardır.
Shortint Tipi Veriler
-128 ile +127 arasındaki tamsayılardan oluşmuşlardır.
Byte Tipi Veriler
Byte tipi veriler işaret ve desimal nokta içermeyen 0-255 arasındaki değerlerden oluşan
tamsayılardır. Programda, 0-255 arasındaki tamsayılar için değişken veya sabitlerin Byte tipi
olarak tanımlanması bellekten tasarruf sağlar.
Longint Tipi Veriler
-2147483648 ile +2147483647 arasında görev yaparlar ve tamsayıların menzil olarak en
kapsamlısıdır.
Boolean Tipi Veriler
Mantıksal ifadeler olarak da isimlendirilebilen Boolean tipi veriler sadece iki değerden oluşurlar.
Bunlar “FALSE” ve “TRUE” dir.
Durum:Boolean;
Hata:Boolean;
Char Tipi Veriler
Char tipi veriler, ASCII karakter kümesinin 256 adet elemanından oluşurlar. Char tipi veriler bir
sabit olarak ele alındığından ’ ’içerisinde yazılır.
String Tipi Veriler
Bu tip veriler, karakter kümesi şeklinde olup ’ ’ içerisinde yazılırlar.
A:STRING[ 5] ;
B:STRING[ 16] ;
Burada A isimli karakter kümesi maksimum 5 karakterden, B isimli karakter dizisi ise maksimum
16 karakterden oluşmaktadır.
Bu bilgilerin eşliğinde ilk pascal programını yazabiliriz.
Program Birinci_ve_ilk_prog_ram;
Var
Mesaj:string[ 7] ;
BEGIN
Mesaj:=‘Merhaba Yaşamı Yaşanası Kılan Güzel İnsanlar’;
Write(Mesaj);
END.
Programımızın çalıştırılmasıyla ekran görüntüsü aşağıdaki gibi olacaktır.
Merhaba, Yaşamı Yaşanası Kılan Güzel İnsanlar
Real Tip Veriler
Real tip veriler desimal nokta içeren ve üslü formda ifade edilebilen gerçel sayılardır. Üs ifadesi
olarak “E” harfi kullanılmaktadır. Kullanımları ile ilgili örnekler aşağıda verilmiştir. Tanım
aralığı;2.9E-39..1.7E38 'dir. Bellekte 6 byte yer kaplar.
-2.3454
123.11223344
-2.45E+12
2.45E+12
1.123123E-12
Olağan koşullarda bir programlama hatası söz konusu değilse veya çok büyük sayılar ile
çalışılmıyor ise REAL tip sayılarla çalışmada bir sorun ile karşılaşmayız.
Kişisel bilgisayarların mikro işlemcileri 80x86 olarak isimlendirilir. Bu işlemci ailesinin yükünü
hafifletmek için 80x87 olarak bilinen matematik işlemcisi kullanılır. Pascalda bu işlemci ile
kullanılmak üzere dört tip tanımlanmıştır. Bunlar;Single, Double, Extended ve Comp 'tur.
Single Tip Veriler
Single tip veriler, 1.5E-45...3.4E38 sayı kümesi aralığında tanımlanabilir. Bellekte 4 byte yer
kaplar.
Double Tip Veriler
Double tip veriler, 5.0E-45...3.4E38 sayı kümesi aralığında tanımlanabilir. Bellekte 8 byte yer
kaplar.
Extended Tip Veriler
Extended tip veriler, 3.4E-4932...1.1E4932 sayı kümesi aralığında tanımlanabilir. Bellekte 10 byte
yer kaplar.
Comp Tip Veriler
Comp tip veriler çok uzun tamsayıların tanımlanması için kullanılır. Comp veri tipi ile 19-20
basamaklı sayılar ifade edilir. Tanım aralığı; -263...263
80x87 sınıfındaki veri tiplerinin kullanılabilmesi için programın en başına {$N+} derleyici komutu
verilmelidir. Bilgisayarda matematik işlemci yok ise {$E+} matematik işlemci emülasyonu da bu
satıra eklenir.
{$N+}{$E+}
program cok_buyuk_sayilar;
var
Uses wincrt;{Dos için CRT}
a:single; b:double;
c:extended; d:comp;
begin;
A:=12E-40;
B:=12E+39;
D:=1234567890;
C:=A+B+D;
Writeln(C);
End.
File menüsü
Pascal file menüsü üzerinde 10 ayrı menü komutu vardır. Bunların görevleri aşağıda
özetlenmiştir.
Şekil 1. Turbo Pascal File Menüsü
Open: Daha önceden diskte varolan Pascal program dosyasının editöre yüklenmesi için kullanılır.
Pascalın DOS sürümü ile çalışırken aynı yöntem geçerli olmakla birlikte, aynı işlemi, F3 tuşuna
basarak da yapabiliriz. Bu menü komutu kullanıldığında Şekil 2’de verilen diyalog kutusu
görülecektir.
Disk üzerinde bulunan bir Pascal dosyasını editöre yüklemek için diyalog kutusunda görülen
*.PAS yazılı yere programın adı yazılarak “Enter” tuşuna basılır veya önce tab tuşuna bastıktan
sonra ok tuşları ile programın adı üzerine gelinerek “Enter” tuşuna basılır. Aynı seçim, mouse ile
açılmak istenilen programın üzerine gelip iki kez sol tuşu tıklayarak da gerçekleştirilir.
New: Editörde yeni bir Pascal dosyası yaratmak amacıyla kullanılır.
Save: Yazılan programın hafızaya alınması işlemini gerçekleştirir. Program ilk defa hafızaya
alınacak ise Şekil 3’de görülen Save As Diyalog Kutusu ekrana gelerek, programa bir isim
verilmesini bekleyecektir. Programın hafızaya alınması için program adı yazıldıktan sonra mouse
ile \"ok\" tuşuna veya klavyeden “Enter” tuşuna basılması gerekir. Daha önceden diskte bulunan bir
Pascal programı üzerinde yapılan değişiklikler nedeniyle hafızaya alma işlemi için bu komut
kullanıldığı zaman, program eski adı ile kaydedileceğinden aynı diyalog kutusu ekranda
görülmez.
Pascalın DOS sürümü ile çalışırken yazılan programın hafızaya alınması için bu menü komutu ile
aynı işleve sahip olan F2 tuşuna basılması yeterlidir.
Şekil 2. Open Diyalog Kutusu
Şekil 3. Save Diyalog Kutusu
Save As: Editörde aktif penceredeki Pascal programının yeni bir isimle kaydedilmesi amacıyla
kullanılır. Komutun kullanılmasıyla ekrana Save As Diyalog Kutusu gelir. Programa verilecek yeni
isim yazılarak “Enter” tuşuna basılır.
Save All: Pascal ile program yazarken, birden fazla program penceresi ard arda açılabilir. Komut
kullanıldığında açık olan bütün Pascal programları bilinen adları ile hafızaya alınır. Komutun
kullanılması için açık pencerelerdeki programlara daha önceden isim verilmiş olmalıdır.
Change Dir: Sadece Dos sürümü Turbo/Borland Pascalda bulunan bu komut, aktif çalışma
sürücüsü veya dizininin değiştirilmesi amacıyla kullanılır. Komut çalıştırıldığında istenilen dizin
veya sürücü seçilerek “Alt+K” tuş kombinasyonuna basılır veya tab tuşu ile “Ok” butonuna
gelinerek “Enter” tuşuna basılır.
Print: Aktif Pascal penceresindeki program listesinin yazıcıdan alınmasını sağlar.
Printer Setup: Printer seçimi ve printer ayarlamalarının yapılması için kullanılır. Komut
kullanıldığında Şekil 4 ‘te verilen diyalog kutusu ekrana gelir. Printer ve port bölümünden yazıcı
seçimi yapılır. Set Up.. tuşuna basıldığında yazıcı ayarlarında istenilen değişikliklerin yapılmasını
sağlayan diğer bir diyalog kutusu ekrana gelecektir. Burada kağıt boyutu, kağıdın yazıcıya
yerleştirilme şekli, kağıt kaynağı (el ile, üst tepsi, otomatik vb), kullanılacak kağıt kalitesi gibi
değişkenlerden istenilenleri seçmemize olanak sağlanmıştır.
Get Info: Sadece Dos sürümü Turbo/Borland Pascal 'da bulunan bu komut, program ile ilgili
bilgileri içeren bir diyalog kutusu ekrana gelir. Amacı programın ile ilgili çeşitli bilgilerin
programcıya sunulmasıdır.
Dos Shell: Sadece Dos sürümü Turbo/Borland Pascalda bulunan bu komut, geçici olarak Pascal
editörünün terkedilip Dos ortamına dönülmesi amacıyla kullanılır. Dos ortamından tekrar editöre
dönülmesi için Dos promptunda EXIT yazılır.
Exit: Pascal 'dan çıkış için kullanılır.
Edit Menüsü
Edit menüsü yardımıyla program içinde belli blokların silinmesi, başka yere taşınması,
kopyalanması gibi işlemleri yapabilmek mümkündür.
Yukarıda sözü edilen işlemlerin yapılabilmesi için öncelikle üzerinde işlem yapılacak program
bloklarının Shift ve Ok tuşlarına aynı anda basılması ile işaretlenmesi gerekmektedir. Metinin
işaretlenmesi işleminden sonra edit menüsü üzerinde görülen menü komutları çalıştırılır.
Cut: İşaretli metinin silinmesi amacıyla kullanılır. Kısa yol tuşu (Shift+Del).
Copy: İşaretli metini panoya (clipboard) kopyalar. Bu şekilde panoya kopyalanan metinin istenilen
yere kopyalanması işlemi için bu komuttan sonra aşağıda tanımlanan Paste komutunun
kullanılması gerekmektedir. Kısa yol tuşu (Ctrl+Ins).
Paste: Copy komutu ile panoya kopyalanan metinin editör üzerinde istenilen yere
kopyalanabilmesini sağlar. Kısa yol tuşu (Shift+Ins).
Compile Menüsü
Compile Menüsü (Şekil 11) editörde aktif bulunan Pascal programının derlenmesinde, bu
programa bağlı unit programların derlenmesinde ve yazılan Pascal programının dos/windows
ortamında kendi başına çalışır duruma yani; XXXXXXXX.EXE durumuna getirilmesi için kullanılır.
En çok kullanacağımız menü komutları aşağıda özetlenmiştir.
Compile: Editör ekranındaki aktif durumda olan programı derlemek amacıyla kullanılır. Kısa yol
tuşu (Alt+F9).
Make: Editör ekranındaki aktif durumda olan programı ve bu programa bağlı unit harici
programlarını en son değiştirilmiş halleriyle derleme işlemini yapar. Kısa yol tuşu (F9).
Build: Editör ekranındaki aktif durumda olan programları ve bu programa bağlı unit harici
programlarını birlikte derler.
Şekil 10. Compile Menüsü
Destination Memory (Disk): Sadece DOS Turbo Pascalda bulunan bu komut ile Programın
derlenerek çalıştırılacağı ortamın belirtilmesi için kullanılır. Seçenek üzerine “Enter” tuşuna
basılarak Memory yazılı bölüm Disk veya Disk yazılı ise Memory durumuna alınır. Destination
Disk durumunda derleme sonucunda program dos ortamında direkt olarak çalıştırılabilir.
Target: Yazılan programın derlenip çalıştırılacağı ortamı belirlemek için kullanılır. Pascal Real
mode, Protected mode ve Windows olmak üzere üç ortam sunmaktadır.
Editör ve derleyici ile ilgili detaylar kullanıcı kitaplarından veya Help menüsünden sağlanabilir
Run Menüsü
Run menüsünde yazılan programın çalıştırılması için bazı komutlar bulunmaktadır. Run
menüsünde bulunan menü komutları aşağıda özetlenmiştir.
Run: Programı derleyerek çalıştırır. Kısa yol tuşu (Ctrl+F9).
Şekil 9. Goto Line Number Diyalog kutusu
Program Reset: Sadece DOS sürümü Turbo/Borland Pascal‘de bulunan bu komut ile Step Over
veya Trace Into komutlarından biri çalıştırılınca, yapılan kontrolü durdurmak ve hata kontrolünü
tekrar programın ilk deyimi üzerine almak için kullanılır. Kısayol tuşu (Ctrl+F2).
Goto Cursor: Sadece DOS sürümü Turbo/Borland Pascal‘de bulunan bu komut ile editör
ekranındaki program yazılımında kursörün bulunduğu satıra kadar olan program bölümünün
derlenerek çalıştırılmasını sağlar. Kısayol tuşu (Ctrl+F4).
Trace Into: Sadece DOS sürümü Turbo/ Borland Pascal‘de bulunan bu komut ile editör
ekranındaki programın satır satır çalıştırılmasını sağlar. Kısayol tuşu (F7).
Step Over: Sadece DOS sürümü Turbo/ Borland Pascal‘de bulunan bu komut ile editör Trace On
durumuna geçer. Aktif durumdaki programın çalışması sırasında programın hangi satırları
izlediğini ve işlem sırasını izlemek amacıyla kullanılmaktadır. Kısayol tuşu (F8.)
Search Menüsü
Search Menüsü (Şekil 6), program yazımı sırasında belirli sözcüklerin aranması ve değiştirilmesi,
istenilen program satırına hızlı bir şekilde ulaşılması vb. gibi işlemlerin kolaylıkla yapılabilmesini
sağlar.
Find: Bu komut program içinde herhangi bir metinin aranması amacıyla kullanılır. Komut aktif hale
geldiğinde Şekil 7’deki diyalog kutusu ekrana gelir. Aranılacak metin, kendisi için ayrılmış alana
yazılarak klavyeden “Enter” tuşuna veya mouse ile Ok butonuna basılır.
Şekil 6. Search Menüsü
Bulunulan noktadan ileriye doğru arama yapılacak ise Direction bölümünde Forward terimi
işaretlenmeli, geriye doğru arama yapılacak ise Backward terimi işaretlenmelidir.
Şekil 7. Find Diyalog kutusu
Scope bölümünde, sözcüğün tüm dosya içinde aranılması isteniyorsa global, sadece seçilen
metinde aranılması isteniyorsa selected text bölümleri işaretlenmelidir. Origin bölümünde,
aramaya başlanacak sözcük, nokta bütün dosya içinde aranılacak ise entire scope, imleçin
bulunduğu noktadan itibaren aranılacak ise from kursor bölümleri seçilmelidir.
Replace:Yazılan program içinde kullanılan herhangi değişkenlerin veya Pascal sözcüklerinin
başka bir değişken veya Pascal sözcüğü ile değiştirilmesi gerekebilir. Bu komut kullanıldığında
Şekil 8’deki diyalog kutusu ekrana gelir. Text to find’ 'in karşısında ayrılmış alana değiştirilmesi
istenilen sözcük, New Text’ in karşısındaki ayrılmış alana yeni sözcük yazılır. Değiştirilecek
sözcük programın tamamında veya birden çok yerinde değiştirilecek ise Change all tuşunun
üzerine gelinir ve klavyeden “Enter”, mouse ile Ok butonuna basılır. Programda aranılan metin
bulunduğunda değişim için kullanıcıdan onay bekleyen bir diyalog kutusu ekrana gelir. Değişime
onay için “Y”, değişime hayır demek için “N” tuşuna basılır.
Şekil 8. Replace Diyalog kutusu
Search Again: Find menü komutu ile arama yapıldığında, program içinde aranılan metine ilk
karşılaşılan yerde arama kesilir. Aynı metini tekrar aramak için Search Again menü komutu
kullanılır.
Goto Line Number: Program içinde istenilen program satırına hızlı bir şekilde ulaşılmasını sağlar
(Şekil 9). Komutun kullanımıyla ekrana gelen diyalog kutusunda ayrılmış alana satır numarası
yazılarak “Enter” tuşuna basılır
Write-Writeln
Pascal programlama dilinde yazma işlemi için WRITE ve WRITELN komutları kullanılmaktadır.
Bu komutların genel kullanım yapısı şu şekildedir
Write(A1,A2,A3,...,An)
Writeln(A1,A2,A3,...,An)
İki kullanım şekli arasındaki fark, Read ile Readln arasındaki fark gibidir. İfadeler Write ile
yazdırıldıktan sonra kursör aynı satırda bekleyecektir, Writeln ile yazdırılması durumunda ise
kursör bir sonraki satıra geçecektir.
Var
s,a,n:integer;
......
begin
s:=3;a:=9;n:=5;
Write(s);
Write(a);
Write(n);
End.
Programın çalıştırılmasıyla elde edilen sonuç;
395
olacaktır.
Aynı değişkenleri Writeln ile yazdırdığımızda;
Var
s,a,n:integer;
......
begin
s:=3;a:=9;n:=5;
Writeln(s);
Writeln(a);
Writeln(n);
End
3
9
5
elde edilecektir.
Read-Readln
Pascal 'da okuma işlemi için kullanılan komutlar READ ve READLN olup genel kullanım yapısı şu
şekildedir;
Read(A1,A2,A3,...,An)
ReadLn(A1,A2,A3,...,An)
Read ile Readln arasındaki fark: Read, okuma işlemi tamamlandıktan sonra aynı satırda
kalınmasını, Readln ise yeni bir satıra gelinmesini sağlar. Bir Pascal programı içerisinde bu iki
komutun kullanımı aşağıdaki program parçasında verilmiştir.
Var
s,a,n:real;
begin
Read(s,a,n)
end.
Okunacak değerlerin düzeni;
12.45 43.543 62.12
Aynı değerleri ReadLn ile okutturmak istersek;
Var
s,a,n:real;
begin
Readln(s,a,n)
end.
Okunacak değerlerin düzeni yukarıdaki okuma düzeni ile aynı olabileceği gibi her değer ayrı bir
satırda verilebilir, her hangi satırlarda verilebilir, örnek olarak s, a ve n değerleri aşağıdaki okuma
düzeninde okutturulmuştur.
12.45 43.543
62.12
For-Do
For deyimi, bir program parçasının herhangi bir boolean şartına bağlı olmaksızın belirlenen
sayıda üstüste çalıştırılması için kullanılır. For deyiminin genel kullanım şekilleri aşağıda
verilmiştir.
1. FOR Kontrol Değişkeni :=Başlangıç_Değeri TO Son_değer DO
Begin
İşlemler
End;
Bu kullanım şeklinde başlangıç değeri bitiş değerinden küçük olmak zorundadır. TO ifadesiyle
başlangıçtan bitişe kadar artarak tekrar yapılacağını, DO ifadesi de tanımlanan işlemlerin
tekrarlanacağını bildirir
For-Downto
FOR Kontrol Değişkeni :=Başlangıç_Değeri DOWNTO Son_değer DO
Begin
İşlemler
End;
For deyiminin bu kullanım şeklinde başlangıç değeri bitiş değerinden daima büyük olup
DOWNTO ifadesi de döngü değişkeninin tekrarlama işleminde azalacağını belirtir. DO ifadesi ise
belirtilen işlemlerin döngü sayısınca tekrarlanacağını bildirir.
Turbo Pascal dilinde diğer programlama dillerinden farklı olarak başlangıç değerinden son değere
artışlar/azalmalar birer birer olmaktadır. Aşağıdaki örnek programları inceleyiniz.
Program Hesap_plani;
Uses Crt; {Windows için Wincrt}
var i:byte;
Hesapkod:String[ 10] ;
Hesapadi:String[ 20] ;
begin clrscr;
for i:=1 to 5 do
begin
Write('Hesap Kodu ........:');Readln(HesapKod);
Write('Hesap Adı............:');Readln(HesapAdi);
end;
Readln;
end.
Örnek:Aşağıdaki örnek Program; 1'den 8'e kadar artan ve 9'dan 3'e kadar birer birer azalan içiçe
for do döngülerinin kullanımını göstermektedir.
Program icice_for_ornek;
Uses crt; {Windows için Wincrt}
Var
i,j:byte;
Begin
For i:=1 to 8 do
Begin
for j:=9 downto 3 do
Begin
Write(i*j:6);
end;
Writeln;
end;
Readln;
End.
Örnek: 'A' dan 'Z' ye kadar büyük harfleri ekrana yazdıran Pascal programı.
Program Odev;
var ch:=Char;
begin
Writeln('BÜYÜK HARFLER');
for ch:='A' to 'Z' DO
Write(Ch,' ');
end.
Örnek. Klavyeden girilen bir ifadeyi tersten yazdıran program.
program terstenyazma;
uses crt; {Windows için Wincrt}
var
mesaj:string;
i,l:byte;
begin
Write('Bir mesaj yazınız');
Readln(mesaj);
l:=length(mesaj);
Writeln(L);
for i:=L downto 1 do
Write(Copy(mesaj,i,1));
End.
Repeat-Until
Bir program bloğunun belli bir şart sağlanıncaya kadar üst üste çalıştırılmasını sağlayan REPEAT
deyiminin genel formu aşağıdaki şekildedir.
Repeat
.
Program Satırları
.
Until (Boolean Şartı)
Burada repeat, tekrar etme anlamında olup, tekrar etme işi UNTIL deyimindeki boolean ifadesi
sağlanıncaya kadar devam eder. Bu deyim program satırları bölümüne herhangi bir şey
yazılmaksızın kullanılabilir.
Bu döngünün en büyük avantajı belirli bir sayı ile sınırlandırılmamış olmasıdır. Boolean
ifadesindeki şart sağlanıncaya kadar işlemlere devam edilmektedir.
Dikkat edilirse şart cümlesinin aldığı değer ne olursa olsun program bloğu bir kez çalışmaktadır.
Örnek : Aşağıda verilen Pascal programı karton fabrikasındaki kenar kesme ünitesinde, kesme
makinasından çıkan kartonların ortalama ağırlıklarını hesaplamaktadır. Karton ağırlığı olarak 0
girildiğinde programın çalışması sona ermektedir.
Program ornek_repeat;
uses wincrt;
var
i,sayi:integer;
top,ort:real;
begin
clrscr;
i:=0;top:=0;ort:=0;
Repeat
i:=i+1;
Write(i,'. Kartonun Ağırlığını Giriniz =');
Readln(sayi);
Top:=top+sayi
Until (Sayi=0);
ort:=top/(i-1);
Writeln;Writeln;
Writeln(i-1,' Adet Kartona ait Ağırlık Ölçümü Yapılmıştır.');
Writeln(i-1,' Adet Kartonun Toplam Ağırlığı =',top:6:3);
Writeln('Girilen sayıların ortalaması =',ort:6:3);
repeat until KeyPressed;
end.
While-Do
Bir program bloğunun belli bir şart sağlandığı sürece üst üste icrasını sağlayan WHILE deyiminin
genel yazılış şekli aşağıdadır.
While <şart cümlesi> Do BLOK
Do kelimesini takibeden blok WHILE deyimi tarafından döngüye sokulacak komut cümlelerini
kapsar. Komut cümlesi sayısı birden fazla ise, bu bloğun BEGIN...END deyimleri arasına
alınması zorunludur.
WHILE ile REPEAT arasındaki fark; Repeat döngüsü şart cümlesi yanlış olduğu sürece, While
döngüsü ise şart cümlesi doğru olduğu sürece devam etmesidir.
Örnek : Repeat -Until ile yapılan örnek programı WHILE-DO ile yapalım.
program ornek_While;
uses wincrt;
var
i,sayi:integer;
top,ort:real;
begin
clrscr;
Write('1. Kartonun Ağırlığını Giriniz =');
Readln(sayi);
i:=1;top:=0;ort:=0;
While Sayi>0 do
begin
Top:=top+sayi;
i:=i+1;
Write(i,'. Kartonun Ağırlığını Giriniz =');
Readln(sayi);
end;
ort:=top/(i-1);
Writeln;Writeln;
Writeln((i-1),' Adet Kartona ait Ağırlık Ölçümü Yapılmıştır.');
Writeln((i-1),' Adet Kartonun Toplam Ağırlığı =',top:6:3);
Writeln('Girilen sayıların ortalaması =',ort:6:3);
repeat until KeyPressed;
end
IF Deyimi
IF deyimi, bir şartın doğru veya yanlış olmasına bağlı olarak programın belirli parçalarının
çalışmasını veya çalışmamasını sağlar. IF deyimi,
IF şart cümlesi THEN Blok1;
veya
IF şart cümlesi THEN Blok1 ELSE Blok2;
şeklinde kullanılabilir.
Buradaki şart cümlesi, birbirlerine mantıksal operatörler ile bağlanmış bir veya birkaç ilişkisel
operasyon veya bir tek boolean ifade olabilir. Aşağıdaki örnekleri inceleyelim:
IF A=B THEN ...
IF (A=B) AND (A=C) THEN ...
IF (A+1) < (B-1) THEN ...
IF (Cev In ['E' , 'e']) THEN ...
Then sözcüğünü takiben, bloklar birden fazla komut cümlesinden oluşurlar ise, bu blokların
BEGIN ve END deyimleri içine alınması zorunludur. IF deyiminin ikinci şekli yani ELSE' den sonra
gelen komut veya komutlar dizisi geçerlilik kazanmışsa, ELSE' den önce gelen komut cümlesinin
yada, End deyiminin sonuna ';' işareti konulmaz. Aşağıdaki örneklerden 1.si hatalı 2.si doğrudur.
IF A=B Then Writeln ('Eşit'); Else Writeln ('Farklı');
IF A=B Then Writeln ('Eşit') Else Writeln ('Farklı');
IF deyimi içinde kullanılan Blok1 ve Blok2 çeşitli komut cümlelerinden oluşabileceğine göre bu
blokların içinde başka IF cümleleri de yer alabilir. IF deyimlerinin bu şekilde kullanılmasına iç içe
IF deyimleri adı verilir. IF cümlesinde yer alan her iki bloğun geçerlilik kazanması söz konusu
olamaz.
IF degisken_1 <kosul> degisken_2 then
begin
-----
islemler
-----
end;
Bu kullanım şekli IF deyiminin en yalın şekillerinden biridir. Degisken_1 ile Degisken_2 arasındaki
koşulun durumuna göre THEN ifadesinden sonra gelen işlemler yapılır.
Örnek: Aşağıda verilen kodlarına göre daire, üçgen ve dikdörtgenin çevresini hesaplayan Pascal
programını yazınız.
1. Üçgen
2. Dikdörtgen
3. Daire
Program Cevre_Hesabi;
uses crt; {Windows için Wincrt}
var
sekil:byte;
uzun1,uzun2,uzun3:real;
cevre:real;
Begin
Writeln('1. Üçgen');
Writeln('2. Dikdörtgen');
Writeln('3. Daire');
Write('Şeklin Kodunu Giriniz');
Readln(Sekil);
If Sekil=1 then
Begin
Write('Uçgenin 1. Kenar Uzunluğunu giriniz :');readln(Uzun1);
Write('Uçgenin 2. Kenar Uzunluğunu giriniz :');readln(Uzun2);
Write('Uçgenin 3. Kenar Uzunluğunu giriniz :');readln(Uzun3);
Cevre:=uzun1+uzun2+uzun3;
end;
If Sekil=2 then
Begin
Write('Dikdörtgenin Kısa Kenar Uzunluğunu giriniz:') ;
readln(Uzun1);
Write('Dikdörtgenin Uzun Kenar Uzunluğunu giriniz :');
readln(Uzun2);
Cevre:=2*(uzun1+uzun2);
End;
If Sekil=3 then
Begin
Write('Dairenin yarıçapını giriniz :');readln(Uzun1);
Cevre:=2*pi*Uzun1;
End;
Writeln('Seçilen Nesnenin Çevre Uzunluğu =',Cevre:8:2);
End.
Örnek : Aşağıda verilen kodlara göre birim dönüşümlerini veren Pascal programı yazınız.
Fahrenhayt 'tan (F) Santigrad 'a (C) : C=5/9*(F-32)
İnç 'ten (I) Santimetre 'ye (Cm) : Cm=2.54*I
Mil 'den (M) Kilometre 'ye (Km) : Km=1.6*M
Pound 'dan (P) Kilogram 'a (Kg) : Kg=0.45*P
Program metrik_cevrimler;
uses crt; {Windows için Wincrt}
var kod:byte;
F,C,I,Cm,M,Km,P,Kg:real;
Begin
Writeln('Çevrim Kodları');
Writeln('1. Fahrenhayt -> Santigrad');
Writeln('2. İnç -> Santimetre ');
Writeln('3. Mil ->Kilometre ');
Writeln('4. Pound -> Kilogram ');
Write('Çevrim Kodunu Giriniz ='); Readln(Kod);
If Kod=1 then begin
Write('Fahrenhayt Değerini Giriniz ='); Readln(F);
C:=5*(F-32)/9;
Writeln('Santgrad Değeri =',C:7:2,' °');
end;
If Kod=2 then
Begin
Write('İnç Değerini Giriniz ='); Readln(I);
Cm:=2.54*I;
Writeln('Santimetre Değeri =',Cm:7:2);
end;
If Kod=3 then
Begin
Write('Mil Değerini Giriniz ='); Readln(M);
Km:=1.6*M;
Writeln('Kilometre Değeri =',Km:7:2);
end;
If Kod=4 then
Begin
Write('Pound Değerini Giriniz ='); Readln(P);
Kg:=0.45*P;
Writeln('Kilogram Değeri =',Kg:7:2);
End;
End
If Then Else Yapısı
IF degisken_1 <kosul> degisken_2 then
begin
-----
islemler
-----
end
ELSE
begin
-----
islemler
-----
end;
Bu yapı kullanıldığında, Degisken_1 ile Degisken_2 belirtilen koşulu karşıladıkları zaman THEN
ifadesinden sonra gelen işlemler, aksi halde ELSE ifadesinden sonra tanımlanan işlemler
yaptırılır.
IF degisken_1 <kosul> degisken_2 then
begin
islemler1;
end
else
if degisken_3 <kosul> degisken4 then
begin
islemler2;
end
else
if degisken_5 <kosul> degisken6 then
begin
islemler3;
end;
Örnek:Aşağıdaki program klavyeden girilen yılın kaç gün olduğunu vermektedir. Programı
inceleyiniz.
program deneme;
uses crt; {Windows için Wincrt}
var
yil:integer;
begin
clrscr;
Write('Gun Sayisini ogrenmek istediginiz yili giriniz :');
readln(yil);
if (yil mod 4 )=0 then
begin
Writeln('Yil 366 gun');
End
Else
Begin
Writeln ('Yil 365 gun');
end;
readln;
end.
Case ... Of
Bir değerin birden fazla değer ile karşılaştırmasını yapan ve bir eşitliğin bulunması halinde belli
program parçalarının çalıştırılmasını sağlayan CASE deyiminin genel formu aşağıda verilmiştir.
CASE Kontrol Değişkeni OF
Etiket1 : Blok1 ;
Etiket2 : Blok2 ;.
Etiketn : Blokn ;
ELSE BLOK;
END;
Kontrol değişkeni real haricindeki standart tiplerden birine sahip olan bir değişkendir. CASE
deyimi içindeki etiketler LABEL olarak tanımlananlardan farklıdır. Bunlar sabit değerler olup,
kontrol değişkeni ile aynı tipe sahiptir. Etiketi takip eden bloklar ise PASCAL komut cümlelerinden
meydana gelir. Komut cümleleri birden fazla ise BEGIN END deyimleri arasına yazılması
zorunludur. Etiketlerin dışında yazılan ELSE deyimi ve bunu takip eden blok seçimliktir
Örnek : Aşağıda kişinin yaşı girildiğinde, yaşına uygun mesajlar veren bir Pascal programı
verilmiştir
Program Yasdilim;
Uses wincrt; {Dos için CRT}
Var yas:integer;
Begin
Clrscr;
Write('Yaşınızı Giriniz :');
ReadLn(YAS);
CASE yas OF
0..5:Writeln('Yaşınız 0-5 arasında');
5..15:Writeln('Yaşınız 5-15 arasında');
15..35:Writeln('Yaşınız 15-35 arasında');
35..50:Writeln('Yaşınız 35-50 arasında');
50..85:Writeln('Yaşınız 50-85 arasında');
else Writeln('Çok Yaşayın');
end;
Readln;
End.
Örnek : Bir diyet uzmanı insanlara , geliştirmiş olduğu değişik üç tür diyeti uygulamayı
düşünmektedir.
1.tür diyet 60 kilo ve altındaki insanlara uygulanacak kilo aldırıcı program.
2.tür diyet 61 ile 80 kilo arasındaki insanlara uygulanacak kilo aldırmayan program.
3.tür diyet 81 ile 150 kilo arasındaki insanlara uygulanacak kilo zayıflatıcı programdır
Buna göre 10 kişi arasında yapılan bir anketle ,bu üç programa kaçar kişinin düştüğünü ve bu
gruplardaki ortalama kiloları bulan bir PASCAL programını yazınız.
Program rejim_anket;
uses crt; {Windows için Wincrt}
var kilo,grp1,grp2,grp3,i,j,k:integer;
grp1ort,grp2ort,grp3ort:real;
grp1top,grp2top,grp3top:integer;
BEGIN
for i:=1 to 10 do
begin
write('Kişinin Kilosunu giriniz :');Readln(Kilo);
case kilo of
0..60: begin
grp1:=grp1+1;
grp1top:=grp1top+kilo;
end;
61..80: begin
grp2:=grp2+1;
grp2top:=grp2top+kilo;
end;
81..150: begin
grp3:=grp3+1;
grp3top:=grp3top+kilo;
end;
end;
end;
grp1ort:=grp1top/grp1;
grp2ort:=grp2top/grp2;
grp3ort:=grp3top/grp3;
Writeln('1. Gruptaki kişi sayısı =',grp1,' 1. Gruptaki kilo ortalaması =',grp1ort:8:2);
Writeln('2. Gruptaki kişi sayısı =',grp2,' 2. Gruptaki kilo ortalaması =',grp2ort:8:2);
Writeln('3. Gruptaki kişi sayısı =',grp3,' 3. Gruptaki kilo ortalaması =',grp3ort:8:2);
repeat until keypressed;
End.
Yukarıda verilen programda; for i:=1 to 10 do satırı ile yapılan işlemin 10 kez tekrar edileceği
belirtilmektedir. (For .. do yapısı için 9. Bölüme bakınız.)
Örnek : Kare, dikdörgen, üçgen ve daire alan hesabı yapan bir Pascal programı hazırlanacaktır.
Programda alanı hesaplanacak nesneyi belirttikten sonra ilgili alanın hesaplanabilmesi için
CASE...OF yapısı kullanılacaktır.
program Sekillerin_alan_hesabi;
uses Crt; {Windows için Wincrt}
var Ch : char;
uzun,gen,yuk,Taban,ycap: real;
Alan_Kare,Alan_Dortgen,Alan_Ucgen,Alan_Daire:real;
i:byte;
begin (* Ana program *)
Writeln;
Writeln('Lütfen Alan Hesabı Yapacağınız Nesneyi seçiniz :');
Writeln;
Writeln('[K]are');
Writeln('[D]ikdörtgen');
Writeln('[u]çgen');
Writeln('d[A]ire');
Writeln('[C]ıkış');
Write('Alan hesabı yapılacak nesne (K/D/U/A) ?=');
Readln(Ch);
case UpCase(Ch) of
'K' : begin
Write('Karenin kenar uzunluğu =');
Readln(uzun);
Alan_Kare:= uzun*uzun;
Writeln('Alan ',Alan_kare:12:4);
end;
'D' : begin
Write('Dörtgenin Genişliği = ');
Readln(gen);
Write('Dörtgenin Yüksekliği =');
Readln(yuk);
Alan_Dortgen:=gen*yuk;
Writeln(' Dörtgenin Alanı= ',Alan_Dortgen:12:4);
end;
'U' : begin
Write('Üçgenin Taban Uzunluğu =');
Readln(Taban);
Write('Üçgenin Yüksekliği =');
Read(yuk);
Alan_Ucgen:=taban*yuk/2;
Writeln('Üçgenin Alanı = ',Alan_Ucgen:12:3);
end;
'A' : begin
Write('Dairenin Çapı =');
Readln(Ycap);
Alan_Daire:= sqr(ycap)*Pi;
Writeln('Dairenin Çapı =',Alan_Daire:12:3);
end;
'C' : begin Writeln('Bitti');exit; end;
else Writeln(' Tanımsız giriş');
end;
end. (* Ana program sonu *)
Continue
Fortran programlama dilinde olduğu gibi tekrarlama çevrimini yeniden başlatır. Programcı, bilgi
girişlerinde kullanıcının sayısal olmayan bir giriş yapacağını varsayarak önlem almak amacıyla
tekrarlama işlemlerini yeniden başlatmak için CONTINUE komutu kullanılır. Bu deyim PASCAL
7.0 ' da geçerlidir.
Program Continue_Kullanimi;
Uses Crt; {Windows için Wincrt}
Const
n=5;
var
sayac,i:integer;
rakam :Array [ 1..n] of Real;
toplam:Real;
begin
clrscr;toplam:=0; sayac:=1;
While sayac < n do
begin
Write(Bir Sayı Giriniz:');
{$I-}
Readln(Rakam[ sayac] );
{$I+}
If IOResult >0 then
begin
Writeln('Rakam girmelisiniz');
CONTINUE;
end;
sayac:=sayac+1
end;
For I:=1 to sayac do
toplam:=toplam+rakam[ i] ;
Writeln('Toplam Sayı :',Toplam:7:2);
end.
Örnek program çalıştırıldığında kullanıcının hatalı bir giriş yapması halinde Run Time Error hatası
oluşacaktır. Bu hatalı durum IORESULT hata durumu fonksiyonu ile kontrol ettirilerek programın
kırılması önlenir ve CONTINUE komutu tekrarlama çevrimini tekrar başlatır. Ancak hata yoklama
rutinleri {$I-} ile pasif duruma düşürülmüştür. IORESULT fonksiyon değeri kontrolü yapabilmek
için {$I-} derleme komutu verilerek Pascal hata yoklama rutinleri pasif duruma alınmalıdır. Ancak
kontrol işlemi bittikten sonra hata yoklama rutinleri {$I+} ile tekrar aktif duruma getirilmelidir.
Break
Turbo Pascal 7.0 programlama dilinde bir döngüyü kırarak sona erdirmek amacıyla kullanılır.
Program içinde BREAK deyimiyle karşılaşıldığında içinde bulunduğu döngüden sonraki program
satırının işler hale getirir. BREAK komutu FOR-DO, REPEAT-UNTIL ve WHILE-DO döngülerinin
içinde kullanılabilir.
Konunun daha iyi anlaşılabilmesi için aşağıdaki örneği inceleyiniz. Örnek Programda i ve j gibi iki
sayının çarpımı yapılmaktadır. i=j olduğu durumda içteki döngü BREAK deyimi ile kırılmakta ve i
'nin değeri bir üst değere arttırılarak programın çalışmasına devam edilmektedir.
Program break_kullanimi;
uses crt; {Windows için Wincrt}
var i,j:integer;
begin
clrscr;
for i:=1 to 10 do
begin
Writeln(i,'. değeri ');
for j:=1 to 10 do
begin
if i=j then break; (* i=j olduğu takdirde içteki döngünün çalışması sona eriyor*)
Writeln(i:3,' * ',j:3,'= ',i*j:3);
end;
Writeln('Devam Etmek için ENTER tuşuna Basınız');Readln;
end;
end.
GOTO Deyimi
Programın çalışma yönünün değiştirilmesi için kullanılan GOTO deyiminin genel kullanımı şu
şekildedir;
GOTO Etiket;
GOTO deyimi ile kullanılan etiket, çalışma akışının yönlendirileceği noktayı gösterir. Bu etiketin
programın tanım bloklarının olduğu yerde LABEL adı verilen bölümde tanımlanması gereklidir.
GOTO deyiminin kullanıldığı program bloğu içinde bulunması zorunludur. Etiket, bir komut
cümlesinin yani bir program noktasının etiketlenmesi için yazıldığında kendisinden sonra \" : \"
karakterinin yazılması zorunludur.
GOTO deyimleri ile ana program ve alt programlar arasında veya bir alt program ile başka bir alt
program arasında dallanma yapılamaz. Ayrıca, IF, CASE, FOR, REPEAT, ve WHILE deyimlerinin
blokları içine dallanılamaz. Ancak bu deyimler ile kullanılan bloklar içinden, dışarıya dallanma
yapılabilir.
Turbo PASCAL' daki kontrol ve döngü deyimlerinin etkinliği ve PASCAL programlarının yapısallığı
GOTO deyimine ihtiyacı ortadan kaldırır. Basic ve Fortran' da yazılan programlarda bol miktarda
görülen GOTO deyimlerine Pascal programlarında pek rastlanmamaktadır.
Örnek:Aşağıdaki program, 1' den n sayısına kadar olan sayıların toplamını hesaplamaktadır.
Program içinde üç kez GOTO deyimi kullanılmıştır. GOTO devam şeklindeki komut cümlesi
şartsız, diğerleri ise şartlıdır.
Uses crt; {Windows için Wincrt}
Var
I,N : INTEGER;
Top : REAL;
Cev : Char;
Label
Basla, Devam, Son;
Begin
Başla:
Clrscr;
I:=0;
Top:=0;
Write('Bir sayı giriniz=');
Readln (N);
Devam:
I:=I+1;
Top:=Top+1;
IF I=N then goto son;
GOTO DEVAM;
Son:
Writeln('1 den', N,'e kadar sayıların toplamı=', Top:5);
Writeln;
Write ('Devam Edecek misiniz :');
Readln (Cev);
IF Cev In ['E' , 'e'] then GOTO Basla;
End.
Halt
Programın kararlaştırılan bir yerinde durdurulmasını sağlar. ENTER tuşuna basıldıktan sonra
varsa HALT komutundan sonra tanımlanan program satırları çalıştırılır.
program halt_ornek;
begin
if 1 = 1 then
begin
WritelN('Halt Deneme 1');
if 2 = 2 then
begin
WritelN('Halt Deneme 2');
if 3 = 3 then
begin
WritelN('Halt Deneme 3');
Halt(1);
end;
end;
end;
Writeln(' Bu Çalıştırılamayacaktır');
readln;
end
Exit
Program işlem bloklarında tanımlanan herhangi bir koşulun gerçekleşmesi halinde program
bloğunun akışını durdurur.
uses Crt; {Windows için Wincrt}
begin
repeat
if KeyPressed then Exit;
Write('Xx');
until False;
end.
Forward İfadesinin Kullanımı
Program içinde tanımlanan Prosedür blokları içinde bazılarının programın daha sonraki
satırlarında tanımlanacağını belirten ifadedir. FORWARD deyimi, sonra tanımlanacak prosedür
bloğu devamında kodlanmalıdır.
Aşağıdaki örnek programda ASAMA2 prosedür bloğu devamında görülen FORWARD ifadesi blok
bilgilerinin daha sonra tanımlanacağını belirtir. Program I>10 olduğu durumda sona erecektir
program procedure_ornekleri;
uses crt; {Windows için Wincrt}
var i:integer;
Procedure Asama2;forward;
Procedure Asama1;
Begin
i:=i+1;
Write(I,'.');
Asama2;
End;
Procedure Asama2;
Begin
Write(I*i,'.');
if i>10 then halt;
readln;
Asama1;
End;
begin
clrscr;
i:=1;
asama1;
end.
Yukarıda verilen iki örnek programda procedure ismini takiben herhangi bir değişken adı
yazılmadığına dikkat ediniz.
Kullanıcı Tanımlı Function Alt Programları
Pascal’da altprogramlar başlığı altındaki yapısal modüllerden bir diğeri de fonksiyonlardır
(function). Function ve Procedure arasındaki farkı anlayabilmek için procedure ve function olarak
ayrı ayrı yazılmış bir uygulama üzerinde duralım.
PROCEDURE Toplam(X,Y:integer; var Z:integer);
begin
Z:=X+Y;
end;
FUNCTION Toplam (X,Y:integer):Integer;
begin
TOPLAM:=X+Y;
end;
Örnekte toplam isimli alt yordam (Procedure) X ve Y tamsayılarının toplamını referans
parametresi türündeki Z değişkeni aracılığı ile getirir. Procedure durumunda geri döndürülecek
değer, VAR ile tanımlanmış bir değişkene atanmaktadır. Fonksiyon olarak tanımlanan TOPLAM
modülü ise toplamı kendisi getirmektedir. Fonksiyon sona erdirilmeden önce geri döndürülecek,
fonksiyonun ismine atanmaktadır. Toplam isimli fonksiyon, integer tiptedir.
Procedure olarak yazılan TOPLAM alt programı ;
Toplam (A;B;T); (Procedure)
şeklinde çağırılırken function şeklinde geliştirilmiş Toplam alt programı ;
T:=Toplam(A;B); (Function)
komutuyla çağırılır.
Alt programlar
Yapısal programlamanın en önemli yaklaşımlarından biri, temel uygulamayı bir takım parçalara
bölerek gerçekleştirmektir. Pascal'da bu parçalar altyordam (procedure) veya fonksiyon (function)
olarak kodlanır. Yapısal programlamanın temel tercih nedeni, program modüllerinin bağımsız
olarak geliştirilmeleri ve çalışıp çalışmadığının kolaylıkla anlaşılabilmesidir.
Alt programlar genellikle tekrar edilen işlemleri kolaylıkla yapabilmek için yazılırlar. Tekrar edilen
işleme örnek olarak, programımız içinde birden fazla yerde faktöriyel hesabı yapmamız gerekiyor
ise bunu bir alt program ile hesaplatmamız halinde aynı işleme sahip program satırlarının tekrarı
önlenecek, programın takibi kolaylaşacak ve daha verimli hafıza kullanımı söz konusu olacaktır.
Bilgisayar dillerinin tamamında bulunan alt program yapısı PASCAL Programlama dilinde
PROCEDURE ve FUNCTION türü alt programlar olmak üzere iki ayrı türdedir. Bu iki ayrı tür alt
programlar birbirlerine benzer özellikler taşımalarına rağmen yapısallık ve icra açısından bazı
farklılıklar içerirler.
Alt programlarda yapılacak işlemler, ana program içinde nerede gerekiyor ise o noktada ilgili
işlemleri yapan alt programın adı yazılarak devreye sokulur.
1.1 Alt Programlar Hakkında Genel Bilgiler
*Her alt programın bir başlığı, bir tanım bloğu, bir de icra bloğu vardır.
*Ana programlar PROGRAM deyimi, prosedür alt programlar PROCEDURE, fonksiyon alt
programlar FUNCTION deyimi ile başlar.
*Alt program adının hemen yanında verilen parametreler değer transferi işlemleri için kullanılırlar.
Bir alt programa değer transferi yapılarak, her bir çalışmada verilen değişik değerlere bağlı olarak
değişik sonuçlar üretmek mümkündür.
*Alt program isminin yanına parametre yazmak seçime bağlıdır. Eğer parametre yazılıyor ise
bunlar procedure isminin yanına parantez içinde yazılırlar.
*Pascal programlama dilinde formal ve aktüel parametreler olmak üzere iki tür parametre
tanımlanabilir. Formal parametreler, programın tamamına ait olmayıp sadece değer transferi için
kullanıldıklarından geçici paramatreler olarak isimlendirilebilirler. Yani bu parametreler ile sadece
alt program içinde çalışılabilir. Ana programda, alt programın çalıştırılması için yazılması gereken
alt programın yanında yazılan parametreler ise Aktüel parametre adını alırlar. Burada aktüel ve
formal parametrelerin sıralanış, sayı ve tip bakımından aynı olması gerekir.
Procedure Alt Programlar
Bir pascal programında Procedure alt programlara erişim ve procedure alt programın program
içindeki yeri aşağıdaki genel gösterim şeklinde verilmiştir.
Program ad_;
procedure Altprogram1;
begin
işlem blokları;
end;
procedure Altprogram2;
begin
işlem blokları;
end;
(* ANA PROGRAM*)
BEGIN
işlemler;
Altprogram1;
Altprogram2;
........
işlemler;
........
Altprogram1 ;
........
END.
Alt programlarda, ana programlarda olduğu gibi sabit, değişken ve çeşitli tip tanımlamaları
yapılabilir. Yapılan bu tanımlamalar, alt program aktif olduğu sürece geçerli olup alt programın
çalışması sona erdiğinde alt programda tanımlanan değişken, sabit ve tipler bellekten silinir.
Procedure işlem blokları iki şekilde kullanılır,
1. Parametresiz Prosedürler
2. Parametreli Prosedürler
Parametreli Prosedürler
Ana program ve alt programlarda tanımlanan değişkenlerin farklı olması durumunda tercih
edilirler. Ana programda tanımlanan değişken değerlerinin işleme alınmaları, alt programda
tanımlanan değişkenlere aktarılarak yapılır.
Parametreli prosedürlerde de tek yönlü ve çift yönlü olmak üzere iki ayrı tür değer transferi söz
konusudur. Eğer procedure ismini takiben parametrelerin tanım cümlesi VAR ile başlıyorsa
parametreler arasında çift yönlü değer transferi yapılacak demektir. Yani ana programda
kullanılan değişkenler alt programa aktarılacak ve alt programın çalışması sona erdiğinde sonuç
değerler ana programa transfer edilir.
Tek yönlü değer transferinde ise parametrelerin tanım cümlesi VAR ile başlamaz, değer transferi
ana programdan alt programa olur ve alt programın icrası sonunda ortaya çıkan sonuçlar ana
programa transfer edilmez. Her iki tür için yazım örnekleri aşağıda verilmiştir.
Tek yönlü Transfer :Procedure Altyordam(X;Y;Z:integer;KAD:real);
Çift yönlü Transfer :Procedure Altyordam(VAR X;Y;Z:integer;VAR KAD:real);
Veri transferinde String değişken veya bir dizi değişken formal parametre olarak tanımlanamaz.
String ve dizi değişkenler formal parametre olarak kullanılacaksa, tip bildirisinin özel bir tip ismi
olarak verilmesi gerekir. Aşağıda verilen örnekler sözü edilen kurala göre hatalı yazılmışlardır.
Procedure Altyordam(A:Array1..100 of real);
Procedure Altyordam2(S:String200);
Uygun tanımlamalar yapmak için Type bölümünden yararlanılmalıdır. Aşağıda verilen örnek
tanımlar özel tip isimler kullanıldığı için geçerlidir.
Type
Oz=Array1..100 of real;
sozcuk=String200;
Procedure Altyordam(A:Oz);
Procedure Altyordam2(S:Sozcuk);
Ana programdan alt programa transfer sırasında tanım bloklarında kullanılan parametrelerin
tipleri aynı olmak zorundadır. Aksi takdirde 'Tip Uyuşmazlığı' hatası meydana gelecektir.
Aşağıdaki örnek programları inceleyiniz.
program paramli1;
uses crt; {Windows için Wincrt}
var
a,b,t:integer;
procedure toplam(x,y:integer);
begin
t:=x+y;
end;
begin
clrscr;
readln(a);
readln(b);
Toplam (a,b);
Writeln(t);
end.
program paramli2;
uses crt; {Windows için Wincrt}
var
a,b,t:integer;
procedure toplam(x,y:integer;var z:integer);
begin
z:=x+y;
end;
begin
clrscr;
readln(a);
readln(b);
Toplam (a,b,t);
Writeln(t);
end.
Yukarıdaki programda X ve Y değerlerinin toplamları Writeln(t); program satırında ekrana
yazdırılmaktadır. Aynı programda toplamı yazdırmak istenilen parametre değiştirildiğinde program
hata verecektir. Aşağıdaki program derlendiği zaman çalışmayacak ve 3 nolu hata meydana
gelecektedir. Programı yazarak hatanın nedenini anlamaya çalışınız.
program hatali_paramli;
uses crt; {Windows için Wincrt}
var
a,b,t:integer;
procedure toplam(x,y:integer;var z:integer);
begin
z:=x+y;
end;
begin
clrscr;
readln(a);
readln(b);
Toplam (a,b,t);
Writeln(z);
end.
Örnek 4: Aşağıdaki örnek programda dizgi isimli tek boyutlu bir dizi oluşturulmuş ve bu dizinin
elemanları sıra ile 1-100 arasındadır. Bu dizi değer aldıkça altprograma değer transfer etmekte ve
alt programda bu dizinin değerleri random komutu ile rastgele sayılardan oluşan yeni bir diziye
aktarılmakta ve ana programa geri dönmektedir.
Program degerparametresi;
uses crt; {Windows için Wincrt}
type DiziTipi=Array[1..100] of integer;
var
DizgiiziTipi;
Yenidizi1,YenidiziiziTipi;
K:word;
PROCEDURE Ornekleme(PardiziiziTipi;var YeniDiziiziTipi);
begin
Yenidizi[k]:=Random(Pardizi[k])
end;
begin
for k:=1 to 100 do
begin
Dizgi[k]:=K;
Ornekleme(Dizgi,YeniDizi1);
Writeln(Dizgi[k],' ',YeniDizi1[k]);
end;
While not keypressed do
end.
Parametresiz Prosedürler
Bu tür alt programlarda; alt program içinde kullanılan değişkenler ana program içinde kullanılan
değişkenler ile aynıdır. Bu nedenle ana program ile alt program arasında veri transferi
yapılmasına gerek yoktur. Aşağıdaki örnek programlar Parametresiz Prosedür kullanımını
açıklamaktadır.
program faktoriyel_hesabi;
uses crt; {Windows için Wincrt}
var fakt:longint;
n,i:integer;
procedure islem1;
begin
fakt:=1;
for i:=1 to n do
begin
fakt:=fakt*i;
end;
end;
begin
clrscr;
Write('N sayısını giriniz =');
Readln(N);
islem1;
Writeln('N sayısının Faktöriyeli =',fakt:10);
repeat until keypressed;
end.
Yukarıda verilen programı çalıştırarak sonucu inceleyiniz.
Ekran komutları
Ekran komutları ekrandaki görüntü tasarımı için kullanılan komutlardır. Bu komutların program
içinde kullanılabilmesi için, program başlığı satırından sonra USES komutunda CRT (Windows
programları için WINCRT) unit isminin yazılması gereklidir. Aksi halde, ekran komutlarıyla ilgili
yazılan komutlar Pascal derleyicisi tarafından tanınmayacaktır. En çok kullanılan ekran komutları
aşağıda verilmiştir.
Clrscr
\"Clrscr\" CRT/WINCRT üniti içinde yer alan bir alt programdır. Ekranda daha önce yazılı olan
ifadeleri silerek ekranın temizlenmesi amacıyla kullanılır.
GotoXY
Kursörü ekranın istenilen sütun ve satırına taşımak için kullanılır. Kullanımı;
GotoXy(Sütun,Satır);
şeklindedir. Normal bir ekran üzerinde 80 sütun ve 25 satır vardır.
Uses wincrt;
var
j:word;
begin
clrscr;
for j:=1 to 20 do
begin
gotoxy(j,j);Write('Balıkesir Üniversitesi');
gotoxy(50-j,j);Write('Balıkesir Üniversitesi');
end;
end.
Readkey
Klavyeden basılan karaktesi okumak için kullanılır. Bu fonksiyonun sonucu char tipi bilgidir.
Turbo/Borland Pascal 7.0 'da tek başına kullanıldığında program bu komuta rastladığında,
herhangi bir tuşa basılıncaya kadar programın çalışması kesilir.
Uses wincrt;
var
tus:char;
begin clrscr;
Write('Balıkesir ');Readkey;
Writeln('Üniveristesi');Readkey;
end.
Readkey komutunun çok kullanıldığı uygulamalardan biri de basılan veya basılacak karakteri
kontrol etmektir.
Aşağıda verilen örnek programda her B tuşuna basıldığında \"Balıkesir Üniversitesi\" yazmaktadır.
Program ESC tuşuna basılarak durdurulmaktadır.
Uses wincrt;
var
tus:char;
j:word;
begin
repeat
tus:=readkey;
if upcase(tus)='B' then
Write('Balıkesir Üniversitesi');
until tus=#27;
end.
Keypressed
Klavyeden bir tuşa basılıp basılmadığını kontrol etmek amacıyla kullanılan bir komuttur. Aşağıda
verilen örnek programı inceleyiniz.
Uses wincrt;
var
tus:char;
j:word;
begin
j:=0;
repeat
Write('Balıkesir Üniversitesi');
j:=j+1;
if keypressed then tus:=readkey;
if j=75 then
begin
clrscr;
j:=0;
end;
until tus=#27;
end.
Window
Ekranda pencere oluşturmak için kullanılan bir komuttur. Bu komut sadece Turbo/Borland
Pascalda kullanılabilir. Kullanımı;
Window(X1,Y1, X 2,Y2);
X1 :Pencerenin sol sütun numarası (1-80)
Y1 :Pencerenin sol satır numarası (1-25)
X2 :Pencerenin sağ sütun numarası (1-80)
Y2 :Pencerenin sağ satır numarası (1-25)
Delay
Programın belirtilen süre kadar bekletilmesini sağlar. Delay (1000) komutu, programın 1 sn
bekletilmesini sağlamaktadır. Bu komut sadece Turbo/Borland Pascalda kullanılabilir.
uses crt;
begin
window(20,5,60,20);
REPEAT
DELAY(5); Write('BAÜ');
UNTIL keypressed;
end.
ClrEol
Kursörün bulunduğu konumdan satırın sonuna kadar bütün karakterleri silmek için kullanılır.
Kursör bulunduğu konumda kalır.
uses winCrt;
begin
ClrScr;
Writeln('Günaydın Bugün nasılsınız?');
Writeln('Enter tuşuna Basınız...');
Readln;
GotoXY(1,2); {Kursör 2.satır 1.sütuna konumlandırılıyor}
ClrEol;
Writeln ('İyi olmanızı duymak güzel.');
end.
Highvideo
Ekrana yazılacak yazının parlak yazılmasını sağlar. Bu komut sadece Turbo/Borland Pascalda
kullanılabilir.
Lowvideo
Ekrana yazılacak yazının mat yazılmasını sağlar. Bu komut sadece Dos için Turbo/Borland
Pascalda kullanılabilir.
Normvideo
Ekrana yazılacak yazının normal parlaklıkta yazılmasını sağlar. Bu komut sadece Turbo/Borland
Pascalda kullanılabilir.
Uses Crt;
Begin
Clrscr;
Highvideo;Writeln('Parlak');
Lowvideo;Writeln('Mat');
Normvideo;Writeln('Normal');
End.
WhereX
Kursörün üzerinde bulunduğu sütunun numarasını verir.
WhereY
Kursörün üzerinde bulunduğu satırın numarasını verir.
uses winCrt;
begin
Write('Şu anda kursör pozisyonu :',WhereX,',',WhereY);
end.
TextColor
Ekrana yazdırılacak yazının rengini ayarlamak için kullanılır. Bu komut sadece Turbo/Borland
Pascalda kullanılabilir. Kullanımı;
Textcolor(Renkkodu/Adı);
Renklerin kodları aşağıda verilmiştir.
Renk Kod Adı
Siyah 0 Black
Mavi 1 Blue
Yeşil 2 Green
Turquaz 3 Cyan
Kırmızı 4 Red
Pembe 5 Magenta
Kahve 6 Brown
Açık gri 7 Lightgray
Koyu gri 8 Darkgray
Açık mavi 9 Lightblue
Açık yeşil 10 Lightgreen
Açık turquaz 11 Lightcyan
Açık kırmızı 12 Lightred
Açık pembe 13 Lightmagenta
Sarı 14 Yellow
Beyaz 15 White
Yanıp/sönme 128 Blink
Textcolor(0)=Textcolor(black)
Textbackground
Ekrana yazdırılacak yazının zemin rengini ayarlamak için kullanılır. Bu komut sadece
Turbo/Borland Pascalda kullanılabilir. Kullanımı;
uses Crt;
begin
{ Siyah üzerinde yeşil karakterler}
TextColor(Green);
TextBackground(Black);
WriteLn('Merhaba');
{ Gri üzerinde yanıp sönen kırmızı karakterler}
TextColor(LightRed+Blink);
TextBackground(LightGray);
WriteLn('Günaydın!');
{ Mavi üzerinde sarı karakterler}
TextColor(14); { Yellow = 14 }
TextBackground(Blue);
WriteLn('nasılsın');
NormVideo; { Orijinal özellik }
End.
Sound/Nosound
Sound, verilen frekanste ses üretmek için kullanılır. Nosound, sound ile üretilen sesi ortadan
kaldırmak için kullanılır. Bu komutlar sadece Turbo/Borland Pascalda kullanılabilir.
uses Crt;
begin
Sound(220);
Delay(200);
NoSound;
end
Diğer komutlar
Chr
Standart CHR fonksiyonu [ 0..255] arasındaki tam sayıların ASCII karşılığı olan karakteri
vermektedir.
CHR fonksiyonuna, doğrudan aktarılan tam sayı sayısal ifadeleri alfabetik karaktere çeviren bu
fonksiyonun yaygın kullanımlarından biri de, bilgilerin yazıcıya dökümü sırasında klavye
üzerindeki komutların ya da kontrol karakterlerinin üretilmesidir. Aşağıdaki örnek programda bir
yazıcıda kağıda üst üste basmak için ENTER tuşuna karşılık gelen ASCII 13 karakterini
kullanmak amacıyla CHR fonksiyonundan yararlanılabilir.
Örnek:
Program Chr_Ornek;
Uses LST;
begin
Writeln('Endüstri',Chr(13),'Mühendisliği');
Readln;
end.
Concat
Bilgilerin birbirlerine eklenmelerini sağlayan, alfa sayısal fonksiyondur. Ekleme işlemleri CONCAT
fonksiyonu ile veya alfa sayısal bilgiler arasına + işareti konarak sağlanır. Concat fonksiyonu ile
istenilen sayıda katar birbiri ardına eklenebilir. CONCAT fonksiyonunun kullanımı aşağıdaki örnek
programda verilmiştir.
Örnek:
Program Ornek_Concat;
Uses Crt;{windows için Wincrt}
var
x1,x2,x3,x4:String[ 20] ;
x5,x6:=String[ 50] ;
begin clrscr;
x1:='Balıkesir '; x2:='Mühendisliği';
x3:='Universitesi ';x4:='Endüstri ';
x5:=Concat(x1,x3,x4,x2);
Writeln('4 sözcüğün CONCAT ile birleştirilmesi');
Writeln(x5);
x5:=x1+x3+x4+x2;
Writeln('4 sözcüğün + ile birleştirilmesi');
Writeln(X5);
While Not keypressed do;
end.
Upcase
Pascal 'da okunan veya karşılaştırılması yapılan iki karakter dizisinde yazılan harflerin büyük
veya küçük oluşu önemlidir. Upcase fonksiyonu küçük harfleri büyük harfe çevirir. Parametre
olarak verilen karakterlerin alfabetik olmaması durumunda herhangi bir işlem yapılmaz.
Örnek :
var
s : string;
i : Integer;
begin
Write('Bir Karakter Dizisi Giriniz: ');
ReadLn(s);
for i := 1 to Length(s) do
s[i] := UpCase(s[i]);
WriteLn('KARAKTER DİZİSİ BUYUK HARFE DÖNÜŞTÜ ',s);
Readln;
end.
Copy
Bir karakter dizisinde belirlenen bir bölgeden istenilen uzunlukta bir parçanın kopyalanması için
kullanılan fonksiyondur.
Örnek:
uses crt; {windows için Wincrt}
var s: string;
begin
Clrscr;
s:= 'Balikesir Üniversitesi'
WriteLn(Copy(s,11, 4));
repeat until keypressed;
end.
Programın çıktısı; Univ şeklinde olacaktır.
Delete
Delete fonksiyonu, bir karakter dizisi içindeki belirli bir alt karakter dizisinin silinmesi için kullanılan
standart fonksiyondur. Copy komutunda olduğu gibi silinecek ilk karakterin karakter dizisinin
kaçıncı elemanı olduğu ve kaç eleman silineceği ifade edilmelidir.
Örnek:
Var s: string;
begin
S:='Endüstri Mühendisliği Bölümü';
Delete(s,10,21);
WriteLn(s);
end.
Programın Çıktısı: Endüstri şeklinde olacaktır.
Length
Length fonksiyonu bir karakter dizisinin uzunluğunu hesaplamak amacıyla kullanılır. Hesaplama
sırasında karakter dizisi arasında boşluklar var ise bunları da bir karakter olarak kabul edecektir.
Örnek:
Program length_ornek;
uses crt; {windows için Wincrt}
var i:string[39];
begin clrscr;
i:='Endüstri Mühendisliği Bölümü';
WriteLn('Uzunluk = ', Length(i));
end.
Programın Çıktısı: Uzunluk = 28 şeklinde olacaktır.
Str ve Val
Sayısal giriş ve çıkış işlemleriyle ilgili olarak Pascal komutları arasında kullanılan Str ve Val
deyimleri birbirlerinin tam tersi işlemleri yaparlar. Str, girilen sayısal karakterlerin karakter dizisine
çevirirken Val, bunun tersine olarak karakter dizisi olarak girilen rakamsal bilgileri sayısal
karakterlere dönüştürür. Grafik ekranda sayısal ifadelerin direkt olarak yazdırılması mümkün
olmaması nedeniyle sayısal ifadenin str ile string ifadeye dönüştürülerek yazılması gerekir. Yine
grafik ekrandan sayısal bilgi girişi yapılamamakta, ancak string olarak bilgi girişi yapılabilmektedir.
String olarak girişi yapılan sayısal ifade val fonksiyonu ile sayısal ifadeye dönüştürülmesi gerekir.
Aşağıdaki örnekte klavyeden iki veri girilmektedir. İlk Val fonksiyonuyla k1 kontrol değişkeni O
iken, S1 değişkenindeki rakam karakterleri sayısal karakterlere çevrilerek R1 ondalıklı sayısal
değişkenine verilir. Aynı işlem ikinci Val fonksiyonuyla da yapılır. Elde edilen R1 ve R2 rakamları
çarpılarak R3 değişkenine atanır ve uygun yazım formatıyla ekrana yazılmaktadır.
Örnek:
var s1,s2:string;
k1,k2:integer;
r1,r2,r3:real;
begin
readln(s1);readln(s2);
Val(s1,r1,k1); Val(s2,r2,k2);
r3:=r1*r2;
Writeln(r3:10:2);
end.
Pos
Pos fonksiyonu bir karakter dizisinin veya karakterin diğer bir karakter dizisi içinde olup
olmadığını, varsa kaçıncı karakterden başladığını (Başladığı karakterin ana karakter dizisindeki
sıra numarasını) verir. Aşağıdaki 1. örnek programda s isimli karakter dizisinde boşluk olup
olmadığı aranmakta ve boşluk var ise bu karakter dizisinin önüne boşluk sayısınca 0
yerleştirilmektedir. 2. örnek programda i ismi verilen karakter dizisi içindeki j karakter dizisinin
konumu araştırılmaktadır. 3. Örnekte ise k isimli bir karakter dizi içinde $ işareti olup olmadığı
araştırılmaktadır.
Örnek 1:
Program Ornek_pos1;
var s: string;
begin
s := ' 123.5';
{ Boşlukları sıfıra çevir }
while Pos(' ', s) > 0 do
s[Pos(' ', s)] := '0';
Writeln(S);
Readln;
end.
Örnek 2:
Program Ornek_Pos2;
var i:string[28];j:String[12];
begin clrscr;
i:='Balıkesir Üniversitesi';
j:=' Üniversitesi';
Writeln(i);Writeln(j);
Writeln('i içinde J nin başlama konumu =',pos(j,i));
Writeln;
Readln;
end.
Örnek 3:
Program Ornek_pos3;
var k:string;
begin
k:='123sadsdg&jdfjdsh$fdsf'
if pos('$',K)<>0 then
begin
writeln (' K isimli karakter dizisi içinde $ işareti bulundu');
end
else
Writeln('Aranılan karakter bulunamadı');
end;
end.
Bu örnek programda aranılan alt karakter bulunamaz ise bu durumda fonksiyon sıfır değerine
sahip olacak ve program else ile başlayan satıra dallanacaktır.
Sistem Birimi ve Giriş Çıkış Elemanları
Burada kısaca anlatılacak olan giriş/çıkış komutları Turbo Pascal dosyaları anlatılırken detaylı bir
şekilde anlatıldığından burada sadece alfabetik sırada isimlerinin verilmesi ile yetinilecektir.
Giriş/çıkış elemanları çok genel olarak, programların çalıştırılmasıyla oluşacak dosyaların
manyetik ortama yazdırılmalarıyla ilgili komut ve deyimler olarak tanımlanabilir. Bu deyim ve
komutlar alfabetik sıraya göre; Append, Assign, Close, Erase, Read, Readln, Write, Writeln,
Reset, Rewrite, Rename, Flush vb. 'dir.
Sistem Birimi ve Standart Matematik Fonksiyonlar
Turbo Pascal matematik ağırlıklı mühendislik bilimleri içinde son derece uygun bir dildir. Bir çok
temel işlevi yerine getiren matematiksel fonksiyonlar Turbo Pascal'ın sistem birimi içerisinde
tanımlanmıştır.
Turbo Pascal sistem birimi içinde standart olarak bulunan standart matematiksel fonksiyonlar ve
kullanımları ile ilgili örnekler aşağıda alfabetik sırada verilmiştir.
Abs
Herhangi bir sayısal sabit veya değişkenin mutlak (işaretsiz) değerini verir.
Örnek:
Program ABS_fonksiyonu;
var
r: Real;
i: Integer;
begin
r := Abs(-4.3); i := Abs(-157);
Writeln(r:4:1,i:8);
end.
ArcTan
Aşağıdaki örnekte R isimli real parametre ile verilen argümanın radyan cinsinden arktanjantını
verir. Radyanı dereceye çevirmek için 180/pi ile çarpmak gereklidir.
Örnek:
Program ArcTan;
var
R: Real;
begin
r:=1;
R := ArcTan(r)*180/pi;
writeln(r:5:1);
end.
Cos
Derece olarak verilen bir açı değerinin radyana çevrilmesiyle trigonometrik kosinüsünü hesaplar.
Açı değerini radyana çevirmek için pi/180 ile çarpmak gerekir.
Örnek:
Program cosinus_Fonksiyonu;
var
r,Aci: Real;
begin
aci:=90;
R := Cos(aci*pi/180);
writeln(r:5:1);
end.
Exp
Exp fonksiyonu doğal logaritma parametresi olan e'nin üstel değerini hesaplar. Aşağıdaki örnek
program parçasında e'nin 1. üstel değeri (e1 ) hesaplanılmaktadır.
Örnek:
Program Exp_Fonksiyonu;
begin
Writeln('e = ',Exp(1.0));
end.
Frac
Gerçel bir sayının desimal noktadan sonraki kesirli kısmını verir.
Örnek:
Program frac_fonksiyonu;
var
f1,f2: Real;
begin
f1 := Frac(4233.1987);
f2 := Frac(-4233.1987);
Writeln(f1:6:4,' ',f2:6:4);
end.
Int
Gerçel sayıların tamsayı bölümünü integer tipinde verir.
Örnek:
Program Int_Fonksiyonu;
var f1,f2: Real;
begin
f1 :=Int(4233.1987);
f2 :=Int(-4233.1987);
Writeln(f1:6:0,f2:6:0)
end.
Ln
Girilen bir sayının e tabanına göre logaritmasını alır.
Örnek:
Program Ln_Fonksiyonu;
var
e,mn: real;
begin
mn:=2;
e := Exp(mn);
Writeln('ln(e) = ',ln(e));
end.
Odd
Tamsayı parametrelerin tek sayı olup olmadığının tesbitinde kullanılır.
Örnek :
Program odd_fonksiyonu;
uses crt;
var i:byte;
begin clrscr;
for i:=1 to 20 do
begin
if Odd(i) then
Writeln(i,' Tek Sayıdır ')
else
Writeln(i, ' Çift Sayıdır');
end;
delay(2000);
end.
Ord
Char, byte, integer, boolean vb. şeklinde bildirilmiş parametrelerin tamsayı değerlerini verir.
Örneğin Char ile kullanılması durumunda karakterin ASCII kodu elde edilir.
Örnek :
Program ord_Fonksiyonu;
var ch:char;
begin
for ch:='A' to 'Z' do
Writeln(Ch,' icin ASCII Kod ',Ord(ch));
Readln;
for ch:='a' to 'z' do
Writeln(Ch,' icin ASCII Kod ',Ord(ch));
end.
Pi
Pi olarak bilinen matematiksel sabitin değerini verir. Pascal programında diğer programlama
dillerinde olduğu gibi pi sayısının ayrıca tanıtılmasına gerek yoktur.
Örnek :
Program Pi_fonksiyonu;
var d:real;
begin
Write('Dairenin çapını giriniz :');
Readln(D);
Writeln('Dairenin çevresi = ',Pi*D:10:5;
end.
Random
Rastgele bir sayı üretir. Üretilen rastgele sayı random ile belirtilen sayıdan küçük olmaktadır.
Örnek:
Program Random_Fonksiyonu;
uses Crt; {Windows için Wincrt}
begin
Randomize;
repeat
Writeln (Random(99));
until KeyPressed;
end.
Round
Gerçel sayıların kurala uygun bir şekilde yuvarlatır ve yuvarlatılmış tamsayı olarak verir. Elde
edilen yuvarlatılmış sayı yine real tipte saklanır.
Örnek:
Program Round_fonksiyonu;
begin
Writeln(1.499, ' ',Round(1.499),' a yuvarlatıldı');
Writeln(1.5, ' ',Round(1.5),' a yuvarlatıldı');
Writeln(1.499, ' ',Round(-1.499),' a yuvarlatıldı');
Writeln(-1.5, ' ',Round(-1.5),' a yuvarlatıldı');
end.
Sin
Derece olarak verilen bir açı değerinin radyana çevrilmesiyle trigonometrik sinüsünü hesaplar. Açı
değerini radyana çevirmek için pi/180 ile çarpmak gerekir.
Örnek :
Program sinus_Fonksiyonu;
var
r,Aci: Real;
begin
aci:=90;
R := Sin(aci*pi/180);
writeln(r:5:1);
end.
Sqr
Verilen bir parametrenin karesini verir. Genel kullanım şekli;
Kare:=sqr(sayi);
Sqrt
Verilen bir parametrenin karekökünü verir. Genel kullanım şekli;
Karekok:=sqrt(sayi);
Örnek:
Program Sqr_ve_sqrt;
var say:real;
begin
Write('Karesi alınacak sayıyı giriniz =');
Readln(say);
Writeln(say:10:2,' in Karesi ', Sqr(say):10:2);
Writeln(Sqr(say):10:2,' nın karekökü',Sqrt(sqr(say)):10:2);
end.
Trunc
Verilen bir gerçel sayının tamsayı kısmını verir ve sonucu tamsayı tipinde saklar.
Örnek:
Program Trunc_Fonksiyonu;
var f1,f2,f4:real;
f3:integer;
begin
f1:=34.56;f2:=11.9;
f4:=f1/f2;
f3:=Trunc(f1/f2);
Writeln(f4:8:2,' ',f3);
end.
Örnek: Aşağıda verilen programda round ve trunc deyimlerinin birlikte kullanımları verilmiştir.
Program round_ve_trunc;
Var
Vize,final,Ort:integer;
Begin
Readln(vize,final);
Ort:=Trunc(round(vize*0.4+final*0.6));
Writeln(Vize:10,Final:10,Ort);
End.
Pascal Sözcükleri
Turbo Pascalda kendi işlevleri dışında kullanılamayacak olan sözcükler vardır. Bu sözcükler
ayrılmış sözcükler olarak tanımlanmakta olup programcı tarafından yeniden tanımlanamaz, bir
değişken ismi olarak kullanılamaz veya değiştirilemezler. Bu sözcüklerin isimleri aşağıda
verilmiştir:
And Asm Array Begin
Case Const Constructor Destructor
Div Do Downto Else
End File For Function
Goto If Implementation In
Inline Interface Label Mod
Nil Not Of Object
Or Packed Procedure Program
Record Repeat Set Shl
Shr String Then To
Type Unit Until Uses
Var While With Xor
Tanıtıcılar
Pascal programlama dilinde icra bloğu içinde kullanılan değişkenler VAR tanım bloğu içinde,
sabitler ise CONST bloğu içinde tanımlanır. Örneğin A,B değerleri değişken ve C değeri sabit ise
bu değerlerin programın tanım bloklarında ifade edilmesi aşağıdaki şekilde olacaktır.
VAR A;B:REAL;
CONST C=12:INTEGER;
Burada, VAR’dan sonra gelen REAL ifadesi A ve B değişkenlerinin gerçel sayı veri tipinde
olduğunu belirtirken CONST’dan sonra gelen INTEGER ifadesi C sayısının integer veri tipi
olduğunu belirtmektedir.
Pascal Programlama dilinde kullanılan değişik veri tiplerinin tanımları ve geçerli olduğu alanlar
aşağıda tanımlanmıştır.
Özel Semboller
Bir Pascal programında kullanılabilecek özel semboller A’dan Z’ye büyük ve a’dan z’ye küçük
İngiliz alfabesi harfleri, 0-9 arası rakamlardır. Pascal programlama dilinde kullanılan diğer bazı
semboller ve anlamları aşağıda tanımlanmıştır.
>, <, = Herhangi değişken ve sabitlerin karşılatırılmasında kullanılır.
[ ] Bu işaret içine diziye ait indis numarası yazılır.
( ) Veri okunması, yazılması, yazılacak/okunacak bilgilerin başlangıç ve bitişlerinde kullanılır.
.. İndisli değişken eleman tanım ayırıcı.
; Pascal komut ve deyimlerini birbirinden ayırmak için kullanılırlar.
’ Alfasayısal bilgilerin tanımlanmasında kullanılır. Bilgilerin başlangıç ve bitişlerinde
kullanılmaktadır.
, Değişken tanımlarında, okunacak yada yazdırılacak bilgiler arasında ayıraç olarak kullanılır.
: Bilgi karakter yapı tipi tanımlamalarında ve sayısal bilgilerin çıkış formatlarında kullanılır.
. Bir gruba bağlı bir alt grup veya bir kayıt saha ismi tanımlarında elemanlandırma işareti olarak,
sabit bilgilerdeki rakamların ondalık işareti olarak ve pascal programlarının sonunu belirlemek
amacıyla kullanılır.
:= İşaretin solundaki değere sağındaki bilgiyi atama işlemini yapar.
{ } Açıklama ifadelerinin başlangıç ve bitimlerinde kullanılır.
(* *) Açıklama ifadelerinin başlangıç ve bitimlerinde kullanılır.
Aritmetik İşlem İşaret Karakterleri
Program içinde yapılacak aritmetik işlemlerde kullanılır.
+ Toplama işlemi ve karakter katarlarının birleştirilmesinde kullanılır
- Aritmetik işlemlerin yapılmasında çıkarma işlemi amacıyla kullanılır
* Aritmetik işlemlerin yapılmasında çarpma işlemi amacıyla kullanılır
/ Aritmetik işlemlerin yapılmasında bölme işlemi amacıyla kullanılır
Aritmetik İşlemlerde İşlem Öncelik Sıraları
Öncelik Sırası Aritmetik İşlem ve bağıntılı tanımlar
1
2
3
4
5
6
7
8
9
10 İşaretli sayısal bilgiler
Parantez içindeki işlemler
Aritmetik fonksiyonlar
Üs alma
Çarpma ve Bölme
DIV tam sayıya bölme deyimi
MOD (Bölme işleminde kalan bulma işlemi)
Toplama ve çıkarma
Mantıksal ilişki ifadeleri (=, >,<,)
Bağlantı ifadeleri (not,and,or,xor)
İşlem Önceliğinde Bazı Kurallar:
• Aynı öncelik sırasına sahip işlemlerde hangisi önce tanımlanmış ise önce onun işlemi
gerçekleştirilir.
• İşlem öncelik sırası küçük olan bir aritmetik işlemin önce yapılması isteniyorsa parantez içine
alınmalıdır.
• İç içe birden fazla parantez kullanılması durumunda, işlem öncelik sırası daima en içteki
paranteze ait işleminindir.
PASCAL DERS NOTLARI
Pascal'da yazılabilecek en küçük program aşağıdaki gibidir.
Begin
End.
Yukarıda gösterilen küçük program parçasından da anlaşılacağı gibi pascalda bir program begin
ile başlar end. ile sona erer.
Pascal'da bir program yapısını biraz daha genişletecek olursak;
Program programadı;
Tanımlamalar
Procedure ve functionlar
Daha açık anlatımıyla;
Program programadı;
Uses unitler
type Özel veri tipleri
Const Sabitler
Label etiketler
var değişken veya değişkenler
begin
end.
*Yukarıda kullanılan tanımlamlarda koyu harf ile yazılan kelimeler komutları ifade etmektedir.
Program komutu; yazdığınız programa bir isim vermek için kullanılır. Fakat bu görülen satır
kullanılmak zorunda değildir. Bu komut kullanıldığı zaman dikkat edilmesi gereken husus şudur.
Programa verdiğiniz isim boşluk karakteri içermemelidir. Şayet verdiğiniz isim iki kelimeden
oluşuyorsa kelimeler arasında _ karakteri kullanılmalıdır. Örneğin; Program ilk_programım
Unit komutu; bu komut pascal'ın unit'lerini veya kendi yazdığınız unitleri kullanmak içindir. Unit
birden fazla procedure veya functiondan oluşan bir program parçasıdır. İleride procedure veya
fonksiyon kavramı açıklandığında unit kavramı da daha iyi anlaşılacaktır. Ama bu noktada şunun
bilinmesinde fayda vardır: İleride de görüleceği üzere pascal'da kullanılacak olan komutların çoğu
unit'ler içerisinde bulunan birer procedure veya fonksiyondur.
Type komutu; özel veri tipleri tanımlamak için kullanılır.
Const komutu; sabit tanımlamak için kullanılır.
Label komutu; etiket tanımlamak için kullanılır.
Var komutu; istenen tiplerde değişken tanımlamak için kullanılır.
Yukarıda belirtilen program yapısında bulunan sıra sabittir. Fakat, bir programın içerisinde bazı
kısımlar hariç hepsi bulunmak zorunda değildir. Zorunlu olan kısımlar ; Uses, begin ve end.
kısımlarıdır.
Pascal'da kullanılan bazı semboller
*#Sembol#* *#Anlamı#*
= Karşılaştırma işlemi için kullanılır.Eşitse.
<> Karşılaştırma işleminde kullanılır.Eşit değilse.
:= Değişkenlere değer atama için kullanılır. a:=5 gibi.
{ } veya (* *) Açıklama yapmak için kullanılır. Basic'teki REM komutuyla aynı işi görür.
: Değişken tanımlamalarında değişken isminden sonra değişken tipini belirlemeden önce
kullanalır. a:integer gibi.
; Her satırın sonunda (istisnalar dışında) kullanılır.
Değişken isimlerini belirlerken uyulacak kurallar:
1. Değişken isimleri harf veya _ ile başlamalıdır.
Örneğin: ilk, _ilk gibi.
2. İçerisinde boşluk karakteri bulunmamalıdır. Bu kuralı program komutunu anlatırken
öğrendiğinizi hatırlayınız.
Örneğin: ilk_sayi,son_sayi gibi.
3. Pascal'da kullanılan komutlar değişken ismi olamaz.
Örneğin: Begin, var gibi.
4. Değişken isimleri arasında özel karakterler bulunamaz. (+,-,*) gibi.
Örneğin: ilk+sayi, ilk-sayi gibi.
5. Değişken isimlerinde türkçe karakterler kullanılamaz. (ş,ğ,İ,ç gibi)
6. Değişken ismi harf ile başladıktan sonra ikinci karakteri sayı veya _ olabilir.
Örneğin:a1,a_b gibi
String İfadeler:
String ifadeler kısaca; Üzerinde sayısal işlem yapılamayan ifadeler olarak tanımlanabilir.
Pascal'da string ifadeler '' işaretleri arasında belirtilir.
Örneğin: 'Isparta', 'Keçiborlu','Fenerbahçe' gibi.
VERİ TİPLERİ
Tamsayı Tipleri
Tip Adı Sınırları Kapladığı Alan
Shortint -128 127 1 Byte
Byte 0 255 1 Byte
Integer -32768 32767 2 Byte
Word 0 65534 2 Byte
Longint -2147483648 2147483647 4 Byte
Gerçek (Reel) Sayı Tipleri
Tip Adı Sınırları Kapladığı Alan
Real 2.9*10^-9 1.7*10^38 6 Byte
Single 1.5*10^-45 3.4*10^38 4 Byte
Double 5.0*10^-324 3.4*10^308 8 Byte
Extended 3.4*10^-4932 1.1*10^4932 10 Byte
Comp (-2^63)+1 (2^63) -1 8 Byte
STRİNG TİP:
Üzerinde matematiksel işlem yapılmayan alfasayısal değişkenleri tanımlamak için kullanılır.
Örneğin:
a:string şeklinde bir değişken tanımlarsanız 255 karakterlik bilgi alır.
a:string[n] şeklinde bir değişken tanımlarsanız n karakterlik bilgi alır.
CHAR TİP:
Sadece bir karakterlik bilgi için kullanılır.
String Tipi
Tip Adı Kapladığı Alan
Char 1 Byte
BOOLEAN TİP:
Sadece True (doğru) veya False(Yanlış) değerlerini alabilen bir değişkendir.
String Tipi
Tip Adı Kapladığı Alan
Boolean 1 Byte
TANIMLAMA BLOKLARI
Var tanımlama Bloğu:
Kullanımı:
Değişkenismi:tip;
Birden fazla değişken tanımlanacak ve aynı tipte olacaksa:
Değişkenismi1, Değişkenismi2:tip;
Örnek:
Var
a:integer;
isim:string[10];
ortalama:real;
sayi1,sayi2:byte;
Const tanımlama bloğu:
Daha öncede anlatıldığı gibi sabit tanımlama bloğudur.
Kullanımı:
Const
Sabit adı=değer;
Biçiminde kullanılırsa sabite verilen değer program içerisinde değiştirilemez.
Sabit adı:tip=değer;
Biçiminde kullanılırsa sabite verilen değer ilk değer olarak kabul edilir ve program içerisinde bu
değer değiştirilebilir.
Örnek:
Const
Pi=3.14;
Sayi:integer=15;
OPERATÖRLER:
Div: Bir bölme işleminde bölümü verir.
Örnek:
15 div 5 =3
Mod: Bir bölme işleminde kalanı verir.
Örnek:
5 mod 4 =1
String Tipi
Operatör İşlevi
Not Değil
Or Veya
And Ve
Xor Veyadeğil
= Eşit
< Küçük
> Büyük
<= KüçükEşit
>= BüyükEşit
<> Farklı
TURBO PASCAL KOMUTLARI
GİRİŞ - ÇIKIŞ KOMUTLARI
Write - Writeln:
Sabitlerin, değişkenlerin ve işlem sonuçlarının ekrana basılmasını sağlayan komuttur. Yani,
basic'teki print komutuyla aynı işlevi görür.
Kullanımı:
Writeln(ifade)
Write(ifade)
Writeln komutu kullanıldığı zaman parantez içerisinde verilen ifade ekrana basıldıktan sonra
cursor bir alt satıra iner ve diğer ifadeler buradan itibaren yazılmaya devam eder. Write komutu
kullanıldığında ise cursor parentez içerisinde verilen ifade yazıldıktan sonra yazılan ifadenin
hemen sonunda bekler ve diğer ifadeler buradan itibaren yazılmaya devam eder.
Şayet bir string ifade akrana basılmak isteniyorsa '' işaretleri arasında parantezler içerisine
yazılmalıdır. Bir sabit veya değişken ekrana basılmak isteniyorsa; parantezler içerisine sabit veya
değişkenin isminin yazılması yeterlidir. Burada dikkat edilmesi gereken husus şudur: Birden fazla
sabit veya değişkeni aynı anda ekrana basmak istiyorsanız aralarına virgül koyarak yazmalısınız.
Eğer, hem bir string ifade hem de bir değişken veya sabiti beraber ekrana basmak istiyorsanız;
değişen veya sabitten sonra veya önce virgül kullanmalısınız.
Örneğin; writeln(a,'a') veya
writeln('b' ,b)
Şimdi bu komutu kullanarak birkaç örnek yazalım.
Örnek 1:
Program ekrana_yaz;
begin
writeln('İlk programım');
end.
Bu program çalıştırıldığında ekrana İlk Programım stringini yazacak ve sonlanacaktır. Sonuçta
ekranda çıktıyı şu an için göremiyorsunuz, Alt+F5 tuşlarına basın ekranda yadığınız string
ifadenin basılı olduğunu göreceksiniz. Burada şu noktaya da dikkat etmeyi unutmayın. Cusor bir
aşağı satırda beklemektedir.
Aynı programı şu şekilde yazarsak.
Program ekrana_yaz;
begin
write('İlk programım');
end.
Bu program da yukarıdaki programla aynı çıktıyı verecektir. Aralarındaki tek fark bu sefer
cursorun bir alt satıra geçmeyip string ifadenin hemen sonunda beklemesidir.
Örnek 2:
Mesela çıktısı aşağıdaki gibi olan bir program yazmaya çalışalım.
Süleyman Demirel Üniveristesi
Keçiborlu Meslek Yüksekokulu
begin
writeln('Süleyman Demirel Üniversitesi');
write('Keçiborlu Meslek Yüksekokulu');
end.
Örnek 3:
Şimdide iki değişken tanımlayalım ve bunların toplamlarını ve farklarını ekrana basan bir program
yazalım.
var
a,b:byte;
begin
a:=65;
b:=25;
writeln('a+b=',a+b);
writeln('a-b=',a-b);
end.
Sayısal Bilgilerin Formatlı Olarak Yazdırılması
Burada amaç sayısal ifadeleri sağa dayalı olarak yazdırmaktır.
Tamsayı ifadeler için kullanımı:
Kullanımı:
writeln(ifade:uzunluk)
write(ifade:uzunluk)
Burada uzunluk yazılan sayısal ifadeninitolam hane sayısını belirtir. Verilen ifade bu alana sağa
dayalı olarak yazılır.
Örnek 4:
begin
write(1:6);
end.
Bu program sonuçta 1'i 6 hane sağa kaydırır ve 6. haneye yazar.Yani sonuç şöyle olur.
1
şeklinde bir çıktı olur.
Clrscr:
Gerçi bu komut bir giriş çıkış komutu değildir ama burada anlatmanın gerekli olduğunu
düşünüyorum. Clrscr komutu ekran temizleme komutudur ve crt unit'i içerisinde bulunur. Yani bu
şu anlama gelmektedir. Bu komut kullanılacağı zaman mutlaka uses crt komut satırı
kullanılmalıdır.
Örnek 5:
uses crt;
begin
clrscr;
write('Merhaba');
end.
Read - Readln:
Klavyeden bilgi almak için kullanılan komuttur. Basic'teki input komutuyla aynı işlevi görür.
Kullanımı:
read(değişken veya değişkenler)
readln(değişken veya değişkenler)
Şayet değşkenler birden fazlaysa aralarına virgül koyulur.
Bilindiği gibi bundan önce yazdığımız programları çalıştrıyor fakat çıktısını görebilmek için alt+F5
tuşlarını kullanıyorduk. İşte readln komutunu öğrendikten sonra artık böyle bir işleme gerek
kalmayacaktır. Her programın sonunda end. satırından önce readln; komut satırı kullanılırsa
program bütün işlemleri bitirdikten sonra siz bir tuşa basıncaya kadar sizi bekleyecektir.
Örnek 6:
Klavyeden iki sayı alarak bunların toplamlarını ekrana yazan bir program yazınız.
uses crt;
var
a,b:integer;
begin
clrscr;
write('a sayısını giriniz');readln(a);
write('b sayısını giriniz');readln(b);
write('a+b=',a+b);
readln;
end.
Örnek 7:
Klavyeden vize ve final notu girildiğinde o öğrencinin not ortalamasını bulan programı yazınız?
uses crt;
var
vize,final:shortint;
begin
clrscr;
write('vizeyi giriniz');readln(vize);
write('finali giriniz');readln(final);
write('ortalama',vize*0.4+final*0.6);
readln;
end.
Karşılaştırma Komutları
İf - then - else
Verilen şartın doğru veya yanlış olması durumunda istenen işlemleri yapmak için bu program
kullanılır.
Kullanımı:
İf şart then şart doğruysa komut veya komutlar else şart doğruysa komut veya komutlar
Bu komut kullanılırken dikkat edilmesi gereken birçok nokta bulunmaktadır. Şayet şart doğru
olduğunda kullanılacak komut sayısı 1'den fazla ise bu komutlar begin end bloğu içerisine
yazılırlar. Aynı durum şart yanlış olduğu durumda da geçerlidir. Hiçbir zaman else komutundan
önceki satırın sonunda ; işareti kullanılmaz. Bu unutulmaması gereken önenli bir kuraldır.
Örnek 8:
Kalvyeden iki sayı alarak büyük olan sayıyı ekrana yazan bir program yazınız?
uses crt;
var
a,b:byte;
begin
write('a sayısı');readln(a);
write('b sayısı');readln(b);
if a>b then
write('a sayısı büyük',a)
else
write('b sayısı büyük',b);
readln;
end.
Örnek 9:
Kalvyeden iki sayı alarak büyük olan sayıyı bulup bunu bir artırarak ekrana yazan bir program
yazınız?
uses crt;
var
a,b:byte;
begin
write('a sayısı');readln(a);
write('b sayısı');readln(b);
if a>b then
begin
a:=a+1;
write('a sayısı büyük',a);
end
else
begin
b:=b+1;
write('b sayısı büyük',b);
end;
readln;
end.
AYRILMIŞ SÖZCÜKLER ve STANDART İFADELER
(Reserved Words and Standard Identifiers)
RESERVED WORDS
And Else Inline Procedure Unit
Asm End Interface Program Until
Array Exports Label Record Uses
Begin File Library Repeat Var
Case For Mod Set While
Const Function Nil Shl With
Constructor Goto Not Shr Xor
Destructor If Object String
Div Implementation Of Then
Do In Or To
Downto Inherited Packed Type
STANDART İFADELER
Sabitler (Constants): False True MaxInt
Tipler (Types) Integer Boolean Real Char
Text String ShortInt LongInt Byte
Byte Word Single Double Extenteed
Comp WordBool LongBool Pointer
Program Parameters Input Outpuut
Procedures and Functions
Flow Control Break Continue Exit Halt RunError
Transfer Chr High Low Ord Round Trunc
Arithmetic Abs ArcTan Cos Exp Frac Int
Ln Pi Sin Sqr Sqrt
Ordinal Dec Inc Odd Pred Succ
String Concat Copy Delete Insert Length Pos
Str Val
Dynamic Allocation Dispose FreeMem MaxAvail MemAvail New
Pointer and Adress Addr Assigned Cseg Dseg Ofs Ptr
Seg SPtr Sseg
Miscellaneous Exclude FillChar Hi Include Lo Move
ParamCount ParamStr Random Randomize SizeOf Swap
TypeOf UpCase
Input and Output Append Assign BlockRead BlockWrite ChDir Close
Eof Eoln Erase FilePos FileSize Flush
GetDir IOResult MkDir Read ReadLn Rename
Reset ReWrite RmDir Seek SeekEof SeekEoln
SetTextBuf Truncate Write WriteLn
Units Dos Crt Overlay Printer String Graph
İşlemler ve Öncelikleri
İşlem ve Sırası
Öncelik İşlem
1 Not
2 *, /, Div, Mod, And
3 +, -, Or
4 <, <=, =, <>, >=, >, In
Eğer aynı işlemciden birden fazla varsa işlem soldan sağa doğru yapılır.
Eğer işlemlerde Parantez kullanılmışsa yukarıdaki öncelik sırasına göre öncelikle yapılır.
İşlemler ve Pascal'da Yazım Biçimleri
İfadeler Pascal'da Yazım Biçimi
b2-4.a.c b*b-4*a*c
(b2-4.a.c)1/2 sqrt(b*b-4*a*b)
x+y
------
x - y (x + y) / (x - y)
Mantıksal İşlemler ve Sonuçları
(1=Doğru=True) (0=Yanlış=False)
Ve (And) Operatörü
p q p ve q
111
100
011
000
Program Degiskenler;
Const
i : integer = 567;
b : boolean = True;
c : char ='A';
s : String[10] = 'Pascal';
Begin
WriteLn ('123456789');
WriteLn (i:9);
WriteLn (b:9);
WriteLn (c:8);
WriteLn (s:9);
WriteLn (i:1);
WriteLn (b:1);
WriteLn (c:1);
WriteLn (s:1);
WriteLn (i,b,s);
WriteLn (i,'..',b);
WriteLn ('i = ',i);
WriteLn (s:5);
readln;
End
KARAR VERME DEYİMİ
IF KOŞUL THEN İŞLEM1 ELSE İŞLEM2
Eğer koşul doğru ise İşlem 1'i yap değilse İşlem 2'yi yap.
Pascalda yazımı:
if Koşul Then İşlem1 Else İşlem2
Eğer koşul doğru ise İşlem 1'i ve İşlem 2'yi yap.
Pascal'da Yazımı:
if Koşul Then
Begin
İşlem1;
İşlem 2;
End;
Not: Bir dalda birden fazla işlem yapılıyorsa Begin .. End bloku içine alınır.
Eğer koşul doğru ise İşlem 1'i ve İşlem 2'yi yap değilse işlem3'ü yap.
Pascal'da yazımı:
if Koşul Then
Begin
İşlem1;
İşlem2;
End
Else
İşlem3;
Eğer koşul doğru ise işlem1'i ve İşlem2'yi yap
değilse eğer işlem3 ve işlem4'ü yap
değilse işlem5'i yap.
if Koşul1 Then
Begin
İşlem1;
İşlem2;
End
Else
if Koşul2 Then
Begin
Koşul3;
Koşul4
End
Else
İşlem5;
Tek Sayıları Bulan Program
Algoritması:
1. Başla
2. Sayı gir
3. Eğer sayının Mod 2'ye göre sonucu Birse Tek Sayı yaz
Değilse Çift Sayı yaz.
4. Son.
Program TekCift;
Var
a : Integer;
Begin
Write('Bir sayı giriniz: '); Readln(a);
If (a mod 2 = 1 Then
Writeln ('Girdiğiniz Sayı Tekdir')
Else
Writeln ('Girdiğiniz Sayı Çifttir')
Readln
End.
Not Ortalaması 50'den Büyük ise Geçti 50'den küçükse Kaldı yazan program
Algoritması:
1. Başla
2. Not1 ve Not2'yi gir.
3. Ortalamayı hesapla.
4. Ortalama 50'den büyükse Geçti değilse kaldı yaz.
5. Son.
Program GectiKaldi;
Var
Not1, Not2 : Integer;
Ortalama: Real;
Begin
Write('Not 1´i giriniz : '); Readln(Not1);
Write('Not 2´i giriniz : '); Readln(Not2);
Ortalama := (Not1+Not2)/2;
If Ortalama >= 50 Then
Writeln('Geçtiniz Ortalamanız = ', Ortalama:4:2)
Else
Writeln('Kaldınız Ortalamanız = ', Ortalama:4:2);
Readln
End.
1'den N'e Kadar Tam Sayıları Toplayan Programın:
Algoritması:
1. Başla
2. N sayısını gir.
3. Toplam'a sıfır ata
4. i=1'den i=N'e kadar tam sayıları topla
5. Toplam'ı yaz.
6. Son
Program Toplama;
{Bir den N e kadar tam sayıları toplayan program}
Var
i, N, Toplam : Integer;
Begin
Write('Son sayıyı gir: '); Readln (N);
Toplam := 0;
For i := 1 To N Do
Toplam := Toplam + i;
Writeln('1´den N´e kadar sayıların toplamı = ', Toplam);
Readln;
End.
net2phone
undefined
More...
Eğer Girilen Notların 0-100 arasında olmasını istiyorsanız
yine If..Then..Else ile kontrol etmeniz gerekir.
Algoritması:
1. Başla
2. Not1 ve Not2'yi gir.
3. Eğer Not1 ve Not2 Sıfırdan büyük ve 100'den küçükse
Ortalamayı hesapla.
Eğer Ortalama 50'den büyükse Geçti Değilse kaldı yaz.
Değilse Yanlış Giriş Yaptınız Yaz.
4. Son.
Program GectiKaldi2;
Var
Not1, Not2 : Integer;
Ortalama: Real;
Begin {Ana programın Begin i}
Write('Not 1´i giriniz : '); Readln(Not1);
Write('Not 2´i giriniz : '); Readln(Not2);
If (Not1 >=0) and (Not1<=100) and (Not2 >=0) and (Not2<=100) Then
Begin
Ortalama := (Not1+Not2)/2;
If Ortalama >= 50 Then
Writeln('Geçtiniz Ortalamanız = ', Ortalama:4:2)
Else
Writeln('Kaldınız Ortalamanız = ', Ortalama:4:2);
End
Else
Writeln('Yanlış giriş yaptınız...');
Readln
End. {Ana Programın End i}
Üç kenarı girilen bir üçgenin ne tür bir üçgen (çeşitkenar , ikizkenar, eşkenar) olduğunu yazan
program
Algoritması:
1. Başla
2. a, b ve c'yi gir
3. Eğer a=b ve b=c ise EşKenar Üçgen
Değilse
Eğer a<>b ve a<>c ve b<>c ise Çeşit Kenar Üçgen
Değilse İkiz Kenar Üçgen
4. Son
Program Ucgen;
Var
a, b, c : Integer;
Begin
Write('Üçgenin kenarlarını giriniz: '); Readln(a, b, c);
If (a>0) and (b>0) and (c>0) Then
if (a=b) and (a=c) Then Writeln ('Eşkenar Üçgen')
Else
if (a<>b) and (a<>c) and (b<>c) Then Writeln ('Çeşitkenar Üçgen')
Else
Writeln('İkiz Kenar Üçgen');
Else
Writeln('Yanlış Giriş Yaptınız...');
Readln
End.
Üç Sayının En Büyüğünü Bulan Program
Algoritması:
1. Başla
2. a, b ve c'yi gir
3. Eğer a>b ve a>c ise En Büyük Sayı A'dır
Değilse
Eğer b>a ve b>c ise En Büyük Sayı B'dir
Değilse En Büyük Sayı C'dir
4. En Büyük Sayıyı Yaz.
5. Son
Program Uc_Sayinin_En_Buyugu;
Var
a, b, c, EnBuyuk : Integer;
Begin
Write('Üç Sayı giriniz: ');
Readln(a, b, c);
If (a>=b) and (a>=c) Then EnBuyuk:=a
Else
If (b>=a) and (b>=c) Then EnBuyuk:=b
Else
EnBuyuk := c;
Writeln('En Büyük Sayı = ', EnBuyuk);
Readln
End.
DÖNGÜLER
1. FOR DÖNGÜSÜ
For Döngüsü
1'den N'e Kadar Sayıların Toplamı
N! Hesaplayan Program
Xn'yi Hesaplayan Program
ex'i Hesaplayan Program
Basamaklarının Küplerinin Toplamı Kendisine
Eşit Olan Sayılar 3 Haneli Sayılar
FOR BAŞLANGIÇ DEĞERİ TO SON DEĞER DO
N kez \"İşlem\" yap
1'den N'e kadar \"İşlem\" yap
i = 1 den i = N'e kadar \"İşlem\" yap
Pascal'da Yazımı:
For i := 1 to N do
1'den N'e Kadar Tam Sayıları Toplayan Programın:
Algoritması:
1. Başla
2. N sayısını gir.
3. Toplam'a sıfır ata
4. i=1'den i=N'e kadar tam sayıları topla
5. Toplam'ı yaz.
6. Son
Program Toplama;
{Bir den N e kadar tam sayıları toplayan program}
Var
i, N, Toplam : Integer;
Begin
Write('Son sayıyı gir: '); Readln (N);
Toplam := 0;
For i := 1 To N Do
Toplam := Toplam + i;
Writeln('1´den N´e kadar sayıların toplamı = ', Toplam);
Readln;
End.
N sayısının Faktöriyelini Hesaplayan Program
Algoritması:
1. Başla
2. N sayısını gir.
3. Faktöriyel değişkenine 1 ata
4. i=1'den i=N'e kadar tüm sayıları birbiriyle çarp
5. Faktoriyel'i yaz.
6. Son
Program Faktor;
{N Faktöriyeli Hesaplayan program}
{$N+}
Var
i, N : Integer;
Faktoriyel : Extended;
Begin
Write('Son sayıyı gir: '); Readln (N);
Faktoriyel := 1;
For i := 1 To N Do
Faktoriyel := Faktoriyel * i;
Writeln('N Faktoriyel = ', Faktoriyel:5:0);
Readln;
End.
Xn 'i Hesaplayan Program
Algoritması:
1. Başla
2. X ve N sayısını gir.
3. Us değişkenine 1 ata
4. i=1'den i=N'e kadar us = us * x çarp
5. Us'su yaz.
6. Son
Program UsAl;
{Xn 'i Hesaplayan Program}
var
i,x,n: integer;
us: extended;
begin
us:=1;
writeln('Bu program x üzeri n yi hesaplar...');
write('x ve n yi gir...'); Readln(x,n);
for i:= 1 to n do
us:=us*x;
writeln(x, ' üzeri ',n ,' = ',us);
readln
end.
ex 'i Hesaplayan Program
Algoritması:
1. Başla
2. X 'i gir.
3. ex değişkenine 1 ata. n değişkenine 10 ata (en fazla 10 kez işlem yapmak için)
4. n kez aşağıdaki işlemleri yap
a) Fak ve us değerlerine 1 ata
b) j=1 den i'ye kadar
Us=us*x
Fak=Fak*j
c) ex =ex + us/fak
5. Ex'i yaz.
6. Son
program e_uzeri_x;
var
x, ex, fak, us: real;
i, j, n : integer;
begin
write ('x i gir'); readln (x);
n :=10;
ex := 1;
for i:= 1 to n do
begin
fak:=1; us:=1;
for i:=1 to n do
begin
fak:=1; us:=1;
For j:=1 to i do
Begin
us:=us*x;
fak:=fak*j
End;
ex:=ex+us/fak;
end;
end;
writeln('e üzeri x´in değeri = ', ex:2:7);
readln;
end.
Aynı program aşağıdaki gibi de çözülebilir.
Basamaklarının Küplerinin Toplamı
Kendisine Eşit Olan Sayılar 3 Haneli Sayılar
Algoritması:
1. Başla
2. i=100'den 999'a kadar
a) birler = i mod 10 (birler basamağındaki sayıyı Birler değişkenine ata)
b) onlar := trunc (i div 10) mod 10 (Onlar basamağındaki sayıyı Onlar değişkenine ata)
yuzler := trunc (i div 100) (Yuzler basamağındaki sayıyı Yuzler değişkenine ata)
eğer (birler * birler * birler + onlar * onlar * onlar +
yuzler * yuzler * yuzler = i)'ye eşitse i'yi yaz.
6. Son
Program kuplerin_carpimi;
{Basamaklarının küplerinin carpimi kendisine esit olan sayilar}
var
i, birler, onlar, yuzler: integer;
begin
for i:= 100 to 999 do
begin
birler := i mod 10;
onlar := trunc (i div 10) mod 10;
yuzler := trunc (i div 100);
if (birler * birler * birler + onlar * onlar * onlar +
yuzler * yuzler * yuzler = i) then write (i:5);
end;
readln
end.
Yanıt: 153-370-371-407
belki iş görür . . .
Sh@doW KinG
03-12-2007, 07:15 PM
sağoL çok işime yarar buNLarn bir sayının faktöriyelini hesaplayan programın algoritmasının
oluşturulması
Sayının faktöriyeli :Fak
Faktöriyel degişkeni :X
Faktöriyeli hesaplanacak sayı :Y
Algoritma:
A1 :Fak¬ 1, X¬ 0
A2 :Y’i gir
A3 :Y<0 ise 2. adımı tekrarla
A4 :X¬ X+1
A5 :Fak¬ Fak*X
A6 :X<Y ise 4. adıma geri dön
A7 :Fak değerini yaz
A8 :Bitir
Bu algoritmada 1. adımda X e 0 ve Fak değişkenine 1 değeri atanıyor. 2. adımda Y değeri giriliyor
ve 3. adımda Y değerinin 0 dan küçük bir değer olup olmadığı denetleniyor ve denetim sonucuna
göre gerekli komut veriliyor. 4. adımda X’in değeri 1 arttırılıyor ve 5. adımda X için Fak değeri
hesaplanıyor. 6. adımda X in değerinin faktöriyeli hesaplanacak sayıdan küçük olması
durumunda 4. adımdan itibaren işlemlerin tekrarlanması komutu veriliyor, X’ in değerinin Y’ye eşit
olması durumunda işlemler tamamlanarak hesaplanan değerin yazdırılması işleminden sonra
programın çalışması sona ermektedir.
Akış Diyagramları
Geliştirilecek olan yazılımın genel yapısının şematik gösterimine akış diyagramı veya blok
diyagramı adı verilir. Akış diyagramları, yazılımı oluşturacak program parçalarını ve bu parçaların
birbirleri ile olan ilişkilerini belirler. Bir bilgisayar programının oluşturulmasında akış
diyagramlarının hazırlanması, algoritma oluşturma aşamasından sonra gelmektedir. Bilgisayar
programının oluşturulması sırasında algoritma aşaması atlanarak, doğrudan akış diyagramlarının
hazırlanmasına başlanabilir. Programlama tekniğinde önemli ölçüde yol almış kişiler bu aşamayı
da atlayarak direkt olarak programın yazımına geçebilirler.
Akış diyagramlarının algoritmadan farkı, adımların simgeler şeklinde kutular içinde yazılmış
olması ve adımlar arasındaki ilişkilerin (iş akışı) oklar ile gösterilmesidir.
Akış diyagramlarında kullanılan semboller, anlamları ve kullanış amaçları aşağıdaki tabloda
verilmiştir.
Tablo 1. İş akış diyagramlarında kullanılan semboller ve anlamları
Simge Simgenin Adı ve Anlamı
Elips Akış diyagramının başlangıç ve bitiş yerlerini gösterir. Başlangıç simgesinden çıkış oku
vardır. Bitiş simgesinde giriş oku vardır.
Paralel Kenar: Programa veri girişi ve programdan elde edilen sonuçların çıkış işlemlerini gösterir.
Dikdörtgen Aritmetik işlemler ve değişik atama işlemlerinin temsil edilmesi için kullanılır.
Eşkenar Dörtgen Bir karar verme işlemini temsil eder.
Altıgen Program içinde belirli blokların ard arda tekrar edileceğini gösterir.
Oklar Diyagramın akış yönünü ,yani her hangi bir adımdaki işlem tamamlandıktan sonra hangi
adıma gidileceğini gösterir.
Ayrıntılı bir akış diyagramı, yazılımı oluşturan işlemleri ve ilişkilerini en küçük detayına kadar
belirler.
Bir bilgisayar programının geliştirilmesinde kullanılan programlama dili ne olursa olsun bu
programların akış diyagramlarında genel olarak yalnız üç basit mantıksal yapı kullanılır. Bu
mantıksal yapılardan en basiti sıralı yapıdır. Sıralı yapı, hazırlanacak programdaki her işlemin
mantık sırasına göre nerede yer alması gerektiğini vurgular. Bu yapı sona erinceye kadar ikinci
bir işlem başlayamaz.
Şekil 1.2 Sıralı Yapı
Mantıksal yapılardan ikincisi Karar Verme yapısıdır (Şekil 1.3). Programlama sırasında If...Then...
Else yapısı ile tanıyacağımız bu mantıksal yapılar, birden fazla sıralı yapı seçeneğini kapsayan
modüllerde, hangi şartlarda hangi sıralı yapının seçileceğini belirler.
Şekil 1.3 Karar Verme Yapısı
Üçüncü mantıksal yapı çeşidini tekrarlı yapılar oluşturmaktadır. Bu yapılara Pascal programlama
dilinde For(Şekil 1.4.a), While ve Repeat..Until (Şekil 1.4.b), yapısı adı da verilir. Şartlara göre
değişik işlem gruplarının yapılmasını sağlar. Bu yapı yukarıda sözü edilen iki yapının çeşitli
kombinezonların tekrarlanmasından oluşmuştur.
Söz konusu üç değişik yapı, değişik kombinezonlarda kullanılarak istenilen işlevleri yerine
getirecek programlar hazırlanabilir. Programların bu üç basit yapı ile sınırlandırılması program
modüllerinin daha kolay tasarlanmasını sağlar.
a
b
Şekil 1.4. Tekrarlı Yapı
Akış Diyagramı Örnekleri
Bu bölümde yazılım oluşturma evrelerinden biri olan akış diyağramları ile ilgili örnekler verilmiştir.
Sözlü veya yazılı olarak oluşturduğumuz algoritmanın programa dönüştürülmesi sırasında
programın çalışma sırasını da gösteren akış diyagramlarıyla ilgili örnekler aşağıda verilmiştir.
Örnek 1: İki sayının toplamını ve ortalamasını yapan bilgisayar programının akış diyagramını
çiziniz.
Örnek 2: 1’den 100’e kadar olan sayıların toplamlarını ve ortalamalarını veren programın akış
diyagramını çiziniz.
Örnek 3: Ax+b=0 şeklinde verilen 1.derece denklemin çözümünü veren programa ait akış
diyagramını çiziniz.
Örnek 4: Ax²+Bx+C=0 şeklinde verilen 2. derece denklemin köklerini bulan programın akış
diyagramını çiziniz.
Yukarıdaki örnekte A=0 girilmesi durumunda denklem 1.derece olmaktadır. Bu durumu dikkate
alarak gerekli çözümü de gösterecek şekilde akış diyagramını değiştiriniz.
Örnek 5: 1’ den 100’e kadar sayıların karelerini, kareköklerini, küplerini, küpköklerini toplamlarını
ve ortalamalarını veren programın akış diyagramını çiziniz.
Örnek 6: Yukarıda karar mantığı yapısı ile çözümlediğimiz problemi döngü yapısı ile
çözümleyelim.
Örnek 7:10 tane N sayısının faktöriyelini hesaplayan programın akış diyagramını çiziniz.
Örnek 8: Yukarıdaki örneği tekrarlı yapı olarak tanımladığımız döngü yapısı ile çözelim.
Örnek 9: Elimizde bulunan A,B, ve C gibi 3 adet sayıdan en büyüğünü ve en küçüğünü bulan
programın akış diyagramını çiziniz.
Örnek 10: Elimizde bilinmeyen sayıda koni bulunmaktadır ve koniye ait yarıçap (R) ve yükseklik
(H) değerleri klavyeden girilmek suretiyle V=p .R².H/3 formülü ile hacim hesabı yapılacaktır.
Koniye ait yarıçap değeri 0 girildiğinde programın çalışması duracaktır. Programda her girilen veri
için hacim değeri rapor edilecek, programın çalışması bittiğinde toplam kaç koni için hacim hesabı
yapıldığı da belirtilecektir.
Verilen akış diyagramında R ve H değerlerinin negatif girilmesine engel olacak şekilde akış
diyagramını yeniden düzenleyiniz.
Örnek 11: F(x) kesikli fonksiyonunun değeri X’in aldığı değerlere göre aşağıda verilmiştir. X’in
değeri 0-10 arasında 0.5 aralıklarla arttığına göre her bir X değeri için F(x) fonksiyonunu
hesaplayan programın akış diyagramını çiziniz.
• 0£ X £ 2 f(x)= X
• 2< X £ 3 f(x)=X3-X2-2
• 3< X £ 4 f(x)=X2-2X+13
• 4< X f(x)=X4-3X2-43
Örnek 12: p sayısının formülü olduğuna göre serinin paydasındaki ifade 100 oluncaya kadar pi
sayısını hesaplayan bilgisayar programının akış diyagramını çiziniz.
Yazım İçin Format Belirleme
Writeln deyimi ile yapılan bilgi çıkışlarını düzenlemek için yazım formatları kullanılır. Yazdırılmak
istenilen değerin tipine bağlı olarak iki farklı yazım formatı kullanılır.
1. Yazım Formatı (M:n) :Bu yazım formatına göre yazdırılmak istenilen M değeri n karakterlik
alanda sağa dayalı olarak yazılır. M değerini oluşturan dijit veya karakterin uzunluğu n sayısından
küçük ise, aradaki fark kadar sol tarafta boşluk bırakılır. M değerinin uzunluğu n sayısına eşit
veya büyük ise yazdırma işlemi format belirtilmemiş gibi gerçekleştirilir.
Const
i:integer=567;
b:boolean=True;
c:char='b';
h:string[ 10] ='Nasılsınız';
begin
Writeln('123456789');Writeln;
Writeln(i:9);
Writeln(b:9);
Writeln(c:9);
Writeln(h:9);
Writeln(i:2);
Writeln(h:5);
end.
2. Yazım Formatı (M:n:k) : Bu yazım formatı real sayılar üzerinde çalışmaktadır. Bu yazım
formatıyla reel sayılar üssüz notasyonda yazdırılır. Bunu sağlamak için sadece real sayılar için
geçerli olan 2. yazım formatı kullanılır. Yazdırılacak M real değeri n karakterlik alanda sağa dayalı
olarak üssüz yazdırılır, k ise n karakterin sonundaki kesirli kısmı göstermektedir.
Örneğin; A değeri, A:7:2 şeklinde yazdırılmak istenirse; program real sayı için 7 karakterlik yer
ayırır. Bu alanın son iki hanesi ondalıklı kısım için sondan 3. hanesi ise desimal nokta için
kullanılır.
Sayının tamsayı kısmı ayrılan alanın uzunluğundan küçük ise, aradaki fark kadar sol tarafta
boşluk bırakılır. Yazdırılacak sayının tam sayı kısmı bu alana sığmıyor ise, tamsayı için ayrılan
alanın uzunluğu yazdırılan sayının tamsayı alan uzunluğuna eşit büyüklükte kabul edilir. Kesirli
kısmı ayrılan alandan daha küçük ise aradaki fark kadar sağ tarafa 0 dijiti ilave edilir. Kesirli kısım
alana sığmıyorsa yuvarlatılarak yazılır.
Yazım sırasında kesirli alanın yazılması istenmiyorsa k sayısının “0” yazılması gerekir. k sayısının
sıfır olması desimal noktanın yok olmasını sağlar.
const a:real=123.127927;
begin
Writeln('123456789');
Writeln('*********');;
Writeln(a:9:4);
Writeln(a:9:3);
Writeln(a:9:2);
Writeln(a:9:0);
Writeln(a:7:2);
Writeln(a:6:2);
Writeln(a:5:2);
Writeln(a:0:0);
end.
Programın çalışmasıyla elde edilen sonuç aşağıda verilmiştir. Program sonucuna göre sondan 2.
ve 3. satırların aynı olduğuna dikkat ediniz
Veri tipleri
Integer Tipi Veriler
Integer tipindeki veriler tamsayılardan oluşmuşlardır ve kayar nokta içermezler. Turbo Pascal’daki
tamsayılar -32768 ile +32767 arasında sınırlandırılmışladır.
Word Tipi Veriler
Word Tipi veriler, 0-65535 arasındaki tamsayılardan oluşmuşlardır.
Shortint Tipi Veriler
-128 ile +127 arasındaki tamsayılardan oluşmuşlardır.
Byte Tipi Veriler
Byte tipi veriler işaret ve desimal nokta içermeyen 0-255 arasındaki değerlerden oluşan
tamsayılardır. Programda, 0-255 arasındaki tamsayılar için değişken veya sabitlerin Byte tipi
olarak tanımlanması bellekten tasarruf sağlar.
Longint Tipi Veriler
-2147483648 ile +2147483647 arasında görev yaparlar ve tamsayıların menzil olarak en
kapsamlısıdır.
Boolean Tipi Veriler
Mantıksal ifadeler olarak da isimlendirilebilen Boolean tipi veriler sadece iki değerden oluşurlar.
Bunlar “FALSE” ve “TRUE” dir.
Durum:Boolean;
Hata:Boolean;
Char Tipi Veriler
Char tipi veriler, ASCII karakter kümesinin 256 adet elemanından oluşurlar. Char tipi veriler bir
sabit olarak ele alındığından ’ ’içerisinde yazılır.
String Tipi Veriler
Bu tip veriler, karakter kümesi şeklinde olup ’ ’ içerisinde yazılırlar.
A:STRING[ 5] ;
B:STRING[ 16] ;
Burada A isimli karakter kümesi maksimum 5 karakterden, B isimli karakter dizisi ise maksimum
16 karakterden oluşmaktadır.
Bu bilgilerin eşliğinde ilk pascal programını yazabiliriz.
Program Birinci_ve_ilk_prog_ram;
Var
Mesaj:string[ 7] ;
BEGIN
Mesaj:=‘Merhaba Yaşamı Yaşanası Kılan Güzel İnsanlar’;
Write(Mesaj);
END.
Programımızın çalıştırılmasıyla ekran görüntüsü aşağıdaki gibi olacaktır.
Merhaba, Yaşamı Yaşanası Kılan Güzel İnsanlar
Real Tip Veriler
Real tip veriler desimal nokta içeren ve üslü formda ifade edilebilen gerçel sayılardır. Üs ifadesi
olarak “E” harfi kullanılmaktadır. Kullanımları ile ilgili örnekler aşağıda verilmiştir. Tanım
aralığı;2.9E-39..1.7E38 'dir. Bellekte 6 byte yer kaplar.
-2.3454
123.11223344
-2.45E+12
2.45E+12
1.123123E-12
Olağan koşullarda bir programlama hatası söz konusu değilse veya çok büyük sayılar ile
çalışılmıyor ise REAL tip sayılarla çalışmada bir sorun ile karşılaşmayız.
Kişisel bilgisayarların mikro işlemcileri 80x86 olarak isimlendirilir. Bu işlemci ailesinin yükünü
hafifletmek için 80x87 olarak bilinen matematik işlemcisi kullanılır. Pascalda bu işlemci ile
kullanılmak üzere dört tip tanımlanmıştır. Bunlar;Single, Double, Extended ve Comp 'tur.
Single Tip Veriler
Single tip veriler, 1.5E-45...3.4E38 sayı kümesi aralığında tanımlanabilir. Bellekte 4 byte yer
kaplar.
Double Tip Veriler
Double tip veriler, 5.0E-45...3.4E38 sayı kümesi aralığında tanımlanabilir. Bellekte 8 byte yer
kaplar.
Extended Tip Veriler
Extended tip veriler, 3.4E-4932...1.1E4932 sayı kümesi aralığında tanımlanabilir. Bellekte 10 byte
yer kaplar.
Comp Tip Veriler
Comp tip veriler çok uzun tamsayıların tanımlanması için kullanılır. Comp veri tipi ile 19-20
basamaklı sayılar ifade edilir. Tanım aralığı; -263...263
80x87 sınıfındaki veri tiplerinin kullanılabilmesi için programın en başına {$N+} derleyici komutu
verilmelidir. Bilgisayarda matematik işlemci yok ise {$E+} matematik işlemci emülasyonu da bu
satıra eklenir.
{$N+}{$E+}
program cok_buyuk_sayilar;
var
Uses wincrt;{Dos için CRT}
a:single; b:double;
c:extended; d:comp;
begin;
A:=12E-40;
B:=12E+39;
D:=1234567890;
C:=A+B+D;
Writeln(C);
End.
File menüsü
Pascal file menüsü üzerinde 10 ayrı menü komutu vardır. Bunların görevleri aşağıda
özetlenmiştir.
Şekil 1. Turbo Pascal File Menüsü
Open: Daha önceden diskte varolan Pascal program dosyasının editöre yüklenmesi için kullanılır.
Pascalın DOS sürümü ile çalışırken aynı yöntem geçerli olmakla birlikte, aynı işlemi, F3 tuşuna
basarak da yapabiliriz. Bu menü komutu kullanıldığında Şekil 2’de verilen diyalog kutusu
görülecektir.
Disk üzerinde bulunan bir Pascal dosyasını editöre yüklemek için diyalog kutusunda görülen
*.PAS yazılı yere programın adı yazılarak “Enter” tuşuna basılır veya önce tab tuşuna bastıktan
sonra ok tuşları ile programın adı üzerine gelinerek “Enter” tuşuna basılır. Aynı seçim, mouse ile
açılmak istenilen programın üzerine gelip iki kez sol tuşu tıklayarak da gerçekleştirilir.
New: Editörde yeni bir Pascal dosyası yaratmak amacıyla kullanılır.
Save: Yazılan programın hafızaya alınması işlemini gerçekleştirir. Program ilk defa hafızaya
alınacak ise Şekil 3’de görülen Save As Diyalog Kutusu ekrana gelerek, programa bir isim
verilmesini bekleyecektir. Programın hafızaya alınması için program adı yazıldıktan sonra mouse
ile \"ok\" tuşuna veya klavyeden “Enter” tuşuna basılması gerekir. Daha önceden diskte bulunan bir
Pascal programı üzerinde yapılan değişiklikler nedeniyle hafızaya alma işlemi için bu komut
kullanıldığı zaman, program eski adı ile kaydedileceğinden aynı diyalog kutusu ekranda
görülmez.
Pascalın DOS sürümü ile çalışırken yazılan programın hafızaya alınması için bu menü komutu ile
aynı işleve sahip olan F2 tuşuna basılması yeterlidir.
Şekil 2. Open Diyalog Kutusu
Şekil 3. Save Diyalog Kutusu
Save As: Editörde aktif penceredeki Pascal programının yeni bir isimle kaydedilmesi amacıyla
kullanılır. Komutun kullanılmasıyla ekrana Save As Diyalog Kutusu gelir. Programa verilecek yeni
isim yazılarak “Enter” tuşuna basılır.
Save All: Pascal ile program yazarken, birden fazla program penceresi ard arda açılabilir. Komut
kullanıldığında açık olan bütün Pascal programları bilinen adları ile hafızaya alınır. Komutun
kullanılması için açık pencerelerdeki programlara daha önceden isim verilmiş olmalıdır.
Change Dir: Sadece Dos sürümü Turbo/Borland Pascalda bulunan bu komut, aktif çalışma
sürücüsü veya dizininin değiştirilmesi amacıyla kullanılır. Komut çalıştırıldığında istenilen dizin
veya sürücü seçilerek “Alt+K” tuş kombinasyonuna basılır veya tab tuşu ile “Ok” butonuna
gelinerek “Enter” tuşuna basılır.
Print: Aktif Pascal penceresindeki program listesinin yazıcıdan alınmasını sağlar.
Printer Setup: Printer seçimi ve printer ayarlamalarının yapılması için kullanılır. Komut
kullanıldığında Şekil 4 ‘te verilen diyalog kutusu ekrana gelir. Printer ve port bölümünden yazıcı
seçimi yapılır. Set Up.. tuşuna basıldığında yazıcı ayarlarında istenilen değişikliklerin yapılmasını
sağlayan diğer bir diyalog kutusu ekrana gelecektir. Burada kağıt boyutu, kağıdın yazıcıya
yerleştirilme şekli, kağıt kaynağı (el ile, üst tepsi, otomatik vb), kullanılacak kağıt kalitesi gibi
değişkenlerden istenilenleri seçmemize olanak sağlanmıştır.
Get Info: Sadece Dos sürümü Turbo/Borland Pascal 'da bulunan bu komut, program ile ilgili
bilgileri içeren bir diyalog kutusu ekrana gelir. Amacı programın ile ilgili çeşitli bilgilerin
programcıya sunulmasıdır.
Dos Shell: Sadece Dos sürümü Turbo/Borland Pascalda bulunan bu komut, geçici olarak Pascal
editörünün terkedilip Dos ortamına dönülmesi amacıyla kullanılır. Dos ortamından tekrar editöre
dönülmesi için Dos promptunda EXIT yazılır.
Exit: Pascal 'dan çıkış için kullanılır.
Edit Menüsü
Edit menüsü yardımıyla program içinde belli blokların silinmesi, başka yere taşınması,
kopyalanması gibi işlemleri yapabilmek mümkündür.
Yukarıda sözü edilen işlemlerin yapılabilmesi için öncelikle üzerinde işlem yapılacak program
bloklarının Shift ve Ok tuşlarına aynı anda basılması ile işaretlenmesi gerekmektedir. Metinin
işaretlenmesi işleminden sonra edit menüsü üzerinde görülen menü komutları çalıştırılır.
Cut: İşaretli metinin silinmesi amacıyla kullanılır. Kısa yol tuşu (Shift+Del).
Copy: İşaretli metini panoya (clipboard) kopyalar. Bu şekilde panoya kopyalanan metinin istenilen
yere kopyalanması işlemi için bu komuttan sonra aşağıda tanımlanan Paste komutunun
kullanılması gerekmektedir. Kısa yol tuşu (Ctrl+Ins).
Paste: Copy komutu ile panoya kopyalanan metinin editör üzerinde istenilen yere
kopyalanabilmesini sağlar. Kısa yol tuşu (Shift+Ins).
Compile Menüsü
Compile Menüsü (Şekil 11) editörde aktif bulunan Pascal programının derlenmesinde, bu
programa bağlı unit programların derlenmesinde ve yazılan Pascal programının dos/windows
ortamında kendi başına çalışır duruma yani; XXXXXXXX.EXE durumuna getirilmesi için kullanılır.
En çok kullanacağımız menü komutları aşağıda özetlenmiştir.
Compile: Editör ekranındaki aktif durumda olan programı derlemek amacıyla kullanılır. Kısa yol
tuşu (Alt+F9).
Make: Editör ekranındaki aktif durumda olan programı ve bu programa bağlı unit harici
programlarını en son değiştirilmiş halleriyle derleme işlemini yapar. Kısa yol tuşu (F9).
Build: Editör ekranındaki aktif durumda olan programları ve bu programa bağlı unit harici
programlarını birlikte derler.
Şekil 10. Compile Menüsü
Destination Memory (Disk): Sadece DOS Turbo Pascalda bulunan bu komut ile Programın
derlenerek çalıştırılacağı ortamın belirtilmesi için kullanılır. Seçenek üzerine “Enter” tuşuna
basılarak Memory yazılı bölüm Disk veya Disk yazılı ise Memory durumuna alınır. Destination
Disk durumunda derleme sonucunda program dos ortamında direkt olarak çalıştırılabilir.
Target: Yazılan programın derlenip çalıştırılacağı ortamı belirlemek için kullanılır. Pascal Real
mode, Protected mode ve Windows olmak üzere üç ortam sunmaktadır.
Editör ve derleyici ile ilgili detaylar kullanıcı kitaplarından veya Help menüsünden sağlanabilir
Run Menüsü
Run menüsünde yazılan programın çalıştırılması için bazı komutlar bulunmaktadır. Run
menüsünde bulunan menü komutları aşağıda özetlenmiştir.
Run: Programı derleyerek çalıştırır. Kısa yol tuşu (Ctrl+F9).
Şekil 9. Goto Line Number Diyalog kutusu
Program Reset: Sadece DOS sürümü Turbo/Borland Pascal‘de bulunan bu komut ile Step Over
veya Trace Into komutlarından biri çalıştırılınca, yapılan kontrolü durdurmak ve hata kontrolünü
tekrar programın ilk deyimi üzerine almak için kullanılır. Kısayol tuşu (Ctrl+F2).
Goto Cursor: Sadece DOS sürümü Turbo/Borland Pascal‘de bulunan bu komut ile editör
ekranındaki program yazılımında kursörün bulunduğu satıra kadar olan program bölümünün
derlenerek çalıştırılmasını sağlar. Kısayol tuşu (Ctrl+F4).
Trace Into: Sadece DOS sürümü Turbo/ Borland Pascal‘de bulunan bu komut ile editör
ekranındaki programın satır satır çalıştırılmasını sağlar. Kısayol tuşu (F7).
Step Over: Sadece DOS sürümü Turbo/ Borland Pascal‘de bulunan bu komut ile editör Trace On
durumuna geçer. Aktif durumdaki programın çalışması sırasında programın hangi satırları
izlediğini ve işlem sırasını izlemek amacıyla kullanılmaktadır. Kısayol tuşu (F8.)
Search Menüsü
Search Menüsü (Şekil 6), program yazımı sırasında belirli sözcüklerin aranması ve değiştirilmesi,
istenilen program satırına hızlı bir şekilde ulaşılması vb. gibi işlemlerin kolaylıkla yapılabilmesini
sağlar.
Find: Bu komut program içinde herhangi bir metinin aranması amacıyla kullanılır. Komut aktif hale
geldiğinde Şekil 7’deki diyalog kutusu ekrana gelir. Aranılacak metin, kendisi için ayrılmış alana
yazılarak klavyeden “Enter” tuşuna veya mouse ile Ok butonuna basılır.
Şekil 6. Search Menüsü
Bulunulan noktadan ileriye doğru arama yapılacak ise Direction bölümünde Forward terimi
işaretlenmeli, geriye doğru arama yapılacak ise Backward terimi işaretlenmelidir.
Şekil 7. Find Diyalog kutusu
Scope bölümünde, sözcüğün tüm dosya içinde aranılması isteniyorsa global, sadece seçilen
metinde aranılması isteniyorsa selected text bölümleri işaretlenmelidir. Origin bölümünde,
aramaya başlanacak sözcük, nokta bütün dosya içinde aranılacak ise entire scope, imleçin
bulunduğu noktadan itibaren aranılacak ise from kursor bölümleri seçilmelidir.
Replace:Yazılan program içinde kullanılan herhangi değişkenlerin veya Pascal sözcüklerinin
başka bir değişken veya Pascal sözcüğü ile değiştirilmesi gerekebilir. Bu komut kullanıldığında
Şekil 8’deki diyalog kutusu ekrana gelir. Text to find’ 'in karşısında ayrılmış alana değiştirilmesi
istenilen sözcük, New Text’ in karşısındaki ayrılmış alana yeni sözcük yazılır. Değiştirilecek
sözcük programın tamamında veya birden çok yerinde değiştirilecek ise Change all tuşunun
üzerine gelinir ve klavyeden “Enter”, mouse ile Ok butonuna basılır. Programda aranılan metin
bulunduğunda değişim için kullanıcıdan onay bekleyen bir diyalog kutusu ekrana gelir. Değişime
onay için “Y”, değişime hayır demek için “N” tuşuna basılır.
Şekil 8. Replace Diyalog kutusu
Search Again: Find menü komutu ile arama yapıldığında, program içinde aranılan metine ilk
karşılaşılan yerde arama kesilir. Aynı metini tekrar aramak için Search Again menü komutu
kullanılır.
Goto Line Number: Program içinde istenilen program satırına hızlı bir şekilde ulaşılmasını sağlar
(Şekil 9). Komutun kullanımıyla ekrana gelen diyalog kutusunda ayrılmış alana satır numarası
yazılarak “Enter” tuşuna basılır
Write-Writeln
Pascal programlama dilinde yazma işlemi için WRITE ve WRITELN komutları kullanılmaktadır.
Bu komutların genel kullanım yapısı şu şekildedir
Write(A1,A2,A3,...,An)
Writeln(A1,A2,A3,...,An)
İki kullanım şekli arasındaki fark, Read ile Readln arasındaki fark gibidir. İfadeler Write ile
yazdırıldıktan sonra kursör aynı satırda bekleyecektir, Writeln ile yazdırılması durumunda ise
kursör bir sonraki satıra geçecektir.
Var
s,a,n:integer;
......
begin
s:=3;a:=9;n:=5;
Write(s);
Write(a);
Write(n);
End.
Programın çalıştırılmasıyla elde edilen sonuç;
395
olacaktır.
Aynı değişkenleri Writeln ile yazdırdığımızda;
Var
s,a,n:integer;
......
begin
s:=3;a:=9;n:=5;
Writeln(s);
Writeln(a);
Writeln(n);
End
3
9
5
elde edilecektir.
Read-Readln
Pascal 'da okuma işlemi için kullanılan komutlar READ ve READLN olup genel kullanım yapısı şu
şekildedir;
Read(A1,A2,A3,...,An)
ReadLn(A1,A2,A3,...,An)
Read ile Readln arasındaki fark: Read, okuma işlemi tamamlandıktan sonra aynı satırda
kalınmasını, Readln ise yeni bir satıra gelinmesini sağlar. Bir Pascal programı içerisinde bu iki
komutun kullanımı aşağıdaki program parçasında verilmiştir.
Var
s,a,n:real;
begin
Read(s,a,n)
end.
Okunacak değerlerin düzeni;
12.45 43.543 62.12
Aynı değerleri ReadLn ile okutturmak istersek;
Var
s,a,n:real;
begin
Readln(s,a,n)
end.
Okunacak değerlerin düzeni yukarıdaki okuma düzeni ile aynı olabileceği gibi her değer ayrı bir
satırda verilebilir, her hangi satırlarda verilebilir, örnek olarak s, a ve n değerleri aşağıdaki okuma
düzeninde okutturulmuştur.
12.45 43.543
62.12
For-Do
For deyimi, bir program parçasının herhangi bir boolean şartına bağlı olmaksızın belirlenen
sayıda üstüste çalıştırılması için kullanılır. For deyiminin genel kullanım şekilleri aşağıda
verilmiştir.
1. FOR Kontrol Değişkeni :=Başlangıç_Değeri TO Son_değer DO
Begin
İşlemler
End;
Bu kullanım şeklinde başlangıç değeri bitiş değerinden küçük olmak zorundadır. TO ifadesiyle
başlangıçtan bitişe kadar artarak tekrar yapılacağını, DO ifadesi de tanımlanan işlemlerin
tekrarlanacağını bildirir
For-Downto
FOR Kontrol Değişkeni :=Başlangıç_Değeri DOWNTO Son_değer DO
Begin
İşlemler
End;
For deyiminin bu kullanım şeklinde başlangıç değeri bitiş değerinden daima büyük olup
DOWNTO ifadesi de döngü değişkeninin tekrarlama işleminde azalacağını belirtir. DO ifadesi ise
belirtilen işlemlerin döngü sayısınca tekrarlanacağını bildirir.
Turbo Pascal dilinde diğer programlama dillerinden farklı olarak başlangıç değerinden son değere
artışlar/azalmalar birer birer olmaktadır. Aşağıdaki örnek programları inceleyiniz.
Program Hesap_plani;
Uses Crt; {Windows için Wincrt}
var i:byte;
Hesapkod:String[ 10] ;
Hesapadi:String[ 20] ;
begin clrscr;
for i:=1 to 5 do
begin
Write('Hesap Kodu ........:');Readln(HesapKod);
Write('Hesap Adı............:');Readln(HesapAdi);
end;
Readln;
end.
Örnek:Aşağıdaki örnek Program; 1'den 8'e kadar artan ve 9'dan 3'e kadar birer birer azalan içiçe
for do döngülerinin kullanımını göstermektedir.
Program icice_for_ornek;
Uses crt; {Windows için Wincrt}
Var
i,j:byte;
Begin
For i:=1 to 8 do
Begin
for j:=9 downto 3 do
Begin
Write(i*j:6);
end;
Writeln;
end;
Readln;
End.
Örnek: 'A' dan 'Z' ye kadar büyük harfleri ekrana yazdıran Pascal programı.
Program Odev;
var ch:=Char;
begin
Writeln('BÜYÜK HARFLER');
for ch:='A' to 'Z' DO
Write(Ch,' ');
end.
Örnek. Klavyeden girilen bir ifadeyi tersten yazdıran program.
program terstenyazma;
uses crt; {Windows için Wincrt}
var
mesaj:string;
i,l:byte;
begin
Write('Bir mesaj yazınız');
Readln(mesaj);
l:=length(mesaj);
Writeln(L);
for i:=L downto 1 do
Write(Copy(mesaj,i,1));
End.
Repeat-Until
Bir program bloğunun belli bir şart sağlanıncaya kadar üst üste çalıştırılmasını sağlayan REPEAT
deyiminin genel formu aşağıdaki şekildedir.
Repeat
.
Program Satırları
.
Until (Boolean Şartı)
Burada repeat, tekrar etme anlamında olup, tekrar etme işi UNTIL deyimindeki boolean ifadesi
sağlanıncaya kadar devam eder. Bu deyim program satırları bölümüne herhangi bir şey
yazılmaksızın kullanılabilir.
Bu döngünün en büyük avantajı belirli bir sayı ile sınırlandırılmamış olmasıdır. Boolean
ifadesindeki şart sağlanıncaya kadar işlemlere devam edilmektedir.
Dikkat edilirse şart cümlesinin aldığı değer ne olursa olsun program bloğu bir kez çalışmaktadır.
Örnek : Aşağıda verilen Pascal programı karton fabrikasındaki kenar kesme ünitesinde, kesme
makinasından çıkan kartonların ortalama ağırlıklarını hesaplamaktadır. Karton ağırlığı olarak 0
girildiğinde programın çalışması sona ermektedir.
Program ornek_repeat;
uses wincrt;
var
i,sayi:integer;
top,ort:real;
begin
clrscr;
i:=0;top:=0;ort:=0;
Repeat
i:=i+1;
Write(i,'. Kartonun Ağırlığını Giriniz =');
Readln(sayi);
Top:=top+sayi
Until (Sayi=0);
ort:=top/(i-1);
Writeln;Writeln;
Writeln(i-1,' Adet Kartona ait Ağırlık Ölçümü Yapılmıştır.');
Writeln(i-1,' Adet Kartonun Toplam Ağırlığı =',top:6:3);
Writeln('Girilen sayıların ortalaması =',ort:6:3);
repeat until KeyPressed;
end.
While-Do
Bir program bloğunun belli bir şart sağlandığı sürece üst üste icrasını sağlayan WHILE deyiminin
genel yazılış şekli aşağıdadır.
While <şart cümlesi> Do BLOK
Do kelimesini takibeden blok WHILE deyimi tarafından döngüye sokulacak komut cümlelerini
kapsar. Komut cümlesi sayısı birden fazla ise, bu bloğun BEGIN...END deyimleri arasına
alınması zorunludur.
WHILE ile REPEAT arasındaki fark; Repeat döngüsü şart cümlesi yanlış olduğu sürece, While
döngüsü ise şart cümlesi doğru olduğu sürece devam etmesidir.
Örnek : Repeat -Until ile yapılan örnek programı WHILE-DO ile yapalım.
program ornek_While;
uses wincrt;
var
i,sayi:integer;
top,ort:real;
begin
clrscr;
Write('1. Kartonun Ağırlığını Giriniz =');
Readln(sayi);
i:=1;top:=0;ort:=0;
While Sayi>0 do
begin
Top:=top+sayi;
i:=i+1;
Write(i,'. Kartonun Ağırlığını Giriniz =');
Readln(sayi);
end;
ort:=top/(i-1);
Writeln;Writeln;
Writeln((i-1),' Adet Kartona ait Ağırlık Ölçümü Yapılmıştır.');
Writeln((i-1),' Adet Kartonun Toplam Ağırlığı =',top:6:3);
Writeln('Girilen sayıların ortalaması =',ort:6:3);
repeat until KeyPressed;
end
IF Deyimi
IF deyimi, bir şartın doğru veya yanlış olmasına bağlı olarak programın belirli parçalarının
çalışmasını veya çalışmamasını sağlar. IF deyimi,
IF şart cümlesi THEN Blok1;
veya
IF şart cümlesi THEN Blok1 ELSE Blok2;
şeklinde kullanılabilir.
Buradaki şart cümlesi, birbirlerine mantıksal operatörler ile bağlanmış bir veya birkaç ilişkisel
operasyon veya bir tek boolean ifade olabilir. Aşağıdaki örnekleri inceleyelim:
IF A=B THEN ...
IF (A=B) AND (A=C) THEN ...
IF (A+1) < (B-1) THEN ...
IF (Cev In ['E' , 'e']) THEN ...
Then sözcüğünü takiben, bloklar birden fazla komut cümlesinden oluşurlar ise, bu blokların
BEGIN ve END deyimleri içine alınması zorunludur. IF deyiminin ikinci şekli yani ELSE' den sonra
gelen komut veya komutlar dizisi geçerlilik kazanmışsa, ELSE' den önce gelen komut cümlesinin
yada, End deyiminin sonuna ';' işareti konulmaz. Aşağıdaki örneklerden 1.si hatalı 2.si doğrudur.
IF A=B Then Writeln ('Eşit'); Else Writeln ('Farklı');
IF A=B Then Writeln ('Eşit') Else Writeln ('Farklı');
IF deyimi içinde kullanılan Blok1 ve Blok2 çeşitli komut cümlelerinden oluşabileceğine göre bu
blokların içinde başka IF cümleleri de yer alabilir. IF deyimlerinin bu şekilde kullanılmasına iç içe
IF deyimleri adı verilir. IF cümlesinde yer alan her iki bloğun geçerlilik kazanması söz konusu
olamaz.
IF degisken_1 <kosul> degisken_2 then
begin
-----
islemler
-----
end;
Bu kullanım şekli IF deyiminin en yalın şekillerinden biridir. Degisken_1 ile Degisken_2 arasındaki
koşulun durumuna göre THEN ifadesinden sonra gelen işlemler yapılır.
Örnek: Aşağıda verilen kodlarına göre daire, üçgen ve dikdörtgenin çevresini hesaplayan Pascal
programını yazınız.
1. Üçgen
2. Dikdörtgen
3. Daire
Program Cevre_Hesabi;
uses crt; {Windows için Wincrt}
var
sekil:byte;
uzun1,uzun2,uzun3:real;
cevre:real;
Begin
Writeln('1. Üçgen');
Writeln('2. Dikdörtgen');
Writeln('3. Daire');
Write('Şeklin Kodunu Giriniz');
Readln(Sekil);
If Sekil=1 then
Begin
Write('Uçgenin 1. Kenar Uzunluğunu giriniz :');readln(Uzun1);
Write('Uçgenin 2. Kenar Uzunluğunu giriniz :');readln(Uzun2);
Write('Uçgenin 3. Kenar Uzunluğunu giriniz :');readln(Uzun3);
Cevre:=uzun1+uzun2+uzun3;
end;
If Sekil=2 then
Begin
Write('Dikdörtgenin Kısa Kenar Uzunluğunu giriniz:') ;
readln(Uzun1);
Write('Dikdörtgenin Uzun Kenar Uzunluğunu giriniz :');
readln(Uzun2);
Cevre:=2*(uzun1+uzun2);
End;
If Sekil=3 then
Begin
Write('Dairenin yarıçapını giriniz :');readln(Uzun1);
Cevre:=2*pi*Uzun1;
End;
Writeln('Seçilen Nesnenin Çevre Uzunluğu =',Cevre:8:2);
End.
Örnek : Aşağıda verilen kodlara göre birim dönüşümlerini veren Pascal programı yazınız.
Fahrenhayt 'tan (F) Santigrad 'a (C) : C=5/9*(F-32)
İnç 'ten (I) Santimetre 'ye (Cm) : Cm=2.54*I
Mil 'den (M) Kilometre 'ye (Km) : Km=1.6*M
Pound 'dan (P) Kilogram 'a (Kg) : Kg=0.45*P
Program metrik_cevrimler;
uses crt; {Windows için Wincrt}
var kod:byte;
F,C,I,Cm,M,Km,P,Kg:real;
Begin
Writeln('Çevrim Kodları');
Writeln('1. Fahrenhayt -> Santigrad');
Writeln('2. İnç -> Santimetre ');
Writeln('3. Mil ->Kilometre ');
Writeln('4. Pound -> Kilogram ');
Write('Çevrim Kodunu Giriniz ='); Readln(Kod);
If Kod=1 then begin
Write('Fahrenhayt Değerini Giriniz ='); Readln(F);
C:=5*(F-32)/9;
Writeln('Santgrad Değeri =',C:7:2,' °');
end;
If Kod=2 then
Begin
Write('İnç Değerini Giriniz ='); Readln(I);
Cm:=2.54*I;
Writeln('Santimetre Değeri =',Cm:7:2);
end;
If Kod=3 then
Begin
Write('Mil Değerini Giriniz ='); Readln(M);
Km:=1.6*M;
Writeln('Kilometre Değeri =',Km:7:2);
end;
If Kod=4 then
Begin
Write('Pound Değerini Giriniz ='); Readln(P);
Kg:=0.45*P;
Writeln('Kilogram Değeri =',Kg:7:2);
End;
End
If Then Else Yapısı
IF degisken_1 <kosul> degisken_2 then
begin
-----
islemler
-----
end
ELSE
begin
-----
islemler
-----
end;
Bu yapı kullanıldığında, Degisken_1 ile Degisken_2 belirtilen koşulu karşıladıkları zaman THEN
ifadesinden sonra gelen işlemler, aksi halde ELSE ifadesinden sonra tanımlanan işlemler
yaptırılır.
IF degisken_1 <kosul> degisken_2 then
begin
islemler1;
end
else
if degisken_3 <kosul> degisken4 then
begin
islemler2;
end
else
if degisken_5 <kosul> degisken6 then
begin
islemler3;
end;
Örnek:Aşağıdaki program klavyeden girilen yılın kaç gün olduğunu vermektedir. Programı
inceleyiniz.
program deneme;
uses crt; {Windows için Wincrt}
var
yil:integer;
begin
clrscr;
Write('Gun Sayisini ogrenmek istediginiz yili giriniz :');
readln(yil);
if (yil mod 4 )=0 then
begin
Writeln('Yil 366 gun');
End
Else
Begin
Writeln ('Yil 365 gun');
end;
readln;
end.
Case ... Of
Bir değerin birden fazla değer ile karşılaştırmasını yapan ve bir eşitliğin bulunması halinde belli
program parçalarının çalıştırılmasını sağlayan CASE deyiminin genel formu aşağıda verilmiştir.
CASE Kontrol Değişkeni OF
Etiket1 : Blok1 ;
Etiket2 : Blok2 ;.
Etiketn : Blokn ;
ELSE BLOK;
END;
Kontrol değişkeni real haricindeki standart tiplerden birine sahip olan bir değişkendir. CASE
deyimi içindeki etiketler LABEL olarak tanımlananlardan farklıdır. Bunlar sabit değerler olup,
kontrol değişkeni ile aynı tipe sahiptir. Etiketi takip eden bloklar ise PASCAL komut cümlelerinden
meydana gelir. Komut cümleleri birden fazla ise BEGIN END deyimleri arasına yazılması
zorunludur. Etiketlerin dışında yazılan ELSE deyimi ve bunu takip eden blok seçimliktir
Örnek : Aşağıda kişinin yaşı girildiğinde, yaşına uygun mesajlar veren bir Pascal programı
verilmiştir
Program Yasdilim;
Uses wincrt; {Dos için CRT}
Var yas:integer;
Begin
Clrscr;
Write('Yaşınızı Giriniz :');
ReadLn(YAS);
CASE yas OF
0..5:Writeln('Yaşınız 0-5 arasında');
5..15:Writeln('Yaşınız 5-15 arasında');
15..35:Writeln('Yaşınız 15-35 arasında');
35..50:Writeln('Yaşınız 35-50 arasında');
50..85:Writeln('Yaşınız 50-85 arasında');
else Writeln('Çok Yaşayın');
end;
Readln;
End.
Örnek : Bir diyet uzmanı insanlara , geliştirmiş olduğu değişik üç tür diyeti uygulamayı
düşünmektedir.
1.tür diyet 60 kilo ve altındaki insanlara uygulanacak kilo aldırıcı program.
2.tür diyet 61 ile 80 kilo arasındaki insanlara uygulanacak kilo aldırmayan program.
3.tür diyet 81 ile 150 kilo arasındaki insanlara uygulanacak kilo zayıflatıcı programdır
Buna göre 10 kişi arasında yapılan bir anketle ,bu üç programa kaçar kişinin düştüğünü ve bu
gruplardaki ortalama kiloları bulan bir PASCAL programını yazınız.
Program rejim_anket;
uses crt; {Windows için Wincrt}
var kilo,grp1,grp2,grp3,i,j,k:integer;
grp1ort,grp2ort,grp3ort:real;
grp1top,grp2top,grp3top:integer;
BEGIN
for i:=1 to 10 do
begin
write('Kişinin Kilosunu giriniz :');Readln(Kilo);
case kilo of
0..60: begin
grp1:=grp1+1;
grp1top:=grp1top+kilo;
end;
61..80: begin
grp2:=grp2+1;
grp2top:=grp2top+kilo;
end;
81..150: begin
grp3:=grp3+1;
grp3top:=grp3top+kilo;
end;
end;
end;
grp1ort:=grp1top/grp1;
grp2ort:=grp2top/grp2;
grp3ort:=grp3top/grp3;
Writeln('1. Gruptaki kişi sayısı =',grp1,' 1. Gruptaki kilo ortalaması =',grp1ort:8:2);
Writeln('2. Gruptaki kişi sayısı =',grp2,' 2. Gruptaki kilo ortalaması =',grp2ort:8:2);
Writeln('3. Gruptaki kişi sayısı =',grp3,' 3. Gruptaki kilo ortalaması =',grp3ort:8:2);
repeat until keypressed;
End.
Yukarıda verilen programda; for i:=1 to 10 do satırı ile yapılan işlemin 10 kez tekrar edileceği
belirtilmektedir. (For .. do yapısı için 9. Bölüme bakınız.)
Örnek : Kare, dikdörgen, üçgen ve daire alan hesabı yapan bir Pascal programı hazırlanacaktır.
Programda alanı hesaplanacak nesneyi belirttikten sonra ilgili alanın hesaplanabilmesi için
CASE...OF yapısı kullanılacaktır.
program Sekillerin_alan_hesabi;
uses Crt; {Windows için Wincrt}
var Ch : char;
uzun,gen,yuk,Taban,ycap: real;
Alan_Kare,Alan_Dortgen,Alan_Ucgen,Alan_Daire:real;
i:byte;
begin (* Ana program *)
Writeln;
Writeln('Lütfen Alan Hesabı Yapacağınız Nesneyi seçiniz :');
Writeln;
Writeln('[K]are');
Writeln('[D]ikdörtgen');
Writeln('[u]çgen');
Writeln('d[A]ire');
Writeln('[C]ıkış');
Write('Alan hesabı yapılacak nesne (K/D/U/A) ?=');
Readln(Ch);
case UpCase(Ch) of
'K' : begin
Write('Karenin kenar uzunluğu =');
Readln(uzun);
Alan_Kare:= uzun*uzun;
Writeln('Alan ',Alan_kare:12:4);
end;
'D' : begin
Write('Dörtgenin Genişliği = ');
Readln(gen);
Write('Dörtgenin Yüksekliği =');
Readln(yuk);
Alan_Dortgen:=gen*yuk;
Writeln(' Dörtgenin Alanı= ',Alan_Dortgen:12:4);
end;
'U' : begin
Write('Üçgenin Taban Uzunluğu =');
Readln(Taban);
Write('Üçgenin Yüksekliği =');
Read(yuk);
Alan_Ucgen:=taban*yuk/2;
Writeln('Üçgenin Alanı = ',Alan_Ucgen:12:3);
end;
'A' : begin
Write('Dairenin Çapı =');
Readln(Ycap);
Alan_Daire:= sqr(ycap)*Pi;
Writeln('Dairenin Çapı =',Alan_Daire:12:3);
end;
'C' : begin Writeln('Bitti');exit; end;
else Writeln(' Tanımsız giriş');
end;
end. (* Ana program sonu *)
Continue
Fortran programlama dilinde olduğu gibi tekrarlama çevrimini yeniden başlatır. Programcı, bilgi
girişlerinde kullanıcının sayısal olmayan bir giriş yapacağını varsayarak önlem almak amacıyla
tekrarlama işlemlerini yeniden başlatmak için CONTINUE komutu kullanılır. Bu deyim PASCAL
7.0 ' da geçerlidir.
Program Continue_Kullanimi;
Uses Crt; {Windows için Wincrt}
Const
n=5;
var
sayac,i:integer;
rakam :Array [ 1..n] of Real;
toplam:Real;
begin
clrscr;toplam:=0; sayac:=1;
While sayac < n do
begin
Write(Bir Sayı Giriniz:');
{$I-}
Readln(Rakam[ sayac] );
{$I+}
If IOResult >0 then
begin
Writeln('Rakam girmelisiniz');
CONTINUE;
end;
sayac:=sayac+1
end;
For I:=1 to sayac do
toplam:=toplam+rakam[ i] ;
Writeln('Toplam Sayı :',Toplam:7:2);
end.
Örnek program çalıştırıldığında kullanıcının hatalı bir giriş yapması halinde Run Time Error hatası
oluşacaktır. Bu hatalı durum IORESULT hata durumu fonksiyonu ile kontrol ettirilerek programın
kırılması önlenir ve CONTINUE komutu tekrarlama çevrimini tekrar başlatır. Ancak hata yoklama
rutinleri {$I-} ile pasif duruma düşürülmüştür. IORESULT fonksiyon değeri kontrolü yapabilmek
için {$I-} derleme komutu verilerek Pascal hata yoklama rutinleri pasif duruma alınmalıdır. Ancak
kontrol işlemi bittikten sonra hata yoklama rutinleri {$I+} ile tekrar aktif duruma getirilmelidir.
Break
Turbo Pascal 7.0 programlama dilinde bir döngüyü kırarak sona erdirmek amacıyla kullanılır.
Program içinde BREAK deyimiyle karşılaşıldığında içinde bulunduğu döngüden sonraki program
satırının işler hale getirir. BREAK komutu FOR-DO, REPEAT-UNTIL ve WHILE-DO döngülerinin
içinde kullanılabilir.
Konunun daha iyi anlaşılabilmesi için aşağıdaki örneği inceleyiniz. Örnek Programda i ve j gibi iki
sayının çarpımı yapılmaktadır. i=j olduğu durumda içteki döngü BREAK deyimi ile kırılmakta ve i
'nin değeri bir üst değere arttırılarak programın çalışmasına devam edilmektedir.
Program break_kullanimi;
uses crt; {Windows için Wincrt}
var i,j:integer;
begin
clrscr;
for i:=1 to 10 do
begin
Writeln(i,'. değeri ');
for j:=1 to 10 do
begin
if i=j then break; (* i=j olduğu takdirde içteki döngünün çalışması sona eriyor*)
Writeln(i:3,' * ',j:3,'= ',i*j:3);
end;
Writeln('Devam Etmek için ENTER tuşuna Basınız');Readln;
end;
end.
GOTO Deyimi
Programın çalışma yönünün değiştirilmesi için kullanılan GOTO deyiminin genel kullanımı şu
şekildedir;
GOTO Etiket;
GOTO deyimi ile kullanılan etiket, çalışma akışının yönlendirileceği noktayı gösterir. Bu etiketin
programın tanım bloklarının olduğu yerde LABEL adı verilen bölümde tanımlanması gereklidir.
GOTO deyiminin kullanıldığı program bloğu içinde bulunması zorunludur. Etiket, bir komut
cümlesinin yani bir program noktasının etiketlenmesi için yazıldığında kendisinden sonra \" : \"
karakterinin yazılması zorunludur.
GOTO deyimleri ile ana program ve alt programlar arasında veya bir alt program ile başka bir alt
program arasında dallanma yapılamaz. Ayrıca, IF, CASE, FOR, REPEAT, ve WHILE deyimlerinin
blokları içine dallanılamaz. Ancak bu deyimler ile kullanılan bloklar içinden, dışarıya dallanma
yapılabilir.
Turbo PASCAL' daki kontrol ve döngü deyimlerinin etkinliği ve PASCAL programlarının yapısallığı
GOTO deyimine ihtiyacı ortadan kaldırır. Basic ve Fortran' da yazılan programlarda bol miktarda
görülen GOTO deyimlerine Pascal programlarında pek rastlanmamaktadır.
Örnek:Aşağıdaki program, 1' den n sayısına kadar olan sayıların toplamını hesaplamaktadır.
Program içinde üç kez GOTO deyimi kullanılmıştır. GOTO devam şeklindeki komut cümlesi
şartsız, diğerleri ise şartlıdır.
Uses crt; {Windows için Wincrt}
Var
I,N : INTEGER;
Top : REAL;
Cev : Char;
Label
Basla, Devam, Son;
Begin
Başla:
Clrscr;
I:=0;
Top:=0;
Write('Bir sayı giriniz=');
Readln (N);
Devam:
I:=I+1;
Top:=Top+1;
IF I=N then goto son;
GOTO DEVAM;
Son:
Writeln('1 den', N,'e kadar sayıların toplamı=', Top:5);
Writeln;
Write ('Devam Edecek misiniz :');
Readln (Cev);
IF Cev In ['E' , 'e'] then GOTO Basla;
End.
Halt
Programın kararlaştırılan bir yerinde durdurulmasını sağlar. ENTER tuşuna basıldıktan sonra
varsa HALT komutundan sonra tanımlanan program satırları çalıştırılır.
program halt_ornek;
begin
if 1 = 1 then
begin
WritelN('Halt Deneme 1');
if 2 = 2 then
begin
WritelN('Halt Deneme 2');
if 3 = 3 then
begin
WritelN('Halt Deneme 3');
Halt(1);
end;
end;
end;
Writeln(' Bu Çalıştırılamayacaktır');
readln;
end
Exit
Program işlem bloklarında tanımlanan herhangi bir koşulun gerçekleşmesi halinde program
bloğunun akışını durdurur.
uses Crt; {Windows için Wincrt}
begin
repeat
if KeyPressed then Exit;
Write('Xx');
until False;
end.
Forward İfadesinin Kullanımı
Program içinde tanımlanan Prosedür blokları içinde bazılarının programın daha sonraki
satırlarında tanımlanacağını belirten ifadedir. FORWARD deyimi, sonra tanımlanacak prosedür
bloğu devamında kodlanmalıdır.
Aşağıdaki örnek programda ASAMA2 prosedür bloğu devamında görülen FORWARD ifadesi blok
bilgilerinin daha sonra tanımlanacağını belirtir. Program I>10 olduğu durumda sona erecektir
program procedure_ornekleri;
uses crt; {Windows için Wincrt}
var i:integer;
Procedure Asama2;forward;
Procedure Asama1;
Begin
i:=i+1;
Write(I,'.');
Asama2;
End;
Procedure Asama2;
Begin
Write(I*i,'.');
if i>10 then halt;
readln;
Asama1;
End;
begin
clrscr;
i:=1;
asama1;
end.
Yukarıda verilen iki örnek programda procedure ismini takiben herhangi bir değişken adı
yazılmadığına dikkat ediniz.
Kullanıcı Tanımlı Function Alt Programları
Pascal’da altprogramlar başlığı altındaki yapısal modüllerden bir diğeri de fonksiyonlardır
(function). Function ve Procedure arasındaki farkı anlayabilmek için procedure ve function olarak
ayrı ayrı yazılmış bir uygulama üzerinde duralım.
PROCEDURE Toplam(X,Y:integer; var Z:integer);
begin
Z:=X+Y;
end;
FUNCTION Toplam (X,Y:integer):Integer;
begin
TOPLAM:=X+Y;
end;
Örnekte toplam isimli alt yordam (Procedure) X ve Y tamsayılarının toplamını referans
parametresi türündeki Z değişkeni aracılığı ile getirir. Procedure durumunda geri döndürülecek
değer, VAR ile tanımlanmış bir değişkene atanmaktadır. Fonksiyon olarak tanımlanan TOPLAM
modülü ise toplamı kendisi getirmektedir. Fonksiyon sona erdirilmeden önce geri döndürülecek,
fonksiyonun ismine atanmaktadır. Toplam isimli fonksiyon, integer tiptedir.
Procedure olarak yazılan TOPLAM alt programı ;
Toplam (A;B;T); (Procedure)
şeklinde çağırılırken function şeklinde geliştirilmiş Toplam alt programı ;
T:=Toplam(A;B); (Function)
komutuyla çağırılır.
Alt programlar
Yapısal programlamanın en önemli yaklaşımlarından biri, temel uygulamayı bir takım parçalara
bölerek gerçekleştirmektir. Pascal'da bu parçalar altyordam (procedure) veya fonksiyon (function)
olarak kodlanır. Yapısal programlamanın temel tercih nedeni, program modüllerinin bağımsız
olarak geliştirilmeleri ve çalışıp çalışmadığının kolaylıkla anlaşılabilmesidir.
Alt programlar genellikle tekrar edilen işlemleri kolaylıkla yapabilmek için yazılırlar. Tekrar edilen
işleme örnek olarak, programımız içinde birden fazla yerde faktöriyel hesabı yapmamız gerekiyor
ise bunu bir alt program ile hesaplatmamız halinde aynı işleme sahip program satırlarının tekrarı
önlenecek, programın takibi kolaylaşacak ve daha verimli hafıza kullanımı söz konusu olacaktır.
Bilgisayar dillerinin tamamında bulunan alt program yapısı PASCAL Programlama dilinde
PROCEDURE ve FUNCTION türü alt programlar olmak üzere iki ayrı türdedir. Bu iki ayrı tür alt
programlar birbirlerine benzer özellikler taşımalarına rağmen yapısallık ve icra açısından bazı
farklılıklar içerirler.
Alt programlarda yapılacak işlemler, ana program içinde nerede gerekiyor ise o noktada ilgili
işlemleri yapan alt programın adı yazılarak devreye sokulur.
1.1 Alt Programlar Hakkında Genel Bilgiler
*Her alt programın bir başlığı, bir tanım bloğu, bir de icra bloğu vardır.
*Ana programlar PROGRAM deyimi, prosedür alt programlar PROCEDURE, fonksiyon alt
programlar FUNCTION deyimi ile başlar.
*Alt program adının hemen yanında verilen parametreler değer transferi işlemleri için kullanılırlar.
Bir alt programa değer transferi yapılarak, her bir çalışmada verilen değişik değerlere bağlı olarak
değişik sonuçlar üretmek mümkündür.
*Alt program isminin yanına parametre yazmak seçime bağlıdır. Eğer parametre yazılıyor ise
bunlar procedure isminin yanına parantez içinde yazılırlar.
*Pascal programlama dilinde formal ve aktüel parametreler olmak üzere iki tür parametre
tanımlanabilir. Formal parametreler, programın tamamına ait olmayıp sadece değer transferi için
kullanıldıklarından geçici paramatreler olarak isimlendirilebilirler. Yani bu parametreler ile sadece
alt program içinde çalışılabilir. Ana programda, alt programın çalıştırılması için yazılması gereken
alt programın yanında yazılan parametreler ise Aktüel parametre adını alırlar. Burada aktüel ve
formal parametrelerin sıralanış, sayı ve tip bakımından aynı olması gerekir.
Procedure Alt Programlar
Bir pascal programında Procedure alt programlara erişim ve procedure alt programın program
içindeki yeri aşağıdaki genel gösterim şeklinde verilmiştir.
Program ad_;
procedure Altprogram1;
begin
işlem blokları;
end;
procedure Altprogram2;
begin
işlem blokları;
end;
(* ANA PROGRAM*)
BEGIN
işlemler;
Altprogram1;
Altprogram2;
........
işlemler;
........
Altprogram1 ;
........
END.
Alt programlarda, ana programlarda olduğu gibi sabit, değişken ve çeşitli tip tanımlamaları
yapılabilir. Yapılan bu tanımlamalar, alt program aktif olduğu sürece geçerli olup alt programın
çalışması sona erdiğinde alt programda tanımlanan değişken, sabit ve tipler bellekten silinir.
Procedure işlem blokları iki şekilde kullanılır,
1. Parametresiz Prosedürler
2. Parametreli Prosedürler
Parametreli Prosedürler
Ana program ve alt programlarda tanımlanan değişkenlerin farklı olması durumunda tercih
edilirler. Ana programda tanımlanan değişken değerlerinin işleme alınmaları, alt programda
tanımlanan değişkenlere aktarılarak yapılır.
Parametreli prosedürlerde de tek yönlü ve çift yönlü olmak üzere iki ayrı tür değer transferi söz
konusudur. Eğer procedure ismini takiben parametrelerin tanım cümlesi VAR ile başlıyorsa
parametreler arasında çift yönlü değer transferi yapılacak demektir. Yani ana programda
kullanılan değişkenler alt programa aktarılacak ve alt programın çalışması sona erdiğinde sonuç
değerler ana programa transfer edilir.
Tek yönlü değer transferinde ise parametrelerin tanım cümlesi VAR ile başlamaz, değer transferi
ana programdan alt programa olur ve alt programın icrası sonunda ortaya çıkan sonuçlar ana
programa transfer edilmez. Her iki tür için yazım örnekleri aşağıda verilmiştir.
Tek yönlü Transfer :Procedure Altyordam(X;Y;Z:integer;KAD:real);
Çift yönlü Transfer :Procedure Altyordam(VAR X;Y;Z:integer;VAR KAD:real);
Veri transferinde String değişken veya bir dizi değişken formal parametre olarak tanımlanamaz.
String ve dizi değişkenler formal parametre olarak kullanılacaksa, tip bildirisinin özel bir tip ismi
olarak verilmesi gerekir. Aşağıda verilen örnekler sözü edilen kurala göre hatalı yazılmışlardır.
Procedure Altyordam(A:Array1..100 of real);
Procedure Altyordam2(S:String200);
Uygun tanımlamalar yapmak için Type bölümünden yararlanılmalıdır. Aşağıda verilen örnek
tanımlar özel tip isimler kullanıldığı için geçerlidir.
Type
Oz=Array1..100 of real;
sozcuk=String200;
Procedure Altyordam(A:Oz);
Procedure Altyordam2(S:Sozcuk);
Ana programdan alt programa transfer sırasında tanım bloklarında kullanılan parametrelerin
tipleri aynı olmak zorundadır. Aksi takdirde 'Tip Uyuşmazlığı' hatası meydana gelecektir.
Aşağıdaki örnek programları inceleyiniz.
program paramli1;
uses crt; {Windows için Wincrt}
var
a,b,t:integer;
procedure toplam(x,y:integer);
begin
t:=x+y;
end;
begin
clrscr;
readln(a);
readln(b);
Toplam (a,b);
Writeln(t);
end.
program paramli2;
uses crt; {Windows için Wincrt}
var
a,b,t:integer;
procedure toplam(x,y:integer;var z:integer);
begin
z:=x+y;
end;
begin
clrscr;
readln(a);
readln(b);
Toplam (a,b,t);
Writeln(t);
end.
Yukarıdaki programda X ve Y değerlerinin toplamları Writeln(t); program satırında ekrana
yazdırılmaktadır. Aynı programda toplamı yazdırmak istenilen parametre değiştirildiğinde program
hata verecektir. Aşağıdaki program derlendiği zaman çalışmayacak ve 3 nolu hata meydana
gelecektedir. Programı yazarak hatanın nedenini anlamaya çalışınız.
program hatali_paramli;
uses crt; {Windows için Wincrt}
var
a,b,t:integer;
procedure toplam(x,y:integer;var z:integer);
begin
z:=x+y;
end;
begin
clrscr;
readln(a);
readln(b);
Toplam (a,b,t);
Writeln(z);
end.
Örnek 4: Aşağıdaki örnek programda dizgi isimli tek boyutlu bir dizi oluşturulmuş ve bu dizinin
elemanları sıra ile 1-100 arasındadır. Bu dizi değer aldıkça altprograma değer transfer etmekte ve
alt programda bu dizinin değerleri random komutu ile rastgele sayılardan oluşan yeni bir diziye
aktarılmakta ve ana programa geri dönmektedir.
Program degerparametresi;
uses crt; {Windows için Wincrt}
type DiziTipi=Array[1..100] of integer;
var
DizgiiziTipi;
Yenidizi1,YenidiziiziTipi;
K:word;
PROCEDURE Ornekleme(PardiziiziTipi;var YeniDiziiziTipi);
begin
Yenidizi[k]:=Random(Pardizi[k])
end;
begin
for k:=1 to 100 do
begin
Dizgi[k]:=K;
Ornekleme(Dizgi,YeniDizi1);
Writeln(Dizgi[k],' ',YeniDizi1[k]);
end;
While not keypressed do
end.
Parametresiz Prosedürler
Bu tür alt programlarda; alt program içinde kullanılan değişkenler ana program içinde kullanılan
değişkenler ile aynıdır. Bu nedenle ana program ile alt program arasında veri transferi
yapılmasına gerek yoktur. Aşağıdaki örnek programlar Parametresiz Prosedür kullanımını
açıklamaktadır.
program faktoriyel_hesabi;
uses crt; {Windows için Wincrt}
var fakt:longint;
n,i:integer;
procedure islem1;
begin
fakt:=1;
for i:=1 to n do
begin
fakt:=fakt*i;
end;
end;
begin
clrscr;
Write('N sayısını giriniz =');
Readln(N);
islem1;
Writeln('N sayısının Faktöriyeli =',fakt:10);
repeat until keypressed;
end.
Yukarıda verilen programı çalıştırarak sonucu inceleyiniz.
Ekran komutları
Ekran komutları ekrandaki görüntü tasarımı için kullanılan komutlardır. Bu komutların program
içinde kullanılabilmesi için, program başlığı satırından sonra USES komutunda CRT (Windows
programları için WINCRT) unit isminin yazılması gereklidir. Aksi halde, ekran komutlarıyla ilgili
yazılan komutlar Pascal derleyicisi tarafından tanınmayacaktır. En çok kullanılan ekran komutları
aşağıda verilmiştir.
Clrscr
\"Clrscr\" CRT/WINCRT üniti içinde yer alan bir alt programdır. Ekranda daha önce yazılı olan
ifadeleri silerek ekranın temizlenmesi amacıyla kullanılır.
GotoXY
Kursörü ekranın istenilen sütun ve satırına taşımak için kullanılır. Kullanımı;
GotoXy(Sütun,Satır);
şeklindedir. Normal bir ekran üzerinde 80 sütun ve 25 satır vardır.
Uses wincrt;
var
j:word;
begin
clrscr;
for j:=1 to 20 do
begin
gotoxy(j,j);Write('Balıkesir Üniversitesi');
gotoxy(50-j,j);Write('Balıkesir Üniversitesi');
end;
end.
Readkey
Klavyeden basılan karaktesi okumak için kullanılır. Bu fonksiyonun sonucu char tipi bilgidir.
Turbo/Borland Pascal 7.0 'da tek başına kullanıldığında program bu komuta rastladığında,
herhangi bir tuşa basılıncaya kadar programın çalışması kesilir.
Uses wincrt;
var
tus:char;
begin clrscr;
Write('Balıkesir ');Readkey;
Writeln('Üniveristesi');Readkey;
end.
Readkey komutunun çok kullanıldığı uygulamalardan biri de basılan veya basılacak karakteri
kontrol etmektir.
Aşağıda verilen örnek programda her B tuşuna basıldığında \"Balıkesir Üniversitesi\" yazmaktadır.
Program ESC tuşuna basılarak durdurulmaktadır.
Uses wincrt;
var
tus:char;
j:word;
begin
repeat
tus:=readkey;
if upcase(tus)='B' then
Write('Balıkesir Üniversitesi');
until tus=#27;
end.
Keypressed
Klavyeden bir tuşa basılıp basılmadığını kontrol etmek amacıyla kullanılan bir komuttur. Aşağıda
verilen örnek programı inceleyiniz.
Uses wincrt;
var
tus:char;
j:word;
begin
j:=0;
repeat
Write('Balıkesir Üniversitesi');
j:=j+1;
if keypressed then tus:=readkey;
if j=75 then
begin
clrscr;
j:=0;
end;
until tus=#27;
end.
Window
Ekranda pencere oluşturmak için kullanılan bir komuttur. Bu komut sadece Turbo/Borland
Pascalda kullanılabilir. Kullanımı;
Window(X1,Y1, X 2,Y2);
X1 :Pencerenin sol sütun numarası (1-80)
Y1 :Pencerenin sol satır numarası (1-25)
X2 :Pencerenin sağ sütun numarası (1-80)
Y2 :Pencerenin sağ satır numarası (1-25)
Delay
Programın belirtilen süre kadar bekletilmesini sağlar. Delay (1000) komutu, programın 1 sn
bekletilmesini sağlamaktadır. Bu komut sadece Turbo/Borland Pascalda kullanılabilir.
uses crt;
begin
window(20,5,60,20);
REPEAT
DELAY(5); Write('BAÜ');
UNTIL keypressed;
end.
ClrEol
Kursörün bulunduğu konumdan satırın sonuna kadar bütün karakterleri silmek için kullanılır.
Kursör bulunduğu konumda kalır.
uses winCrt;
begin
ClrScr;
Writeln('Günaydın Bugün nasılsınız?');
Writeln('Enter tuşuna Basınız...');
Readln;
GotoXY(1,2); {Kursör 2.satır 1.sütuna konumlandırılıyor}
ClrEol;
Writeln ('İyi olmanızı duymak güzel.');
end.
Highvideo
Ekrana yazılacak yazının parlak yazılmasını sağlar. Bu komut sadece Turbo/Borland Pascalda
kullanılabilir.
Lowvideo
Ekrana yazılacak yazının mat yazılmasını sağlar. Bu komut sadece Dos için Turbo/Borland
Pascalda kullanılabilir.
Normvideo
Ekrana yazılacak yazının normal parlaklıkta yazılmasını sağlar. Bu komut sadece Turbo/Borland
Pascalda kullanılabilir.
Uses Crt;
Begin
Clrscr;
Highvideo;Writeln('Parlak');
Lowvideo;Writeln('Mat');
Normvideo;Writeln('Normal');
End.
WhereX
Kursörün üzerinde bulunduğu sütunun numarasını verir.
WhereY
Kursörün üzerinde bulunduğu satırın numarasını verir.
uses winCrt;
begin
Write('Şu anda kursör pozisyonu :',WhereX,',',WhereY);
end.
TextColor
Ekrana yazdırılacak yazının rengini ayarlamak için kullanılır. Bu komut sadece Turbo/Borland
Pascalda kullanılabilir. Kullanımı;
Textcolor(Renkkodu/Adı);
Renklerin kodları aşağıda verilmiştir.
Renk Kod Adı
Siyah 0 Black
Mavi 1 Blue
Yeşil 2 Green
Turquaz 3 Cyan
Kırmızı 4 Red
Pembe 5 Magenta
Kahve 6 Brown
Açık gri 7 Lightgray
Koyu gri 8 Darkgray
Açık mavi 9 Lightblue
Açık yeşil 10 Lightgreen
Açık turquaz 11 Lightcyan
Açık kırmızı 12 Lightred
Açık pembe 13 Lightmagenta
Sarı 14 Yellow
Beyaz 15 White
Yanıp/sönme 128 Blink
Textcolor(0)=Textcolor(black)
Textbackground
Ekrana yazdırılacak yazının zemin rengini ayarlamak için kullanılır. Bu komut sadece
Turbo/Borland Pascalda kullanılabilir. Kullanımı;
uses Crt;
begin
{ Siyah üzerinde yeşil karakterler}
TextColor(Green);
TextBackground(Black);
WriteLn('Merhaba');
{ Gri üzerinde yanıp sönen kırmızı karakterler}
TextColor(LightRed+Blink);
TextBackground(LightGray);
WriteLn('Günaydın!');
{ Mavi üzerinde sarı karakterler}
TextColor(14); { Yellow = 14 }
TextBackground(Blue);
WriteLn('nasılsın');
NormVideo; { Orijinal özellik }
End.
Sound/Nosound
Sound, verilen frekanste ses üretmek için kullanılır. Nosound, sound ile üretilen sesi ortadan
kaldırmak için kullanılır. Bu komutlar sadece Turbo/Borland Pascalda kullanılabilir.
uses Crt;
begin
Sound(220);
Delay(200);
NoSound;
end
Diğer komutlar
Chr
Standart CHR fonksiyonu [ 0..255] arasındaki tam sayıların ASCII karşılığı olan karakteri
vermektedir.
CHR fonksiyonuna, doğrudan aktarılan tam sayı sayısal ifadeleri alfabetik karaktere çeviren bu
fonksiyonun yaygın kullanımlarından biri de, bilgilerin yazıcıya dökümü sırasında klavye
üzerindeki komutların ya da kontrol karakterlerinin üretilmesidir. Aşağıdaki örnek programda bir
yazıcıda kağıda üst üste basmak için ENTER tuşuna karşılık gelen ASCII 13 karakterini
kullanmak amacıyla CHR fonksiyonundan yararlanılabilir.
Örnek:
Program Chr_Ornek;
Uses LST;
begin
Writeln('Endüstri',Chr(13),'Mühendisliği');
Readln;
end.
Concat
Bilgilerin birbirlerine eklenmelerini sağlayan, alfa sayısal fonksiyondur. Ekleme işlemleri CONCAT
fonksiyonu ile veya alfa sayısal bilgiler arasına + işareti konarak sağlanır. Concat fonksiyonu ile
istenilen sayıda katar birbiri ardına eklenebilir. CONCAT fonksiyonunun kullanımı aşağıdaki örnek
programda verilmiştir.
Örnek:
Program Ornek_Concat;
Uses Crt;{windows için Wincrt}
var
x1,x2,x3,x4:String[ 20] ;
x5,x6:=String[ 50] ;
begin clrscr;
x1:='Balıkesir '; x2:='Mühendisliği';
x3:='Universitesi ';x4:='Endüstri ';
x5:=Concat(x1,x3,x4,x2);
Writeln('4 sözcüğün CONCAT ile birleştirilmesi');
Writeln(x5);
x5:=x1+x3+x4+x2;
Writeln('4 sözcüğün + ile birleştirilmesi');
Writeln(X5);
While Not keypressed do;
end.
Upcase
Pascal 'da okunan veya karşılaştırılması yapılan iki karakter dizisinde yazılan harflerin büyük
veya küçük oluşu önemlidir. Upcase fonksiyonu küçük harfleri büyük harfe çevirir. Parametre
olarak verilen karakterlerin alfabetik olmaması durumunda herhangi bir işlem yapılmaz.
Örnek :
var
s : string;
i : Integer;
begin
Write('Bir Karakter Dizisi Giriniz: ');
ReadLn(s);
for i := 1 to Length(s) do
s[i] := UpCase(s[i]);
WriteLn('KARAKTER DİZİSİ BUYUK HARFE DÖNÜŞTÜ ',s);
Readln;
end.
Copy
Bir karakter dizisinde belirlenen bir bölgeden istenilen uzunlukta bir parçanın kopyalanması için
kullanılan fonksiyondur.
Örnek:
uses crt; {windows için Wincrt}
var s: string;
begin
Clrscr;
s:= 'Balikesir Üniversitesi'
WriteLn(Copy(s,11, 4));
repeat until keypressed;
end.
Programın çıktısı; Univ şeklinde olacaktır.
Delete
Delete fonksiyonu, bir karakter dizisi içindeki belirli bir alt karakter dizisinin silinmesi için kullanılan
standart fonksiyondur. Copy komutunda olduğu gibi silinecek ilk karakterin karakter dizisinin
kaçıncı elemanı olduğu ve kaç eleman silineceği ifade edilmelidir.
Örnek:
Var s: string;
begin
S:='Endüstri Mühendisliği Bölümü';
Delete(s,10,21);
WriteLn(s);
end.
Programın Çıktısı: Endüstri şeklinde olacaktır.
Length
Length fonksiyonu bir karakter dizisinin uzunluğunu hesaplamak amacıyla kullanılır. Hesaplama
sırasında karakter dizisi arasında boşluklar var ise bunları da bir karakter olarak kabul edecektir.
Örnek:
Program length_ornek;
uses crt; {windows için Wincrt}
var i:string[39];
begin clrscr;
i:='Endüstri Mühendisliği Bölümü';
WriteLn('Uzunluk = ', Length(i));
end.
Programın Çıktısı: Uzunluk = 28 şeklinde olacaktır.
Str ve Val
Sayısal giriş ve çıkış işlemleriyle ilgili olarak Pascal komutları arasında kullanılan Str ve Val
deyimleri birbirlerinin tam tersi işlemleri yaparlar. Str, girilen sayısal karakterlerin karakter dizisine
çevirirken Val, bunun tersine olarak karakter dizisi olarak girilen rakamsal bilgileri sayısal
karakterlere dönüştürür. Grafik ekranda sayısal ifadelerin direkt olarak yazdırılması mümkün
olmaması nedeniyle sayısal ifadenin str ile string ifadeye dönüştürülerek yazılması gerekir. Yine
grafik ekrandan sayısal bilgi girişi yapılamamakta, ancak string olarak bilgi girişi yapılabilmektedir.
String olarak girişi yapılan sayısal ifade val fonksiyonu ile sayısal ifadeye dönüştürülmesi gerekir.
Aşağıdaki örnekte klavyeden iki veri girilmektedir. İlk Val fonksiyonuyla k1 kontrol değişkeni O
iken, S1 değişkenindeki rakam karakterleri sayısal karakterlere çevrilerek R1 ondalıklı sayısal
değişkenine verilir. Aynı işlem ikinci Val fonksiyonuyla da yapılır. Elde edilen R1 ve R2 rakamları
çarpılarak R3 değişkenine atanır ve uygun yazım formatıyla ekrana yazılmaktadır.
Örnek:
var s1,s2:string;
k1,k2:integer;
r1,r2,r3:real;
begin
readln(s1);readln(s2);
Val(s1,r1,k1); Val(s2,r2,k2);
r3:=r1*r2;
Writeln(r3:10:2);
end.
Pos
Pos fonksiyonu bir karakter dizisinin veya karakterin diğer bir karakter dizisi içinde olup
olmadığını, varsa kaçıncı karakterden başladığını (Başladığı karakterin ana karakter dizisindeki
sıra numarasını) verir. Aşağıdaki 1. örnek programda s isimli karakter dizisinde boşluk olup
olmadığı aranmakta ve boşluk var ise bu karakter dizisinin önüne boşluk sayısınca 0
yerleştirilmektedir. 2. örnek programda i ismi verilen karakter dizisi içindeki j karakter dizisinin
konumu araştırılmaktadır. 3. Örnekte ise k isimli bir karakter dizi içinde $ işareti olup olmadığı
araştırılmaktadır.
Örnek 1:
Program Ornek_pos1;
var s: string;
begin
s := ' 123.5';
{ Boşlukları sıfıra çevir }
while Pos(' ', s) > 0 do
s[Pos(' ', s)] := '0';
Writeln(S);
Readln;
end.
Örnek 2:
Program Ornek_Pos2;
var i:string[28];j:String[12];
begin clrscr;
i:='Balıkesir Üniversitesi';
j:=' Üniversitesi';
Writeln(i);Writeln(j);
Writeln('i içinde J nin başlama konumu =',pos(j,i));
Writeln;
Readln;
end.
Örnek 3:
Program Ornek_pos3;
var k:string;
begin
k:='123sadsdg&jdfjdsh$fdsf'
if pos('$',K)<>0 then
begin
writeln (' K isimli karakter dizisi içinde $ işareti bulundu');
end
else
Writeln('Aranılan karakter bulunamadı');
end;
end.
Bu örnek programda aranılan alt karakter bulunamaz ise bu durumda fonksiyon sıfır değerine
sahip olacak ve program else ile başlayan satıra dallanacaktır.
Sistem Birimi ve Giriş Çıkış Elemanları
Burada kısaca anlatılacak olan giriş/çıkış komutları Turbo Pascal dosyaları anlatılırken detaylı bir
şekilde anlatıldığından burada sadece alfabetik sırada isimlerinin verilmesi ile yetinilecektir.
Giriş/çıkış elemanları çok genel olarak, programların çalıştırılmasıyla oluşacak dosyaların
manyetik ortama yazdırılmalarıyla ilgili komut ve deyimler olarak tanımlanabilir. Bu deyim ve
komutlar alfabetik sıraya göre; Append, Assign, Close, Erase, Read, Readln, Write, Writeln,
Reset, Rewrite, Rename, Flush vb. 'dir.
Sistem Birimi ve Standart Matematik Fonksiyonlar
Turbo Pascal matematik ağırlıklı mühendislik bilimleri içinde son derece uygun bir dildir. Bir çok
temel işlevi yerine getiren matematiksel fonksiyonlar Turbo Pascal'ın sistem birimi içerisinde
tanımlanmıştır.
Turbo Pascal sistem birimi içinde standart olarak bulunan standart matematiksel fonksiyonlar ve
kullanımları ile ilgili örnekler aşağıda alfabetik sırada verilmiştir.
Abs
Herhangi bir sayısal sabit veya değişkenin mutlak (işaretsiz) değerini verir.
Örnek:
Program ABS_fonksiyonu;
var
r: Real;
i: Integer;
begin
r := Abs(-4.3); i := Abs(-157);
Writeln(r:4:1,i:8);
end.
ArcTan
Aşağıdaki örnekte R isimli real parametre ile verilen argümanın radyan cinsinden arktanjantını
verir. Radyanı dereceye çevirmek için 180/pi ile çarpmak gereklidir.
Örnek:
Program ArcTan;
var
R: Real;
begin
r:=1;
R := ArcTan(r)*180/pi;
writeln(r:5:1);
end.
Cos
Derece olarak verilen bir açı değerinin radyana çevrilmesiyle trigonometrik kosinüsünü hesaplar.
Açı değerini radyana çevirmek için pi/180 ile çarpmak gerekir.
Örnek:
Program cosinus_Fonksiyonu;
var
r,Aci: Real;
begin
aci:=90;
R := Cos(aci*pi/180);
writeln(r:5:1);
end.
Exp
Exp fonksiyonu doğal logaritma parametresi olan e'nin üstel değerini hesaplar. Aşağıdaki örnek
program parçasında e'nin 1. üstel değeri (e1 ) hesaplanılmaktadır.
Örnek:
Program Exp_Fonksiyonu;
begin
Writeln('e = ',Exp(1.0));
end.
Frac
Gerçel bir sayının desimal noktadan sonraki kesirli kısmını verir.
Örnek:
Program frac_fonksiyonu;
var
f1,f2: Real;
begin
f1 := Frac(4233.1987);
f2 := Frac(-4233.1987);
Writeln(f1:6:4,' ',f2:6:4);
end.
Int
Gerçel sayıların tamsayı bölümünü integer tipinde verir.
Örnek:
Program Int_Fonksiyonu;
var f1,f2: Real;
begin
f1 :=Int(4233.1987);
f2 :=Int(-4233.1987);
Writeln(f1:6:0,f2:6:0)
end.
Ln
Girilen bir sayının e tabanına göre logaritmasını alır.
Örnek:
Program Ln_Fonksiyonu;
var
e,mn: real;
begin
mn:=2;
e := Exp(mn);
Writeln('ln(e) = ',ln(e));
end.
Odd
Tamsayı parametrelerin tek sayı olup olmadığının tesbitinde kullanılır.
Örnek :
Program odd_fonksiyonu;
uses crt;
var i:byte;
begin clrscr;
for i:=1 to 20 do
begin
if Odd(i) then
Writeln(i,' Tek Sayıdır ')
else
Writeln(i, ' Çift Sayıdır');
end;
delay(2000);
end.
Ord
Char, byte, integer, boolean vb. şeklinde bildirilmiş parametrelerin tamsayı değerlerini verir.
Örneğin Char ile kullanılması durumunda karakterin ASCII kodu elde edilir.
Örnek :
Program ord_Fonksiyonu;
var ch:char;
begin
for ch:='A' to 'Z' do
Writeln(Ch,' icin ASCII Kod ',Ord(ch));
Readln;
for ch:='a' to 'z' do
Writeln(Ch,' icin ASCII Kod ',Ord(ch));
end.
Pi
Pi olarak bilinen matematiksel sabitin değerini verir. Pascal programında diğer programlama
dillerinde olduğu gibi pi sayısının ayrıca tanıtılmasına gerek yoktur.
Örnek :
Program Pi_fonksiyonu;
var d:real;
begin
Write('Dairenin çapını giriniz :');
Readln(D);
Writeln('Dairenin çevresi = ',Pi*D:10:5;
end.
Random
Rastgele bir sayı üretir. Üretilen rastgele sayı random ile belirtilen sayıdan küçük olmaktadır.
Örnek:
Program Random_Fonksiyonu;
uses Crt; {Windows için Wincrt}
begin
Randomize;
repeat
Writeln (Random(99));
until KeyPressed;
end.
Round
Gerçel sayıların kurala uygun bir şekilde yuvarlatır ve yuvarlatılmış tamsayı olarak verir. Elde
edilen yuvarlatılmış sayı yine real tipte saklanır.
Örnek:
Program Round_fonksiyonu;
begin
Writeln(1.499, ' ',Round(1.499),' a yuvarlatıldı');
Writeln(1.5, ' ',Round(1.5),' a yuvarlatıldı');
Writeln(1.499, ' ',Round(-1.499),' a yuvarlatıldı');
Writeln(-1.5, ' ',Round(-1.5),' a yuvarlatıldı');
end.
Sin
Derece olarak verilen bir açı değerinin radyana çevrilmesiyle trigonometrik sinüsünü hesaplar. Açı
değerini radyana çevirmek için pi/180 ile çarpmak gerekir.
Örnek :
Program sinus_Fonksiyonu;
var
r,Aci: Real;
begin
aci:=90;
R := Sin(aci*pi/180);
writeln(r:5:1);
end.
Sqr
Verilen bir parametrenin karesini verir. Genel kullanım şekli;
Kare:=sqr(sayi);
Sqrt
Verilen bir parametrenin karekökünü verir. Genel kullanım şekli;
Karekok:=sqrt(sayi);
Örnek:
Program Sqr_ve_sqrt;
var say:real;
begin
Write('Karesi alınacak sayıyı giriniz =');
Readln(say);
Writeln(say:10:2,' in Karesi ', Sqr(say):10:2);
Writeln(Sqr(say):10:2,' nın karekökü',Sqrt(sqr(say)):10:2);
end.
Trunc
Verilen bir gerçel sayının tamsayı kısmını verir ve sonucu tamsayı tipinde saklar.
Örnek:
Program Trunc_Fonksiyonu;
var f1,f2,f4:real;
f3:integer;
begin
f1:=34.56;f2:=11.9;
f4:=f1/f2;
f3:=Trunc(f1/f2);
Writeln(f4:8:2,' ',f3);
end.
Örnek: Aşağıda verilen programda round ve trunc deyimlerinin birlikte kullanımları verilmiştir.
Program round_ve_trunc;
Var
Vize,final,Ort:integer;
Begin
Readln(vize,final);
Ort:=Trunc(round(vize*0.4+final*0.6));
Writeln(Vize:10,Final:10,Ort);
End.
Pascal Sözcükleri
Turbo Pascalda kendi işlevleri dışında kullanılamayacak olan sözcükler vardır. Bu sözcükler
ayrılmış sözcükler olarak tanımlanmakta olup programcı tarafından yeniden tanımlanamaz, bir
değişken ismi olarak kullanılamaz veya değiştirilemezler. Bu sözcüklerin isimleri aşağıda
verilmiştir:
And Asm Array Begin
Case Const Constructor Destructor
Div Do Downto Else
End File For Function
Goto If Implementation In
Inline Interface Label Mod
Nil Not Of Object
Or Packed Procedure Program
Record Repeat Set Shl
Shr String Then To
Type Unit Until Uses
Var While With Xor
Tanıtıcılar
Pascal programlama dilinde icra bloğu içinde kullanılan değişkenler VAR tanım bloğu içinde,
sabitler ise CONST bloğu içinde tanımlanır. Örneğin A,B değerleri değişken ve C değeri sabit ise
bu değerlerin programın tanım bloklarında ifade edilmesi aşağıdaki şekilde olacaktır.
VAR A;B:REAL;
CONST C=12:INTEGER;
Burada, VAR’dan sonra gelen REAL ifadesi A ve B değişkenlerinin gerçel sayı veri tipinde
olduğunu belirtirken CONST’dan sonra gelen INTEGER ifadesi C sayısının integer veri tipi
olduğunu belirtmektedir.
Pascal Programlama dilinde kullanılan değişik veri tiplerinin tanımları ve geçerli olduğu alanlar
aşağıda tanımlanmıştır.
Özel Semboller
Bir Pascal programında kullanılabilecek özel semboller A’dan Z’ye büyük ve a’dan z’ye küçük
İngiliz alfabesi harfleri, 0-9 arası rakamlardır. Pascal programlama dilinde kullanılan diğer bazı
semboller ve anlamları aşağıda tanımlanmıştır.
>, <, = Herhangi değişken ve sabitlerin karşılatırılmasında kullanılır.
[ ] Bu işaret içine diziye ait indis numarası yazılır.
( ) Veri okunması, yazılması, yazılacak/okunacak bilgilerin başlangıç ve bitişlerinde kullanılır.
.. İndisli değişken eleman tanım ayırıcı.
; Pascal komut ve deyimlerini birbirinden ayırmak için kullanılırlar.
’ Alfasayısal bilgilerin tanımlanmasında kullanılır. Bilgilerin başlangıç ve bitişlerinde
kullanılmaktadır.
, Değişken tanımlarında, okunacak yada yazdırılacak bilgiler arasında ayıraç olarak kullanılır.
: Bilgi karakter yapı tipi tanımlamalarında ve sayısal bilgilerin çıkış formatlarında kullanılır.
. Bir gruba bağlı bir alt grup veya bir kayıt saha ismi tanımlarında elemanlandırma işareti olarak,
sabit bilgilerdeki rakamların ondalık işareti olarak ve pascal programlarının sonunu belirlemek
amacıyla kullanılır.
:= İşaretin solundaki değere sağındaki bilgiyi atama işlemini yapar.
{ } Açıklama ifadelerinin başlangıç ve bitimlerinde kullanılır.
(* *) Açıklama ifadelerinin başlangıç ve bitimlerinde kullanılır.
Aritmetik İşlem İşaret Karakterleri
Program içinde yapılacak aritmetik işlemlerde kullanılır.
+ Toplama işlemi ve karakter katarlarının birleştirilmesinde kullanılır
- Aritmetik işlemlerin yapılmasında çıkarma işlemi amacıyla kullanılır
* Aritmetik işlemlerin yapılmasında çarpma işlemi amacıyla kullanılır
/ Aritmetik işlemlerin yapılmasında bölme işlemi amacıyla kullanılır
Aritmetik İşlemlerde İşlem Öncelik Sıraları
Öncelik Sırası Aritmetik İşlem ve bağıntılı tanımlar
1
2
3
4
5
6
7
8
9
10 İşaretli sayısal bilgiler
Parantez içindeki işlemler
Aritmetik fonksiyonlar
Üs alma
Çarpma ve Bölme
DIV tam sayıya bölme deyimi
MOD (Bölme işleminde kalan bulma işlemi)
Toplama ve çıkarma
Mantıksal ilişki ifadeleri (=, >,<,)
Bağlantı ifadeleri (not,and,or,xor)
İşlem Önceliğinde Bazı Kurallar:
• Aynı öncelik sırasına sahip işlemlerde hangisi önce tanımlanmış ise önce onun işlemi
gerçekleştirilir.
• İşlem öncelik sırası küçük olan bir aritmetik işlemin önce yapılması isteniyorsa parantez içine
alınmalıdır.
• İç içe birden fazla parantez kullanılması durumunda, işlem öncelik sırası daima en içteki
paranteze ait işleminindir.
PASCAL DERS NOTLARI
Pascal'da yazılabilecek en küçük program aşağıdaki gibidir.
Begin
End.
Yukarıda gösterilen küçük program parçasından da anlaşılacağı gibi pascalda bir program begin
ile başlar end. ile sona erer.
Pascal'da bir program yapısını biraz daha genişletecek olursak;
Program programadı;
Tanımlamalar
Procedure ve functionlar
Daha açık anlatımıyla;
Program programadı;
Uses unitler
type Özel veri tipleri
Const Sabitler
Label etiketler
var değişken veya değişkenler
begin
end.
*Yukarıda kullanılan tanımlamlarda koyu harf ile yazılan kelimeler komutları ifade etmektedir.
Program komutu; yazdığınız programa bir isim vermek için kullanılır. Fakat bu görülen satır
kullanılmak zorunda değildir. Bu komut kullanıldığı zaman dikkat edilmesi gereken husus şudur.
Programa verdiğiniz isim boşluk karakteri içermemelidir. Şayet verdiğiniz isim iki kelimeden
oluşuyorsa kelimeler arasında _ karakteri kullanılmalıdır. Örneğin; Program ilk_programım
Unit komutu; bu komut pascal'ın unit'lerini veya kendi yazdığınız unitleri kullanmak içindir. Unit
birden fazla procedure veya functiondan oluşan bir program parçasıdır. İleride procedure veya
fonksiyon kavramı açıklandığında unit kavramı da daha iyi anlaşılacaktır. Ama bu noktada şunun
bilinmesinde fayda vardır: İleride de görüleceği üzere pascal'da kullanılacak olan komutların çoğu
unit'ler içerisinde bulunan birer procedure veya fonksiyondur.
Type komutu; özel veri tipleri tanımlamak için kullanılır.
Const komutu; sabit tanımlamak için kullanılır.
Label komutu; etiket tanımlamak için kullanılır.
Var komutu; istenen tiplerde değişken tanımlamak için kullanılır.
Yukarıda belirtilen program yapısında bulunan sıra sabittir. Fakat, bir programın içerisinde bazı
kısımlar hariç hepsi bulunmak zorunda değildir. Zorunlu olan kısımlar ; Uses, begin ve end.
kısımlarıdır.
Pascal'da kullanılan bazı semboller
*#Sembol#* *#Anlamı#*
= Karşılaştırma işlemi için kullanılır.Eşitse.
<> Karşılaştırma işleminde kullanılır.Eşit değilse.
:= Değişkenlere değer atama için kullanılır. a:=5 gibi.
{ } veya (* *) Açıklama yapmak için kullanılır. Basic'teki REM komutuyla aynı işi görür.
: Değişken tanımlamalarında değişken isminden sonra değişken tipini belirlemeden önce
kullanalır. a:integer gibi.
; Her satırın sonunda (istisnalar dışında) kullanılır.
Değişken isimlerini belirlerken uyulacak kurallar:
1. Değişken isimleri harf veya _ ile başlamalıdır.
Örneğin: ilk, _ilk gibi.
2. İçerisinde boşluk karakteri bulunmamalıdır. Bu kuralı program komutunu anlatırken
öğrendiğinizi hatırlayınız.
Örneğin: ilk_sayi,son_sayi gibi.
3. Pascal'da kullanılan komutlar değişken ismi olamaz.
Örneğin: Begin, var gibi.
4. Değişken isimleri arasında özel karakterler bulunamaz. (+,-,*) gibi.
Örneğin: ilk+sayi, ilk-sayi gibi.
5. Değişken isimlerinde türkçe karakterler kullanılamaz. (ş,ğ,İ,ç gibi)
6. Değişken ismi harf ile başladıktan sonra ikinci karakteri sayı veya _ olabilir.
Örneğin:a1,a_b gibi
String İfadeler:
String ifadeler kısaca; Üzerinde sayısal işlem yapılamayan ifadeler olarak tanımlanabilir.
Pascal'da string ifadeler '' işaretleri arasında belirtilir.
Örneğin: 'Isparta', 'Keçiborlu','Fenerbahçe' gibi.
VERİ TİPLERİ
Tamsayı Tipleri
Tip Adı Sınırları Kapladığı Alan
Shortint -128 127 1 Byte
Byte 0 255 1 Byte
Integer -32768 32767 2 Byte
Word 0 65534 2 Byte
Longint -2147483648 2147483647 4 Byte
Gerçek (Reel) Sayı Tipleri
Tip Adı Sınırları Kapladığı Alan
Real 2.9*10^-9 1.7*10^38 6 Byte
Single 1.5*10^-45 3.4*10^38 4 Byte
Double 5.0*10^-324 3.4*10^308 8 Byte
Extended 3.4*10^-4932 1.1*10^4932 10 Byte
Comp (-2^63)+1 (2^63) -1 8 Byte
STRİNG TİP:
Üzerinde matematiksel işlem yapılmayan alfasayısal değişkenleri tanımlamak için kullanılır.
Örneğin:
a:string şeklinde bir değişken tanımlarsanız 255 karakterlik bilgi alır.
a:string[n] şeklinde bir değişken tanımlarsanız n karakterlik bilgi alır.
CHAR TİP:
Sadece bir karakterlik bilgi için kullanılır.
String Tipi
Tip Adı Kapladığı Alan
Char 1 Byte
BOOLEAN TİP:
Sadece True (doğru) veya False(Yanlış) değerlerini alabilen bir değişkendir.
String Tipi
Tip Adı Kapladığı Alan
Boolean 1 Byte
TANIMLAMA BLOKLARI
Var tanımlama Bloğu:
Kullanımı:
Değişkenismi:tip;
Birden fazla değişken tanımlanacak ve aynı tipte olacaksa:
Değişkenismi1, Değişkenismi2:tip;
Örnek:
Var
a:integer;
isim:string[10];
ortalama:real;
sayi1,sayi2:byte;
Const tanımlama bloğu:
Daha öncede anlatıldığı gibi sabit tanımlama bloğudur.
Kullanımı:
Const
Sabit adı=değer;
Biçiminde kullanılırsa sabite verilen değer program içerisinde değiştirilemez.
Sabit adı:tip=değer;
Biçiminde kullanılırsa sabite verilen değer ilk değer olarak kabul edilir ve program içerisinde bu
değer değiştirilebilir.
Örnek:
Const
Pi=3.14;
Sayi:integer=15;
OPERATÖRLER:
Div: Bir bölme işleminde bölümü verir.
Örnek:
15 div 5 =3
Mod: Bir bölme işleminde kalanı verir.
Örnek:
5 mod 4 =1
String Tipi
Operatör İşlevi
Not Değil
Or Veya
And Ve
Xor Veyadeğil
= Eşit
< Küçük
> Büyük
<= KüçükEşit
>= BüyükEşit
<> Farklı
TURBO PASCAL KOMUTLARI
GİRİŞ - ÇIKIŞ KOMUTLARI
Write - Writeln:
Sabitlerin, değişkenlerin ve işlem sonuçlarının ekrana basılmasını sağlayan komuttur. Yani,
basic'teki print komutuyla aynı işlevi görür.
Kullanımı:
Writeln(ifade)
Write(ifade)
Writeln komutu kullanıldığı zaman parantez içerisinde verilen ifade ekrana basıldıktan sonra
cursor bir alt satıra iner ve diğer ifadeler buradan itibaren yazılmaya devam eder. Write komutu
kullanıldığında ise cursor parentez içerisinde verilen ifade yazıldıktan sonra yazılan ifadenin
hemen sonunda bekler ve diğer ifadeler buradan itibaren yazılmaya devam eder.
Şayet bir string ifade akrana basılmak isteniyorsa '' işaretleri arasında parantezler içerisine
yazılmalıdır. Bir sabit veya değişken ekrana basılmak isteniyorsa; parantezler içerisine sabit veya
değişkenin isminin yazılması yeterlidir. Burada dikkat edilmesi gereken husus şudur: Birden fazla
sabit veya değişkeni aynı anda ekrana basmak istiyorsanız aralarına virgül koyarak yazmalısınız.
Eğer, hem bir string ifade hem de bir değişken veya sabiti beraber ekrana basmak istiyorsanız;
değişen veya sabitten sonra veya önce virgül kullanmalısınız.
Örneğin; writeln(a,'a') veya
writeln('b' ,b)
Şimdi bu komutu kullanarak birkaç örnek yazalım.
Örnek 1:
Program ekrana_yaz;
begin
writeln('İlk programım');
end.
Bu program çalıştırıldığında ekrana İlk Programım stringini yazacak ve sonlanacaktır. Sonuçta
ekranda çıktıyı şu an için göremiyorsunuz, Alt+F5 tuşlarına basın ekranda yadığınız string
ifadenin basılı olduğunu göreceksiniz. Burada şu noktaya da dikkat etmeyi unutmayın. Cusor bir
aşağı satırda beklemektedir.
Aynı programı şu şekilde yazarsak.
Program ekrana_yaz;
begin
write('İlk programım');
end.
Bu program da yukarıdaki programla aynı çıktıyı verecektir. Aralarındaki tek fark bu sefer
cursorun bir alt satıra geçmeyip string ifadenin hemen sonunda beklemesidir.
Örnek 2:
Mesela çıktısı aşağıdaki gibi olan bir program yazmaya çalışalım.
Süleyman Demirel Üniveristesi
Keçiborlu Meslek Yüksekokulu
begin
writeln('Süleyman Demirel Üniversitesi');
write('Keçiborlu Meslek Yüksekokulu');
end.
Örnek 3:
Şimdide iki değişken tanımlayalım ve bunların toplamlarını ve farklarını ekrana basan bir program
yazalım.
var
a,b:byte;
begin
a:=65;
b:=25;
writeln('a+b=',a+b);
writeln('a-b=',a-b);
end.
Sayısal Bilgilerin Formatlı Olarak Yazdırılması
Burada amaç sayısal ifadeleri sağa dayalı olarak yazdırmaktır.
Tamsayı ifadeler için kullanımı:
Kullanımı:
writeln(ifade:uzunluk)
write(ifade:uzunluk)
Burada uzunluk yazılan sayısal ifadeninitolam hane sayısını belirtir. Verilen ifade bu alana sağa
dayalı olarak yazılır.
Örnek 4:
begin
write(1:6);
end.
Bu program sonuçta 1'i 6 hane sağa kaydırır ve 6. haneye yazar.Yani sonuç şöyle olur.
1
şeklinde bir çıktı olur.
Clrscr:
Gerçi bu komut bir giriş çıkış komutu değildir ama burada anlatmanın gerekli olduğunu
düşünüyorum. Clrscr komutu ekran temizleme komutudur ve crt unit'i içerisinde bulunur. Yani bu
şu anlama gelmektedir. Bu komut kullanılacağı zaman mutlaka uses crt komut satırı
kullanılmalıdır.
Örnek 5:
uses crt;
begin
clrscr;
write('Merhaba');
end.
Read - Readln:
Klavyeden bilgi almak için kullanılan komuttur. Basic'teki input komutuyla aynı işlevi görür.
Kullanımı:
read(değişken veya değişkenler)
readln(değişken veya değişkenler)
Şayet değşkenler birden fazlaysa aralarına virgül koyulur.
Bilindiği gibi bundan önce yazdığımız programları çalıştrıyor fakat çıktısını görebilmek için alt+F5
tuşlarını kullanıyorduk. İşte readln komutunu öğrendikten sonra artık böyle bir işleme gerek
kalmayacaktır. Her programın sonunda end. satırından önce readln; komut satırı kullanılırsa
program bütün işlemleri bitirdikten sonra siz bir tuşa basıncaya kadar sizi bekleyecektir.
Örnek 6:
Klavyeden iki sayı alarak bunların toplamlarını ekrana yazan bir program yazınız.
uses crt;
var
a,b:integer;
begin
clrscr;
write('a sayısını giriniz');readln(a);
write('b sayısını giriniz');readln(b);
write('a+b=',a+b);
readln;
end.
Örnek 7:
Klavyeden vize ve final notu girildiğinde o öğrencinin not ortalamasını bulan programı yazınız?
uses crt;
var
vize,final:shortint;
begin
clrscr;
write('vizeyi giriniz');readln(vize);
write('finali giriniz');readln(final);
write('ortalama',vize*0.4+final*0.6);
readln;
end.
Karşılaştırma Komutları
İf - then - else
Verilen şartın doğru veya yanlış olması durumunda istenen işlemleri yapmak için bu program
kullanılır.
Kullanımı:
İf şart then şart doğruysa komut veya komutlar else şart doğruysa komut veya komutlar
Bu komut kullanılırken dikkat edilmesi gereken birçok nokta bulunmaktadır. Şayet şart doğru
olduğunda kullanılacak komut sayısı 1'den fazla ise bu komutlar begin end bloğu içerisine
yazılırlar. Aynı durum şart yanlış olduğu durumda da geçerlidir. Hiçbir zaman else komutundan
önceki satırın sonunda ; işareti kullanılmaz. Bu unutulmaması gereken önenli bir kuraldır.
Örnek 8:
Kalvyeden iki sayı alarak büyük olan sayıyı ekrana yazan bir program yazınız?
uses crt;
var
a,b:byte;
begin
write('a sayısı');readln(a);
write('b sayısı');readln(b);
if a>b then
write('a sayısı büyük',a)
else
write('b sayısı büyük',b);
readln;
end.
Örnek 9:
Kalvyeden iki sayı alarak büyük olan sayıyı bulup bunu bir artırarak ekrana yazan bir program
yazınız?
uses crt;
var
a,b:byte;
begin
write('a sayısı');readln(a);
write('b sayısı');readln(b);
if a>b then
begin
a:=a+1;
write('a sayısı büyük',a);
end
else
begin
b:=b+1;
write('b sayısı büyük',b);
end;
readln;
end.
AYRILMIŞ SÖZCÜKLER ve STANDART İFADELER
(Reserved Words and Standard Identifiers)
RESERVED WORDS
And Else Inline Procedure Unit
Asm End Interface Program Until
Array Exports Label Record Uses
Begin File Library Repeat Var
Case For Mod Set While
Const Function Nil Shl With
Constructor Goto Not Shr Xor
Destructor If Object String
Div Implementation Of Then
Do In Or To
Downto Inherited Packed Type
STANDART İFADELER
Sabitler (Constants): False True MaxInt
Tipler (Types) Integer Boolean Real Char
Text String ShortInt LongInt Byte
Byte Word Single Double Extenteed
Comp WordBool LongBool Pointer
Program Parameters Input Outpuut
Procedures and Functions
Flow Control Break Continue Exit Halt RunError
Transfer Chr High Low Ord Round Trunc
Arithmetic Abs ArcTan Cos Exp Frac Int
Ln Pi Sin Sqr Sqrt
Ordinal Dec Inc Odd Pred Succ
String Concat Copy Delete Insert Length Pos
Str Val
Dynamic Allocation Dispose FreeMem MaxAvail MemAvail New
Pointer and Adress Addr Assigned Cseg Dseg Ofs Ptr
Seg SPtr Sseg
Miscellaneous Exclude FillChar Hi Include Lo Move
ParamCount ParamStr Random Randomize SizeOf Swap
TypeOf UpCase
Input and Output Append Assign BlockRead BlockWrite ChDir Close
Eof Eoln Erase FilePos FileSize Flush
GetDir IOResult MkDir Read ReadLn Rename
Reset ReWrite RmDir Seek SeekEof SeekEoln
SetTextBuf Truncate Write WriteLn
Units Dos Crt Overlay Printer String Graph
İşlemler ve Öncelikleri
İşlem ve Sırası
Öncelik İşlem
1 Not
2 *, /, Div, Mod, And
3 +, -, Or
4 <, <=, =, <>, >=, >, In
Eğer aynı işlemciden birden fazla varsa işlem soldan sağa doğru yapılır.
Eğer işlemlerde Parantez kullanılmışsa yukarıdaki öncelik sırasına göre öncelikle yapılır.
İşlemler ve Pascal'da Yazım Biçimleri
İfadeler Pascal'da Yazım Biçimi
b2-4.a.c b*b-4*a*c
(b2-4.a.c)1/2 sqrt(b*b-4*a*b)
x+y
------
x - y (x + y) / (x - y)
Mantıksal İşlemler ve Sonuçları
(1=Doğru=True) (0=Yanlış=False)
Ve (And) Operatörü
p q p ve q
111
100
011
000
Program Degiskenler;
Const
i : integer = 567;
b : boolean = True;
c : char ='A';
s : String[10] = 'Pascal';
Begin
WriteLn ('123456789');
WriteLn (i:9);
WriteLn (b:9);
WriteLn (c:8);
WriteLn (s:9);
WriteLn (i:1);
WriteLn (b:1);
WriteLn (c:1);
WriteLn (s:1);
WriteLn (i,b,s);
WriteLn (i,'..',b);
WriteLn ('i = ',i);
WriteLn (s:5);
readln;
End
KARAR VERME DEYİMİ
IF KOŞUL THEN İŞLEM1 ELSE İŞLEM2
Eğer koşul doğru ise İşlem 1'i yap değilse İşlem 2'yi yap.
Pascalda yazımı:
if Koşul Then İşlem1 Else İşlem2
Eğer koşul doğru ise İşlem 1'i ve İşlem 2'yi yap.
Pascal'da Yazımı:
if Koşul Then
Begin
İşlem1;
İşlem 2;
End;
Not: Bir dalda birden fazla işlem yapılıyorsa Begin .. End bloku içine alınır.
Eğer koşul doğru ise İşlem 1'i ve İşlem 2'yi yap değilse işlem3'ü yap.
Pascal'da yazımı:
if Koşul Then
Begin
İşlem1;
İşlem2;
End
Else
İşlem3;
Eğer koşul doğru ise işlem1'i ve İşlem2'yi yap
değilse eğer işlem3 ve işlem4'ü yap
değilse işlem5'i yap.
if Koşul1 Then
Begin
İşlem1;
İşlem2;
End
Else
if Koşul2 Then
Begin
Koşul3;
Koşul4
End
Else
İşlem5;
Tek Sayıları Bulan Program
Algoritması:
1. Başla
2. Sayı gir
3. Eğer sayının Mod 2'ye göre sonucu Birse Tek Sayı yaz
Değilse Çift Sayı yaz.
4. Son.
Program TekCift;
Var
a : Integer;
Begin
Write('Bir sayı giriniz: '); Readln(a);
If (a mod 2 = 1 Then
Writeln ('Girdiğiniz Sayı Tekdir')
Else
Writeln ('Girdiğiniz Sayı Çifttir')
Readln
End.
Not Ortalaması 50'den Büyük ise Geçti 50'den küçükse Kaldı yazan program
Algoritması:
1. Başla
2. Not1 ve Not2'yi gir.
3. Ortalamayı hesapla.
4. Ortalama 50'den büyükse Geçti değilse kaldı yaz.
5. Son.
Program GectiKaldi;
Var
Not1, Not2 : Integer;
Ortalama: Real;
Begin
Write('Not 1´i giriniz : '); Readln(Not1);
Write('Not 2´i giriniz : '); Readln(Not2);
Ortalama := (Not1+Not2)/2;
If Ortalama >= 50 Then
Writeln('Geçtiniz Ortalamanız = ', Ortalama:4:2)
Else
Writeln('Kaldınız Ortalamanız = ', Ortalama:4:2);
Readln
End.
1'den N'e Kadar Tam Sayıları Toplayan Programın:
Algoritması:
1. Başla
2. N sayısını gir.
3. Toplam'a sıfır ata
4. i=1'den i=N'e kadar tam sayıları topla
5. Toplam'ı yaz.
6. Son
Program Toplama;
{Bir den N e kadar tam sayıları toplayan program}
Var
i, N, Toplam : Integer;
Begin
Write('Son sayıyı gir: '); Readln (N);
Toplam := 0;
For i := 1 To N Do
Toplam := Toplam + i;
Writeln('1´den N´e kadar sayıların toplamı = ', Toplam);
Readln;
End.
net2phone
undefined
More...
Eğer Girilen Notların 0-100 arasında olmasını istiyorsanız
yine If..Then..Else ile kontrol etmeniz gerekir.
Algoritması:
1. Başla
2. Not1 ve Not2'yi gir.
3. Eğer Not1 ve Not2 Sıfırdan büyük ve 100'den küçükse
Ortalamayı hesapla.
Eğer Ortalama 50'den büyükse Geçti Değilse kaldı yaz.
Değilse Yanlış Giriş Yaptınız Yaz.
4. Son.
Program GectiKaldi2;
Var
Not1, Not2 : Integer;
Ortalama: Real;
Begin {Ana programın Begin i}
Write('Not 1´i giriniz : '); Readln(Not1);
Write('Not 2´i giriniz : '); Readln(Not2);
If (Not1 >=0) and (Not1<=100) and (Not2 >=0) and (Not2<=100) Then
Begin
Ortalama := (Not1+Not2)/2;
If Ortalama >= 50 Then
Writeln('Geçtiniz Ortalamanız = ', Ortalama:4:2)
Else
Writeln('Kaldınız Ortalamanız = ', Ortalama:4:2);
End
Else
Writeln('Yanlış giriş yaptınız...');
Readln
End. {Ana Programın End i}
Üç kenarı girilen bir üçgenin ne tür bir üçgen (çeşitkenar , ikizkenar, eşkenar) olduğunu yazan
program
Algoritması:
1. Başla
2. a, b ve c'yi gir
3. Eğer a=b ve b=c ise EşKenar Üçgen
Değilse
Eğer a<>b ve a<>c ve b<>c ise Çeşit Kenar Üçgen
Değilse İkiz Kenar Üçgen
4. Son
Program Ucgen;
Var
a, b, c : Integer;
Begin
Write('Üçgenin kenarlarını giriniz: '); Readln(a, b, c);
If (a>0) and (b>0) and (c>0) Then
if (a=b) and (a=c) Then Writeln ('Eşkenar Üçgen')
Else
if (a<>b) and (a<>c) and (b<>c) Then Writeln ('Çeşitkenar Üçgen')
Else
Writeln('İkiz Kenar Üçgen');
Else
Writeln('Yanlış Giriş Yaptınız...');
Readln
End.
Üç Sayının En Büyüğünü Bulan Program
Algoritması:
1. Başla
2. a, b ve c'yi gir
3. Eğer a>b ve a>c ise En Büyük Sayı A'dır
Değilse
Eğer b>a ve b>c ise En Büyük Sayı B'dir
Değilse En Büyük Sayı C'dir
4. En Büyük Sayıyı Yaz.
5. Son
Program Uc_Sayinin_En_Buyugu;
Var
a, b, c, EnBuyuk : Integer;
Begin
Write('Üç Sayı giriniz: ');
Readln(a, b, c);
If (a>=b) and (a>=c) Then EnBuyuk:=a
Else
If (b>=a) and (b>=c) Then EnBuyuk:=b
Else
EnBuyuk := c;
Writeln('En Büyük Sayı = ', EnBuyuk);
Readln
End.
DÖNGÜLER
1. FOR DÖNGÜSÜ
For Döngüsü
1'den N'e Kadar Sayıların Toplamı
N! Hesaplayan Program
Xn'yi Hesaplayan Program
ex'i Hesaplayan Program
Basamaklarının Küplerinin Toplamı Kendisine
Eşit Olan Sayılar 3 Haneli Sayılar
FOR BAŞLANGIÇ DEĞERİ TO SON DEĞER DO
N kez \"İşlem\" yap
1'den N'e kadar \"İşlem\" yap
i = 1 den i = N'e kadar \"İşlem\" yap
Pascal'da Yazımı:
For i := 1 to N do
1'den N'e Kadar Tam Sayıları Toplayan Programın:
Algoritması:
1. Başla
2. N sayısını gir.
3. Toplam'a sıfır ata
4. i=1'den i=N'e kadar tam sayıları topla
5. Toplam'ı yaz.
6. Son
Program Toplama;
{Bir den N e kadar tam sayıları toplayan program}
Var
i, N, Toplam : Integer;
Begin
Write('Son sayıyı gir: '); Readln (N);
Toplam := 0;
For i := 1 To N Do
Toplam := Toplam + i;
Writeln('1´den N´e kadar sayıların toplamı = ', Toplam);
Readln;
End.
N sayısının Faktöriyelini Hesaplayan Program
Algoritması:
1. Başla
2. N sayısını gir.
3. Faktöriyel değişkenine 1 ata
4. i=1'den i=N'e kadar tüm sayıları birbiriyle çarp
5. Faktoriyel'i yaz.
6. Son
Program Faktor;
{N Faktöriyeli Hesaplayan program}
{$N+}
Var
i, N : Integer;
Faktoriyel : Extended;
Begin
Write('Son sayıyı gir: '); Readln (N);
Faktoriyel := 1;
For i := 1 To N Do
Faktoriyel := Faktoriyel * i;
Writeln('N Faktoriyel = ', Faktoriyel:5:0);
Readln;
End.
Xn 'i Hesaplayan Program
Algoritması:
1. Başla
2. X ve N sayısını gir.
3. Us değişkenine 1 ata
4. i=1'den i=N'e kadar us = us * x çarp
5. Us'su yaz.
6. Son
Program UsAl;
{Xn 'i Hesaplayan Program}
var
i,x,n: integer;
us: extended;
begin
us:=1;
writeln('Bu program x üzeri n yi hesaplar...');
write('x ve n yi gir...'); Readln(x,n);
for i:= 1 to n do
us:=us*x;
writeln(x, ' üzeri ',n ,' = ',us);
readln
end.
ex 'i Hesaplayan Program
Algoritması:
1. Başla
2. X 'i gir.
3. ex değişkenine 1 ata. n değişkenine 10 ata (en fazla 10 kez işlem yapmak için)
4. n kez aşağıdaki işlemleri yap
a) Fak ve us değerlerine 1 ata
b) j=1 den i'ye kadar
Us=us*x
Fak=Fak*j
c) ex =ex + us/fak
5. Ex'i yaz.
6. Son
program e_uzeri_x;
var
x, ex, fak, us: real;
i, j, n : integer;
begin
write ('x i gir'); readln (x);
n :=10;
ex := 1;
for i:= 1 to n do
begin
fak:=1; us:=1;
for i:=1 to n do
begin
fak:=1; us:=1;
For j:=1 to i do
Begin
us:=us*x;
fak:=fak*j
End;
ex:=ex+us/fak;
end;
end;
writeln('e üzeri x´in değeri = ', ex:2:7);
readln;
end.
Aynı program aşağıdaki gibi de çözülebilir.
Basamaklarının Küplerinin Toplamı
Kendisine Eşit Olan Sayılar 3 Haneli Sayılar
Algoritması:
1. Başla
2. i=100'den 999'a kadar
a) birler = i mod 10 (birler basamağındaki sayıyı Birler değişkenine ata)
b) onlar := trunc (i div 10) mod 10 (Onlar basamağındaki sayıyı Onlar değişkenine ata)
yuzler := trunc (i div 100) (Yuzler basamağındaki sayıyı Yuzler değişkenine ata)
eğer (birler * birler * birler + onlar * onlar * onlar +
yuzler * yuzler * yuzler = i)'ye eşitse i'yi yaz.
6. Son
Program kuplerin_carpimi;
{Basamaklarının küplerinin carpimi kendisine esit olan sayilar}
var
i, birler, onlar, yuzler: integer;
begin
for i:= 100 to 999 do
begin
birler := i mod 10;
onlar := trunc (i div 10) mod 10;
yuzler := trunc (i div 100);
if (birler * birler * birler + onlar * onlar * onlar +
yuzler * yuzler * yuzler = i) then write (i:5);
end;
readln
end.
Yanıt: 153-370-371-407
belki iş görür . . .
Sh@doW KinG
03-12-2007, 07:15 PM
sağoL çok işime yarar buNLar
ASCII KOD TABLOSU Bu kodlar tüm programcıların ortak kunlandığı kodlardır.
buradaki kodları pascal ortamında çıkarmak istiyorsanız yanındaki sayı ile ALT GR+ASCII
kodu girin böylece oradaki gördüğünüz 255 tane karakteden istediğinizi
kunlanabilirsinizuses crt;
var
r,a,i:byte;
begin
clrscr;
a:=1;
for i:=1 to 255 do
begin
r:=r+1;
gotoxy(a,r);
writeln(i,'=',chr(i));
if (i=25) or (i=50) or (i=75) or (i=100)or (i=125)or (i=150)or (i=175)or (i=200)
or (i=225)or (i=250) then
a:=a+7;
if r=25 then
r:=0;
end;
readln;
end.
Tam Sürümü Görmek için Yana Tıklayın : Pascalda Dizi Kullanımı
UĞUR
09-23-2007, 04:12 PM
Pascalda Dizi Kullanımı
Hangi programlama dilini kullanıyor olursanız olun değişken tanımlamanı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.
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.
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[i]);
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}
GİRİŞ ÇIKIŞ işlemleri
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) 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) parametre
Örnek :
Uses Crt;
var
isim: string;
Begin
Write('Lutfen isminizi girin :');
Readln(isim);
Writeln(' Merhaba ', isim);
end.
Write:
Algoritma
Bir programi programlama dillerinde yazdigimizi ögrendik. Programlama dilinin ne oldugunu daha
sonra anlatacagim. Programlama dillerinde bir program yazarken yapilan her isleme komut ve bu
komutlarin bütününe de programin kodu denilir. Yani biz bir programi kodlariz. Ancak bu kodlari
belirli sirada ve düzende vermek zorundayiz. Yoksa pek de akilli olmayan bilgisayarimiz bunlari
kendine göre siraya koyamaz. Biz ona hangi islemi ne zaman yapacagini söyleriz. Gerekirse bazi
komutlari hiç isleme sokmamasini, bir komutu birden çok defa icra etmesini ya da belirli sartlarda
ne yapmasi gerektigini bilgisayara anlatmak için bir düzen içinde kodlarimizi yazmaliyiz. Iste bu
düzene programin akisi ve bu akisin tamamina da programin algoritmasi denilir.
Çok akilli bir robot düsünelim. Bu robot sesle çalissin. O zaman her sözümüz robot için bir
komuttur. Robota egil dersek egilir. Bu onun için bir komuttur. Ancak robottan yerdeki kalemi size
vermesini isteyecekseniz belki birden fazla komut kullanmak zorundasiniz. Mesela bu örnek için
robota 4 tane komutu söyle verebilirsiniz:
Egil.
Kalemi al.
Ayaga kalk.
Kalemi bana ver.Bu seklide verdiginiz 4 komutun tümüne birden program diyebiliriz. Mesela bu
robotun programlanabilir özelligi de olsun. Siz bu robota bu 4 komutu birden ögretip de bundan
sonra her \"kalemi ver\" dediginizde bu isi yapmasini saglayabilirsiniz. Bundan robot, sonra siz
\"kalemi ver\" komutunu söyleyince hemen daha önceki programi çalistirir ve bu 4 islemi yaparak
sonuçta kalemi size verir. Peki programdaki 3. satirla 2. satiri yer degistirirseniz robot ne yapar.
Egilir kalkar ve kalemi almaya çalisir ama kalem yerde oldugundan alamaz ve komutunuz dogru
çalismaz. Dogru çalismasi için yukardaki sirada verilmelidir. Iste bu robotunuzun kalem verme
algoritmasidir.
Daha anlasilir ve günlük hayatta çok kullandigimiz bir örnek verelim. Mesela kis ayindayiz ve
evden disari çikacagiz. Pencereden bakiyoruz. Hava yagmurluysa semsiyemizi alalim, degilse
almayalim ve disari çikalim. Bu isin algoritmasini örnegin 2 yolla kurabiliriz. 1.'si:
Pencereden disari bak.
Eger hava yagmurluysa semsiyeni al.
Disari çik.Bir kisiye bu üç komutu verirseniz hemen pencereden disari bakar ve eger hava
yagmurluysa semsiyesini alir ve sonra disari çikar. Dikkat ettiyseniz \"Eger hava yagmurlu degilse\"
gibi bir sart yok. Zaten 2. sart yanlissa 3. adima geçeceginden semsiyesiz olarak disari çikmis
olur. Bu olayi birde su algoritma ile yapalim:
Pencereden disari bak.
Eger hava yagmurlu degilse 4. adima geç.
Semsiyeni al.
Disari çik.Gördügünüz gibi ayni isi 2 farkli algoritma ile yaptik. Dikkat ederseniz iki islemin de ayni
sonucu verecegini görürsünüz. Bu sefer tersten yaptik isi. 2. adim bir karar verme adimidir ve
eger hava yagmurlu degilse 4. adima geçmeye karar veriyor, 3. adim yapilmamis (atlanmis)
oluyor ve semsiye alinmadan disari çikiliyor. Eger 2. adimdaki sart yanlissa, yani hava
yagmurluysa 4. adima geçmiyor ve 3. adimdan devam ediyor islemlere. Bu durumda semsiye de
alinmis oluyor.
Buraya kadar okuduklarimiza göre programciyi \"Problemi analiz eden ve onu bir programlama dili
ile bilgisayara anlatan, yazan, programlayan kisi\" olarak tanimlayabiliriz. Algoritma ise
\"Programcinin Problemi analiz ettikten sonra onu en kisa ve en hizli çözmek için gelistirdigi
yoldur\".
Artik genel olarak algoritmayi anlamis olduk. Pascal'da Programlamayi anlatirken de yeri geldikçe
algoritmalardan yararlanacagiz. Sunu unutmayalim ki iyi bir program önceden tasarlanmis ve
bütün kullanim amaçlari belirlenmis programdir. Aksi takdirde isimiz hizlanacagina yavaslayabilir
de..
Masterhack.Com > Programlama Dilleri > PascaL > Pascal Hakkında Herşey
PDA
eXTReMe Tracker
Bedava Üye OL
Tam Sürümü Görmek için Yana Tıklayın : Pascal Hakkında Herşey
DarkEvenT
05-23-2009, 01:12 PM
Pascal Programının Yapısı
Program Program_Adı;
Tanımlamalar
Procedure ve Function'lar
Ana program
şeklinde kısaca tanımlamabilir. Ancak bu yapıyı biraz açarsak genel olarak bir pascal programı şu
şekildedir:
Program Program_Adı;
Uses
Kullanılacak Unit'ler
Type
Özel veri tipleri
Const
Sabit değerler
Var
Değişken tanımlamaları
Label
Etiketler
Procedure ve Function'lar
Begin
Ana program
End.
Yukardaki yapıda kalın olan yazılar Pascal'ın kendi
deyimlerihttp://www.tekplatform.com/images/smilies/virgs.gif diğer yazılar ise bunların altına
nelerin geleceğidir. Anlayacağınız Pascal'da bir program \"Program\" deyimiyle başlar ve bunun
hemen yanına programın ismini yazarsınız. Ve yine gördüğünüz gibi bir her program \"End.\" ile
biter.
Uses: Bu deyim ile programımızın kullanacağı unit'lerin isimlerini programa anlatırız. Unitlerin ne
olduğunu daha sonra göreceğiz ama genelde bir pascal programının basşında \"Uses Crt;\"
şeklinde bir kod bulunur. Burada Crt isimli Pascal'ın hazır unit'lerinden birisini kullanacağımızı
belirtiriz.
Type: Pascalda kendi değişken tiplerimizi oluşturabiliriz. Bu işlemi bu etiketin hemen altında
yazdığımıza komutlarla yaparız.
Const: Programımızda kullanacağımız sabit verileri burdan girebiliriz.
Var: Kullanacağımız değişkenleri burada tanımlarız.
Label: Programlarımıza etiket kullanmak istersek buraya etiket isimlerini yazabiliriz.
Procedure Function'lar: Kendi yapacağımız komutlar olan procedure ve functionları buraya
yazarız.
Begin: Her programın başında Begin kullanılır. Programımızın başladığını belirtir. Bu ifadeden
sonra programımızı yazarız.
End: Programı bitirdiğimiz anlamındadır. Bunun altına yazılacak satırlar bir işe
yaramazhttp://www.tekplatform.com/images/smilies/virgs.gif yani çalışmazlar.
Buradaki birçok şeyi daha bilmiyorsunuz ama zaten buraya da öğrenmek için geldiniz. Merak
etmeyinhttp://www.tekplatform.com/images/smilies/virgs.gif hepsini tek tek anlatacağım. Zaten
her programda da bunların hepsini kullanmayacağız. Mesela şu da bir programdır ve ekrana
\"Merhaba\" yazar:
begin
write('Merhaba');
end.
Gördüğünüz gibi ne prosedürhttp://www.tekplatform.com/images/smilies/virgs.gif ne label ne
varhttp://www.tekplatform.com/images/smilies/virgs.gif ne de program adı var ama programımız
aslanlar gibi çalışır. Bu programı Pascal'da yazıp çalıştırırsanız ekrana Merhaba yazar. Ama
hemen program ekranına döndüğü için bunu göremezseniz Alt+F5'e basın bakabilirsiniz.
Pascal'da program yapısını da kısaca gözden geçirdik. Artık biraz daha TP'a (Turbo Pascal)
ısınmış olduk. Sonraki derste de birkaç yazım kuralına değindikten sonra program yapmaya
başlayacağız. Gerçi eğer yukardaki örneği yaptıysanız ilk programımızı yapmış olduk.
Pascal'ın Genel Yazım Kuralları
TP'ın da her programlama dilinde olduğu gibi yazım kuralları vardır. Bunları Türkçe'deki imla
kurallarına benzetebilirsiniz. Ancak Türkçe'de bir ayırma ekini ( ' ) ya da noktalı virgülü
(http://sabote.com/Smileys/default/wink.gif yazmazsanız karşıdaki insan cümleyi anlar fakat
Pascal'da ya da başka bir programlama dilinde bir noktalı virgül ya da nokta yüzüden 100'lerce
sayfalık programınız ya hiç çalışmayabilir ya da yanlış çalışabilir. Ama bunu söyledim diye
korkmayın. Zaten Pascal sizi uyarır ve oraya ne koymanız gerektiğini söyler. Fakat zaten siz iyi
bir programcı olduktan sonra bu hataları yapmayacaksınız.
İlk olarak pascalda bütün komutlar noktalı virgül (http://sabote.com/Smileys/default/wink.gif ile
biter. Dikkat edin komutlar diyorumhttp://www.tekplatform.com/images/smilies/virgs.gif satır değil.
Bir satırda 3 komut varsa 3 noktalı virgül olmalı. Typehttp://www.tekplatform.com/images/smilies/
virgs.gif Var Const gibi ifadeler komut değildir ama bunlardan bazılarına noktalı virgül koysanız da
bir zararı olmaz. Yanlış biryere noktalı virgül koyarsanız zaten Pascal bunu size söyler. Hatta
noktalı virgül koymayı unutursanız da size söyler.
Pascal'da aynı satırda en fazla 126 karakter uzunluğunda yazı yazabilirsiniz. Daha uzun olursa
yine TP sizi uyarır.
Pascal'da bir satırda birden çok komut kullanabilirsiniz. Her komutun sonuna koyduğumuz noktalı
virgül sayesinde pascal bu komutları birbirinden ayırabilir.
Pascal'da programhttp://www.tekplatform.com/images/smilies/virgs.gif
değişkenhttp://www.tekplatform.com/images/smilies/virgs.gif
sabithttp://www.tekplatform.com/images/smilies/virgs.gif label... isimleri tanımlarken
harfhttp://www.tekplatform.com/images/smilies/virgs.gif rakan ve alt çizgi ( _ ) dışında başka bir
karekter
(>http://www.tekplatform.com/images/smilies/virgs.gif+http://www.tekplatform.com/images/smilies
/virgs.gif/http://www.tekplatform.com/images/smilies/virgs.gif{http://www.tekplatform.com/images/
smilies/virgs.gif*http://www.tekplatform.com/images/smilies/virgs.gif-
http://www.tekplatform.com/images/smilies/virgs.giféhttp://www.tekplatform.com/images/smilies/vi
rgs.gif\"http://www.tekplatform.com/images/smilies/virgs.gif=http://www.tekplatform.com/images/s
milies/virgs.gif'http://www.tekplatform.com/images/smilies/virgs.gif]http://www.tekplatform.com/im
ages/smilies/virgs.gif
%http://www.tekplatform.com/images/smilies/virgs.gifşhttp://www.tekplatform.com/images/smilies/
virgs.gif@... gibi) ve boşluk kullanamazsınız. Ayrıca yine Türkçe'ye özel karakterleri
(İhttp://www.tekplatform.com/images/smilies/virgs.gifıhttp://www.tekplatform.com/images/smilies/v
irgs.gifĞhttp://www.tekplatform.com/images/smilies/virgs.gifğhttp://www.tekplatform.com/images/
smilies/virgs.gifühttp://www.tekplatform.com/images/smilies/virgs.gifÜhttp://www.tekplatform.com/
images/smilies/virgs.gifçhttp://www.tekplatform.com/images/smilies/virgs.gifÇhttp://www.tekplatfor
m.com/images/smilies/virgs.gifÖhttp://www.tekplatform.com/images/smilies/virgs.giföhttp://www.t
ekplatform.com/images/smilies/virgs.gifşhttp://www.tekplatform.com/images/smilies/virgs.gifŞ) bu
tip isimlerde kullanamazsınız. Ama ekrana yazı yazdırırken her türlü karakteri kullanabilirsiniz.
Ayrıca pascalda ayrılmış (reserved) denilen kelimeleri de
değişkenhttp://www.tekplatform.com/images/smilies/virgs.gif
labelhttp://www.tekplatform.com/images/smilies/virgs.gif sabit... isimleri olarak kullanamazsınız.
Bunları kullanırsanız pascal sizi uyarır. Bu ayrılmış kelimler
\"beginhttp://www.tekplatform.com/images/smilies/virgs.gif endhttp://www.tekplatform.com/images/
smilies/virgs.gif varhttp://www.tekplatform.com/images/smilies/virgs.gif
nothttp://www.tekplatform.com/images/smilies/virgs.gif
andhttp://www.tekplatform.com/images/smilies/virgs.gif
orhttp://www.tekplatform.com/images/smilies/virgs.gif
forhttp://www.tekplatform.com/images/smilies/virgs.gif
labelhttp://www.tekplatform.com/images/smilies/virgs.gif
dohttp://www.tekplatform.com/images/smilies/virgs.gif
ifhttp://www.tekplatform.com/images/smilies/virgs.gif else...\" gibi kelimelerdir. Bu kelimelerin tam
listesini en son olarak vereceğim.
Pascal'da Begin ile başlayan ve end; ile biten ve arasında sınırsız sayıda komut bulunabilen
kısımlara blok denir ve bu bloklar tek bir komut yapa paket gibi kullanılabilir. Buna daha sonra yeri
gelince değineceğiz.
İyi bir Programcı yazdığı programların bazı yerlerine orada ne yaptığına ilişkin birtakım notlar
yazar. Bu yazılar programa dahil değildir ve istenilen herşey yazılabilir. Böyle bir yazı
yazacaksanız { ile } arasına veya (* ile *) arasına yazmak zorundasınız. Buna ilerde örnekler
vereceğiz.
Aynı satıra birçok komut yazılabileceği gibi bir komut alt alta birden çok satıra bölünerek de
yazılabilir. Tabii kelimeler bölünemez. Mesela
if a>b then write('A daha büyük') else write('B daha büyük'); komutu ile
if a>b then
write('A daha büyük')
else
write('B daha büyük'); ifadesi aynı işi yapar ve pascal hiçbir hata vermez.
Pascalda bir değişkene değer atarken := iki ifadeyi karşılaştırırken ise sadece = kullanılır. Bunları
değişkenler konusunda ele alacağız.
Pascal'da kullanılan her değişken önceden tanımlanmalıdır. Aksi takdirde tanınmayacak ve hata
verilecektir. Ayrıca sabitlere değer ataması yapılamaz.
Şimdilik birkaç kural yazdım ama aklıma geldikçe ilave ederim. Ayrıca bazı kurallar konu
aralarında belirtilecek.
Pascal'da Değişkenhttp://www.tekplatform.com/images/smilies/virgs.gif
Sabithttp://www.tekplatform.com/images/smilies/virgs.gif Tip ve Labeller
Her programlama dilinde değişkenler vardır. Değişkenler programlamada hayati önem taşır.
Değişkeni program içinde bir değeri ya da bilgiyi tutan bir birim olarak ifade edebiliriz. Bu bölümde
değişkenleri tüm tipleriyle çok ayrıntılı ve bol örnekli anlatacağım. Ayrıca
sabitlerhttp://www.tekplatform.com/images/smilies/virgs.gif tipler ve labelleri de öğreneceğiz.
Adından da anlaşılabileceği gibi değişkenlerin değeri program içinde istenildiği kadar
değiştirilebilir. Bir değişkenin bir adıhttp://www.tekplatform.com/images/smilies/virgs.gif tipi ve
değeri vardır. Değişken adı olarak istediğiniz ismi verebilirsiniz. Değişkenin tipini ise
programınızın başında var deyimi ile tanımlamak zorundasınız.
Var Deyimi:
Programda kullanacağımız bütün değişkenleri programın başında tanımlamak ve cinsini (sayı
mıhttp://www.tekplatform.com/images/smilies/virgs.gif yazı mı.. gibi) belirtmek zorundayız. Her
programlama dilinde buna gerek olmayabilir ama Pascal'da bu iş mecburidir. Değişkenlerimizi
Var deyiminde sonra tanımlamamız gerekir. Var deyimi bir komut olmadığından sonuna noktalı
virgül konulmaz. Genel kullanım şekli:
Var
değişken: değişken_tipi;
şeklindedir ve Pascal'da program yapısı dersinde gördüğümüz yerde kullanılır. Değişken tiplerini
görürken bu deyimin kullanılışını göreceğiz. Merak edenler için söyleyim: Var kelimesi İngilizce
Variable kelimesinin kısaltılmışıdır ve değişken ya da kısaltma anlamındadır.
Değişken Tipleri
Pascal'da her değişkenin bir tipi olmak zorundadır. Bir değişken programın başında hangi tipte
tanımlandıysa programın sonuna kadar o tipte bilgi saklayabilir ve o değişkene o tipten başka bir
tipte veri atanamazhttp://www.tekplatform.com/images/smilies/virgs.gif eklenemez. Yani mesela
sayı tipinde bir değişkene \"kalkan\" değeri atanamaz. Bu durumda program hiç çalışmaz ve
Pascal editörü hata verip o yanlışlığın yapıldığı değişkene imleci getirip hata uyarısı yapar.
Sayısal Değişkenler:
Adından da anlaşılacağı gibi değeri bir sayı olabilen değişkenlerdir. Bu değişkenler bir sayıyı
tutarlar. Ayrıca matematiksel işlemlerde de kullanılabilirler. Birkaç çeşidi vardır. Öncelikle sayısa
değişkenleri ikiye ayırmak gerekir. Birncisi tasayılar ve ikincisi gerçek (ondalıklı) sayılar. Tam
sayıların ve ve gerçek sayıların da kendi aralarında sınıfları vardır. İlk önce tamsayı tiplerinden
başlayalım. Tamsayı tiplerini hemen bir tabloda verelim:
Tip adı Sınırları Kapladığı alan
Shortint -128..127 1 byte
Byte 0..255 1 byte
Integer -32768..32767 2 byte
Word 0..65535 2 byte
Longint -2147483648..2147483647 4 byte
Tabloda tip adı dediğimiz şey var deyimiyle kullanacağımız
adhttp://www.tekplatform.com/images/smilies/virgs.gif sınırları o sayısal değikenin alabileceği
değerlerin sınırıdır. Yani byte tipinde bir değişkenin değeri 256 olamaz. Buna göre bizim işimize
hangisi yarıyorsa onu kullanabiliriz. Kapladığı alan ise bu değişken için hafızada kullanılan alanın
byte cinsinden değeridir. Programlarımızın hafızada (hard-disk'te değil) az yer kaplaması daha
iyidir. Bunun için gereksiz yere longint değişkenini kullanmamamız iyi olur. Çünkü pascalda en
fazla 64 kilobyte'lık (yaklaşık 64000 byte) değişken kullanabiliriz. Hemen bunlarla ilgili birkaç
örnek program yapalım.
Örnek 1: Bu program 2 sayıyı toplar ve sonucu ekrana yazar. Şimdilik ekrana nasıl yazdığımızın
üzerinde durmayalım ama zaten sizin de anlayacağınızı düşünüyorum.
Program Toplama_Denemesi;
Uses Crt;
Var
sayi1http://www.tekplatform.com/images/smilies/virgs.gifsayi2: integer;
toplam: integer;
Begin clrscr;
sayi1:=19;
sayi2:=81;
toplam:=sayi1+sayi2;
write('Bu sayıların toplamı='http://www.tekplatform.com/images/smilies/virgs.giftoplam);
readln;
end.
Bu program ekrana 100 yazar. Çünkü toplam isimli değişkenimizin son değeri 100'dür. Burada
readln komutu enter'a basılmasını bekler. Bunu daha sonra göreceğiz. Write ise ekrana birşeyler
yazar. Bunu da ayrıntılı olarak inceleyeceğiz. Clrscr ise ekranı temizler. Şimdilik görmemiz
gereken atama işlemlerihttp://www.tekplatform.com/images/smilies/virgs.gif yani bir değişkenin
değerini değiştirme ve değişkenleri tanımlama. Gördüğünüz gibi 3 tane değişkenimiz var ve
bunları iki satırda tanımlıyoruz. Hepsinin tipi de aynı olduğu için üç değişkenimizi birden
Var
sayi1http://www.tekplatform.com/images/smilies/virgs.gif
sayi2http://www.tekplatform.com/images/smilies/virgs.gif toplam: integer;
şeklinde topluca ya da üçünü de ayrı ayrı tanımlayabiliriz. Bu sizin keyfinize kalmış.
Örnek 2: Bu program da kullanıcıdan (yani sizden) aldığı iki sayıyı çarpıp ekrana yazar:
Program Carpma_Denemesi;
Uses Crt;
Var
ahttp://www.tekplatform.com/images/smilies/virgs.gif bhttp://www.tekplatform.com/images/smilies/
virgs.gif c: integer;
Begin clrscr;
write('Birinci sayıyı giriniz:');
readln(a);
write('İkinci sayıyı giriniz:');readln(b);
c:=a*b;
writeln('Sonuç='http://www.tekplatform.com/images/smilies/virgs.gifc);
readln;
End.
Gördüğünüz gibi ilk önce a ve b değişkenlerinin değeri kullanıcıdan
alınıyorhttp://www.tekplatform.com/images/smilies/virgs.gif sonra c değişkeninin değeri a ile b'nin
çarpımı olacak şekilde hesaplanıp ekrana yazdırılıyor. Burada readln(değişken_adı); komutunu
daha sonra anlatacağız. Şimdilik kullanıcıdan bir bilgi almak amacıyla kullanıldığını bilseniz yeter.
Pascal'da aynı satıra birden çok komut yazılabileceğini ve büyük-küçük harf ayrımı olmadığını
tekrar hatırlatıyım.
Örnek 3: Son olarak sizin kaç yaşında olduğunuzu bulan basit bir program yapalım:
Program Yas_Bul;
Uses Crt;
Var
simdiki_yilhttp://www.tekplatform.com/images/smilies/virgs.gif dogum_yili: integer;
yas: byte;
Begin clrscr;
write('Kaç yılında doğdunuz: ');readln(dogum_yili);
write('Şimdi hangi yıldayız: ');readln(simdiki_yil);
yas := simdiki_yil - dogum_yili;
writeln('Siz şu anda
'http://www.tekplatform.com/images/smilies/virgs.gifyashttp://www.tekplatform.com/images/smilie
s/virgs.gif' yaşındasınız!');
Readln;
End.
Gördüğünüz gibi simdiki_yil ve dogum_yili değişkenlerini integer yaparken yas değişkenini byte
yaptık. Çünkü 255 yaşından daha büyük insan olamaz. Bu durumda boşyere onu da integer
yapıp hafızada yer işgal etmeyelim. İyi bir programcı olmak için bunlara dikkat etmeliyiz. Yine iyi
bir programcı olarak değiken isimlerimizi anlamlı ve mümkün olduğunca kısa ve o değişkenin
içeriği ile alakalı yapalım. Program içinde hata yapmamak için bunlar gerekli. Çünkü
değişkenlerimize d1http://www.tekplatform.com/images/smilies/virgs.gif
d2http://www.tekplatform.com/images/smilies/virgs.gif
d3http://www.tekplatform.com/images/smilies/virgs.gif d4... gibi isimler verirsek sonra hangisinin
içeriği ne onu karıştırabiliriz. Değişken isimlerinin uzunluğu yanılmıyorsam 50 karekter kadar
olabilir ve boşluk içeremezhttp://www.tekplatform.com/images/smilies/virgs.gif sayı ile
başlayamaz. Bu arada crt uniti ise clrscr komutunu kullanmak için gereklidir ve Pascal'ın hazır
unit'lerindendir (Unit'in ne olduğunu şimdilik boşverin!).
DarkEvenT
05-23-2009, 01:13 PM
Tamsayı değişkenlerin ne olduğunu artık az-çok anladık. Siz de üzerinde denemeler yaparak
daha iyi öğrenebilirsiniz. Zaten her programımızda kullanacağız. Tamsayı değişkenlere ondalıklı
bir sayı veremeyiz. Yani a bir tamsayı ise a:=2.9 dersek program çalışmaz. Bu tür ondalıklı
(gerçekhttp://www.tekplatform.com/images/smilies/virgs.gif gerçek ya da real) sayıları kullanmak
için gerçel değişkenler kullanmalıyız.
Gerçek Sayı Tipleri:
Tabii bunlara gerçek diyorsak diğerleri sahte değil. Gerçekten kastımız virgüllü ya da ondalıklı ya
da kesirli demektir. Bu tip sayıların da tıpkı tamsayılarda olduğu gibi çeşitleri var. Bu çeşitliliğin
temel sebebi gereksiz hafıza kullanmaya engel olmaktır. Gerçek sayı tipleri şunlardır:
Tip adı Sınırları Kapladığı alan
Real 2.9 x 10^-39..1.7 x 10^38 6 byte
Single 1.5 x 10^-45..3.4 x 10^38 4 byte
Double 5.0 x 10^-324..1.7 x 10^308 8 byte
Extended 3.4 x 10^-4932..1.1 x 10^4932 10 byte
Comp -2^63+1..2^63-1 8 byte
Burada Real'den başka tiplerin de olduğunu bilmeniz için hepsini gösterdim ama gerçekte sadece
Real tipini kullanmanız yeterlidir. Html'de bir sayının üstünü göstermek olmadığından tablo biraz
kötü gözüktü. Ben birisini yazı ile yazarsam siz diğerlerini anlarsınız. Real'in sınırları \"2.9 çarpı 10
üzeri -39'dan 1.7 çarpı 10 üzeri 38'e kadardır\". Real tipinin dışındaki tipleri kullanabilmeniz için
prograınızın en başına {şN+} yazmanız gerekebilir. Bunu bilmeniz
gerekmiyorhttp://www.tekplatform.com/images/smilies/virgs.gif real size yeter. Şimdi biraz da bu
tip gerçek değişkenlerle örnek yapalım.
Örnek 1: Bu program girilen sayının karekökünü bulur. sqrt(); komutunu sonra anlatırız. Şimdilik
bu komutun bir sayının karekökünü bulmaya yaradığını bilmeniz yeter.
Program Karekok;
Uses Crt;
Var
sayi:integer;
karekoku:real;
Begin clrscr;
write('Bir tamsayı giriniz: ');readln(sayi);
karekoku:=sqrt(sayi);
write('Bu sayının karekökü: 'http://www.tekplatform.com/images/smilies/virgs.gifkarekoku:16:5);
readln;
end.
Burda kullanılan write komutunun özel bir şekli. Sayıyı düzgün yazdırmayı sağlıyor. Daha sonra
ayrıntılı göreceğiz. Bunları kaldırıp direk olarak
write('bu sayının karekökü:'http://www.tekplatform.com/images/smilies/virgs.gifkarekoku);
şeklinde yazıp deneyin. Sayıyı bilimsel olarak sonuna E falan koyarak yazar.
Örnek 2: Bu program kullanıcıdan 3 dersinin notunu ister ve ortalamasını bulup ekrana yazar.
Program ortalama_bul;
Uses crt;
Var
not1http://www.tekplatform.com/images/smilies/virgs.gif
not2http://www.tekplatform.com/images/smilies/virgs.gif not3: integer;
ort: real;
Begin Clrscr;
Write('Matematik Notunuz (0..100 arası): ');readln(not1);
Write('Fizik Notunuz (0..100 arası): ');readln(not2);
Write('Kimya Notunuz (0..100 arası): ');readln(not3);
ort:=(not1 + not2 + not3)/3;
write('Ortalamanız: 'http://www.tekplatform.com/images/smilies/virgs.gifort:5:2);
Readln;
End.
Burada dikkat etmeniz gereken birşey daha var. ortalamayı hesaplarken yaptığımız işleme dikkat
edin. Tıpkı matematik dersinde gördüğümüz gibi parantezlerin işlem önceliği var. Sayılarla
yapabileceğiniz aritmetik işlemleri ilerde göreceğiz.
Buraya kadar yapılan ve bundan sonra yapılacak bütün örnekleri kendi elinizle Pascal editöründe
yazmanızı tavsiye ederim. Yoksa öğrenemezsiniz. Ama eğer kodları direk olarak Pascal
editörüne aktarmak istiyorsanız kodu işaretleyip sağ tıklayın ve kopyala yapın. Daha sonra Not
defterini (notepad) açıp oraya yapıştırın kodları ve kaydedin. ama kaydederken dosya isminin
sonuna .pas yazın. Mesela deneme.pas gibi. Kaydettikten sonra daha önce anlattığımız şekilde
üstüne çift tıklayarak açabilirsiniz. Sonra istediğiniz gibi düzeltebilir veya çalıştırabilirsiniz.
String Değişken tip:
Programcı diliyle bu tip değişkenler alfasayısal değerler alabilir. Halk dilinde ise bunlara yazı ya
da sayısal olmayan veri diyebiliriz. Yani sizin yaşınız sayısal bir değer ise isminiz alfasayısal bir
değerdir. Alfasayısal ifadeler iki tırnak içerisinde gösterilir. Yani isminizi 'Halil İbrahim Kalkan'
şeklinde gösterirsiniz. Ancak sayı değil dekik diye içerisinde sayı geçmeyecek diye birşey yoktur.
Yeni 'Beim yaşım 17.' cümlesi ve '392' sayısı da tırnak içerisinde yazıldığından string tiplerdir ve
matematiksel işlemlerde kullanılamazlar. Ya da mesela telefon numaranız bir sayı olduğu halde
bunu tutmak için sayısal değişken kullanılmazhttp://www.tekplatform.com/images/smilies/virgs.gif
onun yerine string değişken kullanılır. Çünkü telefon numaranızın üstünde
çıkartmahttp://www.tekplatform.com/images/smilies/virgs.gif kök alma gibi matematiksel işlem
yapmayacaksınız. Ama tabii ki bu size kalmış. İsterseniz telefon numarası için longint değişken
tanımlayabilirsiniz.
String değişkenlerin içerisinde maksimum 255 karekterlik bilgi bulunabilir. Bu karekter her türlü
harfhttp://www.tekplatform.com/images/smilies/virgs.gif
sayıhttp://www.tekplatform.com/images/smilies/virgs.gif işarethttp://www.tekplatform.com/images/
smilies/virgs.gif boşluk... olabilir. Mesela 'a=2x5+3/62' diye bir string ifade yazılabilir.
Anlayacağınız tırnak içerisinde ne varsa sabittir.
Örnek bir program yazalım:
Program String_tip_ornegi;
Uses crt;
Var
isim: string;
yas: byte;
begin clrscr;
write('Adınızı yazınız: ');readln(isim);
write('Yaşınızı yazınız: ');readln(yas);
clrscr;
writeln('Merhaba 'http://www.tekplatform.com/images/smilies/virgs.gifisim);
writeln('Sizin yaşınız 'http://www.tekplatform.com/images/smilies/virgs.gifyas);
readln;
end.
Bu programı pascal'da yazıp çalıştırırsanız sizin isminizi ve yaşınızı alıp ekrana geri yazar. Şimdi
dikkat ettiyseniz 'Adınızı yazınız: ' ifadesi de aslında string ifadedir. Bu ifade değişken değilhttp://
www.tekplatform.com/images/smilies/virgs.gif sabit olduğundan iki apostrof işareti arasına yazılır.
Peki bu ifadeleri de bir değişkenin değeri yapalım ve öyle yazdıralım:
Program String_tip_ornegi;
Uses crt;
Var
isimhttp://www.tekplatform.com/images/smilies/virgs.gif
ad_istehttp://www.tekplatform.com/images/smilies/virgs.gif
yas_istehttp://www.tekplatform.com/images/smilies/virgs.gif
yas_yazhttp://www.tekplatform.com/images/smilies/virgs.gif ad_yaz: string;
yas: byte;
begin clrscr;
ad_iste:='Adınızı yazınız: ';
yas_iste:='Yaşşınızı yazınız: ';
write(ad_iste);readln(isim);
write(yas_iste);readln(yas);
clrscr;
yas_yaz:='Sizin yaşınız ';
ad_yaz:='Merhaba ';
writeln(ad_yazhttp://www.tekplatform.com/images/smilies/virgs.gifisim);
writeln(yas_yazhttp://www.tekplatform.com/images/smilies/virgs.gifyas);
readln;
end.
Bu programı yazıp çalıştırınca bir önceki program ile tamamen aynı işi yaptığını göreceksiniz.
Ama burada gereksiz yere fazla değiken kullanıp fazla işlem yaptık. Ama amacımız öğrenmek.
Gördüğünüz gibi string tipdeki bir değişkene veri aktarımı sayısal tipli bir değişkene veri aktarımı
ile aynı ama burada verileri iki apostrof işareti arasına yazıyoruz ( '.....' gibi ). Bu arada eğer
programları kopyala/yapıştır yolu ile pascal'a aktarıyorsanız (ki bunu yapmasanız daha iyi
öğrenirsiniz) Türkçe karakterlerde sorunlar vuku bulmuş olabilir(!). Bu windows ile ms-dos'un ascii
karakterlerinin farklı olmasından kaynaklanıyor ve telafisi zor. En iyisi elle yazmak. Bu arada
ilerde ascii'nin de ne olduğuna değineceğimiz için \"bu ascii de ne demek\" diye düşünmenize
gerek yok.
Bir string ifade aksi belirtilmedikçe maksimum 255 karakter uzunluğunda olur ve hafızada 256
byte alan işgal eder. Aksi belirtilmedikçe diyince hemen aksini belirtip daha uzun olabileceğiniz
sanmayın. Tersine daha az olabilir. Peki nasıl aksini belirteceğiz.
DarkEvenT
05-23-2009, 01:14 PM
Var
isim: string[40];
şeklinde. Artık isim adlı string değişkenimiz en fazla 40 karakter uzunluğunda olabilir ve 41 byte
yer kaplar (Neden mi 41 byte? Unutmazsak sonra anlatırız onu da!). Bir insanın ismi de 40
harften fazla olamayacağından (ya da olsa bile kısa yazsın sayın kullanıcılarımız!) gereksiz yere
256 bytelık yer işgal etmeyip 215 byte kar edelim. Artık bu değşkene 40 harften daha uzun bilgi
girilmek istenirse sadece ilk 40 karakterini alır ve gerisini yok sayar.
String tipin çok özelliği var. Bunları ilerdeki konularda göreceğiz. Ancak şimdi String tiplerde çok
işinize yarayacak (ilk etapta gereksiz gözükebilir ama döngüleri ve karar deyimlerini gördükten
sonra daha iyi anlayacaksınız) bir özelliğe gözatalım. Bir string değişkenin x. karakterini elde
etmek için string_ifade
şeklinde kullanılır. Yani isim adlı bir string değişkenimizi isim='www.kalkan.cjb.net
(http://www.kalkan.cjb.net/)' olarak tanımlayııp sonra da write(isim[5]); komutunu verirsek ekrana
sadece k harfi yazılır. Bununla ilgili çok örnek yapacağımızdan şimdilik üzerinde durmayalım ve
örnek yapma işini size bırakalım.Sayısal ve string değişkenlerden sonra programcılığın
vazgeçilmez değişkeni olan Char tipini anlatalım. Şimdilik fazla işinize yaramayacak (çünkü daha
kontrol ve karar verme'yi görmedik) ama ilerde programlarınızda ilk tanımlayacağınız değişken
olacağından emin olabilirsiniz.
Char Değişken Tipi:
String değişkenler 255 karakterlik veri alabiliyordu. Char ise tahmin edeceğiniz gibi daha fazla
karakter almıyor! Char tipinde bir değişken yanlızca bir adet karakter alabilir ve bir byte yer kaplar
hafızada. Yine string tipindeki gibi değer atamasında iki apostrof işareti arasına en fazla 1
karakter olabilecek şekilde yazılır. Örnek bir program yapalım daha iyi anlarız.
Program Char_Tipinde_alistirma;
Uses crt;
var
c: char;
isim: string;
a: byte;
begin
clrscr;
write('Yine adınızı girin bakalım....: ');readln(isim);
write('Şimdi en fazla
'http://www.tekplatform.com/images/smilies/virgs.giflength(isim)http://www.tekplatform.com/image
s/smilies/virgs.gif' olacak şekilde sıfından büyük bir sayı giriniz: '); readln(a);
c:=isim[a];
writeln('Sizin isminizin
'http://www.tekplatform.com/images/smilies/virgs.gifahttp://www.tekplatform.com/images/smilies/v
irgs.gif'. harfi
\"'http://www.tekplatform.com/images/smilies/virgs.gifchttp://www.tekplatform.com/images/smilies/
virgs.gif'\"');readln;
end.
Bu örnek şimdiye kadar yaptıklarımızın en karışığı gibi gözükebilir ama biraz dikkat ederseniz
anlayacağınız kesin. clrscr; komutuna kadar olan yeri biliyorsunuz. Ondan sonra isim adlı
değişkene ekrandan (daha sonra ayrıntılı olarak anlatacağımız şekilde) bilgi girilmesi isteniyor.
Ondan sonra yazılan write ifadesinde bilmediğimiz birşey var. Length fonksyonu bir string tipli
ifadenin kaç karakter uzunluğunda olduğunu verir. Bunu da daha sonra anlatacağız. Ondan sonra
c:=isim[a]; ifadesinde c adlı char değişkene isim değikeninin a. karakterini atıyoruz. Mesela
isminiz \"Osman\" ise ve a değerine de 3 girdiyseniz c:= ifadesinin karşısındaki değer 'm' olur. Yani
c değişkeninin değerine 'm' harfini (karakterini) atamış oluruz. Programı birkaç defa çalıştırarak
daha iyi anlayabilirsiniz.
Tabii bu şekilde bizim pek işimize yaramayabilir ama özellikle bir char tipindeki değişkeni readkey
komutuyla kullanılarak faydalanabiliriz. Bunlara ilerde değineceğiz.
Bunların dışında şu anda hemen kullanamayacak olsak da diğer tiplere de kısaca değinelim.
Boolean Tipli değişkenler:
Değeri ya TRUE (doğru) ya da FALSE (yanlış) olabilen değişkenlerdir. Mantıksal
karşılaştırmalarda kullanılabilir. Hafızada 1 byte alan kaplar.
Bundan sonraki tipdeki olan dizi ve record tipleri için sonraki derslerde özel bir bölüm açıp
anlatacağı çünkü kullanım alanları çok geniş.
Dizi (Array) tipli değişkenler:
Dizi değişken genelde benzer bilgileri bulunduran değişkenlerdir. Örnek verirsek daha iyi anlaşılır.
Önceki programlarımızın birisinde hatırlarsanız bir öğrencinin üç notunun ortalamasını bulmuştuk.
Peki 1 değil de 100 öğrenci varsa ne olacak. Her birisi için üç not ve bir ortalama olmak üzere 4
değişken tanımlarsak toplam 400 değişken tanımlamamız lazım. Bu hem çok uzun zaman
alırhttp://www.tekplatform.com/images/smilies/virgs.gif hem de değişken isimlerini birbirine
karıştırmamız olasıdır. Bunun yerine 100 öğrencinin 3'er notunu ve ortalamasını sadece 2
değişken kullanarak kolayca tutabiliriz. Bunun için değişken tanımlarımız
Var
notlar: Array[1..100http://www.tekplatform.com/images/smilies/virgs.gif1..3] of byte;
ortalama: Array[1..100] of real;
şeklinde olmalıdır. Şimdilik bunları nasıl kullanacağımız fazla değinmeden geçelim çünkü diziler
diye ayrı bir bölümde hepsini anlatacağım.
Kayıt (Record) tipli değişkenler:
Şimdiye kadar bir öğrencinin adıhttp://www.tekplatform.com/images/smilies/virgs.gif notları ve
ortalaması için ayrı değişkenler kullandık. Peki bunların hepsini bir ana değişkenin alt değişkenleri
olarak tutsak daha kolay ve anlaşılır olmaz mı? Özellikle bu tip değişkenler dosyalama
konusunda çok işimize yarayacak. Genel olarak tanımlaması şu şekildedir:
Type
kayit_tipi=Record
değişkenler...
end;
Var
kayit_adi = kayit_tipi;
Gördüğünüz gibi bu tip bir değişkeni tanımlamak için type etiketini kullanıyoruz ve yeni bir tip
oluşturuyoruz ilk önce. Sonra bir değişkeni tipi bu olacak şekilde tanımlıyoruz. Hemen örnek bir
program yazalım. Bunu kendi ellerinizle yazmalısınız (ben de hep öyle yapıyorum):
Program www.universiteli.net (http://www.universiteli.net/)
uses crt;
type
ogrenci_tipi=Record
isim: string[40];
not1: byte;
not2: byte;
not3: byte;
orta: real;
end;
Var
ogrenci: ogrenci_tipi;
Begin clrscr;
write('İsminiz:');readln(ogrenci.isim);
write('1. Sınavın sonucu:');readln(ogrenci.not1);
write('2. Sınavın sonucu:');readln(ogrenci.not2);
write('3. Sınavın sonucu:');readln(ogrenci.not3);
ogrenci.orta:=(ogrenci.not1+ogrenci.not2+ogrenci.n ot3)/3;
write('Ortalamanız: ');write(ogrenci.orta);
readln;
end.
Gördüğünüz gibi kayıt tipindeki bir değişkenin alt değişkenini nokta ile ayırarak
kayit_degiskeni.alt_degisken seklinde yazıyoruz. İsterseniz with deyimini kullanarak alt değişken
isimlerini direk de kullanabilirsiniz:
Program www.universiteli.net (http://www.universiteli.net/)
uses crt;
type
ogrenci_tipi=Record
isim: string[40];
not1: byte;
not2: byte;
not3: byte;
orta: real;
end;
Var
ogrenci: ogrenci_tipi;
Begin clrscr;
with ogrenci do begin
write('İsminiz:');readln(isim);
write('1. Sınavın sonucu:');readln(not1);
write('2. Sınavın sonucu:');readln(not2);
write('3. Sınavın sonucu:');readln(not3);
orta:=(not1+not2+not3)/3;
write('Ortalamanız: ');write(orta:5:2);
end;
readln;
end.
Bu iki program de birbirinin aynısı işlemleri yapar. With Türkçe'de
\"ilehttp://www.tekplatform.com/images/smilies/virgs.gif beraber\" demektir. Şimdilik bu record
tipinin üzerinde fazla durmayalım. Dosyalar konusunda ayrıntılı olarak göreceğiz zaten.
En çok kullanılan değişken tiplerini gördük. Bir de
sethttp://www.tekplatform.com/images/smilies/virgs.gif yani küme tipi var. Ona da kısaca
değinelim.
Set (Küme) Tipi:
Aynı tipte ve birbiriyle ilgili bilgilerinhttp://www.tekplatform.com/images/smilies/virgs.gif verilerin
oluşturduğu topluluğa küme denir. Mesela 0 ile 9 sayılarından bir küme oluşturabiliriz. Ama bu
kümenin içinde \"A\" harfi geçemez. Çünkü \"A\" sayı değildir. Kümenin elemanları birbirinden virgül
yardımıyla ayrılır. Mesela birkaç küme örneği verelim:
['Ali'http://www.tekplatform.com/images/smilies/virgs.gif
'Ahmet'http://www.tekplatform.com/images/smilies/virgs.gif
'Süleyman'http://www.tekplatform.com/images/smilies/virgs.gif 'Halil İbrahim']
[0http://www.tekplatform.com/images/smilies/virgs.gif1http://www.tekplatform.com/images/smilies/
virgs.gif2http://www.tekplatform.com/images/smilies/virgs.gif3http://www.tekplatform.com/images/
smilies/virgs.gif4http://www.tekplatform.com/images/smilies/virgs.gif5http://www.tekplatform.com/i
mages/smilies/virgs.gif6http://www.tekplatform.com/images/smilies/virgs.gif7http://www.tekplatfor
m.com/images/smilies/virgs.gif8http://www.tekplatform.com/images/smilies/virgs.gif9]
['E'http://www.tekplatform.com/images/smilies/virgs.gif
'e'http://www.tekplatform.com/images/smilies/virgs.gif
'H'http://www.tekplatform.com/images/smilies/virgs.gif
'h'http://www.tekplatform.com/images/smilies/virgs.gif #27]
gibi kümeler olabilir. Eğer kümenin elemanları birbirini takip eden cinsten ise aralarına virgül
koymak yerine ilkini yazıp ardından .. koyup sonuncusunu yazabiliriz. Mesela
[0..9]
['A'..'Z'http://www.tekplatform.com/images/smilies/virgs.gif 'a'..'z']
gibi. İlki olan [0..9] ile bir önceki örneklerde olan ve 0'dan 9'a kadar olan bütün tamsayıların
yazıldığı örneğin hiçbir farkı yoktur. Kümeler böyle ama bunları Type bloğunda şöyle tanımlarız:
Type
harfler = Set of ['A'..'Z'http://www.tekplatform.com/images/smilies/virgs.gif 'a'..'z'];
rakamlar = Set of [0..9];
cevaplar = Set of ['EVET'http://www.tekplatform.com/images/smilies/virgs.gif 'HAYIR']
Bu şekilde tanımlanan kümelerin nasıl kullanılacağını sonraki konularda örneklerin içerisinde
göreceğiz. Ayrıca kümeler üzerinde kesişim
(*)http://www.tekplatform.com/images/smilies/virgs.gif Birleşim
(+)http://www.tekplatform.com/images/smilies/virgs.gif Fark (-) ve ilişki
(=http://www.tekplatform.com/images/smilies/virgs.gif
<>http://www.tekplatform.com/images/smilies/virgs.gif
<=http://www.tekplatform.com/images/smilies/virgs.gif
>=http://www.tekplatform.com/images/smilies/virgs.gif in) işlemleri yapılabiir. Özellikle 'in'
işleminden çok faydalanacağız. Kümelerin içerisinde aynı eleman yanlızca bir kez kullanılabilir ve
öncelik sırası yoktur. Şimdi küme ile ilgili bir program yapalım. Şimdilik bunda anlamayacağınız
yerler olabilir:
Program Kume_Denemesi;
Uses Crt;
Label
en_bas;
var
tus:char;
Begin
en_bas:
tus:=readkey;
Clrscr;
if tus in ['0'..'9'] then begin
writeln('Bastığınız Rakam: 'http://www.tekplatform.com/images/smilies/virgs.giftus);
goto en_bas;
end else begin
clrscr;
writeln(tushttp://www.tekplatform.com/images/smilies/virgs.gif' bir rakam değil!');
end;
readln;
End.
Bu programı TP'da yazıp çalıştırdığın ve klavyenizde rakamlara basın. Bastığınıza rakam
ekranda gözükecektir. Çıkmak için rakam hariç bir tuşa (herhangi bir harfe) basmalısınız.
Programda daha öğrenmediğimiz komutlar var. Ama kalın yazılı olan yere dikkat ederseniz
küme'nin en sık kullanıldığı yer göreceksiniz. Burada basılan tuşun 0 ile 9 arasında bir rakam olup
olmadığıhttp://www.tekplatform.com/images/smilies/virgs.gif başka bir değişle basılan tuşun 0'dan
başlayıp 9'da biten elemanlardan oluşan bir kümenin içinde olup olmadığı kontrol ediliyor. Eğer
doğru ise ekrana bu rakam yazılıyor değilse (yani bu şart yanlış ise) basılan tuşun bir rakam
olmadığı yazılıyor ve enter'a basılması bekleniyor.
Sabitler:
Daha önce gördüğümüz tür olan değişkenlerin değerlerini program içerisinde değiştirebiliyorduk
ya da başka işlemlere tabii tutabiliyorduk. Sabit türündeki verilerin ise değerini
değiştiremeyizhttp://www.tekplatform.com/images/smilies/virgs.gif program boyunca (adından da
anlaşılabileceği gibi) sabit kalırlar. Pek kullanılmamakla beraber bazen işe yarayabilir. Mesela
matemaiksel bir işlem yapıyoruz ve bu işlemde de birçok yerde pi sayısını kullanıyoruz. Her
seferinde 3http://www.tekplatform.com/images/smilies/virgs.gif1415.. diye yazacağımıza bunu pi
isimli sabit bir değişkene aktararak işimizi kolaylaştırabiliriz. Gerçi pi adlı sabit bir değişkeni
pascal otomatik olarak oluşturur ama başka amaçlar için kullanabiliriz. Basit bir örnek verelim:
Program denemedir;
uses crt;
const
max=500;
min=10;
var
sayi:integer;
begin clrscr;
write(minhttp://www.tekplatform.com/images/smilies/virgs.gif' ile
'http://www.tekplatform.com/images/smilies/virgs.gifmaxhttp://www.tekplatform.com/images/smilie
s/virgs.gif' arası bir sayı giriniz....:');readln(sayi);
clrscr;
writeln('Yazdığınız Sayı 'http://www.tekplatform.com/images/smilies/virgs.gifsayi);
readln;
end.
Belki bu programda bize kolaylık sağlamadı ama eğer bu min ve max değerlerini programımızda
20 kere kullansaydık her seferinde değerini yazacağımıza akılda kalır bir şekilde min (minumum)
ve max (maksimum) manasında iki sabit kullanmamız daha iyi olur. En büyük avantajı da mesela
min ve max değerlerini değiştirdiğinizde bütün program içindekileri değiştirmenize gerek kalmaz.
Aksi takdirde eğer el ile 10 ve 500 gibi yazsaydınız bu durumda hepsini tek tek değiştirmeniz
gerekecekti. Tabii ki sadece sayı değilhttp://www.tekplatform.com/images/smilies/virgs.gif string
değişkenler de kullanabilir hatta işlem de yapabilirsiniz. İşte size örnek bir sabit bloğu tanımı:
Const
max = 200;
min = 0;
orta = (max + min) div 2;
web = \"www.universiteli.net (http://www.universiteli.net/)\";
numara = ['0'..'9'];
harf = ['A'..'Z'http://www.tekplatform.com/images/smilies/virgs.gif'a'..'z']
NumaraHarf = harf + numara;
ISIK_HIZI=300000;
A = chr(65);
Sabitlere de kısaca değindikten sonra tiplere geçelim. Zaten Pascal'da tip kavramını biliyoruz.
Tipler konusunda da kendi tiplerimizi oluşturmaya çalışacağız.
Özel Tipler
Genelde kendi özel tiplerimizi kayıt tipi oluştururken kullanırız. Ama ilk önce basitten başlayalım.
Mesela isimleri girebileceğimiz bir değişken olsun. Bir ismin en fazla 20 harf olabileceğini
varsayarsak o zaman yeni bir tip yapabiliriz. Yeni bir tip yapalım ve bu tip 20 karakter içeren bir
string olabilsin.
Type
str20=string[20];
DarkEvenT
05-23-2009, 01:14 PM
isim:str20;
dersek bundan sonra isim adlı değişkenimiz en fazla 20 karakterli olabilir. Ancak özel tipleri
genelde bu şekilde değil de pointerhttp://www.tekplatform.com/images/smilies/virgs.gif record gibi
tiplerin kullanımında kullanırız. Record (kayıt) tipleri mutlaka type etiketiyle tanımlanmalıdır. Daha
önce -record tipini anlatırken- yaptığımız uygulamayı yaptıysanız zaten type etiketinin kullanımını
anlamış olmalısınız. Ayrıca type etiketi set (küme) tiplerinde de çok kullanılır. İlerde özel tiplerden
daha çok yararlanacağız. Şimdilik ne olduğunu bilsek yeter.
Label:
Pascal'da programın akışını değiştirmek (ileriye atamak ya da başa döndürmek gibi) için label
denilen etiketler kullanılır. Bu etilekin ismi sizin belirleyeceğiniz ve değişken ismindeki kurallara
uygun herhangi bir isim olabilir. Labeller goto ifadesiyle birlikte kullanılır. Goto \"git\" anlamındadır
ve programın içerisinde daha önceden tanımlanmış olan yere gidilmesini sağlar. Şimdi bir örnek
yapalımhttp://www.tekplatform.com/images/smilies/virgs.gif bu örnekle daha iyi anlayacaksınız:
Program Ornek1;
Uses crt;
Label
en_bas;
var
sayi: byte;
begin clrscr;
sayi:=1;
en_bas:
writeln(sayi);
sayi:=sayi+1;
if sayi<=20 then goto en_bas;
readln;
end.
Bu programı çalıştırırsanız ekrana 1'den 20'ye kadar olan sayıları yazar. Aslında bu programla
döngü kavramına da ilk adımımızı atmış olduk. eğer bu şekilde label ve goto kullanmasaydık her
sayıyı tek tek yazdırmak ve dolayısıyla 20 satır writeln; komutu kullanmak zorunda kalacaktık.
Oysa sayi değişkeninin ilk değerini 1 yapıyoruz ve bundan sonra ekrana
yazdırıyoruzhttp://www.tekplatform.com/images/smilies/virgs.gif sonra sayı'yı 1 artırıyoruz ve sayı
değişkeninin değerinin 20'den küçük veya eşit olup olmadıını kontrol ediyoruz. Eğer şu anki sayı
20'den küçük ya da 20'ye eşitse programın akışını en_bas etiketiyle tanımladığımız yere
gönderiyoruz. Bu şekilde her seferinde sayı'yı 1 artırdığımızdan sayı 21 olunca program duruyor.
Ama 21'i yazmıyor. Çünkü 21 olunca başa gitmiyor program. Bu goto ve label'i aslında
algoritmayı anlatırken kullanmıştırk. Orada \"eğer hava yağmurlu değil ise 4. adıma git\" diye bir
ifade kullanmıştık. İşte onun kod karşılığı budur. Label'i Label etiketinden sonra tanımlıyoruz ve
kullanırken de boş bir satıra label_adi: yazarak kullanıyoruz. Bu arada if deyimini daha sonra
anlatacağım. Bu örneği biraz daha geliştirelim ve 1'den 20'ye kadar olan sayıların karesini
hesaplayan programı yapalım ama programdan 8'in karesini ekrana yazmamasını isteyelim. 8
hariç diğerleri yazsın. Programımız şöyle olacaktır:
Program Ornek2;
Uses crt;
Label
en_bashttp://www.tekplatform.com/images/smilies/virgs.gif atla;
var
sayi: byte;
begin clrscr;
sayi:=1;
en_bas:
if sayi=8 then goto atla;
writeln(sayi:2http://www.tekplatform.com/images/smilies/virgs.gif' ->
'http://www.tekplatform.com/images/smilies/virgs.gifsayi*sayi);
atla:
sayi:=sayi+1;
if sayi<=20 then goto en_bas;
readln;
end.
Gördüğünüz gibi bu sefer iki adet label kullandık ve sayı'nın 8'e eşit olması halinde write'ln
komutunun sonuna geçilmesini (ve bu durumda bu komutun çalışmamasını) sağladık. Programı
satır satır incelerseniz ne kadar kolay olduğunu göreceksiniz. Bu şekilde döngü kurarak uzun
işlerimizi kısalttık ama özel döngüleri görünce bu işlerin daha da kısalabileceğini göreceksiniz.
Şimdi bir de hani algoritmalarda yaptığımız şemsiye hikayesini yapalım da adet yerini bulsun. İlk
önce algoritmayı hatırlayalım:
1) Pencereden dışarıya bak.
2) Eğer hava yağmurluysa 4. adıma geç.
3) Şemsiyeni al.
4) Dışarı çık.
Bu problemi Pascal'a uygulayalım. Amabilgisayar'dan \"pencereden dışarı bakmasını\"
isteyemeyeceğimize göre bunun yerine bir değişkenin değerine bakmasını isteyebiliriz. Program
şöye olsun: Çalışsınca sizden \"Y\" ya da \"D\" harflerinden birisini girmenizi istesin. Eğer Y harfini
gierseniz hava yağmurlu demek olsun ve şemsiye alınsın ve ekrana şemsiyeyi aldım yazsınhttp://
www.tekplatform.com/images/smilies/virgs.gif D girerseniz şemsiye alınmadı yazsın. Programı
şöyle yapabiliriz:
Program Ornek3;
Uses crt;
Label
gidilecek_yer;
var
SemsiyeDurumu: string;
HavaDurumu: char;
begin clrscr;
SemsiyeDurumu:='Hava açıkhttp://www.tekplatform.com/images/smilies/virgs.gif şemsiye
Alınmadı!';
writeln('Hava Nasıl Oralarda ( Y -> yağmurluhttp://www.tekplatform.com/images/smilies/virgs.gif
D -> yağmurlu değil ) ?');
HavaDurumu:=readkey;
if HavaDurumu in['D'http://www.tekplatform.com/images/smilies/virgs.gif'd'] then goto
gidilecek_yer;
SemsiyeDurumu:='Hava yağmurluhttp://www.tekplatform.com/images/smilies/virgs.gif şemsiye
Alındı!';
gidilecek_yer:
writeln('Sonuç: 'http://www.tekplatform.com/images/smilies/virgs.gifSemsiyeDurumu);
readln;
end.
Bu programı satır satır incelerseniz label'in kullanımını anlarsnız. Programı algoritmaya göre
yaptık. Bu programı daha kısa olarak şöyle de yapabilirdik:
Program Ornek3_2;
uses crt;
var
hava:char;
begin clrscr;
writeln('Hava Nasıl Dostum ( Y -> yağmurluhttp://www.tekplatform.com/images/smilies/virgs.gif D
-> yağmurlu değil ) ?');
hava:=readkey;
if hava in['Y'http://www.tekplatform.com/images/smilies/virgs.gif'y'] then writeln('Hava
yağmurluhttp://www.tekplatform.com/images/smilies/virgs.gif şemsiye alındı!')
else writeln('Hava açıkhttp://www.tekplatform.com/images/smilies/virgs.gif şemsiye alınmadı!');
readln;
end.
Gördüğünüz gibi daha kısa bir program oldu. Zaten programcının amacı daha kısa program
yazmak değil midir? Öyledir. Ben yukardaki örneği label deyimini öğrenmek için verdim. Label'leri
ilerde çok kullanacağız. Bu arada programlarımıza \"in\" ifadesini de kullandık. Hava değişkeninin
değerinin y ve Y elemanlarını içeren bir kümenin içerisinde olup olmadığını kontrol etmek içindi
bu. y ve Y kullanmamızın sebebiyse kullanıcının küçük y mi yoksa büyük Y mi yazacağını
önceden bilmememizdendir. İyi bir programcı her ihtimali düşünmeli. Gerçi yukardaki örneklerde
her ihtimali düşünmedik ama ilerde onları da düşüneceğiz.
Write/Writeln
Programlamanın en genel amacı kullanıcıdan bazı değerleri alıp birtakım -önceden programcı
tarafından beirlenmiş- işlemlerden geçirilip sonuçta bulunan değeri ekrana yazmak olduğu için
her programama dilinde kullanıcıdan veri alma ve ekrana veri yazma deyimleri vardır. Pascal'da
kullanıcıdan read ya da readln komutlarıyla veri alınır ve ekrana write ya da writeln komutlarıyla
yazılır.
Write/Writeln:
Ekrana birşeyler yazmak için kullanılır. Bu şey sabit bir yazı olabileceği gibi bir değişken de
olabilir. Bu durumda değişkenin kendisinin adı
değilhttp://www.tekplatform.com/images/smilies/virgs.gif değeri yazılır. Ya da direkmen bir işlemin
sonucu da yazdırılmak istenebilir. Hatta bunlardan iki ya da daha fazlasını da birlikte
yazdırabiliriz. İlk önce ekrana sabit bir yazı (yazı diyoruz ama sayı ya da işaret de olabilir)
yazdırmak için kullanımına bakalım. Bu durumda Write(ifade); gibi kullanılır. ifade yerine iki
apostrof işareti arasında birşeyler yazılabilir. Örneğin write('www.universiteli.net
(http://www.universiteli.net/)'); gibi. writeln(ww.universiteli.net); gibi değil! Çünkü
www.universiteli.net (http://www.universiteli.net/) bir değişken adı değildir (ve olamaz da..).
Bununla ilgili küçük bir uygulama yapalım:
Proram uygulama01;
uses crt;
begin clrscr;
writeln('Tayfun Erikan');
write('Web Sitesi:');
writeln('www.universiteli.net (http://www.universiteli.net/)');
readln;
end.
Bu program herzaman aynı sonucu verir. Burda belki farketmişsinizdir write ile writeln'in farkını.
Write istenen ifadeyi yazıp en sonunda beklerhttp://www.tekplatform.com/images/smilies/virgs.gif
writeln ise bir alt satırın başına gider ve orada bekler. Bekler dediğim şey imleçtir. Siz yazı
yazarken yanıp sönen o şeye imleç denilir ve Pascal'da birşey yazmak istediğinizde imlecin
bulunduğu yerden itibaren yazılır. Ekranın istediğimiz biryerine yazı yazdırmayı da anlatacağız.
write ve writeln komutlarında bir değil de birden fazla ifade de verebilirsiniz:
Program uygulama02;
uses crt;
begin clrscr;
writeln('Tayfun Erikan');
writeln('Benim sitem:'http://www.tekplatform.com/images/smilies/virgs.gif'www.universiteli.net
(http://www.universiteli.net/)');
readln;
end.
gibi. Gerçi burada pek işimize yaramıyor. Direkt olarak da yazdırabiliriz. Şimdi de bir değişkenin
değerini yazdıralım. Bunu da write(değişken); şeklinde yaparız. Eğer
write(değişken1http://www.tekplatform.com/images/smilies/virgs.gif
değişken2http://www.tekplatform.com/images/smilies/virgs.gif değişken3); şeklinde 3 adet
değişkeni yazdırırsak hepsi ard arda ve boşluk bırakılmadan yazılır.
program uygulama03;
uses crt;
var
adhttp://www.tekplatform.com/images/smilies/virgs.gif site: string;
sayihttp://www.tekplatform.com/images/smilies/virgs.gif karesi:longint;
begin clrscr;
sayi:=13;
karesi:=sayi*sayi;
ad:='Tayfun Erikan';site:='www.universiteli.net (http://www.universiteli.net/)';
writeln(ad);
writeln('web sitesi 'http://www.tekplatform.com/images/smilies/virgs.gif site);
writeln(sayihttp://www.tekplatform.com/images/smilies/virgs.gif'-
>'http://www.tekplatform.com/images/smilies/virgs.gif karesi);
readln;
end.
Gördüğünüz gibi sabit ifade ile değişken de aynı write komutuyla kullanılabiliyor. Bu arada
write('web sitesi 'http://www.tekplatform.com/images/smilies/virgs.gifsite); ile write('web sitesi
'http://www.tekplatform.com/images/smilies/virgs.gif site); komutunun Pascal için hiçbir farkı
yoktur. Yani -ilk başlarda da anlattığım gibi- Pascal'da boşuklar önemli değildir (tırnak içindekiler
hariç). Mesela a:=b+c; ya da a := b + c; yazabilirsiniz. Bu sizin keyfinize kalmış. İkisi de aynı işi
apar. Hatta
program uygulama04;
uses crt;
var
adhttp://www.tekplatform.com/images/smilies/virgs.gif site: string;
sayi:longint;
begin clrscr;
sayi:=13;
ad:='Tayfun Erikan';site:='www.universiteli.net (http://www.universiteli.net/)';
writeln(ad);
writeln('web sitesi 'http://www.tekplatform.com/images/smilies/virgs.gif site);
writeln(sayihttp://www.tekplatform.com/images/smilies/virgs.gif'-
>'http://www.tekplatform.com/images/smilies/virgs.gifsayi*sayi);
writeln('15 x 3 = 'http://www.tekplatform.com/images/smilies/virgs.gif 15*3);
readln;
end.
Programa bir writeln daha ekledik. Gördüğünüz gibi writeln komutuyla işlemin sonucunu da
yazdırabiliyoruz. Bunu da inceleyin. Eğer write ile bir sayı yazdıracaksanız sayılara özel olarak
write(82); ile write('82'); aynı işi yapar ve sorun çıkartmaz. Ama write('Ahmet'); ile write(Ahmet);
aynı değidir. Birincisinde ekrana Ahmet yazar ama ikincisinde Ahmet adlı bir değişkenin olup
olmadığına bakarhttp://www.tekplatform.com/images/smilies/virgs.gif eğer varsa değerini ekrana
yazarhttp://www.tekplatform.com/images/smilies/virgs.gif ancak böyle bir değişken daha önceden
(var etiketi ile) tanımlanmamışsa program çalışmaz. Onun için tırnaklara dikkat edin.
Artık bir değişkenin değerini ya da herhangi birşeyi ekrana nasıl yazacağımızı öğrendik. Ancak
write ve writeln komutunun bir önemli özelliği daha var. Sayısal bilgileri istenilen biçimde
yazabilmesi. Özellikle elimizde birden çok sayısal bilgi varsa bunları alt alta yazarken hepsinin
sağa dayalı olarak eşit hizaya yazılmasını isteyebiliriz. Ya da virgüllerin aynı hizaya gelmesini
isteriz. Bunu write komutunu write(sayı:X:Y); şeklinde yazarız. Burada x ve y birer sayı olacak. X
sayısal değişkenin için toplam ayrılacak alanıhttp://www.tekplatform.com/images/smilies/virgs.gif
y ise ondalık kısmı için ayrılacak alanı ifade ederi. Eğer yazılacak sayı amsayı ise y'yi
kullanmadan yanlızca writeln(sayı:X); komutunu kullanırız. Ayrıca sadece writeln; komutunu
parametresiz olarak böylece kullanırsan bir alt satırın başına geçer. Örnek olarak basit bir
program yazalım:
Program Bicimli_Sayilar;
uses crt;
var
sayi1http://www.tekplatform.com/images/smilies/virgs.gifsayi2http://www.tekplatform.com/images/
smilies/virgs.gifsayi3:integer;
sayi4http://www.tekplatform.com/images/smilies/virgs.gifsayi5http://www.tekplatform.com/images/
smilies/virgs.gifsayi6:real;
begin clrscr;
sayi1:=19;
sayi2:=1923;
sayi3:=7;
sayi4:=3.1415;
sayi5:=192.31293;
sayi6:=928314.3;
writeln('Sayilari Bicimsiz yazdik:');
writeln;
writeln(sayi1http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gifsayi4);
writeln(sayi2http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gifsayi5);
writeln(sayi3http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gifsayi6);
writeln(923http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gif95.7);
writeln;
writeln('iste bu da Bicimlisi:');
writeln;
writeln(sayi1:4http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gifsayi4:12:5);
writeln(sayi2:4http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gifsayi5:12:5);
writeln(sayi3:4http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gifsayi6:12:5);
writeln(923:4http://www.tekplatform.com/images/smilies/virgs.gif'
'http://www.tekplatform.com/images/smilies/virgs.gif95.7:12:5);
readln;
end.
Programı çalıştırırsanız neden biçimli yazdırmamız gerektiğini göreceksiniz. Ayrıca gördüğünüz
gibi illa syı yerine değişken kullanmak mecbur değil. Direk olarak bir sayı da kullanabilirsiniz.
Ayrıca gördüğünüzü bildiğim halde sayi1 değişkeninin sonundaki 1'in konumuzla ilgisi olmadığını
söyleyelim. Bir de iki sayının arasına boşluk koymak için ' ' kullandığımıza dikkat edin. Bu iki
apostorufun arasında bir boşluk var.
Read/Readln Komutu
Ekrana yazı yazdırmayı gördük. Şidmi de ekrandan (daha doğrusu ekran vasıtasıyla kullanıcıdan)
bir veri (isimhttp://www.tekplatform.com/images/smilies/virgs.gif
yaşhttp://www.tekplatform.com/images/smilies/virgs.gif telefon numarası gibi..) almaya bakalım.
Bu işlem için Read ya da Readln (genellikle readln) komutu kullanılır. Read komutunu
kullanırsanız kullanıcı çok hata yapar. En iyisi readln kullanmak. Ben bunu anlatayım. Kullanım
şekli Readln(değişken); şeklindedir ve kullanıldığından kullanıcıdan birşeyler yazıp enter'a
basmasını bekler. Enter'a basılınca kullanıcının yazdığı verileri parantez içerisine yazılan
değişkene aktarır ve artık bu değişkenin değeri bu olur. Yani üstüne falan eklenmez. Eski değeri
silinir ve yeni değeri kullanıcı ne girdiyse o olur. Genellikle write komutuyla yan yana (daha
doğrusu ar arda) kullanılır. Çünkü kullanıcının ne girmesi gerektiğini ona söylememiz lazım.
Örnek için basit program:
Program Oku_bakiim;
uses crt;
var
a:integer;
isim:string[40];
begin clrscr;
write('Bu program verilen bir sayinin karesini ve kubunu bulur');
writeln;
write('Bir Sayi Giriniz: ');readln(a);
write(ahttp://www.tekplatform.com/images/smilies/virgs.gif' sayisinin karesi
'http://www.tekplatform.com/images/smilies/virgs.gifa*ahttp://www.tekplatform.com/images/smilies
/virgs.gif' ve kubu
'http://www.tekplatform.com/images/smilies/virgs.gifa*a*ahttp://www.tekplatform.com/images/smili
es/virgs.gif' olur.');
writeln;
write('Adinizi giriniz: ');
readln(isim);
clrscr;
Writeln('Gule gule 'http://www.tekplatform.com/images/smilies/virgs.gifisim);
Writeln('Programi bitirmek icin Entera basiniz...');
readln;
end.
Programı TP'da yazıp çalıştırın ve sonucuna bakın. Bu program write/writeln ve readln
komutlarının anlaşılmasına yeterlidir. Zaten ilerde bu iki komutu çok kullanacağız. Belki
farketmişsinizdir bu readln komutunun bazı yetersizlikleri var. Mesela kullanıcıdan bir sayı
girmesini istiyoruz. Ama kullanıcı sayı olmayan buraya birşeyler de yazabilir ve biz bunu
engelleyemeyiz. Bu durumda program hata verir. Bunu önlemek için kendi readln komutumuzu
kendimiz oluşurmalıyız. Bunu ilerde göreceğiz.
__________________
DarkEvenT
05-23-2009, 01:15 PM
Readkey
Yeri gelmişken ilerde çok kullanacağınız Readkey fonksyonuna deyinelim. Dediğim gibi readkey
bir fonksyondur ve sonucu bir karekterdir. yani sadece readkey; diye bir komut kullanılamaz.
Çünkü sonucu karakter dediğimizden mesela sonucu 'A' harfi ise A; diye bir komut olabilir mi?
Ama a:=readkey; (\"A\" için a:='A'; gibi..) ya da write(readkey); (write('A'); gibi..) gibi kullanılabilir.
Readkey ingilizcede okunan harf manasına gelir. Bu fonksyonu kullanırsak program kullanıcının
bir tuşa basmasını bekler. Basılan tuşun değeri readkey fonsyonunun sonucu olur. Fonksyon
kavramına daha sonra değineceğiz nasl olsa. Şimdilik bir kullanılışını anlatalım yeter. Daha
önceden kullanıcıya Evet mi? Hayır mı? gibi bir soru sorarken readln(değişken); gibi bir komut
kullanıyorduk. Bu durumda kullanıcı illa E'ye ya da H'ye basmak zorunda değildi. Ancak readkey
komutuyla bunu sağlayabiliriz. En azından sadece 1 tek harfe basılmasının ardından (Enter'a
basılmasını beklemeden) bir sonraki komuta geçilmesini sağlayabiliriz. Örnek:
Program Deneme;
Uses Crt;
Var
a:char;
Begin Clrscr;
writeln('Merhabahttp://www.tekplatform.com/images/smilies/virgs.gif Devam etmek için herhangi
bir tuşa basınız...');
a:=readkey;
writeln('Tabrik ederim. Tuşa basmayı başardınız');
writeln('Programı bitirmek için bir tuşa daha ihtiyaç var..');
a:=readkey;
End.
Bu şekilde kullanmamızın belki faydası olmadı ama en azından readln; komutundan daha iyi. O
zaman bir de basılan tuşu ekrana yazan programı yapalım. Aşağıdaki programı çalıştırıp bir harfe
ya da rakama basın:
Program Denemedir;
Uses Crt;
Var
harf:char;
Begin Clrscr;
writeln('Bir Tuşa Bas hemen ya da birdaha gözüme gözükme!');
harf:=readkey;
clrscr;
writeln('Sizin bastığınız tuş: 'http://www.tekplatform.com/images/smilies/virgs.gif harf);
writeln('Programı bitirmek için bir tuşa basınız..');
harf:=readkey;
end.
Buralarda neden char tipinde değişken kullandığımızı anlamışsınızdır. Çünkü basılan yanlızca bir
tek tuş. Şimdi char tipli değişkenin ne işe yaradığını daha iyi anlamış olduk. Şimdi de programdan
çıkılması için mutlaka X'e basılmasını şart koşan bir program yapalım. Birkaç ders sonra bunu
çok daha kısa yapacağız ama şimdilik bildiğimiz komutları kullanalım:
Program Deneme_3;
uses crt;
label
geri;
var
harf:char;
begin clrscr;
writeln('Merhabalar..');
writeln('Kusura bakmayinhttp://www.tekplatform.com/images/smilies/virgs.gif programimizi erken
kapatiyoruz..');
writeln('Programi bitirmek icin X harfine basiniz..');
geri:
harf:=readkey;
if not (harf in['x'http://www.tekplatform.com/images/smilies/virgs.gif'X']) then goto geri;
writeln('Efferinhttp://www.tekplatform.com/images/smilies/virgs.gif programi kapattın..');
end.
if deyimini bir sonraki derste anlattım. Şimdilik kafanızı yormayın. Dikkat etmeniz gereken label
kullanımı ve readkey komutu olabilir. Özellikle label'e tekrar
bakınhttp://www.tekplatform.com/images/smilies/virgs.gif belki unutmuşsunuzdur. Şimdilik bu
kadar yeter. İlerde zaten her programımızda kullanacağımız bir komut readkey...
GotoXY
Şimdiye kadar yaptığımız programlarda hep ekranın sol üst köşesinden başlayarak bilgileri
yazdırdık. Ancak sizin de aklınıza \"Yahu bu ekranın istediğimiz yerine birşeyler yazdıramaz
mıyız?\" sorusunuz geldiğini tahmin ediyorum. Pascal'da ekranın istenilen yerine gitmek için
gotoxy komutu kullanılır. Gitmek'ten kastım imleci istenilen yere götürmektir. Zaten ekrana write
ile birşeyler yazarken imlecin bulunduğu yerden itibaren yazıldığını söylemiştik.
Bu komutun kullanımı
gotoxy(Xhttp://www.tekplatform.com/images/smilies/virgs.gifY);
şeklindedir. Burada X yerine kaçıncı kolona gidilmesi isteniyorsa o kolonun
numarasıhttp://www.tekplatform.com/images/smilies/virgs.gif Y yerine ise kaçıncı satıra gidilmesi
isteniyorsa o satırın numarası yazılır. Normal bir ekranda 80 kolon ve 24 satır (25'e çıkartılabilir)
vardır. Gotoxy komutunu kullanırken buna dikkat etmelisiniz. Yani
gotoxy(83http://www.tekplatform.com/images/smilies/virgs.gif12); komutunu yazarsanız büyük
olasılıkla istediğiniz görüntüyü elde edemezsiniz! Bu komut genelde write ifadesinden önce
kullanılır. Zaten amacı da ekranın istenilen yerine yazı yazdırmak değil mi? Bir örnek yapalım:
Program git_bakalim;
uses crt;
begin clrscr;
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif13);write('www.universiteli.net
(http://www.universiteli.net/)');
readln;
end.
gotoxy(Xhttp://www.tekplatform.com/images/smilies/virgs.gifY); komutunda X ve Y yerine
değişken de koyabiliriz. Tabii ki bir tam sayı tipli değişken
(bytehttp://www.tekplatform.com/images/smilies/virgs.gif
integerhttp://www.tekplatform.com/images/smilies/virgs.gif longint.. gibi). Bu durumda değişkenin
değeri neyse ona göre işlem yapılır. Mesela küçük bir program yapalım:
Program gid_hele;
uses crt;
var
xhttp://www.tekplatform.com/images/smilies/virgs.gify:byte;
ad:string;
begin clrscr;
write('Adınız: ');readln(ad);
write('X kordinatı: ');readln(x);
write('Y kordinatı: ');readln(y);
clrscr;
gotoxy(10http://www.tekplatform.com/images/smilies/virgs.gif23);
write('Bu program Tolga Yüzüncü tarafından yapıldı!');
gotoxy(xhttp://www.tekplatform.com/images/smilies/virgs.gify);
write(ad);
readln;
end.
Gotoxy komutunu programlarımızın içinde sıkça kullanacağız.
DarkEvenT
05-23-2009, 01:15 PM
Karşılaştırma ve Karar verme deyimleri
Programlamanın en zevkli yanı birşeyleri karşılaştırıp sonucuna göre bir işlem yapmak ya da
yapmamaktır diyebilirim. Aslında programlama da zaten budur. Programlamaya ilk başlarken
algoritmalar konusunda bir örnek vermiştik. Orada \"Eğer hava yağmurluysa şemyiseni al\"
demiştik. Bu işlemi şimdiye kadar öğrendiğimiz komutlarla yaptırmamız olanaksızdır.
Karşılaştırma ve karar verme işlemleri olmasa program ilk satırından itibaren satır satır çalışır ve
en sonunda \"End.\" komutuyla biter. Yani program içerisinde belirli şartlarda programın akışı
değiştirilemez. Pascal'da (ve neredeyse bütün programlama dillerinde ve scriptlerinde) kontrol
deyimi if..then..else şeklindedir. Ayrıca Pascal'da başka kontrol deyimleri de vardır. If...then...else
deyiminin genel kullanımı:
if (şart ya da şartlar) then
şart doğruysa yapılacak işlem
else
şart yanlışsa yapılacak işlem
gibidir. Tabii ki hepsi bir satırda da kullanılabilir. Ayrıca şartın doğru olması (ya da yanlış olması)
durumunda birden çok işlem yaptırılmak isteniyorsa bu işlemlerin hepsi begin ile end arasına şu
şekilde yazılır:
if (şart ya da şartlar) then begin
şart doğruysa yapılacak işlemler
end else
şart yanlışsa yapılacak işlemler
end;
begin ve end;'i birazdan anlatacağım. Şimdi çok basit bir örnek yapalım:
Program Deneme;
Uses Crt;
Var
notu:integer;
Begin Clrscr;
write('Matematik Dersinden Aldığınız Notu Giriniz: ');Readln(notu);
clrscr;
if notu>69 then write('Aferin Geçtiniz!') else write('Malesef Kaldınız!');
write(readkey);
end.
Bu program sınavdan aldığınız notu belirli bir işlemden geçiriyor ve sonucuna göre birşeyler
yazdırıyor. Şimdi biraz daha ayrıntılı görelim. if komutuna kadar olan herşeyi daha önce gördük.
Readln komutuyla sayısal bir bilgi olan sınav sonucu notu değişkenine aktarılıyor. Ondan sonra
ekran siliniyor. Sonra şu komut var:
if notu>69 then write('Aferin Geçtiniz!') else write('Malesef Kaldınız!');
İlk önce bu komutla ne yapılmak istendiğine bakalım. Amaç eğer notu değişkeninin değeri 69'dan
büyükse ekrana 'Aferin Geçtiniz!'http://www.tekplatform.com/images/smilies/virgs.gif eğer değilse
(yani notu değişkeninin değeri 69'a eşit ya da daha küçükse) ekrana 'Malesef Kaldınız'
yazdırmaktan ibarettir.
Yani bu komutun Türkçe meali:
Eğer notu değişkeninin değeri 69'dan büyük ise Aferin Geçtiniz!
yazhttp://www.tekplatform.com/images/smilies/virgs.gif değilse Malesef Kaldınız! yaz.
notu>69 ifadesini parantez içerisine de yazabilirsiniz. Zaten birden fazla şart varsa parantez
kullanmak mecburidir. Dikkat edin write('Aferin Geçtiniz!') ifadesinde noktalı virgül yok. Neden?
Çünkü komut daha bitmedi. Derslerin başında \"Pascal'da her komutun sonuna noktalı virgül
konulur\" demiştim.
Programlamada notu>69 ifadesinin değeri ya TRUE (doğru) olur ya da FALSE (yanlış). Burada
notu'nun değeri 69'dan büyükse bu şart TRUEhttp://www.tekplatform.com/images/smilies/virgs.gif
değilse FALSE olur. Eğer Şart true ise THEN ifadesinden sonraki
işlemlerhttp://www.tekplatform.com/images/smilies/virgs.gif eğer şartın sonucu false ise ELSE
ifadesinden sonraki işlemler yapılır. Biraz düşünürseniz burada aslında else deyimi kullanılmadan
da program yapılabilir.
Program Deneme;
Uses Crt;
Var
notu:integer;
Begin Clrscr;
write('Matematik Dersinden Aldığınız Notu Giriniz: ');Readln(notu);
clrscr;
if notu>=70 then write('Aferin Geçtiniz!');
if notu<70 then write('Malesef Kaldınız!');
write(readkey);
end.
Burada şartı 69 yerine 70 yaptık. Birşey farketmez. Maksat değişiklik olsun. Bu arada eğer
write(readkey); de ne diyorsanız bir önceki konuya göz atın. Gördüğünüz gibi
if (notu>=70) then write('Aferin Geçtiniz!');
if (notu<70) then write('Malesef Kaldınız!');
ile
if (notu>=70) then write('Aferin Geçtiniz!') else write('Malesef Kaldınız!');
ifadeleri aynı işi yapıyorlar. Tabii ki else kullanmak daha mantıklı. if deyimine genel olarak
anladıysak (ve kendimiz de biraz örnek yaptıysak) şimdi karşılaştırma işlemlerine bir göz atalım:
İşlem Anlamı
= Eşit. Sağındaki ve solundaki değerler birbirine eşit ise sonuç
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif değilse yanlış olur.
<> Eşit değil. Sağındaki ve solundaki değerler eşit değilse sonuç
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif eşitse sonuç yanlış olur. Bu işlem
sayısal olmayan (yani alfasayısla olan) ifadelerde de kullanılabilir.
> Büyüktür. Solundaki değer Sağındaki değerden büyükse sonuç
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif değilse yanlış olur.
< Küçüktür. Solundaki değer Sağındaki değerden küçükse sonuç
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif değilse yanlış olur.
>= Büyük eşit. Solundaki değer sağındaki değerden büyükse ya da eşit ise
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif değilse yanlış olur.
<= Küçük eşit. Solundaki değer sağındaki değerden küçük ya da eşit ise
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif değilse yanlış olur.
in İçerisinde. Solundaki değer sağındaki kümenin içerisinde mevcut ise değeri
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif değilse yanlış olur.
Buradaki doğru (True) ya da yanlış (False) kavramlarını belirtmiştim. Program akışı bunlara göre
belirlenir. Şimdiye kadar öğrendiklerimizle bir öğrencinin Matematik dersinden 100 üzerinden
aldığı sınav notunu 5'lik sisteme çeviren programı yapalım. Beşlik sistemin ne olduğunu
biliyorsunuzdur:
0-44 arası 1
45-54 arası 2
55-69 arası 3
70-84 arası 4
85-100 arası 5
şeklindedir. Buradan öğrencilerin 5 alamamasına kızan velilere duyurulur. Şimdi programımızı
yazalım:
Program Denemedir;
Uses Crt;
Var
yuzlukhttp://www.tekplatform.com/images/smilies/virgs.gif beslik:byte;
Begin Clrscr;
write('Matematik sınavının sonucu (0 ile 100 arası)..: ');readln(yuzluk);
if yuzluk<=44 then beslik:=1;
if (yuzluk>=45) and (yuzluk<=54) then beslik:=2;
if (yuzluk>=55) and (yuzluk<=69) then beslik:=3;
if (yuzluk>=70) and (yuzluk<=84) then beslik:=4;
if yuzluk>=85 then beslik:=5;
clrscr;
writeln('Yüz üzerinden.....: 'http://www.tekplatform.com/images/smilies/virgs.gifyuzluk);
writeln('Beş üzerinden.....: 'http://www.tekplatform.com/images/smilies/virgs.gifbeslik);
readln;
end.
Gördüğünüz gibi artık öğrenciler her sınavdan sonra aldıkları notun 5'lik sistemde kaça denk
geldiğini kara kara düşünmeyecekler. Açacaklar programı yazacaklar
notlarınıhttp://www.tekplatform.com/images/smilies/virgs.gif bilgisayar hesaplayacak
http://sabote.com/Smileys/default/smiley.gif Bu arada bu and kelimesinin nereden ve neden
geldiğini anlatacağımhttp://www.tekplatform.com/images/smilies/virgs.gif şimdiden paniğe
kapılmayın.
Bu arada şimdiye kadar yaptığımız programlarımızı EXE yaptınız mı bilmiyorum. Eğer hala
denemediyseniz bunu yapın mesela. Açın programınızı ve ilk derslerde anlattığı gibi exe yapın.
Muhtelemen exe dosyanız pascal'ın bulunduğu dizinde oluşacaktır. Ordan bulabilirsiniz. Exe
dosyanız oluştuğu halde bulamıyorsanız Başlat menüsünden Bul/Dosya ve Klasörler
seçeneğinden dosya adını yazarak arayabilirsiniz. Dosyanızı nasıl exe yapacağınızı
unuttuysanız. Programı exe yapmayı başardıysanız Windows'ta çift tıklayarak çalıştırabilirsiniz
artık. If then else kalıbına genel bir giriş yaptık. Şidmi devam edelim
if then else kalıbının genel olarak \"if (şart ya da şartlar) then begin işlemler.. end else begin
işlemler.. end;\" şeklinde olduğunu söyledik. Yani if ile birden çok şartı da sınayabiliriz. Aslında
başta if kalıbının mantıksal karşılaştırma olduğunu söylemek gerekirdi ama zaten sizin
anladığınızı sanıyorum. Yani siz bu if kalıbını kullanınca bilgisayara bir mantıksal karşılaştırma
yaptırıyorsunuz. Bir önceki örneğimizde if ile birlikte iki şart kullandık. Şartımız şöyle idi:
if (notu>=55) and (notu<=69) then beslik:=3;
Burada and kelimesiyle (Türkçesi \"ve\" demektir) yanlızca iki şartın da doğru olduğu durumlarda
bu işlemi yapmasını söylüyoruz. (Bu arada tahmin ettiğiniz gibi else'in kullanımı zorunlu değil.)
Yukardaki şartın Türkçesi şöyledir:
Eğer notu değişkeninin değeri 55'ten büyük ya da 55'e eşit VE notu değişkeninin değeri 69'dan
küçük ya da 69'a eşit ise beslik değişkeninin değerini 3 yap.
Burada >= ve <= kullandığımızdan cümle biraz karışık oldu. Başka bir örneği Türkçe'ye çevirelim.
Örneğin;
if (notu>54) and (notu<70) then beslik:=3;
Kalıbının Türkçe'si daha sade olur ve yukardaki örnekle aslında aynı işi yapar (Sayılara dikkat
ederseniz bunu görürsünüz):
Eğer notu 54'den büyük VE 70'den küçük ise beslik değişkeninin değerini 3 yap.
Yani burada aslında bilgisayara notu değişkeninin değerinin 55 ile 69 arasında olduğu
durumlardan bahsediyoruz. Zaten notu değişkeninin değeri 54'den büyükse ve 70'den küçükse
bunlardan başka bir sayı olamaz. Peki ilk derslerimizde öğrendiğimiz Set (yeni Küme) tipinde bir
veri kullanarak bunu daha kısa ve anlaşılır olarak yapamaz mıyız. Mesela bilgisayara direk olarak
\"Eğer notu 55 ile 69 arasındaysa beslik değişkeninin değerini 3 yap\" diyemez miyiz? Deminki
örnekte And kullanmıştıkhttp://www.tekplatform.com/images/smilies/virgs.gif burdada Türkçesi
içerisindehttp://www.tekplatform.com/images/smilies/virgs.gif içinde anlamında olan in kelimesini
kullanacağız. Yani notu değişkeninin değerinin \"55 ile 69 arasındaki tüm sayıları kapsayan bir
küme\" içerisinde olup olmadığını kontrol edeceğiz. Nasıl mı? İşte böyle:
if notu in [55..69] then beslik:=3;
Gördünüz mü ne kadar kısa ve anlaşılır oldu! Burada kümemiz [55..69] 'dur. Bunu daha önce
anlatmıştık. Ama birazdan in ifadesiyle kullanımını özel olarak ele alacağız. Şimdi and ve in gibi
diğer ifadelerin hepsine bir göz atalım:
İfade Anlamı
AND Ve demektir. Arasına konulduğu iki (ya da daha fazla) şartın hepsinin doğru olduğu
durumlarda sonuç doğruhttp://www.tekplatform.com/images/smilies/virgs.gif aksi halde yanlış
olur.
OR Veya anlamındadır. Arasına konulduğu iki (ya da daha fazla) şartın en az birisinin doğru
olduğu durumlarda sonuç doğruhttp://www.tekplatform.com/images/smilies/virgs.gif aksi
haldehttp://www.tekplatform.com/images/smilies/virgs.gif yani hepsi yanlış ise sonuç yanlış olur.
NOT Değil manasındadır. Bir ya da daha fazla şartın soluna konulduğunda şartların sonucunun
tersini yapar. Yani sonuç true ise falsehttp://www.tekplatform.com/images/smilies/virgs.gif false
ise true olur.
In ifadesi bunların içerisine girmiyor. Zaten onu bir önceki sayfadaki tabloda vermiştik. Ayrıca bir
de az kullanılan xor var ama ben şimdiye kadar onu hiç kullanmadım. Gerekirse ilerde anlatırız.
Anlamı \"veya değil\"dir.
Şimdi çok kullanılan in ifadesinde kullanabileceğimiz kümeleri anlatmanın yeri geldi. Hani \"ilerde
yeri gelince anlatacağız\" demiştik ya işte o yer bu yer. Küme'nin ne olduğunu az-çok
biliyorsunuzdur. Zaten öğrenciyseniz matematiğe her sene kümelerden başlanmasına ve
\"İngilizce bilenlerle Fransızca bilenlerin toplamı kaçtır\" türündeki saçma sapan problemlere
alışmışsınızdır. Pascal'da küme (Matematikte olduğu gibi) benzer türde verilerin oluşturduğu ve
aynı verinin (yani Matematikteki tabiri ile elemanın) en fazla bir defa kullanılabildiği ve üzerinde
kesişimhttp://www.tekplatform.com/images/smilies/virgs.gif birleşim gibi birsürü işlemin
yapılabildiği elamanların tümüne denir. Mesela Sınıfınızdaki öğrencilerden bir küme
oluşturabilirsiniz. Ondan sonra bir program yaparsınız ve girilen bir ismin sizin sınıfınızın
içerisinde olup olmadığını kontrol edebilirsiniz. Bunu in ile yaparız. in ifadesinin sağına bir kümse
soluna da bir eleman konulur.
Eğer bu eleman kümenin içerisinde var ise sonuç doğru (true)http://www.tekplatform.com/images/
smilies/virgs.gif yoksa haliyle sonuç da yanlış (false) olacaktır. Pascal'da kümenin elemanları
kköşeli parantez içerisine yazılır. Örnek bir küme:
[1http://www.tekplatform.com/images/smilies/virgs.gif2http://www.tekplatform.com/images/smilies/
virgs.gif3http://www.tekplatform.com/images/smilies/virgs.gif4http://www.tekplatform.com/images/
smilies/virgs.gif5http://www.tekplatform.com/images/smilies/virgs.gif6]
Bu küme 1'den 6'ya kadar olan tamsayılardan oluşuyor. Pascal'da bu tür sıralı olarak giden
verileri daha kısa yazabilirsiniz. Mesela şu küme yukardaki le aynıdır:
[1..6]
Birden yüze kadar olan sayıları yapabileceğinizi düşününce eperyce bir kolaylık sağlar. Ama
mesela kümseninin içerisinde bir de 9 bulunsun:
[1http://www.tekplatform.com/images/smilies/virgs.gif2http://www.tekplatform.com/images/smilies/
virgs.gif3http://www.tekplatform.com/images/smilies/virgs.gif4http://www.tekplatform.com/images/
smilies/virgs.gif5http://www.tekplatform.com/images/smilies/virgs.gif6http://www.tekplatform.com/i
mages/smilies/virgs.gif9]
Bu durumda [1..9] yazarsanız olmazhttp://www.tekplatform.com/images/smilies/virgs.gif çünkü
içerisinde 7 ve 8 de girer. Ama [1..6] yazarsanız da bu sefer 9 olmaz. O halde 9'u ayrıca
yazmalısnız:
[1..6http://www.tekplatform.com/images/smilies/virgs.gif9]
Hadi bir de kümemiz şöyle olsun:
[1http://www.tekplatform.com/images/smilies/virgs.gif2http://www.tekplatform.com/images/smilies/
virgs.gif3http://www.tekplatform.com/images/smilies/virgs.gif4http://www.tekplatform.com/images/
smilies/virgs.gif5http://www.tekplatform.com/images/smilies/virgs.gif6http://www.tekplatform.com/i
mages/smilies/virgs.gif9http://www.tekplatform.com/images/smilies/virgs.gif10http://www.tekplatfo
rm.com/images/smilies/virgs.gif11http://www.tekplatform.com/images/smilies/virgs.gif12]
Yani 1'den 12'ye kadar olan sayılardan 7 ve 8 yok. Bu durumda şöyle yapabiliriz:
[1..6http://www.tekplatform.com/images/smilies/virgs.gif9..12]
Gördüğünüz gibi Pascal bize kolaylık sağlıyor. Hatta bu kümeyi iki küme şeklinde düşünüp ikisini
toplasak da aynı olur. Burada toplamak birleştirmek manasındadır:
[1..6] + [9..12]
Tabii ki kümelerimiz sadece sayılardan oluşmayabilir. Harf ya da herhangi bir string ifade de
olabilir. İşte size birkaç küme örneği:
['e'http://www.tekplatform.com/images/smilies/virgs.gif'E'http://www.tekplatform.com/images/smili
es/virgs.gif'h'http://www.tekplatform.com/images/smilies/virgs.gif'H']
['a'http://www.tekplatform.com/images/smilies/virgs.gif'b'http://www.tekplatform.com/images/smilie
s/virgs.gif'c'http://www.tekplatform.com/images/smilies/virgs.gif'd'http://www.tekplatform.com/imag
es/smilies/virgs.gif'e'http://www.tekplatform.com/images/smilies/virgs.gif'f'http://www.tekplatform.c
om/images/smilies/virgs.gif'g'http://www.tekplatform.com/images/smilies/virgs.gif'h'http://www.tek
platform.com/images/smilies/virgs.gif'i']
['a'..'i']
['a'..'j'http://www.tekplatform.com/images/smilies/virgs.gif'p'http://www.tekplatform.com/images/sm
ilies/virgs.gif'q'http://www.tekplatform.com/images/smilies/virgs.gif'x'..'z']
['universite'http://www.tekplatform.com/images/smilies/virgs.gif 'www.universiteli.net
(http://www.universiteli.net/)'http://www.tekplatform.com/images/smilies/virgs.gif'Ahmet'http://www
.tekplatform.com/images/smilies/virgs.gif'Osman'http://www.tekplatform.com/images/smilies/virgs.
gif'Nilgün']
Örnekleri siz de çoğaltabilirsiniz. Burada 2. örnekle 3. örneğin aynı olduğunu farketmişsinizdir.
Şimdi bu kümeler üzerinde in metodunu kullanarak işlemler yapalım. Mesela ekrana \"programdan
çıkmak istiyor musunuz?\" diye bir mesaj yazılsın ve eğer E tuşuna basılırsa programdan
çıksınhttp://www.tekplatform.com/images/smilies/virgs.gif h tuşuna basılırsa tekrar başa dönsün:
DarkEvenT
05-23-2009, 01:16 PM
Program Denemedir;
Uses Crt;
Label
en_bas;
Var
a:longint;
tus:char;
Begin
a:=1;
en_bas:
Clrscr;
writeln('A nin su anki degeri: 'http://www.tekplatform.com/images/smilies/virgs.gifa);
a:=a+1;
writeln('Cikmak istiyor musunuz ( E -> Evet http://www.tekplatform.com/images/smilies/virgs.gif H
-> Hayir) ?');
tus:=readkey;
if tus in['h'http://www.tekplatform.com/images/smilies/virgs.gif'H'] then goto en_bas;
end.
Gördüğünüz gibi burada h'ye basılıp basılmadığı kontrol ediliyor. Eğer basılmışsa başa
gidiyorhttp://www.tekplatform.com/images/smilies/virgs.gif başka bir tuşa basılmışsa program
bitiyor. Eğer kullanıcının klavyesinin Caps Lock tuşu açıksa bastığı harf
Hhttp://www.tekplatform.com/images/smilies/virgs.gif kapalıysa bastığı harf h (küçük h) olacaktır.
Biz iki durumu da hesaba katıyoruz. Ama kullanıcı mesela s tuşuna basarsa da program biter.
Bunu hesaba katmadık. İyi bir programcı herşeyi düşünür. Şu anda döngüleri bilmediğimizden
kendi döngülerimizi label kullanarak goto ile hallediyoruz. İlerde bu işler çok daha kolay olacak.
Ama merak edenler için sadece E'ye basılınca programdan çıkan programı yapalım:
Program Denemedir;
Uses Crt;
Label
en_bashttp://www.tekplatform.com/images/smilies/virgs.gifyanlis_tus;
Var
a:longint;
tus:char;
Begin
a:=1;
en_bas:
Clrscr;
writeln('A nin su anki degeri: 'http://www.tekplatform.com/images/smilies/virgs.gifa);
a:=a+1;
writeln('Cikmak istiyor musunuz ( E -> Evet http://www.tekplatform.com/images/smilies/virgs.gif H
-> Hayir) ?');
yanlis_tus:
tus:=readkey;
if not (tus in
['h'http://www.tekplatform.com/images/smilies/virgs.gif'H'http://www.tekplatform.com/images/smili
es/virgs.gif'e'http://www.tekplatform.com/images/smilies/virgs.gif'E']) then goto yanlis_tus;
if tus in['h'http://www.tekplatform.com/images/smilies/virgs.gif'H'] then goto en_bas;
end.
Programa eklediğimiz kodları kalın yazdım. Burada not operatörünün (Pascal dilinde böyle
deniliyor) de kullanımına bir örnek vermiş olduk. not'un sağındaki değer yanlış ise sonuç doğru
oluyor. Yani normalde basılan tuş
Ehttp://www.tekplatform.com/images/smilies/virgs.gifehttp://www.tekplatform.com/images/smilies/
virgs.gifHhttp://www.tekplatform.com/images/smilies/virgs.gifh'den birisi ise sonuç doğru oluyordu
ama başına not koyunca eğer tuş
ehttp://www.tekplatform.com/images/smilies/virgs.gifEhttp://www.tekplatform.com/images/smilies/
virgs.gifh ya da H ise sonuç yanlışhttp://www.tekplatform.com/images/smilies/virgs.gif değilse
sonuç doğru oluyor. Bunu küme olmadan yaptığımızı düşünelim. Kodumuz çok uzun olurdu:
if (tus<>'e') and (tus<>'E') and (tus<>'h') and (tus<>'H') then goto yanli_tus;
Yani tuş'un tek tek olmaması gereken harfleri belirmiş oluyoruz. <> ifadesinin eşit değil
manasında olduğunu söylemiştik. Bir önceki programa göre eklediğimiz yerin ne iş yaptığını
gördük. tus değişkeninin değeri
['h'http://www.tekplatform.com/images/smilies/virgs.gif'H'http://www.tekplatform.com/images/smili
es/virgs.gif'e'http://www.tekplatform.com/images/smilies/virgs.gif'E'] kümesinin içinde olana kadar
bir sonraki adıma geçmiyor ve yanlis_tus label'inin (etiketinin) bulunduğu yere gidiyor.
Kümeleri anladığımıza ve birkaç örnek de kandimiz yaptığımıza göre(!) diğer operatörlere ve
if..then..else kalıbı ile yapılmış başka örneklere geçebiliriz. Ama önce Begin-End bloklarını
anlatmalıyız.
Pascal yapısal bir programlama dilidir ve bloklardan oluşur. Sınırsız sayısa iç içe blok olabilir. Bir
blok begin ile başlar ve end ile sona erer. Pascal için bu begin ile end arasına yazılan kodlar bir
bütün olarak düşünülür. Zaten her programın begin ile başlayıp end ile bittiğini gördük.
Daha önce if deyimini kullanmayı gördük ama THEN ifadesinden sonra sadece bir işlem
yaptırabiliyorduk. Eğer belli bir şarta bağlı olarak birden çok işlem yaptırmak istiyorsak bu
işlemleri begin ile end arasına almamız lazım. Yani:
if (şart ya da şartlar) then Begin
işlem 1
işlem 2
işlem 3
...
...
End;
şeklinde kullanırız. Bu durumda şart doğru ise bu işlemler
yapılırhttp://www.tekplatform.com/images/smilies/virgs.gif yanlış ise işlemlerin hiçbirisi
yapılmadan en alttaki end; kelimesinden sonraki işlemden başlayarak programın akışı devam
eder. Bu kalıbı else ile birlikte kullanacaksak;
if (şart ya da şartlar) then Begin
işlem 1
işlem 2
işlem 3
End else Begin
işlem 1
işlem 2
işlem 3
...
...
End;
şeklinde kullanırız. Tabii bunun gibi birkaç tane end arda arda kullanılında hangisi hangi begin'in
karışabilirhttp://www.tekplatform.com/images/smilies/virgs.gif daha doğrusu bilgisayar kesinlikle
karıştırmaz ama siz daha sonra bakınca karıştırabilirsiniz. Daha önceden programın içerisine
açıklama oymaya kısaca deyinmiştik. Yeri gelmişken onu da anlatalım.
Genelde uzun programlar yaptıktan sonra program içerisinde ne yaptığınızı ya da hangi
değişkenin ne işe yaradığını falan unutabilirsiniz. Ya da 1 yıl önce yaptığınız programı açtığınızda
\"Ya bu program ne işe yarıyor\" diyebilirsiniz. İyi bir programcı programın önemli gördüğü yerlerine
kısa açıklamalar koyar. Bunlara daha sonra baktığında ne yaptığını hatırlamak için. Bu
açıklamaları { ile } arasına ya da (* ile *) arasına yazmalısınız. Ben genelde süslü parantezi tercih
ediyorum. Bu iki parantezin içerisine yazılan hiçbirşey (program kodu bile yazsanız) pascal
tarafından dikkate alınmaz ve derlenmez. Yani buraya istediğiniz herşeyi yazabilirsiniz. İlerde
yapacağımız programlarda bu tip açıklamalara ihtiyaç oldukça yer vereceğiz. Şimdi basit bir
örnek daha yapalım:
Program Ornek_program;
{Bu program bir sayının karesini ve kökünü bulmak için yapıldı.
Yapılıs tarihi: 05.06.2002 Saat: 01:48}
Uses Crt;
Label
en_bas;
Var
sayihttp://www.tekplatform.com/images/smilies/virgs.gifkare:longint;
kok:real;
Begin {Program Başlıyor}
en_bas: Clrscr;
writeln('Programdan çıkmak için 1000''den büyük bir sayı yazın');
write('1 ile 1000 arası bir sayı giriniz: ');
readln(sayi); {Sayı isteniyor}
if (sayi<1001) and (sayi>0) then begin
kare:=sayi*sayi; {Karesi hesaplanıyor}
kok:=sqrt(sayi); {Kökü bulunuyor}
{Sonuçlar yazılmaya başlıyor...}
writeln('Bu sayının karesi:'http://www.tekplatform.com/images/smilies/virgs.gif kare:10);
writeln('Bu sayının kökü..:'http://www.tekplatform.com/images/smilies/virgs.gif kok:16:5);
{...sonuçlar yazıldı}
readln; {Enter'a basılması bekleniyor}
goto en_bas;
end; {if deyiminin sonu}
end. {Programın Sonu}
Pascal'da ekrana apostrof işareti ( ' ) yazmak için iki tane apostrof işaretini yan yana yazarız ( ''
gibi..). Programda \"writeln('Programdan çıkmak için 1000''den büyük bir sayı yazın');\" komutuna
bakabilirsiniz. Tek yazarsak Pascal'ın özel işareti olduğu için bizi uyarır. Burada hem begin..end;
kalıbına hem de açıklamaya örnek(ler) var. İnceleyiniz.
Şimdi andhttp://www.tekplatform.com/images/smilies/virgs.gif or ve not ifadelerini tek tek ve
birlikte kullanan örnekler yapalım. İlk önce and ile ilgili basit bir örnek yapalım. Bu programı and'in
kullanımına örnek olması için yapıyoruz. Yoksa program pek bir işe yaramaz:
Program and_ornegi;
Uses Crt;
Var
sayi1http://www.tekplatform.com/images/smilies/virgs.gif sayi2 : integer;
Begin Clrscr;
writeln('Aşağıya 1 ile 10 arası 2 sayı giriniz');
write('Birinci Sayı:');Readln(sayi1);
write('İkinci Sayı:');Readln(sayi2);
clrscr;
if (sayi1 in[1..10]) and (sayi2 in[1..10]) then writeln('Sayıları doğru girdiniz')
else writeln('Sayıları Yanlış Girdiniz...');
readln;
end.
Programı TP'da yazıp çalıştırın ve birkaç sayı girin. Gördüğünüz gibi ancak sayıların ikisi de 1 ile
10 arasındaysa sonuç doğru oluyorhttp://www.tekplatform.com/images/smilies/virgs.gif aksi halde
(sayıların birisi bile 1 ile 10'un dışında olsa) sonuç yanlış oluyor. Çünkü VE (and) kullandık. Peki
bunun yerine sayılardan en az birisinin 1 ile 10 arasında olmasını istesek ne yaparız. O zaman or
(veya) kullanırız:
Program and_ornegi;
Uses Crt;
Var
sayi1http://www.tekplatform.com/images/smilies/virgs.gif sayi2 : integer;
Begin Clrscr;
writeln('Aşağıya 1 ile 10 arası 2 sayı giriniz');
write('Birinci Sayı:');Readln(sayi1);
write('İkinci Sayı:');Readln(sayi2);
clrscr;
if (sayi1 in[1..10]) or (sayi2 in[1..10]) then writeln('Sayıları doğru girdiniz')
else writeln('Sayıları Yanlış Girdiniz...');
readln;
end.
Bu programı çalıştırdığınızda iki sayıdan birisini 1 ile 10 arasında
girersenizhttp://www.tekplatform.com/images/smilies/virgs.gif diğerini ne girerseniz girin sonuç
doğru olur. Eğer ikisi birden 1 ile 10 arasında değilse sonuç yanlış olur. Peki şimdi de and ile or'u
birlikte kullanarak kullanıcıdan
1http://www.tekplatform.com/images/smilies/virgs.gif2http://www.tekplatform.com/images/smilies/
virgs.gif3http://www.tekplatform.com/images/smilies/virgs.gif4http://www.tekplatform.com/images/
smilies/virgs.gif5http://www.tekplatform.com/images/smilies/virgs.gif11 sayılarından birisini
yazmasını isteyelim. Eğer bu yazılan iki sayı da bu sayıların içindeyse sonuçta doğru yazsınhttp://
www.tekplatform.com/images/smilies/virgs.gif birisi bile bu sayıların dışındaysa sonuçta yanlış
yazsın:
Program and_ornegi;
Uses Crt;
Var
sayi1http://www.tekplatform.com/images/smilies/virgs.gif sayi2 : integer;
Begin Clrscr;
writeln('Aşağıya
1http://www.tekplatform.com/images/smilies/virgs.gif2http://www.tekplatform.com/images/smilies/
virgs.gif3http://www.tekplatform.com/images/smilies/virgs.gif4http://www.tekplatform.com/images/
smilies/virgs.gif5http://www.tekplatform.com/images/smilies/virgs.gif11 sayılarından birisi olmak
şartıyla 2 sayı giriniz');
write('Birinci Sayı:');Readln(sayi1);
write('İkinci Sayı:');Readln(sayi2);
clrscr;
if ((sayi1 in[1..5]) or (sayi1=11)) and ((sayi2 in[1..10]) or (sayi2=11)) then writeln('Sayıları doğru
girdiniz')
else writeln('Sayıları Yanlış Girdiniz...');
readln;
end.
Burada ilk önce sayi1'in 1 ile 5 arasında olup olmadığına bakılır. Eğer doğruysa zaten and
kelimesinin solundaki iki şartı kapsayan şart doğru olur. Yani sayı ya 1 ile 5
arasındadırhttp://www.tekplatform.com/images/smilies/virgs.gif ya da 11'dir. Eğer sayı1 1 ile 5
arasında değilse şart yanlış olur ama bir de or'un sağındakine bakılır. Eğer sayı 11'e eşitse bu
şart doğru (true) olacağından yine genel şart doğru olur. Bu durumda and kelimesinin solundaki
şart doğru olmuş olur. Eğer and'in solundaki iki şart da yanlış ise sonuç otomatikmen yanlış olur.
Sağ taraf için de (sayi2 için) aynı işlemler yapıldıktan sonra eğer genel şart doğruysa sonuç doğru
olur. Kendiniz birkaç örnek yaparak bunları görebilirsiniz.
Şimdi basit bir örnek daha yapalım. Bu program kullanıcıya bir toplama işlemi sorsun. Eğer
kullanıcı sonucu doğru girerse \"Tebriklerhttp://www.tekplatform.com/images/smilies/virgs.gif
bildiniz\" yazsınhttp://www.tekplatform.com/images/smilies/virgs.gif aksi halde doğru sonucu
ekrana yazsın. Yani ilk defa ciddi bir program yapıyoruz
http://sabote.com/Smileys/default/smiley.gif
Program Toplama_Programi;
Uses Crt;
var
s1http://www.tekplatform.com/images/smilies/virgs.gifs2:integer;
toplam:integer;
Begin Clrscr;
{Rastgele iki sayi seciliyor...}
randomize;
s1:=random(100);
s2:=random(100);
{...0 ile 99 arasinda rastgele 2 sayi secildi}
writeln('Asagidaki toplama isleminin sonucunu yaziniz...');
writeln;
write(s1http://www.tekplatform.com/images/smilies/virgs.gif' +
'http://www.tekplatform.com/images/smilies/virgs.gifs2http://www.tekplatform.com/images/smilies/
virgs.gif' = ');readln(toplam);
if (toplam=s1+s2) then writeln('Tebriklerhttp://www.tekplatform.com/images/smilies/virgs.gif
bildiniz...')
else writeln('Yanlis Sonuc! Cevap 'http://www.tekplatform.com/images/smilies/virgs.gifs1+s2http://
www.tekplatform.com/images/smilies/virgs.gif' olmaliydi.');
readln;
end.
Gördüğünüz gibi if deyiminde şart olarak iki sayının toplamını da verebiliriz. Hatta başka işlemler
bile yapabiliriz. Mesela şart olarak (toplam=(s1*21)/(s2+4)*11+9-s2*s1) gibi uzun bir aritmetik
işlem birle yazabiliriz. Ayriyete eşittir işaretinin sağ ile solu yer değiştirebilir. ((s1*21)/(s2+4)*11+9-
s2*s1=toplam) gibi. Buralarda parantezlere dikkat etmelisiniz. Şimdilik rastgele sayının nasıl
bulunduğunu öğrenmedik. Onun için o kısımları kafanıza takmayın. Yukardaki örnekte and ya da
or kullanmadık ama faydalı bir program olduğunu düşünüyorum. Not operatörü ise sonuç doğru
ise yanlışhttp://www.tekplatform.com/images/smilies/virgs.gif yanlış ise doğru yapar. Bununla ilgili
bir program yapmıştık ama daha iyi anlaşılması için basit bir örnek daha yapalım. Bu program da
1 ile 5 arasında bir sayı yazılmasını istesin. Eğer sayı 1 ile 5 arasında ise
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif değilse yanlış yazsın:
Program deneme;
uses crt;
var
sayi:integer;
begin clrscr;
write('1 ile 5 arası bir sayı giriniz: ');readln(sayi);
if not (sayi in [1..5]) then writeln('Yanlış!') else writeln('Doğru.');
readln;
end.
Programlamada karşılaştırma ve (sonucuna göre) karar verme işlemleri çok önemli ve geniş
kullanımlıdır. Diğer kullanım alanlarını görmeye devam edeceğiz. Ama önce şimdiye kadar pascal
hakkında öğrendiklerimizin hepsini birden kullanan ve nihayet bir işe yarayan bir oyun yapalım.
Bu oyunda bilgisayar 1 ile 1000 arasında rastgele bir sayı tutsun. Biz bir tahmin yapalım. Eğer
tahminimiz bilgisayarın tuttuğu sayıdan küçükse ekrana
ÇIKhttp://www.tekplatform.com/images/smilies/virgs.gif küçükse İN yazılsın ve bu işlemler biz
sayıyı doğru tahmin edene kadar sürsün. Hani bir oyun yapıyoruz ya -hiç gerek yok ama- bir de
algoritmasını yapalım ki belki daha iyi anlaşılır. Algoritmamız şöyle olabilir:
1) Rastgele (1 ile 1000 arası) bir sayı tut.
2) Kullanıcıya bir sayı sor.
3) Eğer kullanıcının cevabı senin tuttuğun sayıdan büyükse ekrana \"in\" yaz.
4) Eğer kullanıcının cevabı senin tuttuğun sayıdan küçükse ekrana \"çık\" yaz.
5) Eğer kullanıcının cevabı senin tuttuğun sayıya eşitse ekrana \"Aferin Bildin!\" yaz.
6) Eğer kullanıcının cevabı senin tuttuğun sayıya eşit değilse 2. adıma git.
7) Programı bitir.
Bu algoritmayı kendinize göre yapabilirsiniz tabii. Zaten programcılığın en zevkli yanlarından birisi
de aynı programı yapmak için çok fazla seçeneğiniz ve çözüm yolunuz olmasıdır. Şimdi de
programı yazalım. Programımız şöyle olabilir:
Program Tahmin_et_bakalim;
uses crt;
label en_bas;
var
sayihttp://www.tekplatform.com/images/smilies/virgs.gif
tahminhttp://www.tekplatform.com/images/smilies/virgs.gif ts : integer;
begin clrscr;
ts:=0;
randomize;
sayi:=random(1000)+1;
gotoxy(1http://www.tekplatform.com/images/smilies/virgs.gif1);write('1 ile 1000 arasi bir sayi
giriniz...');
gotoxy(1http://www.tekplatform.com/images/smilies/virgs.gif5);write('İşlem: ');
en_bas:
gotoxy(13http://www.tekplatform.com/images/smilies/virgs.gif3);write(' '); {Eski tahmini ekrandan
siliyoruz}
gotoxy(1http://www.tekplatform.com/images/smilies/virgs.gif3);write('Tahmininiz: ');readln(tahmin);
{bir tahmin isteniyor}
ts:=ts+1; {Tahmin sayısı artırılıyor}
gotoxy(8http://www.tekplatform.com/images/smilies/virgs.gif5);
if tahmin<sayi then write('Çık');
if sayi<tahmin then write('İn ');
if sayi=tahmin then begin
writeln('Aferin Bildin!');
writeln('Tahmin Sayısı: 'http://www.tekplatform.com/images/smilies/virgs.gifts);
end else goto en_bas; {tahmin yanlışsa başa gidiliyor}
readln;
end.
Programı TP'da yazıp çalıştırın. İşte size güzel bir oyun! Programda asıl dikkat etmemiz gereken
yerleri kalın yaptım. İsterseniz size bu oyunu geliştirelim ve bu sefer biz içimizden bir sayı
tutalımhttp://www.tekplatform.com/images/smilies/virgs.gif bilgisayar bulsun! O zaman aşağıdaki
programı pascal'da yazıp çalıştırın ve sonra da satır satır inceleyin. Ama programı
çalıştırdığınızda hile yapmayın. Yani aklınızdan tuttuğunuz sayı 430 ise ve program 420'yi tahmin
ederse in demek yok! Ona göre. Bu programı Pascal'da elinizle yazın. Yani kopyala/yapıştır
yapmayın. O zaman daha kolay öğrenirsiniz.
Program Tahmin_et_bakalim;
uses crt;
label en_bas;
var
tahminhttp://www.tekplatform.com/images/smilies/virgs.gif ts : integer;
althttp://www.tekplatform.com/images/smilies/virgs.gifust:integer;
tus:char;
begin clrscr;
writeln('Şimdi aklınızdan bir sayı tutun ve eğer benim söylediğim sayı');
writeln('sizin tuttuğunuz sayıdan küçükse çık anlamında \"ç\"
harfinehttp://www.tekplatform.com/images/smilies/virgs.gif büyükse');
writeln('in anlamındaki \"i\" harfine bir defa basın.');
writeln;
writeln('Not: Sayı 1 ile 100 arasında olmalı!');
writeln;
writeln('Hazırsanız Enter''a basın..');
readln;
clrscr;
alt:=1;
ust:=1000;
ts:=0;
gotoxy(1http://www.tekplatform.com/images/smilies/virgs.gif1);write('Benim Tahminim...: ');
gotoxy(1http://www.tekplatform.com/images/smilies/virgs.gif3);write('Ne yapıyım (i/ç).: ');
tahmin:=500;
en_bas:
gotoxy(20http://www.tekplatform.com/images/smilies/virgs.gif1);write(tahmin);
gotoxy(20http://www.tekplatform.com/images/smilies/virgs.gif3);
repeat
tus:=readkey;
until tus
in['i'http://www.tekplatform.com/images/smilies/virgs.gif'İ'http://www.tekplatform.com/images/smili
es/virgs.gif'ç'http://www.tekplatform.com/images/smilies/virgs.gif'Ç'http://www.tekplatform.com/im
ages/smilies/virgs.gif'D'http://www.tekplatform.com/images/smilies/virgs.gif'd'];
if tus in['i'http://www.tekplatform.com/images/smilies/virgs.gif'İ'] then begin
ust:=tahmin;
tahmin:=(alt+ust) div 2;
end;
if tus in['ç'http://www.tekplatform.com/images/smilies/virgs.gif'Ç'] then begin
alt:=tahmin;
tahmin:=(alt+ust) div 2;
end;
ts:=ts+1;
if tus in['d'http://www.tekplatform.com/images/smilies/virgs.gif'D'] then begin
gotoxy(1http://www.tekplatform.com/images/smilies/virgs.gif5);write('Aferin Bana!');
gotoxy(1http://www.tekplatform.com/images/smilies/virgs.gif6);write('Tahmin Sayım:
'http://www.tekplatform.com/images/smilies/virgs.gifts);
end else goto en_bas;
readln;
end.
DarkEvenT
05-23-2009, 01:16 PM
Burada bilmediğimiz iki şey var. Birincisi repeat...until döngüsü. İkincisi div işlemi. Div (İngilizcesi
division) bölmek manasındadır ve solundaki sayıyı sağındaki sayıya bölüm küsüratı atar. Yani
mesela 6 div 3 = 2'dir ve 15 div 4 = 3'dür. Döngüler konusunu anlatacağız. Programın çalışma
mantığı gayet basit. Ama yeni programlamaya başlayan birisine karışık gelebilir. Program siz in
dediğinizde kendi kendine \"Demek ki sayı bundan
küçükhttp://www.tekplatform.com/images/smilies/virgs.gif o zaman bundan sonra en fazla
söyleyeceğim sayı bu olsunhttp://www.tekplatform.com/images/smilies/virgs.gif yani üst limit bu
olsun\" diyor ve ust:=tahmin ifadesi ile de bunu yapıyor. alt'ın da mantığı aynı. Tahminini yaparken
de alt ve ust değişkenlerini topluyor ve ikiye bölüyor. Programı çalıştırdığınızda farketmişsinizdir
zaten. İlk tahmin hep 500 oluyor. Ondan sonra in derseniz
250http://www.tekplatform.com/images/smilies/virgs.gif çık derseniz 750 oluyor... Tahmin
sayısının nasıl hesaplandığı da gayet basit. Her sayı tahmininde tahmin sayısı bir artırılıyor.
İf kalıbını kullanırken hani dedik ya eğer şart (ya da şartlar) doğruysa işlem yapılır. Bir de
programlama'ya başlarken veri tiplerinden bahsederken boolean diye bir tipi kısaca ele almıştık
ve sonra anlatacağız demiştik. Şimdi boolean değişkenlerin kullanımına bakalım.
Daha önceden de dediğimiz gibi boolean değişkenin değeri ya TRUE (doğru) ya da FALSE
(yanlış) olur. if ifadesinde de sonuç ya doğru ya da yanlış oluyordu. İşte if ifadesinde şart yerine
boolean bir değişken kullanırsak program daha anlaşılır olabilir. Özellikle uzun programlarda çok
işe yaradığını söyleyebilirim. İlk önce sadece nasıl kullanıldığına bakmak için bir örnek yapalım:
Program Mantiksal_Degisken;
uses crt;
var
YazilsinMi: boolean;
begin clrscr;
yazilsinmi:=true;
if yazilsinmi=true then write('Yazı Yazılıyor...');
readln;
end.
Aslında bu şekilde kullanıldığında pek bir anlamı kalmıyor. Boolean değişkenler özel olarak şöyle
kullanılabilir:
Program Mantiksal_Degisken2;
uses crt;
var
YazilsinMi: boolean;
begin clrscr;
yazilsinmi:=true;
if yazilsinmi then write('Yazı Yazılıyor...');
readln;
end.
Gördüğünüz gibi bir karşılaştırma yok. Burada if deyimine dikkat edin. Eğer yazilsinmi
değişkeninin değeri true ise sonuç doğru oluyor ve
yazılıyorhttp://www.tekplatform.com/images/smilies/virgs.gif değeri false ise sonuç da yanlış
(false) oluyor ve program hiçbirşey yapmadan kapanıyor. İsterseniz yazilsinmi:=true yerine
yazilsinmi:=false yazıp tekrar deneyin. Genelde boolean değişkenlere böyle direkt olarak
yazilsinmi:=true; gibi değer atanmaz. Şimdi birkaç farklı atama yöntemine bakalım. Aslına
yazilsinmi:= ifadesinin sağına sonucu true ya da false olabilecek herşey yazılabilir. Mesela iki
tane boolean değişkenimiz varsa ve birisinin adı a diğerinin b ise;
a:=b;
ya da
b:=a;
gibi işlemleri yapabiliriz. Ayrıca if ile kullandığımız bütün operatörleri
(=http://www.tekplatform.com/images/smilies/virgs.gif
<http://www.tekplatform.com/images/smilies/virgs.gif
>http://www.tekplatform.com/images/smilies/virgs.gif
<>http://www.tekplatform.com/images/smilies/virgs.gif
inhttp://www.tekplatform.com/images/smilies/virgs.gif
andhttp://www.tekplatform.com/images/smilies/virgs.gif
orhttp://www.tekplatform.com/images/smilies/virgs.gif not) burada da kullanabiliriz. Mesela yine a
ve b boolean değişkenleri için;
a:= not a;
kullanırsak a'nın değerini tersine çevirmiş oluruz. Yani a önceden true ise artık
falsehttp://www.tekplatform.com/images/smilies/virgs.gif önceden false ise artık true olmuştur.
Tabii ki a:=not b; de kullanılabilir. Mesela sayi diye bir değişkenimiz olsun. Eğer bu değişkenin
değeri 5 ise dogruMu adlı boolean değişkenimizin değerinin
truehttp://www.tekplatform.com/images/smilies/virgs.gif aksi halde false olmasını isteyebiliriz.
Program deneme;
uses crt;
var
sayi:integer;
dogruMu:boolean;
begin clrscr;
write('Bir sayı giriniz: ');readln(sayi);
dogruMu:= (sayi=5);
if dogrumu then writeln('Aferin doğru') else write('Malesef yanlış');
readln;
end.
Burada sayi'nin 5'e eşit olması halinde sonuç doğru
(true)http://www.tekplatform.com/images/smilies/virgs.gif yoksa yanlış (false) olacaktır. Eğer
sayının 1 ile 30 arasında olmasını istiyorsak dogrumu:=(sayi=5); satırını dogrumu:=(sayi in[1..30])
olarak değiştirebiliriz. Ya da sayının 3'e veya 8'e eşit olması durumunda sonucun doğru olmasını
istiyorsak dogrumu:=(sayi=3) or (sayi=8); kullanabiliriz. Anlayacağınız if'deki şartlarda ne
yapıyorsak burada da aynısını yapabiliriz. Mesela boolean bir değişken kullanarak 1 ile 30
arasındaki tek sayıları ekrana yazdıran bir program yapalım:
Program Mantiksal_Degisken3;
Uses Crt;
label
tekrar;
var
sayi:byte;
tekMihttp://www.tekplatform.com/images/smilies/virgs.gif devamMi:boolean;
begin clrscr;
tekMi:=true;
devamMi:=true;
sayi:=1;
tekrar:
if tekmi then writeln(sayi);
sayi:=sayi+1;
tekMi := not TekMi;
devammi:= not (sayi=30);
if devamMi then goto tekrar;
readln;
end. {Program Sonu}
Programı yazıp çalıştırdığınızda 1 ile 30 arasındaki tek sayılar ekrana sırayla yazılır ve Enter'a
basılması beklenir. Sadece tek sayıların yazılmasını tekmi değişenini bir true bir false yaparak
sağlıyoruz. True ise yazılıyorhttp://www.tekplatform.com/images/smilies/virgs.gif false ise
yazılmıyor. Ayrıca devammi değişkeni de sayının 30 olmadığı durumlarda
doğruhttp://www.tekplatform.com/images/smilies/virgs.gif 30 olduğu durumda yanlış olur. Ve
yanlış oluncahttp://www.tekplatform.com/images/smilies/virgs.gif yani sayı 30 olunca en sondaki if
ifadesi doğru olur ve program sona erer.
Eğer şimdiye kadar anlamadığınız birşey yoksa ve kendiniz de biraz örnek yaptıysanız artık baya
bir Pascal biliyorsunuz demektir. Şimdiye kadar iyi bir program yapamamamızın sebebi daha
döngülere girmememizden kaynaklanıyor. if kalıbını anlattık ama Pascal'da sadece karar verme
komutu if değildir. Bir de Case-of deyimi var ki bazı durumlarda if'e göre çok daha kısa kod ile
aynı işi yapmanızı sağlar. Ayrıca kullanımı da çok basittir. Mesela bir değişkenimiz var ve bu
değişkenin aldığı 10 tane değişik değer için 10 ayrı işlem yaptırmak istiyoruz. Bunu if ile yapmak
hem çok uzun olur hem de hata yapma şansımız yüksek olur. Ama Case of kullanırsak çok daha
anlaşılır ve kısa yapabiliriz. Case'in genel kullanımı şöyledir:
Case değişken of
değer 1 : işlem 1;
değer 2 : işlem 2;
değer 3 : işlem 3;
...
...
End;
Tabii yine if'de (ve Pascal'ın heryerinde) olduğu gibi birden çok işlem yaptıracaksak begin ile and
arasına alırız. Şunun gibi:
Case değişken of
değer 1 : begin
işlemler...
end;
değer 2 : begin
işlemler...
end;
...
...
end;
Ayrıca birden çok değer için bir işlem yapılacaksa şöyle kullanılır:
Case değişken of
değer 1http://www.tekplatform.com/images/smilies/virgs.gif değer
2http://www.tekplatform.com/images/smilies/virgs.gif değer 3 : işlem 1;
değer 4 : işlem 2;
değer 5http://www.tekplatform.com/images/smilies/virgs.gif değer 6 : işlem 3;
End;
Şimdi güzel bir program yapalım. Kullanıcıdan bir sayı istesin ve ekranda bir menü olsun. Seçime
göre belirli işlemler yapılsın. Programı yazmaya başlayalım:
Program Mantiksal_Sorgulama3;
Uses Crt;
Label
en_bas;
var
sayi:longint;
secim:char;
cikis:boolean;
begin clrscr;
cikis:=false;
write('1 ile 1000 arası bir sayı giriniz: ');readln(sayi);
en_bas:
clrscr;
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif8);write('::: Menü :::');
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif10);write('[1] Sayının Karesini yaz');
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif11);write('[2] Sayının Karekökünü
yaz');
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif12);write('[3] Sayının Kübünü yaz');
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif13);write('[4] Programdan çık');
gotoxy(20http://www.tekplatform.com/images/smilies/virgs.gif18);write('Seçiminizin önündeki
sayıya basınız');
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif15);write('Seçiminiz: ');
secim:=readkey;
case secim of
'1': begin
clrscr;
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif10);
write(sayihttp://www.tekplatform.com/images/smilies/virgs.gif'''nin Karesi=
'http://www.tekplatform.com/images/smilies/virgs.gifsayi*sayi);
secim:=readkey;
end;
'2': begin
clrscr;
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif10);
write(sayihttp://www.tekplatform.com/images/smilies/virgs.gif'''nin Karekökü=
'http://www.tekplatform.com/images/smilies/virgs.gifsqrt(sayi):10:4);
secim:=readkey;
end;
'3': begin
clrscr;
gotoxy(30http://www.tekplatform.com/images/smilies/virgs.gif10);
write(sayihttp://www.tekplatform.com/images/smilies/virgs.gif'''nin Kübü=
'http://www.tekplatform.com/images/smilies/virgs.gifsayi*sayi*sayi);
secim:=readkey;
end;
'4': cikis:=true;
end; {Case'in sonu}
if (not cikis) then goto en_bas;
clrscr;
writeln('Güle Güle... writen by www.universiteli.net (http://www.universiteli.net/)');
end.
Gördüğünüz gibi secim:=readkey; komutuyla bir tuşa basılmasını bekliyor ve case secim of ile de
bu tuşun '1'http://www.tekplatform.com/images/smilies/virgs.gif
'2'http://www.tekplatform.com/images/smilies/virgs.gif '3' veya '4' olması durumunda yapılacak
işlemler belirtiliyor. '4' olması durumunda cikis:=true ile cikis isimli boolean değişeknin değeri true
oluyor. if (not cikis) then goto en_bas; ile de eğer cikis'in değeri false ise (ki '4'e basılmadıkça hep
false olurhttp://www.tekplatform.com/images/smilies/virgs.gif çünkü programın başında false
yaptık) en_nas; labelinin olduğu yere gidiyor. Dolayısıyla da true olunca programdan çıkılmış
oluyor. Artık programlarımızda menü yapmaya da bir örnek vermiş olduk. Tabii hareketli menü
yapmayı da anlatacağız ama o daha çok ilerde.. Bu örnek karışık geldiyse konunun daha iyi
anlaşılması için basit bir örnek daha yapalım:
Program Mantiksal_sorgulama;
Uses Crt;
var
sayi:longint;
begin clrscr;
write('Bir Sayı Giriniz: ');readln(sayi);
case sayi of
0..9: writeln('Bu sayı 1 basamaklıdır');
10..99: writeln('Bu sayı 2 basamaklıdır');
100..999: writeln('Bu sayı 3 basamaklıdır');
else writeln('Bu sayı 3''den çok basamaklıdır');
end;{Case'in sonu}
end.
Burda case ile birlikte else'in de kullanımını gördük. Eğer case ile belirttiğimiz hiçbir şart doğru
değilse bir işlem yapmasını isteyebiliriz. Bu durumda bütün şartların sonuna else.. koyarız. Yine
case kullanırken iki nokta üst üste (http://sabote.com/Smileys/default/smiley.gif işaretinin soluna
araya virgül koyarak birden çok şart da koyabilirsiniz.
case sayi of
13http://www.tekplatform.com/images/smilies/virgs.gif
17http://www.tekplatform.com/images/smilies/virgs.gif
4http://www.tekplatform.com/images/smilies/virgs.gif
10http://www.tekplatform.com/images/smilies/virgs.gif 9: writeln('Bu sayı benim sevdiğim
sayılardan birisidir!');
else writeln('Bu sayıları hiç sevmem http://sabote.com/Smileys/default/sad.gif');
end;
gibi.. Case komutunu genelde bir değişkenin birden çok sonucuna göre farklı işlemler yaptırmak
istediğinizde kullanabilirsiniz. Dikkat etmeniz gereken case degisken of kalıbında belirttiğiniz
değişken ile alabileceği değerlerin aynı tipte olmasıdır. Yani değişken sayı tipindeyse herhalde
değeri 'D' olamaz! Ya da char tipindeyse değeri 5
olamazhttp://www.tekplatform.com/images/smilies/virgs.gif '5' olabilir. İkisinin arasındaki farkı
anlatmıştım. Önceki sayıhttp://www.tekplatform.com/images/smilies/virgs.gif sonraki karakterdir.
Pascal'da (ve diğer bütün programlama dillerinde) iç içe istediğiniz kadar if kullanabilirsiniz.
Mesela:
if a>b then begin
if a=0 then writeln('B 0''dan küçük');
if b=0 then writeln('A 0''dan büyük');
end; gibi olabilir. Ya da aşağıdaki 3 if deyimi aynı işi yapar:
1)
if a>1 then begin
if a<7 then writeln('A değişkeninin değeri 1 ile 7 arasındadır.');
end;
2)
if a>1 then if a<7 then writeln('A değişkeninin değeri 1 ile 7 arasındadır.');
3)
if (a>1) and (a<7) then writeln('A değişkeninin değeri 1 ile 7 arasındadır.');
Programcı siz olduğunuza göre (ve amaç problemi en basit ve kısa yoldan çözmek olduğuna
göre) hangisini kullanacağınıza karar vermek size kalmış. 2. örnekte if a>1 then ifadesinden
sonraki mavi yazılı yerin tamamı bir komuttur. Bunu daha önceden söylemiştik. Öyleyse then'den
sonraki komut bu olabilir. Burada iç içe iki if kullanılmıştır.
Pascal'da olan iki karşılaştırma deyimini (if ve case) gördük. Bunlar üzerinde istediğiniz kadar iç
içe ve birlikte kullanımlar yapabilirsiniz. Bol bol örnek yapmanızı tavsiye ederim. Son olarak if
deyiminde (ve boolean değişkenlerde) kullanılan mantık işlemlerive göz atalım. Yani \"doğru ve
doğru\" nun sonucu doğruhttp://www.tekplatform.com/images/smilies/virgs.gif \"doğru ve yanlış\" ın
sonucu yanlışhttp://www.tekplatform.com/images/smilies/virgs.gif \"yanlış veya doğru\" nun sonucu
doğru gibi.. Birkaç örnek yapalım ve bunları tablo olarak verelim ve en son da uzun bir örneği
açıklayalım ki kafalarda soru işareti (?) kalmasın!
İşlem Sonuç
(true and true) True
(true and false) False
(false and false) False
(true or true) True
(true or false) True
(false or false) False
not (true) False
not (false) True
not (not (false)) False
(true and true and false) False
(false or true or false) True
Yukardaki tabloya göre ne kadar karışık olursa olsun her işlem önce parantez içleri yapılarak
basite indirgenip çözülebilir. Lise'deki mantık dersi iyi olan arkadaşlar daha kolay yapabilirler.
Bilmeyenler için kelimelerin anlamını da toplu olarak birkez daha verelim:
Kelime (Deyim) Türkçe Anlamı
TRUE Doğru
FALSE Yanlış
AND Ve
OR Veya
NOT Değil
IF Eğer
THEN isehttp://www.tekplatform.com/images/smilies/virgs.gif öyle ise..
BEGIN Başla
END Son
ELSE Değilse
Şimdi size biraz uzun ve karışık gelen bir problemin sonucunun true mi yoksa false mi olduğunu
bulalalım:
if (((true and false) or (true or true)) and ((false or true) and (true or false) and (true and true))) or
false then..
İlk önce parantez içerisinde başlayalım. İlk kalın olan yerin sonucu false olduğundan bunun yerine
false koyup ikinci adıma geçelim:
if ((false or (true or true)) and ((false or true) and (true or false) and (true and true))) or false then..
Şimdi kalın olan yerin değerinin de true olduğunu biliyoruz. Onun yerine de true yazalım. Sonuç
şöyle olur:
if ((false or true) and ((false or true) and (true or false) and (true and true))) or false then..
İşlem biraz kısaldı. Şimdi kalın olan yere bakalım. Değerinin true olduğunu biliyoruz. Son durum
şöyle oldu:
if ((false or true) and (true and (true or false) and (true and true))) or false then..
Şimdiki kalın yazılı yerin değeri de true olduğundan yerine yazalım:
if ((false or true) and (true and true and (true and true))) or false then..
Bu seferki kalın yerin anlamı da true olduğundan son durum şu olur:
if ((false or true) and (true and true and true)) or false then..
Bu kalın yazılı yerin anlamı da true olur:
if (true and (true and true and true)) or false then..
Bu seferkinin anlamı da true olur. Çünkü 3'ü de doğrudur. Birisi yanlış olsa false olurdu. Sonuçta
durum şöyle oldu:
if (true and true) or false then..
Artık işlem çok basit:
0 comments
Post a comment