pascal

November 19, 2017 | Author: september1985 | Category: N/A
Share Embed Donate


Short Description

[ascal...

Description

PASCAL ve Program Geliþtirme

Sürat Yayýnlarý

Zülkif GÜVEN Asým Taylan ERVERDÝ

Sürat Bilgisayar Kitaplarý Dizisi : 3

PASCAL ve Program Geliþtirme

Yazarlar

: Zülkif GÜVEN Hacettepe Üniversitesi Bilgisayar Bilimleri Mühendisliði, Asým Taylan ERVERDÝ Yýldýz Teknik Üniversitesi Bilgisayar Bilimleri Mühendisliði

Sayfa Düzen ve Grafik Kapak Tasarým

: Zülkif GÜVEN, Asým Taylan ERVERDÝ

: Sürat Görsel Sanatlar Merkezi

Renk Ayrým ve Film : Sürat Görsel Sanatlar Merkezi Yayým

: Sürat A. Þ.

Basým Yeri ve Tarihi : Ýstanbul / Türkiye, Aðustos-1997

Logo SÜRAT A.Þ.’nin Tescilli Markasýdýr. ISBN : 975-577-072-0 Copyright © 1997 Sürat Basým Yayýn ve Daðýtým Anonim Þirketi. Tüm haklarý saklýdýr. Bu kitapta bulunan metin ve grafiklerin tamamýnýn kullaným hakký, Fikir ve Sanat Eserleri Kanunu’na göre SÜRAT YAYINLARI’na aittir. Sürat A.Þ. ve yazarlarýn önceden yazýlý izinleri olmaksýzýn elektronik, mekanik, fotokopi ya da herhangi bir kayýt sistemiyle çoðaltýlamaz, yayýnlanamaz veya depolanamaz.

DAÐITIM Sürat A.Þ. Basým Yayýn ve Daðýtým Anonim Þirketi P.K.39 Üsküdar / ÝSTANBUL Tel : 90-216-3917031 Pbx

ÖN SÖZ Özellikle son 50 yýllýk süre zarfýnda, bilgisayar her alanda kullanýlmaya baþlamýþ ve tüm ilimlerin hýzla geliþmesinde ana yardýmcý konumuna gelmiþtir. Astronomiden uzay bilimlerine, eðitimden týbba, maliyeden bankacýlýða kadar pek çok alanda yaygýnlaþarak vazgeçilmez olmuþtur. Ýþte böyle büyüleyici olarak görülen bilgisayarýn, hizmet üretebilmesi için, bizzat kendisine problemleri çözme yeteneði kazandýrýlmasý gerekir ki, bu da prog-ramlama ile mümkündür. Program geliþtirmek, günlük hayatta karþýlaþýlan problemleri çözmeye benzer. Problemlere ne kadar iyi çözüm getirebiliyorsanýz o kadar iyi programlama yapabileceðiniz söylenebilir. Problemlerin çözümünde kendi düþünce sistemimiz çok önemlidir. Bir soru sorulduðunda, hiç düþünmeden kolayca cevap verebilme, insanýn hýzlý düþünebilme yeteneðinden kaynaklanýr. Ve bu hýzla cereyan eden düþünme süreci içerisinde, elbette takip edilen bir çözüm metodu vardýr. Sonra da bu metodun, bilgisayarýn anlayacaðý bir dilin program kodlama kurallarý çerçevesinde uyarlanmasý gerekir. Biz de bu baðlamda, bilgisayarla aktif iletiþim kuracaðýmýz dil olan Pascal’ý seçtik. Pascal programlama dili, 1968 yýlýnda Niklaus Wirth tarafýndan geliþtirilmiþ, özellikle Borland firmasýnýn çýkarttýðý yeni Pascal sürümleriyle güçlenmiþtir. Bir çok yerde programlama, Pascal diliyle öðretilmektedir. Ýdeal bir öðretim dili olmasýnýn yanýnda, yapýsal programlama bakýmýndan da güçlü bir dildir. Dos, crt, string, grafik fonksiyonlarý, simgesel dil komutlarýnýn kullanýmýna izin vermesi, kütüphane oluþturabilme gibi imkanlarý, Pascal’ý güçlü kýlan özelliklerdir. Program uygulamalarýmýzda Pascal’ýn deðiþik model ve sürümlerinden baðýmsýz kalmaya çalýþtýysak ta programlarýmýz Borland Pascal 7.0 sürümünün komutlarýný desteklemektedir. a. Kitabýn Hazýrlýðý Her devirde olduðu gibi günümüzde de yeni yetiþen neslin, bilgi çaðýný yakalayabilmesi, düþünüp, düþündüðünü ifade edebil-mesi, olaylar karþýsýnda yorum gücüne sahip olmasý, iyi bir eðitim ve öðretimle mümkündür. Eðitim ve öðretimde kalitenin artýrýlmasýnda, birçok unsurun yanýnda kitap faktörü de çok önemlidir. Elinizdeki bu kitap, uzun programcýlýk deneyiminin ve titiz bir araþtýrmanýn ürünüdür. Kitabý hazýrlýk aþamasýndan son haline getirinceye kadar, temel hedef olarak, Pascal ile program geliþtirmenin zor ve sýkýcý olduðu düþüncesini ortadan kaldýrmak ve sevdirerek öðretmek olduðu hiç bir zaman

b. Konularýn Hazýrlýðý Konular büyük bir özenle hazýrlandý. Kendi özeleþtirimizi yapmak, konunun anlaþýlýrlýðýný saðlamak, konunun hazýrlanma amacýna uyup uymadýðýný kontrol için, her konu yazýlýp bittikten sonra kendimize þu sorularý sorduk. “Konu gerekli bilgileri içeriyor mu? Kullanýlan dil akýcý ve sade mi? Konuda pedogojik bir anlatým sýralamasý var mý?“ Bu sorularýn tamamýna evet cevabýný almaya çalýþtýk. Eðer, bunlardan birine net olarak evet cevabý alamadýysak, konuyu yeniden inceledik ve düzenlemeler yaptýk. c. Program Geliþtirme Metodu Konu anlatýmýnda pek çok örnek program uygulamasý verilmiþtir. Bu programlar doðrudan kodlarý verilerek deðil, aþaðýda belirtildiði gibi problemi anlama, çözüm metodu geliþtirme, adýmlandýrma, kodlama, test etme aþamalarýndan geçirilmiþtir: 6.2. Problem (Girilen N Adet Sayýnýn Ortalamasý) Girilen N sayýnýn ortalamasýný bulan program akýþýný geliþtirin. Analiz Kaç adet sayý girileceði (N) okunur. 1’den N’e kadar sayýlar okunur ve toplama eklenir. En sonunda bulunan toplam deðeri, N’e bölünerek ortalama elde edilir. N adet sayýnýn toplanmasý, bir havuzu N adet musluðun doldurmasýna benzetilebilir. Her sayý toplam havuzuna ilave edilir.

Tasarým 1. Dik üçgenin iki kenar uzunluðunu oku. 2. Hipotenüsü hesapla; 2.1 Dik kenarlarýn karelerini alýp topla ve toplamýn karekökünü al. 3. Hipotenüsü yazdýr ve programý sonlandýr. Program Kodu (DikUcHip.Pas) Program Dik_Ucgenin_Hipotenusunu_Hesaplar; Var DikKenar1, DikKenar2, Hipotenus: Real; Begin Write('Lütfen dik üçgenin iki kenar uzunluklarýný giriniz :'); ReadLn(DikKenar1,DikKenar2); Hipotenus:=Sqrt( Sqr(DikKenar1)+Sqr(DikKenar2));{5.1.1, 5.1.2.} WriteLn('Hipotenüsün uzunluðu = ',Hipotenus:4:2); WriteLn(‘Hipotenüs uzunluðunun tam kýsmý = ‘, Trunc(Hipotenus)); {5.1.3.} WriteLn(‘Hipotenüs uzunluðunun yuvarlatýlmýþ hali = ‘, Round(Hipotenus));{5.1.4.} End. Kritik

5.1.1. Sayýnýn Karakökü (Sqrt) DikKenar1 ve DikKenar2 deðiþken deðerlerinin karelerini toplar ve toplamýn karekökünü alýp hipotenüsü Hipotenus:=Sqrt(Sqr(DikKenar1)+Sqr(DikKenar2)); hesaplar.

Örnek Program Kodu Var r : Real; Begin WriteLn(‘17/3 = ', 17/3); r:=15; WriteLn('r = ‘, r); End.

Test Ýþletimi 17/3 = 5.6666666667E+00 r = 1.5000000000E+01

1. Problemi Anlama Bir problemin çok iyi þekilde anlaþýlmasý gerekir. Problemin çözümü için hangi verilerin elde olduðu ve istendiði iyi bilinmelidir. 2. Çözüm Metodu Geliþtirme (Analiz) Problemi iyice anladýktan sonra, çözümü için bir metot geliþtirmek gerekir. Bu metot, ya daha evvel çözülen problemlere benzetilir ya da baþtan yeni bir yöntem geliþtirilir. Problemi en ufak detaylarýna kadar alt programlara bölmek ise iyi bir baþlangýçtýr. 3. Çözüm Metodunun Adýmlandýrýlmasý (Tasarým) Çözüm metoduna iliþkin somut adýmlar belirlenir. Herbir adým kendi içinde kapalý bir noktasý kalmayýncaya kadar detaylandýrýlýr. 4. Programý Kodlama (Uygulama) Belirlenen somut adýmlar, Pascal dilinin kurallarý çerçevesinde kodlanýr. Burada kullanýlan sabit, tip, komut ve diðer ifadelerin söz dizim açýklamasý ve kritiði yapýlýr. Konunun en baþýnda, anlaþýlmasý güç pek çok taným ve komutlar yýðýnýný vermekten kaçýndýk. Aksine, tümden parçalara doðru mantýðýndan hareketle, örnek program uygulamalarýyla baþladýk. Verilen örnek uygulamalar, kolaydan zora doðru sýralandý, her yeni örnekte bir baþka taným verilmesi hedeflendi. 5. Programýn Testi (Test Ýþletimi) Bir program her ne kadar bitmiþ gözükse de bir çok hatalar içerebilir. Bir veri için çalýþýp, baþka bir veride yanlýþ sonuçlar üretebilir. Bu yüzden program kritik bazý uç deðerlerle test edilip, tam doðru çalýþtýðýna emin olunmalýdýr.

d. Program Geliþtirmede Akýþ Þemalarý

Tasarým ve Akýþ Þemasý 1. Sayacý 1’e eþitle.

Problemlerin çözümünde, yukarýda belirtilen program geliþtirme aþamalarýna ek olarak, yer yer tasarýmla birlikte akýþ þemalarý da çizilmiþtir. Burada, bir resim birçok cümleden daha fazla anlam ifade eder düþüncesiyle, programýn planý akýþ þemasýyla desteklenmiþtir. e. Renkli Çizim ve Modelleme Desteði Kitaba göz gezdirdiðinizde çoðu konunun renkli çizimlerle desteklendiðini göreceksiniz. Konularýn daha iyi anlaþýlýr kýlýnmasý, göze hitap etmesi, soyut bir takým kavramlarýn hayal aleminden kaðýt üzerine aktarýlmasý saðlandý. Konu anlatýmýndaki bir kýsým yorumlarýn çizim modellemesi de yapýlarak farklý bir bakýþ açýsý kazandýrýldý. f. Karikatür Desteði Konularýn anlatýmýnda bazý yorumlarý ve bazý Pascal tip ve komutlarýný karikatürize ettik. Kýsmen espiritüyel olan bu karikatürleri, konuyla önemli oranda iliþkilindirmeye gayret ettik. g. Bölüm Tarama ve Programlama Sorularý Ölçme ve deðerlendirme, eðitim ve öðretimde vazgeçilmez bir unsurdur. Her bölümün sonuna ilave edilen sorularýn, kýsmen zor olanlarý da olsa, kendinizi ölçmenizde oldukça yardýmcý olacaðý kanaatindeyiz. h. Son Söz Programlama dersi alan tüm orta ve yüksek okul öðrencilerine ve programcýkla ilgilenen tüm kiþilere, bu kitabýn oldukça faydalý olacaðýný ümit ediyoruz. Bu kitapla konulara çalýþýrken, bir defa okuduðunuzda anlamadýðýnýz taktirde, ikinci defa okuduðunuzda rahatlýkla anlayabileceðiniz kanaatindeyiz. Bu arada þunu da tavsiye ederiz: Bir konuyu iyice anladýðýnýza emin olmadan bir sonraki konuya geçmeyiniz. Kitabýn hazýrlanmasý esnasýnda ihmal ettiðimiz ailelerimize de gösterdikleri anlayýþtan dolayý teþekkür ederiz. Zülkif GÜVEN Asým Taylan ERVERDÝ Aðustos 1997, Ýstanbul

2. 1000 defa ‘Pascal’ yazdýrý cak döngüyü kur; 2.1. Ekrana ’Pascal’ yazdýr. 2.2. Sayacý bir artýr. 2.3. Sayac 1000’den küçük veya eþitse 2.1. adýma geri dön. 3. Programý sonlandýr.

4.3.1. Atama Ýfadesinin Ýþleyiþi 1. Atama operatörünün (:=) sað tarafýndaki ifadenin ... 2. Bulunan bu deðer, atama operatörünün solundaki deðiþkene, tip uyuþmazlýðý yoksa, aktarýlýr.

Ýçindekiler

ÝÇÝNDEKÝLER BÖLÜMLER

SAYFA

BÖLÜM-1 PROGRAM GELÝÞTÝRME (PROGRAMMING)

1 - 14

BÖLÜM-2 PASCAL PROGRAMLAMA DÝLÝ (PASCAL PROGRAMMING LANGUAGE)

15 - 36

BÖLÜM-3 KONTROL DEYÝMLERÝ (DECISION CONTROL)

37 - 58

BÖLÜM-4 DÖNGÜ DEYÝMLERÝ (REPETITION CONTROL)

59 - 94

BÖLÜM-5 DÝZÝLER (ARRAYS AND STRING)

95 - 120

BÖLÜM-6 ALT PROGRAMLAR (PROCEDURES AND FUNCTIONS)

121 - 146

BÖLÜM-7 GRAFÝK (GRAPHIC)

147 - 200

BÖLÜM-8 ÖZEL TANIMLI TÝPLER (USER DEFINED TYPES) 201 - 220 BÖLÜM-9 DOSYALAR (FILES)

221 - 248

BÖLÜM-10 BELLEK KONUM GÖSTERGECÝ (POINTER)

249 - 274

BÖLÜM-11 ÖZYÝNELEME (RECURSION)

275 - 286

BÖLÜM-12 SIRALAMA (SORTING)

287 - 304

BÖLÜM-13 ARAMA (SEARCHING)

305 - 312

BÖLÜM-14 KESMELER (INTERRUPTS)

313 - 326

BÖLÜM-15 EKLER (APPENDIX)

327 - 354

Pascal ve Program Geliþtirme

Ýçindekiler

BÖLÜM-1 PROGRAM GELÝÞTÝRME (PROGRAMMING) -1 1. V ERÝ Ý ÞLEME (D ATA P ROCESSING ) -3 2. V ERÝ Ý ÞLEME T ARÝHÇESÝ -3 3. B ÝLGÝSAYARDA V ERÝ Ý ÞLEME VE S AKLAMA -4 3.1. Ýkilik Sayý Düzeni (Binary Numbers) -5 3.2. Onaltýlýk Sayý Düzeni (Hexadecimal Numbers) -5

4. B ÝLGÝSAYARIN G ENEL Y APISI -5 4.1. Ana Bellek (Ram) -6

5. P ROGRAM G ELÝÞTÝRME M ETODU -6 5.1. Problemi Anlama -6 5.2. Çözüm Metodu Geliþtirme (Analiz) -6 5.3. Çözüm Metodunun Adýmlandýrýlmasý (Tasarým) -6

5.4. P ROGRAMÝ K ODLAMA (U YGULAMA ) -7 5.5. P ROGRAMÝN T ESTI (T EST Ý ÞLETIMI ) -7 6. P ROGRAM G ELÝÞTÝRMEDE A KIÞ Þ EMALARI -7 6.1. Sýralý Akýþ (Sequential Flow) -7 6.1.1. Problem (Çember Alan ve Çevre Hesabý) -7

6.2. Þartlý Akýþ (Conditional Flow) -8 6.2.1. Problem (Üçgenin Eþkenarlýk Kontrolü) -8

6.3. Tekrarlý Akýþ (Repetitive Flow) -9 6.3.1. Problem (1’den 100’e Kadar Sayýlarýn Yazdýrýlmasý) -9 6.3.2. Problem (Girilen N Adet Sayýnýn Ortalamasý) -10 6.3.3. Problem (Girilen N Adet Sayýnýn En Büyüðü) -10

7. P ROGRAMLAMA D ÝLLERÝ -11 7.1. Yüksek Seviyeli Diller -11

2.2. Program Baþlýðý -20 2.3. Pascal Söz Dizim Kuralý -20 2.3.1. 2.3.2. 2.3.3. 2.3.4.

Ayrýlmýþ Kelimeler -20 Standart Ýfadeler -20 Özel Semboller -21 Bellek Alan Ýsimleri -21

2.4. Açýklama Sembolleri -21

3. DEÐÝÞKEN TANIMLAMA BLOÐU -21 3.1. Deðiþken Kavram ve Tanýmý -21 3.2. Deðiþken Ýsmi Verme Kurallarý -22 3.3. Deðiþken Tipleri -22

4. ANA PROGRAM BLOÐU -23 4.1. Çýkýþ Deyimleri (Write, WriteLn) -23 4.1.1. Çýkýþ Ortamýna Yazým (Write) -24 4.1.2. Çýkýþ Ortamýna Satýr Baþýyla Yazým (WriteLn) -24

4.2. Giriþ Deyimleri (Read, ReadLn) -24 4.2.1. Giriþ Ortamýndan Satýr Baþýyla Okuma (ReadLn) -24 4.2.2. ReadLn Deyiminde Dikkat Edilecek Hususlar -25 4.2.3. Giriþ Ortamýndan Okuma (Read) -26

4.3. Atama Ýfadesi -26 4.3.1. Atama Ýfadesinin Ýþleyiþi -26 4.3.2. Yer Deðiþtirme Ýþlemi (Swap) -26 4.3.3. Atamada Dikkat Edilecek Hususlar -27

4.4. Aritmetik Ýþlemler -27 4.4.1. Kesirli Bölme (/) -27 4.4.2. Tam Bölme (Div) -27 4.4.3. Mod Ýþlemi -28

7.2. Simgesel (Assembly) Dil -12

4.5. Aritmetik Ýþlem Sýrasý -28

7.3. Makine Dili -12

4.6. Aritmetik Ýþlem Sonucunun Tipi -28

7.4. Yaygýn Kullanýlan Bazý Yüksek Seviyeli Diller -12

4.7. Matematik Formüllerinin Yazýmý -29

B ÖLÜM T ARAMA S ORULARI -13 P ROGRAMLAMA S ORULARI -14

BÖLÜM-2 PASCAL PROGRAMLAMA DÝLÝ (PASCAL PROGRAMMING LANGUAGE) -15 1. P ASCAL ’ DA E DÝTÖR K ULLANIMI -17 1.1. Yeni Dosya Açýlmasý (New File) -17 1.2. Yazýlan Programýn Çalýþtýrýlmasý (Compile & Run) -18 1.3. Dosyanýn Kaydedilmesi (File Save) -18 1.4. Düzenleme: Kes, Kopyala, Yapýþtýr (Cut, Copy, Paste) -18 1.5. Kelime Arama (Search) -19 1.6. Dosyanýn Kapatýlmasý (Close File) -19

2. P ASCAL ’ IN G ENEL B LOK Y APISI -19 2.1. Uygulama (Verilen Üç Notun Ortalamasý) -19

4.8. Çýkýþ Ýfade Düzeni -29 4.8.1. Tamsayý (Integer) Ýfade Düzeni -29 4.8.2. Gerçek Sayý (Real) Ýfade Düzeni -30 4.8.3. Açýklama Ýfadesi Yazým Düzeni -30

5. MATEMATÝKSEL ÝÞLEMLER -31 5.1. Uygulama (Dik Üçgenin Hipotenüs Hesabý) -31 5.1.1. 5.1.2. 5.1.3. 5.1.4.

Sayýnýn Karekökü (Sqrt) -31 Sayýnýn Karesi (Sqr) -31 Gerçek Sayýnýn Tam Kýsmý (Trunc) -31 Gerçek Sayýyý En Yakýn Tamsayýya Yuvarlama (Round) -32

6. K ODLAMADA Y APILABÝLECEK G ENEL H ATALAR -32 6.1. Söz Dizim Hatalarý (Syntax Errors) -32 6.2. Ýþletim Hatalarý (Runtime Errors) -32 6.3. Hatalý Program Kodunu Düzeltme -32

B ÖLÜM T ARAMA S ORULARI -34 P ROGRAMLAMA S ORULARI -36 Pascal ve Program Geliþtirme

Ýçindekiler

BÖLÜM-3 KONTROL DEYÝMLERÝ (DECISION CONTROL) -37 1. T EK

VE

Ç ÝFT D ALLANMALI K ONTROL D EYÝMLERÝ -39

1.1. Uygulama (Üç Sayýnýn En Büyüðü) -39 1.2. If-Then-Else Deyimi -40 1.3. Mantýksal (Boolean) Ýfadeler -41 1.3.1. Karþýlaþtýrma Operatörleri -41 1.3.2. Mantýksal Deðiþkene Deðer Atama -41 1.3.3. Mantýksal Operatörler (Ve, Veya, Deðil) -41 - Ve (And) Operatörü -42 - Veya (Or) Operatörü -42 - Deðil (Not) Operatörü -42 1.3.4. Genel Ýþlem Sýrasý -42

1.4. Kontrol Ýfadesinde Mantýksal Deðiþken Kullanýmý -43 1.5. Kontrol Ýfadesinde Gerçek Sayýlarýn Kullanýmý -43 1.6. Else Dallanmasýndan Önce Noktalý Virgül Kullanýmý -43 1.7. If-Then Deyimi -44

2. B LOK K ULLANIMI -45 2.1. Uygulama (Dikdörtgen veya Üçgen Alan Hesabý) -45 2.1.1. Kütüphane Bloðu ve Crt Kütüphanesi (Uses Crt) -46 2.1.2. Ekraný Temizleme (ClrScr) -46 2.1.3. Klavyeden Karakter Okuma (ReadKey) -47 2.1.4. Büyük Harfe Çevirme (UpCase) -47 2.1.5. In Karþýlaþtýrma Operatörü -47 2.1.6. Begin-End Blok Yapýsý -48 2.1.7. Blok Ýfade Kullanmanýn Gereði -48

3. Ç OK D ALLANMALI K ONTROL D EYÝMLERÝ -49 3.1. Uygulama (Öðrenci Ders Baþarýsý) -49 3.1.1. Sabit (Const) Bloðu -51 3.1.2. Ýçiçe If Kontrolü -51 3.1.3. Ýçiçe If Kontrolünde Else Kullanýmý -52

3.2. Uygulama (Üçgen Tipini Belirleme) -52 3.2.1. Ýçiçe If-Then-Else Deyimleri -52

3.3. Uygulama (Yüzden Beþe Not Çevrimi) -53 3.3.1. Ýçiçe If-Then-Else ile Not Çevrimi -53

3.4. Case ile Yüzden Beþe Not Çevrim Örneði -53 3.5. Case Deyimi -54 3.5.1. 3.5.2. 3.5.3. 3.5.4.

Case Case Case Case

Deyiminde Deðer Aralýklarý -54 Bloðunda Tekrar Eden Deðerler -55 Bloðunda Else ile Yönlendirim -55 Blok Sonu -55

3.6. Uygulama (Karakter Tespiti) -55

B ÖLÜM T ARAMA S ORULARI -57 P ROGRAMLAMA S ORULARI -58

Pascal ve Program Geliþtirme

BÖLÜM-4 DÖNGÜ DEYÝMLERÝ (REPETITION CONTROL) -59 1. D ÖNGÜ N EDEN G EREKÝR -61 1.1. Uygulama (Ekrana 1000 Defa Pascal Yazdýrma) -61 1.2. Etiket (Label) Tanýmlama Bloðu -62 1.3. Program Akýþýný Ýstenen Satýra Yönlendirme (GoTo) -62

2. B ELLÝ S AYIDA T EKRARLI D ÖNGÜ (F OR ) -63 2.1. For Döngüsüyle Ekrana 1000 Defa Pascal Yazdýrma -63 2.2. For-To-Do Deyimi 2.2.1. For Döngüsünün Ýþleyiþ Adýmlarý -63

2.3. Uygulama (1’den 100’e Kadar Sayýlarýn Toplamý) -64 2.3.1. Yýðmalý Toplama ve Çarpma -65

2.4. Uygulama (Sayýlar ve Karelerinin Yazdýrýlmasý) -65 2.5. For-DownTo-Do Deyimi -65 2.5.1. Döngüde Blok Kullanýmý -66

2.6. A’ dan Z’ye Kadar Karakterlerin Yazýmý -66 2.6.1. Döngü Deðiþkeni Olarak Karakter Kullanýmý -66

2.7. Uygulama (Sýnýfýn Kalan ve Süper Öðrenci Sayýsý) -66

2.8. For Döngüsünde Dikkat Edilecek Noktalar -68 2.8.1. Döngü Deðiþken Deðerinin Deðiþimi -68 2.8.2. Sonsuz Döngü -68 2.8.3. Döngünün Bitiþ Deðerini Deðiþtirme -69 2.8.4. Döngü Bitiminde Döngü Deðiþkeninin Deðeri -69 2.8.5. Döngü Bloðunun Tekrar Etme Sayýsý -69 2.8.6. Do’dan Sonra Noktalý Virgül Kullanýmý -69 2.8.7. For Döngü Deðiþkeni Tipi -69

3. Ö N K ONTROLLÜ D ÖNGÜ (W HILE ) -70 3.1. Uygulama (1 ile10 Arasýndaki Sayýlarý While ile Yazdýrma) -70 3.2. While-Do Deyimi -71 3.2.1. While Döngüsünde Üç Aþama -72

3.3. Sayma ve Gözcü (Sentinel) Kontrollü Döngüler -72 3.4. Uygulama (Not Ortalama Hesabý) -73 3.4.1. Döngü Deðiþkeninin Ýlk Deðer Almasý -74 3.4.2. Döngüye Hiç Girmeme Kontrolü -74

3.5. Uygulama (Bir Þehrin Hedef Nüfusa Ulaþma Süresi) -74 3.5.1. Tamsayý Bölme ve Çarpmada Oluþabilecek Hatalar -75

3.6. Uygulama (Girilen N Sayýnýn En Büyüðü) -76

Ýçindekiler

3.7. While Döngüsünde Dikkat Edilecek Noktalar -78 3.7.1. Do Kelimesinden Sonra Noktalý Virgül Kullanýmý -78 3.7.2. Döngülerde Tamsayý Kullanýmý -78

4. S ON K ONTROLLÜ D ÖNGÜ (R EPEAT ) -79 4.1. Uygulama (Esc Tuþuna Basýlana Kadar Tuþ Okuma) -79 4.2. Repeat-Until Deyimi -79 4.2.1. Diyez (#) Ýþaretiyle Karakter Kontrolü -80

4.3. Uygulama (Fibonacci Serisi) -80 4.4. Uygulama (Dört Ýþlem Hesabý) -83

5. Ý ÇÝÇE D ÖNGÜLER -84 5.1. Uygulama (Yýldýzlardan Oluþan Kare) -85 5.2. Ýçiçe For Kullanýmý -85 5.3. Uygulama (Bir Sayýnýn Asal Çarpanlarý) -86

6. P ROGRAMIN T ESTÝ -88 6.1. Run Menüsü -88 6.1.1. 6.1.2. 6.1.3. 6.1.4.

Step Over (F8) -88 Trace Into (F7) -88 Goto Cursor (F4) -89 Program Reset (Ctrl+F2) -89

6.2. Debug Menüsü -89 6.2.1. 6.2.2. 6.2.3. 6.2.4. 6.2.5.

Breakpoint -89 Output -89 User Screen (Alt+F5) -89 Evaluate/Modify (Ctrl+F4) -89 Add Watch (Ctrl+F7) -89

B ÖLÜM T ARAMA S ORULARI -90 P ROGRAMLAMA S ORULARI -93

1.4. Uygulama (Dizinin Sýralýlýk Kontrolü) -101 1.4.1. Artýrma ve Eksiltme (Inc, Dec) -102

1.5. Uygulama (Sýnýf Ortalamasý Üstündeki Öðrenciler) -103

2. K ARAKTER D ÝZÝSÝ (S TRING ) -104 2.1. Uygulama (Bir Kelimedeki Sesli Harfler) -104 2.1.1. 2.1.2. 2.1.3. 2.1.4.

String Deðiþken Tanýmlama -104 String Okuma ve Yazma -105 Stringin Bir Karakterinin Yazdýrýlmasý -105 Stringin Mevcut Bir Karakterine Deðer Okuma -105 2.1.5. String Uzunluðunu Öðrenme (Length) -106 2.1.6. String’te 0. Karakter -106 2.1.7. Sýra Deðer Bildirimi (Ord) -106

2.2. Uygulama (Adam Asma Oyunu) -106 2.2.1. Stringlerde Toplama Operatörü -108 2.2.2. Stringleri Toplama (Concat) -109 2.2.3. String ile Kullanýlan Karþýlaþtýrma Operatörleri -109 2.2.4. Stringte Atama Ýþlemi -109 2.2.5. ASCII Kodun Karakter Karþýlýðý (Chr) -110 2.2.6. Stringe String Atama -110

2.3. String Komutlarý -111 2.3.1. Stringten Belli Bir Kesimin Kopyalanmasý (Copy) -111 2.3.2. Stringten Belli Bir Kesimin Silinmesi (Delete) -111 2.3.3. Stringe String Eklenmesi (Insert) -111 2.3.4. String Karakter Dizisinde Arama (Pos) -112

2.4. Uygulama (Cümle Ýçindeki Kelimeyi Deðiþtirme) -112 2.5. Uygulama (N Tabanýndan Onluk Tabana Çevrim) -113

BÖLÜM-5 DÝZÝLER (ARRAYS AND STRING) -95 1. T EK B OYUTLU D ÝZÝLER -97 1.1. Uygulama (Beþ Sayýnýn Sondan Baþa Yazdýrýmý) -97 1.1.1. Dizi Tanýmlama -98 - Dizinin Ýsmi -98 - Eleman Aralýðý -98 - Dizi Elemanlarýnýn Tipi -99 1.1.2. Dizilerin Okunmasý ve Read Kullanýmý -99 1.1.3. Dizilerin Yazdýrýlmasý -99

1.2. Uygulama (2 Kat 3 Fazla Kuralýnda Dizi Oluþturma) -100 1.2.1. Dizilerde Atama Ýþlemi -100 1.2.2. Dizinin Diziye Atanmasý -100

1.3. Uygulama (Bir Diziyi Baþka

2.5.1. Sayýyý Stringe Çevirme (Str) -114 2.5.2. Stringi Sayýya Çevirme (Val) -114

2.6. Uygulama (Büyük Sesli Uyumu Kontrolü) -115

3. Ý KÝ B OYUTLU D ÝZÝLER -116 3.1. Uygulama (Ýki Boyutlu Tablonun Sayýlarý Toplamý) -116 3.1.1. Ýki Boyutlu Dizilerin Tanýmlanmasý -117 - Dizinin Ýsmi -117 - Ýndis Aralýklarý -117 - Elemanlarýn Tipi -117 3.1.2. Ýki Boyutlu Dizilerin Okunmasý -117

3.2. Uygulama (Öðrenciler ve Yazýlýlarý Ortalamasý) -117 3.2.1. Tablodaki Bir Satýrýn Toplanmasý -118 3.2.2. Tablodaki Bir Sütunun Toplanmasý -118

B ÖLÜM T ARAMA S ORULARI -119 P ROGRAMLAMA S ORULARI -120

Bir Diziye Tersten Aktarým) -101 Pascal ve Program Geliþtirme

Ýçindekiler

BÖLÜM-6 ALT PROGRAMLAR (PROCEDURES AND FUNCTIONS) -121 1. A LT P ROGRAM K ULLANMANIN F AYDALARI -123 1.1. Kolay Çözüm, Kolay Hata Kontrolü -123 1.2. Alt Programlarýn Tekrar Tekrar Çaðrýlabilmesi -124 1.3. Programlarýn Kolay Anlaþýlýr ve Yönetilebilir Olmasý -124 1.4. Kütüphane Haline Getirme -124 1.5. Programcýlar Arasý Ýletiþim -124

2. A LT P ROGRAMLARLA A NA P ROGRAM A RASINDAKÝ Ý LÝÞKÝ -124 3. P ROSEDÜR A LT P ROGRAMI (P ROCEDURE ) -125 3.1. Prosedürün Parametresiz Çaðrýlmasý -125 3.1.1. Prosedürün Baþlýðý -125 3.1.2. Prosedür Kod Bloðu -125 3.1.3. Prosedürün Çaðrýlmasý -125

3.2. Uygulama (Çarpým ve ASCII Tablolarý) -126 3.2.1. Menü Prosedürü -127 3.2.2. Çarpým Tablosu Prosedürü -127 3.2.3. Genel (Global) ve Yerel (Local) Deðiþkenler -127 3.2.4. ASCII Tablo Prosedürü -129

4. P ROSEDÜRE P ARAMETRE G ÖNDERÝMÝ VE K ULLANIMI -129 4.1. Uygulama (Yýldýzlardan Oluþan Dik Üçgen) -129 4.1.1. Deðer Parametreli Prosedür Baþlýðý -130 4.1.2. Deðer Parametreli Prosedürün Çaðrýlmasý -130 4.1.3. Prosedürdeki Deðer Parametrelerinin Durumu -131

4.2. Uygulama (Üs Hesabý) -132

5. D EÐÝÞKEN P ARAMETRELÝ P ROSEDÜRLER -132 5.1. Deðiþken Parametreli Prosedürle Üs Hesabý -133 5.1.1. Deðiþken Parametreli Prosedür Baþlýðý -133 5.1.2. Deðiþken Parametreli Prosedürün Çaðrýlmasý -133 5.1.3. Deðiþken Parametresinin Bellekteki Yeri -134

6. F ONKSÝYON A LT P ROGRAMI (F UNCTION ) -135 6.1. Fonksiyonla Üs Hesabý -135 6.1.1. Fonksiyonun Prosedüre Göre Kullaným Farklýlýklarý -135 6.1.2. Fonksiyon Baþlýðý -136 6.1.3. Fonksiyon Kod Bloðu -136 6.1.4. Fonksiyonun Çaðrýlmasý -136 6.1.5. Ne Zaman Prosedür, Ne Zaman Fonksiyon -136

6.2. Uygulama (Sayý Tahmin Oyunu) -137 6.2.1. Rastgele Sayý Üretim Fonksiyonu -138 6.2.2. Sayý Üretecinin Baþlatýlmasý (Randomize) -139 Pascal ve Program Geliþtirme

6.2.3. Rastgele Sayý Üretimi (Random) -139 6.2.4. Sayý Geçerliliði Kontrol Fonksiyonu -140 6.2.5. Tahmin Sayýyý Deðerlendirme Prosedürü -141

7. Ý ÇÝÇE B ÝRBÝRÝNÝ Ç AÐIRAN A LT P ROGRAMLAR -142 7.1. Alt Programlarýn Birbirini Çaðýrma Þartlarý -143 7.1.1. 7.1.2. 7.1.3. 7.1.4.

Alt Programdan Çýkýþ (Exit) -143 Programdan Tamamen Çýkýþ (Halt) -143 Döngü Bloðundan Çýkýþ (Break) -143 Döngü Baþýndan Devam Etme (Continue) -143

B ÖLÜM T ARAMA S ORULARI -144 P ROGRAMLAMA S ORULARI -146

BÖLÜM-7 GRAFÝK (GRAPHIC) -147 1. M ETÝN (T EXT ) T ABANLI G ÖSTERÝM -149 1.1. Metin Modunda Renkli Yazýmlar -149 1.1.1. Ýstenen Konuma Gidilmesi (GotoXY) -149 1.1.2. Yazý Taban Rengini Belirleme(TextBackGround) -150 1.1.3. Yazý Üst Rengini Belirleme (TextColor) -150 1.1.4. Deðiþik Taban ve Üst Renkleriyle Yazým -150

1.2. Metin Tabanlý Diðer Ekran Komutlarý -150 -TextAttr, HighVideo, LowVideo, NormVideo -150

2. G RAFÝK T ABANLI G ÖSTERÝM -151 3. G RAFÝK K OORDÝNAT S ÝSTEMÝ -151 3.1. Uygulama (Grafik Ortamda Ekran Dinlendirici) -151 3.1.1. Grafik Kütüphanesi Kullanýmý (Uses Graph) -152 3.1.2. Grafik Sürücü ve Modu Deðiþkenleri -153 3.1.3. Grafik Sürücü ve Modunun Belirlenmesi (DetectGraph) -153 3.1.4. Grafik Ortamýnýn Baþlatýlmasý (InitGraph) -153 3.1.5. Grafik Hata Kontrolü (GraphResult) -153 3.1.6. Grafik Hata Mesajý (GraphErrorMsg) -154 3.1.7. Grafik Ekrana Piksel Koyulmasý (PutPixel) -154 3.1.8. Grafik Koordinat Sýnýrlarý ve Maksimum Renk -155 - Maksimum Yatay Piksel Adedi (GetMaxX) -155 - Maksimum Dikey Piksel Adedi (GetMaxY) -155 - Maksimum Renk Adedi (GetMaxColor) -155 3.1.9. Klavye Tuþuna Basýlma Kontrolü (KeyPressed) -155 3.1.10. Grafik Ekrandan Piksel Okuma (GetPixel) -155 3.1.11. Grafik Ortamýnýn Kapatýlmasý (CloseGraph) -155

4. G RAFÝKTE T EMEL Ç ÝZÝMLER -156 4.1. Uygulama (Sinüs ve Kosinüs Grafikleri) -156 4.1.1. Pi (Π) Sayýsý ve Radyan Açý Sabiti -158

Ýçindekiler 4.1.2. Grafik Zemin Rengi Deðiþimi (SetBkColor) -158 4.1.3. Grafik Ekraný Temizleme (ClearDevice) -159 4.1.4. Doðru Parçasý Çizimi (Line) -159 4.1.5. Dikdörtgen Çizimi (Rectangle) -159 4.1.6. Aktif Çizim Renginin Alýnmasý (GetColor) -159 4.1.7. Aktif Çizim Rengini Deðiþtirme (SetColor) -159 4.1.8. Grafik Ortamda Yazým (OutTextXY) -160 4.1.9. Verilen Açýnýn Sinüsü (Sin) -160 4.1.10. Verilen Açýnýn Kosinüsü (Cos) -160 4.1.11. Çizim Stilini Belirleme (SetLineStyle) -161 4.1.12. Ýmlecin Konumunu Deðiþtirme (MoveTo) -161 4.1.13. Doðru Çizimi (LineTo) -161 4.1.14. Grafik Sürücü ve Modunun Otomotik Tespiti (Detect) -161 4.1.15. Grafik Hata Kontrolü -161

4.2. Uygulama (Dijital ve Analog Saat) -162 4.2.1. 4.2.2. 4.2.3. 4.2.4. 4.2.5. 4.2.6.

Dos Kütüphanesi (Uses Dos) -166 Yazý Ayarlarý Kaydý (TextSettingsType) -166 Yazý Ayarlarýnýn Alýnmasý (GetTextSettings) -166 Yazý atilini Ayarlama (SetTextStyle) -166 Yazý Konumunu Ayarlama (SetTextJustify) -167 Karakter Büyüklüðü Ayarlama (SetUserCharSize) -167 4.2.7. Yazý Geniþliðinin Alýnmasý (TextWidth) -168 4.2.8. Yazý Yüksekliðinin Alýnmasý (TextHeight) -168 4.2.9. Çember Çizimi (Circle) -168 4.2.10. Çizim Modunu Ayarlama (SetWriteMode) -168 4.2.11. Bilgisayar Saatini Okuma (GetTime) -169 4.2.12. Programýn Fonksiyonlarý -169 4.2.13. Programýn Prosedürleri -170

4.3. Uygulama (Hareketli Dairenin Takibi) -170 4.3.1. 4.3.2. 4.3.3. 4.3.4. 4.3.5. 4.3.6. 4.3.7. 4.3.8. 4.3.9.

Elips Çizimi (Ellipse) -173 Doðru Çizimi (LineRel) -173 Ýmlecin Konumunu Deðiþtirme (MoveRel) -173 Grafik Ekrana Yazým (OutText) -174 Verilen Deðerin Ark Tanjantý (ArcTan) -174 Ark Çizimi (Arc) -174 Kontrol ve Fonksiyon Tuþlarýný Okuma -174 Program Ýþletimini Geciktirme (Delay) -175 Bilgisayarýn Hoparlöründen Ses Üretimi (Sound) -175 4.3.10. Bilgisayar Hoparlörünü Susturma (NoSound) -175 4.3.11. Mutlak Deðer (Abs) -175

5. G RAFÝKTE B ÝRLEÞÝK Ç ÝZÝM

VE

A LAN T ARAMA -176

5.1. Uygulama (Öðrenciler Arasý Baþarý Çubuk Grafiði) -176 5.1.1. Sabit Tanýmlý Diziler (Constant Array) -179 5.1.2. Desen ve Renk Kodu Kaydý (FillSettingsType) -179 5.1.3. Mevcut Desen ve Rengin Alýnmasý (GetFillSettings) -180

5.1.4. Desen ve Renk Kodu Deðiþimi (SetFillStyle) -180 5.1.5. Ýki Boyutlu Çubuk Grafik Çizimi (Bar) -180 5.1.6. Desen Dizi Veri Tipi (FillPatternType) -181 5.1.7. Grafik Pencere Alan Kaydý (ViewPortType) -181 5.1.8. Grafik Pencere Verilerinin Alýnmasý (GetViewSettings) -181 5.1.9. Grafik Pencere Tanýmlama (SetViewPort) -181 5.1.10. Grafik Pencere Alanýnýn Silinmesi (ClearViewPort) -182 5.1.11. Mevcut Desen Dizisinin Alýnmasý (GetFillPattern) -182 5.1.12. Özel Desen Tanýmlama (SetFillPattern) -182 5.1.13. Üç Boyutlu Çubuk Grafik Çizimi (Bar3D) -183

5.2. Uygulama (Dersler Arasý Baþarý Pasta Grafiði) -183 5.2.1. Programýn Sabit ve Sabit Tanýmlý Dizileri -185 5.2.2. Dairesel Pasta Grafik Çizimi (PieSlice) -185 5.2.3. Eliptik Pasta Grafik Çizimi (Sector) -186

6. G RAFÝKTE Ç OKLU E KRAN S AYFALARI -187 6.1. Uygulama (Gülen ve Aðlayan Yüz) -187 6.1.1. 6.1.2. 6.1.3. 6.1.4.

Kapalý Alaný Renklendirme (FloodFill) -189 Çok Sayfalý Grafik Moduna Geçiþ -189 Aktif Ýþlem Sayfasý Seçimi (SetActivePage) -189 Aktif Görüntü Sayfasý Seçimi (SetVisualPage) -189

7. G RAFÝKTE Ý KÝ B OYUTLU G EOMETRÝK D ÖNÜÞÜMLER -190 7.1. Uygulama (Kendi Etrafýnda Dönen Kutu) -190 7.1.1. 7.1.2. 7.1.3. 7.1.4. 7.1.5.

Dörtgen Kutunun Ýlk Ýþlemleri -193 Dörtgen Kutuyu Döndürme Ýþlemleri -193 Grafik Alan Hacmi Bildirimi (ImageSize) -194 Dinamik Bellek Alaný Ayýrma (GetMem) -194 Grafik Alandan Belleðe Kopyalama (GetImage) -194 7.1.6. Bellekten Grafik Alanýna Kopyalama (PutImage) -194 7.1.7. Dinamik Bellek Alanýnýn Boþaltýlmasý (FreeMem) -195

8. G RAFÝÐÝN D ÝÐER K OMUTLARI -195 -DrawPoly, FillEllipse, FillPoly -195 -GetArcCoords, GetAspectRatio, GetBkColor, GetDefaultPalette, GetDriverName, GetGraphMode -196 -GetLineSettings, GetMaxMode, GetModeName, GetModeRange, GetPalette, GetPaletteSize, GetX -197 -GetY, GraphDefaults, InstallUserDriver, InstallUserFont, RestoreCrtMode, SetAllPalette -198 -SetAspectRatio, SetGraphBufSize, SetGraphMode, SetPalette, SetRGBPalette -199

B ÖLÜM T ARAMA S ORULARI -200 P ROGRAMLAMA S ORULARI -200 Pascal ve Program Geliþtirme

Ýçindekiler

BÖLÜM-8 ÖZEL TANIMLI TÝPLER (USER DEFINED TYPES) -201 1. Y ENÝDEN T ANIMLI T ÝPLER (R EDEFINED T YPES ) -203 1.1. Prosedür ve Fonksiyonlarda Yeniden Tip Tanýmý -203

2. S IRASAL T ÝPLER (E NUMERATED T YPES ) -204 2.1. Yýlýn Mevsimlerini Tanýmlama Örneði -204 2.1.1. Sýrasal Tip Taným ve Ýþlemleri (YýlýnMevsimleri) -204 2.1.2. Deðiþken Hacmi Bildirimi (SizeOf) -205 2.1.3. Önceki Deðerin Bildirimi (Pred) -205 2.1.4. Sonraki Deðerin Bildirimi (Succ) -205

2.2. Tip Çevrimleri -206 2.3. Uygulama (Öðrenci Ders Notlarý Aðýrlýklý Ortalamasý) -206

3. A RALIKLI T ÝPLER (S UBRANGE T YPES ) -207 3.1. Uygulama (Verilen Rakamýn Yazýlý Ýfadesi) -207

4. K AYIT T ÝPÝ (R ECORD T YPE ) -210 4.1. Öðrenci Kayýt Tipi Taným Örneði -210 4.2. With Deyiminin Kullanýmý -210 4.3. Nüfus Kayýt Tipi Tanýmlama Örneði -211 4.4. Uygulama (Sýnav Not Sýralý Öðrenci Listesi) -211

5. K ÜME T ÝPÝ (S ET T YPE ) -213 5.1. Küme Tip Tanýmý ve Deðer Atama Örneði -213 5.2. Uygulama (Sesli Harf Geçiþleri) -214 5.2.1. Satýr Sonu Kontrolü (EoLn) -215 5.2.2. Küme Eleman Kontrolü (BirKr In Kume) -215

5.3. Küme Ýþlemleri (Set Operations) -215 5.3.1. 5.3.2. 5.3.3. 5.3.4.

Kesiþim Ýþlemi (Intersection Operation) -215 Birleþim Ýþlemi (Union Operation) -215 Fark Ýþlemi (Difference Operation) -216 Karþýlaþtýrma Ýþlemleri (Relational Operations) -216

5.4. Uygulama (Not Geçiþ Aralýklarý) -216

6. P ROSEDÜR T ÝPÝ (P ROCEDURAL T YPE ) -217 6.1. Prosedür Tip ile Üç Ýþlem Örneði -217 6.1.1. Uzak Adresleme Metodu (Far Call Model :{$F+}) -218 6.1.2. Özel Tanýmlý Prosedür Tip ve Deðiþkeni -218 6.1.3. Prosedür Tipi Deðiþkenin Yönlendirimi -218

B ÖLÜM T ARAMA S ORULARI -219 P ROGRAMLAMA S ORULARI -220

BÖLÜM-9 DOSYALAR (FILES) -221 1. V ERÝ D OSYASI VE T ÜRLERÝ -223 2. S IRALI E RÝÞÝMLÝ D OSYALAR (S EQUENTIAL -T EXT F ILES ) -223 2.1. Metin Dosyasýnýn Diðer Karakteristik Özellikleri -223 2.2. Metin Dosya Oluþturma ve Listeleme -224 2.3. Uygulama (Yeni Metin Dosyasý Oluþturma) -224 2.3.1. 2.3.2. 2.3.3. 2.3.4.

Metin Dosya Tipi (Text) -225 Dosya Ýle Ýliþki Kurulmasý (Assign) -225 Dosyanýn Yazým Modlu Açýlmasý (ReWrite) -225 Metin Dosyaya Yazma Deyimleri (Write, WriteLn) -225 2.3.5. Dosyanýn Kapatýlmasý (Close) -226

2.4. Uygulama (Mevcut Metin Dosyasýný Listeleme) -226 2.4.1. Dosya Mevcudiyetinin Kontrolü (DosyaMevcutMu) -227 2.4.2. Giriþ/Çýkýþ Kontrolleri Yönlendirimi ({$I-}, {$I+}) -227 2.4.3. Giriþ/Çýkýþ Ýþlemleri Sonuç Bildirimi (IOResult) -227 2.4.4. Komut Satýrý Parametre Sayýsý (ParamCount) -227 2.4.5. Komut Satýrý Parametre Adlarý (ParamStr) -228 2.4.6. Dosyanýn Okuma Modlu Açýlmasý (Reset) -228 2.4.7. Dosya Sonu Kontrolü (Eof) -228 2.4.8. Metin Dosyasýndan Okuma Deyimleri (Read, ReadLn) -228

3. M ETÝN D OSYASI K AYIT K ONUM D ÜZENÝ -229 3.1. Uygulama (Test Sýnavý Sonuç Rapor Dosyasý) -230

4. M ETÝN D OSYASININ D ÝÐER K OMUTLARI -231 - Append, Eoln -231

5. D OÐRUDAN E RÝÞÝMLÝ D OSYALAR (R ANDOM -B INARY F ILES ) -232 5.1. Doðrudan Eriþimli Dosyalarýn Diðer Özellikleri -232 5.2. Doðrudan Eriþimli Dosya Türlerý -232

6. TANIMLANMIÞ TÝPTEKÝ DOSYALAR (TYPED FILES) -233 6.1. Standart Tipte Tanýmlý Dosyalar -233 6.2. Özel Tipte Tanýmlý Dosyalar -233 6.3. Uygulama (Kayýt Tipli Yeni Test Dosyasý Üretimi) -234 6.3.1. Kayýt Tipli Dosya (File Of RecordType) -235 6.3.2. Dosyanýn Okuma ve Yazým Modlu Açýlmasý (Reset, ReWrite) -236

Pascal ve Program Geliþtirme

Ýçindekiler 6.3.3. Dosya Kayýt Adedi (FileSize) -236 6.3.4. Dosyanýn Ýstenilen Kaydýna Doðrudan Eriþim (Seek) -236 6.3.5. Dosyaya Kayýt Ekleme ve Güncelleme (Write) -237

6.4. Uygulama (Test Netlerinin Hesaplanýp Listelenmesi) -237 6.4.1. Dosyadan Kayýt Okuma (Read) -240

6.5. Uygulama (Öðrenci Test Sonuç Karnesi) -241 6.6. Dosya Kayýt Ýþlemlerinin

4.1.2. Dinamik Bellek Alanýnýn Boþaltýlmasý (Dispose) -257

4.2. Dinamik Alan Komutlarý -258 - GetMem, FreeMem, MaxAvail, MemAvail -258

5. B ELLEK K ONUM G ÖSTERGECÝNÝN D ÝZÝYLE K ULLANIMI -258 5.1. Uygulama (Metin Editör Yönetimi) -259

6. B ELLEK K ONUM G ÖSTERGECÝYLE K AYIT Ý ÞLEME -262 6.1. Uygulama (Konum Göstergeciyle Not Listesi Yönetimi) -262

Ana Menüden Takibi -242

7. T ANIMSIZ T ÝPTEKÝ D OSYALAR (U N T YPED F ILES ) -243 7.1. Uygulama (Dosyalarý Hýzlý Kopyalama ve Þifreleme) -243 7.1.1. Tanýmsýz Tipli Dosya (File) -245 7.1.2. Dosyanýn Okuma ve Yazým Modlu Açýlmasý (Reset, ReWrite) -245 7.1.3. Dosyadan Blok Veri Okunmasý (BlockRead) -245 7.1.4. Dosyaya Blok Veri Yazýlmasý (BlockWrite) -246

8. SIRALI VE DOÐRUDAN ERÝÞÝMLÝ DOSYA KOMUTLARI -246

7. B AÐLI L ÝSTELER (L INKED L ISTS ) -265 8. T EK B AÐLI L ÝSTELER (S INGLE L INKED L ISTS ) -266 8.1. Tek Baðlý Liste Oluþturma -266 8.2. Uygulama (Tek Baðlý Liste Oluþturma ve Listeleme) -267 8.3. Uygulama (Tek Baðlý Listede Arama ve Silme) -270

9. Ç ÝFT B AÐLI L ÝSTELER (D OUBLE L INKED L ISTS ) -273 9.1. Çift Baðlý Listeye Yeni Düðüm Ekleme -273 9.2. Çift Baðlý Listeden Düðüm Silme -273

B ÖLÜM T ARAMA S ORULARI -247 P ROGRAMLAMA S ORULARI -248

B ÖLÜM T ARAMA S ORULARI -274 P ROGRAMLAMA S ORULARI -274

BÖLÜM-10 BELLEK KONUM GÖSTERGECÝ (POINTER) -249

BÖLÜM-11 ÖZYÝNELEME (RECURSION) -275 1. Ö ZYÝNELEMELÝ P ROGRAMLAMA -277

1. D EÐÝÞKEN T ÜRLERÝ -251 1.1. Statik Deðiþkenler (Static Variables) -251

1.1. Uygulama (Üs Hesabý) -277

1.2. Dinamik Deðiþkenler (Dynamic Variables) -251

1.2. Özyinelemeli Modüllerin Genel Çözümü -277

2. B ELLEK K ONUM G ÖSTERGECÝ K ULLANIM Ý HTÝYACI -251

VE

3. B ELLEK K ONUM G ÖSTERGECÝ T ANIMLAMA VE A DRES Ý ÞLEMLERÝ -252 3.1. Bellek Konum Göstergeci Deðiþkeniyle Ýþlemler -253 3.2. Uygulama (Adres Ýþlemleri) -253 3.2.1. 3.2.2. 3.2.3. 3.2.4.

Deðiþkenlerin Bellek Üzerindeki Diziliþi -254 Üst Adres Kesimi (Seg) -254 Alt Adres Kesimi (Ofs) -254 Tam Adres Bildirimi (Addr) -255

3.3. Uygulama (Ekrana Doðrudan Eriþim) -255 3.3.1. Tam Adres Göstergeci (Ptr) -256

3.4. Adres Komutlarý -256 - DSeg, CSeg, SSeg, Mem, MemW, MemL -256

4. B ELLEK K ONUM G ÖSTERGECÝYLE D ÝNAMÝK A LAN K ULLANIMI -257

1.3. Uygulama (Faktöriyel Hesabý) -278 1.4. Özyinelemeli Problemin Çözüm Adýmlarý -278 1.4.1. 1.4.2. 1.4.3. 1.4.4.

Verilerin Tipi -278 Özyinelemenin Bitiþ Þartý -278 Verinin Küçültme Þekli -278 Parçalanmýþ Veri ile Sonucun Elde Edilmesi -279

1.5. Uygulama (Tamsayý Dizisinin En Büyük Elemaný) -279 1.6. Uygulama (Dizi Elemanlarýný Kaydýrmadan En Büyüðü Bulma) -280

2. Ö ZYÝNELEMELÝ A LT P ROGRAMLARDA D EÐÝÞKENLERÝN Y IÐITTA S AKLANMASI -281 2.1. Uygulama (Hanoi Kulelerinde Yer Deðiþimi) -281 2.2. Uygulama (Bir Kümenin Permutasyonlarý) -283

B ÖLÜM T ARAMA S ORULARI -286 P ROGRAMLAMA S ORULARI -286

4.1. Dinamik Bellek Alan Kullanýmý -257 4.1.1. Yeni Dinamik Bellek Alaný Açýlmasý (New) -257 Pascal ve Program Geliþtirme

Ýçindekiler

BÖLÜM-12 SIRALAMA (SORTING) -287 1. E KLEYEREK S IRALA (I NSERTION S ORT ) -290 1.1. Ekleyerek Sýralama Prosedürü -290 1.2. Ekleyerek Sýrala Etkinlik Raporu -290

2. K ABARCIK S IRALA (B UBBLE S ORT ) -290 2.1. Kabarcýk Sýralama Prosedürü -291 2.2. Uygulama (Metin Dosyasýnýn Karakter Frekansý) -291 2.3. Kabarcýk Sýrala Etkinlik Raporu -294

3. S EÇ S IRALA (S ELECTION S ORT ) -294 3.1. Seç Sýrala Prosedürü -294 3.2. Uygulama (Metin Dosyasý Kelimelerini Sýralama) -294 3.3. Seç Sýrala Etkinlik Raporu -298 3.4. Seç Sýrala Metodunun Özyineli Prosedürü -298

4. Ý KÝLÝ B ÖLEREK S IRALA (S HELL S ORT ) -298 4.1. Ýkili Bölerek Sýralama Prosedürü -299 4.2. Ýkili Bölerek Sýralama Etkinlik Raporu -299

5. H IZLI S IRALA (Q UICK S ORT ) -299 5.1. Hýzlý Sýralama Prosedürü -300 5.2. Uygulama (Öðrenci Not Listesi Sýralamalarý) -300 5.3. Hýzlý Sýrala Etkinlik Raporu -304

B ÖLÜM T ARAMA S ORULARI -304 P ROGRAMLAMA S ORULARI -304

BÖLÜM-13 ARAMA (SEARCHING) -305 1. S IRALI A RAMA (L INEAR S EARCH ) -307 1.1. Sýralý Arama Fonksiyonu -307 1.2. Sýralý Arama Etkinlik Raporu -308

2. F ARE K ESMELERÝ -317 2.1 Uygulama (Fare Ýþlemleri Prosedür ve Fonksiyonlarý) -317 2.2 Uygulama (Fare ile Dikdörtgen ve Daire Çizdirme) -319 2.2.1. Programa Dosya Dahil Edilmesi ({$I DosyaAdý}) -321 2.2.2. Farenin Mevcut Konumunu Alma -322 2.2.3. Fareyle Ara Dikdörtgenler Çizimi -322 2.2.4. Daire Olarak Otuzikigen Çizimi -322 2.2.5. Menü Seçenekleri Çizimi -322 2.2.6. Farenin Sol Tuþuna Basýldýðý Sürece Bekle -323

3. S HIFT B AYRAKLARI -323 3.1. Uygulama (Shift Bayraklarýnýn Durum Kontrolü) -323 3.1.1. Simgesel (Assembly) Kod Ekleme -324 3.1.2. Saða ve Sola Kaydýrma Operatörleri (Shr, Shl) -324 3.1.3. Tamsayýnýn 1 ile And Ýþlemine Tabi Tutulmasý -325

4. K ESMENÝN D ÝÐER K OMUTLARI -325 - GetIntVec, MsDos, SetIntVec -325

B ÖLÜM T ARAMA S ORULARI -326 P ROGRAMLAMA S ORULARI -326

BÖLÜM-15 EKLER (APPENDIX) -327 1. A SCII T ABLO -329 2. A YRILMIÞ K ELÝMELER VE S TANDART Ý FADELER -330 3. D ÝÐER S TANDART K OMUTLAR -330 4. C RT K ÜTÜPHANESÝNÝN D ÝÐER K OMUTLARI -331 5. D OS K ÜTÜPHANESÝNÝN D ÝÐER K OMUTLARI -332

2. Ý KÝLÝ A RAMA (B INARY S EARCH ) -308

5.1. Tarih ve Saat Komutlarý -332

2.1. Ýkili Arama Fonksiyonu -308

5.2. Disk Durum Komutlarý -333

2.2. Uygulama (Öðrenci Not

5.3. Dosya Ýþleme Komutlarý -333

Dosyasýnda Ýkili Arama) -308

5.4. Ýþletim Komutlarý -335

2.3. Ýkili Arama Etkinlik Raporu -311

6. P RINTER K ÜTÜPHANESÝ -336 7. K ÜTÜPHANE O LUÞTURMA -336

2.4. Ýkili Arama Metodunun Özyineli Fonksiyonu -311

B ÖLÜM T ARAMA S ORULARI -312 P ROGRAMLAMA S ORULARI -312

BÖLÜM-14 KESMELER (INTERRUPTS) -313 1. K ESMELERÝN K ULLANIMI -315 1.1. Kesmelerde Yazmaç Kullanýmý -315 1.2. Uygulama (Ekrandaki Ýmlecin Farklý Görünümleri) -315 1.2.1. Yazmaç Kayýt Tipi (Type Registers) -316 1.2.2. Kesmenin Çaðrýlmasý (Intr) -317 Pascal ve Program Geliþtirme

7.1. Kütüphane Baþlýðý (Unit Name) -337 7.2. Tanýmlama Kesimi (Interface) -337 7.3. Gerçekleþtirim Kesimi (Implementation) -337 7.4. Ýlk Ýfadeler (Initialization) -337

8. F ORWARD (P ROCEDURE D IRECTIVE ) -337 9. T URBO P ASCAL H ATA M ESAJLARI -338 9.1. Derleme Hata Mesajlarý -338 9.2. Çalýþma Zamaný Hata Mesajlarý -346

10. A LFABETÝK D ÝZÝN -347 11. K AYNAKLAR -354

BÖLÜM

1

PROGRAM GELÝÞTÝRME (PROGRAMMING)

BÖLÜM

1

PROGRAM GELÝÞTÝRME (PROGRAMMING)

1. V ERÝ Ý ÞLEME (D ATA P ROCES SING ) 2. V ERÝ Ý ÞLEME TARÝHÇESÝ 3. B ÝLGÝSAYARD A V ERÝ Ý ÞLEME

VE

S AKLAMA

3.1. Ýkilik Sayý Düzeni (Binary Numbers) 3.2. Onaltýlýk Sayý Düzeni (Hexadecimal Numbers)

4. B ÝLGÝSAYARIN G ENEL YAPISI 4.1. Ana Bellek (Ram)

5. P ROGRAM G ELÝÞTÝRME M ETODU 5.1. 5.2. 5.3. 5.4. 5.5.

Problemi Anlama Çözüm Metodu Geliþtirme (Analiz) Çözüm Metodunun Adýmlandýrýlmasý (Tasarým) Programý Kodlama (Uygulama) Programýn Testi (Test Ýþletimi)

6. P ROGRAM G ELÝÞTÝRMEDE A KIÞ Þ EMALARI 6.1. Sýralý Akýþ (Sequential Flow) 6.1.1. Problem (Çember Alan ve Çevre Hesabý)

6.2. Þartlý Akýþ (Conditional Flow) 6.2.1. Problem (Üçgenin Eþkenarlýk Kontrolü)

6.3. Tekrarlý Akýþ (Repetitive Flow) 6.3.1. Problem (1’den 100’e Kadar Sayýlarýn Yazdýrýlmasý) 6.3.2. Problem (Girilen N Adet Sayýnýn Ortalamasý) 6.3.3. Problem (Girilen N Adet Sayýnýn En Büyüðü)

7. P ROGRAMLAMA D ÝLLERÝ 7.1. 7.2. 7.3. 7.4.

Yüksek Seviyeli Diller Simgesel (Assembly) Dil Makine Dili Yaygýn Kullanýlan Bazý Yüksek Seviyeli Diller

B ÖLÜM TARAMA S ORULARI P ROGRAMLAMA S ORULARI

Program Geliþtirme (Programming) Bölüm-1

BÖLÜM-1 PROGRAM GELÝÞTÝRME (PROGRAMMING) Program geliþtirmek, günlük hayatta karþýlaþýlan problemleri çözmeye benzer. Ne kadar iyi problem çözebiliyorsanýz, o kadar iyi programlar yapabileceðiniz söylenebilir. Nasýlki günlük hayattaki problemleri çözmede, kýsa ve uzun metotlar vardýr; aynen öyle de programlar da kýsa ve uzun yollardan çözülebilir. Önemli olan en kýsa, en anlaþýlýr ve en hýzlý çözümü bulmaktýr. Problemlerin çözümünde kendi düþünce sistemimiz çok önemlidir. Bir soru sorulduðunda, hiç düþünmeden kolayca cevap verebilme, insanýn hýzlý düþünebilme yeteneðinden kaynaklanýr. Ve bu hýzla cereyan eden düþünme süreci içerisinde, elbette takip edilen bir çözüm metodu vardýr. Sonra da bu metodun, bilgisayarýn anlayacaðý program kodlama kurallarýna göre uyarlanmasý gerekir. Bazen kýsa olan bir çözüm sistemi, bilgisayara uyarlandýðýnda daha uzun veya tersi olabilir.

1. V ERÝ Ý ÞLEME (D ATA P ROCESSING ) Veriler, hammadde (giriþ verileri) olarak bilgisayara sunulur. Ýþlenen bu veriler daha faydalý bilgiye dönüþtürülüp (veri iþleme), hazýr bir ürün (çýkýþ bilgisi) olarak takdim edilir.

2. V ERÝ Ý ÞLEME TARÝHÇESÝ Bilgisayar, donaným ve yazýlým olarak iki ana bileþenden oluþur. Donaným bilgisayarýn elle tutulan, gözle görülen fiziksel kýsmýdýr. Yazýlým ise donanýmýn verimli bir þekilde kullanýlmasýný saðlayan programdýr. Önceleri hesaplamalar için, donaným olarak elin parmaklarý, fasulye taneleri veya abaküs gibi aletler kullanýlmýþtýr. Bilgi saklamak için de defter ve kalem kullanýlmýþtýr. Yazýlým olarak ise, onluk sayma sisteminde toplama, çýkarma, çarpma ve bölme gibi yöntemler geliþtirilmiþtir. Zaman ilerledikçe çok daha fazla iþlem yapýlmasý gerekir oldu. Özellikle çarpma ve bölme iþlemleri çok vakit alýyordu. Bunun üzerine geçen yüzyýlda logaritma tablolarýný kullanarak çarpma yapma mantýðý ortaya atýldý. Örnek: 16 x 32 = ?

Çözüm : Logaritma tablolarý sayesinde sayýlarýn önce 2 tabanýna göre logaritma deðerleri bulunuyor (a). Bu deðerler toplanýp, sonucun ters logaritma karþýlýðýna bakýlýyor (b). Böylece çarpma iþlemleri kolaylaþýyordu. Pascal ve Program Geliþtirme

16 x 32 a) log216=4, log232=5 b) 4+5=9, 29=512

