|
PROGRAMLAMA
DİLİ (BURADAKİ PROGRAMLARIN YAPIMINDA FREE
Pascal KULLANILMIŞTIR) (Konuların büyük kısmı FREE Pascal
Kitabından Türkçeleştirilmiştir) HAZIRLAYAN E-mail
: [email protected] Web
: www.geocities.com/menserr/ |
TURBO PASCAL’ A GİRİŞ VE EDİTÖR KULLANIMI :
GENEL BİLGİLER :
PASCAL programlama dili 1968 yılında Niklaus WIRT tarafından geliştirilmiş yüksek seviyeli bir programlama dilidir. Bu dilin Turbo Pascal versiyonu, günümüzde mühendislik, ticari ve bilimsel alanlarda yaygın olarak kullanılmaktadır. Yaygın olarak kullanılmaya başlayan DELPHI programlama dili Turbo Pascal’ ın görsel (visual) şeklidir.
PASCAL ve günümüzdeki ismiyle TURBO PASCAL, özellikle program yazmada sağladığı büyük kolaylıklardan dolayı çok yaygın olarak kullanılan bir dil haline gelmiştir. Turbo Pascal’ da yazılan programlar daha kısa, anlaşılması kolay ve çok hızlı olarak çalışırlar. Özellikle GOTO komutunun zorunlu olmaması ve bu komuta gerek duyulmamasından dolayı programın okunması kolaylaşmakta ve çalışma hızı artmaktadır.
Turbo Pascal’ ın programcıya diğer bir önemli özellik: programcı kendisine gerekli olan ve her yerde kullanması gereken program parçalarını (Unit) bir defa hazırladıktan sonra bu program parçalarını başka programlar içerisinde çok kolay bir şekilde kullanabilmekte ve istediği şekilde veri tipleri tanımlayabilmektedir. Bu şekilde programın daha esnek ve daha kısa sürede tamamlanması sağlanmaktadır.
Turbo Pascal’ ın diğer bir önemli özelliği ise program yazma işlemleri için hazırlanan editör’ ün esnek olması, programların makine diline anında çevrilmesi, hata bulma ve hataları düzeltme işlemlerinin pratik ve hızlı olarak yapılmasına imkan vermesidir.
TURBO PASCAL dilinin kullanılacağı programlama alanlarına bir sınırlama konulamaz. Her türlü problemin çözümü ve programlanmasında TURBO PASCAL’ dan yararlanılabilir. Çok geniş bir komut kütüphanesine sahip olmasının yanında, kullanıcı kendi komutlarını kendisi yazabilmekte ve istendiği gibi kullanılabilen bir grafik ortamına sahiptir.
TURBO PASCAL’ DA PROGRAM YAPISI ve TANIMLAMALAR :
I- TURBO PASCAL’ DA PROGRAM YAPISI :
Turbo Pascal dili yapısal bir programlama dilidir. Turbo Pascal ile yazılmış programlara bakıldığında, programı oluşturan komut cümlelerinin bloklar halinde yazıldığı görülür.
Belirli bir işlemi yapmak için bir araya getirilmiş bir veya birden fazla komutun oluşturduğu program parçasına blok adı verilir. Diğer dillerde IF-GOTO komutları ile kurulan döngü ve şartlı dallanmalara TURBO PASCAL’ da rastlanılmaz. Turbo Pascal’ da bu yapının kullanılmasına gerek kalmaz.
Turbo Pascal’ da yazılan programların en büyük özelliği düzenli okunabilir olmasıdır. Bu özellik yapısal dillerin en büyük özelliğidir. Bu özellik programlar üzerinde düzenlemelerin daha kolay yapılmasını sağlamaktadır.
Turbo Pascal’ da bir programın yapısı genel olarak aşağıdaki gibidir.
Program prog_adı
Tanımlamalar
Procedure ve Function’ lar
Ana Program Kesimi
Yukarıdaki yapıyı biraz daha genişletirsek;
Program ProgramAdı
Uses
Kullanılacak unit’ ler
Type
Özel veri tipleri
Const
Sabitler
Var
Değişkenler
Label
Etiketler (Goto için)
Procedure ProcedureAdı
Type ……
Const……
Label……
Var…..
Begin
: Procedure
: alt program kesimi
End;
Function FunctionAdı
Tyepe…..
Const….
Label….
Var……
Begin
: Function
: alt program kesimi
End ;
Begin
:
: Ana program kesimi
End.
Bu yapıda kullanılan işlemleri kısaca açıklayalım.
Program : Bu komut ile program için herhangi bir isim yazılır. Kullanımı zorunlu değildir.
Uses : Pascal’ ın kendi unit’ lerini (CRT,DOS,PRINTER,OVERLAY … vb) ve/veya kullanıcıların kendi hazırladığı unit’ leri kullanmak için kullanılır.
Type : Özel veri tipleri tanımlamak için kullanılır.
Const : Sabit tanımlamak için kullanılır.
Label : Goto komutu ile program akışının gideceği bölümleri tanımlamak için kullanılır.
Var : İstenen tipte değişken tanımlamak için kullanılır.
Program başında tanımlanan Type, Const, Label, ve Var bölümlerindeki tip, sabit, etiket ve değişkenler programın her kesiminde geçerlidir.
Procedure : Amacı, program parçalarının belli isimler altında yazılarak
bir komut gibi kullanılmasını sağlamaktır. Bu bölümde Type, Const, Label ve Var
tanımlama bölümleri kullanılabilir. Bu bölümlerde tanımlanan tip, sabit, etiket
ve değişkenler sadece tanımlandığı Procedure içerisinde kullanılabilir.
Function : Program parçalarının belli isimler altında yazılarak bir fonksiyon gibi kullanılmasını sağlamaktır. Bu bölüme Type, Const, Label ve Var tanımlama bölümleri kullanılabilir. Bu bölümlerde tanımlanan tip, sabit, etiket ve değişkenler sadece tanımlandığı Function içerisinde geçerlidir.
II- ÖZEL SEMBOLLER VE PASCAL KELİMELERİ :
Özel Semboller : Bir Pascal programı içerisinde ;
A’ dan Z’ ye büyük ve a’dan z’ ye küçük, İngiliz alfabesinin harfleri. 0’ dan 9’ a kadar olan rakamlar. Onaltılı sayı sistemindeki sayıları ifade etmek için 0’ dan 9’ a rakamlar ile A’dan F’ ye büyük harfler ve a’ dan f’ ye küçük harfler kullanılır.
Harfler : İngiliz alfabesinin harfleri A….Z ve a…..z
Rakamlar : Rakamlar 0……..9
Hexadecimal : A…F, a….f, 0…9
Program içersinde tek başına kullanılan özel karakterler:
^ + / ( ) = _ # $ { [ ] } \ } < > @ . , ; :
Beraber kullanılan özel karakterler :
<> <= >= = := .. (* *) (. .) {$ }
+ : toplama işlemi ile string bilgilerin birleşmesini sağlar
-*/ : Aritmetik işlemlerin yapılmasını sağlar.
=<> : Karşılaştırma işlemlerinde kullanılır.
[] (..) : Diziye ait indis numarasını göstermekte kullanılır.
; : Pascal komut ve deyimlerini birbirinden ayırmak için kullanılır.
{}> : Program içerisinde programın istenen bölüm veya bölümlerine açıklama yazmak için
(* *) kullanılır.
:=> : Değişkenlere değer aktarmak/ atamak için kullanılır.
. : program sonunda ; yerine ve Real sayıların tam ile ondalıklı kesimi arasına yazılır.
{$ } : Complier bildirilerini bildirmek için kullanılır.
: : Değişken tanımlama sırasında değişken listesinin sonunda ve CASE-Of komutunda sabit bilgilerden sonra kullanılır.
( ) : Standart veya hazırlanan Procedure / Function’ ların parametrelerini tanımlamak, aritmetik işlemler sırasında öncelik belirtmek için kullanılır.
@ : Addr fonksiyonu yerine adres belirtmek için kullanılır.
# : Kod numaraları ile karakter veya tuşu belirtmek için kullanılır .
Turbo Pascal Kelimeleri : Turbo Pascal’ da kendi işlevleri dışında kullanılamayacak olan kelimeler vardır. Bu kelimeler programcı tarafından bir değişken, sabit, etiket, tip, Procedure veya Function adı olarak kullanılamazlar. Bu kelimeler ‘ Reserved Word’ olarak adlandırılırlar.
Absolute external Mod shr
And file nil string
Array for not then
Begin forward object to
Case Function of type
Const goto or unit
Constructor ıf packed until
Destructor implementation Procedure uses
Div in program var
Do inline record virtual
DownTo interface repeat while
Else interrupt set with
End Label shl xor
Tanıtıcı İsimleri :
Program içerisinde sabit, tip, değişken, etiket, Procedure ve Function isimleri için kullanılan, kullanıcının belirlediği özel isimlerdir. İstenilen uzunlukta olabilirler ama ilk 63 karakter dikkate alınır. Bir tanıtıcının özellikleri :
Etiketler (Labels) :
Goto komutu ile program akışının gideceği program bloklarını belirtmek için kullanılır. Rakam olarak verildiği zaman 0 ile 9999 arasında olmalıdır.
Sayılar :
Kullanılan sayılar tam sayı ve gerçek (Real) sayı olabilirler. Hexadecimal (onaltılı) sabit tam sayılar’ ın önüne ($) işareti getirilir. Mühendislik notasyonundaki gerçek sayılarda E veya e harfleri bulunur.
Örnek :
7E-2 è
7*10-2
12.56e+5 è 12.56*10+5
String İfadeler :
String ifadeler, ASCII karakter setindeki bütün karakterleri alır. Bu ifadeler iki apostrof
(‘ ‘) arasına yazılırlar. En fazla 255 karakterlik bilgi olabilir. Bilgiler, # (diyez) işareti yardımı ile kod numaraları verilerek de yazılabilirler.
Örnek :
‘Turbo Pascal’ ‘Türkiye Cumhuriyeti’#7
#12’pascal öğreniyoruz’#248
‘pascal’ ‘ın’
‘Şanlıurfada’#13’Gaziantep’#13
‘:’
Açıklamalar :
Programın okunabilirliğini arttırmak için programcı, programda gerekli gördüğü yerlere çeşitli açıklamalara yer verebilir. Program içerisinde yapılacak açıklamalar { } veya (* *) işaretleri arasına yazılır. Bu işaretler arasına yazılan açıklama ve notlar derleme sırasında dikkate alınmazlar. Programcının program kesimlerinde yaptığı işlemlere ait açıklamalar yazmak için kullanılırlar.
{ Bu bölümde maaşlar hesaplanıyor }
(* Bordroyu yazıcıya
döküm bölümü*)
yukarıdaki gibi yapılan açıklamalar doğrudur. Ancak aşağıdaki gibi bir açılama yapmak hatalıdır.
{Bu bölümde bilgiler alınıyor
{Kişisel bilgiler alınıyor } }
Program Satırları :
Pascal programları, editör programları yardımıyla hazırlanırlar. Bunun için Pascal programcısı başka bir editör programı kullanabileceği gibi, çok pratik işlemlere sahip olan Turbo Pascal’ ın kendi editörünüde kullanabilir. Editör içerisinde yazılan bütün komut ve komut cümleleri yazıldıkları sıra ile korunur ve bu sıra ile işlem görürler. Bu nedenler basic’ te olduğu gibi hangi komutun önce geldiğini belirten bir satır numarasına gerek kalmamaktadır. Başka bir deyişle Pascal’ da satır kavramı yoktur. Herhangi bir komut veya deyim bir satır üzerinde olabileceği gibi deyimleri, sabit ifadeleri bölmemek şartı ile birden fazla satır üzerinde de yer alabilir.
A:=B+C; ifade si aşağıdaki gibide yazılabilir.
A
:=
B
+
C
;
Bu yazılım şekli programın okunabilirliğini zorlaştırdığı ve satır sayısını arttırdığı için tavsiye edilmez. Aynı şekilde birden fazla komut veya deyim aynı satır üzerinde yer alabilir. Bu şekilde yazılımlar daha çok tavsiye edilir.
If A>B Then Writeln (‘A Büyük’) Else Writeln (‘B Büyük’);
Komut grubu aşağıdaki gibide yazılabilir.
If A>B then
Writeln (‘A BÜYÜK’)
Else
Writeln (‘B BÜYÜK’);
Komut cümlelerini birbirinden ayırmak için noktalı virgül “;” karakteri kullanılır. Bir satırın maksimum uzunluğu 126 karakterdir. Yani bir satır üzerine 126 karakterlik komut veya komutlar yazılabilir. 126. kolonun aşılması durumunda ‘ line too long’ hatasının oluşmasına sebep olur.
Atama İşlemleri :
Turbo Pascal’ da atama işlemleri için := ifadesi kullanılır. Bu ifadenin kullanım şekli aşağıdaki gibidir.
Değişken := ifade
İfade işlem , sabit veya değişken olabilir. İfade ile değişken aynı tipte olmalıdırlar. Aksi taktirde ‘ type mistmach’ hatasının oluşmasına sebep olur. Sağ tarafta verilen ifadenin sonucu sol taraftaki değişkene aktarılır.
A:= 20 ; A değişkenine 20 değeri aktarılır
B:=A ; B değişkenine A’ nın değeri aktarılır.
D:= A*A+B; D değişkenine A*A+B işleminin sonucu aktarılır.
Örnek;
Var
A,B : integer;
Ad,Soyad : string[10];
Isim : string[20];
T : Real;
Begin
A:=20 ; B:=12;
T:=A+B;
Ad := 'osman';Soyad:='Akgobek';
Isim := Ad +' '+Soyad;
Writeln ('T=',T);
Writeln ('Ad Soyad =', Isim);
end.
III- VERİ TİPLERİ (Data Types) :
Turbo Pascal’ da program içerisinde kullanılan bütün değişkenler tipleri ile beraber tanımlanmalıdırlar. Değişken, sabit ve tip tanımlamaları için Var, Const, ve Type tanımlama blokları kullanılır. Kullanılan tipler ;
Tam Sayı Tipler :
Tamsayı, değişken ve sabitleri tanımlamak için kullanılan tiplerdir. Bu değişken ve sabitlere ondalıklı değer aktarılamaz. Ondalıklı değer aktarılması veya tamsayı değişkene atama sırasında işlem içerisinde / işaretinin olması veya real bir değişkenin olması durumunda ‘Type Mismatch’ hatası oluşur. Tam sayı tipler.
|
TİP ADI |
ALT SINIR |
ÜST SINIR |
KAPLADIĞI YER |
|
ShortInt |
-128 |
127 |
1 byte |
|
Byte |
0 |
255 |
1 byte |
|
Integer |
-32.768 |
32.767 |
2 byte |
|
Word |
0 |
65.535 |
2 byte |
|
LongInt |
-2.147.483.648 |
2.147.483.647 |
4 byte |
Integer Tipi Veriler :
Integer tipteki veriler, yukarıdaki tablodan da görüldüğü -32768 ile 32767 arasında değerleri alan tamsayılardır. Bu tür veriler desimal nokta ile temsil edilemezler. Tam sayı değerler desimal ve hexadecimal notasyonlarla ifade edilebilirler. Hexadecimal notasyondaki bilgileri kullanmak için sayıların sol tarafına $ işareti kullanılır. Hexadecimal sayılar ifade etmek için 0’ dan 9’ a kadar olan rakamlar ve A’ dan F’ ye kadar olan harfler kullanılabilir. Integer sayıların sınırları hexadecimal olarak $0000 ile $FFFF arasındadır.
Bütün veri tipleri üzerinde yapılan işlemler sırasında verilen sınırların dışına çıkılması hatadır. Bu nedenle yanlış sonuçlar üretilir. Bu tür hatalar derleyici tarafından programcıya iletilmez. Bu nedenle yapılan işlemlere ve kullanılan sayılara uygun veri tiplerinin kullanılması gerekir. Bunu bir örnek ile açıklarsak eğer ;
Var
D: integer;
R: real;
Begin
D:=5000;
R:=(D*100)/100 ;
Writeln(R:0:2);
Readln;
End.
Yukarıdaki programa bakıldığı zaman sonuçta 5000 değerini üretmesi beklenir. Çünkü D değişkeninin değeri 5000 ve bu değişken 100 ile çarpılıp tekrar 100’ e bölünüyor. Ama bu programın çalıştırılması sonucunda ekrana -242.88 şeklinde ilgisiz bir sonuç verir. Bu nedenle kullanılan veri tiplerine ve işlem şekillerine dikkat edilmelidir.
Byte Tipi Veriler :
İşaret ve desimal notasyon içermeyen ve 0 ile 255 arasındaki değerlerden oluşan tam sayı bilgilerden oluşur. Bellekten yer tasarrufu sağlamak için, 0-255 arasındaki sayıları tutmak için bu tipin kullanılması daha yararlı olacaktır. Integer tipi sayılarda olduğu gibi bu sayılarda da hexadecimal notasyonlar kullanılabilir. Hexadecimal olarak sınırları $000 ile $FF arasındadır.
Gerçek Sayı Tipler :
Ondalık değişken ve sabitleri tanımlamak için kullanılır. Gerçek sayı tipleri aşağıda verilmişt.r
|
TİP ADI |
ALT SINIR |
ÜST SINIR |
KAPLADIĞI ALAN |
|
Real |
2.9 * 10 ^-39 |
1.7 * 10^38 |
6 byte |
|
Single |
1.5 * 10^-45 |
3.4*10^38 |
4 byte |
|
Double |
5.0 *10^324 |
1.7*10^308 |
8 byte |
|
Extended |
3.4 *10^-4932 |
1.1 * 10^4932 |
10 byte |
|
Comp |
-2^63+1 |
2^63-1 |
8 byte |
Real dışındaki diğer veri tiplerin çalışması için makinede matematik işlemcinin bulunması gerekir.
String Tip :
Alfasayısal değişken ve sabitleri tanımlamak için kullanılır. Program içerisinde sayısal anlamı olmayan ve isim, adres, şehir… gibi bilgiler String tip kullanılır. String tipte karakter sınırlaması 255 karakterdir. Kapladığı alan ise tanımlanma şekline göre değişir.
String è 255 karakterlik bilgi alır ve hafızada 256 byte’ lık yer kaplar
String[n] è n karakterlik bilgi alır ve n+1 bytlık yer kaplar.
String tipteki bilgiler iki apostrof işareti arasına yazılırlar (‘ ‘). ‘ ‘ arasında yazılan bilginin uzunluğu en fazla 255 karakter olabilir. Ancak aynı satır üzerine 126 karakterlik bilgi bulunabilir. Bunun için, bilginin uzun olması durumunda + operatöründen yararlanılır. Bir String değişkenin uzunluğu, tanımlanacak alanın maksimum uzunluğuna göre belirlenir.
Karakter (CHAR) Tip :
Sadece bir karakterlik bilgi için kullanılır. Sayısal bir anlamı yoktur. Kapladığı alan bir byte’ dır.
Boolean Tip :
Sadece TRUE(doğru) veya FALSE(yanlış) değerini alan tiptir. Kapladığı alan bir byte’ dır.
Buraya kadar sabit veya değişken tanımlamak için gerekli olan veri tipleri ve makinede kapladıkları alan miktarlarını verdik. Şimdi bu tipler yardımıyla program içerisinde değişken ve sabitler tanımlayalım. (sabit tanımlamak için CONST ve değişken tanımlamak için VAR blok komutları kullanılır).
Const
Max : Integer =999;
Min : Integer = 0;
Enter : Char= #13;
Esc :Char = #27;
Var
Maas : LongInt;
Fatura_tut : Real;
Adres : String [50]
Telefon : String [12]
Tus : Char;
I : Byte;
J : Boolean;
Bu örnekler daha da çoğaltılabilir. Amaç, hafızada tutulacak bilgiye uygun veri tipini seçmektir. Örneğin; bir isim (Ad_Soyad) bilgisi için string değişken kullanılmalı ve uzunluğu belirtilmelidir. Bir maaş bilgisi için string değer kullanılamaz. Maaş için longint veya real tipleri kullanılabilir. Aynı şekilde, bir öğrencinin sınav notunu saklamak için Integer tipi kullanılabilir. Ancak kapladığı alan düşünülürse Byte tipinin kullanılması daha uygun olur. Çünkü bir not bilgisi 0-100 arasında dır. Bunun için LongInt tipinde değişken tanımlamaya gerek yoktur.
Dizi (ARRAY) Tip :
Aynı tipteki birden fazla bilginin tutulduğu değişken ve sabit isimlere dizi denir. Dizileri tanımlamak için ARRAY kullanılır.
Array[1..100] Of Real;
Array[1..10,1..5] of Byte;
Array[1..10,1..5,1..3] of string[20];
Dizi tanımlamaları ve örnek programlar için dizinler bölümüne bakın.
Record (Kayıt) Tip :
Alt alan olarak adlandırılan birden fazla ifadenin oluşturduğu yapıdır. Bu tip ile farklı tipte birden fazla alan isim altında tanımlanabilir. Record içerisinde tanımlanan her alanın bir ismi vardır ve bu isimler birbirinden farklı olmak zorundadır. Ancak, bu isimler ile aynı olan başka tanımlamalar bu tip dışında kullanılabilir. Record tipinde veriler TYPE bölümünde RECORD-END bloğu içerisinde tanımlanırlar.
Yazılımı :
KayıtTipAdı=RECORD
AlanAdı1: TipAdı;
AlanAdı2: TipAdı;
END;
Yazılımdan da görüldüğü gibi her RECORD bloğu içerisinde birden fazla alan tanımlanabilir. Her Record tip tanımı End deyimi ile son bulur. Record içerisindeki alan isimlerinin aynı tipte olmaları durumunda aralarına virgül (,) koymak şartı ile arka arkaya yazılabilirler.
Örnek :
Musteri =RECORD
Ad,Soyad : String[15];
Adres : String[40];
Telefon : String[12];
Borc : LongInt;
End;
Verilen tip ismi (Musteri) özel bir tip olarak kabul edilir. Bu tip adı, Real, Integer gibi bir tip durumunda ve değişkenleri tanımlamada kullanılır. Tanımlamada kullanılan değişken Record tipi içerisinde belirtilen bütün alt alanları temsil eder. Yukarıda tanımlanan Müsteri tipinde bir değişken tanımlamak için VAR değişken tanımlama bloğu kullanılır.
Var
Mus : Musteri ;
Bu tanımlama ile Musteri kayıt yapısı içerisinde yer alan alanların, icra bölümünde işleme alınması sağlanır. Bunun için Mus değişken isminden yararlanılır. Mus değişkenine bağlı olan alt alanları kullanmak için; bu değişken ismi ile alt alan ismi arasına nokta (.) konur. Mesela Ad ve Soyad alanlarına bilgi atamak için;
Mus.Ad:=’Zeynep’;
Mus.Soyad:=’AKGÖBEK’;
Şeklinde tanımlamalar yapılır. Record tipindeki veriler daha çok Rasgele Erişimli dosyalarda kullanılır. Dosyalara bilgi girişi ve dosyadan bilgi okuma işlemlerinde kayıt yapısını oluşturan her alanın tek tek yazılması yerine, bütün alanları kapsayan bir değişken isminin yazılması yeterli olacak ve kullanımda büyük bir kolaylık sağlayacaktır. Bir Record tanımı içerisinde daha önce tanımlanmış olan başka bir Record ismi, alt alana ait bir tip ismi olabilir.
Örnek ;
TYPE
ISIMKAY= RECORD
AD:STRING[15];
SOYAD:STRING[15];
END;
MUSTERIKAY= RECORD
ISIM : ISIMKAY;
ADRES : STRING[40];
SEHIR : STRING[15];
MESLEK : STRING[20];
END;
VAR
KAYIT : MUSTERIKAY;
INDEX : ISIMKAY;
{ : : : }
BEGIN
INDEX.AD:=’MEHMET’;
INDEX.SOYAD:=’GOBEK’;
KAYIT.ISIM:= INDEX;
KAYIT.MESLEK:=’MUHENDIS’;
KAYIT.ADRES:=’GOBEKLI KOYU’;
KAYIT.SEHIR:=’SANLIURFA’;
{ : : : }
END.
With Deyimi :
Yukarıdaki atama işlemlerinde görüldüğü gibi Record tipine sahip bir değişkenlerin program içerisindeki kullanımında değişken ismi ile alt alan ismi arasına nokta konduğu görülüyor. Her alt alan isminden önce değişken isminin yazılması hem programı uzatmakta hemde yazılması zaman almaktadır. Bunu engellemek için With deyimi kullanılır.
Örnek ;
BEGIN
WITH INDEX DO
BEGIN
AD:=’MEHMET’;
SOYAD:=’GOBEK’;
END;
WITH KAYIT DO
BEGIN
ISIM:=INDEX;
MESLEK :=’MUHENDIS’;
ADRES:=’GOBEKLI KOYU’;
SEHIR:=’SANLIURFA’;
{ : : : }
END.
Set (Küme) Tipleri :
Küme: Aynı tipte ve birbiriyle ilgili bilgilerin oluşturduğu bütündür. Kümedeki elemanların arasına virgül (,) konur. Eğer kümedeki elemanlar bir birini takip eden değerlerden oluşuyorsa bu değerler arasına iki nokta (..) konur. Aşağıda değişik küme örnekleri verilmiştir.
Örnek
[‘X’]
[‘A’..’Z’]
[0..9]
[‘E’,’H’,#27]
[1,2,3,4]
[1..4]
son iki örnekte verilen kümeler bir birine eşittir. Küme tipinde bir tip tanımlamak için TYPE bölümünden yararlanılır. Özel bir tip olan küme tipi verileri için SET OF ifadesi kullanılır.
Yazılımı ;
KumeAdi=TipAdi
Örnek ;
TYPE
Kodlar = set of [0..255];
Harf =set of [‘A’..’Z’];
Rakam = Set of [0..9];
Bir kümede bulunan eleman sayısı maksimum 256 olabilir. Bu elemanların numaraları ise 0 ile 255 arasındadır. Herhangi bir karşılaştırma işlemi sırasında kümedeki elemanların sıralanışı önemli değildir. Mesela ; [‘H’,’E’,’e’,’h’] ve [‘E’,’e’,’h’,’H’,] kümeleri bir birine eşittir. Kümeler üzerinde değişik işlemler yaparak başka kümeler elde edilebilir. Kümeler üzerinde kesişim, birleşim ve fark işlemleri yapılabileceği gibi mantıksal operatörler kullanarak değişik küme işlemleri yapılabilir. Bu işlemler için aşağıdaki operatörler kullanılır. Bu operatörlerleri öncelik sırasına göre verelim;
Kesişim operatörü : #
Birleşim operatörü : +
Fark operatörü : -
İlişkisel operatörler : =, <>,<=,>=, in
Kesişim : kümelerin ortak elemanlarını verir.
Birleşim : kümelerin bütün elemanlarını verir. Yeni kümede her elemandan sadece bir tane bulunabilir.
Fark : bir kümenin diğer kümede olmayan elemanlarını kapsar
Küme ifadeleri daha çok belli bir değerin başka değerlere eşit olup olmadığını veya bir değerin verilen bir aralıkta olup olmadığını kontrol etmede yaygın olarak kullanılır.
Örnek :
IF (T=’E’) or (T=’e’) or (T=’H’) or (T=’h’) Then …
Komutu ile T değişkeninin değeri E,e,H,h harflerinden birine karşılık gelip gelmediğini kontrol edilmektedir. Bu ifade yerine;
IF T in [‘E’,’e’,’h’,’H’] Then ….
Komutu kullanılabilir. Bu iki kullanım şekli aynı anlama gelmektedir.
Örnek :
IF (secim>=0) and (Secim <=5) then …..
Komutu ile Secim (Integer) değişkeninin değeri =’ dan büyük eşit ve 5 ten küçük eşit olması durumu tespit ediliyor. Bu komut yerine;
IF Secim In [0..5] then …
Komutu kullanılabilir.
Örnek ;
Uses Crt;
Var
Tus : Char ;
Begin
Repeat
Clrscr;
Writeln (‘ 1-ekranda listeleme ‘);
Writeln (‘ 2-yazicidan listeleme ‘);
Writeln (‘ 3,esc-CIKIS ‘);
Repeat
Tus:=Readkey;
Until tus IN [‘1’..’3’,#27];
Case Tus Of
‘1’ : ;
‘2’: ;
end
until Tus IN [‘3’,#27];
end.
IV-TANIMLAMA BLOKLARI :
Program içerisinde kullanılacak değişken, sabit, etiket ve tip tanımlamak için VAR, CONST, LABEL ve TYPE tanımlama blokları kullanılır. Şimdi tanımlama bloklarını sırasıyla görelim.
VAR (Değişken Tanımlama) :
Turbo Pascal’ da program içerisinde kullanılacak bütün değişkenlerin programın uygun yerlerinde tanımlanmaları gerekir. Değişken tanımlamak için VAR tanımlama bloğu kullanılır.
Yazılımı :
VAR
Değişken1[,değişken2…]: Tip ;
Genel yazılımdan görüleceği gibi, aynı tipte olan değişkenler aralarına (,) konarak yan yana yazılabilirler. Tip isminden önce (:) kullanılır.
Örnek :
Var
Name : string [25];
Not1,Not2,Not3 : Byte;
Maas, Borc, Alacak : LongInt;
Number : Word;
Ortalama : Real;
Harfler : Array [1..26]of Char;
Örnektede görüldüğü gibi; aynı tipte olan Not1, Not2 ve Not3 değişkenleri yan yana yazılabilir. Ancak bunlar aşağıdaki gibi ayrı ayrıda yazılabilir.
Var
Not1 : Byte;
Not2 : Byte;
Not3 : Byte;
Bir veya birden fazla değişken bir VAR bloğunda kullanılabileceği gibi bütün değişkenler bir VAR bloğunda toplanabilir.
Örnek ;
Var
Adres : String [50];
Telefon : String [10];
Var
Not1,Not2 : Byte ;
Sehir : String[20];
Kodno : Integer;
X,Y : Array [1..10,1..5] Of real;
Bu örneklerde değişkenler düzenli olarak yazılmışlardır. Ancak böyle bir sınırlama yoktur. Değişkenler aşağıdaki gibi rastgelede yazılabilirler.
Örnek :
Var
I,J : Integer;
A,B,C : ShortInt;
T : Real; Tus: Char; Kod : String[12];
Sifre : String[8];
Örneklerde, değişkenlerin ilk harfleri büyük yazılmıştır. Bunun programa hiçbir etkisi yoktur. İstenildiği gibi yazılabilir. Yani bütün harfler büyük küçük veya karışık olarak yazılabilir. Ancak A(büyük A) olarak tanımlanan değişken ile a (Küçük a) değişkeni aynıdır. Bir diğer özellik ise; aynı isimli birden fazla değişken tanımlanamaz.
Turbo Pascal’ da programın çalışmaya başlamasıyla değişken değerleri sıfırlanmaz. Bunun için sıfırlanması gereken değişkenler, program başında veya gerekli yerlerde sıfırlanmalıdır.
CONST (Sabit Tanımlama) :
Sabit tanımlamak için kullanılır. Bo bölümde ilk değere sahip değişkenler tanımlanabileceği gibi, program sonuna kadar değeri hiç değişmeyen sabit (değişken)’ lerde tanımlanabilir.
Yazılımı :
CONST
SabitAdı[:tip]=değer;
Buradaki [:tip] ifadesi kullanımının zorunlu olmadığını belirtiyor. Bu ifade kullanılmadığı zaman sabit adı olarak verilen değişkene aktarılan değer program içerisinde değiştirilemez. Kullanılması durumunda ise aktarılan değer bu değişken için “ilk değer” anlamını taşır ve program içerisinde değeri değiştirebilir.
Örnek :
Const
Max : Integer = 500;
Min : Integer = 100;
Artis : Real = 0.1;
Enter = #13;
Esc = #27;
Sifre : String[9]=’SANLIURFA’;
Mesaj = ‘ IYI CALISMALAR’;
Burada Enter, Esc ve Mesaj değişkenlerinin değeri program içerisinde değiştirlemez. Diğer değişkenlerin değerleri istenilirse değiştirilebilir. Yukarıdaki tanımlamada Max değişkeni 500, Min değişkeni 100, Artis değişkeni 0.1 ve sifre değişkeni SANLIURFA ilk değerlerini almaktadırlar. Bu değerler program içerisinde değiştirilebilir. Bu tanımlama bloğunda sabit veya ilk değer olarak dizilere değer aktarılabilir.
Örnek ;
Type
Dizi = Array [0..4] Of Byte;
Const
Sayilar : Dizi=(1,2,3,4,5);
Bu tanımlama ile sayılar isimli indisli değişkenin değerleri aşağıdaki gibi olur.
Sayılar[0] = 1
Sayılar[1] = 2
Sayılar[2] = 3
Sayılar[3] = 4
Sayılar[4] = 5
Örnek :
Const
Sayilar : Array [0..1,0..2] of = ((1,2,3),(4,5,6)) ;
Bu tanımlama ile
Sayılar[0,0] =1
Sayılar[0,1] =2
Sayılar[0,2] =3
Sayılar[1,0] =4
Sayılar[1,1] =5
Sayılar[1,2] =6 olur.
TYPE :
Kullanıcının kendi isteğine göre özel veri tanımlaması için kullanılır.
Yazılımı :
TYPE
TipAdı :Tip;
Burada kullanılan ‘ Tip’ Turbo Pascal’ daki herhangi bir tip olabileceğigibi, kullanıcının daha önce veya Uses komutandaki Unit(ler)’ in interface bölümünde tanımladığı bir tipte olabilir.
Örnek :
TYPE
Dizi = Array [0..100] of Integer;
St20= String[20];
Buradaki Dizi ve St20 birer tip isimleridir (Integer gibi). Bu isimler bir değişken olarak kullanılamazlar. Ancak tip adı olarak kullanılabilirler.
Örnek :
Var
Isim =St20; Sayilar =Dizi ;
Bu tanımlamalarda da görüldüğü gibi isim veya sayilar isimli değişkenler kullanıcının kendi tanımladığı tipler yardımıyla tanımlanmışlardır.
Örnek :
Type
Tamsayi =Integer;
Notlar = 0..100;
Sayi =-99..99;
BilgiTipi =Array[1..40] of String [30];
EkranTipi =Array[1..25,1..80,1..2] of byte;
Ekran =Array[1..4000] of char;
Burada tanımlanan “sayi” ve “notlar” isimli tipler başka hiçbir tipe ihtiyaç duyulmadan tanımlanan tiplerdir. Notlar tipi 0-100 aralığında ve Sayi tipi ise -99 ile 99 aralığında değerler alabilirler. “notlar” tipi bu haliyle 1 byte lık yer kaplar. Çünkü sınırları BYTE tipi sınırları içerisindedir. Eğer “notlar” tipi
Type
Notlar : -1..100;
Şeklined tanımlanırsa, bu durumda ShortInt sınırları arasında değer alır ve 1 byte’ lık yer kaplar. Şayet;
Type
Notlar = 0..5000;
Olarak tanımlanırsa, bu durumda Word tipi sınırlarına girer ve 2 byte’ lık yer kaplar.
Type
Notlar =-50000..100000;
Olarak tanımlandığı taktirde Longınt tipi sayı sınırına girer ve hafızada 4 byte’ lık yer kaplamış olur. Bu şekilde tanımlanan tipler aşağıda ki sınırlara göre hafızada yer kaplarlar.
LABEL :
Etiket tanımlamak için kullanılır. Etiketler program içerisinde GOTO komutu ile işlemin gideceği yeri belirtir.
Yazılımı :
LABEL
EtiketAdı1[,EtiketAdı2,….];
Yazılımdanda görüldüğü gibi birden fazla etiket adı yazılabilir. Bu durumda aralarına (,) işareti konulur. Etiket isimleri alfasayısal bilgi olabiliceği gibi, sayısal bilgise olabilir. Alfasayısal olması durumunda “tanıtıcı ismi” özelliklerine sahip olması gerekir. Sayısal olması halinde ise 0 ile 9999 aralığında olmalıdır.
Örnek ;
LABEL
Basla,Cikis,20,
Proc5,Hesaplama;
Goto Komutu kullanılarak program akışı bu etiketlerin olduğu bölümlere yönlendirilebilir (Goto komutu özelliklerine göre).
Label
1Basla,45000;
Bu iki etiket adı geçersizdir. “1basla” tanıtıcı ismine uygun değil (rakam ile başlamış), “45000” etiket adı ise 0-9999 sınırları dışında kalmaktadır.
V- OPERATÖRLER :
Turbo Pascal’ da operatörler şöyle sınıflandırılırlar;
Aritmetik Operatörler : aritmetik işlemlerin yapımlısını sağlayan operatörlerdir.
|
AÇIKLAMA |
GÖREVİ |
OPERAND TİPİ |
SONUÇ |
|
+ |
Toplama |
Integer Real |
Integer Real |
|
- |
Çıkarma |
Integer Real |
Integer Real |
|
* |
Çarpma |
Integer Real |
Integer Real |
|
/ |
Bölme |
Integer Real |
Integer Real |
|
Div |
Tamsayı bölme |
Integer |
Integer |
|
Mod |
Kalan |
Integer |
Integer |
+,-,*,/ operatörlerinde, işleme herhangi bir real sayı veya real tipte bir değişkenin girmesi durumunda işlem sonucunda real sonuç elde edilir. / operatöründe işlemin sonucu real’ dir. Yani sonuçta tamsayı değer veren bir işlem olması durumunda bile sonuç real’ dir. Mesela 6/2 işleminin sonucu 3.0 dır ve 3.0 real tipte bir bilgidir.
Örnek ; C değişkeninin Integer tipte bir değişken olduğunu kabul edersek aşağıdaki işlemleri inceleyiniz.
C:=3.5 yanlış. Integer tipteki C değişkenine real değer aktarılıyor.
C:= C+1.0 Yanlış. 1.0 real tipte bir bilgidir. Sonuç real’ dir. Integer tipteki C değişkenine aktarılamaz.
C:=C/2 Yanlış. Bölme (/) operatörünün sonucu realdir.
Div ve Mod Operatörleri : Div operatörü tam sayılı bölme işlemi için kullanılır. Sonucu Integer tipte bir bilgidir. Aşağıdaki işlemleri inceleyelim.
3 Div 15 = 0
15 Div 3 = 5
16 Div 3= 5
Mod operatörü, bölme işlemi sonucunda kalan değeri verir. Sonucu Integer tipte bir bilgidir. Aşağıdaki işlemleri inceleyelim;
3 Mod 4 = 3
4 Mod 4 = 0
10 Mod 3 = 1
Mod ve Div işlemleri operatörleri normal işlemleri içinde kullanılabilir. Bunu anlamak için aşağıdaki örneği inceleyelim.
5+3*2-6 Div 2
Mantıksal Operatörler : Logic (mantıksal) işlemlerin yapılmasını sağlayan operatörlerdir.
|
Operatör |
Görevi |
Operand tipi |
Sonuç |
|
Not |
Değil |
Boolean |
Boolean |
|
And |
Ve |
Boolean |
Boolean |
|
Or |
Veya |
Boolean |
Boolean |
|
Xor |
Veya değil |
Boolean |
Boolean |
Karşılaştırma Operatörleri : Karşılaştırma işlemlerinin yapılmasını sağlayan operatörlerdir. Bu operatörler aşağıda verilmiştir.
= : Eşit
<> : Farklı
< : Küçük
> : Büyük
<= : Küçük Eşit
>= : Büyük Eşit
Bir karşılaştırma işleminin sonucunun Boolean olduğu unutulmamalıdır.
Matematiksel Formüller : Normal olarak yazılan formüllerin, Pascal dili içerisinden yazılımında bazı kurallara uyulması gerekir. Matematiksel formüllerin yazılımında dikkat edilmesi gereken ilk nokta, aritmetik operatörlerin işlem önceliklerine göre doğru olarak kullanılmasıdır.
İşlem öncelikleri ;
Parantez içi
Üs alma
Çarpma-Bölme
Toplama-Çıkarma
TURBO PASCAL KOMUTLARI
GİRİŞ :
Bu bölüme kadar sadece tanımlamalar üzerinde duruldu. Buradan başlayarak Turbo Pascal’ da kullanılan komutları birer birer ele alıp inceleyeceğiz. Her komutla beraber bu komutun ait olduğu Unit ve Procedure veya Function’ mı, olduğu beraberinde verilecektir. Komutun yaptığı işlemden sonra, genel kullanım şekli verilecektir. Genel kullanım (Yazılımı) içerisinde bazı özel işretler kullanılacaktır. Bunlar ;
[ ] : İki köşeli parantez arasına yazılan bilginin zorunlu olmadığını belirtiyor. İstenilen durumda kullanılabilir. Kullanımı isteğe bağlıdır.
| : Veya anlamına gelir. İki veya daha fazla durumdan herhangi birinin kullanılabileceği anlamını taşır.
Verilen komutların görevlerini anladıktan sonra, ardından verilen örnek programları dikkatlice incelemeniz sonra bilgisayar ile uygulamasını yapmanız, çok yararlı olacaktır. Programcılığı öğrenmenin tek yolu çok sayıda program yazmak ve bunlar üzerinde sık sık değişiklikler yaparak, yapılan değişikliklerin program üzerindeki etkilerini öğrenmektir.
Bir problem çok farklı algoritmalarla çözülebilir. Programcı kendi düşünce şekline veya öğrendiği problem çözme yeteneğine göre çözüme farklı yollarla yaklaşabilir. Bu nedenle kitapta verilen programların normal çözüm şeklini anladıktan sonra, başka yollarla çözmeniz programcılığınız için çok yararlı olacaktır. Turbo Pascal’ da, program herhangi bir forma bağlı kalmadan istenildiği gibi yazılabilir. Yani istenilen kolonlardan başlanabilir. Komutlar alt alta gelebileceği gibi yan yana da gelebilirler. Bunun yanında bazı önemli kuralları da vardır. Her komuttan sonra noktalı virgül kullanılır. Blok başlatan komutların sonunda bulunmaz. İşlemler Begin-End blokları arasında yapılır. İç içe istenilen sayıda Begin-End bloğu kullanılabilir. Bunu bir örnek ile açıklayalım.
Verilen bir sayının 1’ e eşit olması durumunda 1’ den 100’ e kadar olan sayılarla beraber toplamını hesaplayıp sonucu ekrana yazan programı beraber yazalım.
|
Uses
CRT; Var
S,I,T
: Word; Begin ClrScr; Write(‘BIR SAYI GIRIN : ‘); Readln(S); If S=1 Then Begin T:=0; For I:= 1 TO 100 DO Begin T:=T+I; Write(I:8); End; Writeln(‘TOPLAM
= ’,T) ; End
; Readln; End. |
Burada verilen sayının bir olması durumunda THEN komutundan sonra verilen Begin-End bloğu içerisindeki bütün komutlar işlem görür. Şartın yanlış, yani S’ in birden farklı olması durumunda durumunda programın bulunan End komutundan sonraki komut veya komutlar işlem görür. Görüldüğü gibi begin-end blokları rastgele kullanılmıyor. Begin-end blokları, for-do, while-do, if-then-else, ve with-do komutları ile birden fazla işlem yapılması gerektiği durumlarda zorunlu olarak kullanılması gerekir. Şayet bu komutlarda şart veya döngü içerisinde işlem görecek komut sayısı tek ise begin-end bloğunun kullanılması zorunlu değildir. Bunun dışında Begin-End blokları kullanılmaz. Daha detaylı bilgi için ilgili komutlar incelenebilir.
Pascal’ da bir diğer önemli nokta ise, büyük küçük harf ayrımının olmamasıdır. Bunu aşağıda verilen iki örnek program yardımıyla görmek mümkündür. Her iki programın yaptıkları iş aynıdır.
Program ilkprogram;
Begin
Writeln(‘Turbo Pascal a hoşgeldiniz’);
End.
PROGRAM ILKPROGRAM ;
BEGIN
WRITELN (‘Turbo Pascal A HOŞGELDİNİZ’);
END.
Program içerisinde kullanılan tanıtıcılar ve Pascal kelimeleri büyük veya küçük harfle yazılabilirler. Hatta bir karakteri büyük diğerleri küçük (karışık olarak) yazılabilir.
Buradan başlayarak komutları ilk önce bölüm bölüm, daha sonra bütün komutları bulundukları unit’ lere göre anlatacağız. Her komuttan sonra verilen açıklama ve örnekleri tam olarak incelemeniz ve örnekleri karalama olarak da olsa birkaç defa çözmeniz konuyu anlamanız için yeterli olacaktır. Bir komutu tam olarak anlamadan diğer bir konuya geçmeyiniz. Verilen program parçalarının mantıksal olarak çalışma şeklini anladıktan sonra bu programları bilgisayarda uygulamanız ve üzerinde değişiklikler yaparak farklı programlar üretmeniz konuyu pekiştirmeniz açısından çok daha faydalı olacaktır.
GİRİŞ-ÇIKIŞ komutları :
Bilgisayarın belleğine bilgi göndermek ve/veya bilgileri tekrar kullanıcıya yansıtmak için kullanılan komutlardır.
WRITE-WRITELN :
Sabit, değişken veya işlem sonuçlarının bir dosya veya ekrana yazılmasını sağlar.
Yazılımı ;
Writeln(ifade)
Veya
Write(ifade)
Burada belirtilen ifade; sabit, değişken veya işlem olabilir.
Not: bu komut dosyalardada kullanılır. Bunun için dosyalarla ilgili “DOSYALAMA” bölümüne bakınız.
Bu komutun ilk yazılımında yazılan bilgilerden sonra yazma işlemi bir alt satırdan itibaren devam eder (kursör bir sonraki satıra geçer). İkinci yazılımda, komutun işlevi tamamlandıktan sonra bir sonraki Write veya Writeln komutunun yaptığı işlem aynı satırdan itibaren devam eder (kursör bir alt satıra geçmez). Yani WriteLn ile yazılar yazıldıktan sonra kursör bir sonraki satıra geçer. Write komutunda ise kursör bir alt satıra geçmez, aynı satır üzerinde en son yazılan bilgiden sonra bekler.
Yazılan sabit bilgi ve mesajlar apostrof (‘ ‘) işaretleri arasına yazılırlar. Buraya yazılan bilgi ve mesajlar doğrudan ekrana çıkarla. Birden fazla sabit bilgi, mesaj, değişken veya işlem olması durumunda aralarına virgül işareti konur. WriteLn komutu tek başına kullanıldığı zaman, yazma işlemine bir sonraki satırdan devam edilir. Yani kursör bir sonraki satıra geçer.
Begin
Writeln (‘Turbo Pascal öğreniyorum’);
ReadLn;
End.
Not : başlangıçta yapacağımız örneklerde program sonunda ReadLn komutunu kullanacağız. Bu komut yerine ileriki konularda daha pratik kullanım sağlayan ReadKey komutunun kullanıldığını göreceksiniz. ReadLn komutu Enter tuşuna basılmasını bekler. Yani programın bitiminde çalışma ekranından Pascal editörüne geçiş için Enter tuşuna basılmasını sağlar. Böylece nelerin ekrana yazıldığı kolayca görülür. Aksi halde editöre döndükten sonra oluşan son görüntüyü görmek için ‘ DEBUG’ menüsündeki “User Screen” seçeneğinin seçilmesi yada bu bölümün kolay tuşu olan ALT+F5 tuşlarına basılması gerekir.
Program içerisinde kullanılacak olan değişkenleri tanımlamak için Var bloğunun kullanıldığını ve atama işlemlerinde “:=” kullanıldığını hatırlatarak yeni bir program örneği yazalım.
Örnek :
Var
A,B : Integer ;
Begin
A:=40;
B:=30;
Writeln(‘A=’,A);
Writeln(‘B=’,B);
Writeln(‘A+B =’,A+B);
Writeln(‘A-B=’,A-B);
ReadLn ;
End.
Yukarıdaki programdan da görüldüğü gibi (‘ ’) apostrof arasına yazılan bilgiler olduğu gibi ekrana yazdırılır. Bu bilgiler açıklama amaçlı bilgilerdir. Ancak Apostrof işaretleri dışına yazılan bilgiler değişken isimlerdir ve bunların sahip oldukları değerler yazdırılır. Ayrıca işlemlerde yapılabilir.
Tam Sayılı İfadeler :
Tam sayılı ifadelerde formatlı yazım için aşağıdaki yazılım şekli kullanılır.
İfade : Uzunluk
Burada belirtilen uzunluk, sayısal ifadenin yazılacağı toplam hane sayısını belirtir. Verilen ifade bu alana sağ dayalı olarak yazılır. Sayısal ifadedeki hane sayısı uzunluk değerinden fazla ise fazla karakter sayısı kadar hane sağa doğru kayar .
Örnek
Uses CRT;
Begin
ClrScr;
Writeln(123456);
Writeln(1:6);
Writeln(12:6);
Writeln(123:6);
Writeln(1234:6);
Writeln(12345:6);
Writeln(123456:6);
End.
Çıkacak sonuç budur ;
123456
1
12
123
1234
12345
123456
Real İfadeler : Ondalıklı ifadelerde formatlı yazı için aşağıdaki yazılım şekli kullanılır.
İfade:Uzunluk:Ondalık
Burada belirtilen “uzunluk” sayısal ifadenin yazılacağı toplam hane sayısını, “ondalık” ise ondalıklı noktadan sonra yazılacak hane sayısını belirtir. Uzunluk değeri, tam sayı kısmı+ondalıklı nokta+ ondalıklı kısımdaki hane sayısına eşittir. İfade bu alana sağa dayalı olarak yazılır.
Uses Crt;
Var
X:Real;
Begin
Clrscr;
X:=469.2763456;
Writeln(x);
Writeln(x:10);
Writeln(x:10:6);
Writeln(x:10:5);
Writeln(x:10:4);
Writeln(x:10:3);
Writeln(x:10:2);
Writeln(x:10:1);
Writeln(x:10:0);
End.
Çıkış ;
4.6927634560E+02
4.693E+02
469.276346
469.27635
469.2763
469.276
469.28
469.3
469
READ-READLN (PROCEDURE):
Klavye vasıtasıyla bilgisayara bilgi göndermek için kullanılır. Gönderilen bilgiler tanımlanan değişkenlerde tutulurlar.
Yazılım :
Read ([f,]değişken listesi)
Veya
ReadLn ([f,]değişken listesi)
f : Bilginin okunacağı dosyayı temsil eden değişkendir.
Değişken listesi : Girilecek olan bilgi sayısı ve tipine göre, bilgilerin tutulacağı değişkenlerdir. Değişken sayısının birden fazla olması durumunda aralarına virgül (,) işareti konur.
Örnek ; Girilen iki sayının toplam ve çarpımını hesaplayan program.
|
var X,Y : Integer; Begin write('1. sayiyi girin :'); readln(x); write('2. sayiyi girin :'); readln(y); WriteLn('sayilarin toplami=',X+Y); WriteLn('sayilarin carpimi=',X*Y); readln; end. Sonuç ; Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International 1. sayiyi girin :15 2. sayiyi girin :35 sayilarin toplami=50 sayilarin carpimi=525 |
Örnek ; Girilen 3 adet not bilgisini alarak not ortalamasını hesaplayan program.
|
uses
crt; var n1,n2,n3
:byte; ort
: Real; Begin ClrScr; write('1.
not : ');readln(n1); write('2.
not : ');readln(n2); write('3.
not : ');readln(n3); ort:=(n1+n2+n3)/3; write('not
ortalamasi =',ort:6:2); readln; End. Çözüm
; 1.
not : 8 2.
not : 7 3.
not : 10 not
ortalamasi = 8.33 |
Açıklama : buraya kadar yazılan programlarda ekran temizleme komutu olan CLRSCR komutu hiç kullanılmadı. Programların daha düzenli olması için ‘CRT’ Unit’ ine ait olan CLRSCR komutunu bundan sonraki örneklerde kullanacağız. Bunun için program başında “USES CRT;” komutu kullanılacaktır. Detaylı bilgi için “ekran komutları bölümüne bakınız.
Örnek ;
|
uses
crt; var ad
: string[20]; fiat
: real; Kdv
: real; kdvfiat
: real ; begin clrscr; write
('urun adi : ') ; readln(ad); write
('fiyat : ') ; readln(fiat); write
('KDV orani : ') ; readln(kdv); kdvfiat:=fiat+((fiat/100)*kdv); write
('bu urunun kdv dahil fiyati : ',kdvfiat); readln; end. Çalışması
; urun
adi : halley fiyat :
100 KDV
orani : 12 bu urunun kdv dahil fiyati : 112.00 |
Programda kullanılan değişken ve işlemleri kısaca açıklayalım:
Var bölümünde, ürün adı alfabetik bilgi olduğundan Ad:String [20] tanımı ile 20 karakterlik string değişken olarak tanımlanmıştır. Ürünün fiyatı ve KDV’ li fiyatı için Fiat, Kdv ve Kdvfiat değişkenleri Real olarak tanımlanmıştır.
Örnek ; ABC Tavukçuluk işletmesi günlük yem, ilaç ve genel giderlerini (su,elektrik, 1 veteriner hekim ve 2 işçi) hesaplamak istemektedir. Giderler ve fiyatları aşağıda olduğu gibidir.
-Yem gideri tavuk başına 150 gram/gün yem fiyatı 20.000 tl/kg
-İlaç gideri tavuk başına 1000TL/gün
-elektrik tüketimi 50 kwatt/gün Elektrik fiyatı 500 tl/Kwatt
-Su tüketimi 5 ton/gün Su fiyatı 10.000 TL/Ton
-veteriner hekim ücreti 1.000.000 tl/gün ve ek olarak tavuk başına 1000 tl
-İşçi ücreti 750.000 TL/gün
girilen tavuk sayısına göre günlük toplam giderleri hesaplayan program
|
uses
crt; var tavuk,yem,
ilac, elektrik, su, veteriner, isci, toplam:
real; begin clrscr; write('Ciftlikte
kac tane tavuk var : ');
readln(tavuk); yem:=((20000/1000)*150)*tavuk; ilac:=1000*tavuk; elektrik:=50*500; su:=5*10000; veteriner:=(1000*tavuk)+1000000; isci:=750000; writeln('Gunluk
Yem Masrafi : ', yem:15:2); writeln('Gunluk
Ilac Masrafi : ', ilac:15:2); writeln('Gunluk
Elektrik Masrafi : ', elektrik:15:2); writeln('Gunluk
Su Masrafi : ', su:15:2); writeln('Gunluk
Veteriner Masrafi: ', veteriner:15:2); writeln('Gunluk
Isci Masrafi : ', isci:15:2); toplam:=yem+ilac+elektrik+su+veteriner+isci; writeln('toplam
gunluk masraf : ',toplam:15:2,'
TL'); readln; end. Çalışma
Şekli ; Ciftlikte
kac tane tavuk var : 134 Gunluk
Yem Masrafi :
402000.00 Gunluk
Ilac Masrafi :
134000.00 Gunluk
Elektrik Masrafi : 25000.00 Gunluk
Su Masrafi :
50000.00 Gunluk
Veteriner Masrafi : 1134000.00 Gunluk
Isci Masrafi :
750000.00 toplam gunluk masraf : 2495000.00 TL |
Örnek ;
Verilen bir isim bu seneyi ve doğum yılını girerek, isim ve yaş olarak ekrana görüntüleyen programı yazınız.
|
{bu
program seneyi girip sonra da dogum yilini, ekrana adinizi ve kac yasinizda
oldugunuzu bildiren program} uses
crt; var sene,
dogum, sonuc: integer; isim:
string[20]; begin clrscr; write('adiniz : ');readln(isim); write('yili
girin : ');readln(sene); write('dogum
yili : ');readln(dogum); sonuc:=sene-dogum; writeln(isim,'
',sonuc,' yasindadir'); readln; end. Çalışma
şekli ; adiniz : murat yili
girin : 2005 dogum
yili : 1982 murat
23 yasindadir |
KARŞILAŞTIRMA (KARAR VERME) KOMUTLARI :
Program akışını verilen şartlara göre değiştirmek için kullanılan komutlardır. Program içerisinde şartlara göre farklı farklı işlemler yapılması istenebilir. Hangi durumda hangi işlemlerin yapılıp yapılmayacağını, başka bir ifade ile hangi durumda hangi komutların işlem görüp görmeyeceğini kontrol altında tutmak için bu komutlar kullanılır. Turbo Pascal ‘ da karşılaştırma işlemlerini yapmak için IF-THEN-ELSE ve CASE-OF komutları kullanılır.
IF-THEN-ELSE :
Verilen şartların doğru veya yanlış olması durumunda istenen işlemleri yapmak ve buna göre program akışını değiştirmek için kullanılır.
Yazılımı :
IF Şart THEN komut veya komutlar [ELSE komut veya komutlar]
IF komutunda verilen şart doğru olursa THEN komutundan sonraki komut veya komutlar işlem görür. ELSE komutunun kullanımı seçimliliktir. Şayet şart yanlış olursa bu durumda; eğer ELSE kullanılmışsa ELSE’ den sonraki komut veya komutlar, ELSE kullanılmamışsa bir sonraki komut veya komutlara geçer. Şartın doğru veya yanlış olması durumunda işlem görecek olan komut sayısı eğer birden fazla ise bu durumda işlemler BEGIN-END blokları arasına yazılırlar. İç içe birden fazla blok kullanılabilir. ELSE komutundan önceki komutun sonunda “;” işareti kullanılmaz. Kullanılması durumunda “Errorin statement” derleme hatası oluşur.
IF A>B then A:=A-1 ELSE B:=B-1;
Yukarıdaki program satırında A’ nın Değeri B’ den büyük ise A:=A-1 ifadesi işlem görür ve bu ifade ile A’ nın değeri ! azaltılır. A’ nın değeri B’ den büyük değilse yani küçük veya eşit ise B:=B-1 ifadesi işlem görür ve bu ifade ile B’ nin değeri 1 azaltılır.
Şart olarak verilen ifade sayısı birden fazla olabilir. Bu durumda mantıksal operatörlerden faydalanılır. İfadeler bu operatörler aracılığı ile bir birine bağlanırlar. Bunun için “mantıksal operatörler” bölümüne bakınız.
İf (a>b) and (a>c) then Writeln (‘ A BUYUK’) ;
Yukarıdaki program satırı ile A’ nın değernini B ve C den daha büyük olması durumunda ekrana “A BÜYÜK” mesajı yazdırılıyor. Bu mesajın ekrana yazdırılması için A’ nın değerinin hem B’ den hem C’ den büyük olması gerekir. Aksi taktirde mesaj ekrana yazdırılmaz.
Örnek ;
Verilen bir sayının pozitif, sıfır veya negatif olduğunu bulan program.
|
(*bu
program girilen bir sayinin negatif, sifir yada pozitif oldugunu bulur* uses crt; var sayi:
real; sonuc
:string[15]; begin clrscr; write('bir
sayi girin :'); readln(sayi); if
sayi<0 then writeln('girdiginiz sayi negatif bir sayidir'); if
sayi=0 then writeln('girdiginiz sayi sifira esittir'); if
sayi>0 then writeln('girdiginiz sayi pozitiftir'); readln; end. |
|
Çalışma
şekli ; bir
sayi girin :15 girdiginiz sayi pozitiftir |
İç içe birden fazla if komutu kullanılabilir. Daha doğrusu Then veya Else’ den sonra yazılan “komut veya komutlar” içerisinde bir veya birden fazla if komutu kullanılabilir. İç içe IF-THEN-ELSE komutu kullanılması durumunda ilk olarak karşılaşılan ELSE seçimlilik komutu kendisinden önceki bloğu başlatan If komutuna aittir.
Yukarıda verilen programı IF-THEN-ELSE komut yapısını kullanarak yazalım.
|
(*girilen
sayinin negatif pozitif yada sifira esit oldugunu if-then-else komut yapisini
kullanarakyapan program*) Uses
crt; var sayi
: integer; begin clrscr; write('sayi
giriniz : '); readln(sayi); if
sayi<0 then write('girdigin sayi negatif bir sayidir') else if sayi=0 then write('girdigin sayi
sifira esittir') else if sayi>0 then write('girdigin
sayi pozitif bir sayidir'); readln; end. |
|
sayi
giriniz : 15 girdigin
sayi pozitif bir sayidir |
Örnektede görüldüğü gibi üç if komutu yerine sadece iki if komutu kullanılmıştır. Her bir Else komutu kendisinden önceki If komutunun yanlış değer üretmesi durumunda işlem görecektir.
Örnek ;
|
(*bir
ogrencinin bir dersten aldigi 3 adet not bilgisi giriliyor. not ortalamasini hesaplayarak
"kaldi" veya "gecti" seklinde mesaj veren program*) uses
crt; var nt1,
nt2, nt3, ortalama : real; begin clrscr; write('birinci
sinav notu : '); readln(nt1); write('ikinci
sinav notu : '); readln(nt2); write('ucuncu
sinav notu : '); readln(nt3); ortalama:=(nt1+nt2+nt3)/3; write(ortalama:10:2); if
ortalama<45 then write(' KALDI ') ELSE write(' GECTI'); READLN; END. |
|
birinci
sinav notu : 60 ikinci
sinav notu : 76 ucuncu
sinav notu : 83 73.00 GECTI |
Örnek ;
|
(*BIR
MAGAZA MUSTERELERINE YAPTIKLARI ALISVERIS TUTARINA GORE INDIRIM YAPMAKTADIR. 2.000 YTL' YE KADAR OLAN ALISVERISLER ICIN
%10 2.000-4.000 YTL ARASI ALISVERISLER ICIN %15 4.000 YTL' DEN DAHA FAZLA OLAN ALISVERISLER
ICIN %20 BUNA
GORE ALISVERIS TUTARI VERILEN BIR KISININ ODEYECEGI NET MIKTARI HESAPLAYAN
PROGRAM*) USES crt; VAR
{atayacagimiz degerler} tutar : real; {alisveris tutari degeri} indirim : real; {indirim yuzdesi} nethesap
: real; {musterinin odemesi gereken ucret} begin
{program baslangici} clrscr; write('ALISVERIS
TUTARI NE KADAR :
');READLN(tutar); {alisveris tutarini
girdigimiz satir} if
tutar<2000 then indirim:=10 else if (tutar>2000) and (tutar<4000)
then indirim:=15 else if tutar>4000 then indirim:=20; {burada
indirimin hangi aralikta oldugunu buldugumuz satirlardir} nethesap:=tutar-((tutar/100)*indirim);
{musterinin odemesi gereken miktari hesaplayan
satir} writeln('size
%',indirim:0:2,' uygulanmistir'); writeln('hesabiniz : ', tutar:10:2); writeln('odemeniz
gereken : ', nethesap:10:2); {ekrana
dokumlerin verildigi satirlar} readln; end. |
|
Sonuç
; ALISVERIS
TUTARI NE KADAR : 1250 size
%10.00 uygulanmistir hesabiniz :
1250.00 odemeniz
gereken : 1125.00 ALISVERIS
TUTARI NE KADAR : 2500 size
%15.00 uygulanmistir hesabiniz :
2500.00 odemeniz
gereken : 2125.00 ALISVERIS
TUTARI NE KADAR : 4500 size
%20.00 uygulanmistir hesabiniz :
4500.00 odemeniz
gereken : 3600.00 |
Örnek;
|
(*bir
kisiye ait cinsiyet, boy ve kilo bilgilerini alarak asagidaki sartlara
gore; kisinin ideal kiloda olup olmadigini, kac kilo almasi veya kac
kilo vermesi gerektigini bulan program ideal kilo : bayanlarda ; boy-110 erkekler
; boy-108 *) uses
crt; var kilo,
boy, fark, ideal : integer; cinsiyet : Char; begin repeat clrscr; write('cinsiyet erkek(e) bayan (b) : ');readln(cinsiyet); until cinsiyet in ['B','b','E','e']; write('Kilo :
');readln(kilo); write('Boy :
');readln(boy); if
(cinsiyet='b') or (cinsiyet='B') then ideal:=boy-110 else
ideal:=boy-108; if
ideal<kilo then
writeln(kilo-ideal,' kilo vermelisiniz') else if ideal>kilo then writeln(ideal-kilo,'
kilo almalisiniz') else writeln('Bravo ideal
kilodasiniz'); readln; end. |
|
cinsiyet erkek(e) bayan (b) : e Kilo : 77 Boy : 174 11
kilo vermelisiniz cinsiyet erkek(e) bayan (b) : b Kilo : 68 Boy : 163 15
kilo vermelisiniz |
Bu programda ilk olarak cinsiyet bilgisinin girilmesi istenir. Bu bilginin B,b,E,e harflerinden biri olması şartı aranır. Girilecek diğer harfler kabul edilmez. Bu işlem için aşağıda ki bölüm kullanılmıştır.
repeat
clrscr;
write('cinsiyet erkek(e) bayan (b) : ');readln(cinsiyet);
until cinsiyet in ['B','b','E','e'];
daha sonra kilo ve boy bilgilerinin girilmesi istenir. Bu bilgiler ışığında kişinin ideal kilosu hesaplanır.
Örnek ;
|
{girilen
10 adet sayidan pozitif sayilarin ortalamasini negatif sayilarin sayisini 100 ila 200 arasindaki sayilarin toplamini
veren program} uses
crt; var pst,
pso,pss, nss, yuz, rakam: real; i:
byte; begin clrscr; pss:=0
; nss:=0 ;yuz:=0; pst:=0; for
i:=1 to 10 do begin write(i,
'. sayiyi girin :
');readln(rakam); if
rakam <0 then nss:=nss+1; if
rakam >0 then begin pss:=pss+1; pst:=pst+rakam; end; if
(rakam >100) and (rakam<200) then yuz:=yuz+rakam; end; clrscr; clrscr; writeln
('pozitif sayilarin ortalamasi : ',
pst/pss:10:2); writeln
('negatif sayilarin sayisi : ',
nss:10:0); writeln
('100-200 Arasi Toplam : ',
yuz:10:2); readln; end. |
|
1.
sayiyi girin : -14 2.
sayiyi girin : 456 3.
sayiyi girin : 134 4.
sayiyi girin : 168 5.
sayiyi girin : 65 6.
sayiyi girin : 34 7.
sayiyi girin : 978 8.
sayiyi girin : 345 9.
sayiyi girin : 532 10.
sayiyi girin : 678 pozitif
sayilarin ortalamasi : 376.67 negatif
sayilarin sayisi : 1 100-200
Arasi Toplam : 302.00 |
CASE-OF
Verilen ifadenin aldığı değere göre program akışını değiştirmek veya istenen işlemleri yapmak için kullanılır. Başka bir ifade ile verilen ifadenin karşılık geldiği sabit değerlere göre istenen işlemleri yapmak için kullanılır.
Yazılımı :
CASE ifade OF
Sabit 1: Komut veya Komutlar
Sabit 2: Komut veya Komutlar
….
….
….
Sabit N: Komut veya Komutlar
[ELSE Komut veya Komutlar]
END.
CASE komutundan sonra yazılan ifadenin tipi tam sayı, char veya Boolean olabilir. Verilen ifade, sabit değerlerden ilk olarak hangisine uyarsa, sabit değer karşısındaki komut veya komutlar işlem görür. İki sabit ifadeye karşılık gelmesi durumunda ilk sabit değerin karşısındaki komutlar işlem görür. ELSE komutu, verilen ifadenin hiçbir sabit değere karşılık gelmemesi durumunda işlem görür. Kullanımı zorunlu değildir. Her CASE komutu bir END komutu ile son bulur.
Örnek ;
CASE Y OF {y Integer}
1
: WriteLn(‘adana’);
2
:
WriteLn(‘adiyaman’);
3
:
WriteLn(‘afyon’);
4 : WriteLn(‘ağrı’);
END;
Bu program parçası ile Y değişkeninin değeri;
1 ise ekrana ADANA
2 ise ekrana ADIYAMAN
3 ise ekrana AFYON ve
4 ise ekrana AĞRI
mesajları yazdırılıyor.
Y değişkeninin 1,2,3 ve 4’ den farklı bir değer alması durumunda END komutundan sonraki komuta geçer.
Örnek ;
|
{Girilecek
iki sayi ve yapilacak islem turunu belirleyen operator bilgilerini alarak,
bu opratorlere gore işlem sonucu hesaplayip ekrana yazdiran program program
bu operatorlerden baskasinin girilmesi durumunda "yanliz operator" mesaji
verilecektir} uses
crt; var n1, n2
: LongINt; sonuc : Real; oper : Char; Dogru : Boolean; Begin Clrscr; Dogru:=true; write('1.
sayiyi girin : '); readln(n1); write('2.
sayiyi girin : '); readln(n2); write('islemi
secin(+,-,/,*) : '); readln(oper); case
oper of '+' : sonuc:=n1+n2; '-' : sonuc:=n1-n2; '/' : sonuc:=n1/n2; Else
dogru:=false; end; if not
dogru then writeln('yanlis operator') else
writeln(n1,oper,n2,'=',sonuc:0:2); readln; end. |
|
1.
sayiyi girin : 12 2.
sayiyi girin : 34 islemi
secin(+,-,/,*) : / 12/34=0.35 |
DÖNGÜ KOMUTLAR :
İstenen işlemin istenilen sayıda veya istenilen şart sağlanıncaya kadar belirtilen işlemlerin yapılmasını sağlayan komutlardır.
FOR-DO :
Belirtilen işlem veya işlemleri istenilen sayıda tekrarlamak veya istenen iki aralıkta değerler elde etmek için kullanılır.
Yazılımı :
FOR değişken := Başlangıç değeri TO|DOWNTO Bitiş Değeri DO
FOR komutundan sonra mutlaka bir tam sayı, Boolean veya char tipinde değişken kullanılmalıdır. Başlangıç ve bitiş değerleri sabit olabileceği gibi değişkende olabilir. TO kullanılması durumunda küçükten büyüğe doğru, DOWNTO kullanılması durumunda ise büyükten küçüğe doğru değerler elde edilir. BASIC dilinde artış miktarını belirtmek için kullanılan STEP ifadesinin yerine geçen bir ifade bulunmamaktadır. Bu durumda, yani istenen aralıkta istenen artış miktarına göre değerler elde etmek için Repeat-Until veya While-Do komutları ile bu komutlar arasında kullanılacak sayaçlardan yararlanılır. Döngünün başlangıç ve bitiş değerlerinin belli ve artış miktarının 1 veya -1 olması durumunda FOR-DO döngüsünün kullanılması tavsiye edilir.
Eğer döngü içerisinde birden fazla komut işlem görecek ise, komutlar Begin… END bloğu arasında yazılmalıdır. Tek komut kullanılması durumunda Begin…END bloğu kullanılmayabilir. Do ifadesinden sonra noktalı virgül (;) kullanılması durumunda döngü boş olarak dönmüş olur. Yani sonraki gelen komut veya bloğa döngü bittikten sonra işlem geçer.
FOR I:=1 to 10 DO; WriteLn (‘ Turbo Pascal’) ;
Bu program parçasında DO ifadesinden sonra (;) kullanılmıştır. Dolayısıyla döngü 10 defa boş olarak dönecek ve daha sonra WriteLn komutu bir defaya mahsus olmak üzere işlem görecektir.
|
{ekrana
bes defa BESIKTAS yazdiran program kaydirarak} uses
crt; var I
: integer; k
: byte; begin clrscr; k:=10; for
i:=1 to 5 do begin k:=k+1; writeln('BESIKTAS':K) END; READLN; END. |
|
BESIKTAS BESIKTAS BESIKTAS BESIKTAS BESIKTAS |
|
{1' den 100' e kadar olan sayilari yan yana ekrana yazan program} uses crt; var i: integer; begin clrscr; for i:=1 to 100 do write(i:4); readln; end. |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
|
{500
den 300 e kadar butun sayilari ekrana yanyana yazdiran program} uses
crt; var i:
integer; begin clrscr; for
i:=500 downto 300 do write(i:4); readln; end. |
|
500
499 498 497 496 495 494 493 492 491 490 489 488 487 486 485 484 483 482 481 480
479 478 477 476 475 474 473 472 471 470 469 468 467 466 465 464 463 462 461 460
459 458 457 456 455 454 453 452 451 450 449 448 447 446 445 444 443 442 441 440
439 438 437 436 435 434 433 432 431 430 429 428 427 426 425 424 423 422 421 420
419 418 417 416 415 414 413 412 411 410 409 408 407 406 405 404 403 402 401 400
399 398 397 396 395 394 393 392 391 390 389 388 387 386 385 384 383 382 381 380
379 378 377 376 375 374 373 372 371 370 369 368 367 366 365 364 363 362 361 360
359 358 357 356 355 354 353 352 351 350 349 348 347 346 345 344 343 342 341 340
339 338 337 336 335 334 333 332 331 330 329 328 327 326 325 324 323 322 321 320
319 318 317 316 315 314 313 312 311 310 309 308 307 306 305 304 303 302 301 300 |
|
{KULLANILAN
BUTUN ASCII KARAKTERLERININ LISTESINI VEREN PROGRAM} USES
CRT; VAR I:CHAR; BEGIN CLRSCR; FOR
I:=#0 TO #255 DO WRITE(I:4); READLN; END. |
|
[1]
"
# $ %
& ' (
) * +
, - .
/ 0 1
2 3 4
5 6
7 8 9
: ; <
= > ?
@ A B
C D E
F G H
I J
K L M
N O P
Q R S
T U V
W X Y
Z [ \
] ^
_ ` a
b c d
e f g
h i j
k l m
n o p
q r
s t u
v w x
y z {
| } ~
Ç ü
é â ä
à å
ç ê ë
è ï î
ı Ä Å
É æ Æ
ô ö ò
û ù İ
Ö Ü
ø £ Ø
Ş ş á
í ó ú
ñ Ñ Ğ
ğ ¿ ®
¬ ½ ¼
¡ «
» _ _
_ ¦ ¦
Á Â À
© ¦ ¦
+ + ¢
¥ + +
- -
+ - +
ã Ã +
+ - -
¦ - +
¤ _ _
Ê Ë È
Í
Î Ï +
+ _ _
¦ Ì _
Ó ß Ô
Ò õ Õ
µ ×
Ú Û
Ù ì ÿ
¯ ´
± ¾
¶ § ÷
¸ ° ¨
· ¹ ³
² _ |
REPEAT-UNTIL :
İstenen şart veya şartlar sağlanıncaya kadar istenen işlemlerin tekrarlanması için kullanılır.
Yazılımı :
Repeat
:
Komut veya komutlar
:
Until Şart
Program akışı döngüsü içerisine girdiği anda, Until komutunda belirtilen şart sağlanıncaya kadar iki komut arasındaki işlemler sürekli olarak tekrarlanır. Repeat-Until bloğu içerisinde bir veya daha fazla komut yazılabilir. Birden fazla komut kullanılması durumunda Repeat komutundan sonra Begin-END bloğu kullanmaya gerek yoktur.
Örnek ;
|
uses
crt; var i
: byte; begin clrscr; i:=
0; repeat i:=i+1; writeln('SANLIURFA':i); until
i=5; readln; end. |
|
SANLIURFA SANLIURFA SANLIURFA SANLIURFA SANLIURFA |
Bu programda ilk önce I değişkenine 0 değeri aktarıldı. Döngü içerisinde I:=I+1 ifadesi ile değişkeninin değeri her defasında bir arttırıldı ve ekrana ŞANLIURFA mesajı yazdırıldı. Bu işlem UNTIL komutundaki I=5 şartı sağlanıncaya kadar devam eder. Sonuçta ekrana alt alta 5 adet ŞANLIURFA mesajı yazdırılır. 5 sayısı arttırılarak istenen sayıda mesaj yazdırılabilir ekrana.
Örnek ;
|
{0
dan baslayarak 100' e kadar cift sayilari ekrana yazdiran program} uses
crt; var i :integer; begin clrscr; i:=0; repeat write
(i:4); i:=i+2; until
i=100; readln; end. |
|
0 2
4 6 8
10 12 14
16 18 20 22 24
26 28 30
32 34 36
38 40 42
44 46 48
50 52 54
56 58 60
62 64 66
68 70 72
74 76 78 80 82
84 86 88
90 92 94
96 98 |
Örnek ;
|
{1
den 100 e kadar olan sayilarin toplamini hesaplayan program} uses
crt; var i,t
: integer; begin clrscr; i:=0; t:=0; repeat i:=i+1; t:=t+i; write(i:4); until
i=100; writeln('toplam',t); readln; end. |
|
1
2 3 4
5 6 7
8 9 10
11 12 13
14 15 16
17 18 19
20 21
22 23 24
25 26 27
28 29 30
31 32 33
34 35 36
37 38 39
40 41
42 43 44
45 46 47
48 49 50
51 52 53
54 55 56
57 58 59
60 61
62 63 64
65 66 67
68 69 70
71 72 73
74 75 76
77 78 79
80 81
82 83 84
85 86 87
88 89 90
91 92 93
94 95 96
97 98 99 100 toplam5050 |
Örnek ;
|
{
bir isletmede calisan elemanlara normal ucretlerine ek olarak urettikleri parca
sayisina gore ek ucret verilmektedir. parca basina ucret asagidaki sartlara
gore verilmektedir. parca sayisi ( 0-10) arasi icin
parca basina 5 ytl parca sayisi (10-30) arasi icin
parca basina 8 ytl parca sayisi 30 ve yukarisi icin parca basina 12 ytl buna
gore normal maasi ve urettigi parca sayisi bilgilerini alarak elemanin
alacagi toplam maasi hesaplayan program} uses
crt; var maas,
ekmaas, parca, parbas: longint; begin clrscr; repeat clrscr; writeln('programdan
cikmak icin sifir girin'); write('normal
maasi ne kadar : ');readln(maas); if
maas=0 then exit; write('kac
parca mal uretti :
');readln(parca); if
parca<10 then parbas:=5; if
(parca>=10) and (parca<30) then parbas:=8; if
(parca>=30) then parca:=12; write('Toplam
Maas :
');writeln(maas+(parbas*parca)); readln; until
false; end. |
|
programdan
cikmak icin sifir girin normal
maasi ne kadar : 12345 kac
parca mal uretti : 43 Toplam
Maas : 12441 |
WHILE-DO :
Belirtilen şart olduğu sürece istenen işlemlerin tekrarlanmasını sağlar.
Yazılım :
While şart Do
:
Komut veya komutlar
:
yazılımda belirtilen ‘ komut veya komutlar birden fazla ise bu durumda Begin-END bloğu kullanılır.
Bu komutta şart döngü başında test edilir. Eğer şart yanlış olursa, program akışı döngü içerisine girmez ve bir sonraki blok veya komuttan itibaren program çalışmaya devam eder. While-do komutunda şart döngü başında, Repeat-until komutunda ise şart döngü sonunda test edilir. Başlangıçta şart yanlış ise program akışı While-do döngüsüne girmez. Repeat-until komutunda ise, şart ister yanlış ister doğru olsun döngüye mutlaka girilir ve işlem en az bir kere yapılır.
|
{VERILEN
IKI SAYIYI BOLME OPERATORU KULLANMADAN BIRBIRINE BOLEREK, BOLUM VE
KALAN DEGERLERINI HESAPLAYAN PROGRAMI YAZINIZ (/,mod,div) OPERATORLERI KULLANILMAYACAK} USES
CRT; VAR SAYI1,
SAYI2, BOLUM : LONGINT; BEGIN clrscr; bolum:=0; write('birinci
sayiyi girin : ');readln(sayi1); write('ikinci
sayiyi girin : ');readln(sayi2); while
sayi1>=sayi2 do begin bolum:=bolum+1; sayi1:=sayi1-sayi2; end; writeln('BOLUM : ',bolum:10); writeln('KALAN : ',sayi1:10); readln; END. |
|
birinci sayiyi girin : 109 ikinci sayiyi girin : 4 BOLUM : 27 KALAN : 1 |
CONTINUE :
FOR, While veya Repeat döngüsünün bir sonraki adıma geçmesini sağlar.
BREAK :
FOR, While veya Repeat döngülerinden çıkışı sağlar. İşlem akışı döngünün dışına çıkar.
EKRAN KOMUTLARI
Ekrandaki görüntü tasarımı için kullanılan komutlardır. Turbo Pascal’ da komutların yaptıkları işlemlere göre belli unit’ ler içerisinde toplandığı daha önce belirtilmişti. Ekran, tuş kontrolü ve ses komutları ise CRT Unit’ i içerisinde toplanmışlardır. Burada CRT Unit’ ine ait bütün komutlar anlatılacaktır. Bu komutların kullanılması durumunda, program başında kullanılan ve istenen Unit’ lerin aktif hale gelmesini sağlayan USES komutunda, CRT Unit isminin yazılması gerekir. Aksi taktirde böyle bir komut bilinmiyor “unknown identifier”(geçersiz tanıtıcı) derleme hatası oluşur.
CLRSCR (PROCEDURE) :
Ekranı temizlemek için kullanılır. Eğer ekranda bir Window tanımlanmış ise bu durumda tanımlı olan Window’ un içerisini temizler. Komut sonunda kursör ekran veya pencerenin 1.sütun ve 1.satırına gider.
Yazılımı :
CLRSCR;
Bu komut CRT Unit’ ine ait bir komut olduğu için program başında mutlaka USES CRT komutunun kullanılması gereklidir. Aksi taktirde derleyici bu komutu tanımaz ve “unknown identifier” hatasının oluşmasına sebep olur.
GOTOXY (PROCEDURE) :
Kursörü ekranın istenen sütun ve satırına taşımak için kullanılır. Eğer tanımlı bir Window var ise bu Window’ un istenen sütun ve satırına Kursörü taşır. Normal ekran üzerinde sütun değeri 1-80 ve satır değeri ise 1-25 arasında olmalıdır. Ekrandaki satır ve sütun sayısını ayarlamak için TextMode komutu kullanılır.
Örnek;
|
Uses
crt; Begin ClrScr; Gotoxy(30,5), Write(‘Turbo
Pascal’); ReadLn; END. |
Bu program ekranın 30.sütun 5. satırına Turbo Pascal mesajını yazdırır.
|
USES
CRT; VAR S
: BYTE; BEGIN CLRSCR; FOR
S:=1 TO 10 DO BEGIN GOTOXY(S,S);WRITELN('TURBO
PASCAL'); END; READLN; END. |
|
TURBO
PASCAL TURBO PASCAL TURBO PASCAL TURBO PASCAL TURBO PASCAL TURBO PASCAL TURBO PASCAL TURBO PASCAL TURBO PASCAL TURBO PASCAL |
ÖRNEK ;
|
{EKRANA
"PASCAL" MESAJLARI ILE X SEKLINDE YAZI YAZAN PROGRAMI YAZINIZ} USES CRT; VAR ALT: BYTE; BEGIN CLRSCR; FOR ALT:=1 TO 24 DO BEGIN GOTOXY(20+ALT,ALT);WRITE('PASCAL');
END; FOR ALT:=1 TO 24 DO BEGIN GOTOXY(45-ALT,ALT);WRITE('PASCAL');
END; READLN; END. |
|
PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAPASCAL PASPASCAL PPASCAL PASCALL PASCALCAL PASCALASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL PASCAL |
İlk döngüde (20+alt, alt) koordinatına Pascal mesajı yazdırılıyor. ALT değişkeninin değeri 1 den başlayarak 24’ e kadar sırayla birer birer arttığından aşağı ve sağa doğru kayan bir yazı yazdırılıyor. İkinci döngüde ise ALT değişkeninin değeri 1 den 24’ e kadar artmakta, ancak bilgi (45-ALT,ALT)koordinatına yazdırıldığından aşağı ve sola doğru kayan bir yazı yazdırılmaktadır. Sonuçta X şeklinde bir şekil oluşmaktadır.
|
{ekrana
carpim tablosunu veren program} uses
crt; var sayi1,sayi2,sonuc :longint; sat,sut,sutun :byte; begin clrscr; sutun:=1; for
sut:=1 to 5 do begin for
sat:=1 to 10 do begin if
sut>1 then sutun:=(sut-1)*16; gotoxy(sutun,sat);write(sut:2,'
x ',sat:2,' = ',sut*sat:3); end; end; GOTOXY(25,13);writeln('========CARPIM
TABLOSU========'); sutun:=1; for
sut:=1 to 5 do Begin for
sat:=1 to 10 do begin if
sut>1 then sutun:=(sut-1)*16; gotoxy(sutun,sat+14);write(sut+5:2,'
x ', sat:2,' = ',(sut+5)*sat:3); end; end; writeln(''); readln; end. |
|
1 x 1
= 1
2 x 1 = 2
3 x 1 = 3
4 x 1 = 4
5 x 1 = 5 1 x 2
= 2
2 x 2 = 4
3 x 2 = 6
4 x 2 = 8
5 x 2 = 10 1 x 3
= 3
2 x 3 = 6
3 x 3 = 9
4 x 3 = 12
5 x 3 = 15 1 x 4
= 4
2 x 4 = 8
3 x 4 = 12
4 x 4 = 16
5 x 4 = 20 1 x 5
= 5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25 1 x 6
= 6
2 x 6 = 12
3 x 6 = 18
4 x 6 = 24
5 x 6 = 30 1 x 7
= 7
2 x 7 = 14
3 x 7 = 21
4 x 7 = 28
5 x 7 = 35 1 x 8
= 8
2 x 8 = 16
3 x 8 = 24
4 x 8 = 32
5 x 8 = 40 1 x 9
= 9
2 x 9 = 18
3 x 9 = 27
4 x 9 = 36
5 x 9 = 45 1 x 10 =
10 2 x 10 = 20
3 x 10 = 30 4 x 10 =
40 5 x 10 = 50 ========CARPIM
TABLOSU======== 6 x 1
= 6
7 x 1 = 7
8 x 1 = 8
9 x 1 = 9
10 x 1 = 10 6 x 2
= 12
7 x 2 = 14
8 x 2 = 16
9 x 2 = 18
10 x 2 = 20 6 x 3
= 18
7 x 3 = 21
8 x 3 = 24
9 x 3 = 27
10 x 3 = 30 6 x 4
= 24
7 x 4 = 28
8 x 4 = 32
9 x 4 = 36
10 x 4 = 40 6 x 5
= 30
7 x 5 = 35
8 x 5 = 40
9 x 5 = 45
10 x 5 = 50 6 x 6
= 36
7 x 6 = 42
8 x 6 = 48
9 x 6 = 54
10 x 6 = 60 6 x 7
= 42
7 x 7 = 49
8 x 7 = 56
9 x 7 = 63
10 x 7 = 70 6 x 8
= 48
7 x 8 = 56
8 x 8 = 64
9 x 8 = 72
10 x 8 = 80 6 x 9
= 54
7 x 9 = 63
8 x 9 = 72
9 x 9 = 81
10 x 9 = 90 6 x 10 =
60 7 x 10 = 70
8 x 10 = 80 9 x 10 =
90 10 x 10 = 100 |
READKEY :
Klavyeden bir tuşa basılmasını sağlar. Bu fonksiyonun sonucu Char tipinde bir bilgidir.
Örnek :
|
uses
crt; var tus
: char; begin clrscr; writeln('Turbo Pascal'); repeat tus:=readkey; writeln(tus,' `a bastiniz'); until tus=#122; end. |
|
Turbo
Pascal h
`a bastiniz m
`a bastiniz u
`a bastiniz t
`a bastiniz s
`a bastiniz g
`a bastiniz a
`a bastiniz t
`a bastiniz w
`a bastiniz y
`a bastiniz q
`a bastiniz u
`a bastiniz (z
ye bastığınızda programdan çıkacaktır) |
KEYPRESSED (Function) :
Klavyeden bir tuşa basılıncaya kadar istenen işlemleri yapmak veya bir tuşa basılıp basılmadığını kontrol etmek için kullanılır. Sonucu Boolean olan bir Function dır.
Örnek ;
|
{bu
program bir tusa basilincaya kadar surekli olarak ekrana `Turbo pascal` yazisi
yazilir. bu tus alt, ctrl, shift gibi tuslar olamaz} uses
crt; begin clrscr; repeat write('Turbo
Pascal'); until
keypressed; end. |
TEXTCOLOR (Procudere) :
Ekrana yazılacak yazının rengini ayarlamak için kullanılır.
Renk No 0 ile 31 arasında tam bir sayı olmalıdır. 0 ile 15 arasındaki renkler normal renkleri ve 16 ile 31 arasındaki renkler ise bu renklerin yanıp sönen (flaşlı) şekillerinin elde edilmesini sağlar. Yani 1 nolu renk mavi, 17 nolu renk ise yanıp sönen mavi rengi temsil eder.
|
program
yanipsonenkelimeler; uses
crt; BEGIN repeat textcolor(18);writeln('erkanyilmaz');readln; until
keypressed; END. |
Renk Değişkeni Renk
No
Black 0
Blue 1
Gren 2
Cyan 3
Red 4
Magenta 5
Brown 6
Lightgray 7
Darkgray 8
Lightblue 9
Lightgreen 10
Lightcyan 11
Lightred 12
Lightmagenta 13
Yellow 14
White 15
Renk no yerlerine yukarıda belirtilen Renk adları da kullanılabilir. Yani mavi renginin renk numarası 1, bunun yerine Blue sabit ismi de kullanılabilir. Yani TextColor(1) ile TextColor(Blue) aynı rengi ifade ederler.
TEXTBACKGROUND :
Ekrana yazılacak olan yazının zemin rengini ayarlamak için kullanılır. Renk No 0-15 arasında olabilir. Ancak 0-7 arasındaki renk numaraları ile 8-15 renk numaraları aynı renklere karşılık gelir. Yani ; 0 nolu zemin rengi ile 8 nolu zemin rengi aynı rengi temsil eder.
DELAY :
Programın belirtilen süre kadar beklemesini sağlar.
Yazılımı :
DELAY(Süre)
Süre milisaniye olarak alınır. Yani süre 5000 olarak verildiğinde program 5 saniye bekler.
DELLINE :
Kursörün üzerinde bulunduğu satırı silmek için kullanılır. Alttaki satırlar bir satır yukarı çıkar.
Örnek ;
|
uses
crt; var i : byte; BEGIN clrscr; gotoxy(1,25);writeln('Turbo
Pascal'); gotoxy(1,1); for
i:=1 to 23 do begin delline; delay(500); end; readln; END. |
Bu programda, ilk önce ekranın 25. satırına “Turbo Pascal” mesajı yazdırılıyor. Daha sonra kursör ekranın (1,1) pozisyonuna taşınıyor ve 23 defa DelLine komutu kullanılarak yazının aşağıdan yukarıya doğru hareketi sağlanıyor.
INSLINE (Procedure) :
Kursörün üzerinde bulunduğu satırdan itibaren ekranı bir satır aşağı kaydırarak boş bir satır açılmasını sağlar.
Örnek ;
|
uses
crt; var i : byte; BEGIN clrscr; gotoxy(1,1);writeln('Turbo
Pascal'); gotoxy(1,1); for
i:=1 to 23 do begin insline; delay(500); end; readln; END. |
Bu program da ise, ilk önce ekranın 1. satırına “Turbo Pascal” mesajı yazdırılıyor. Daha sonra kursör ekranın (1,1) pozisyonuna taşınıyor ve 23 defa InsLine komutu kullanılarak yazının yukarıdan aşağı doğru hareket etmesi sağlanıyor.
HIGHVIDEO (PROCEDURE) :
Ekrana yazılacak yazının parlak olarak yazılmasını sağlar.
LOWVIDEO (PROCEDURE) :
Ekrana yazılacak yazının parlak olarak yazılmasını sağlar.
NORMVIDEO (PROCEDURE) :
Ekrana yazılacak yazının normal parlaklıkta yazılmasını sağlar.
Örnek ;
|
uses
crt; begin highvideo;writeln('TURBO
PASCAL'); normvideo;writeln('TURBO
PASCAL'); lowvideo;
writeln('TURBO PASCAL'); highvideo;textcolor(4);writeln('TURBO
PASCAL'); normvideo;textcolor(4);writeln('TURBO
PASCAL'); lowvideo;
textcolor(4);writeln('TURBO PASCAL'); readln; end. |
CLREOL (Procedure) :
Kursörün bulunduğu noktadan başlayarak satır sonuna kadar olan kısmı siler (Clear END OF Line).
WHEREX (Functioın) :
Kursörün üzerinde bulunduğu sütun numarasını verir. Bir fonksiyondur ve sonuçta byte tipinde bir değer üretir.
WHEREY (Function) :
Kursörün üzerinde bulunduğu satır numarasını verir. Wherex gibi sonuçta byte tipinde değer veren bir fonksiyondur.
Örnek ;
|
{//Turbo
Pascal Yazisini ekranda kaydirirken en son sutun numarasinida // //gosteren program.
(gotoxy),(cursoroff),(for),(wherex),(clreol) // //komutlarinin kullanilmasina ornekler
verilmistir... //} uses
crt; var i,
kursor : byte; begin clrscr; for
i:=80 downto 12 do begin cursoroff; gotoxy(1,13);write('Turbo
Pascal':i);kursor:=wherex; gotoxy(20,20);write('Kursor
Su Anda ',kursor,'. nolu sutunda'); gotoxy(i+1,13);clreol; delay(100); end; readln; end. |
|
Turbo Pascal Kursor Su Anda 25. nolu sutunda |
SOUND (Procedure) :
Verilen frekansta ses elde etmek için kullanılır.
Kullanım şekli : Sound(Frekans)
Üretilen sesin kesilmesi için NoSound komutunun kullanılması gerekir. Sesin süresi ise Delay komutu ile ayarlanır.
|
{//
Damlayan su sesi // // Kullanilan ornekler
(sound),(nosound),(delay),(inc) // // inc:
// // kullanimi inc(i,artacak miktar); // // belirtilen degiskenin miktarini virgulden
sonraki // // kadar degistirir... //} uses crt; var I: integer ; begin repeat i:=200; repeat sound(i); delay(12); inc(i,80); gotoxy(10,10);write(i); until i>450; nosound; delay(1000); until
keypressed; end. |
CURSORON (Procedure) :
Kursoru açık hale getirir…
Yazılımı :
CursorOn;
CURSOROFF (Procedure) :
Kursörü gizler. Ekranda Kursörü göremeyiz.
Yazılımı :
CursorOff;
CURSORBIG (Procedure) :
Kursörü büyük bir dikdörtgen haline getirir. Kursörü tekrar eski haline getirmek için CursorOn komutu kullanılır.
Yazılımı :
CursorBig;
Çalışma Soruları :
Cevaplar :
1.
|
{//
Verilen bir mesaji ekrana tum renklerle yazdiran program//} uses
crt; var mesaj
: string[80]; i : byte; begin clrscr; cursorbig; gotoxy(20,13);write('mesajinizi
girin :');readln(mesaj); clrscr; for
i:=1 to 15 do begin gotoxy(1,i);textcolor(i);write(mesaj); end; cursoroff; readln; cursoron; end. |
2.
|
var i:
byte; begin clrscr; cursoroff; for
i:=1 to 80 do begin gotoxy(i,12);write('_'); end; repeat for
i:=1 to 71 do begin gotoxy(i,12);textcolor(2);write('_ENDUSTRI_'); delay(150); end; for
i:=71 downto 1 do begin gotoxy(i,12);textcolor(4);write('_ENDUSTRI_'); delay(150); end; until
keypressed; readln; cursoron; end. |
GİRİŞ :
Bir Pascal programı; ana program ve alt programlardan oluşur. Pascal’ da Procedure ve Function olmak üzere iki farklı alt program çeşidi vardır. Alt programların kullanım amacı; programın yapısal olmasını sağlamak ve birbiriyle ilgili komutları veya programın bir bölümünü istenen isim altında toplamaktır. Bu şekilde programın okunması kolaylaşmakta ve yapısal bir görünüm kazanmaktadır.
Programların hazırlanması sırasında aynı işlemi yapan program parçalarına programın bir çok noktasında ihtiyaç duyulabilir. Alt program kullanılmadığı zaman bu program parçasının ihtiyaç duyulan bütün kesimlere yazılması gerekir. (on adet çerçeve çizmek için, on adet çerçeve program kesiminin yazılması gibi). Bu işlem programların okunmasını zorlaştırır ve kaynak programın uzamasına neden olur. Bunun için aynı işlemi yapan ve bir çok yerinde ihtiyaç duyulan program kesimleri alt program olarak hazırlanırlar. Böylece aynı program parçasından sadece bir tane hazırlamak yeterli olacaktır. İstenen bölümlere, alt program ismi ve varsa uygun parametrelerle ulaşılabilecektir.
Herhangi bir alt program çağrıldığı zaman bu alt programda bulunan bütün komutlar işlem görür. Alt programda işlem görecek komutların bitmesi veya bir çıkış komutu (exit) ana programa veya bu alt programın çağrıldığı bölüme tekrar dönüşü sağlanır. Alt programdan çıktıktan sonra işlem, alt programı çağıran komuttan sonraki komuta geçer. İç içe birden fazla alt program kullanılabilir. Bu durumda içteki alt programa ancak bir üstteki alt program içerisinden geçilebilir. Turbo Pascal’ ın kullandığı bütün komut ve fonksiyonların bu şekilde hazırlandığını düşünebiliriz. Bu şekilde programcı kendine özgü işlemlerini kolaylaştırıcı yeni komutlar hazırlayabilir.
Bir alt programın genel yapısı aşağıdaki gibidir;
Alt program_Başlığı(isim)
Yerel tanımlamalar
BEGIN
:
icra komutları
:
END;
Ana programda olduğu gibi her alt program; isim(Başlık), tanımlama ve icra bölümlerinden oluşur. Tanımlama bölümünde gerekli tip(Type), sabit(Const), değişken(Var) ve etiket (Label ) tanımlamaları yapılabilir. İcra bölümü ise BEGIN-END bloğu arasına yazılan komutların oluşturduğu bölümdür. Uygulanması istenen bütün komutlar Begin-END içerisine yazılırlar.
PROCEDURE ALTPROGRAMLARI :
Procedure alt programları bir komut gibi çalışırlar. Genel yapısı aşağıdaki gibidir;
PROCEDURE ProcedureAdı(Parametre Listesi));[FORWARD;]
Tanımlamalar
BEGIN
:
icra görecek komutlar topluluğu
:
END;
Genel yazılımdan da görüldüğü gibi PROCEDURE kelimesinden sonra “ProcedureAdı” nın kullanılması yeterlidir. İsteğe bağlı olarak parametreler tanımlanabilir. Genel olarak procedure’ ler çağrıldıkları yerin üst tarafında olmak zorundadırlar. Ancak FORWARD kelimesi yardımıyla Procedure çağrıldığı yerin alt tarafına da yazılabilir. “ProcedureAdı” tanıtıcı ismi özelliklerine sahip olmalıdır. Başka bir değişken ismi ile aynı olamaz. Procedure içerisinde yapılan bütün tip, değişken, sabit ve etiket tanımlamaları sadece ilgili Procedure ve varsa bunun içerisinde yer alan diğer alt programlar içerisinde geçerlidir. Bir Procedure içerisinde başka alt programlarda hazırlanabilir. Bu alt programlara içinde bulunduğu alt program içerisinden erişim sağlanabilir. Yani bir Procedure içerisinde kullanılan bir başka alt programa başka altprogramlardan veya ana program kesiminden erişim sağlanamaz.
Örnek ;
|
{//
Ekransil isimli bir procedure'un hazirlanmasi ve sil komutuyla // tum ekranin temizlenmesi} uses crt; procedure EkranSil; Begin clrscr; end; {//ana program Kesimi} Begin cursoron; Ekransil; Writeln('Ekranin Su Anda Temizlenmis Olmasi
Lazim'); readln; end. |
Bu programda EkranSil isimli bir Procedure hazırlandı. Bu Procedure programın her yerinden ekransil ismi(komutu) ile çağrılabilir. Artık kullanıcının CLRSCR komutunu kullanmasına gerek kalmamaktadır. Program ilk olarak ana program kesiminden itibaren çalışmaya başlar. Ekransil komutunu gördüğü anda bu procedure’ e gider ve ekranı temizler ve geri dönüp bir sonraki komuttan itibaren çalışmaya devam eder.
Genel olarak bir Procedure içerisinde tanımlanan değişkenin, sabit, tip ve etiket’ ler sadece bu Procedure ve varsa bu Procedure içerisinde kullanılan diğer alt Procedure ve fonksiyonlar içerisinde geçerli olurlar. Programın diğer kesimlerinden tanınmaz ve kullanılamazlar.
Örnek ;
|
program
dairenin_alanını_program ; uses
crt, mustafa; procedure
dairenin_alani; var dalan001,
yaricap : real; begin write ('yaricapi girin : ');readln(yaricap); dalan001:=(yaricap*yaricap)*pi; writeln('Dairenin
Alani : ',dalan001:10:2); repeat until
keypressed; end; BEGIN ekransil; dairenin_alani; END. |
PROCEDURE’ LERDE
PARAMETRE KULLANIMI :
Hazırlanan alt programlar hep aynı işlemleri aynı değerlerle yapmayabilirler. Mesela, ekranın farklı yerlerinden bilgi girişi sağlanabilir. Veya ekranın istenen koordinatlarına çerçeve çizmek, farklı koordinatlarda, değişken alan sayısına sahip menu görüntülemek ve bu menu üzerinde oklar yardımıyla seçim yapmak gerekebilir. Yani alt program içerisinde kullanılan değerler değişken olabilir. Bu durumda bu değişken değerlerin alt programa gönderilmeleri gerekebilir. Yani alt program içerisinde kullanılan değerler değişken olabilir. Bu durumda bu değişken değerlerin alt programa gönderilmeleri gerekir. Bunun için parametreler kullanılır.
Procedure içerisine değer göndermek ve/veya Procedure içerisinde hesaplanan bir değeri dışarı göndermek için parametre kullanılır. Parametre tanımlamasını aşağıdaki gibi gösterebiliriz.
PROCEDURE ProcedureAdı([Var]deg1,deg2…….: tip[;……]);
Bu tanımlamada [ ] içerisine yazılan ifadeler zorunlu değil anlamındadır. Değişkenlerin değer alma ve değer gönderme işlemleri iki farklı şekilde gerçekleşir. Sadece değer alan değişkenler tek taraflı, hem değer alan hem de değer gönderen değişkenler ise çift taraflı olarak çalışan değişkenlerdir.
Değişken isminden önce VAR tanımlama komutunun kullanılması durumunda belirtilen değişkenler çift taraflı olarak çalışırlar. Yani Procedure içerisinde hem değer alır, hem de Procedure’ den çıkışta dışarıya değer gönderir. Bir VAR komutunun etkisi kendisinden sonra gelen ilk (;) noktalı virgül işaretine kadar. Çift taraflı olarak çalışan değişkenlere karşılık mutlaka değişken kullanılmalıdır. Çünkü Procedure içerisinde değişkenin alacağı son değer dışarı gönderilecek ve bilgi ise ancak bir değişkene aktarılabilir.
FUNCTION ALTPROGRAMLARI
Pascal’ da kullanılan komutlara benzer komutlar hazırlamak için Procedure ve yardımcı komut dediğimiz fonksiyonlar hazırlamak için ise Function alt programlarından yararlanılır. Function’ lar tek başlarına kullanılamazlar ancak bir yardımcı komut gibi başka komutlar yardımıyla kullanabilirler. Buna Pascal’ da kullanılan TRUNC, ROUND, LENGHT… fonksiyonları örnek olarak verilebilir. Programcı içerisinde istediği gibi fonksiyonlar hazırlayabilir. Function’ ların genel yazılımı aşağıdaki gibidir.
FUNCTION Func.Adı[(parametre listesi)]: Tip;
Dikkat edilirse her Function için func.adi ile belirtilen bir isim ve isteğe bağlı olarak procedure’ lerde olduğu gibi parametre listesi verilebilir. Farklı olarak her function’ ın bir tipi olmalıdır. Function içerisinde hesaplanan veya sabit olarak verilen bilgi Func.Adı’ na aktarılarak function’ ın değer alması sağlanır.
Parametre kullanımı Procedure’ lerde olduğu gibidir. Tip, function’ dan çıkan bilginin tipini belirtmek için kullanılır.
Örnek;
|
{//Function
komutu için örnek kaynak kodu//} uses
crt; var a
: integer; function
artir(X:Longint): longint; begin artir:=x+1; end; begin clrscr; a:=0; repeat a:=artir(A); writeln('A=
',A); until
a=5; readln; end. |
|
A=
1 A=
2 A=
3 A=
4 A= 5 |
STANDART PROCEDURE VE FUNCTIOUN’ LAR
STRING PROCEDURE
VE FUNCTION’ LAR:
ABS (Function) :
Verilen her türlü sayisal ifadeyi, pozitif hale getirir.
Örnek ;
|
{(ABS)
function örneği} var r : integer; s : real
; begin r:=abs(-23); s:=abs(-17.9); writeln(r:5); writeln(s:4:2); readln; end. |
|
23 17.90 |
LENGHT (Function) :
Verilen string ifadedeki karakter sayısını verir. Sonucu byte tipinde bir fonksiyondur.
Yazılımı :
LENGHT(String)
Örnek ;
|
{ //verilen
bir mesajın kaç karakterden oluştuğunu bulan program// } uses
crt; var mesaj :
string; mesajuzunluk:
byte; begin clrscr; write('MESAJINIZI
GİRİNİZ : ');READLN(MESAJ); mesajuzunluk:=LENGth(MESAJ); write('Mesajınızın
uzunluğu ',mesajuzunluk,' karakterdir'); readln; end. |
|
MESAJINIZI
GiRiNiZ : sean dillon Mesajınızın
uzunluğu 11 karakterdir |
COPY (FUNCTION) :
Verilen string ifadenin belirtilen pozisyonundan itibaren istenilen sayıda karakter almak için kullanılır. Sonucu string tipte bir fonksiyondur.
Yazılımı :
Copy(string, başlangıç pozisyonu, karakter sayısı)
Örnek :
|
{//verilen
SAKARYA kelimesini ekrana aşağıdaki gibi yazdıran program S SA SAK SAKA SAKAR SAKARY SAKARYA //} USES
CRT; VAR MESAJ:
STRING; I:BYTE; BEGIN CLRSCR; MESAJ:='SAKARYA'; FOR
I:=1 TO 7 DO WRITELN(COPY(MESAJ,1,I)); READLN; END. |
|
S SA SAK SAKA SAKAR SAKARY SAKARYA |
INSERT (Procedure) :
Bir string ifade içerisine başka bir karakter grubu eklemek için kullanılır.
Yazılımı :
INSERT( String ifade, String Değişken, Pozisyon);
Burada ilk parametre hem sabit hem değişken olabilir. İkinci parametre ise mutlaka değişken olmalıdır. Pozisyon, kaçıncı karakterden itibaren yerleştirme işleminin yapılacağını belirtir.
Örnek :
|
Var S: string; Begin S:=’PAMUK GÜZELDİR’; Insert(‘KALE’,s,6); WriteLn(S); ReadLn; END. |
|
PAMUKKALE GÜZELDİR |
Burada S değişkeninin 6.karakterinden itibaren ‘KALE’ mesajı yerleşir. Bu komut sonunda S değişkeninin yeni değeri ‘PAMUKKALE GÜZELDİR’ olur.
DELETE (Procedure) :
Bir string değişken içerisinden, belirtilen pozisyondan itibaren istenilen sayıda karakteri silmek için kullanılır.
Yazılımı :
DELETE(String değişken,Pozisyon, Karakter sayısı);
POS (FUNCTION):
Bir string ifade içerisinde başka bir string ifadenin bulunduğu pozisyonu verir. Sonucu byte tipinde bir bilgidir.
Yazılımı :
POS(st1,st2);
St1 ile belirtilen string ifadenin st2 string ifadesi içerisinde kaçıncı pozisyonda olduğunu verir. Eğer st1, st2 içerisinde yoksa sonuç 0 olur.
|
{//GİRİLEN
BİR CÜMLEDE KELİME ARAMAK İÇİN KULLANILIR//} USES
CRT; VAR A,B
:STRING; BEGIN CLRSCR; WRITELN('MESAJINIZI
GIRIN : ');READLN(A); WRITELN('ARADIGINIZ
NEDIR : ');READLN(B); WRITELN(POS(B,A)); READLN; END. |
|
MESAJINIZI
GIRIN : sean
dillon ARADIGINIZ
NEDIR : dil 6 |
ÖRNEK 2;
|
{(POS)
function örneği bu örnekte girilen bir cumle/kelime grubu içinde aradığımız
parçayı renkli olarak gösteren program örneği. Eğer bulamazsa bulunamadı diye
hata veriyor} uses crt; var aranacak,kelime : string[80]; pozisyon,uzunluk, satir : byte; begin clrscr; write('Kelimeyi Girin : ');readln(kelime); write('Aranacak Kelime : ');readln(aranacak); pozisyon :=(pos(aranacak,kelime)); uzunluk
:=length(aranacak); satir
:=wherey; writeln(kelime); if pozisyon>0 then begin CURSOROFF;
gotoxy(pozisyon,satir);textcolor(4);write(aranacak); end; if pozisyon=0 then begin write('ARADIĞINIZ KELİME
BULUNAMAMIŞTIR'); END; READLN; CURSORON; end. |
|
Kelimeyi
Girin : ali bakkala ekmek
almaya git Aranacak
Kelime : ekmek ali
bakkala ekmek almaya git |
|
Kelimeyi
Girin : ali bakkala ekmek
almaya git Aranacak
Kelime : ekmk ali
bakkala ekmek almaya git ARADIĞINIZ
KELİME BULUNAMAMIŞTIR |
UPCASE (FUNCTION) :
Verilen küçük harfi büyük harfe çevirir.
Yazılımı :
UPCASE(karakter)
Karakter Char tipinde bir ifade olabilir. Sonuçta Char tipinde bir bilgi üretir.
Eğer girilen bilgi string tipte bir bilgi ise bilgiyi tamamen büyük harfe çevirir.
LOWERCASE (Function) :
Verilen harfleri küçük harfe çevirir.
Yazılımı :
Lowercase(Karakter);
Karakter Char veya string bir ifade olmak zorundadır. Çıkış yine Char veya string türünde bir ifadedir.
Örnek;
|
{lowercase
ve upcase functionları için örnek... } uses crt; var adres
: string[80]; begin write('ADRES : ');readln(adres); writeln(upcase(adres)); writeln(lowercase(adres)); readln; END. |
|
ADRES : Ferah MAHallesi Irmak SokaK No:
35 KızılCAHAMAM AnKARA FERAH
MAHALLESI IRMAK SOKAK NO: 35 KıZıLCAHAMAM ANKARA ferah
mahallesi irmak sokak no: 35 kızılcahamam ankara |
CHR (Function) :
ASCII kodu verilen karakteri verir. ASCII kod numaraları 0-255 arasında olmalıdır. Bu fonksiyon sonunda Char tipinde bir bilgi elde edilir.
Örnek ;
|
uses
crt; var I:
byte; begin clrscr; for
i:=0 to 255 do write(i:6,'
',chr(i)); readln; end. |
|
14
24 25 26 27 28 29 30 ‑ 31
32 33 ! 34 "
35 # 36 $ 37
% 38 & 39 '
40 ( 41 ) 42 *
43 + 44 ,
45 - 46 . 47 /
48 0 49 1 50 2
51 3 52 4 53 5 54 6
55 7 56 8 57 9
58 : 59 ; 60 <
61 = 62 > 63 ? 64 @
65 A 66 B 67 C
68 D 69 E 70 F
71 G 72 H 73 I 74 J
75 K 76 L 77 M
78 N 79 O 80 P
81 Q 82 R 83 S 84 T
85 U 86 V 87 W
88 X 89 Y 90 Z
91 [ 92 \ 93 ] 94 ^
95 _ 96 ` 97 a
98 b 99 c 100 d
101 e 102 f 103 g 104
h 105 i 106 j
107 k 108 l 109 m
110 n 111 o 112 p
113 q 114
r 115 s 116 t
117 u 118 v 119 w
120 x 121 y 122 z
123 { 124
| 125 } 126 ~
127 128 Ç 129 ü
130 é 131 â 132 ä
133 à 134
å 135 ç 136 ê
137 ë 138 è 139 ï
140 î 141 ı 142 Ä
143 Å 144
É 145 æ 146 Æ
147 ô 148 ö 149 ò
150 û 151 ù 152 İ 153 Ö 154
Ü 155 ø 156 £
157 Ø 158 Ş 159 ş 160 á
161 í 162 ó 163 ú 164
ñ 165 Ñ 166 Ğ 167 ğ 168 ¿
169 ® 170 ¬ 171 ½
172 ¼ 173 ¡ 174
« 175 » 176 _
177 _ 178 _ 179 ¦
180 ¦ 181 Á 182 Â
183 À 184
© 185 ¦ 186 ¦
187 + 188 + 189 ¢
190 ¥ 191 + 192 +
193 - 194
- 195 + 196 -
197 + 198 ã 199 Ã
200 + 201 +
202 - 203 - 204
¦ 205 - 206 +
207 ¤ 208 _ 209 _
210 Ê 211 Ë 212 È
213 214
Í 215 Î 216 Ï
217 + 218 + 219 _
220 _ 221 ¦ 222 Ì
223 _ 224
Ó 225 ß 226 Ô
227 Ò 228 õ 229 Õ
230 µ 231 232 ×
233 Ú 234
Û 235 Ù 236 ì
237 ÿ 238 ¯ 239 ´
240 241 ± 242 243 ¾ 244
¶ 245 § 246 ÷
247 ¸ 248 ° 249 ¨
250 · 251 ¹ 252 ³
253 ² 254
_ 255
|
Bazı önemli tuşlar ve kod
numaraları :
7 è beep 0+67 è F9 TUŞU
8 è BACKSPACE 0+68 è F10 TUŞU
9 è TAB
13 è ENTER 0+71 è HOME
27 è ESC 0+72 è YUKARI OK TUŞU
32 è SPACE BAR 0+73 è PAGE UP
0+59 è F1 TUŞU 0+75 è SOL OK TUŞU
0+60 è F2 TUŞU 0+77 è SAĞ OK TUŞU
0+61 è F3 TUŞU 0+79 è END
0+62 è F4 TUŞU 0+80 è AŞAĞI OK TUŞU
0+63 è F5 TUŞU 0+81 è PAGE DOWN
0+64 è F6 TUŞU 0+82 è INSERT(INS)
0+65 è F7 TUŞU 0+83 è DELETE(DEL)
0+66 è F8 TUŞU 0
STR (PROCEDURE) :
Verilen bir sayısal ifadeyi string ifadeye çevirir.
Yazılımı :
STR(Sayısal ifade, String Değişken)
RANDOMIZE (PROCEDURE) :
Random fonksiyonu tarafından farklı sayıların üretilmesini sağlar.
Yazılımı :
RANDOMIZE;
RANDOM (Function) :
Rastgele sayı üretmek için kullanılır. Sonuçta tamsayı değer üretir. Üretilen sayı 0 ile belirtilen sayı aralığında bir tam sayı değerdir.
Aşağıdaki sayi tahmin oyunu programını inceleyin;
|
{//SAYI
TAHMIN OYUNU... OYUN ICINDE KAZANDIGINIZ PUANI, TAHMİN ETTİĞİNİZ RAKAMLAR// //İÇİNDE AŞAĞI YUKARI DİYEREK YARDIMCI OLAN
SAYI TAHMIN OYUNU //} USES
CRT, MUSTAFA; VAR puan,sayi,ekpuan,
seninsayi,deneme : LongInt; AD1001
: string[20]; SECENEK
: CHAR; begin tanitim; randomize; puan:=0; deneme:=0; clrscr;cursorbig;clrscr; writeln('BU
OYUNDA AMAC BILGISAYARIN TAHMIN ETTIGI SAYIYI BULMAKTIR '); writeln('1
ILE 5 DENEMESI ARASINDA BULURSANIZ =
100 PUAN '); writeln('5
ILE 10 DENEMESI ARASINDA BULURSANIZ =
50 PUAN '); writeln('10
DAN DAHA FAZLA DENEMEDE BULURSANIZ =
25 PUAN '); writeln('KAZANIRSINIZ')
; writeln('OYUNA
DEVAM ETMEK ICIN 1`E CIKMAK ICIN 2` TUSUNA BASINIZ'); repeat secenek:=readkey; if
secenek=#50 then break; until
secenek=#49; IF
secenek=#49 then BEGIN ekransil; textcolor(19);Writeln('OYUN
BASLIYOR'); delay(1000); write('ADINIZ : ');READLN(AD1001); ad1001:=upcase(ad1001); write('OYUNA
HOS GELDIN ',AD1001,' BASARILAR'); DELAY(1500); ekransil; repeat deneme:=0;ekransil;sayi:=random(100); gotoxy(59,1);writeln('²²²²²²²²²²²²²²²²²²²'); gotoxy(59,2);writeln('²PUANINIZ : ',PUAN:5,'²'); gotoxy(59,3);writeln('²²²²²²²²²²²²²²²²²²²'); repeat deneme:=deneme+1; write('SAYIYI
TAHMIN EDINIZ : ');READLN(SENINSAYI); if
seninsayi>sayi then begin kirmizi; writeln('SAYIYI
BULMAK ICIN ASAGI INMEN LAZIM ',AD1001); end; if
seninsayi<sayi then begin yesil; writeln('SAYIYI
BULMAK ICIN YUKARI CIKMAN LAZIM ',AD1001); end; beyaz; until sayi=seninsayi ; writeln(deneme,'
denemede bildiniz'); if
deneme<=5 then ekpuan:=100; if
(deneme>5) and (deneme<10)then ekpuan:=50; if
deneme>=10 then ekpuan:=25; PUAN:=PUAN+EKPUAN; writeln(ad1001,'
',ekpuan,' PUAN KAZANDINIZ'); writeln('OYUNDAN
CIKMAK ICIN ESC TUSUNA, DEVAM ETMEK ICIN ENTER`A BASINIZ'); SECENEK:=READKEY; until
SECENEK=#27; END; WRITELN('OYUN
BITTI'); tanitim; end. |
VAL (Procedure) :
Verilen string tipteki bir bilgiyi sayısal bir ifadeye çevirmek için kullanılır. Çevirme işlemi string ifadede bulunan sayısal değerler için geçerlidir ve sayısal olmayan bir karaktere rastlandığında işlem kesilir.
Yazılım :
VAL(String ifade,sayısaldeğişken, kod)
HALT (Procedure) :
Programı sona erdirir. Çalışan programın durmasını sağlar.
Yazılımı :
HALT[(KOD)];
Halt komutundan sonra ( ) içerisinde, işletim sistemine bir kod gönderilebilir. Kullanılmadığı zaman 0 olarak alınır. Kod, word tipinde bir ifadedir.
ROUND (Function) :
Real olarak girilen değeri, buçuktan büyükse üste, buçuktan küçükse alta tamamlar…
Sonuç longint’ dir…
Yazılışı :
Round(X: Real) : LongInt ;
Örnek ;
|
begin writeln(round(12345.67):10); writeln(round(12345.23):10); writeln(round(-12345.67):10); writeln(round(-12345.23):10); readln; END. |
|
12346 12345 -12346 -12345 |
ODD (Function) :
Girilen bir sayının tek mi çift mi olduğunu bulan function’ dur. Sonucu Boolean tipindedir. Doğru olması durumunda (1) yanlış olması durumunda (0) üretir.
Örnek ;
|
{
(odd) function' inin kullanımına örnek} uses crt; var sayi : longint; tek : boolean; begin write('
Bir sayi giriniz : '); readln(Sayi); if
odd(sayi) then writeln('bu sayi tektir'); if
not odd(sayi) then writeln('bu sayi cifttir'); tek:=odd(sayi); write('sonuc
: ',tek); readln; end. |
|
Bir
sayi giriniz : 16 bu
sayi cifttir sonuc
: FALSE |
|
Bir
sayi giriniz : 23 bu
sayi tektir sonuc
: TRUE |
TRUNC (Function) :
Real olan sayı değişkenini integral sayı değişkenine çevirir. Alta tamamlar sayıyı
Örnek :
|
{Trunc
function örnegi} begin writeln(trunc(12.345)); writeln(trunc(12.567)); writeln(trunc(-12.345)); writeln(trunc(-12.567)); readln; end. |
|
12 12 -12 -12 |
DİZİLER
GİRİŞ :
Dizi : Aynı tipte ve birbiriyle ilgili bilgilerin oluşturduğu bütün.
Program içerisinde aynı anda aynı tür bilgiden oluşan çok sayıda mevcut olması ve bu bilgiler üzerinde toplu işlem yapılmasının gerekmesi durumunda dizilerden yararlanılır. Bütün programlama dillerinde önemli bir yere sahip olan dizilerin Turbo Pascal’ daki yeri tartışılmaz. Dizilerin gerekliliğini iki örnek ile çaıklayalım.
Örnek 1: 100 adet isim ve telefon bilgisini saklamak için;
İsim : 100 adet
Telefon : 100 adet
Toplam 200 adet değişken kullanılır.
Örnek 2: bir sınıfta okuyan 40 öğrencinin isim ve her öğrencinin 5 farklı dersten aldıkları 3 farklı not bilgisini aynı anda makine hafızasında tutmak için;
İsim : 40 adet
Notlar : 40 öğrenci * 5 ders * 3 not = 600 adet
Toplam 640 adet değişken kullanılmalıdır.
Eğer her öğrencinin dersi farklı ve bu ders isimlerinin de tutulmasının gerekmesi durumunda yukarıdaki dizilere ek olarak
Dersler : 40 öğrenci * 5 ders = 200 adet
Toplam 840 adet değişken kullanılmalıdır.
Örnek 1 ve 2 de görüldüğü gibi çok sayıda değişken kullanılması gerekir. Bu durumda bilgiler üzerinde işlem yapmak imkansızdır. Bu durumda kolaylaştırmak için dizilerden yararlanılır. Şimdi aynı örnekleri diziler yardımıyla tanımlayalım.
Örnek 1 için :
İsim : 100 elemanlı
Telefon : 100 elemanlı
Toplam 200 elemanlı 2 dizi (değişken) tanımlanmalıdır.
Örnek-2 için :
İsim : 40 elemanlı
Notlar : 40*5*3= 600 elemanlı
Dersler : 40 *5= 200 elemanlı
Toplam 840 elemanlı 3 dizi değişken kullanılmalıdır.
TEK BOYUTLU DİZİLER :,
Dizi tanımlama : Pascal’ da dizi tanımlamak için ARRAY komutu kullanılır. ARRAY komutunun tek boyutlu diziler için genel yazılımı aşağıdaki gibidir.
Yazılım :
ARRAY[x….y] OF TipAdı;
X: alt limit
Y: üst limit
Dizinin indis numarası [X,Y] aralığında olmalıdır. X ve Y değerleri negatif sayı olabilir ve X değeri Y’ den küçük olmalıdır.
Örnek :
Var
Isım : Array[1..100] OF string;
Notlar : Array[1..100] OF string;
Sicaklik : Array[-100..100] OF string;
Yukarıdaki tanımlamada isim ve notlar isimli dizeler 100’ er elemanlı (bilgi) alabilirler. Bu elemanların indis numaraları 1 ile 100 arasındadır. Bu dizilere aşağıdaki gibi bilgi aktarılabilir. Sıcaklık isimli değişkenin indis numaraları ise -100 ile 100 arasında dır. Bu diziye aşağıdaki gibi bilgi aktarılabilir.
Örnek ;
|
(*
girilecek 10 adet sayıyı bir diziye aktararak bu dizideki sayıların
ortalamasını hesaplayan program *) uses crt; var S: array[1..10] of longint; i: byte; t:longint; ort: real; begin clrscr; {diziye bilgi girişi} for i:=1 to 10 do begin write(i,'. sayi : ');readln(s[i]); end; t:=0; {dizideki sayilarin toplamı hesaplanıyor} for i:=1 to 10 do t:=t+s[i]; ort:=T/10; {ortalamanın hesaplanması}; writeln('ORtalama= ',ORT:0:2); readln; end. |
|
1. sayi : 12 2. sayi : 432 3. sayi : 54 4. sayi : 6 5. sayi : 5 6. sayi : 76 7. sayi : 78 8. sayi : 87 9. sayi : 89 10. sayi : 789 ORtalama= 162.80 |
Örnek ;
|
(*
VERILEN 10 ADET ISIM VE TELEFON BILGISINI BIR DIZIYE AKTARARAK BU BILGILERI EKRANA LISTELEYEN PROGRAM *) USES CRT; VAR ISIM
: ARRAY[1..10] OF STRING[20]; TELEFON
: ARRAY[1..10] OF STRING[11]; I : BYTE; BEGIN CLRSCR; FOR I:=1 TO 10 DO BEGIN WRITE('ADINIZ : ');READLN(ISIM[I]); WRITE('TELEFON : ');READLN(TELEFON[I]); CLRSCR; END; WRITELN('-----------ISIM----------- ----TELEFON----'); FOR I:=1 TO 10 DO BEGIN WRITE(ISIM[I]); GOTOXY(36,I+1);WRITELN(TELEFON[I]); END; REPEAT UNTIL KEYPRESSED; END. |
|
-----------ISIM----------- ----TELEFON---- Mahmut 23423423 murat 2345234 Mustafa 2342342 caner 234234 kader 234234 alev 2342342 hülya 3424234 cansu 324234234 Osman 234234 alexander 234234 |
Örnek ;
|
{//
VERILEN 5 ADET ŞEHİR VE BU ŞEHİRLERE AİT NÜFUS BİLGİLERİNİ ALARAK NÜFUSU // // EN ÇOK VE EN AZ OLAN ŞEHİRLERİ BULAN
PROGRAM // } USES
CRT; VAR SEHIR:
ARRAY[1..5]OF STRING[20]; NUFUS:
ARRAY[1..5]OF longint; MAXNUFUS,MINNUFUS:
longint; MAXSEHIR,MINSEHIR:
STRING[20]; I:
BYTE; BEGIN CLRSCR; WRITE('SEHIR
ADINI GIRINIZ : ');READLN(SEHIR[1]); WRITE('NUFUSU
GIRINIZ : ');READLN(NUFUS[1]); MAXSEHIR:=SEHIR[1];MINSEHIR:=SEHIR[1]; MAXNUFUS:=NUFUS[1];MINNUFUS:=NUFUS[1]; FOR
I:=2 TO 5 DO BEGIN clrscr; WRITE('SEHIR
ADINI GIRINIZ : ');READLN(SEHIR[I]); WRITE('NUFUSU
GIRINIZ : ');READLN(NUFUS[I]); IF
NUFUS[I]>MAXNUFUS THEN BEGIN MAXNUFUS:=NUFUS[I]; MAXSEHIR:=SEHIR[I]; END; IF
NUFUS[I]<MINNUFUS THEN BEGIN MINNUFUS:=NUFUS[I]; MINSEHIR:=SEHIR[I]; END; END; clrscr; WRITELN('NUFUSU
EN FAZLA OLAN SEHIR ',MAXNUFUS,' ILE ',MAXSEHIR); WRITELN('NUFUSU
EN AZ OLAN SEHIR ',MINNUFUS,' ILE ',MINSEHIR); FOR
I:=1 TO 5 DO WRITELN(SEHIR[I],'
: ',NUFUS[I]); READLN; end. |
|
NUFUSU
EN FAZLA OLAN SEHIR 43456 ILE c NUFUSU
EN AZ OLAN SEHIR 123 ILE a a : 123 b : 453 c :
43456 d : 234 e :
2342 |
En büyük veya en küçük bulmak için yapılacak işlem; ilk bilgiyi en büyük ve en küçük kabul edip, geriye kalan bilgileri bununla kıyaslamaktır. Eğer en küçük kabul edilen bilgiden daha küçük bir bilgiye rastlanırsa bu bilgiyi en küçük kabul etmek veya en büyük kabul edilen bilgiden daha büyük bir bilgiye rastlanırsa bu bilgiyi en büyük kabul ederek işlem geriye kalan bütün geriye kalan bilgiler için yapılır. Döngü sonunda en büyük veya en küçük bilgiler bulunmuş olunur.
Örnek ;
|
(* Tasarım : Sean Dillon Tarafından
Hazırlanmıştır Tarih : 24.02.05 22:15 Konu : İstenilen miktarda öğrencinin isimleri ve
bir dersten aldıkları iki not alarak bilgileri aşağıdaki gibi ekrana
listeleyen program... İsim Not-1 Not-2 Ortalama Sonuç ----------------------------------------------------------------------- XXXX XX XX XX XXXXX *) USES
CRT,mustafa; VAR OGRENCI:
ARRAY[1..1000] OF STRING[20]; NOT1,NOT2:
ARRAY[1..1000]OF INTEGER; I:
INTEGER; ORTALAMA:REAL; SECENEK:
CHAR; DURUM:
STRING[10]; BEGIN CLRSCR; I:=1; GOTOXY(1,10) ;WRITELN('isim Not-1 Not-2 Ortalama Sonuç
'); GOTOXY(1,11)
;WRITELN('-----------------------------------------------------------------------'); REPEAT TEXTCOLOR(2); GOTOXY(30,1) ;WRITELN('OGRENCI DURUM RAPORU'); GOTOXY(1,2) ;WRITELN('OGRENCI ADI : '); GOTOXY(1,3) ;WRITELN('NOT1 : '); GOTOXY(1,4) ;WRITELN('NOT2 : '); gotoxy(1,5) ;writeln(' '); GOTOXY(14,2) ;READLN(OGRENCI[I]); GOTOXY(14,3) ;READLN(NOT1[I]); GOTOXY(14,4) ;READLN(NOT2[I]); ORTALAMA:=(NOT1[I]+NOT2[I])/2; IF
ORTALAMA>=60 THEN begin durum:='GECTI'; textcolor(3);
end; if ortalama<60 then begin textcolor(4); DURUM:='KALDI'; end; GOTOXY(1,12) ;INSLINE; GOTOXY(1,12) ;WRITE(UPCASE(OGRENCI[I])); GOTOXY(26,12)
;WRITE(NOT1[I]); GOTOXY(40,12)
;WRITE(NOT2[I]); GOTOXY(52,12)
;WRITE(ORTALAMA:4:2); GOTOXY(66,12)
;WRITE(DURUM); I:=I+1; gotoxy(1,5) ;writeln('YENI KAYIT (E/H)'); SECENEK:=READKEY; SECENEK:=UPCASE(SECENEK) UNTIL SECENEK='H'; END. |
|
OGRENCI DURUM
RAPORU OGRENCI
ADI :salih NOT1 :32 NOT2 :45 YENI
KAYIT (E/H) isim Not-1 Not-2 Ortalama Sonu ----------------------------------------------------------------------- SALIH 32 45 38.50 KALDI SERCAN 67 90 78.50 GECTI AHMET 78 67 72.50 GECTI MUSTAFA 12 45 28.50 KALDI |
Bu programı özellikle incelemeniz tavsiye ediyorum. Burada pek çok Pascal komutlarının kullanımını görmekteyiz. Bu yüzden uygulamalı olarak incelemenizi tavsiye ediyorum…
ÇOK BOYUTLU DİZİLER :
Şimdiye kadar hep tek boyutlu diziler üzerinde duruldu ve tek boyutlu diziler üzerinde işlem yapıldı. Bu bölümde iki veya üç boyutlu diziler üzerinde durulacaktır.
Dizi tanımlama : İki veya üç boyutlu dizileri tanımlamak için aşağıdaki gibi tanımlamalar yapılır.
1) A: array[1..10] OF array [1..5] OF integer;
veya
A: array[1..10,1..5] OF integer;
2) B: Array[1..20] OF Array[1..10] OF Array[1..5] OF byte;
veya
B: Array[1..20,1..10,1..5]OF byte;
1. tanımlamada A değişkeni 10x5 boyutunda, 2. tanımlamada ise B değişkeni 20x10x5 boyutunda çok boyutlu birer dizi değişkenlerdir. A dizisine Integer tipinde 10x5=50 eleman ve B dizisine ise Byte tipinde 20x10x5=1000 eleman kaydedilebilir.
Dizi tanımlamak için aşağıdaki gibi tanımlama yapılabilir.
Var
A: Array[Boolean] OF Array[1..10] OF integer;
Burada tanımlanan A dizisinin ilk indisi Boolean tipinde bir bilgidir. Dolayısıyla ilk indis Boolean tipinde bir sabit (false,true) veya değişken olabilir. İkinci indisi belirtmek için 1-10 arasında değer alan bir tam sayı değişken veya sabit kullanılır. Dolayısıyla bu dizide 20 adet tam sayı tutulabilir.
Mesela 40 öğrencinin 3 notunu saklamak için;
Var
Not1: array[1..40,1..3]OF byte;
Tanımlaması yapılır. Aynı şekilde 40 öğrencinin, 10 farklı dersten aldıkları 3 not bilgisini tanımlamak için;
Var
Not2: array[1..40,1..10,1..3] OF byte;
Tanımlaması yapılır. Bu tanımlama ile not2 değişkeninde toplam 40x10x3=1200 adet not bilgisi tutulabilir.
İlk tanımlamada (Not1)120, ikinci tanımlamada(not2)ise 1200 adet not bilgisi saklanabilir.
Bu bilgilere erişmek için;
Not1[1,3] 1. öğrencinin 3. notu;
Not2[1,5,2] 1. öğrencinin 5. dersten aldığı 2. not
Şeklinde ifadeler kullanılır. Bu şekilde kullanımların kullanıcıya sağlayacağı fayda fazla değildir. Bunun için indis numarası olarak değişken veya değişkenler kullanılır.
Not1[i,j] tanımlaması i. Öğrencinin j.notu anlamına gelir.
DOSYALAMA
GİRİŞ :
Dosya : Aynı yapıdaki kayıtların oluşturduğu bir bütündür. Sürekli olarak saklanması gereken bilgiler ya program içerisinde sabit olarak tanımlanırlar yada dosyalarda saklanırlar. Program içerisine sabit olarak bilgiler yazılabilir. Ancak bir okuldaki öğrenci listesi, bir işletmenin müşteri kayıtları ve bunlara ait hareketler veya muhasebe kayıtları gibi bilgiler program içerisine yazılamazlar. Bu bilgilerin dosyalarda tutulmaları gerekir.
Turbo Pascal programlama dilinde üç farklı dosyalama şekli mevcuttur.
1- Text Dosyalar
2- Tipli(Typed) dosyalar
3- Tipsiz (untypes) dosyalar
TEXT DOSYALAR :
Metin dosyaları olarak adlandırılan bu dosyalarda kayıtlar arka arkaya yazılırlar. Her kaydın sonunda CR(Carriage Return)(EOL=END OF Line) işareti vardır. Dosyaya yazılan ilk kayıt dosyanın başında, son girilen kayıt ise dosyanın en sonunda bulunur. Bir kayıta erişmek için o kayıta kadar olan bütün kayıtların okunması gerekir. Çok kayıtta oluşan dosyalarda kayıtlara erişim yavaş, yani çok zaman gerektirdiğinden Text dosyalar tavsiye edilmez. Bu dosyaların içerikleri herhangi bir editör programı ile görülebileceği gibi DOS’ un TYPE komutu yardımı ile de görülebilir. Text dosyalarda dosyaya kayıt yazmak veya okumak için dosya farklı komutlarla açılmalıdır. Bunun için dosyanın her defasında kapatılıp yeniden açılması gerekir. Okunan kayıtları tekrar okumak için dosyanın kapatılıp yeniden açılması gerekir.
Text Dosya Tanımlama : Dosyayı tanımlamak için TEXT veri tipi kullanılır.
Örnek :
Var
Dosya: Text;
Yukarıdaki tanımlamada ‘Dosya’ olarak kullanılan değişkene ‘ dosya değişkeni’ denir. Dosya ile ilgili bütün işlemler bu değişkene göre yapılır.
TEXT DOSYALARDA KULLANILAN KOMUTLAR :
ASSIGN (Procedure) :
Dosya değişkenine dosya isminin atamak için kullanılır.
Yazılımı :
ASSIGN(Dosya değişkeni, Dosya Adı)
‘Dosya Değişkeni’ yukarıda tanımlandığı gibi Text dosyalar için TEXT veri tipinde olmalıdır. ‘dosya adı’ ise sabit veya değişken olabilir. DOS’ ta dosya ismi en fazla 8 uzantısı ise en fazla 3 karakter olabilir. İsim ile uzantı arasına nokta (.) karakteri konur.
Örnek ;
Assign(Dosya,’MUSTERI.DAT’);
Assign(Dosya,’C:\YAZI\MUSTERI.DAT’);
Yukarıdaki örneklerde görüldüğü gibi dosya değişkenine adı ile beraber dosyanın bulunduğu yerde atanabiliyor. Dosya adının değişken olması durumunda aşağıdaki gibi işlem yapılır.
Örnek ;
Var
DosyaAdi : String[67];
Dosya : Text;
Begin
Write(‘Dosya Adı : ’);ReadLn(dosyaadi);
Assign(dosya,dosyaadi);
(…..)
END.
REWRITE (Procedure) :
Dosyaya bilgi yazılması için dosyanın açılmasını sağlar. Ancak dosyada önceden bilgi bulunması durumunda dosyada bulunan bütün kayıtlar silinir ve ilk kayıttan itibaren dosyaya bilgi girilmesi sağlanır.
Yazılımı :
Rewrite(dosya değişkeni);
Dosya açılmadan önce dosya değişkenine Assign komutu tarafından dosya isminin atanması gerekir.
{$I-} ve IOResult fonksiyonun değerinin 0(sıfır) olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işleminin yapılmadığını gösterir.
RESET (Procedure) :
Mevcut dosyadan bilgilerin okunması için dosyayı açar. Bu komutun kullanılması için dosyanın mevcut olması gerekir.
Yazılım :
RESET(DosyaDeğişkeni);
Dosyada kayıt okuma işlemi dosya sonu (EOF=END OF File) işaretine kadar yapılabilir. {$I-} ve IOResult fonksiyonun değerinin 0(sıfır) olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılamadığını gösterir.
APPEND (Procedure) :
Dosyaya bilgi eklemek için dosyanın açılmasını sağlar. Bu komutla açılan dosyanın sonuna bilgi ilavesi yapılır.
Yazılımı ;
Append(dosyadeğişkeni)
{$I-} ve IOResult fonksiyonun değerinin 0(sıfır) olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılamadığını gösterir.
EOF (Function) :
Okuma işlemi sırasında dosya sonuna gelinip gelinmediğini test etmek amacıyla kullanılır.
Yazılım :
EOF(Dosya değişkeni);
EOF=END OF file (dosya sonu), sonucu Boolean tipinde bir bir fonksiyondur. Eğer dosya sonuna gelinmiş ise TRUE, gelinmemiş ise FALSE değerini üretir.
WRITELN (Procedure) :
Dosyaya bilgilerin yazılmasını sağlar. Bu komutun kullanılabilmesi için dosyanın Rewrite veya Append komutları ile açılmış olması gerekir.
Yazılımı :
WRITELN(DosyaDeğişkeni, Bilgi veya değişken listesi);
Dosya değişkeni, Text dosyalar için TEXT veri tipi ile tanımlanmış olmalıdır.
ReadLn (Procedure) :
Reset komutu ile açılmış olan dosyadan kayıt okumak için kullanılır. Dosyanın mevcut ve EOF fonksiyonunun sonucunun FALSE olması gerekir.
Yazılımı :
ReadLn(DosyaDeğişkeni, değişken listesi);
Bilgi okuma işleminin EOF (Dosya Sonu) işaretinden sonra yapılması hata oluşmasına neden olur.
CLOSE (Procedure) :
Açık olan dosyayı kapatmak için kullanılır.
Yazılımı :
Close(DosyaDeğişkeni);
Aşağıdaki program ile Text tipindeki bir dosyaya kayıt işlemi yapılıyor. Dosyaya kayıt işleminin yapılabilmesi için dosyanın Append komutu ile açılmış olması gerekir. Eğer dosya mevcut değilse, dosyanın Rewrite komutu ile açılması gerekir. Dosyaya yazılacak olan bilgiler girildikten sonra bu kayıtların boş kalan karakterleri boşluk ile doldurulmalıdır. Bu işlemden sonra kayıt dosyaya yazılabilir. Programdan çıkmak için bilgi girişi sırasında isim bilgisi boş geçilmelidir.
Örnek ;
|
{açıklama:
bu program temel pascal dosyalama yöntemi üzerinedir. text bir dosyaya kayıt işlemi temel olarak ele
alınmıştır.} uses crt; var D
: Text; isim
: string[20]; adres : string[35]; tel
: string[15]; kod
: integer; B
: String; Procedure
Tamla; begin fillchar(b,255,32) ; b[0]
:=#255 ; isim
:=isim+b ; adres
:=adres+b ; tel
:=tel+b ; end; begin assign(D,'Hesap.DAT'); {assign
komutu dosya değişkenine ismini atamak için kullanılır} {$i-}
append(d);Kod:=IOResult;{$i+} if
kod<>0 then rewrite(d); {append
komutu dosyaya bilgi eklemek için açılmasını sağlar. bu komutla açılan dosyanın sonuna bilgi eklemesi
yapılır} repeat clrscr; write('isim : ');readln(isim); if isim='' then begin Close(D);halt; {burada close komutu ile açtığımız
dosyayı kapatıyoruz ve hata vererek programın işleyişini durduruyoruz.
bunun sebebide if komutu incelendiği zaman isim kısmını eğer boş bırakırsak
programı durdur olduğudur} end; write('Adres : ');readln(adres); write('Telefon : ');readln(tel); tamla; Writeln(d,isim,adres,tel); {burada dosyaya yazı işlemi
gerçekleşiyor} until 1=2; end. |
Aşağıdaki program ise yukarıdaki program tarafından dosyaya yazılan bilgilerin okunarak ekrana alt alta listelenmesini sağlar. Listeleme işlemi dosya sonuna kadar yapılmaktadır. Bu işle için “While not EOF(D) do ifadesi kullanılmıştır. Bu komut ‘dosya sonu değilse, döngü içerisindeki işlemleri yap’ anlamındadır. Okuma işlemi bittikten sonra dosya kapatılıyor. Kayıt sayısının ekrandaki satır sayısından fazla olması durumunda ekrandaki bilgiler yukarı doğru kayacaktır. Sayfa sayfa listeleme işlemini size bırakıyoruz.
|
uses
crt; var D
: TExt; isim
: String[20]; adres : string[35]; tel
: string[15]; kod
: integer; begin assign(D,'hesap.dat'); {assign komutu dosya değişkenine ismini
atamak için kullanılır} {$i-}reset(d);kod:=ioresult;{$i+} {reset komutu Mevcut dosyadan bilgilerin
okunması için dosyayı açar. Bu komutun kullanılması için dosyanın
mevcut olması gerekir. } if kod<>0 then exit; clrscr; while not EOF(D) do begin readln(d,isim,adres,tel); writeln(isim,adres,tel); end; readln; close(d); end. |