3

Bölüm-1 Program Geliþtirme (Programming)

Bu fikirler üzerine, hesaplama tablosu için gerekli donanýmlar üretildi. Ýlk olarak Napier’s bones, ardýndan da sürgülü hesap cetveli (slide rule) geliþtirildi. Bu cetvel bir asýr evveline kadar kullanýldý. Pascal, bir hesap makinesi yaptý; ama çok hata yaptýðýndan tutulmadý. 1820’de ise Charles Babbage bugünkü bilgisayarýn birçok özelliklerini içeren analitik bir makine yaptý. Bu makine, birçok karmaþýk iþlemleri yapmak üzere programlanabiliyordu. Bütün bu buluþlar ve fikirler bugünkü bilgisayarlarýn temellerini oluþturdu ve ilk elektronik bilgisayar 1930’da Atanasoff tarafýndan Iowa State Üniversitesinde tasarlandý. 1946’da ise Pensilvanya Üniversitesinde ENIAC ismiyle üretildi. Bu bilgisayar çok aðýr ve büyüktü. Ýlk ticari olarak satýlan bilgisayar, 1951’de çýkan UNIVAC oldu ve bu þekilde bilgisayarlarýn hýzlý geliþimi devam etti. Yakýn zamana kadar bilgisayarlar, sayýlý kiþilerin alabileceði ve eve sýðmayacak büyüklükte olan makinelerdi; ama bugün herkes evine bir bilgisayar alabilecek duruma gelmiþtir ve günlük hayatýnda kullanabileceði bir makine olmuþtur.

3. B ÝLGÝSAYARD A V ERÝ Ý ÞLEME

VE

S AKLAMA

Bilgisayarda bilgiler, 0 ve 1 kümelerinden oluþur. Bunun sebebi, bilgilerin elektronik devreler üzerinde ifade edilebilmesini saðlamaktýr. Bilgileri oluþturan 0 ve 1’ler, bu devreler üzerinde birbirine göre farklý voltaj seviyeleriyle temsil edilirler. denir. denir.

Bilgisayarýn iþleyebileceði en küçük bilgi parçasýna (0 veya 1) bit 8 bit’in bir araya gelmesiyle oluþan anlamlý en küçük bilgiye de byte

Günlük hayatta kullanýlan bilgiler 0 ve 1’lerden oluþmamaktadýr. Kullanýlan sayýlar, harfler ve resimler ilk önce bilgisayarýn anlayacaðý bilgiye, yani ikili sayý sistemine dönüþtürülür. Ýþlemlerin tümü bu sistemde yapýlýr, sonuçlar bu sistemle üretilir ve çýkýþ kullanýcýnýn anlayabileceði onluk sisteme geri dönüþtürülür. Bilgi dönüþümü için birçok yöntem geliþtirilmiþtir. Bu yöntemlerden

‘A’ .. ’Z’ : 65 .. 90 ‘a’ .. ‘z’ : 97 .. 122 en önemli ikisi ASCII ve EBCDIC sistemleridir. ASCII sisteminde 256 karak‘0’ .. ‘9’ : 48 .. 57 ter olup herbir karakterin özel bir kodu vardýr. Bu kod ikilik düzene çevril-

erek saklanýr. Yanda da görüldüðü gibi, ‘A’ ile ‘Z’ arasýndaki büyük karakterlerin kodu 65 ile 90 arasýnda, küçük karakterlerin kodu ise 97 ile 122

4

Pascal ve Program Geliþtirme

Program Geliþtirme (Programming) Bölüm-1

arasýnda deðiþir.

3.1. Ýkilik Sayý Düzeni (Binary Numbers) Bir sayýyý ikilik düzene çevirmek için, sayý sürekli ikiye bölünür ve kalanlar tersten okunur. Örneðin, 13 sayýsýnýn ikilik düzene çevrimi yandaki gibidir: Ýkilik düzendeki bir sayýyý onluk düzene çevirmek için, en saðdan baþlayarak rakamlar 2’nin üsleriyle çarpýlýr ve sonuçlar toplanýr. Örnek: (1101)2= (?)10

Çözüm : (1101)2 = 1 x 20 + 0 x 21 + 1 x 22 + 1 x 23 = 1 + 0 + 4 + 8 = 13

3.2. Onaltýlýk Sayý Düzeni (Hexadecimal Numbers) Ýkilik düzende uzun olarak ifade edilebilen bir sayý, onaltýlýk düzende çok daha kýsa gösterilebilir. Bu da anlaþýlýrlýðý artýrýr. 4 basamaklý ikilik düzendeki bir sayý, onaltýlýk düzendeki 1 basamaklý rakama karþýlýk gelir. Ýkilik düzende 2’ye kadar 0 ve 1 rakamlarý, onluk düzende 0 ile 9 arasýndaki rakamlar, onaltýlýk düzende ise 0 ile 15 arasýndaki rakamlar kullanýlabilir. 10 ile 15 arasýndaki rakamlarý temsilen tek basamaklý harfler (A .. F) kullanýlýr. Örnek: (10100011)2= (?)16 Çözüm : Ýlk 4 bit,

(1010)2 =(10)10 =(A)16 Sonraki 4 bit, (0011)2 =(3)10 =(3)16 =(A3)16

Örnek: (FE)16= (?)2 Çözüm : (F)16=(1111)2, (E)16=(1110)2, (FE)16=(11111110)2

4. B ÝLGÝSAYARIN G ENEL YAPISI Bilgisayarda temel olarak, giriþ birimi, çýkýþ birimi, merkezi iþlem birimi ve veri saklama birimleri bulunur. Veriler bilgisayara giriþ birimleri (klavye, fare,..) vasýtasýyla aktarýlýr. Ýþlenen veriler, çýkýþ birimleri (ekran, yazýcý,..) aracýlýðýyla kullanýcýya sunulur. Merkezi iþlem birimi, aritmetik, mantýk iþlemlerini ve bilgisayarýn genel yönetimini üstlenir. Veri saklamak için ana bellek ve ikincil bellek (secondary storage) adý verilen iki ayrý birim bulunur. Ana bellekte veriler bilgisayar açýk olduðu müddetçe tutulur. Disket ve sabit disk gibi ikincil bellekler ise verilerin bilgisayar kapalýyken dahi saklandýðý birimlerdir. Bir program sabit diskten çalýþtýrýldýðýnda ana belleðe kopyalanýr ve merkezi iþlemci (CPU-Central Processing Unit) ile olan haberleþmesi ana bellekten devam eder. Bunun sebebi, ana belleðin, sabit diske göre çok daha hýzlý eriþimli olmasýndandýr. Bilgisayarda, iþlenecek veriler giriþ birimlerinden veya ikincil bellekten Pascal ve Program Geliþtirme

5

Bölüm-1 Program Geliþtirme (Programming)

ana belleðe gelir. Ýþlemci bu verileri ana bellekten alýr, iþler ve sonuçlarý yeniden ana bellekte saklar. Ana bellekteki bu veriler, istenildiðinde çýkýþ birimlerine gönderi-lebilir. Bilgilerin uzun süre saklanmasý için ikincil bellekler kullanýlýr. Bilgisayardaki bilgi akýþý aþaðýda olduðu gibidir:

4.1. Ana Bellek (Ram) Ana bellek, programlama açýsýndan en önemli birimlerden biridir. Ana bellek, arka arkaya dizilmiþ milyonlarca veri hücresinden oluþur. Bu hücrelerin herbirisinin bir adresi vardýr ve bu adres vasýtasýyla doðrudan eriþilebilir. Her bir hücre bilgi içerir. Bir hücreye bilgi yazýldýðýnda eski bilgi tamamen yok olur ve bir daha elde edilemez. Ana bellekte bilgiler, bilgisayar açýk olduðu müddetçe tutulabilir. Bu sebeple bilgiler, bilgisayar kapatýlmadan önce disket, disk gibi ikincil bellek ortamýna kaydedilmelidir.

5. P ROGRAM G ELÝÞTÝRME M ETODU Sorulan programýn geliþtirilebilmesi için birçok aþamadan geçilmesi gerekmektedir. Bu aþamalar þu þekilde sýralanabilir:

5.1. Problemi Anlama Bir problemin çok iyi þekilde anlaþýlmasý gerekir. Problemin çözümü için hangi verilerin elde olduðu ve istendiði iyi bilinmelidir. Ýyi bilinmeyen bir konu üzerinde program yapýlmasý isteniyorsa, evvela konunun araþtýrýlýp öðrenilmesi gerekir. Þayet problem net bir þekilde anlaþýlmaz ise, program geliþtirmenin ortasýnda deðiþikliklere gitmek çok daha zor olacaktýr.

5.2. Çözüm Metodu Geliþtirme (Analiz) Problemi iyice anladýktan sonra, çözümü için bir metot geliþtirmek gerekir. Bu metot, ya daha evvel çözülen problemlere benzetilir ya da baþtan yeni bir yöntem geliþtirilir. Problemi en ufak detaylarýna kadar alt pro-

6

Pascal ve Program Geliþtirme

Program Geliþtirme (Programming) Bölüm-1

gramlara bölmek ise, en iyi baþlangýçlardan birisidir.

5.3. Çözüm Metodunun Adýmlandýrýlmasý (Tasarým) Çözüm metoduna iliþkin somut adýmlar belirlenir. Herbir adým kendi içinde kapalý bir noktasý kalmayýncaya kadar detaylandýrýlýr.

5.4. Programý Kodlama (Uygulama) Belirlenen somut adýmlar, seçilen bir bilgisayar dilinin kurallarý çerçevesinde kodlanýr. Program kodlamada yapýlabilecek yazým hatalarý, dilin kurallarýna göre düzeltilir.

5.5. Programýn Testi (Test Ýþletimi) Bir program her ne kadar bitmiþ gözükse de birçok hatalar içerebilir. Bir veri için çalýþýp, baþka bir veride yanlýþ sonuçlar üretebilir. Bu yüzden program kritik bazý uç deðerlerle test edilip, tam doðru çalýþtýðýna emin olunmalýdýr. Çoðu yazýlým þirketleri programlarýný piyasaya sürmeden önce, deneme sürümlerini (beta versions) belirlediði bazý kiþi ve kurumlara daðýtýr. Onlardan gelen istek ve hata bildirimlerini göz önüne alarak programlarýnýn yeni sürümlerini üretirler.

6. P ROGRAM G ELÝÞTÝRMEDE A KIÞ Þ EMALARI Bu konu baþlýðý altýnda örnek problemler verilecektir. Hedef, bu problemlere en kýsa ve anlaþýlýr çözümler bulmaktýr. Bu problemlerin çözümünde, yukarýda belirtilen program geliþtirme metodunun aþamalarý (analiz, tasarým, program kod ve test) takip edilecektir. Yalnýz, program kodu ve testi yerine akýþ þemasý çizilecektir. Akýþ þemasý (flowchart), programcý tarafýndan hazýrlanan ve programýn genel görünümünü, planýný, akýþ yönünü ve sorunun çözümündeki adýmlarý kapsayan çizimsel bir gösterimdir. Bir resim birçok kelimeden daha fazla anlam ifade eder kaidesince, akýþ þemasý programýn anlaþýlýr olmasýný saðlar. Program kodu, Ýngilizce yazýlmýþ bir metin gibi olduðundan, hatayý bulmak zorlaþabilir. Halbuki akýþ þemasýndaki çizimsel akýþ, hatayý bulmayý kolaylaþtýrýr. Genel olarak programlarýn kod akýþý üç ana gruba ayrýlýr: 1. Sýralý Akýþ (Sequential Flow), 2. Þartlý Akýþ (Conditional Flow), 3. Tekrarlý Akýþ (Repetitive Flow).

6.1. Sýralý Akýþ (Sequential Flow) Bütün iþlemlerin sýrayla birbirini takip ettiði akýþtýr. Daha evvelki iþlemlere geri dönülmez ve karþýlaþtýrma yapýlmaz. Yandaki þekilde, adýmlar halinde belirtilen her bir kutuya iþlem (process) kutusu denir. Pascal ve Program Geliþtirme

7

Bölüm-1 Program Geliþtirme (Programming)

6.1.1. Problem (Çember Alan ve Çevre Hesabý) Yarýçapý verilen çemberin alanýný ve çevresini hesaplayan program akýþýný geliþtiriniz.

Çözüm Metodu (Analiz) Çemberin yarýçapý okunur. Alan=Pi x r2 ve Çevre=2 x Pi x r formülleriyle hesaplanýr ve sonuçlar ekrana yazdýrýlýr.

Çözümün Adýmlandýrýlmasý (Tasarým) ve Akýþ Þemasý

1. Çemberin yarýçapýný oku. 2. Alaný hesapla; 2.1. Yarýçap deðerinin karesini, pi sayýsý ile çarp (Alan=Pi x r2) 3. Çevresini hesapla; 3.1. Yarýçap deðerinin iki katýný pi sayýsý ile çarp (Çevre=2 x Pi x r) 4. Hesaplanan, alan ve çevre deðerlerini ekrana yazdýr ve programý sonlandýr.

6.2. Þartlý Akýþ (Conditional Flow)

Þartlý akýþta bir karþýlaþtýrma ifadesi vardýr. Bu ifadenin doðru olmasý durumunda bir koldan, yanlýþ olmasý durumunda diðer koldan gidilir. Þartlý yola tek yoldan girilir ve kollardaki iþlemler bittikten sonra da tek bir yolda birleþip yola devam edilir.

Karþýlaþtýrma doðruysa (E:Evet), Ýþlemler1 yapýlacaktýr. Bu adýmda pek çok iþlemler yaptýrýlabilir. Hatta Ýþlemler1 kýsmýna yeni bir karþýlaþtýrma daha eklenebilir. Karþýlaþtýrma yanlýþsa (H:Hayýr), Ýþlemler2 yapýlacaktýr. Þayet, (H:Hayýr) kolunda yaptýrýlacak iþlem yoksa Ýþlemler2 kýsmý boþ býrakýlýr.

8

Pascal ve Program Geliþtirme

Program Geliþtirme (Programming) Bölüm-1

6.2.1. Problem (Üçgenin Eþkenarlýk Kontrolü) Üç kenarýnýn uzunluðu girilen bir üçgenin eþkenar olup olmadýðýný test edecek program akýþýný geliþtiriniz. Analiz Üçgenin üç kenar uzunluðu okunur. 1. kenar ile 2. kenar uzunluðu

karþýlaþtýrýlýr. Bu kenarlar birbirine eþitse ve 3. kenara da eþitse, üçgen eþkenardýr. Diðer tüm durumlarda üçgen eþkenar deðildir. Tasarým ve Akýþ Þemasý 1. Üç kenar uzunluðunu oku. 2. 1. kenar ile 2. kenar uzunluðunu karþýlaþtýr; 2.1. 1. ve 2. kenar eþitse, birini 3. kenar ile de karþýlaþtýr; 2.1.1. Eþitse, ekrana “Üçgen eþkanardýr” yazdýr. 2.1.2. Eþit deðilse, ekrana “eþkanar deðildir” yazdýr. 2.2. 1. ve 2. kenar eþit deðilse ekrana “eþkenar deðildir” yazdýr. 3. Programý sonlandýr.

6.3. Tekrarlý Akýþ (Repetitive Flow) Þu ana kadarki bütün iþlemler sadece bir defa yapýlmaktaydý. Halbuki bilgisayarýn en büyük avantajý, ayný iþlemleri hiç sýkýlmadan çok defa tekrar edebilmesidir. Genel olarak üç tip tekrarlý akýþ sayýlabilir: Birincisinde, karþýlaþtýrma doðru olduðu müddetçe iþlemler yapýlýr. Karþýlaþtýrma yanlýþ olduðunda programýn sonraki adýmýna geçilir. Bu akýþýn iþlemler kýsmýnda, karþýlaþtýrmayý yanlýþ duruma getirecek bir ifade bulunmalýdýr. Aksi halde programýn diðer adýmlarýna geçiþ saðlanamaz. Ýkincisinde, birincisinden farklý olarak, önce iþlemler Pascal ve Program Geliþtirme

9

Bölüm-1 Program Geliþtirme (Programming)

sonra karþýlaþtýrma yapýlýr ve karþýlaþtýrma doðru olana kadar iþlemler devam eder. Üçüncüsünde ise iþlemler belli sayýda (N adet) tekrar eder ve sonraki iþlem adýmýna geçilir.

6.3.1. Problem (1’den 100’e Kadar Sayýlarýn Yazdýrýlmasý) 1’den 100’e kadar sýralý sayýlarý yazdýran program akýþýný geliþtiriniz. Analiz Sayma iþlemine 1 ile baþlanýr. Sayaç, ekrana yazdýrýlýr ve deðeri bir artýrýlýr. Bu iþlemlere sayaç 100’den küçük veya eþit olduðu sürece devam edilir.

Tasarým ve Akýþ Þemasý

10

Pascal ve Program Geliþtirme

Program Geliþtirme (Programming) Bölüm-1

1. Sayacý 1’e eþitleyerek, sayma iþlemini baþlat. 2. Sayaç ile 100’ü karþýlaþtýr. Küçük veya eþit olduðu sürece; 2.1. Sayacý ekrana yazdýr. 2.2. Sayacý bir artýr. 3. Programý sonlandýr.

Akýþ Testi Sayaç önce 1 deðerini alýr ve karþýlaþtýrma iþlemi yapýlýr. Karþýlaþtýrma doðru olduðundan ekrana sayacýn deðeri yazýlýr ve deðeri bir artýrýlýr. Sayaç 2 olduðunda karþýlaþtýrma doðru olup ekrana yazýlýr. Bu þekilde sayaç artýrýlarak deðeri 101 olana kadar devam eder.

6.3.2. Problem (Girilen N Adet Sayýnýn Ortalamasý) Girilen N sayýnýn ortalamasýný bulacak program akýþýný geliþtiriniz. Analiz Pascal ve Program Geliþtirme

11

Bölüm-1 Program Geliþtirme (Programming)

Kaç adet sayý girileceði (N) okunur. 1’den N’e kadar sayýlar okunur ve toplama eklenir. En sonunda bulunan toplam deðeri, N’e bölünerek ortalama elde edilir. N adet sayýnýn toplanmasý, bir havuzu N adet musluðun doldurmasýna benzetilebilir. Her sayý toplam havuzuna ilave edilir. Tasarým ve Akýþ Þemasý 1. Kaç sayý okunacaðýný (N) al. 2. Toplamý sýfýrla.

Örnek Toplam MOV MOV ADD MOV

AX, Sayi1 BX, Sayi2 AX, BX Toplam, AX

3. N defa aþaðýdaki iþlemleri tekrarla (Sayaç D[1], D[2], D[3], D[4], D[5] --> D[5], D[6], D[7], D[8], D[9]

Eleman aralýðýnda sayýlabilir tipten deðerler kullanýlmalýdýr. Bu tipin sade-ce tamsayý deðerler olmasý gerekmez; karakter (char) veya mantýksal (boolean) tipte deðer aralýklarý da tanýmlanabilir. Aþaðýdaki verilen tanýmlamalar geçerlidir: For k:=1 To 5 Do Read(D[k]);

For k:=5 DownTo 1 Do Write(D[k],' ');

Var Var Var Var Var Var

D D D D D D

: : : : : :

Array[1..10] Of Array[‘A’..‘H’] Of Array[‘f’..‘n’] Of Array[Char] Of Array[False..True] Of Array[Boolean] Of

Integer --> Integer --> Integer --> Integer --> Integer --> Integer -->

D[1]’den D[10]’a kadar 10 elemanlý dizi D[‘A’]’dan D[‘H’]’a kadar 8 elemanlý dizi D[‘f’]’den D[‘n’]’ye kadar 9 elemanlý dizi 256 elemanlý dizi D[False]’dan D[True]’ya kadar 2 elemanlý dizi D[False]’dan D[True]’ya kadar 2 elemanlý dizi

Var D : Array[Integer] Of Integer; dizi deðiþkeni, -32768 ile 32767 indis aralýðýnda 65536 dizi elemanýný içerir. Bu dizi, 65536 x 2 Byte = 128 Kilobyte hacminde olup 64 KB’lik statik bellek sýnýrlarýný aþtýðýndan tanýmlanamaz.

- Dizi Elemanlarýnýn Tipi Dosya tipleri (text, file) haricindeki bütün tiplerle tanýmlanabilir. Aþaðýdaki tanýmlamalar geçerlidir: Var Var Var Var

D D D D

: : : :

Array[1..10] Array[‘A’..‘H’] Array[‘f’..‘n’] Array[Char]

Of Of Of Of

Integer Real Char Boolean

--> --> --> -->

10 8 9 256

elemanlý tamsayý dizisi elemanlý gerçek sayý dizisi elemanlý karakter dizisi mantýksal eleman içeren dizi

1.1.2. Dizilerin Okunmasý ve Read Kullanýmý Pascal ve Program Geliþtirme

99

Bölüm-5 Diziler (Arrays And String)

For döngü deyimi, dizinin okuyarak aktarýr.

5 elemanýn her birisine teker teker deðer

Döngü içinde Read deyimiyle okutulan tamsayýlar, ancak aralarýna konan birer boþluk ile ayýrt edilebilir. Tüm sayýlar girildikten sonra bir kez enter tuþuna basmak yeterlidir. Halbuki ReadLn deyimiyle okunan sayýlarýn herbirisinden sonra, enter girilmesi zaruridir. ReadLn(D) deyiminde olduðu gibi, dizi deðiþkenleri, string karakter dizisi hariç, bütün olarak okunamaz. Dizi elemanlarýna deðer okuma, iþleme ve yazdýrma teker teker yapýlabilir.

1.1.3. Dizilerin Yazdýrýlmasý For döngü deyimi, dizinin 5 elemanýnýn her birisini yan yana tersinden yazdýrýr. Test Ýþletimi

Yeni Dizi: 2 7 17 37 77 157 317 637 1277 2557

Döngü içinde dizi elemanlarý, WriteLn deyiminin kullanýmýyla alt alta yazdýrýlýr. Yan yana yazdýrmak için ise Write deyimi kullanýlýr. Örnek: k=4 deðerine ve Notlar da 10 elemanlý tamsayý dizisi olup þu deðerlere sahiptir: Notlar --> 3, 2, 4, 5, 5, 5, 1, 4, 4, 4. Buna göre aþaðýdaki ifadelerin ekran çýktýlarýný bulunuz.

D[1]:=2;

For k:=2 To 10 Do D[k]:=D[k-1]*2+3;

100

Pascal ve Program Geliþtirme

Diziler (Arrays And String) Bölüm-5

a) WriteLn(Notlar[9]-3);

Notlar[9]-3 ifadesi Notlar dizisinin 9. elemanýndan 3 çýkmýþ halini yazar; yani, Notlar[9]=4 olduðundan ekrana 1 yazar.

b) WriteLn(Notlar[9-3]);

Notlar[9-3] ifadesi Notlar dizisinin 9-3=6. elemanýný, yani 5’i yazar.

c) WriteLn(Notlar[2*k-3]);

Notlar[2*k-3] ifadesi, Notlar dizisinin 2*k-3 = 2*4-3 = 5. elemanýný, yani 5’i ekrana yazar.

d) Toplam:=0; For k:=3 To 6 Do Toplam:=Toplam+Notlar[k]; WriteLn(Toplam);

Notlar dizisinin 3 ile 6 arasýndaki elemanlarýný yan tabloda verildiði gibi yýðmalý olarak toplayarak ekrana 19 yazar.

e) For k :=2 To 8 Do If Notlar[k]>3 Then Write(Notlar[k],’ ‘); Notlar dizisinin 2 ile 8 arasýndaki elemanlarýndan, 3’ten büyük olanlarýný yazar. Yan tabloda gösterildiði gibi, ekran çýktýsý 4, 5, 5, 5, 4 olur.

1.2. Uygulama (2 Kat 3 Fazla Kuralýnda Dizi Oluþturma) Ýlk elemaný 2 olan ve her elemaný, bir evvelkinin 2 katýnýn 3 fazlasý olan 10 elemanlý bir dizi oluþturan programý geliþtiriniz. Analiz Öncelikle dizinin ilk elemanýna 2 deðeri verilir. Sonra 2. elemandan 10. elemana kadar dizi elemanlarý döngü içinde hesaplatýlýr. Dizi[k]=Dizi[k-1]x2+3 olduðundan, dizinin 2. elemaný 2*2+3=7, 3. elemaný 7*2+3=17 olur ve bu þekilde devam eder. Program Kodu (2Kat3Fzl.Pas)

Pascal ve Program Geliþtirme

101

Bölüm-5 Diziler (Arrays And String)

Program Dizi_Olustur; Var Dizi : Array[1..10] Of Word; k : Byte; Begin Dizi[1]:=2; For k:=2 To 10 Do Dizi[k]:=Dizi[k-1]*2+3; WriteLn('Yeni Dizi:'); For k:=1 To 10 Do Write(D[k],' '); End.

{10 elemanlý tamsayý dizisi} {1.2.1.} {1.2.1.}, {1.2.2.}

Kritik

1.2.1. Dizilerde Atama Ýþlemi Dizinin birinci elemanýna 2 deðerini aktarýr. Dizinin herbir elemanýna deðiþkende olduðu gibi, iki yoldan deðer atanabilir. Birincisi, dizi elemanýný okumak (Read(D[3])); ikincisi de doðrudan deðer While (k Dizinin 5. elemanýna a ile b’nin toplamýný aktarýr. D[k]:=D[k-1]*2+3; --> Dizinin k. elemanýna k-1. elemanýn 2 katýnýn 3 fazlasýný aktarýr.

D dizisinin 1. elemaný olan 2 deðeriyle 2. elemanýný, bununla 3. elemanýný ve bu þekilde 10. elemanýna kadar tüm diziyi yandaki tabloda verildiði gibi hesaplar.

1.2.2. Dizinin Diziye Atanmasý If k=10 Then WriteLn('Dizi sýralýdýr') Else WriteLn('Dizi sýralý deðildir'); Ýki dizi, ayný tip ve uzunlukta olmak þartýyla, biri diðerine tüm elemanlarýyla birlikte, A:=B þeklinde bir atama ifadesiyle aktarýlabilir. Aþaðýda verilen örnek programlardan birincisinde, A ve B dizilerinin eleman sayýlarý farklý olduðundan, tip uyuþmazlýðý (type mismatch) hatasý verir. Ýkincisinde ise iki dizi de týpatýp ayný olduðundan, B dizisinin elemanlarý A dizisine hatasýz bir þekilde aktarýlýr. Örnek Program Kodu-1

Var A : Array[1..100] Of Integer; B : Array[1..10] Of Integer; Begin A:=B; End.

Örnek Program Kodu-2

Var A, B : Array[1..100] Of Integer; Begin A:=B; End.

1.3. Uygulama (Bir Diziyi Baþka Bir Diziye Tersten Aktarým) Yanda görüldüðü gibi, bir diziyi baþka bir diziye tersten aktaran programý geliþtiriniz. Analiz Dizinin 6 elemanlý olduðu varsayýlýrsa, yandaki gibi atama yapýlmalýdýr. Bunu gerçekleþtirmek için birkaç yöntem uygulanabilir: 1. A dizisinin indisi birer birer artmasý gerektiðinden, For döngü deðiþkeni A dizisinin indisi olur. B dizisinin indisi ise, son deðerden baþlayarak birer birer azalmasý gerektiðinden, B dizisi indis deðiþkenine son deðer verilir ve her döngü bloðunun iþlenmesinde bu deðer bir eksiltilir. 2. 1. eleman 6. elemana, 2. eleman 5. elemana atanacaktýr. Dikkat edildiðinde, bu rakamlar arasýnda bir iliþki olduðu görülür. B dizisinin indisi, toplam eleman sayýsýnýn bir fazlasýnýn, A dizisinin indisinden farký alýnarak bulunur. Yani, A dizisinin indisi For döngü deðiþkeniyle sayýlýrken B dizisi için ikinci bir deðiþken kullanmaya gerek yoktur. Çünkü, B dizisinin indisi, N+1A=7-A formülüyle bulunur. Program Kodu (TersAta.Pas)

Pascal ve Program Geliþtirme

103

Bölüm-5 Diziler (Arrays And String)

{1} For k:=1 To 20 Do

{2} For k:=1 To 20 Do If Notlar[k]>Ortalama Then Write(Notlar[k],' ');

Program Kodu-1. Yol

Program Diziyi_Tersten_Atama; Var k, p, N : Integer; Begin Write(‘Kaç elemanlý bir dizi ? ‘); ReadLn(N); WriteLn(‘Bir dizi giriniz’); For k:=1 To N Do Read(A[k]); p:=N; For k:=1 To N Do Begin B[p]:=A[k]; p:=p-1; End; Write(‘Tersten : ‘); For k:=1 To N Do Write(B[k]); End.

Program Kodu-2. Yol

Program Diziyi_Tersten_Atama; Var k, N : Integer; Begin Write(‘Kaç elemanlý bir dizi ? ‘); ReadLn(N); WriteLn(‘Bir dizi giriniz’); For k:=1 To N Do Read(A[k]); For k:=1 To N Do B[N+1-k]:=A[k]; Write(‘Tersten : ‘); For k:=1 To N Do Write(B[k]); End.

1.4. Uygulama (Dizinin Sýralýlýk Kontrolü) 10 elemanlý bir dizinin küçükten büyüðe sýralanmýþ olup olmadýðýný kontrol eden programý geliþtiriniz. Var Kelime : String[50];

104

Pascal ve Program Geliþtirme

Diziler (Arrays And String) Bölüm-5

Analiz Bu tür sýralama iþlemlerinde genellikle kullanýlan yol, önce kontrol iþleminin doðru biteceðini varsaymak, daha sonra kontrol iþlemini bozan bir duruma rastlanýrsa, kontrol iþleminin yanlýþ olduðuna karar vermektir. Ýlerleyen sayfadaki çizimlerde, iki dizi için yapýlacak karþýlaþtýrmalar görülmektedir. Soru iþareti (?) karþýlaþtýrma yapýlýyor anlamýna gelmektedir. 1. þekilde, karþýlaþtýrma sonuçlarýnýn hepsi küçük çýktýðýndan, döngü, dizinin eleman sayýsý kadar devam eder ve dizinin sýralý olduðuna hükmedilir. 2. þekildeki karþýlaþtýrmalarda, döngü, 3. karþýlaþtýrma büyük çýktýðýndan dolayý sona erer ve dizinin sýralý olmadýðýna hükmedilir. Tasarým ve Akýþ Þemasý

Write('Bir kelime giriniz : '); ReadLn(Kelime);

1. 10 elemanlý diziyi oku. 2. Dizi indis deðiþkenine (k) 1 deðerini aktar. 3. Dizinin k. elemaný, (k+1). elemanýndan küçük veya eþit ve k, 10’dan küçük olduðu müddetçe; 3.1. k’yý bir artýr. 4. k’nýn deðerini kontrol et; 4.1. Þayet k, 10 ise, dizide sýrayý bozan hiçbir eleman yok demektir. 4.2. k,10 olamadan döngü bittiyse, dizi sýrasýz düzendedir. 5. Programý sonlandýr. Pascal ve Program Geliþtirme

105

Bölüm-5 Diziler (Arrays And String)

Program Kodu (DiziSira.Pas) For k:=1 To Length(Kelime) Do

Program DiziSiralimi; Var A : Array[1..11] Of LongInt; k : Byte; Begin Write('10 elemanlý tamsayý dizisini giriniz : '); For k:=1 To 10 Do Read(A[k]); k:=1; While (k0 istenir. Kullanýcýnýn tahmin hakký kelimenin karakter sayýsý kadardýr. Analiz Tahmin edilecek kelime okunduktan sonra, bu kelime ile ayný uzunlukta ve yýldýzlardan oluþan bir baþka kelime tanýmlanýr. Kullanýcýdan tahmin kelimenin bulunmasý için karakterler alýnýr. Bu karakterler kelimede varsa, yýldýz kelimesinin ayný konumdaki indislerine yerleþtirilir. Bu iþlem, tahmin kelime ile yýldýz kelime eþit olana kadar veya kullanýcýnýn hak sayýsý bitene kadar devam eder. Yandaki gösterimde, tahmin kelime, ‘ERZURUM’ dur. Kelime2, ilk baþta 7 harfli yýldýzlardan oluþan bir string olarak tanýmlanmýþ ve her doðru tahminden sonra gerekli deðiþiklik yapýlmýþtýr. Tasarým ve Akýþ Þemasý

112

Pascal ve Program Geliþtirme

Diziler (Arrays And String) Bölüm-5

1. Tahmin edilecek kelimeyi oku. 2. Kullanýlan hak sayýsýný 1 yap. 3. Kelimenin uzunluðunu bir deðiþkene (Uzunluk) aktar. 4. Yýldýzlardan oluþan ikinci kelimeyi oluþtur. 4.1. Uzunluk kadar, Kelime2 karakter dizisini yýldýz (*) ile topla. 5. Kelime2, kelimeye eþit olmadýðý ve kullanýlan hak sayýsý, uzunluktan küçük veya eþit olduðu müddetçe; 5.1. Tahmin edilen karakteri oku. 5.2. Tahmin edilen karakterin kelimede var olup olmadýðýný kontrol et. 5.2.1. Yok isimli mantýksal deðiþkene True deðerini aktar. 5.2.2. k deðiþkenin 1’den Uzunluk’a kadar her deðeri için; 5.2.2.1. Þayet tahmin, Kelime[k]’ya eþitse, Kelime2[k]’yý tahmin edilen karaktere eþitle ve Yok deðiþkenini False yap. 5.2.3. Yok deðiþkeni, True ise kullanýlan hak sayýsýný bir artýr. 6. Kullanýlan hak sayýsýný uzunluk ile karþýlaþtýr. 6.1. Hak sayýsý büyükse, kelime bulunamamýþ demektir. 6.2. Küçük veya eþitse, kelime bulunmuþ demektir. 7. Programý sonlandýr.

Program Kodu (AdamAs.Pas) Program Adam_Asma_Oyunu; Uses Crt; Var Kelime, Kelime2: String[30]; Hak, k, Uzunluk : Integer; Tahmin, Ch : Char; Yok : Boolean; Begin {Adam_Asma_Oyunu} ClrScr; WriteLn(‘Tahmin edilecek kelimeyi giriniz ‘); Ch:=UpCase(ReadKey); While Ch#13 Do Begin If Ch In [‘A’..’Z’] Then Begin Kelime:=Kelime+Ch; Write(‘*’); End; Ch:=UpCase(ReadKey); End; {While Ch#13 Do} Hak:=1; Uzunluk:=Length(Kelime); For k:=1 To Uzunluk Do Kelime2:=Kelime2+’*’; While (HakUzunluk Then WriteLn(‘Yazýk ki bulamadýnýz.’) Else WriteLn(‘Tebrikler buldunuz.’); End.

Kritik

2.2.1. Stringlerde Toplama Operatörü Enter (ASCII kod karþýlýðý 13’tür) tuþuna basýlmadýðý sürece, girilen karakteri okur ve kelime string’ine ekler. Bu arada, ekrana her okunan karakter için yýldýz karakterini (*) de yazar. Tahmin edilecek kelime girilirken ekranda gözükmemesi gerekir. Bu sebeple okuma iþlemi Str(SayiN, StrSayi); karakter bazýnda yapýlýr ve yerine yýldýz karakteri basýlýr. Okunan karakter UpCase fonksiyonuyla büyük harfe çevrilir ve böylece yapýlacak karþýlaþtýrma da büyük harf aralýðýnda olacaktýr. Ch karakterinin ‘A’ ile ‘Z’ büyük harfleri arasýnda olup olmadýðýný kontrol eder. Bu aralýða bazý Türkçe karakterler (ð,þ,ö,ç,ý,Ý ... ) dahil deðildir. Ýstenirse bu karakterler ayrýca kontrol edilerek karþýlaþtýrmaya dahil edilebilir. UpCase fonksiyonu, 65 ile 90 arasýnda olmayan Türkçe karakterleri, büyük harfe çevirmeyeceðinden, bu harflerin hem küçük, hem de büyük harflerinin Uygun:=True; ASCII karþýlýklarý karþýlaþtýrmaya ilave For k:=1 To Length(StrSayi) Do edilmelidir. Begin ... End; If Ch In [‘A’..’Z’] kontrol ifadesi aþaðýdaki gibi farklý ifadelerle gösterilebilir:

Val(StrSayi[k], Deger, Kod);

If Ch In [‘A’..’Z’] = If Ord(Ch) In [65..90] = If Ch In [#65..#90]

Okunan karakteri string’in sonuna ilave eder ve ekrana her karakter için, yýldýz iþaretini (*) yazar. String’in sonuna tek bir karakter eklenebileceði gibi, bir baþka string te eklenebilir. Aþaðýdaki örnekte iki kelime birleþtirilmiþtir:

114

Pascal ve Program Geliþtirme

Diziler (Arrays And String) Bölüm-5

Örnek Program Kodu

Var Kelime1, Kelime2 : String[50]; Begin Write('Bir kelime giriniz : '); ReadLn(Kelime1); Write('Bir kelime daha giriniz : '); ReadLn(Kelime2); WriteLn('Birleþik kelime : ', Kelime1+' '+Kelime2); End.

Toplama operatörü (+), sabit veya deðiþken birçok string’in birbirinin peþine eklenmesini saðlar. Kelime1 ile Kelime2 arasýný bir açmak üzere, boþluk karakteri (‘ ‘) toplama operatörüyle eklenmiþtir.

Kelime string’inin karakter sayýsý kadar yýldýz karakterini (*), Kelime2 string’inde yýðmalý olarak toplar.

2.2.2. Stringleri Toplama (Concat) Belirtilen string’leri ardý sýra ekleyerek bütün bir string olarak döndürür.

Sözdizimi : Function Concat(S1 [, S2,..., Sn]: String):String; Açýklama : S1, S2,... olarak verilen string’leri sýrasýyla birbiri ardýna ilave ederek toplu bir string olarak döndürür. Þayet toplanan string uzunluðu 255’i geçerse, fazlasýný keser. Örnek : S:=Concat ('Bilgisayar',' ','Dünyasý'); => S:=’Bilgisayar Dünyasý’;

2.2.3. String ile Kullanýlan Karþýlaþtýrma Operatörleri

String’ler arasýnda =, , =, karþýlaþtýrma operatörleri kullanýlabilir. Karþýlaþtýrma iþlemi, karakterlerin ASCII karakter sýralarýna göre yapýlýr. Bu sebeple, ilk karakteri küçük harf olan bir string, ilk karakteri büyük harf olan diðer bir string’ten her durumda daha büyüktür. Çünkü küçük harflerin ASCII kodu 97’den, büyük harflerinki ise 65’ten baþlar. Ayný harflerle baþlayan ve devam eden iki string’ten az harfli olaný, daha küçüktür. Örneðin, ‘ddd’, ‘dddc’ den daha küçüktür.

Pascal ve Program Geliþtirme

115

Bölüm-5 Diziler (Arrays And String)

2.2.4. Stringte Atama Ýþlemi Yok isimli mantýksal deðiþkene True deðeri verilir. Bu deðiþkenin kullanýlma sebebi, yapýlan tahmin karakterinin, kelimenin içinde olup olmadýðýný kontrol içindir. Þayet tahmin karakteri, kelimenin içinde bulunuyorsa, Yok, False olur ve kullanýlan hak sayýsý artýrýlmaz. Tahmin, kelimenin içinde yoksa, Yok True olarak kalýr ve kullanýlan hak sayýsý bir artýrýlýr. Kelimenin her karakterini yapýlan tahmin karakteri ile karþýlaþtýrýr. Eþit olduðu indis konumlarýnda, tahmin edilen karakteri Kelime2’ye aktarýr ve tahminin kelimede olduðunu göstermek için Yok deðiþkenini False yapar. Böylece, yapýlan bütün tahminler sonunda, Kelime2 Kelime’ye eþit ise kelime bulunmuþ olur. String’in 0. karakterinde saklý olan uzunluðu, teker teker karakter atama veya okutma iþlemlerinde deðiþmez. Bu sebeple karakter bazýndaki iþlemler, ancak stringin mevcut karakterleri üzerinde uygulanmalýdýr. Yandaki programýn ekrana ‘Hasan’ yazmasý beklenirken hiç bir þey yazmaz. Çünkü string’in karakterlerine doðrudan yapýlan atamalar, uzunluðunu deðiþtirmez.

1).

Burada istenilen atama iþlemi, iki faklý programla aþaðýda verilmiþtir: 1. Her karakter toplama operatörü ile string’e eklenir (Örnek program-

2. String karakter dizisine teker teker yapýlan atama iþleminden sonra, 0. karakterine kelime boyu doðrudan atanýr (Örnek program-2). Örnek Program Kodu-1

Test Ýþletimi

Tablo satýr ve sütun boyutlarý : 3 4 Tablo deðerlerini girin: 2 3 4 5 1236 5678

Var Kelime : String[50]; Begin Kelime:='H'; Kelime:=Kelime+'a'; Kelime:=Kelime+'s'; Kelime:=Kelime+'a'; Kelime:=Kelime+'n'; WriteLn(Kelime); End.

Örnek Program Kodu-2 Var Kelime : String[50]; Begin Kelime[1]:='H'; Kelime[2]:='a'; Kelime[3]:='s'; Kelime[4]:='a'; Kelime[5]:='n'; Kelime[0]:=Chr(5); WriteLn(Kelime); End.

2.2.5. ASCII Kodun Karakter Karþýlýðý (Chr) Yukarýda verilen 2. örnek programýn Kelime[0]:=Chr(5); atamasýnda, stringin 0. indisine ASCII kodu 5 olan karakter atanýr.

Sözdizimi : Function Chr(X: Byte): Char; Tablodaki tüm sayý- Açýklama : X deðerinin ASCII karakter karþýlýðýný verir. Örnek : Ch:=Chr(50); Ch karakterine #50=’2’ karakterini aktarýr. larýn toplamý=52

116

Pascal ve Program Geliþtirme

Diziler (Arrays And String) Bölüm-5

2.2.6. Stringe String Atama Normal deðiþken atamada olduðu gibi, String’e, string atamak için de atama operatörü kullanýlýr. Sabit bir deðer atanacaðý Var Tablo : Array[1..10,1..10] Of Integer; zaman, karakter atamada olduðu gibi, deðer iki týrnak içinde aktarýlýr. Aþaðýda verilen örnek program kodunda, St1 string’inin uzunluðu 5’tir. St1 string’ine uzunluðu 5’ten fazla bir string aktarýlýrsa, ilk 5 karakteri aktarýlýr: Örnek Program Kodu

Var St1 : String[5]; St2 : String[10]; Begin WriteLn('5 harfli bir kelime giriniz'); ReadLn(St1); WriteLn('10 harfli bir kelime giriniz'); ReadLn(St2); St1:=St2; WriteLn('Yeni kelime = ',St1); End.

2.3. String Komutlarý String’lerde kullanýlan temel komutlar, Length, Copy, Concat, Delete, Insert ve Pos’dur. Bu komutlarýn kullanýmýna iliþkin örnek program aþaðýda verilmiþtir:

For k:=1 To M Do For p:=1 To N Do Begin Read(Tablo[k, p]); Toplam:=Toplam+Tablo[k, p]; End;

Pascal ve Program Geliþtirme

117

Bölüm-5 Diziler (Arrays And String)

Örnek Program Kodu

Var Kelime : String[50]; Begin Kelime:='Turbo Pascal'; WriteLn(Copy(Kelime,7,6)); Delete(Kelime,7,6); Insert('Pascal',Kelime,7); If Pos('bo Pas',Kelime)>0 Then WriteLn('Aranan kelime bulunmuþtur.') Else WriteLn('Aranan kelime yoktur'); End.

{2.3.1.} {2.3.2.} {2.3.3.} {2.3.4.}

2.3.1. Stringten Belli Bir Kesimin Kopyalanmasý (Copy) Kelime string’inin 7. karakterinden itibaren, 6 karakterlik kesim olan ‘Pascal’ kelimesini ekrana yazar. Kelime string’inde ise herhangi bir deðiþiklik oluþmaz.

Test Ýþletimi

Not tablosunu giriniz 1111 2222 3333 4444 5555 1234 2345 3451 4512 5123 1352 Hesaplanacak Öðrenci No : 5 Hesaplanacak Yazýlý No : 1 Öðrencinin ortalamasý = 5.00 Yazýlýnýn ortalamasý = 2.82

For k:=1 To 4 Do ONotToplam:=ONotToplam+Notlar[OgrNo,k];

For k:=1 To 11 Do YNotToplam:=YNotToplam+Notlar[k,YaziliNo];

118

Pascal ve Program Geliþtirme

Diziler (Arrays And String) Bölüm-5

B ÖLÜM TARAMA S ORULARI 1. Aþaðýdaki sorularý cevaplayýnýz. a) Dizi elemanlarýný okumada Read ile ReadLn deyimlerinin kullaným farký nedir? b) Dizinin, diziye aktarýlmasýnda dikkat edilmesi gereken nokta nedir? c) String ile Array[..] Of Char deðiþken tipleri arasýndaki kullaným yönünden ne gibi farklýlýklar vardýr? d) String prosedür ve fonksiyonlarýnýn isimleri ve kýsaca görevleri nelerdir? e) Val ve Str prosedürlerinin yaptýklarý görevi açýklayýnýz.

2. Yukarýda gösterilen diziye göre aþaðýdaki ifadelerin iþletilmesinden sonra, dizinin son durumu, Toplam ve Toplam2 deðiþkenlerindeki deðerler ne olur ve ekran çýktýsý nedir? WriteLn(Dizi[3]); Dizi[2]:=-5; Toplam:=Dizi[1]+Dizi[6]; Toplam2:=Dizi[2]+20; Dizi[6]:= Dizi[2]+20; Dizi[5]:= Dizi[2]+ Dizi[6]; Write(Dizi[1]+Dizi[2]+Dizi[5],Dizi[2],Dizi[4], Dizi[6]);

3. Aþaðýdaki dizi tanýmlamalarýnýn hangileri geçerlidir? Geçersiz olanlarýn, geçersiz olma sebepleri nelerdir? a) Var Dizi:Array[Integer] Of Integer; b) Var Dizi:[Char] Of Integer; c) Var 2Dizi:Array[Char] Of Char; d) Var Dizi2:Array[Char] Of Boolean; e) Var Dizi2:Array[2..5] Of Boolean;

4. Yukarýdaki tanýmlamalardan geçersiz olanlarý, geçerli hale getirip, her bir tanýmlamanýn dizi elemanlarýna ve alacaklarý deðerlere 3 örnek veriniz.

5. 10 elemanlý bir diziyi, son terimden ilk terime doðru okuyan program kodunu yazýnýz.

6. 20 elemanlý bir dizinin 2., 4., 6.,..., 20. Elemanýný ekrana alt alta yazdýran program kodunu yazýnýz.

7. Yukarýdaki diziye göre program kodlarýnýn çýktýlarýný bulunuz. Pascal ve Program Geliþtirme

k:=3; Fark:=2; While (k=1) Do Begin a) WriteLn(Dizi[k]); k:=k-Fark; Fark:=-(Fark+2); End; b) For k:=1 To 4 Do Write(Dizi [2*k]); Toplam:=0; For k:=2 To 5 Do c) Toplam:=Toplam+Dizi[k-1]; WriteLn(Toplam);

8. Bir dizinin ilk iki terimi 1'dir. Sonraki her eleman, iki önceki terimin karesinin 3 fazlasý olan dizinin, ilk 10 terimini ve bu dizinin ilk 5 teriminin toplamýný bulacak program kodunu yazýnýz.

9. Bir dizideki bütün sayýlarýn çift olup olmadýðýný kontrol edecek programý yazýnýz.

10. Bir dizideki bütün sayýlarýn tam kare olup olmadýðýný kontrol edecek programý yazýnýz. 11. Bir dizideki bütün sayýlarýn asal sayý olup olmadýðýný kontrol edecek programý yazýnýz. 12. Bir dizideki bütün elemanlar arasýnda düzgün bir artýþ olup olmadýðýný kontrol edecek programý yazýnýz. Örneðin, 10, 13, 16, 19 dizisi düzgün artar, elemanlar arasýnda 3 fark vardýr. 13. Bir dizideki en uzun artan diziyi bulan programý yapýnýz. Örneðin, 2, 5, 1, 6, 9, 10, 3 dizisinde en uzun artan dizi 1, 6, 9, 10’dur.

14. Aþaðýdaki program kesimlerinin çýktýsý nedir? a) b) Kelime:=Kelime+'a'; Kelime:='abc'; Kelime[2]:='b'; For k:=1 To 4 Do WriteLn(Kelime); Kelime[k]:=Chr(Ord('a')+k); WriteLn(Kelime); c) Kelime[1]:='a'; Kelime[2]:='b'; Kelime[0]:=Chr(2); WriteLn(Kelime);

d) Kelime:=Kelime+'a'; Kelime:=Kelime+'b'; WriteLn(Kelime);

15. Bir cümle içinde geçen her karakterin tekrar sayýsýný bulan programý geliþtiriniz.

119

Bölüm-5 Diziler (Arrays And String)

16. Aþaðýdaki program kesiminin ekran çýktýsý nedir? Kelime:='Diziler'; Kelime2:=Copy(Kelime,1,4); WriteLn(Kelime,' ',Kelime2); Insert(' ve String',Kelime2,5); Delete(Kelime,5,3); WriteLn(Kelime,' ',Kelime2); WriteLn(Pos(Kelime,Kelime2));

17. Bir cümledeki kelime sayýsýný bulan programý geliþtiriniz.

P ROGRAMLAMA S ORULARI 1. 18 takýmlý bir ligde, her takýmýn galibiyet, beraberlik, attýklarý gol sayýsý ve yedikleri gol sayýsýný okuyup, puan sýralamasý çýkaran programý geliþtiriniz. Puanlarý eþit olan takýmlarda, averaja bakýlýr, averajda eþitse, daha çok gol atan takým üstte yer alýr.

2. Aþaðýdaki pascal üçgenini oluþturan programý geliþtiriniz.

ve okul numarasýyla yazdýran, b) Bütün derslerden geçen öðrencilerin adýný soyadýný, numarasýný ve ders notlarý ortalamasýný bulan, c) Her ders için geçen ve kalan öðrenci sayýsýný bulan programý geliþtiriniz.

5. Bir su tankeri 100 litre su ile doludur. Bidonlara bu tankerden su doldurulacaktýr. Bidon kapasiteleri programa veri olarak girilecektir. Veri girme iþlemini bitirmek için 0 gözcü deðeri kullanýlacaktýr. Ýstekte bulunanlarýn hangilerinin tankerden istedikleri suyun tamamýný, hangilerinin bir kýsmýný ve hangilerinin hiç alamayacaklarýný bulan programý geliþtiriniz. Test Ýþletimi Girdi : 30 40 20 30 50 10 0 Sonuç : 3 bidon tamamen doldurulur. 2 bidon hiç doldurulmaz. 4. bidonun 30 litreden 10 litresi doldurulur.

6. N kiþi yuvarlak bir masa etrafýnda oturmaktadýr. Oyunun kuralýna göre 1. oyuncudan baþlayarak, k tane sayýlacak ve k. oyuncu oyun dýþýna alýnacaktýr. Bu kurallara göre en son kalan kiþiyi bulan programý geliþtiriniz. Örnek :

3. Tüketicilerin sigara tüketimlerini ölçmek için hazýrlanan bir anketin sonuçlarýna iliþkin bilgiler, her bir kiþi için veriliyor. Verilen bilgiler; tüketicinin adý, yaþý, cinsiyet kodu (E:Erkek, K:Kadýn), içtiði sigara miktarýna iliþkin kod (1:Sigara içmiyor, 2:Az içiyor, 3:Tiryaki) dur. a) M adet tüketiciye iliþkin olarak yapýlan araþtýrmada her tüketim grubuna giren kadýn ve erkeklerin sayýsýný bulan, b) Yaþý 40'tan büyük kadýn ve erkek sayýlarýný bulan, c) Ankete katýlan kadýn ve erkek sayýlarýný bulan programý geliþtiriniz.

4. Bir fakülte, öðrenci bürosu iþlemlerini bilgisayar desteðinde yürütmektedir. Her sýnav dönemi sonunda M adet öðrenci, N adet ders olan bir sýnýfa iliþkin öðrenci notlarý tablo halinde bilgisayara girilmektedir. Ayrýca, her öðrencinin adý soyadý, okul numarasý verilmektedir. a) Her öðrencinin kaldýðý ders sayýsýný, adý soyadý

120

7. N basamaklý bir sayýdan k tane rakamýný silersek kalabilecek en büyük sayýyý bulan programý geliþtiriniz. Örnek: Sayý --> 2 4 5 2 6 k=1 En büyük sayý = 4 5 2 6 k=2 En büyük sayý = 5 2 6 k=3 En büyük sayý = 5 6 k=4 En büyük sayý = 6 Not : Sayý, dizi olarak programa verilmelidir ve k sayýsý dizinin eleman sayýsýnýn 1 eksiðinden büyük olmamalýdýr.

Pascal ve Program Geliþtirme

Diziler (Arrays And String) Bölüm-5

Pascal ve Program Geliþtirme

121

BÖLÜM

6

ALT PROGRAMLAR (PROCEDURES AND FUNCTIONS)

BÖLÜM

6

ALT PROGRAMLAR

(PROCEDURES AND FUNCTIONS)

1. A LT P ROGRAM KULLANMANIN FAYD ALARI 1.1. 1.2. 1.3. 1.4. 1.5.

Kolay Çözüm, Kolay Hata Kontrolü Alt Programlarýn Tekrar Tekrar Çaðrýlabilmesi Programlarýn Kolay Anlaþýlýr ve Yönetilebilir Olmasý Kütüphane Haline Getirme Programcýlar Arasý Ýletiþim

2. A LT P ROGRAMLARLA A NA P ROGRAM A RASIND AKÝ Ý LÝÞKÝ 3. P ROSEDÜR A LT P ROGRAMI (P ROCEDURE ) 3.1. Prosedürün Parametresiz Çaðrýlmasý 3.1.1. Prosedürün Baþlýðý 3.1.2. Prosedür Kod Bloðu 3.1.3. Prosedürün Çaðrýlmasý

3.2. Uygulama (Çarpým ve ASCII Tablolarý) 3.2.1. 3.2.2. 3.2.3. 3.2.4.

Menü Prosedürü Çarpým Tablosu Prosedürü Genel (Global) ve Yerel (Local) Deðiþkenler ASCII Tablo Prosedürü

4. P ROSEDÜRE PARAMETRE G ÖNDERÝMÝ VE KULLANIMI 4.1. Uygulama (Yýldýzlardan Oluþan Dik Üçgen) 4.1.1. Deðer Parametreli Prosedür Baþlýðý 4.1.2. Deðer Parametreli Prosedürün Çaðrýlmasý 4.1.3. Prosedürdeki Deðer Parametrelerinin Durumu

4.2. Uygulama (Üs Hesabý)

5. D EÐÝÞKEN PARAMETRELÝ P ROSEDÜRLER 5.1. Deðiþken Parametreli Prosedürle Üs Hesabý 5.1.1. Deðiþken Parametreli Prosedür Baþlýðý 5.1.2. Deðiþken Parametreli Prosedürün Çaðrýlmasý 5.1.3. Deðiþken Parametresinin Bellekteki Yeri

6. F ONKSÝY ON A LT P ROGRAMI (F UNCTION ) 6.1. Fonksiyonla Üs Hesabý 6.1.1. 6.1.2. 6.1.3. 6.1.4. 6.1.5.

Fonksiyonun Prosedüre Göre Kullaným Farklýlýklarý Fonksiyon Baþlýðý Fonksiyon Kod Bloðu Fonksiyonun Çaðrýlmasý Ne Zaman Prosedür, Ne Zaman Fonksiyon

6.2. Uygulama (Sayý Tahmin Oyunu) 6.2.1. 6.2.2. 6.2.3. 6.2.4. 6.2.5.

Rastgele Sayý Üretim Fonksiyonu Sayý Üretecinin Baþlatýlmasý (Randomize) Rastgele Sayý Üretimi (Random) Sayý Geçerliliði Kontrol Fonksiyonu Tahmin Sayýyý Deðerlendirme Prosedürü

7. Ý ÇÝÇE B ÝRBÝRÝNÝ Ç AÐIRAN A LT P ROGRAMLAR 7.1. Alt Programlarýn Birbirini Çaðýrma Þartlarý 7.1.1. 7.1.2. 7.1.3. 7.1.4.

Alt Programdan Çýkýþ (Exit) Programdan Tamamen Çýkýþ (Halt) Döngü Bloðundan Çýkýþ (Break) Döngü Baþýndan Devam Etme (Continue)

B ÖLÜM TARAMA S ORULARI P ROGRAMLAMA S ORULARI

Alt Programlar (Procedures And Functions) Bölüm-6

BÖLÜM-6 ALT PROGRAMLAR (PROCEDURES AND FUNCTIONS) Bu bölümde, programlarý belirli iþlevleri olan alt programlara (modül) bölerek oluþturma anlatýlacaktýr. Yazýlacak programlar büyüdükçe, programlarýn bir bütün olarak düþünülmesi zorlaþtýðýndan, alt programlara bölmek gerekir. Alt programlarla programý yazmak, test etmek ve hatayý bulmak kolaylaþýr.

1. A LT P ROGRAM KULLANMANIN FAYD ALARI Pascal programlama dili, yapýsal programlamanýn anlatýmý için en uygun dil konumundadýr. Yapýsal programlama, program karmaþasýný azaltmak ve programlarý daha kolay anlaþýlabilir, okunabilir ve geliþtirilebilir biçime getirmeyi amaçlayan yöntemdir. Yapýsal programlamanýn temelinde ise programý, küçük alt birimlere ayýrmak yatmaktadýr. Bu sebeple alt program kullanma, programcýnýn bilmesi gereken en önemli konulardan birisidir.

1.1. Kolay Çözüm, Kolay Hata Kontrolü Bir programýn belli bir iþlevi olan küçük bir parçasýný geliþtirmek daha kolaydýr. Ayrýca küçük bir programla uðraþýldýðýndan hatalar daha kolay tespit edilir. Programýn alt parçalarýnýn kontrolleri bittikten sonra birleþtirilir ve istenilen program bütün olarak elde edilir. Aþaðýdaki örnekte olduðu gibi, verilen bir not tablosuna göre, öðrencilerin aritmetik ortalamalarýný, aðýrlýklý ortalamalarýný ve bu ortalamalara göre sýralamalarýný bir tablo halinde sunan program yapýlmak istenirse, bu program alt modüllere bölünür. Dolayýsýyla, önce aritmetik ortalama hesaplayan bir program yapýlýr. Bu programa veri olarak, öðrencilerin notlarý gönderilir ve sonuç olarak, aritmetik ortalamalarý çýkar. Bu program test edilir ve sonra esas programýn bir diðer alt parçasý olan, aðýrlýklý ortalama hesaplayan pro-

Pascal ve Program Geliþtirme

123

Bölüm-6 Alt Programlar (Procedures And Functions)

grama geçilir. Sýralama yapan ve sonucu tablo halinde görüntüleyen alt programlar da yapýlýp test edildikten sonra, bu alt programlar sýrasýyla ana programda toplanýp test edilir.

1.2. Alt Programlarýn Tekrar Tekrar Çaðrýlabilmesi Yazýlan bir alt program, ana program veya alt programlardan tekrar tekrar çaðrýlabilir. Böylece programýn birçok yerinde ayný veya benzer kodlarýn yazýlmasý önlenmiþ olur. Örneðin, iki deðiþken deðerinin yer deðiþimi programlarda birçok kez yapýlmasý gereken bir iþlemdir. Bu iþlemi, bir alt program haline getirerek tek bir komut ile sayýlar yer deðiþtirilebilir. Örneðin, yandaki matematiksel seri açýlýmýnýn sonucunu bulan bir program yapýlmak istenirse, bir sayýnýn üssünü alan komut Pascal’da bulunmadýðýndan, her üs alma iþleminde daha alt düzeyli döngü bloðunu kullanmak gerekir. Bu da ana programýn daha uzun ve zor anlaþýlýr olmasýna Örnek Program Kodu-1 sebeptir. Halbuki, UsAl(Sayý, Us) gibi bir üs alma alt programý yapýlsa, bu serinin hesaplanmasýnda UsAl(k, k+1) / UsAl(k+1, k) For k:=5 To 15 Do Begin ifadesinde olduðu gibi, üs alma modülü çok defa tekrar tekrar Sonuc:=1; çaðrýlabilir. For p:=1 To k Do Sonuc:=Sonuc * 2; Write (Sonuc,’ ‘); End;

1.3. Programlarýn Kolay Anlaþýlýr ve Yönetilebilir Olmasý

Fazla komutlar kümesinden oluþan bir programý anlamak, az komutlu olana göre daha zor olacaðý açýktýr. Bu sebeple, programÖrnek Program Kodu-2 For k:=5 To 15 Do larýn ileride yeniden gözden geçirildiðinde kolayca anlaþýlabilmesi, Write (UssunuAl(2,k),’ ‘); geliþtiri-lebilmesi ve yönetilebilmesi için, alt programlardan oluþmasý önemlidir. Yandaki iki program parçasý da, 2 sayýsýnýn 5 ile 15 arasýndaki üslerini hesaplayýp ekrana yazmaktadýr. Yanda 1. program parçasýnda, üs alma iþlemi tekrar bir For döngüsü açýlarak yapýlmýþtýr. Halbuki 2. program parçasýnda, UssunuAl isminde bir üs alma alt programýný kullanarak, ayný iþlemin anlaþýlýrlýðý artýrýlmýþtýr.

1.4. Kütüphane Haline Getirme Yapýlan alt programlar Crt gibi hazýr kütüphane haline getirilerek, ileride yapýlacak programlarda kolaylýkla kullanýlabilir.

1.5. Programcýlar Arasý Ýletiþim Büyük projelerin tek bir programcý tarafýndan gerçekleþtirilmesi zor olduðundan, birden fazla kiþinin ayný proje üzerinde çalýþmasý gerekebilir. Böyle durumlarda, programcýlarýn her biri benzer alt programlarý tekrar tekrar yazmadan kullanmalarý gerekir. Ayrýca modüler yazýlmýþ program kodlarýnýn paylaþýmlarý da kolaylaþýr.

2. A LT P ROGRAMLARLA A NA P ROGRAM A RASIND AKÝ Ý LÝÞKÝ Alt programlar, ana program üzerinde yer alýrlar ve ana programdan çaðrýlmadýklarý müddetçe çalýþmazlar. Alt programlarýn çalýþma sýralarý ana programdan çaðrýlýþ sýrasýna baðlýdýr. Bir alt program ana program içerisinden istenildiði kadar çaðrýlabilir.

124

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Ana programdan çaðrýlan alt programýn içindeki ifadeler iþletildikten sonra, program akýþý yine ana programa geri döner ve bu satýrdan itibaren devam eder. Yandaki þekilde verildiði gibi, ana program içerisinden önce AltProgram2 çaðrýlýr. AltProgram2’nin iþletimi bittikten sonra, program akýþý ana programýn sonraki satýrý olan AlrProgram1’in çaðrýlmasý ile devam eder. Pascal programlama dilinde alt programlar iki ana gruba ayrýlýrlar: 1. Prosedürler, 2. Fonksiyonlar.

3. P ROSEDÜR A LT P ROGRAMI (P ROCEDURE ) Prosedürler, tek bir ana program bloðundan oluþan programlara benzerler. Nasýl program, sorunun çözümü için gerekli aþamalarý içeriyorsa, prosedür de, programýn bir alt parçasýnýn çözümü için gerekli aþa- Test Ýþletimi malarý içerir. Prosedürlerin, ana program bloklarýndan en önemli farký, tek baþlarýna çalýþtýrýlamamalarýdýr. Ancak ana program bloðu veya bir baþka alt program içinden çaðrýlarak kullanýlabilirler.

3.1. Prosedürün Parametresiz Çaðrýlmasý Aþaðýdaki programda, parametresiz prosedür çaðýrma örneði verilmiþtir:

Ýlk prosedürü iþletiyorum Þu anda ana programdayým Ýlk prosedürü iþletiyorum

Örnek Program Kodu

Procedure IlkProsedur;

Begin WriteLn(‘Þu anda prosedür çalýþmaktadýr’); End;

IlkProsedur;

Pascal ve Program Geliþtirme

125

Bölüm-6 Alt Programlar (Procedures And Functions)

Program Prosedur_Ornegi; Procedure IlkProsedur; Begin WriteLn(‘Ýlk prosedürü iþletiyorum’); End; Begin {Ana program} IlkProsedur; WriteLn(‘Þu anda ana programdayým’); IlkProsedur; End.

{3.1.1.} {3.1.2.}

{3.1.3.} {3.1.3.}

Kritik

3.1.1. Prosedürün Baþlýðý IlkProsedur isminde bir prosedürü tanýmlar. Prosedürler bu baþlýk ismiyle çaðrýlýp, iþletilebilirler. Sözdizimi: Procedure ProsedürÝsmi; Açýklama : Prosedürün baþlýk kýsmý, prosedürün ismini belirtmek için kullanýlýr. Procedure kelimesinden sonra deðiþken tanýmlamadaki gibi prosedürün ismi yazýlýr.

3.1.2. Prosedür Kod Bloðu Prosedür kod bloðu, Begin ayrýlmýþ kelimesi ile baþlar ve End kelimesi ile biter. End kelimesinin sonuna noktalý virgül (;) iþareti gelir. Aynen ana programda olduðu gibi iþletilecek ifadeler ve çaðrýlacak diðer alt programlar bu blok içinde belirtilir. 3.1.3. Prosedürün Çaðrýlmasý Bir prosedür, ana program bloðu veya baþka bir alt program içerisinden ismi yazýlarak çaðrýlýr. Çaðrýlma sayýsýnda bir kýsýtlama yoktur, istenildiði kadar çaðrýlabilir. Prosedür çaðrýlmasý tek bir ifade olarak kabul edilir. Bir prosedür, ana program veya baþka bir alt program içerisinden istenildiði kadar çaðrýlabilir. Bunun için bir kýsýtlama {1} Var Ch:Char; yoktur.

3.2. Uygulama (Çarpým ve ASCII Tablolarý) {2} Repeat ... Until Ch='3’;

Menüden seçmeli olarak çarpým tablosu veya ASCII karakter tablosunu ekrana çýkaran programý geliþtiriniz.

{3} Menu;

{4} Case Ch Of '1':CarpimTablosu; '2':AsciiTablo; End;

126

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Analiz Programýn ana iþlem baþlýklarý belirlenir. Bu programda çarpým tablosu ve ASCII tablo oluþturma modülleri açýk bir þekilde görülmek- Test Ýþletimi tedir. Bunlarýn haricinde, ekrana menü getirme iþlemi de bir alt program haline getirilebilir.

1. Çarpým Tablosu 2. ASCII Tablosu 3. Çýkýþ Seçiminiz (1/2/3)?

{1} Procedure Menu;

{2} Begin Menu; End.

Ana Program Kodu (CrpAscii.Pas) Test Ýþletimi ..... 2x 1= 2 2x 2= 4 2x 3= 6 2x 4= 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18 2 x 10= 20 ..... 7x 1= 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10= 70

3x 1= 3 3x 2= 6 3x 3= 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27 3 x 10= 30 8x 1= 8 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64 8 x 9 = 72 8 x 10 =80

{1} Var k , p : Integer; Pascal ve Program Geliþtirme

127

Bölüm-6 Alt Programlar (Procedures And Functions)

Program Carpim_Ve_ASCII_Tablo; Var Ch:Char;

{1}

Procedure Menu; Begin ... End;

{Detaylý açýklama 3.2.1. konuda}

Procedure CarpimTablosu; Begin ... End;

{Detaylý açýklama 3.2.2. konuda}

Procedure AsciiTablo; Begin ... End;

{Detaylý açýklama 3.2.4. konuda}

Begin Repeat Menu; Ch:=ReadKey; Case Ch Of '1' : CarpimTablosu; '2' : AsciiTablo; End; Until Ch='3'; End.

{Çarpým ve ASCII tablolarý ana programý} {2} {3} {4}

{2}

Ana Program Kritik Ana programa ait olan Ch deðiþkeni tanýmlanýr. Genellikle, ana programýn deðiþkenleri prosedür ve fonksiyon bloðunun üzerinde tanýmlanýr.

Ana programdaki prosedürleri çaðýrma iþlemi, girilen karakter ‘3’, yani çýkýþ olana kadar devam eder.

Ana program bloðunun üst kýsmýnda tanýmlanmýþ olmasý gereken ve kullanýcýya seçenekleri sunan, menü prosedürü çaðrýlýr.

Okunan karakter ‘1’ ise çarpým tablosunu, ‘2’ ise ASCII tabloyu verecek prosedürü çaðýrýr.

3.2.1. Menü Prosedürü Menü Prosedür Kodu

{2} For ... For ...

128

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Program Menu_Prosedurunun_Isletimi; Procedure Menu; Begin WriteLn(' 1. Çarpým Tablosu'); WriteLn(' 2. ASCII Tablosu'); WriteLn(' 3. Çýkýþ'); WriteLn(' Seçiminiz (1/2/3)?'); End; {Procedure Menu} Begin Menu; End.

{1}

Test Ýþletimi

{2}

32: 36:$ 40:( 44:, 48:0 52:4 56:8 60:< 64:@ 68:D 72:H 76:L 80:P

33:! 37:% 41:) 45:49:1 53:5 57:9 61:= 65:A 69:E 73:I 77:M 81:Q

34:" 38:& 42:* 46:. 50:2 54:6 58:: 62:> 66:B 70:F 74:J 78:N 82:R

35:# 39:' 43:+ 47:/ 51:3 55:7 59:; 63:? 67:C 71:G 75:K 79:O ......

{1} For k:=32 To 255 Do

{2} Write(k:3,':',Chr(k),' ');

{3} If ((k-32)+1) Mod 11 = 0 Then WriteLn;

Menü Prosedürünü Kritik Prosedürler genellikle, ana programýn deðiþken bloðu ile Begin ayrýlmýþ kelimesi arasýnda tanýmlanýrlar. Bu satýrlar, prosedürün çalýþtýrýlabilmesi için yazýlmýþtýr. Böylelikle, prosedürün doðru çalýþýp çalýþmadýðý kontrol edilebilir. Prosedür doðru olarak çalýþýyorsa, bu satýrlar silinip, ana programa eklenir.

3.2.2. Çarpým Tablosu Prosedürü Çarpým Tablosu Prosedür Kodu 3 satýr için * ** ***

4 satýr için * ** *** ****

5 satýr için * * * * * Pascal ve Program Geliþtirme

* ** *** ****

129

Bölüm-6 Alt Programlar (Procedures And Functions)

Program Carpim_Tablosu_Prosedurunun_Isletimi; Procedure CarpimTablosu; Var k , p : Integer; Begin For k:=1 To 10 Do Begin For p:=1 To 5 Do Write(p:2,' x ',k:2,' = ',p*k:3,' '); WriteLn; End; {For k} WriteLn; For k:=1 To 10 Do Begin For p:=6 To 10 Do Write(p:2,' x ',k:2,' = ',p*k:3,' '); WriteLn; End; {For k} End; {Procedure CarpimTablosu}

{1} {2}

Begin {Çarpým tablosu prosedürünü çaðýran ana program bloðu} CarpimTablosu; End.

Çarpým Tablosu Prosedürünü Kritik

3.2.3. Genel (Global) ve Yerel (Local) Deðiþkenler Prosedürlerin isimleri belirtildikten sonra, ona ait sabit, tip ve deðiþken tanýmlamalarý yapýlabilir. Burada, k ve p isminde tamsayý iki deðiþken tanýmlanmýþtýr. Alt programlar için tanýmlanan deðiþkenlere yerel, tüm programda geçerli deðiþkenlere ise genel deðiþken adý verilir. Programda kullanýlan genel deðiþkenler için belleðin veri kesiminde (data segment) yer ayrýlýr ve programýn iþletimi tamamen bitene kadar burada kalýrlar. Bu deðiþkenler ana program bloðu ile birlikte tüm alt programlarda kullanýlabilir. Prosedürlerin çaðrýlmasý esnasýnda, bunlara ait yerel deðiþkenler için belleðin yýðýt kesiminde (stack segment) yer ayrýlýr ve prosedürün iþletimi bittikten hemen sonra bu deðiþkenler bellekten boþaltýlýr. Yerel deðiþkenler Procedure Ucgen(SatirSay:Byte); ancak tanýmlandýðý alt program içerisinde kullanýlabilir. Yerel deðiþkenin ismi genel deðiþken ile ayný olsa bile, bu, alt program nazarýnda farklý algýlanýr. Örnek: Aþaðýdaki programýn iþletimi esnasýnda genel ve yerel deðiþkenlerinin deðiþimini inceleyiniz.

Ucgen(3);

130

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Satir:=4; Ucgen(Satir);

k:=5; Ucgen(k);

Örnek Program Kodu

Program Genel_Yerel_Degiskenler; Var Ana1, Ana2 : Integer; Procedure P1; Var Ana1, Pr1, Pr2, Proc1 : Integer; Begin Pr1:=1; Pr2:=3; Proc1:=Ana2; {==>}

Ana1:=Proc1*Pr2+Pr1; WriteLn(Proc1, ' ', Ana1, ' ', Ana2); Ana2:=Ana1*2; End; {Procedure P1} Begin {Ana Program Baþlangýcý} Ana1:=3; Ana2:=4; P1; WriteLn(Ana1, ' ', Ana2); End.

Test Ýþletimi

52 25 Çözüm: Programlarýn iþlemesi, ana program bloðundan baþlar. Ana 52

programdan prosedür çaðrýlýrsa, prosedürün baþlangýcýna atlanýr ve bitince tekrar ana programda kalýnan ifadeyle devam edilir.

Yukarýdaki örnek program kodunun ana program bloðunda Ana1 ve Ana2 genel deðiþkenlerine 3 ve 4 deðerleri atanmýþtýr. Daha sonra P1 prosedürü çaðrýlýr ve buna ait Ana1, Pr1, Pr2 ve Proc1 yerel deðiþkenleri de aktiflenir. Ana1 isimli deðiþken yerel olarak ta tanýmlandýðýndan, artýk prosedür içerisinde bizzat yerel deðiþken kullanýlacak demektir. Ana program bloðunda ise genel deðiþken olan Ana1 kullanýlýr. Aþaðýdaki tabloda, genel ve yerel deðiþkenlerin her ifadenin iþletilmesinden sonraki deðiþen deðerleri verilmiþtir: {1} Deneme(x, y);

{2} z:=y; y:=x; x:=z; WriteLn(x, y);

{3} WriteLn(x, y);

Pascal ve Program Geliþtirme

131

Bölüm-6 Alt Programlar (Procedures And Functions)

Test Ýþletimi 243 216 27

Burada içiçe kullanýlan For döngüsü, 1’den 5’e kadar sayýlarýn çarpým tablosunu ekrana yazar. Çarpým tablosunun ilk yarýsýný yazdýktan sonra düzenli çýktýsý için WriteLn deyimiyle bir satýr boþluk býrakýr. Daha sonra çarpým tablosunun 6’dan 10’a kadarki kalan yarýsýný da ekrana yazar.

3.2.4. ASCII Tablo Prosedürü Ascii Tablo Prosedür Kodu

{1} Us(3, 5);

{2} Us(y, x);

{3} Us(x, y Div 2);

132

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Program Ascii_Tablo_Prosedurunun_Isletimi; Procedure AsciiTablo; Var k : Byte; Begin For k:=32 To 255 Do Begin Write(k:3,':',Chr(k),' '); If ((k-32)+1) Mod 11 = 0 Then WriteLn; End; {For k} End; {Procedure AsciiTablosu}

{1} {2} {3}

Begin {Ascii tablosu prosedürünü çaðýran ana program bloðu} AsciiTablo; End.

Ascii Tablo Prosedürünü Kritik

Test Ýþletimi

243 8 32 ile 255 arasýndaki sýra sayýlarýnýn ASCII kod karþýlýðý olan karakter81

leri ekrana yazdýrýr.

Ekrana, sayýyý ve onun ASCII karakter kodunu (Chr(k)) yazar.

Her bir sýra sayýsý ve ASCII karakter kodu için 7 karakterlik alan ayrýldýðýndan, 80 kolonluk ekrana 11 adet düzenli çýkýþ denk gelir. Dolayýsýyla her 11 birim çýkýþta, imleci bir alt satýra geçirir.

4. P ROSEDÜRE PARAMETRE G ÖNDERÝMÝ

VE

KULLANIMI

Program bir fabrikaya benzetilirse, prosedürler de fabrikanýn iþlemesine yardýmcý olan makineler gibidir. Her makinenin ayrý bir görevi vardýr ve mümkün olduðunca belli bir fabrikaya baðýmlý olmadan her fabrikada kullanýlabilmelidir. Bu makinelerden bir çoðu fabrikanýn verdiði malzemeleri alýr ve yapmasý gereken görevi yapar. Prosedür Procedure Us(a, b : Integer; Var Sonuc : Integer); de gereken verileri programdan alan ve görevini yapan bir makine gibidir. Programdan prosedüre veri iletiþimini saðlamak üzere gönderilen deðiþkenlere parametre adý verilir. Örneðin, bir dikdörtgenin alanýný hesaplayan prosedürün yapýlabilmesi için, dikdörtgenin en ve boy deðerleri parametre olarak prosedüre gönderilir. Prosedür ve fonksiyonlarda kullanýlan iki tür parametre vardýr: 1. Deðer parametreleri,

2. Deðiþken parametreleri.

4.1. Uygulama (Yýldýzlardan Oluþan Dik Üçgen) Us(3, 5, Sonuc); WriteLn(Sonuc);

Pascal ve Program Geliþtirme

Yanda gösterildiði gibi, yýldýzlarla dik üçgen oluþturan programý geliþtiriniz.

133

Bölüm-6 Alt Programlar (Procedures And Functions)

Analiz Yýldýzlardan üçgen oluþturmada prosedür kullanýlabilir. Bu prosedüre üçgenin satýr sayýsý parametre olarak gönderilir. Birinci satýrda 1 yýldýz, ikinci satýrda 2 yýldýz ve n. satýrda n yýldýz ekrana yazdýrýlýr. Herbir satýr ilerleyiþi için birinci düzey For döngüsü ve her satýrdaki yýldýzlarý ekrana yazdýrmak için de ikinci düzey For döngüsü kullanýlax:=3; y:=6; Us(2, x, y); WriteLn(y); bilir. Tasarým 1. Satýr yüksekliði kadar yýldýzlardan oluþan dik üçgeni ekrana yazdýr; 1.1. k’nýn 1’den satýr sayýsýna kadar her deðeri için; 1.1.1. p’nin 1’den k’ya kadar her deðeri için ekrana bir yýldýz karakteri bas. 1.1.2. Bir satýr baþý yap. 2. Adým-1’deki iþlemleri farklý üçgen satýrlarý için tekrarla.

Program Kodu(YldzUcgn.Pas) Program YildizlardanUcgen; Var Satir, k : Byte; Procedure Ucgen(SatirSay: Byte); Var k, p : Byte; Begin For k:=1 To SatirSay Do Begin For p:=1 To k Do Write('* '); WriteLn; End; {For k} End; {Procedure Ucgen}

{4.1.1.}

Begin {Ana blok, üçgen prosedürünü farklý deðer parametreleriyle iþletir} Ucgen(3); {4.1.2.} Satir:=4; Ucgen(Satir); {4.1.2.} k:=5; Ucgen(k); {4.1.2.} End.

Kritik

4.1.1. Deðer Parametreli Prosedür Baþlýðý Ucgen isminde, SatýrSay tamsayý deðer parametresiyle çaðrýlabilen prose-dürü tanýmlar. Us(x, y Div 2, x); WriteLn(x);

Sözdizimi : Procedure ProsedürÝsmi(PÝ1,PÝ2,...:ParametreTipi;PÝ3,PÝ4,...:ParametreTipi); Açýklama : PÝ, parametre ismi anlamýndadýr. Parametreler, prosedürün isminden sonra, parantez içinde yan yana belirtilir. Ayný tipteki parametreler aralarýna konan virgül ile ayrýlýr. Farklý tipte parametre tanýmlanýcaksa, noktalý virgülden sonra yeni parametre adlarý ve tipi belirtilir.

4.1.2. Deðer Parametreli Prosedürün Çaðrýlmasý

134

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Ucgen prosedürünün SatirSay tamsayý parametresine 3 deðeri gider ve prosedür yýldýzlardan oluþan 3 satýrlýk bir dik üçgeni oluþturur. Bu prosedürler, isimleri ile birlikte parantez içinde verilen parametre deðerleri ile çaðrýlýrlar. Prosedür çaðrýldýðýnda, deðer parametresi, belleðin yýðýt kesiminde yerel deðiþken olarak açýlýr ve prosedürün iþletimi bittiðinde de bellekten boþaltýlýr. Ucgen prosedürünün SatirSay paramet-resine 4 deðerini gönderir ve prosedür yýldýzlardan oluþan 4 satýrlýk bir dik üçgen oluþturur. Deðer parametrelerinin, sabit deðer olarak veya bir deðiþken deðeri olarak gönderilmesi önemli deðildir. Önemli olan prosedüre ulaþan deðer ve deðerin tipidir. Örnekte, SatirSay parametresi tamsayý olduðundan, tamsayý tipinde bir deðerin gönderilmesi gerekir; aksi taktirde hata oluþur. Ucgen prosedürünün SatirSay parametresine 5 deðerini gönderir ve prosedür yýldýzlardan oluþan 5 satýrlýk bir dik üçgeni oluþturur. Parametre ismi ile deðiþken isminin ayný olmasý gerekmez. Önemli olan prosedürün parametresine aktarýlacak deðerdir. SatirSay parametresine, k deðiþkenindeki 5 deðeri aktarýlýr.

4.1.3. Prosedürdeki Deðer Parametrelerinin Durumu Örnek Program Kodu Var x, y : Integer; Procedure Deneme(x, y : Integer); Var z : Integer; Begin z:=y; y:=x; x:=z; WriteLn(x, y); End; {Procedure Deneme} Begin {Ana program baþlangýcý} x:=5; y:=2; WriteLn(x, y); Deneme(x, y); WriteLn(x, y); End.

Test Ýþletimi {Ekrana yazýlan} {25}

{2}

8 243 1024

{52} {52}

{1} {3}

Kritik Deneme prosedürüne 5 ve 2 deðerlerini gönderir. Ýlk gönderilen 5 deðerini prosedürün x paramet-resine, ikinci deðeri de y parametresine aktarýr. Prosedürün x ve y parametreleri, ana programýn x ve y deðiþkenlerinden tamamen farklý olan yerel deðiþkenlerdir. Prosedürün z yerel deðiþkenini de kulla-narak, x ve y’deki deðerlerin yerlerini deðiþtirir. Ekrana, x için 2, y için 5 yazar. Prosedürden ana programa dönüldüðünde, x ve y deðiþkenlerinin deðerlerinde hiçbir deðiþiklik olmaz. Çünkü prosedürde kullanýlan Pascal ve Program Geliþtirme

135

Bölüm-6 Alt Programlar (Procedures And Functions)

deðiþkenler ana programýn deðiþkenlerinden tamamen farklýdýr. Dolayýsýyla, ekrana 5 ve 2 yazar. Function Us(a,b:Byte):LongInt;

Prosedürün deðer parametreleri ile programýn deðiþken isimleri ayný bile olsa, prosedüre sadece deðer gider ve prosedür içindeki deðiþiklikler programýn diðer kesimlerini etkilemez.

4.2. Uygulama (Üs Hesabý) Sayýnýn üssünü hesaplayan programý prosedür kullanarak geliþtiriniz. Analiz Bir sayýnýn üssünü hesaplamak için o sayýyý kendisiyle üs miktarý kadar çarpmak gerekir. Ýstenilen sayý ve üssü prosedüre deðer parametresi olarak gönderilir ve Us :=Sonuc; sonuç hesaplatýlýp ekrana yazýlýr. Program Kodu (UsProc.Pas)

WriteLn(Us(2, 3));

a:=Us(3, 5); WriteLn(a);

x:=2; y:=5; WriteLn(Us(x, y));

136

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Program UsBulur; Var x, y : Byte; Procedure Us(a, b : Byte); Var k : Byte; Sonuc : LongInt; Begin Sonuc:=1; For k:=1 To b Do Sonuc:=Sonuc*a; WriteLn(Sonuc); End; {Procedure Us} Begin {Ana blok, üs hespalayan prosedürü farklý deðer parametreleriyle iþletir} Us(3, 5); {1} x:=3; y:=6; Us(y, x); {2} Us(x, y Div 2); {3} End.

Kritik Prosedürün a parametresi yerine 3 deðeri, b parametresi yerine 5 deðerini gönderir ve 35 üssünü hesaplayýp ekrana 243 sonucunu yazar. y’deki deðeri a parametresine, x’deki deðeri derip 63=216 üs hesabýný yazar.

b parametresine gön-

a parametresine x’teki deðeri, b parametresine y Div 2 deðerini gönderip 33=27 üs hesabýný yazar.

5. D EÐÝÞKEN PARAMETRELÝ P ROSEDÜRLER Prosedür içinde deðiþen bazý deðerlerin veya prosedürden elde edilecek sonucun, çaðrýldýðý program kesiminde kullanýlmasý gerekebilir. Prosedürdeki bir deðerin, çaðrýldýðý program kesiminde de kullanýlabilmesi için iki yol uygulanabilir: 1. Prosedürden deðeri çýkmasý istenen deðiþken, yerel deðiþken deðil de, genel deðiþken olarak tanýmlanýr. Böylece, deðiþken tüm programda kullanýlabilir. 2. Prosedürden deðeri çýkmasý istenen deðiþken, deðiþken parametresi olarak prosedüre gönderilir. Böylelikle, prosedürün kendisi bir yerel deðiþken tanýmlamak yerine, çaðrýldýðý program kesiminden gönderilen deðiþkeni kullanýr. Bu sayede, deðiþkenin farklýlaþan deðeri çaðrýldýðý programa da yansýr. 1. Yol, modüler programlama mantýðýna çok uygun deðildir. Bir prosedürün veya fonksiyonun modüler olabilmesi için mümkün olduðunca dýþarýya baðýmlý olmamasý gerekir. Eðer prosedürün dýþarýdan bir deðere ihtiyacý varsa bu deðer parametresi ile alýnýr. Þayet prosedürün dýþarýya bir deðer çýkarmasý gerekiyorsa, deðiþken parametresi kullanýlýr. Deðer ve deðiþken parametre dýþýnda prosedürde kullanýlan bütün deðiþkenler ve sabitler, prosedürün kendi deðiþken ve sabit tanýmlama bloðunda tanýmlanýr. Pascal ve Program Geliþtirme

137

Bölüm-6 Alt Programlar (Procedures And Functions)

Prosedürde kullanýlan bazý deðiþkenler genel deðiþken olarak tanýmlanmýþsa, bu prosedür mevcut haliyle baþka bir programda çalýþamaz. Çünkü bu prosedür için, yeni programda da ayný genel deðiþkenlerin tanýmý gerekir.

5.1. Deðiþken Parametreli Prosedürle Üs Hesabý Örnek Program Kodu

{1} TemelSayi:=SayiUret;

{2} If Kontrol(Sayi) Then

{3} Degerlendir(TemelSayi, Sayi, Poz, Neg);

138

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

Program UsBulur; Var x, y, Sonuc : Integer; Procedure Us(a, b:Integer; Var Sonuc : Integer); Var k : Byte; Begin Sonuc:=1; For k:=1 To b Do Sonuc:=Sonuc*a; End; {Procedure Us}

{5.1.1.}

Begin {Ana blok, üs prosedürünü farklý deðer ve deðiþken parametreleriyle iþletir} Us(3, 5, Sonuc); {Ekrana Yazýlan} {5.1.2.} WriteLn(Sonuc); {243} x:=3; y:=6; Us(2, x, y); {5.1.3.} WriteLn(y); {8} Us(x, y Div 2, x); {5.1.3.} WriteLn(x); {81} End.

Test Ýþletimi

1652 4265 8359 4981 2783 8724 Kritik 3806 1579 5.1.1. Deðiþken Parametreli Prosedür Baþlýðý 8923 Us prosedürüne deðiþken parametre olarak Sonuc deðiþkeni gönder- 6481

ilir. Böylelikle prosedür içerisinde hesaplanan üssü yazdýrmak gerekmez. Hesaplanan sonuç Sonuc deðiþkeniyle ana programa döner. Deðiþken para-metreleri deðer parametrelerinden, önlerindeki Var ayrýlmýþ kelimesi ile ayrýlýr. Sözdizimi: Procedure ProsedürÝsmi(PÝ1,PÝ2,..:ParametreTipi; {Deðer parametreleri} Var PÝ5,PÝ6,...:ParametreTipi; {Deðiþken prm.} Açýklama: Deðer parametrelerinden farklý olarak, deðiþken parametrelerinin baþýna Var ayrýlmýþ kelimesi konur. Genellikle, deðer parametrelerinden sonra tanýmlanýrlar. Ayný deðer parametrelerinde olduðu gibi, farklý tipte deðiþken parametreleri varsa, aralarýna noktalý virgül (;) konur ve tekrar Var kullanarak diðerleri de tanýmlanýr.

5.1.2. Deðiþken Parametreli Prosedürün Çaðrýlmasý

Randomize;

Us prosedürüne 3 ve 5 deðerlerini ve Sonuc deðiþkenini gönderir. Üs prosedürü, 35 üssünü hesaplar ve sonucu Sonuc deðiþkeyle döndürür.

Deðiþken parametresi bulunan prosedürleri çaðýrýrken, dikkat edilmesi gereken bir nokta da, deðiþken parametresi için mutlaka bir deðiþkenin gönderilmesidir. Örneðin buradaki prosedür, Us(2, 3, 4) düzeninde çaðrýlamaz. Çünkü, Us(2, 3, 4) prosedürünün üçüncü parametresi deðiþken deðil, deðerdir. Oysa 23 üssünün hesap sonucu, üçüncü parametredeki deðiþken SayiKr:=Chr(Ord('0')+Random(9)+1); ile döndürülebilir.

5.1.3.

Deðiþken

Parametresinin Bellekteki Yeri Prosedürün deðer paramet-releri olan a için 2 deðeri, b için x deðiþkenindeki 3 deðerini gönderir. Prosedür, 23 üssünü hesaplar ve sonuPascal ve Program Geliþtirme

139

Bölüm-6 Alt Programlar (Procedures And Functions)

cu deðiþken parametre olan y deðiþkeniyle döndürür. Dolayýsýyla, prosedüre gitmeden evvelki y deðiþken deðerinin 6 olma-sýnýn hiçbir önemi yoktur. Ekrana y’nin son deðeri olan 8 yazýlýr. Prosedürlere gönderilen deðer parametreleri, ayný prosedürün yerel deðiþkenleri gibi, ayrý bellek alanýna sahiptir. Ama deðiþken parametreleri için ayrý bellek hücreleri ayrýlKr:=Chr(Ord('0')+Random(10)); maz; çaðrýldýðý deðiþkenin bellek hücresini kullanýr. Böylece, sanki iki ayrý deðiþken ayný bellek hücresini kullanýyormuþ gibi bir durum ortaya çýkar. Prosedürün Until Pos(Kr, SayiKr)=0; bitiminde bellek hücresindeki deðiþiklik, çaðrýldýðý deðiþkenin deðerini de deðiþtirmiþ olur. Aþaðýdaki þekilde Us(2, x, y) üs prosedürünün çaðrýlmadan önce, esnasýnda ve SayiUret:=SayiKr; sonrasýndaki deðer ve deðiþken parametrelerinin deðiþimi verilmiþtir:

Prosedür çaðrýlmadan önce, önceki çaðýrmadan dolayý, Sonuc deðiþkeninde 243 deðeri vardýr. Prosedür çaðrýldýðýnda, a deðiþkenine 2 deðeri, b deðiþkenine x deðiþkenindeki 3 deðeri gelir. Prosedürün Sonuc (PSonuc) deðiþkeni ise, y deðiþkeni ile ayný bellek hücresini kullandýðýndan, hesaplanan 8 deðeri doðrudan y deðiþkeninin bellek hücresine atanýr. Prosedürün deðer parametreleri olan, a için x deðiþkenindeki 3 deðeri, b için y deðiþkenindeki deðerin yarýsý, yani 4 deðerini gönderir. Prosedür, 34 üssünü hesaplar ve sonucu deðiþken parametresi olan x deðiþkeninde tutar. Dolayýsýyla x deðiþkeninde 81 deðeri oluþur. Burada x deðiþkeni, prosedüre hem deðer hem de deðiþken parametresi olarak gönderilmiþtir. Deðer parametresinde önemli olan prosedüre giden deðerdir.

Test Ýþletimi FALSE FALSE FALSE TRUE

140

Prosedüre, ayný isimli iki deðiþken parametresi gönderilemez, ama birçok deðer parametresi gönderilebilir. Çünkü, bir bellek hücresi birden fazla deðiþken parametresi ile ortak kullanýlamaz. Aþaðýdaki þekilde Us(x, y Div 2, x) üs prosedürünün çaðrýlmadan önce, esnasýnda ve sonrasýndaki deðer ve deðiþken parametrelerinin deðiþimi verilmiþtir: Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

6. F ONKSÝYON A LT P ROGRAMI (F UNCTION ) Fonksiyon, prosedür alt programýnýn benzeridir. En önemli farký daima alt program dýþýna bir sonuç bildirmeleridir. Örneðin, Sqr (kare alma) fonksiyonu belirtilen bir sayýyý alýr ve onun karesini üretir. Prosedür içerisindeki bir sonuç, ancak deðiþken parametresiyle alýnabilir. Fonksiyonlarda ise, fonksiyondan çaðrýldýðý kesime dönecek olan deðer, fonksiyonun ismiyle birlikte döner.

6.1. Fonksiyonla Üs Hesabý Örnek Program Kodu

Test Ýþletimi 7259 5267 +1 -2

{1} Procedure Degerlendir(St1, St2 : String; Var Arti, Eksi : Byte);

{2} AramaYer:=Pos(St1[k], St2); If AramaYer=k Then Inc(Arti) Else If AramaYer>0 Then Inc(Eksi);

Pascal ve Program Geliþtirme

141

Bölüm-6 Alt Programlar (Procedures And Functions)

Program UsAlmaFonksiyon; Var a : LongInt; x , y : Byte; Function Us(a,b:Byte):LongInt; Var k : Byte; Sonuc:LongInt; Begin Sonuc:=1; For k:= 1 To b Do Sonuc :=Sonuc * a; Us:=Sonuc; End; {Function Us}

{6.1.1.}, {6.1.2.}

{6.1.3.}

Begin {Ana blok, üs hespalayan fonksiyonu farklý deðer parametreleriyle iþletir} WriteLn(Us(2, 3)); {6.1.4.} a:=Us(3, 5); {6.1.4.} WriteLn(a); x:=4; y:=5; WriteLn(Us(x, y)); {6.1.4.}, {6.1.5.} End.

Kritik

6.1.1. Fonksiyonun Prosedüre Göre Kullaným Farklýlýklarý Üç yönden kullaným farký mevcuttur: 1. Baþlýkta tip tanýmlanmasý, 2. Kod bloðunda fonksiyon ismine sonuç atama, 3. Fonksiyonun bir deðiþken gibi çaðrýlabilmesi. 6.1.2. Fonksiyon Baþlýðý Prosedür tanýmýndan farklý olarak, fonksiyondan çýkacak sonucun tipi belirtilir. Bu tip, tamsayý, karakter, mantýksal, gerçek sayý tipi, string veya özel tanýmlý bir tip olabilir. Sözdizimi : Function FonksiyonÝsmi : SonucunTipi; veya Function FonksiyonÝsmi(Parametreler) : SonucunTipi; Açýklama : Fonksiyonun baþlýk kýsmý, fonksiyonun ismini ve elde edilecek sonucun tipini belirtir. Ayrýca fonksiyona gerekli parametreler de gönderilebilir. Sonucun tipi, sayýlabilir tipler (tamsayý, karakter, mantýksal), gerçek sayý, string, pointer veya özel tanýmlý bir tip olabilir.

6.1.3. Fonksiyon Kod Bloðu Fonksiyon bloðunda, gerekli hizmeti gerçekleþtirecek kod ifadeleri yanýnda, fonksiyonun ismine atama yapan bir ifadenin de olmasý gerekir. Fonksiyon ismine en son atanan deðer fonksiyondan çýkacak olan deðerdir. Us alma iþleminin sonucu, Sonuc deðiþkeninde olduðundan bu deðer, fonksiyon ismiyle belirtilen deðiþkene aktarýlýr.

6.1.4. Fonksiyonun Çaðrýlmasý 23 üssünü Us fonksiyonuyla hesaplatýp, ayný fonksiyon üzerinden dönen sonuç deðerini ekrana yazar. Fonksiyonlarýn iþletilmesinden sonra çýkacak olan deðer yazdýrýlmalý, bir deðiþkene atanmalý veya bir ifade içinde kullanýlmalýdýr. Aksi taktirde çýkacak sonuç deðeri deðerlendirilemez. Örneðin, ReadKey bir fonksiyondur, þayet Ch:=ReadKey; þeklinde

142

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

kullanýlýrsa, ReadKey fonksiyonundan çýkacak deðer Ch deðiþkenine atanýr. Sadece ReadKey; ifadesi kullanýlýrsa, bu komutla dönen karakter kullanýlamaz; yalnýz program akýþýný bir tuþa basana kadar bekletmiþ olur. Fonksiyondan çýkacak olan deðeri, a deðiþkenine aktarýr ve sonrasýnda ekrana yazar. Fonksiyonun deðer parametreleri olan a ve b deðiþkenlerine, x ve y deðiþkenlerindeki deðeri gönderir ve xy üssünü hesaplayýp ekrana yazar.

6.1.5. Ne Zaman Prosedür, Ne Zaman Fonksiyon Fonksiyonlara parametre gönderimi, ayný prosedürlerdeki gibidir. Yani, fonksiyonlara da deðer parametresi veya deðiþken parametresi gönderilebilir. Deðiþken parametresi, sonuç deðerinin alt programdan çaðrýldýðý prog-ram kesimine dönmesini saðlar. Fonksiyonun temel görevi de zaten çaðrýldýðý program kesimine deðer döndürmektir ve bunu yaparken deðiþken parametresi de kullanmaya gerek kalmaz. Yalnýz bu iþlemi, sadece tek bir deðer için yapar ve bu da yeterliyse prosedür yerine fonksiyon kullanýlmalýdýr. Alt programýn belirli bir hizmeti gerçekleþtirip sonuç bildirmesi gerekmi-yorsa veya birden çok sonucu döndürmesi gerekiyorsa prosedür kul-

lanýlmalýdýr.

6.2. Uygulama (Sayý Tahmin Oyunu) Aþaðýda kurallarý verilen zeka oyununu bilgisayarda geliþtiriniz: 1. Bilgisayar, 4 basamaklý, rakamlarý birbirinden farklý ve birinci rakamý 0 olmayan rastgele bir sayý tutar. 2. Oyuncu da 4 basamaklý, rakamlarý birbirinden farklý ve birinci rakamý 0 olmayan bir sayý tahmininde bulunur. 3. Bilgisayar kendi tuttuðu sayý ile oyuncunun sayýsýný karþýlaþtýrýr. Þayet karþýlýklý ayný hanede iki sayý birbirine denk geliyorsa artý (+), farklý hanelerde iki sayý birbirine denk geliyorsa eksi (-) olacak þekilde, bilgisayar kaç artý ve kaç eksi olduðunu oyuncuya bildirir. Örneðin, bilgisayarýn tuttuðu sayý 4761 ve oyuncu da 3764 tahmininde bulunmuþ olsun. 7 ve 6 rakamlarý karþýlýklý ayný hanelere denk geldiðinden iki tane artý ve 4 rakamý da farklý haneye denk geldiðinden bir tane eksi vardýr. Böylece bilgisayar oyuncuya “+2 -1“ mesajýný verir. Oyuncu da bu yönlendirmelere göre bilgisayarýn tuttuðu sayýyý en az denemede bulmaya Pascal ve Program Geliþtirme

143

Bölüm-6 Alt Programlar (Procedures And Functions)

B ÖLÜM TARAMA S ORULARI 1. Dairenin alan ve çevresini hesaplayan prosedürü aþaðýdaki þartlarda yapýnýz. a) Parametresiz olarak prosedürü yazýnýz. b) Dairenin yarýçapý deðer parametresi olarak prosedüre gitsin. c) Alan ve çevre deðerleri deðiþken parametresi olarak prosedüre gitsin.

2. Yukarýdaki b ve c maddesinde tanýmlanan prosedürleri, aþaðýdaki yarýçap deðerleri için çalýþtýran, alan ve çevre deðerlerini ekrana yazdýran program kodlarýný yazýnýz. a) 3 b) 5 c) -4 3. Aþaðýdaki program koduna göre; Procedure A; Var n,c,k:Integer; Begin Write(‘Bir sayý giriniz : ‘); ReadLn(n); c:=1; For k:=1 To n Do c:=c*k; WriteLn(c); End; Procedure B; Begin Write(‘Bir sayý giriniz : ‘); ReadLn(n); For k:=2 To n Div 2 Do If N Div k D = 0 Then Write(k:4); End; Begin Repeat ClrScr; WriteLn(‘A. Birinci Prosedür’); WriteLn(‘B. Ýkinci Prosedür’); WriteLn(‘C. Çýkýþ’); WriteLn(‘Seçiminiz ... ‘); Ch:=ReadKey; Case Ch Of ‘A’: A; ‘B’: B; End; Until Ch=’C’; End. a) Kullanýcý A ve sonra 6 girerse ekran çýktýsý nedir? b) Kullanýcý B ve sonra 10 girerse ekran çýktýsý ne olur? c) Kullanýcý C girerse ne olur? d) A ve ardýndan B girerse ne olur?

144

4. Aþaðýdaki program kodundaki hatalarý bulunuz. Var a, b : Real; Procedure Deneme Begin ReadLn(a); c:=a*b; End. Begin WriteLn(‘Bu bir deneme programýdýr’); b:=3; Procedure Deneme; WriteLn(a); End.

5. Aþaðýdaki prosedüre göre; Procedure A(m, n : Integer); Var k, s : Integer; Begin s:=0; For k:=1 To m Do s:=s+n; WriteLn(s); End; a) A(3,5) çaðrýmýnýn ekran çýktýsý ne olur? b) A(5,10) çaðrýmýnýn ekran çýktýsý ne olur? c) Bu prosedür ne yapar?

6. Bir kiþinin yaþýna göre 10’dan küçükse çocuk, 15 ile 25 arasýnda ise genç, 25-40 arasýnda ise orta yaþlý, 40-60 arasý ise olgun, 60 üzeri ise yaþlý olduðunu belirten prosedürü yapýnýz. Kiþinin yaþý prosedüre deðer parametresi olarak gitmelidir.

7. Aþaðýdaki prosedür tanýmlamasýna göre; aþaðýdaki çaðýrmalarýn hangileri geçerlidir, hangileri hata verir? Niçin? Var a, b, c : Integer; R1, R2 : Real; Ch : Char; Procedure P(Cev :Char; d :Integer; Ep :Real; Var k, m :Integer); a) P(‘a’,a,R2,a,b); c) P(Ch,R1,R2,a,b);

b) P(Ch,5,R1,b,6); d) P(Ch,a,R1,b,c,R2);

8. Deðiþken parametresi ile deðer parametre arasýndaki farklarý açýklayýnýz.

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

9. Aþaðýdaki programýn çýktýsý nedir?

11. Aþaðýdaki programýn çýktýsý nedir?

Var a, b, c : Integer; C1, C2 : Char; Durum : Boolean; Begin a:=2; b:=-5; c:=-(b Mod a); C1:='A'; C2:='a'; Durum:=(a>c) Or (C1>C2); If Durum Then C1:='C'; a:=b*c; WriteLn(a:3, b:3, c:3, C1:3, C2:3); If Not(Durum) Then b:=a+c Else C2:='e'; WriteLn(a:3, b:3, c:3, C1:3, C2:3); If a>b Then If C2>C1 Then C2:='E' Else C1:='e' Else c:=a+b+c; WriteLn(a:3, b:3, c:3, C1:3, C2:3); End.

For k:=1 To 7 Do For p:=k+1 To 8 Do If Dizi[k]>Dizi[p] Then Begin t:=Dizi[k]; Dizi[k]:=Dizi[p]; Dizi[p]:=t; End; For k:=1 To 8 Do Write(Dizi[k]:4);

10. Aþaðýdaki program kodunun çýktýsýný ve programdaki genel ve yerel deðiþkenleri bulunuz. Var a, b, c : Integer; Procedure P1(a :Integer; Var c, b : Integer); Var k : Integer; s : LongInt; Begin If c>b Then a:=a+c Else a:=a+b; s:=1; For k:=1 To b Do s:=s*c; WriteLn(s); WriteLn(a,’ ‘,b,’ ‘,c,’ ‘); End; Begin a:=3; b:=5; c:=4; P1(b, a, c); WriteLn(a,’ ‘,b,’ ‘,c,’ ‘); End.

Pascal ve Program Geliþtirme

12. Aþaðýdaki programýn çýktýsý nedir? Var s : Integer; Function Us (a, n : Integer):LongInt; Var k : Integer; Begin s:=1; For k:=1 To n Do s:=s*a; Us:=s; End; Function Toplam (s : Integer):Integer; Var t : Integer; Begin t:=0; While s0 Do Begin t:=t+s Mod 10; s:=s Div 10; End; Toplam:=t; End; Begin s:=30; WriteLn(Us(3, 5)); WriteLn(Toplam(s)); End.

145

Bölüm-6 Alt Programlar (Procedures And Functions)

P ROGRAMLAMA S ORULARI 1. Ekrana seçime göre yýldýzlardan oluþan bir

6. Dizi olarak verilmiþ iki kümenin kesiþimini ve

kare, üçgen veya dikdörtgen çizen programý geliþtiriniz. Programýn en az 3 prosedürü olmalýdýr. (Kare, üçgen ve dikdörtgen çizdirme prosedürleri)

birleþimini bulan alt programlarý geliþtiriniz. Küme elemanlarýnýn sýralý olarak girildiðini varsayarak problemi çözünüz.

2. Bir tablonun ters köþegeninin toplamýný bulan

7. 1..N arasýndaki asal sayýlarý ekrana yazdýran

alt programý yazýnýz.

alt programý geliþtiriniz. Bu problemin çözümü için þu þekilde bir yol takip edilebilir:

3. Ekrana gelen menü üzerine, Istanbul, Ankara,

Önce, 2 den N’e kadar mantýksal elemanlardan oluþmuþ bir dizinin elemanlarýna True deðeri aktarýlýr. Sonra 2’den baþlayarak N sayýsýnýn kareköküne kadar her sayýnýn kendileri hariç bütün katlarýnýn olduðu dizi elemanlarýný False yapýn.

Ýzmir, Bursa ve Erzurum hakkýnda, turistik merkezlerini, Ýstanbul’a olan uzaklýðýný, iklimini veren alt programý geliþtiriniz.

4. Ýki noktanýn koordinatý veriliyor, doðru denklemini çýkaran alt programý geliþtiriniz.

5. 6x6 boyutlarýndaki bir tablonun en küçük sayýsýný bularak, tablodaki bütün elemanlarýn bu sayýyla çarpýmýndan oluþan 6x6 boyutlarýnda ikinci bir tablo oluþturacak alt programý geliþtiriniz.

8. Bir tablonun köþegeninin toplamýný bulan alt programý yazýnýz.

9. Verilen bir dizinin 2. en büyük elemanýný diziyi sýralamadan bulan alt programý geliþtiriniz.

10. Dijit dijit toplama yapan alt programý geliþtiriniz. Sayýlar bir string halinde girilir ve string’lerin son karakterinden baþlayarak basamak basamak toplama yapýlýr. Kaðýt üzerinde toplama kuralýnda olduðu gibi, þayet toplam sonucu 10’un üstündeyse, sol tarafa 1 elde gider.

146

Pascal ve Program Geliþtirme

Alt Programlar (Procedures And Functions) Bölüm-6

çalýþýr.

Pascal ve Program Geliþtirme

147

Bölüm-6 Alt Programlar (Procedures And Functions)

148

Pascal ve Program Geliþtirme

BÖLÜM

7

GRAFÝK (GRAPHIC)

BÖLÜM

7

4.3. Uygulama (Hareketli Dairenin Takibi)

GRAFÝK(GRAPHIC)

1. M ETÝN (T EXT ) T ABANLI G ÖSTERÝM 1.1. Metin Modunda Renkli Yazýmlar 1.1.1. 1.1.2. 1.1.3. 1.1.4.

Ýstenen Konuma Gidilmesi (GotoXY) Yazý Taban Rengini Belirleme(TextBackGround) Yazý Üst Rengini Belirleme (TextColor) Deðiþik Taban ve Üst Renkleriyle Yazým

1.2. Metin Tabanlý Diðer Ekran Komutlarý -TextAttr, HighVideo, LowVideo, NormVideo

2. G RAFÝK T ABANLI G ÖSTERÝM 3. G RAFÝK K OORDÝNAT S ÝSTEMÝ 3.1. Uygulama (Grafik Ortamda Ekran Dinlendirici) 3.1.1. Grafik Kütüphanesi Kullanýmý (Uses Graph) 3.1.2. Grafik Sürücü ve Modu Deðiþkenleri 3.1.3. Grafik Sürücü ve Modunun Belirlenmesi (DetectGraph) 3.1.4. Grafik Ortamýnýn Baþlatýlmasý (InitGraph) 3.1.5. Grafik Hata Kontrolü (GraphResult) 3.1.6. Grafik Hata Mesajý (GraphErrorMsg) 3.1.7. Grafik Ekrana Piksel Koyulmasý (PutPixel) 3.1.8. Grafik Koordinat Sýnýrlarý ve Maksimum Renk - Maksimum Yatay Piksel Adedi (GetMaxX) - Maksimum Dikey Piksel Adedi (GetMaxY) - Maksimum Renk Adedi (GetMaxColor) 3.1.9. Klavye Tuþuna Basýlma Kontrolü (KeyPressed) 3.1.10. Grafik Ekrandan Piksel Okuma (GetPixel) 3.1.11. Grafik Ortamýnýn Kapatýlmasý (CloseGraph)

4. G RAFÝKTE T EMEL Ç ÝZÝMLER 4.1. Uygulama (Sinüs ve Kosinüs Grafikleri) 4.1.1. Pi (Π) Sayýsý ve Radyan Açý Sabiti 4.1.2. Grafik Zemin Rengi Deðiþimi (SetBkColor) 4.1.3. Grafik Ekraný Temizleme (ClearDevice) 4.1.4. Doðru Parçasý Çizimi (Line) 4.1.5. Dikdörtgen Çizimi (Rectangle) 4.1.6. Aktif Çizim Renginin Alýnmasý (GetColor) 4.1.7. Aktif Çizim Rengini Deðiþtirme (SetColor) 4.1.8. Grafik Ortamda Yazým (OutTextXY) 4.1.9. Verilen Açýnýn Sinüsü (Sin) 4.1.10. Verilen Açýnýn Kosinüsü (Cos) 4.1.11. Çizim Stilini Belirleme (SetLineStyle) 4.1.12. Ýmlecin Konumunu Deðiþtirme (MoveTo) 4.1.13. Doðru Çizimi (LineTo) 4.1.14. Grafik Sürücü ve Modunun Otomatik Tespiti (Detect) 4.1.15. Grafik Hata Kontrolü

4.2. Uygulama (Dijital ve Analog Saat) 4.2.1. Dos Kütüphanesi (Uses Dos) 4.2.2. Yazý Ayarlarý Kaydý (TextSettingsType) 4.2.3. Yazý Ayarlarýnýn Alýnmasý (GetTextSettings) 4.2.4. Yazý Stilini Ayarlama (SetTextStyle) 4.2.5. Yazý Konumunu Ayarlama (SetTextJustify) 4.2.6. Karakter Büyüklüðü Ayarlama (SetUserCharSize) 4.2.7. Yazý Geniþliðinin Alýnmasý (TextWidth) 4.2.8. Yazý Yüksekliðinin Alýnmasý (TextHeight) 4.2.9. Çember Çizimi (Circle) 4.2.10. Çizim Modunu Ayarlama (SetWriteMode) 4.2.11. Bilgisayar Saatini Okuma (GetTime) 4.2.12. Programýn Fonksiyonlarý 4.2.13. Programýn Prosedürleri

4.3.1. Elips Çizimi (Ellipse) 4.3.2. Doðru Çizimi (LineRel) 4.3.3. Ýmlecin Konumunu Deðiþtirme (MoveRel) 4.3.4. Grafik Ekrana Yazým (OutText) 4.3.5. Verilen Deðerin Ark Tanjantý (ArcTan) 4.3.6. Ark Çizimi (Arc) 4.3.7. Kontrol ve Fonksiyon Tuþlarýný Okuma 4.3.8. Program Ýþletimini Geciktirme (Delay) 4.3.9. Bilgisayarýn Hoparlöründen Ses Üretimi (Sound) 4.3.10. Bilgisayar Hoparlörünü Susturma (NoSound) 4.3.11. Mutlak Deðer (Abs)

5. G RAFÝKTE B ÝRLEÞÝK Ç ÝZÝM

VE

A LAN T ARAMA

5.1. Uygulama (Öðrenciler Arasý Baþarý Çubuk Grafiði) 5.1.1. Sabit Tanýmlý Diziler (Constant Array) 5.1.2. Desen ve Renk Kodu Kaydý (FillSettingsType) 5.1.3. Mevcut Desen ve Rengin Alýnmasý (GetFillSettings) 5.1.4. Desen ve Renk Kodu Deðiþimi (SetFillStyle) 5.1.5. Ýki Boyutlu Çubuk Grafik Çizimi (Bar) 5.1.6. Desen Dizi Veri Tipi (FillPatternType) 5.1.7. Grafik Pencere Alan Kaydý (ViewPortType) 5.1.8. Grafik Pencere Verilerinin Alýnmasý (GetViewSettings) 5.1.9. Grafik Pencere Tanýmlama (SetViewPort) 5.1.10. Grafik Pencere Alanýnýn Silinmesi (ClearViewPort) 5.1.11. Mevcut Desen Dizisinin Alýnmasý (GetFillPattern) 5.1.12. Özel Desen Tanýmlama (SetFillPattern) 5.1.13. Üç Boyutlu Çubuk Grafik Çizimi (Bar3D)

5.2. Uygulama (Dersler Arasý Baþarý Pasta Grafiði) 5.2.1. Programýn Sabit ve Sabit Tanýmlý Dizileri 5.2.2. Dairesel Pasta Grafik Çizimi (PieSlice) 5.2.3. Eliptik Pasta Grafik Çizimi (Sector)

6. G RAFÝKTE Ç OKLU E KRAN S AYFALARI 6.1. Uygulama (Gülen ve Aðlayan Yüz) 6.1.1. 6.1.2. 6.1.3. 6.1.4.

Kapalý Alaný Renklendirme (FloodFill) Çok Sayfalý Grafik Moduna Geçiþ Aktif Ýþlem Sayfasý Seçimi (SetActivePage) Aktif Görüntü Sayfasý Seçimi (SetVisualPage)

7. G RAFÝKTE Ý KÝ B OYUTLU G EOMETRÝK D ÖNÜÞÜMLER 7.1. Uygulama (Kendi Etrafýnda Dönen Kutu) 7.1.1. 7.1.2. 7.1.3. 7.1.4. 7.1.5. 7.1.6. 7.1.7.

Dörtgen Kutunun Ýlk Ýþlemleri Dörtgen Kutuyu Döndürme Ýþlemleri Grafik Alan Hacmi Bildirimi (ImageSize) Dinamik Bellek Alaný Ayýrma (GetMem) Grafik Alandan Belleðe Kopyalama (GetImage) Bellekten Grafik Alanýna Kopyalama (PutImage) Dinamik Bellek Alanýnýn Boþaltýlmasý (FreeMem)

8. G RAFÝÐÝN D ÝÐER K OMUTLARI -DrawPoly, FillEllipse, FillPoly -GetArcCoords, GetAspectRatio, GetBkColor, GetDefaultPalette, GetDriverName, GetGraphMode -GetLineSettings, GetMaxMode, GetModeName, GetModeRange,GetPalette, GetPaletteSize, GetX -GetY, GraphDefaults, InstallUserDriver, InstallUserFont, RestoreCrtMode, SetAllPalette -SetAspectRatio, SetGraphBufSize, SetGraphMode, SetPalette, SetRGBPalette

B ÖLÜM T ARAMA S ORULARI P ROGRAMLAMA S ORULARI

Grafik (Graphic) Bölüm-7

BÖLÜM-7 GRAFÝK (GRAPHIC) Gösterim kalitesi açýsýndan ekran modlarý, metin (text) ve grafik tabanlý olmak üzere ikiye ayrýlýr. Bilindiði üzere, þu ana kadar hep metin tabanlý ekran üzerinde gösterimler yapýldý.

1. M ETÝN (T EXT ) TABANLI G ÖSTERÝM Metin modundaki ekran, tipik olarak = 2000 karakterlik bilgiyi ayný anda gösterebilir. Düz metin harici çizim ve resim gösterilemez. Yaygýn olarak kullanýlan VGA tipi ekranda kolon olarak (40 / 80), satýr olarak (25 / 43 / 50) gösterim opsiyonlarýndan biri seçilebilir. Muhtemel Metin Ekran Modlarý (80 (80 (80 (40 (40 (40

X X X X X X

25)->(Standart) 43) 50) 25) 43) 50)

DOS Ýþletim Sisteminde Moduyla Ayar MODE CON COLS=80 LINES=25

moduyla ayar MODE CON COLS=40 LINES=43

1.1. Metin Modunda Renkli Yazýmlar Metin modunda ekrana yazýlan her bir karakterin TextBackGround zemin ve TextColor üst rengi mevcuttur. Örnek Program Kodu (TextYaz.Pas) Program Text_Modda_Renkli_Yazimlar; Uses Crt; Procedure EkranaYaz(X,Y,TabanRenk,UstRenk:Byte; Cumle:String); Begin GotoXY(X,Y); TextBackGround(TabanRenk); TextColor(UstRenk); Write(Cumle); End; Var k : Byte; Begin For k:=0 To 15 Do EkranaYaz(5, k+2, k Div 2, k, 'RENKLÝ YAZIMLAR'); End.

Test Ýþletimi {1.1.1.} {1.1.1.} {1.1.2.} {1.1.3.}

{1.1.4.}

Kritik

1.1.1. Ýstenen Konuma Gidilmesi (GotoXY) Procedure EkranaYaz(X,Y,TabanRenk,UstRenk:Byte; Cumle:String);

Cumle ile verilen cümleyi, belirtilen (X, Y) konumuna, istenilen TabanRenk taban ve UstRenk üst renkleriyle ekrana yazar.

Pascal ve Program Geliþtirme

149

Bölüm-7 Grafik (Graphic)

GotoXY(X,Y);

Metin ekran üzerindeki imleci (cursor), (X, Y) ile belir-tilen konuma pozisyonlandýrýr.

Sözdizimi : Procedure GotoXY(X, Y: Integer); {Uses Crt} Açýklama : Ýmleci metin ekran üzerinde X. kolon, Y. satýra konumlandýrýr. Örnek : GotoXY(8, 5); Ýmleci, 8. kolon, 5. satýra konumlandýrýr.

1.1.2. Yazý Taban Rengini Belirleme (TextBackGround) Ekrana yazýlacak karakterlerin taban rengini (0 .. 7 arasýnda bir renk) TextBackGround(TabanRenk); TabanRenk olarak belirtir. Sözdizimi : Procedure TextBackGround(TabanRenk: Byte); {Uses Crt} Açýklama : Ekrana yazýlacak karakterlerin zemin rengini TabanRenk olarak belirler. Örnek : TextBackGround(Red); Yazýnýn taban rengini kýrmýzý olarak belirler.

1.1.3. Yazý Üst Rengini Belirleme (TextColor) Ekrana yazýlacak karakterlerin harf görünüm rengini UstRenk ile belirtilen 0..15 TextColor(UstRenk); arasýndaki bir renk olarak belirler. Sözdizimi : Procedure TextColor(YazýÜstRenk: Byte); {Uses Crt} Açýklama : Ekrana yazýlacak karakterlerin görünüm rengini YazýÜstRenk olarak belirler. Örnek : TextColor(Green); Yazýnýn üst görünüm rengini yeþil olarak belirler.

1.1.4. Deðiþik Taban ve Üst Renkleriyle Yazým For k:=0 To 15 Do EkranaYaz(5, k+2, k Div 2, k, 'RENKLÝ YAZIMLAR');

8 (0..7) deðiþik taban rengi ve 16 (0..15) deðiþik üst görünüm rengi ile 'RENKLÝ YAZIMLAR' yazýsýný ekrana yansýtýr.

1.2. Metin Tabanlý Diðer Ekran Komutlarý TextAttr: Byte

{Uses Crt}

TextColor ve TextBackGround ile seçilecek renk moduna ayarlar. Procedure HighVideo;

{Uses Crt}

Yüksek yoðunluklu ekran yazým modunu seçer. Procedure LowVideo;

{Uses Crt}

Düþük yoðunluklu ekran yazým modunu seçer. Procedure NormVideo; Ekran yazým modunu ilk orjinal haline döndürür.

150

Pascal ve Program Geliþtirme

Grafik (Graphic) Bölüm-7

2. G RAFÝK TABANLI G ÖSTERÝM Günümüzde, grafik tabanlý gösterim, mimarlýk, mühendislik plan ve projelerinden, harita ve tapu kadastroya kadar pek çok alanda yoðun kullaným yelpazesine sahiptir. Grafik, yüksek çözünürlüðe haiz ekran moduyla iþler. Tipik olarak (640 x 480) gibi bir ekran çözünürlüðüne geçiþ yapýlarak grafik ortamýnda çizim ve resim iþlemesi yapýlabilir.

3. G RAFÝK KOORDÝNAT S ÝSTEMÝ Grafik ekran, yatay ve dikey olarak eþit parçalara bölünmüþ matris gibi kabul edilebilir. Bu matrisi oluþturan en küçük temel elemana piksel (pixel: renk noktasý) denir. Bu piksellerin çeþitli þekillerde birleþtirilmesiyle çizimler elde edilir. Ekran üzerindeki her bir pikselin belirli yatay ve dikey konumu vardýr. Bu koordinatlara eriþmek suretiyle grafiksel iþlemler gerçekleþtirilir.

3.1. Uygulama (Grafik Ortamda Ekran Dinlendirici) Grafik ortamýnda ekrana rastgele 10000 piksel koyan ve bunlarýn renPascal ve Program Geliþtirme

151

Bölüm-7 Grafik (Graphic)

klerini deðiþtirerek ekraný koruyan (screen saver) programý geliþtiriniz. Program Kodu (PutPixel.Pas) Program Grafik_Ortamda_Ekran_Dinlendirici; Uses Crt, Graph; {3.1.1.} Const MaxNokta =10000; {Ekrana ayný anda koyulacak piksel sayýsý} Var

GrfSurucu, GrfModu, HataKodu : Integer; RasgeleX, RasgeleY, PikselRenk, NoktaSayisi, k : Word;

{3.1.2.}

Begin DetectGraph(GrfSurucu, GrfModu); WriteLn('Grafik Sürücüsü :',GrfSurucu); WriteLn('Grafik Modu :',GrfModu); WriteLn('Grafik moduna geçmek için tuþuna basýnýz...'); ReadLn;

{3.1.3.}

InitGraph(GrfSurucu, GrfModu, 'C:\BP\BGI'); {3.1.4.} HataKodu:=GraphResult; {3.1.5.} If HataKoduGrOk Then {3.1.6.} Begin WriteLn('Grafik hatasý!:', GraphErrorMsg(HataKodu)); {3.1.6.} Exit; End; Randomize; For k:=1 To MaxNokta Do {3.1.7.} PutPixel(Random(GetMaxX),Random(GetMaxY),Random(GetMaxColor)); {3.1.8.} NoktaSayisi:=MaxNokta; Repeat {3.1.9.} RasgeleX:=Random(GetMaxX); RasgeleY:=Random(GetMaxY); PikselRenk:=GetPixel(RasgeleX,RasgeleY); {3.1.10.} If PikselRenkBlack Then {Renk kodu alýnan PikselRenk siyah} Begin {harici ise bu pikseli söndürür} PutPixel(RasgeleX, RasgeleY, Black); Dec(NoktaSayisi); End Else If NoktaSayisi komutlarýnýn eþiti: Line(50, 50, 200, 200);

4.1.14. Grafik Sürücü ve Modunun DjtlSaatYazY:=GetMaxY-Round(1.2*TextHeight('9')); Otomatik Tespiti (Detect) InitGraph, GrfSurucu deðiþkenine atanan Detect (0) sabitiyle, DetectGraph prosedürünün yaptýðý iþlemi de otomatikman yapacaktýr. Böylece, uygun grafik sürücü ve moduyla grafik ortamýný baþlatýr. 4.1.15. Grafik Hata Kontrolü Grafik ortamýna geçiþ baþarýyla neticelenmediðinde GrOk dýþýnda bir hata mevcut demektir. Hatalý durumda programýn ilerleyen iþletimine son verip Circle(AnlgSaatMerkezX,AnlgSaatMerkezY,AnlgSaatYariCap Div 20); Circle(AnlgSaatMerkezX,AnlgSaatMerkezY,AnlgSaatYariCap);

çýkar. Test Ýþletimi (Const TumAci=720; için)

4.2. Uygulama (Dijital ve Analog Saat) Aþaðýda ekran görünümü verilen dijital ve analog saatleri grafik ortamýnda çizip iþletecek programý geliþtiriniz. SetWriteMode(XorPut);

Analiz Grafik ortamýna geçiþ yapýlýr. Saatin ilk koordinat ayar ve çizimleri yapýlýr. Dijital ve analog saatleri, bilgisayarýn sistem saati esas alýna-rak güncellenir. Bilgisayarýn saatindeki her saniye deðiþiminde, dijital saat yazýsý, analog saatin akrep, yelkovan ve saniye ibreleri deðiþtiri-lir. Bu iþlem kullanýcýnýn çýkýþ manasýna gelen Esc tuþuna basmasýna dek sürer. En sonunda grafik ortamý kapatýlýp çýkýlýr. Tasarým

168

Pascal ve Program Geliþtirme

Grafik (Graphic) Bölüm-7

If AktifDakikaOncekiDakika Then ...

Repeat GetTime(AktifSaat, AktifDakika, AktifSaniye, Salise); If AktifSaniyeOncekiSaniye Then {...} Until KeyPressed And (ReadKey=#27);

Function SinusDegeriX(Katsayi:Real;Aci:Word):Word;

Pascal ve Program Geliþtirme

169

Bölüm-7 Grafik (Graphic)

Function CosinusDegeriY(Katsayi:Real;Aci:Word):Word;

Procedure SaatIlkIslemler;

Procedure SaatRakamlariniYaz;

Procedure DijitalSaatiGuncelle;

Procedure AnalogSaatiGuncelle;

170

Pascal ve Program Geliþtirme

Grafik (Graphic) Bölüm-7

1. Grafik ortamýna geçiþ yap {InitGraph}. 1.1. Eðer grafik ortama geçilemez ise çýk {If GraphResultGrOk Then Exit}. 2. Saatin ilk koordinat ayar ve çizimlerini yap. 2.1. Dijital saatin yazý alanýný ve çerçevesini çiz. 2.2. Analog saatin merkezi ve yarýçapýný tespit et. Buna göre analog saatin çerçevesi, çapý ve rakamlarýný çiz. 3. Kullanýcý Esc tuþuna basmadýðý sürece; 3.1. Bilgisayarýn sistem saatini oku {GetTime}. 3.2. Dijital saati Saat:Dakika:Saniye düzeninde ekrana yansýt {OutTextXY(DjtlSaatYazX,DjtlSaatYazY,SaatDakikaSaniye)}. Her an son deðeri güncellemek için XOR metodunu kullan. 3.3. Analog saatin her saniye deðiþimi için saniye ibresini, her dakika deðisimi için de yelkovan ve akrep ibrelerini güncelle. 4. Grafik ortamýný kapatýp programdan çýk.

Program Kodu (Saat.Pas)

Pascal ve Program Geliþtirme

171

Bölüm-7 Grafik (Graphic)

Program Grafik_Ortamda_Dijital_ve_Analog_Saat; Uses Dos,Crt,Graph; {4.2.1.} Const AciSabit = Pi/180; {Radyan açýsý} AkrepIbreKatsayi = 0.6; {Analog saatin akrep ibre katsayýsý} YelkovanIbreKatsayi = 0.75; {Analog saatin yelkovan ibre katsayýsý} SaniyeIbreKatsayi = 0.85; {Analog saatin saniye ibre katsayýsý} AkrepRenk = Red; YelkovanRenk = Blue; SaniyeRenk = Magenta; AnlgSaatRakamRenk= LightRed; DjtlSaatYaziRenk = LightBlue; Var

GrfSurucu, GrfModu : Integer; {Dijital saatin (10:43:37 gibi) yazýlacaðý baþlangýç (X,Y) deðiþkenleri} DjtlSaatYazX, DjtlSaatYazY, {Analog saatin merkez koordinatý ve yarýçapýný tutacak deðiþkenler} AnlgSaatMerkezX, AnlgSaatMerkezY, AnlgSaatYariCap, {Akrep, yelkovan ve saniye ibrelerinin boylarý ve uç koordinatlarýný tutar} AkrepIbreBoy, AkrepSonX, AkrepSonY, YelkovanIbreBoy, YelkovanSonX, YelkovanSonY, SaniyeIbreBoy, SaniyeSonX, SaniyeSonY : Word;

Function SayidanCumleye(Sayi:LongInt):String; {Sayý olarak verilen iki} Var St: String[10]; {basamaklý ifadeyi cümleye çevirir} Begin St:=''; Str(Sayi,St); If Length(St)
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF