Mega Code Archive

 
Categories / Delphi / Forum
 

Neoturk - programlama dilleri genel bilgiler

Herkese Merhaba, NOT: Bu bilgileri yayınlarsanız lütfen kaynak belirtin, emeğe saygı.......... written by neoturk ( 2003 ) BÖLÜM - 1 PROGRAMLAMA DİLLERİ 1) Makine Dili ( Assembly ) 2) Moduler Programlama Dilleri ( + Yapısal Programlama Dilleri ) 3) Nesneye Yönelik Programlama Dilleri ( + Görsel Programlama Dilleri ) 4) Webtabanlı Programlama Dilleri 1) Makine Dili (Assembly): Low seviyede programlama dilidir. İleri düzey donanım bilgisi ve cpu komutlarının bilinmesi gerekiyor. Avantaj olarak yazılan programlar son derece hızlı çalışır, makinaya her türlü müdahale yapılabilir, hazırlanan programlar oldukça küçük alan yer işgal ederler. Viruslerin yazılmasında tercih edilen dillerden birisidir. Dezavantaj olarak, program yazımımın zorluğu, kodlamanın takip zorluğu ve test işlemlerinin zor olduğu şeklinde sıralanabilir. Örnek kodlama olarak aşağıdaki yapı incelenebilir: push ebx xor eax, eax dw $A20F // CPUID instruction mov DWord ptr aVendor, ebx mov DWord ptr aVendor[+4], edx mov DWord ptr aVendor[+8], ecx pop ebx Yukardaki kod cpu'nun üretici firmasını döndürür. Görüldüğü gibi son derece "low"(düşük) tabanlı bir kodlamadır. Ve makinaya oldukça yakındır. Kullanıcıya hitap etmez. Bu yüzden makine dili olarak adlandırılır. 2) Moduler ve Yapısal Programlama Dilleri: Makine dilinin zorluğundan dolayı, kullanıcıya hitap edecek şekilde "high"(yüksek) seviyede programlama dilleri geliştirilmiştir. Programcı bilgisayarla adeta İngilizce konuşurcasına program yazabilir duruma getirilmiştir. Moduler programlama dillerinin avantajları olarak, procedure ve function tanımlamalarının yapılabilmesi ve bunları gerektiğinde gruplandırılabilme imkanının olmasıdır. Çalışma hızı makine diline göre düşüktür. Hata ayıklanması ve program takibi kolaydır. Yapısal programlama dillerinde ise function ve procedure mantıklarının kullanımı kısıtlıdır. Bu yüzden pek fazla verimli değildir. Günümüzde oldukça az kullanılan Yapısal Programlama Dilleri Aşağıda belirtilmiştir: Gw-Basic: Oldukça eski bir programlama dilidir. Günümüzde fazla kullanılmamaktadır. Fortran: Formula-Translation baş harflerinden elde edilmiştir. Matematiksel uygulamalar için geliştirilmiş formülüzasyon programıdır. Günümüzde fazla kullanılmamaktadır. Yeni versiyonları çıksa da pek rağbet görmemiştir. Cobol: Ticari uygulamalar için geliştirilmiş bir programlama dilidir. Zamanında kullanılmıştır. Günümüzde pek kullanılmamaktadır. Dbase: Veri tabanı programcılığı programlama dillerinin atasıdır. Data-Base yani veri tabanı adını almıştır. Fazla miktarda verilerin sorgulanıp üzerinde işlemler yapılabilmesi amacıyla bu dil geliştirilmiştir. Zamanında oldukça yaygın kullanılmıştır. Daha sonra kendisini üst sürümlere geçirmiştir. Yukarda açıklanan programla dilleri günümüzde pek fazla kullanılmamaktadır. Bu programlama dillerinin kendilerine ait editörleri vardır. Ms-dos ortamında yazılırlar. Program yazıldıktan sonra derlenir ve test edilir. Açıklanan bu dillerde procedure ve function kullanımı fazla etkin kullanılamadığı için günümüz ihtiyaçlarına cevap veremediği ortadadır. Bu yüzden bu dillerin yerini daha modern diller almıştır. Modern modüler programlama dilleri şunlardır: 1) C 2) Pascal 3) QuickBasic C: C programlama dili, modüler programlama dilleri içersinde en güçlü ve en hızlı olarak çalışabilen programlama dilidir. Assembly diline "A" deniyordu, daha sonra "B" dili çıkarıldı ve kullanıcılar bu dili kullanmakta zorlandı. Bunun üzerine hem "low" seviyeyi korumak hem de "high" seviyede iletişim kurabilmek için kullanıcıya biraz daha anlaşılabilir duruma getirilen bu dile "C" ("si" diye okunur) adı verildi. C dilinin öğrenilmesi ve çözüm programlarının geliştirilmesi diğerlerine göre daha zordur. Bunun için iyi bir programlama temel bilgisi gerekmektedir. C dilinin avantajları olarak şunları sıralayabiliriz: 1. Oluşturulan programlar diğer programlara göre daha hızlı çalışmaktadırlar. Bunun gerekçesi olarak da "low" seviye functionları destekliyor olmasıdır. 2. Program yazılımında "pointer" kullanımının full olarak desteklendiği ve bu konunun C dili içersinde uzmanlaştırılmış olması büyük bir avantajdır. Bu da beraberinde hızı ve etkinliği getirmektedir. 3. Her türlü yazılıma cevap verebilmektedir. Windows işletim sistemi de "C" programlama dilinde yazılmıştır. C dilinin dezavantajları: 1. Program yazımı diğer modüler dillere göre daha zordur. 2. Program hatalarını takip etmek biraz daha zordur. 3. Makinaya da müdahale imkanı sağladığı için extra olarak pc bilgisi de istemektedir. C dilinin kendisine ait bir editörü vardır. Bu editör kullanılarak program yazılır. Aşağıda örnek bir C programı verilmiştir: #include <iostream.h> using namespace std; int usal(int sayi, int ussu); int main() { int taban, us; cout << "Taban:"; cin >> taban; cout << "\nUssu:"; cin >> us; cout << "\n" << taban << " uzeri " << us << " = " << usal(taban,us) << "\n"; return 0; } int usal(int sayi,int ussu) { int i,sonuc; sonuc=1; for (i=1;i<=ussu;i++) sonuc=sonuc*sayi; return sonuc; } Bu program x üzeri y ( x^y ) matematiksel işlemini hesaplar. NOT: Programlama dilleri arasında şu kural vardır, bir programlama dili kullanıcıya kolay geliyorsa o programlama dili gerçek koşullarda verimsizdir, şayet bir programlama dili kullanıcıya zor geliyorsa o programlama dili gerçek koşullarda verimlidir. Zor olan programlama dilleri her zaman daha fazla etkinlik ve fırsat imkanı sunmaktadırlar. Ancak kullanım zorluğundan dolayı programcılar bazen başka dillere de geçiş yapabilmektedirler. Pascal: C programının çoğu kişiye zor gelmesinden dolayı biraz daha yüksek "high" seviye programlama dili geliştirilmek istenmiştir. Bilimsel ve matematiksel uygulamalar için geliştirilmiş olan bu dile "pascal" adı verilmiştir. Pascal programlama dili hemen hemen her üniversitede genel programala dili olarak öğretilmiş ve programlamaya başlamak isteyenler bu dille başlamayı uygun görmüşlerdir. C ile yakın bir kodlama benzerliği gösterir. Pascal programının kendisine ait bir editörü vardır. En son 7.0 versiyonu çıkmıştır. Programlar bu editörde yazılır. Aşağıda örnek bir pascal programı gösterilmiştir: Uses crt; Const n=5; type sdizi=array[1..n] of real; var sayac,i:integer; rakam:sdizi; toplam: real; begin clrscr; toplam:=0;sayac:=1; while sayac<n do begin write('bir sayı girin:'); readln(rakam[sayac]); if rakam[sayac]=0 then break; sayac:=sayac+1; end; for i:=1 to sayac do toplam:=toplam+rakam[i]; writeln('Toplam sayı',toplam:0:2); readln; end. Bu program 5 kere ard arda sayı ister ve bu girilen sayıların toplamını ekranda söyler. Quick Basic: Gw-Basic'in geliştirilmiş ve modüler hale geçirilmiş halidir. Pascal ve C programcılarından geri kalınmaması için Microsoft tarafından en son 7.1 sürümü çıkarılmıştır. İhtiyaçları görecek şekilde etkinlik sağlar. Aşağıda örnek quick basic programı verilmiştir: CLS INPUT "İkili Sayı=";ikili$ Uzunluk=LEN(ikili$); Onlu=0 FOR I=1 TO uzunluk Hane$=MID$(ikili$,i,1) IF Hane$="0" OR Hane$="1" THEN Onlu = 2 * Onlu + VAL(Hane$) ELSE PRINT "Hatalı ikili sayi…"; hane$ EXIT FOR END IF NEXT PRINT "Onlu sayı=";Onlu END Sonuç olarak ms-dos ortamında gerekli editörlerde yazılarak hazırlanan modüler programlama dilleri arasındaki etkinlik ve hız bağlantısı şu şekildedir C programlama dili ' Pascal programlama dili ' Quickbasic programlama dili Bu diller daha sonra "Nesneye Yönelik Programlama" ( Görsel Programlama ) dillerine yükseltgenmişlerdir. C ' C Builder ( C++ ) Pascal ' Delphi Quickbasic ' VisualBasic Olarak görsel programlama dilleri çıkartılmış ve halen günümüzde sıkça kullanılmaktadır. Güç ve etkinlik sıralaması tıpkı modüler programlamada olduğu gibidir ve kalıtsal olarak aynı özellikler aktarılmış ve miras olarak üst versiyonlara bırakılmıştır. Visual programlama dillerinin en önemli özelliklerinden biri programın ekran tasarımını kodlama ile değil tasarım zamanı bir resim çiziyormuş gibi rahatça yapılabilmesidir. Modüler programlama dillerinde ise yaptırılmak istenen her şeyin kesin olarak bir kodlamadan geçirilmesi gerekmektedir. Bu da extra zaman ve uğraş anlamına gelir. Modüler programlama dillerinden birisini çok iyi öğrenmiş bir programcı Görsel Programlama Dillini 1 ay içinde öğrenebilir ve yeni uygulamaları rahatça yazabilir. Her ne kadar görsel programlama dillerinde tasarım anı kolay olsa da, programın kalitesini ve gücünü her zaman yazılan "kodlama tekniği ve mantık" belirleyecektir… Bu yüzden function ve komutları son derece iyi bilmekte fayda vardır. 3) Görsel Programlama Dilleri: Yukarda da bahsedildiği gibi günümüzde sıkça kullanılan görsel programlama dillerinden, C Builder ( C++ -> "si plas plas" ) Delphi VisualBasic vardır. Bunların dışında da görsel programlama dilleri vardır ama fazla kullanılmamaktadır. Borland firması CBuilder ve Delphi görsel programlama dillerini çıkarmıştır. Microsoft firması ise VisualBasic dilini çıkarmıştır. Görsel programlama dillerinden ilk çıkanı Microsoft firması tarafından çıkartılan VisualBasic programlama dili olmuştur. 1994 yılında revaçta olarak kullanılmıştır. QuickBasic programlama dilini bilen bir çok programcı bu dile rahatça geçiş yapmışlardır. Ve Windows ortamında programlar yazılmaya başlanmıştır. Bunun üzerine Borland firması C dilini bilenler için CBuilderi çıkarmış, pascal dilini bilenler içinse Delphi dilini çıkarmışlardır. Çıkarılan bu Cbuilder ve Delphi görsel programlama dilleri, visualbasicten çok fazla avantaj ve kullanım etkinliği sunduğu için visualbasic kullananlar bu dillere geçmekte zorlanmışlardır. Çünkü hem syntax(yazım) farklılığı hem de alışkanlıkların terk edilmesi bir programcı için oldukça zordur. Çok büyük uygulama ve projeler için CBuilder önerilmektedir. Hertürlü proje için Delphi önerilmektedir. Microsoft programlarıyla entegre çalışılması istenen (Access vs) projeler için VisualBasic uygun olmaktadır. Ancak, visualbasic en ağır ve hantal çalışan bir programlama dilidir. Hızı delphiye ve cbuildere göre yavaştır. Kullandığı nesne ve kütüphane sayısı azdır. Üretilen exe programlar tek başlarına olmayıp yanında harici dosyalar da üretmektedir. Bunlar da dezavantaj olarak görülmektedir. Delphi ise hızlı ve güçlüdür. Her türlü veri tabanını visualbasicden daha hızlı kullanabilir. Komutları daha hızlı çalıştırır. "dead code" mantığını kullanmaz, bu da programa süratlilik ve etkinlik kazandırmaktadır. Nesne ve kütüphane ortamı çok geniştir, böyle olunca da her türlü isteye ve projeye cevap verebilmektedir. Nesneye yönelik programlamada "nesne" olarak tanımladığımız program blockları vardır. Bu blockları programcı kendisine göre tasarladıktan sonra başka bir uygulamada tekrar kullanabilmek için bu bloğu nesneye dönüştürebilir. Ve kendi kütüphanesini oluşturabilir. Delphi ve CBuilder programcıları visualbasic programcılarının oluşturdukları nesneleri kullanabilirken, visualbasic programcıları delphi ve cbuilder nesnelerini kullanamazlar. Bu yüzden visualbasic programcıları yarı yolda kalmıştır denilebilir. Bu yüzden delphi ve CBuilder dillerinden birisine geçiş zorunlu bırakılmıştır. Hangi programlama dili ile uğraşacağımıza karar vermek çok önemlidir. Tüm programlama dillerinde uzman olmak imkansız olabilir. Bir tane dili çok iyi bilmek, diğer dilleri hiç bilmemekten çok daha iyi ve doğru bir seçimdir. 4. Web Tabanlı Programlama Dilleri: Bu diller şunlar olarak sayılabilir, Html, ( hyper text markup language ) Xml, ( x module language ) Cgi, ( common gateway interface ) Asp, ( active server pages ) Jsp, ( java server pages ) Php, Perl, Bu diller modüler yapıda olup ( kısmen bazılarında nesneler bulunmaktadır ) yüksek seviyeli dillerdir. Yani kullanıcı rahatlıkla bu kodları anlayabilir ve yorumlayabilir. Hata takibi kolaydır. Bu diller, web tabanlı uygulamalarda kullanılmaktadır. Online üye takip sistemi, online veri sorgulama, güncel haber teknolojisi vs… BÖLÜM - 2 ALGORİTMA AKIŞ ŞEMALARI 2.1 Bilgisayar İle Soru Çözümü İster bilgisayarla, ister bilgisayarsız soru çözmek için belirli bir yol vardır. Ancak bu yol ile sağlıklı bir çözüme ulaşılabilir. Çözümü bilgisayara uyarlamak ise ayrı bir sorundur. Bilgisayar kullanarak soru çözmek için sonuca giden yolun tam olarak belirlenmesi gerekir. Doğru bir yol izleyebilmek için, çıkılan ve ulaşılan yer tanımlanmalıdır. Aynı soru için değişik çözüm yolları geliştirilebilir. Bazıları belirli durumlarda diğerlerinden daha iyi sonuç verebilir. Bilgisayarın sorularınıza yardımcı olması, önceden hazırlanan verilerin komut dizileri ile derlenerek elde edilen sonuç bilgisiyle olur. Bu olay sanıldığı kadar kolay değildir. Eğer bilgisayara verilen çözüm yanlışsa çıkan sonuç yanlış, çözüm doğru ise sonuç da doğrudur. Ayrıca kullanılan zaman ve bilgisayarın yetenekleri de göz önünde tutulmalıdır. Bilgisayar sizin yapmakta güçlük çektiğiniz işlemleri dener ve yol gösterir. Kendiliğinden yorum yapamaz. Sizi yönetmesi ve sonuca mutlaka uyulması gibi bir şey olamaz. 2.2. Sor çözme adımları a) Soru tanımlama b) Algoritma geliştirme c) Girdi ve çıktı biçimi belirleme d) Akış şeması çizme e) Kodlama ( programlama ) f) Program sınama Soru Tanımlama: Her şeyden önce çözülecek soru tam olarak anlaşılmalıdır. Yanlış anlaşılmış bir sorunun çözümü yanlış olacak ve istenileni vermeyecektir. Bu adımda yapılacak en ufak bir hata, daha sonraki adımların yeni baştan yapılmasını gerektirebilir. Sorunun tanımı yapılırken var olan bilgiler, anlamları ve birbirleri ile ilişkileri tanımlanmalıdır. Daha sonra istenenler belirlenmeli ve bunların var olan bilgiler ile ilişkileri öğrenilmelidir. Son olarak yapılacak işlemler belirlenir. Mümkün ise örnek veriler ile elde edilen sonuçlar değerlendirilmelidir. Algoritma Geliştirme: Algoritma bir sorunun çözümü için izlenilecek yolun tanımıdır. Kısaca algoritma mevcut bilgilerden istenilenlere erişme yöntemidir. Soru tanımını tam olarak yaptıktan sonra, çözüm için yol aramak gerekir. Genellikle bir sorunun birden fazla çözüm yolu olabilir. Bunlardan en uygunu seçilmeğe çalışılır. Çözüm yolunun belirlenmesi büyük ölçüde programcının kitap karıştırmasına ve o zamana kadar edindiği bilgi birikimini kullanmasına dayanır. Soru ne kadar karışık olursa olsun, alt birimlere bölünür. Her birimin çözümü ayrı ayrı yapılır. Bu yapılırken birimler arası ilişki sürekli olarak korunur. Girdi ve Çıktı Biçimi Belirleme: Sonuçların dış ortama, dolayısıyla insana aktarım düzgün bir biçimde yapılmalıdır. Programcı program çıktısı olarak almak istediği dökümün biçimini tasarlar. Bir döküm biçim tasarlanırken, anlaşılır ve kullanılabilir olmasına özen gösterilmelidir. Genellikle programa, çözdüğü soruna ilişkin bazı verilerin dışarıdan verilmesi gerekir. Örneğin bir denklem takımının kökleri bulunacaksa, ilgili katsayıların programa verilmesi gibi. Eğer giriş bilgileri program içinde tanımlanacaksa, verilerin biçimi de program yazılmadan önce hazırlanmalıdır. Akış Şemasını Çizme: Akış şeması belirli bir işin yapılabilmesi için, basit işlemlerle şema halinde gösterilmesidir. Kısaca algoritmanın şemalarla gösterilmesidir. Algoritma geliştirildikten sonra, daha iyi anlaşılabilir olması ve programlama dillerine aktarımı daha kolay olması nedeniyle, akış şeması haline getirilir. Böylece sorunun çözüm basamakları, birbirleri ile ilişkileri ve bilgi akışı daha kolay görülebilir ve yanlışlıklar düzeltilebilir. Kodlama ( programlama ) : Akış şemaları çizildikten sonra, sorunun yapısına uygun bir programlama dili seçilir. Bu dil ile akış şemaları dilin kurallarına uygun olarak bilgisayarın anlayabileceği duruma getirilir. Program Sınama: Algoritmanın hatasız olarak herhangi bir programlama diline göre kodlaması nadir görülen bir olaydır. Çünkü insanın hiçbir olasılığı gözden kaçırmadan, düşüncelerini formüllendirmesi kolay bir iş değildir. Bu nedenle basitte olsa bir program birkaç kez düzeltildikten sonra kullanıma hazırlanır. Program yazıldıktan sonra, sonuçları daha önceden bilinen veriler girilerek, eldeki sonuçlarla, çıkan sonuçlar karşılaştırılır. Programın doğru çalışıp çalışmadığı sınanır. Yalnız burada dikkat edilecek önemli bir husus, eldeki veriler için tam olarak çalışması programın iyice arındığını kanıtlamaz. Sınamada, programın kesim kesim her olası durumda kendinden beklenileni tam olarak gerçekleştirdiği, kuşkuya yer bırakmayacak biçimde belirlenir. Sınama yanlışları ortaya çıkartan bir işlem elemanıdır. Ayrıca her yeni yazılmış programda pek çok gizli yanlışın olacağını önceden kabul etmek gerekir. Sınama sırasında karşılaşılan hata türlerinden yazılım hatasını düzeltmek kolaydır. Bu hata türü kullanılan programlama diline ait komutların tanımın dışında yazılmasından kaynaklanır. Programcının ençok dikkat edeceği hata türü mantık hatasıdır. Mantık hatası, program hata vermeden çalıştığı halde algoritmadaki yanlışlık nedeniyle sonuçların beklenilenden farklı çıkmasıdır. Y=ax+b ifadesinde a=2 ve b=1 ise x'in aldığı değere göre y'yi hesaplayalım. Yanlışlıkla a ve b'nin değerlerini 2 ve 1'den farklı verdiğimizde, program bize hata mesajı vermeden çalışır. Buna bağlı olarak sonuçlar beklediğimizden farklı çıkar. İşin kötüsü biz bu hatanın farkına bile varmayabiliriz. Hata türleri, 1. Syntax yazım hataları 2. Mantıksal hatalar Algoritma Hazırlanması: Algoritmanın bir sorunun çözümü için izlenecek yolun tanımı olduğunu söylemiştik. Bu yolun açıklanabilmesi için, algoritmada kullanılan gerekli tanım ve kuralları aşağıda anlatıp örnekler geliştireceğiz. Değişken: Farklı zamanlarda farklı değerler alabilen bilgi sahalarına verilen sembolik adlardır. Değişken adları A-Z arası alfabetik bir harfle başlayıp 0-9 arası rakamla (arada boşluk yok) devam edebilir. ( ADSOY, SAYAC, A, TARIH123 vb gibi ) Aktarma Deyimi: A=A+1 şeklindeki bir yazılımda "=" sembolü aktarma deyimi adını alır. Aktarma deyiminin sağ tarafındaki matematiksel ifadenin sonucu, sol tarafındaki değişkene aktarılır. Aktarma yapılırken değişkenin aldığı bir önceki değer kaybolur. Bu işlem matematiksel mantıkla karıştırılmamalıdır. Matematikte A=A+1 yanlış olduğu halde, bilgisayar mantığında doğrudur. Sayaç: X=X+1 X=X+1 aktarma deyiminde sağdaki ifadede x değişkeninin aldığı değerle "1" sayısı toplanıp soldaki x değişkenine aktarılmaktadır. Örnek olarak x'in aldığı ilk değer "0" olsun, sayacımız birer birer artan sayıları kullanacaktır. Matematiksel mantık ve karar sembolleri: Verilen bilgilerin türüne göre, bazı durumlarda mevcut bilgiler arasından istediğimiz özellikleri taşıyanları seçmek isteriz. Örneğin bir fabrikada çalışan işçiler arasından yaşı 25'den büyük olanları listesi gibi. Bilgisayarın bunu yapabilmesi için, soru sorulabilmesi ve cevabın ayırt edilebilir olması gerekir. Aranılan tek bir özellik olacağı gibi birden fazla da olabilir. Şimdi algoritma açısından bu soruların bilgisayara nasıl sorulabileceğini görelim. Örneğin YAS>25 önermesi ya yanlış ya da doğrudur. Matematiksel mantık, karar sembollerini kullanarak önermeler arasındaki ilişkileri inceler. Var olan bilgiler bir küme olarak düşünülürse, önermeler grubu ile öne sürdüğümüz koşulları sağlayan elemanlar seçilir. Belki kümede bulunan bütün bilgiler bu koşulları sağlar, belki de hiçbiri sağlamaz. Algoritmada kullanılan karar sembolleri: Çıkarma - Toplama + Çarpma * Bölme / Aktarma = Eşit değil <> Küçüktür > Büyüktür > Küçükeşit <= Büyükeşit >= Bir veya birden fazla koşul bazı bağlaçlarda bir araya getirilerek, daha karmaşık sorular sorulabilir. Örneğin yaşları 25'den büyük ve adları "Ahmet" olan işçilerin listesini istiyorsak yas>25 ve adi="Ahmet" diyebiliriz. Bu bağlaçlardan ve,veya,değil olanlarını aşağıda kısaca inceleyelim. VE Bağlacı ( AND ): Ve bağlacı ile söylenen istenen her iki koşulun da sağlanmasıdır. Ve bağlacı ile bağlanmış önermelerden en az birinin yanlış olması sonucu yanlış yapar. İkiden fazla önermeler için sonucun doğru olduğu durum her önermenin doğru olmasıdır. VEYA Bağlacı ( OR ): Veya bağlacı ile bağlanan koşullardan en az birisi doğru ise sonuç doğrudur. İkiden fazla önermeler için, önermelerden en az birinin doğru olması sonucu doğru yapar. DEĞİL Bağlacı ( NOT ): Değil bağlacı doğruyu yanlış, yanlışı doğru yapar. Adı "Ahmet" olmayanların koşulunu değil adı="Ahmet" şekilde ifade edebiliriz. Degil ile Ve, Veya bağlacını ayıran temel fark, değil tek bir önerme veya koşul üzerine uygulanır. Ve, Veya ise iki önerme veya koşul üzerine uygulanır. Mantıksal işlemlerde işlem öncelik sıraları DEĞİL, VE, VEYA dizilişindedir. Parantezler ilk önce uygulanır. İç içe parantezlerde öncelik en içtekindedir. Matematiksel İşlemler: Matematiksel işlemleri algoritmada aynen kullanamayız. Bilgisayar mantığına göre matematiksel ifadelerin yeniden yazılmaları gerekir. Algoritmada işlem öncelik sırası kuralları aşağıda verilmiştir. Parantez kullanılarak işlem öncelik sıraları değiştirilir. İç içe kullanılan parantezlerde öncelik en içtekindedir. Aynı işlem önceliğine sahip elemanlarda işlem soldan sağa doğrudur. Sıra Tanım Bilgisayar 1 Parantezler (( )) 2 Üs almak a^n 3 Çarpma ve bölme a*b a/b 4 Toplama ve çıkarma a+b a-b Algoritma Hazırlama Kuralları: Kural 1: Her işlem adımının bir satır numarası vardır. 1. 2. 2.1 2.2 3. 3.1 3.1.1 3.1.2 3.2 1,2 ve 3 ana adımlardır. 2.1 ve 2.2 adımları 2.ana adımın alt adımlarıdır. 3.1 ve 3.2 adımları, 3.adımın alt adımlarıdır. 3.1 adımı 3.1.1 ve 3.1.2 adımlarının ana adımıdır. Algoritmadaki bu adımlar programa geçerken aynen korunur. Programlarda alt adımlar da tam sayılar olarak tanımlanırlar. Kural 2: Ana ve alt adımlar arası geçişte "GİT" kelimesi adım numarası ile birlikte kullanılır. 1. Değişken OKU 2. Okuma sona erince GİT adım 6 3. Değişkenin karesini al 4. Sonucu yazdır 5. GİT adım 1 6. DUR Yukardaki örnekte herhangi bir sayının karesinin algoritması yazılmıştır. 4. adımda sonuç yazdırılır. 5. adımda başka bir sayı okunması için, tekrar birinci adıma gidilir. 2.adımda okunan sayılar bitince 6.adıma geçilerek algoritma sona erer. Kural 3: Adımlar arası geçişler alt altadır. Her hangi bir adımda bir koşul belirtilirse, yapılacak işlemler koşula bağlı olarak sıralanır. Bağlı satırlara numara verilmez. 1. İlk sayıyı OKU 2. İkinci sayıyı OKU 3.1 Eğer ilk sayı > ikincisayi ise - YAZ "ilk sayı ikinciden büyük" - GİT 4 3.2 Eğer ilk sayı < ikincisayı ise - YAZ "ilk sayı ikinciden küçük" - GİT 4 3.3 YAZ "ilk sayı eşit ikinci sayı" 4. DUR Yukardaki örnekte birbirinden farklı iki sayıyı karşılaştıran algoritma yazılmıştır. AKIŞ DİYAGRAMLARI: Örnekler: 1. Birbirinden farklı verilen A B C üç adet tamsayıdan büyük olan sayıyı bulan algoritmayı yazalım. 2. isim ve soyismimizi 5 kere tekrarlayıp yazan algoritmayı yazalım 3. 1-5 arası tamsayıların toplamını bulan algoritmayı yazalım 4. 1-5 arası tamsayıların karelerini söyleyen algoritmayı yazalım 5. İkinci dereceden denklem köklerini bulan algoritmayı yazalım ( delta=b^2-4ac kok1= (-b + kok(delta))/2a ) kok2= (-b - kok(delta))/2a ) {delta<0 ise sanal kökler.} 6. Verilen kenarlara göre bir üçgeni test eden algoritmayı yazalım ( eşkenar,ikizkenar,çeşitkenar üçgen. A B C kenarları ) 7. Sayı tahmini oyunu (küçük/büyük) algoritmasını yazalım. Sorular: 1. isim ve soyisminizi ekranda 10 kere görüntüleyiniz 2. Üç basamaklı bir sayının basamaklarını toplayınız 3. N adet sayının ortalamasını bulan algoritmayı yazınız 4. Verilen bir cümlede kaç kelime olduğunu söyleyen algoritmayı yazınız BÖLÜM - 3 QUICK BASIC 7.0 MODÜLER PROGRAMLAMA 1. Özel Karakterler boşluk = aktarma veya eşittir + artı işareti - eksi işareti * yıldız veya çarpma / bölme veya kesme işareti ( slash ) ^ üstel veya şapka ( sol parantez ) sağ parantez % yüzde # no işareti $ dolar işareti ! ünlem işareti [ sol köşeli parantez ] sağ köşeli parantez , virgül . Ondalık nokta veya tekrar ; noktalı virgül : iki nokta üst üste & ve işareti ( ampersand ) ? soru işareti < küçük işareti > büyük işareti \ tam sayı bölme ( back slash ) @ at karşılığı 2. Değişkenler Tamsayı Integer a% -32767+32767 Karakter character a$ "" max 255 Tek duyarlı single a 7 haneli. Gösterimi E şeklindedir. 123.456E-7 Cift duyarlı double a# 16 haneli. Gösterimi D şeklindedir. 2.35987D-06 3. Komutlar REM : Program içinde istenilen yerlerde açıklamalar vermek için kullanılır. REM [açıklama] END: Programın çalışmasını durdurur END STOP : Programın çalışmasını geçici olarak durdurur STOP SHELL: Basic yorumlayıcısından çıkar ve çalışılan sürücüye dönülür ( DOS ) Shell "dir c:\*.* /w/p" CLS: Ekran görüntüsünü siler CLS INPUT: Veri girişi almak için kullanılır. Kullanıcının sayısal veya sözel veri girmesini sağlar. INPUT ["mesaj"][,;] <değişken listesi> LINE INPUT ["mesaj"][,;] <değişken listesi> PRINT - LPRINT : Ekran veya yazıcıdan bilgi görüntüler. PRINT [ifadeler listesi] LPRINT [ifadeler listesi] PRINT USING "###,###,###";a% LOCATE : Ekranın istenilen konumunda görüntüleme yapar LOCATE satir,sutun Locate deyimi kursoru ekranın istenilen konumuna taşır. Satır kursorun taşındığı satır nosudur ve en büyük değeri 24 dür. Sütun kursorun taşındığı sütun nosudur en büyük değeri 80 dir. Ekran sınırları aşılınca "illegal function call" hata mesajı ekranda görüntülenir. COLOR: Ekran görüntüsünü renklendirir COLOR renk,fon { renk ve fon kodları açıklanacak } READ - DATA - RESTORE : Hazır olarak tanımlanmış verileri okur { örneklendirme yapılacak } SORULAR 1. Aşağıdaki basic değişkenlerinin hangileri geçersizdir? a) c1 b) a c) 5a d) /2 e) z98 f) 9a g) input h) sayi i) toplam1 2. a=10, b=50, c=100 ise, aşağıdaki basic deyimleri sonucu nedir ? d=a+b+c print d d=(a+b)/c print d d=a+b/c print d 3. Aşağıdaki aritmetiksel eşitliklerin basic karşılığı nedir? a) a=3x^2+2x+1 b) ((a^2)^2 c) b^2-4ac 4. Aşağıdaki programların sonucu nedir? A=100 B=150 C=-100 D=a+b+c Print a,b,c,d End X=50 Y=10+x Z=x+x*y Print z End A$="coder" A=1 A=a+1 Print a Print a$ End 5. Aşağıdaki programların sonucu nedir ? a) cls read a,b,c d=a+b*c print a,b,c,d data 50,40,2 end b) read a,b restore read c,d e = a+b+c+d print e data 20,10 end c) read a,b read c read d f=(a+b)/(c+d) print "F=";F data 50 data 100 data 30,20 end 6. a,b,c,d,e,f değişkenlerinin değerleri sırasıyla 10,5,12,6,3,20 ise aşağıdaki PRINT deyimlerinin ekran çıkışını yazınız? Print a,b,c Print a;b;c Print a*d,a+b+c,f/b,c+e Print "b ve F'nin toplamı =";b+f 7. Aşağıdaki programların çıktısı nedir? a) Cls Read a,b T=a+b Print t;"Toplam" Data 25,-5 End b) cls a=1.95 b=9.65 c=a*b print "a*b="; print using "##.#####";c end c) cls read a,b c=a^2+b^2 print a,b print "c=";c data 2,3 end d) cls read a,b,c,d p=a/b+c/d print using "####.#####";p data 4,2,9,3 end 8. INPUT, PRINT, LOCATE deyimlerini kullanarak isim soyad, adres ve yaşı soran ve görüntüleyen basic programını yazınız ? 9. a,b,c değişkenlerinin değerlerini ve toplamlarını ekranda görüntüleyen basic programını yazınız? a) her değişken ve toplam ayrı satırda görüntülenecek b) her değişken aynı satırda toplam ayrı satırda görüntülenecek c) her değişken ve toplam aynı satırda görüntülecek 10. Soru 9'daki sonucun ortalamasını bulunuz? IF-THEN-ELSE: Karar yapılarına göre program akışını değiştirir IF <koşul> THEN deyimler ELSE deyimler IF <koşul> THEN Deyimler ELSE Deyimler END IF SELECT CASE: Koşula bağlı olarak blok yapıları işleme girer SELECT CASE <hedef terim> CASE karar1 İşlemler CASE karar2 İşlemler CASE ELSE İşlemler END SELECT CASE IS < 7 … CASE 7 TO 11 …. CASE 12 TO 14… CASE 21… CASE 25,30,35… CASE ELSE … FOR-NEXT : Döngü işlemini yapar FOR <değişken>=X TO Y [ STEP Z ] Deyimler [ EXIT FOR ] NEXT [<değişken>] DO-WHILE-LOOP: Koşul doğru olduğu süre döngü tekrarlanır DO WHILE <koşul> Deyimler [EXIT DO] LOOP DO-UNTIL : Koşul doğru olana kadar döngü tekrarlanır DO <koşul> Deyimler [EXIT DO] LOOP UNTIL <koşul> GOSUB - RETURN : Program akışını geri gelmek koşuluyla değiştirir GOSUB <etiket> Deyimler RETURN ON ERROR: Hata bulma deyimidir ON ERROR GOTO <etiket> <etiket:> print "hata oluştu" RESUME NEXT DIM: Ana bellekteki indisli değişkenlere boyut tanımı yapar DIM [SHARED] <indisli değişkenler> DIM adsoy$(10), notlar(10) SHARED deyimi alt programlarda da geçerli olduğunu belirtir. { örnekler yapılacak } FONKSİYONLAR: Abs(x) x sayısının mutlak değerini alır Len(x$) x stringinin uzunluğunu hesaplar Asc(x) x karakterinin ascii karşılığını verir Chr$(m) ascii kod tablosundaki karakter karşılığını verir Left$(x$,m) x stringinden soldan m kadar haneyi alır Right$(x$,m) x stringinden sağdan m kadar haneyi alır Mid$(x$,m[,n]) x stringinden soldan m'den başlayıp n kadar haneyi alır Randomize rastgele sayı üretimini yeniden harmanlar Rnd(x) rastgele sayı üretir String$(m,n[$]) m adet n ascii kodundan/karakterinden oluşturur Space$(m) m adet boşluk verir Str$(m) m sayısını stringe çevirir Sqr(m) m sayısının karekökünü alır Sin(m) m sayısının sinusunu alır Cos(m) m sayısının cosinusunu alır Tan(m) m sayısının tanjantını alır Atn(m) m sayısının cotanjantını alır Exp(m) m sayısının e üzeri değerini hesaplar Log(m) m sayısının 10luk tabanda logaritmasını alır İnkey$ bir tuşa basılma olayını kapar İnstr(x$,subkey$) x$ stringi içinde subkey$ anahtarının indexini verir Time$ aktif saati söyler Date$ aktif tarihi söyler Ltrim$ soldan kırpar Rtrim$ sağdan kırpar Ucase$ büyükharfe çevirir Lcase$ küçükharfe çevirir SORU:ANA,SERA,FAKAT kelimelerini üç alfabetik değişkene atayarak ANKARA kelimesini yazan programı yazınız ? SUB-END SUB: Alt program tanımıdır FUNCTION-END FUNCTION: Alt function tanımıdır { örnekler yapılacak, procedure ve function arasındaki farklar anlatılacak. Parametreler ve kullanım gerekçeleri hakkında bilgiler verilecek } KÜTÜK YAPILARI Kütük Yapısı ( File Structure ) Bilgisayar veri bütünü içindeki en küçük veri elemanına alan (field) denir. Her alanda yer alan bilginin toplam karakter sayısı alan boyu adını alır. Alan birimi için Byte veya karakter kullanılır. Her alan sembolik değişken adları ile ifade edilir. Alanlar bir araya gelerek kayıtları oluştururlar. Bir kayıdın toplam uzunluğu alan boylarının toplamıdır. Kayıtlar bir araya gelerek kütüğü oluşturur. Bir kütükte aynı kayıt yapısı bozulmadan devam eder. Derleyici ve yorumlayıcılar her kayıa tamsayılar boyutunda kayıt noları verir. Bu kayıt noları kullanılan programlama dilinin özelliğine göre değişir. A. Sıralı erişim ( Sequential Access ) Kayıtları sıralı yani ardı ardına okunup yazılabilen kütük düzenidir. Teyp kütükleri bu düzendedir. Bir kayda erişmek için o kayıttan önceki tüm kayıtların tek tek okunması gerekmektedir. Bu düzen hızlıdır. Ancak editleme işlemleri zahmetlidir. B. Rastgele erişim ( Random Access ) Kayıtlarına doğrudan erişebilen kütük organizasyonudur. Disk ve disket kütükleri doğrudan veya sıralı erişimli olabilir. Bu düzen yavaştır ancak editleme işlemleri kolayca yapılabilmektedir. C. Doğrudan sıralı erişim ( Index Sequantial Access ) Indexli kütükler belirli bir anahtara göre sıralanırlar. Anahtarlama kayıt numarasına bağlı kalmaksızın yapılır. OPEN - FIED: Open deyimi ile, yan bellekte yeniden veya önceki kütük rastgele erişimli olarak kullanıma açılır. Field deyimi ile alana adları türlerine bakılmaksızın karakter olarak tanımlanırlar. Rastgele erişimli kütük yapısı: OPEN "R",[#]<kütükno>,<kütükadı>,<kayıtboyu> FIELD [#]<kütükno>,<alanboyu> AS <değişkenler> Sıralı erişimli kütük yapısı: OPEN "O",[#]<kütükno>,<kütükadı> //dosyayı sıfırdan üzerine açar OPEN "I",[#]<kütükno>,<kütükadı> //dosyayı okumak için açar Örnekler: Open "r",#1,"dosya.dat",35 Field #1,25 as adsoy$,2 as yas$, 8 as tarih$ PUT-GET: PUT deyimi, FIELD deyimi ile daha önceden alanlarına yerleştirilen bir kayıtı yan belleğe yazar ( disk veya disket ). GET deyimi ise yan bellekteki bir kaydı ana bellekte FIELD deyimi ile tanımlanan sahaya aktarır. PUT [#]<kütükno>,<kayıtno> GET [#]<kütükno>,<kayıtno> CLOSE: CLOSE daha önce açılan bir kütüğü kapatır. CLOSE #1 LOF: LOF deyimiyle kütük sonu kontrolü yapılır. Kütüğün kayıt boyuna bölünmüş dilim alınır ve elde edilen son kayıt no bulunur. Toplamkayit=lof(1)\kayitboyutu Kabaca bir örnek: … FIELD #1,20 as adi$, 4 as yas$, 15 as maas$ Input "Adınız soyadınız:";adi1$ Input "Yaşınız";yas1$ Input "Maasiniz";maas1$ LSET adi$=adi1$ LSET yas$=yas1$ LSET maas$=maas1$ Put #1,kayıtno Dosyalamalarla ilgili eskiden yazmış olduğum değişik örnekler: SHELL "dir *.pas /b > files.tmp" OPEN "i", #1, "files.tmp" DO WHILE NOT (EOF(1)) LINE INPUT #1, file$ OPEN "i", #2, file$ LINE INPUT #2, item$ IF LEFT$(item$, 4) = "unit" THEN PRINT file$ END IF CLOSE 2 LOOP CLOSE COLOR 15, 0: CLS baslangic% = 194 bitis% = 210 form$ = "form1" OPEN "o", #1, "label.tmp" FOR m% = baslangic% TO bitis% PRINT #1, LTRIM$(STR$(m%)) + ":" PRINT #1, "begin" PRINT #1, form$ + ".label" + LTRIM$(STR$(m%)) + ".color:=pf;" PRINT #1, form$ + ".label" + LTRIM$(STR$(m%)) + ".font.color:=pr;" PRINT #1, "end;" NEXT CLOSE PRINT "label serisi oluŸturuldu..." PRINT "label.tmp" DECLARE SUB bitir () DECLARE FUNCTION kirp$ (txt$) DECLARE SUB scan (filename$, taranan1$, taranan2$, sonuc$) DECLARE FUNCTION incele& (PRG$) DECLARE SUB dur () COMMON SHARED result% SCREEN 0: COLOR 7: CLS SHELL "dir *.exe /o/b > filelist.tmp" SHELL "dir *.dll /o/b >> filelist.tmp" OPEN "i", #2, "filelist.tmp" DO WHILE NOT (EOF(2)) 'filename$ = "server.exe" LINE INPUT #2, filename$ result% = 0 OPEN "i", #3, "c:\windows\antih.def" DO WHILE NOT (EOF(3)) LINE INPUT #3, item$ artikonum = INSTR(item$, "+") esittir = INSTR(item$, "=") IF artikonum = 0 OR esittir = 0 THEN COLOR 15 PRINT item$ PRINT "Check the Antih.def...": dur: END END IF t1$ = kirp$(LEFT$(item$, artikonum - 1)) t2$ = kirp$(MID$(item$, artikonum + 1, esittir - artikonum - 1)) sonuc$ = RTRIM$(MID$(item$, esittir + 1)) 'PRINT t1$, t2$, sonuc$ scan filename$, t1$, t2$, sonuc$ IF result% = 0 THEN EXIT DO LOOP CLOSE 3 LOOP CLOSE COLOR 15: PRINT "Finished..." bitir SUB bitir STATIC IF incele("filelist.tmp") THEN KILL "filelist.tmp" END END SUB SUB dur STATIC DO: tus$ = INKEY$: LOOP UNTIL tus$ <> "" END SUB FUNCTION incele& (PRG$) STATIC DIM filecount AS LONG IF LEN(DIR$(PRG$)) = 0 THEN filecount& = 0 ELSE filecount = 1 DO WHILE LEN(DIR$) > 0 filecount& = filecount& + 1 LOOP END IF incele = filecount& END FUNCTION FUNCTION kirp$ (txt$) STATIC kirp$ = LTRIM$(RTRIM$(txt$)) END FUNCTION SUB scan (filename$, taranan1$, taranan2$, sonuc$) STATIC ON LOCAL ERROR GOTO scanhata COLOR 2 display$ = filename$ + " is scanning..." LOCATE 23, 1: PRINT display$ + SPACE$(80 - LEN(display$)) IF LEN(filename$) > 12 THEN f1$ = LEFT$(filename$, 6) + "~" f2$ = MID$(filename$, INSTR(filename$, ".")) t$ = "" ok% = 0 FOR f% = 1 TO 100 t$ = f1$ + LTRIM$(STR$(f%)) + f2$ IF incele(t$) THEN ok% = 1: filename$ = t$: EXIT FOR NEXT IF ok% = 0 THEN EXIT SUB END IF filelength% = 32000 OPEN "r", #1, filename$, filelength%: FIELD #1, filelength% AS a$ FOR l = 1 TO INT(LOF(1) / filelength%) + 1 GET #1, l IF INSTR(a$, taranan1$) AND INSTR(a$, taranan2$) THEN LOCATE 23, 1: COLOR 12: PRINT filename$ + sonuc$ PRINT EXIT FOR END IF IF INKEY$ = CHR$(27) THEN CLOSE bitir END IF NEXT result% = 1 devam: CLOSE 1 EXIT SUB scanhata: LOCATE 23, 1: COLOR 7: PRINT filename$ + " in use. Not Scanned..." PRINT result% = 0 RESUME devam END SUB BÖLÜM - 4 TURBO PASCAL 7.0 MODÜLER PROGRAMLAMA Turbo Pascal programlarında, program geliştirme ortamı adı verilen IDE (integradted development environment) menüleri, birbirleri ile entegre çalışan, iç içe işlem seçenekleri pencerelerinden meydana gelmiştir. - Turbo Pascal çalıştırıldığında, menü seçeneklerinden yararlanılarak herhangi bir yazım yapılabilir. - Yazılan bir Pascal programının derlenmesi (makine diline çevrilmesi) ve çalıştırılması yapılabilir - Dos ortamına dönmeden, program hata kontrolu (debug) yapılabilir Borland firması IDE menülerini beş farklı versiyonunu hazırlamıştır. - Sadece dos uygulamaları için yaratılan ve dos altında çalışan IDE - Sadece dos koruma modlu uygulamaları için yaratılan ve dos koruma modu altında çalışan IDE - Sadece dos koruma modlu veya Windows uygulamaları için yaratılan ve dos koruma modu altında çalışan borland pascal dos ide - Windows uygulamaları için yaratılan ve Windows altında çalıştırılan turbo pascal for Windows ide - Dos koruma modlu veya Windows uygulamaları için dos altında yaratılan ve Windows altında çalışan borland pascal for Windows ide Farklı uygulamalara karşılık, ide menüleri birbirlerine çok benzerler - turbo.exe programı, turbo pascal dos - turbox.exe ( tpx.exe ) programı, koruma modlu turbo pascal - bp.exe programı, borland pascal Pascal programına DOS ortamından geçiş yapılarak çalıştırılır. Ekrana gelen ide menüleri, masa üstü çalışmaları olarak adlandırılır. Ekranın en üst satırında yan yana sıralandırılarak ide menüleri listelenir. Yazılımları yapılacağı çerçeveli bölüm başlığı başlangıçta bir isim verilmediğinden noname00.pas olarak menü seçenekleri altında yer alır. Ekranın en alt satırında doğrudan kullanılabilecek fonksiyon tuşlarının tanımlandığı durum satırı çerçevesinin sol alt köşesinde [1:1] göstertimiyle, editörün kaçıncı satır ve sütununda bulunulduğu, ve çerçeveli ekranın sağ üst köşesinde ise editör ekranına çağrılan kaçıncı yazılım olduğu belirtilir. Renkli ekranlarda; menü tanımlarının (ekranın üst satırında) ilk karakterleri ve durum satırındaki (ekranın en alt satırı) fuonksiyon tuşları kırmızı, devamı siyah renkli yazıdır. Ekran kapatma ve Zoom kutularıyla kaydırma barları yeşildir. Program yazılımlarında editörün mavi zemini üzerine blok tanımları beyaz, işlem komut satırları sarı renkle yazılır. PASCAL PROGRAMLAMA DİLİ YAPISI Genel olarak 3 ana bölümden oluşur. 1. Program başlığı - Heading - PROGRAM ifadesiyle verilen ve program amacını açıklayıcı tanım adı. En fazla 30 karakter uzunluğunda olabilir. Procedure ve Function bloklarına erişim için verilen blok isimleri de birer başlıktır. Bu başlıklar dökümantasyon amacıyla kullanılır ve zorunlu değildir. 2. Bilgi Tanıtım Bölümü - Declarations - Program içinde kullanılacak bilgilerin karakter olarak yapıları ve aktarılarak kullanılacakları değişken isimlerinin tanımları yapılan bölümdür. Belirli bloklarda tanımlanırlar: UNIT Harici programları adlandırır USES Kullanılacak arşiv programlar tanımlanır LABEL Programda kullanılacak etiket isimleri tanımlanır CONST Değişmeyen sabit bilgilerin tanımlandığı yerdir TYPE Bilgi tip tanımlamalarının yapıldığı yerdir VAR Değişkenlerin tanımlandığı yerdir PROCEDURE Alt program blokları tanımlanır. FUNCTION Fonksiyonel alt programlar tanımlanır En basit şekliyle bir pascal programı begin ifadesiyle başlar, end ile biter. Yazılımlar, turbo.exe çalıştırılarak editör ekranından yapılır. Pascal editörü ide menüleri yazılıma yardımcı komutları içerir. Yazılımlar, bu menüden manyetik ortama yazdırılır, önceden yazılmış bir yazılım editör ekranına çağrılabilir. Yazılımın derlenmesi yapılarak çalıştırılabilir. Ancak; program çalıştırıldığında editörden dos ortamına geçirecek ve sonuçlar verilir verilmez, tekrar editöre edönülecektir. Bu nedenle sonuçları görebilmek ve inceleyebilmek çin program sonuna geçici bir bekletme komutu verilmelidir. Örneğin, son ifadeden sonra READLN komutu yazılırsa klavyeden ENTER tuşuna basılıncaya kadar ekrandaki görüntü bekletilir. Her programlama dilinde olduğu gibi, programcı kullandığı programlama dilinin kurallarına göre yazılımını yapar. Pascal programlama dilinde uyulması zorunlu olan kurallar: 1. Programda kullanılacak bilgiler karakter tipleriyle tip tanımlama ifadelerinde mutlaka isimlendirilerek verilmelidir. 2. Programda işlemlerin aktarılacağı değişkenler mutlaka tanımlanmalı ve başlangıç değeri verilmelidir. 3. programcının vereceği isimler, pascal reserved words isimlerinden olmamalıdır ve en fazla 30 karakter uzunluğunda olmalıdır. 4. isimler alfabetik bir karakter ile başlamalıdır. Diğer karakterler alfabetik veya rakam olabilir. Karakterler arasında özel işaret olarak sadece "underline"(altçizgi) kullanılabilir. 5. Her pascal cümlesi ";" ile bitmelidir. (begin,var,type, const, label, do gbi blok başlatan deyimler sonunda kullanılmaz) 6. ifadeler arasında, birden fazla bırakılan boşluk, tek bir boşluğa eşdeğerdedir. 7. işlemler belli bir sıraya göre, bir birini takip eden veya iç içe bloklar halinde yazılır. 8. Pascal'da büyük küçük harf ayrımı yoktur. Bu bakımdan komut, deyim ve ifadelerin yazılımları rahat bir şekilde yapılabilir. PASCAL KARAKTERLERİ 1. Alfabetik karakterler: A-Z veya a-z arası 26 harf 2. Sayısal karakterler: 0-9 arası 10 adet rakam 3. Özel işaret karakterleri Özel İşaret karakterleri: #diyez ascii karakter tanımlarında rakamlardan önce kullanılır. Örneğin double bar denilen çift çizgiden oluşan kutu içinde abc harflerinin ascii kodları diyez # işareti ile verilmesi: begin writeln(#201,#205,#205,#205,#205,#187); writeln(#186,#65,#66,#67); writeln(#200,#205,#205,#205,#205,#188); end. $dolar hexadecimal (16 kodlama sistemi) rakamlarının ve Turbo pascal derleyici işlem kod direktif tanımlamasında kullanılır. Örneğin; hexadecimal 41 kodu decimal kod olarak 65 ve büyük A harfi karşılığıdır. Derleyici işlem kod direktifi olarak, örneğin programcının hata kontrolunde IORESULT hata detektörünü kullanabilmesi için pascal otomatik hata kontrolunu: { $I- } direktifi ile pasif duruma almalıdır. Hata kontrolu yapıldıktan sonra; { $I+ } direktifiyle otomatik hata kontrolü tekrar aktif duruma alınmalıdır. 'Tek tırnak alfasayısal bilgilerin tanımlanmasında kullanılır. Bilgilerin başlangıç ve bitişlerine verilir. () sol ve sağ parantezler Dosyadan okunacak, klavyeden girilecek, ekrana yazıcıya veya manyetik ortama yazdırılacak, bilgilerin tanımlamalarında ve çeşitli ifadelerin başlangıç ve bitişlerinde kullanılır. Write('bir sayi girin'); Readln(rakam); ,virgül değişken tanımlarında ve ekrana ya da yazıcıya yazdırılacak bilgiler arasında ayıraç olarak kullanılır type functiontipi=tunction(x,y:integer):integer; değişken tanımlarında: var i,j:integer; çıkış bilgileri arasında: writeln(a,b,c); .Nokta Bir gruba bağlı alt grup veya bir kayıt saha ismi tanımlarında elemanlandırma işareti olarak, değişmez bilgilerdeki rakamların ondalık işareti yerine ve pascal programlarında işlem bloklarının bitişini yani program sonu olduğunu belirtmede END deyiminden sonra kullanılır. İç içe procedure tanımlarında: -- procedure bilgi; -- procedure basla; -- end; -- end; -- procedure bilgi.basla; -- -- end; :İki nokta üst üste bilgi karakter yapı tipi tanımlamalarında ve sayısal bilgilerin çıkış format şeklinde kullanılır. Kayıt saha isimleri ile karakter tipleri arasında verilir type functiontipi=function(x,y:integer):integer; değişkenlerin karakter tipleri tanımında kullanılır: var x,y,z:real; j,i,k: integer; degiskenfonksiyon:fonksiyontipi; Bir hesaplama sonucu x değişkenine aktarılacak 4 tam 2 ondalıklı sayının sağa dayalı çıkış formatı tanımında verilir; Writeln('sonuç:',x:4:2); := aktarma işareti İşaretin solundaki bir değişkene, veya kayıt sahasına işaretin sağındaki bilgiyi veya döngülerde kontrol elemanına başlangıç değeri aktarır. Değişkenlere bilgi veya hesaplama sonucu aktarılmasında: X:=2*3 -- k:=1 -- döngü elemanlarına başlangıç değeri verilmesinde; for i:=1 to 100 do -- -- for j:=10 downto 1 do -- -- ;noktalı virgül bir pascal ifadesinin, cümlesinin bittiğini veya blok sonu olduğunu belirtir. Kesinlikle kullanılmalıdır. Sadece type ifadesinde kayıt tanımında record ifadesinden sonra kullanılmaz. Değişkenlerin bilgi tip tanımlamalarından sonra: Var a:char; B:integer; C:real; -- işlemler bölümünde iç blokların bitiminde: begin -- begin -- -- end; -- end. {} veya (* *) açıklama ifadelerinin başlangıç ve bitişlerinde kullanılır. Örnek program 1: Program program01 Uses crt; Var x,y:string[30]; z:string[60]; Begin Clrscr; X:='bu pascaldaki ilk programım'; Y:='bunu da öğreniyorum'; Z:=x+y; Writeln(z);readln; End. Örnek program 2: Program parantezlerinonemi; Uses crt; Var i,j:integer; X,y:real Begin Clrscr; i:=3;j:=4;x:=6.75;y:=7.25; writeln(x+y/i+j:3:6); writeln(x+y(i+j):3:6); writeln((x+y)/i+j:3:6); writeln((x+y)/(i+j):3:6); readln; end. UNIT Overlay türünde veya programcı tarafından hazırlanan, harici alt programların tanımlanmasında kullanılır. Bu alt programlar unit başlığıyla yazılırlar. Bu programları çağırarak kullanacak diğer programlar veya ana program içinde uses ifadesinde isimleri belirtilir. Unit programları yazılarak save eldir. (derlenmez) Ana program derlenirken, uses ile tanımlanan tüm unit programlarında, ana program içinde bir blokmuş gibi birlikte derlenirler. Unit ifadesi harici programın ilk satırında program isim tanımı olarak verilmelidir. Diğer program tarafından çağrıldığında, derleyici bu başlıktaki program isime göre eşirim yapılmasını sağlar. Unit hariciprogramadi; USES Turbo pascal hazır sistem arşiv programlarına erişmek, unit başlığıyla harici program olarak yazılan programların kullanılacağını derleyiciye bildirmek için kullanılır. Genellikle programların ilk satırlarında tanımlanır ve uses ile erişim yapılacak program adı verilir. Örneğin: Yazılan bir program çalışır çalışmaz, ekranın silinmesini sağlayan clrscr deyimi ekranla ilgili olduğundan uses ifadesi ile turbo pascal sistem arşiv programı crt verilir. Uses crt; Programın çalışmasıyla sonuçlar yazıcıda yazdırılacaksa, turbo pascal sistem arşiv programlarından printer, uses ifadesiyle belirtilmelidir. Uses printer; Yazılan programda, turbo pascal grafik fonksiyonları kullanılarak belirli ölçülerde yazı fontları verdirmek veya programcı tarafından özel hazırlanacak, diyalog menüleri için, uses ile, graph tanımlanarak, sistem arşivindeki grafik fonksiyonları ile ilişki kurulmalıdır. Uses graph; Programcı tarafından hazırlanan, ana programın kullanacağı, unit tanımı ile başlayan yardımcı harici programların ilişkilendirilmesinde kullanılır. Uses aunit,bunit; Aynı program içinde birden fazla arşiv ve harici programlar tek bir uses ifadesiyle verilebilir. Uses crt,printer,graph,aunit,bunit; CONST ( DEĞİŞMEZ BİLGİLER ) Programın çalıştırılması esnasında kullanılacak sabit bilgi tanımları yapılır. Sabit bilgiler CONST ifadesi ile bloklanırlar. Bilgi sayısal ise rakam doğrudan, alfasayısal ise tek tırnak içinde bir değişken adrese tip belirtilerek veya tip belirtilmeden doğrudan aktarılırlar. Tip belirtilmeden aktarılan sabit bilgiler: Const Calismasaati=8; Aylikcalisma=240; Kdvorani=0.12; Mesaj='çıkmak için esc tuşuna basın'; -- -- Const Kayitadeti=100; -- -- Tip belirtilerek aktarılan sabit bilgiler: Const Calismasaati:integer=8; Aylikcalisma: integer=240; Kdvorani:real=0.12; Mesaj:string[20]:='cikmak için esc tuşuna basiniz'; -- -- Her biri 41 karakter uzunluğunda olan ve 14 satırdan oluşan a dizisi elemanları, ekranda görüntülendirilecek menü satırlarının değişmez bilgiler olarak const bloğunda tanımlanması. Daha sonra programın ana işlem bölümünde bir for döngüsüyle bu bilgiler ekrana verilir: Const A:array[1..14] of string[41]= ('-------------------------------------------- '), (' ana menü '), ('-------------------------------------------- '), (' '), ('1. dosya oluşturma '), ('2. bilgi giriş '), ('3. bilgi düzeltme '), ('4. kayıt giriş '), ('5. ekrana görüntüleme '), ('6. yazıcıya yazdırma '), (' '), (' '), ('Seçiminiz: [ ] '), ('---------------------------------------------'); TYPE ( BİLGİ TİP BİLDİRİMİ ) Program içinde kullanılacak, özel bilgi tipleri veya dosya kayıt yapısındaki, saha ve saha bilgi tipi tanımları yapılır. Alfabetik bir karakterle başlamalıdır ve karakterler arasında boşluk bulunmamalıdır. Değişkenlerin tanımlandığı VAR bloğundan önce tanımlanmalıdır. Type Maladi=string[25]; Stok=record Madi:maladi; Kodu:integer; Mik:integer; Bfiat:real; End; Type satissekil=(pesin,taksit); Musteri=record; Musteriadi=string[25]; Adresi=string[30]; Telefonu=string[9]; Borc=integer; Faizorani=real; Ayliktaksit=array[1..6] of real; End; Satissekli ile bilgi tipi olarak iki belirleyici tanım yapılmaktadır. Musteri ise, kayıt yapısında altı saha bulunan bir dosya kaydını tanımlar. Type tekboyutludizi=array[1..12] of integer; İkiboyutludizi=array[1..3,1..4] of real; Ucboyutludizi=array[1..3,1..5,1..7] of byte; Şeklinde indisli değişken elemanlarının karakter tip tanımı yapılır. VAR ( DEĞİŞKENLER - VARIBLES ) Programcılar tarafından yaratılan ve kendilerine aktarılan bilgileri bellekte saklayan adres isimleridir. Değişkenlere program akışı içinde her yeni bilgi aktarıldığında eskisi silinerek yenisi yerleşir. Program içinde VAR ifadesiyle tanımlanırlar. Aynı karakter yapısında olan değişkenler birden fazla ise, birbirlerinden virgül ile ayrılarak tip tanımları verilir. Farklı karakter yapısında olanlar tek bir satırda verilebilir. VAR j,k,l: integer; x,y,z: real a,b,c:string[20]; -- VAR satstok:file of stok; Skayit:stok; Pkod:integer; K:integer; Sec:integer; -- VAR a,b,c:real; J,k,l: string[12]; M,n, R,s, X,y,z: integer; -- VAR tamponbellek1: array[1..256] of char; Tamponbellek2: array[1..512] of char; Tamponbellek3: array[1..1024] of char; Tamponbellek4: array[1..2048] of char; Tamponbellek5: array[1..4096] of char; LABELS ( PARAGRAF İSİMLERİ - ETKİKET ) Program yazılımı içinde, işlem akışının geçmesi gerekli paragrafların tanımlanmasında kullanılır. Pascal isimlendirme kurallarından bağımsız olarak, alfabetik veya rakam ile tanımlanabilirler. Paragraf isimleri LABEL başlığı altında, birbirlerinden virgül ile ayrılarak tanımlanırlar. Her paragraf isimden hemen sonra ":" işareti verilmelidir. LABEL 100,200,300,400,500,600; -- LABEL basla,yarat,giris,guncel,iptal,liste1,liste2,son; Const A:array[1..14] of string[41]= ('-------------------------------------------- '), (' ana menü '), ('-------------------------------------------- '), (' '), ('1. dosya oluşturma '), ('2. bilgi giriş '), ('3. bilgi düzeltme '), ('4. kayıt giriş '), ('5. ekrana görüntüleme '), ('6. yazıcıya yazdırma '), (' '), (' '), ('Seçiminiz: [ ] '), ('---------------------------------------------'); TYPE maladi = string[25]; Stok=record Madi:maladi; Kodu:integer; Mik:integer; Bfiat:real; End; VAR satstok: file of stok; Skayit: stok; Pkod: integer; İ,j,sec: integer; BEGIN İ:=0;j:=0;sec:=0;pkod:=0; Basla: Clrscr; For i:=1 to 14 do Begin Gotoxy(22,i+6); Writeln(a[i]); End; Gotoxy(49,19);read(sec); İf sec=1 then goto giris; İf sec=2 then goto guncel; İf sec=3 then goto iptal; İf sec=4 then goto liste1; İf sec=5 then goto liste2; İf sec=6 then goto son; Goto basla; Giris: --- guncel: --- iptal: --- liste1: --- liste2: --- son: --- BASİT BİLGİ TİPLERİ Program içinde kullanılacak sayısal veya alfasayısal bilgi tiplerinin tanımlarında kullanılan ifadelerdir. TYEP,VAR,PROCEDURE ve FUNCTION bloklarında tanımlanan bilgi tip tanımları üç genel gruba ayrılır: 1. Sayısal Tipler ( tam sayı / ondalıklı ) 2. Alfasayısal tipler 3. Farklı tiplerin birlikte kullanımı TAM SAYISAL BİLGİ TİPLERİ Tam sayı sayısal bilgilerin tanımlandıkları bilgi tipleri taşıyacakları rakam durumuna göre, 5 grupta sınıflandırılırlar. Her bilgi tipi için verilen limitler arasındak değer aktarılması yapılmalıdır. Aksi halde TAŞMA HATASI (overflow error) alınarak programın çalışması durdurulur. BYTE 0-255 arasında işaretsiz 256 değeri bellekte 1 byte(8bit) uzunluğunda bir alanda saklayan bilgi tipidir SHORTINT -128 ile +127 arasındaki işaretli değerleri, bellekte 1 byte(8bit) uzunluğunda bir alanda saklayan bilgi tipidir. INTEGER -32768 ile +32767 arasındaki işaretli sayısal değerleri, 2 byte(16bit) uzunluğunda bir alanda saklayan bilgi tipidir. WORD 0 ile 65535 arasındaki işaretsiz sayısal değerleri, 2byte (16bit) uzunluğunda bir alanda saklayan bilgi tipidir. LONGINT -2147438648 ile +2147438647 arasında işaretli sayısal değerleri, bellekte 4byte (32bit) uzunluğunda bir alanda saklayan bilgi tipiid.r aritmetik işlemlerde tüm tam sayı bilgi tipleri arasında bilgi aktarımı yapılabilir. Örneğin; byte değişkenindeki bilgi, longint değişkenine ( byte limitini aşmadığı sürece) aktarılabilir. ONDALIKLI SAYI TİPLERİ Kayan noktalı olarak da adlandırılan, ondalıklı rakamların tanımlanmasında kullanılan bilgi tipidir. REAL Ondalıklı sayılar için kullanılan bu değişken bilgi tipi, 11 veya 12 haneli rakamlarda duyarlıdır. Bu değişkenlere 2.9*10E-39 ile 1.7*10E+38 arasında aktarılabilniecek işaretli bir değeri bellekte 6byte(48bit) uzunluğunda bir alanda saklayan bilgi tipidir. Şayet, yazdırma formatı özellikle belirtilmezse, değişkene aktarılan değerler, ekrana/yazıcıya üslü olarak yazılır. SINGLE Shot real olarak da adlandırılan bu değişken bilgi tipi, 7 veya 8 haneli rakamlarda duyarlıdır. Aktarılan sayısal değerleri bellekte 4 byte(32bit) uzunluğunda bir alanda saklar. DOUBLE Long Real olarak da adlandırılan bu değişken bilgi tipi, 15 veya 16 haneli rakamlarda duyarlıdır. Aktarılan bilgileri, bellekte 8 byte(64bit) uzunluğunda bir alanda saklar. EXTENDED 19 veya 20 haneli rakamlarda duyarlı olan bu ondalıklı değişken bilgi tipi, aktarılan bilgileri 10 byte (80bit) uzunluğunda bir bellek alanında saklar. Aktarılabilir rakam hane adeti işaretli olarak: En düşük: 3.4*E-4932 En yüksek: 1.1*10E+4932 arasındadır. COMP 19 veya 20 haneli rakamlarda duyarlıdır. (-2E63)+1 ile (2E63)-1 arası, aktarılan değerleri bellekte 8 byte(64bit) uzunluğunda bir alanda saklar. Pi sayı değerinin, 2 tam 18 ondalıklı bir düzende, ondalıklı değişken bilgi tipleri tarafından değerlendirilmesi: {$E+,N+} uses crt; var v:real; w:single; x:double; y:extended; z:comp; begin clrscr; v:pi;w:=pi;x:=pi;y:=pi;z:=pi; writeln('pi sayısının değişik formatlarda ondalıklı yazılması'); writeln('real duyarlılığı :',v:2:18); writeln('single duyarlılığı :',w:2:18); writeln('double duyarlılığı :',x:2:18); writleln('extended duyarlılığı:',y,2:18); writeln('comp duyarlılığı :',z,2:18); readln; end. ALFASAYISAL BİLGİ TİPLERİ Alfasayısal bilgilerin tanımlanmasında kullanılan bilgi tipleridir. BOOLEAN Bir mantıksal işlem sonucu kontrolunda kullanılan ve TRUE(doğru) ve FALSE(yanlış) değerleri alan bilgi tipidir. Genellikle koşul cümlelerinde kullanılırlar. Örneğin ve 3 ve 4 sayısal değerlerinin karşılaştırılması aşağıdaki gibi yapılırsa truve ve false olarak sonuç alınır: 3>4 sonucu FALSE (yanlış) 3<4 sonucu TRUE (doğru) uses crt; var p:boolean; procedure degistir(var q:boolean); begin q:=true; end; begin clrscr; p:=false; degistir(p); writeln(p); readln; end. Program çalıştırıldığında boolean bilgi tipi verilen p değişken değeri olarak false verilir. Değiştir altprogramında true verilen q boolean bilgisiyle değiştirilerek true değeri alır. CHAR Bellekte 1 byte (8bit) uzunlukta bir alan kaplayan ASCII kodlu bilgilerin tanımlanmasında kullanılan, bilgi tipleridir. Tek bir karakteri tanımlar. Bu değişken bilgi tiplerine 0-255 arası ASCII bir değer aktarılabilir. Aktarılacak bilgi: " Ctrl tuşuyla birlikte kullanılan bir alfabetik karakter " Doğrudan alfabetik bir karakter " Tek tırnak işaretleri arasında verilmiş bir rakam " Bir grafik karakter tanımı olabilir. #işareti ile ASCII kodları verilerek, ^işareti ile CTRL tuşuyla kullanılacak alfabetik karakter tanımlanarak, bilgi aktarımı yapılabilir. Örnekte; A char değişkenine #işaretiyle ascii kodu olan 7 verilerek; B değişkenine ise,^Ctrl kodu işaretiyle G(Ctrl+G düdük sesi için kullanılır) tanımlarak uyarı sinyali olan düdük sesi alınır. Uses crt; Var a,b:char; Begin Clrscr;a:=#7;b:=^g; Write('Kullanıcıyı ilk uyarma sinyali',a); Readln;clrscr; Write('Kullanıcıyı ikinci uyarma sinyali',b); Readln; End. STRINGS ( ALFASAYISAL CÜMLELER ) Program içinde kullanılacak alfasyısal bilgilerin, aktarılacakları değişken veya saha isim tiplerinin uzunluklarıyla birlikte tanımlar. String bilgilerin aktarılacakları adreslere, 1 ile 255 arasında bir uzunluk verilebilir. String değişkenin 0ıncı elemanı pascal derleyicisi tarafından, değişken uzunluğu için kullanılır ve length byte olarak adlandırılır. Bilgi tipi tanımında kaç uzunlukta verilmişse aktarılacak bilgi bu uzunluğu geçmemelidir. Aksi halde taşma hatası (overflow error) alınarak programın çalışması kırılır. TYPE isim=string[20]; Var isim:string[20]; CONST aylar:array[1..12] of string[7]= ('ocak','şubat','mart','nisan','mayıs', 'haziran','temmuz','ağustos','eylül','ekim','Kasım','aralık'); Borland Pascal 7.0 boşluk kontrolu olarak adlandırılan ( null-terminated string) yeni bir string bilgi tipini kullanıma sunar. Bu stringler öncelikle window fonksiyonlarına erişim için kullanılır. TYPE dosyaadistringi=array[0..12] of char 13 eleman olan dizinin en az birinde boşluk karakteri olmalıdır. POINTER Bilgi girişleri yapılmış ve kayıt deseni tanımlanmış bir dosyadan okunacak bir kayıda erişim yapılmasını sağlayan adres göstergesidir. Erişilecek adresin başına ^işareti verilir. TYPE kayitgostergesi:=^kayitdeseni; Kayitdeseni=record Persicno:integer; Peradi:string[25]; Ssksicno:longint; Tahsildurumu:string[15]; Bolumu:string[15]; İsegiristarihi:string[8]; Aylikucreti:real; Birsonrakikayit:kayitdeseni; ARRAYS Matematiksel işlemlerde vektörel ve matrislerle ilgili yazılacak programlarda her bir eleman için yüzlerce basit değişken tanımlama durumu doğar ve bu durum beraberinde denetim zorlukları ve karışıklıkları yaratır. Benzeri durum ticari amaçlı programlarda standart yapıda kayıt elemanlarının tanımlanmalarında da oluşacaktır. Bu problem aynı tipde elemanlardan oluşan tek bir değişken adı altında toplanarak giderilir. Böylece erişimleri ve kullanımları kolaylaşır. Elemanlandırılmış dizi değişkenlerine (indislenmiş değişkenler) array denir. Diziler kullanım amacına göre tek veya çok boyutlu olabilir. Elemanlandırılmış indisli değişkenlerin boyut durumu array ifadesiyle köşeli parantez içinde yapılan tanımlarla belirtilir. Dizi karakter tipi "of tip tanımı" ifadesi ile mutlaka verilmelidir. Pascal programlama dilinde diziler; type,const veya var tanım bloklarından birinde tanıtılırlar. İşleme alınmaları yerine göre bir döngü ile gerçekleştirilir. Şayet, tüm elemanlar art arda ilk elemandan başlayarak işleme alınacaksa, for döngüsü, bir başlangıç değeri verilen elemanından başlayacaksa while veya repeat döngüleri kullanılır. TEK BOYUTLU DİZİLER Değişken = ARRAY [ baslangic..bitis ] of tiptanimi; Eleman adedi, başlangıç ve bitiş olarak tam sayılarla verilir. Başlangıç değeri küçük, bitiş değeri büyük olmalıdır. Uses crt; CONST aylar:array[1..12] of string[7]= ('ocak','şubat','mart','nisan','mayıs', 'haziran','temmuz','ağustos','eylül','ekim','Kasım','aralık'); var k:integer; begin clrscr; write('kaçıncı ay ?'); readln(k); writeln('Aranan ay adı:',aylar[k]); readln; end. Uses crt; Type sayi=array[1..12] of integer; Var karesi,kupu:sayi; i:integer; Begin Clrscr; For i:=1 to 12 do Begin Karesi[i]:=i*i; Kupu[i]:=i*i*i; Writeln(i:2,karesi[i]:6,kupu[i]:7); End; readln; End. PROCEDURE Pascal programlama dili yapısında alt program olarak kullanılan ve her biri başlı başına bir işlem tanımlayan bloklardır. Bu bloklar ana programa yardımcı işlemleri tanımlar. Bloklarda yapılan işlemlerde birden fazla sonuç alınır. Ana programın bazı bölümlerinde tekrar tekrar aynı işlemlerin yapılması gerektiğinde, bu işlemler bir blok halinde alt program olarak yazılırlar ve kullanılması gerekli yerlerden adı verilerek çalıştırılırlar. Procedure alt program bloklarının ana program içindeki seviye durumlar: Anaprogram bloğu Program programadi; Procedure Altprogram1; Begin End; Procedure Altprogram2; Procedure altprogram2a; Begin end; begin end; begin end. Ana program içinde her bir alt program, işlem sırasına göre adı verilerek çağrılarak çalıştırılır. İç içe tanımlanan alt programlarda her biri kendine ait ve kendi bloğu içinde bulunan alt programları çağırabilir. Dikkat edilmesi gerekli hususlar: 1. Ana program tüm alt programlara hakimdir ve 1.seviyededir. 2. 2.seviyede olan alt programlar kendi içlerindeki 3.seviye alt programlarını çağırabilir ve çalıştırabilirler. 3. 2.seviyede olan alt programlar kendi içlerindeki olmayan başka bir 3.seviye alt programlarını çağıramazlar. Procedure işlem blokları iki şekilde kullanılır: 1. Parametresiz Procedürler: Procedürü çağıran ana program ile çağrılan procedur değişkenleri aynı verildiği tanımlama şeklidir. Uses crt; Var x,y:integer; Procedure cikarmaislemi; Begin X:=x-1;y:=y,1; End; Begin Clrscr; x:=7; y:=13; cikarmaislemi; writeln('x değeri:',x); writeln('y değeri:',y); readln; end. FORWORD ifadesinin kullanımı: Program içinde tanımlanan Procedür blokları içinde bazılarının programın daha sonraki satırlarında tanımlanacağını belirten ifadedir. Sonra tanımlanacak procedür bloğu devamında kodlanmalıdır. Örnek programda ETAP2 procedür bloğu devamında FORWARD ifadesi blok bilgilerinin daha sonra tanımlanacağını belirtir. Program sonsuz bir döngü olarak çalışacağından 10'dan büyük olması halinde HALT komutu ile durdurulur. Uses crt; Var i:integer; Procedure etap2(i:integer):FORWARD; Procedure etap1(i:integer); Begin i:=i+1; write(i,' , '); etap2(i); end; procedure etap2; begin i:=i+1; write(i); if i>10 then halt; readln; etap1(i); end; begin clrscr; i:=1; etap1(i); end. ( sonuç:10,11 oluncaya kadar devam eder ) 2. Parametreli Procedürler Ana ve alt programlarda tanımlanan değişkenlerin farklı verilmeleri durumudur. Ana programda tanımlanan değişken değerlerinin işleme alınmaları, alt programda tanımlanan değişkenlere aktarılarak yapılır. Uses crt; Var i,j,m,n:integer; Procedure cikarma(var a,b:integer); Begin a:=a-1; b:=b-1; end; begin clrscr; i:=5;j:=10; m:=3;n:=4; cikarma(i,j); writeln('i:',i,'j:',j); cikarma(m,n); writeln('m:',m,'n:',n); readln; end. Procedür başlığında parantez içinde VAR ile tanımlanan, tamsayı A ve B değişken değerleri blok içinde bir azaltılacağı belirtilmiştir. Ana program değişkenlerine değer aktarımından sonra, procedür çağrılarak çalıştırıldığında bir azaltılırlar ( i:4, j:9, m:2, n:3 ). Uses crt,dos; Const dizi=5000; Type xdizi=array[1..dizi] of integer; Var adizi:xdizi; i:integer; Procedure goster(var bdizi:xdizi); Begin Writeln('son =',bdizi[dizi]); Bdizi[i]:=0; End; Begin Clrscr; For i:=1 to dizi do Adizi[i]:=i; Goster(adizi); Writeln('ilk=',adizi[i]); Readln; End. Procedure goster(var bdizi:xdizi); Şeklinde verilirse; Son=5000 İlk=0 Sonucu alınır. Procedure goster(bdizi:xdizi); Şeklinde verilirse: Son=5000 İlk=1 Sonucu alınır. Procedure goster(const bdizi:xdizi); Şeklinde verilirse, invalid variable referance hata mesajı alınır. Goster(adizi); Satırı çıkarılırsa program çalışır, ancak ilk=1 olarak sonuç alınır. Benzeri bir program olarak yedi kez tekrarlanan ve rastgele yaratılan rakamların ortalamasının alınması: Uses crt; Type adizi=array[1..20] of real; Var bdizi=adizi; i:integer; Function sonuc(cdizi:array of real):real; Var i:integer; toplam:real; Begin Toplam:=0.0; For i:=1 to 7 do Toplam:=toplam+CDizi[i]; Sonuc:=toplam/7.0 End; Begin Clrscr; For i:=1 to 7 do Begin Bdizi[i]:=random*7.0; Write(bdizi[i]:6:2,' '); End; Writeln; Writeln('Ortalaması ', sonuc(bdizi):6:2); Readln; End. Açık olmayan parametre kullanımı olarak adlandırılan bu örnek program çalıştırıldığında 1'den 7'ye kadar yapılan tekrarlamadaki rakamların ortalaması alınır. Ana programda ise 7 kez rastgele yaratılan sayıların sonuc fonksiyon alt programı çağrılarak ortalamaları aldırılır. FUNCTION Pascal programlama dilinde ana programa yardımcı ve procedure gibi alt program olarak kullanılan işlem bloklarıdır. Function işlemlerinde tek bir sonuç alınır. Uses crt; Function karesi(x:real):real; Begin Karesi:=x*x; End; Begin Clrscr; Write(karesi(33.0)); Readln; End. Ana programda, write deyimiyle, karesi fonksiyon alt programı çağrılarak verilen rakamın karesi alınır. Görülüyor ki fonksiyon alt programı tek bir sonuç verir. Ancak bazı durumlarda, fonksiyon bloğuna verilen değişken değeri, alt program tarafından değiştirilerek, istenmeyen sonuçların alınmasına neden olur. Örneğin aşağıda örneklenen programda, x değişkenine hangi değer girilirse girilsin bir fazlasıyla başlayarak üçer üçer artan sayısal değerler alınır. Uses crt; Label tekrar; Var x:integer; sor:char; function y(z:integer):integer; begin y:=z+x; x:=x+2; end; begin clrscr; tekrar: write('sayısal bir değer girin:'); readln(x); writeln(y(1),' ',y(2), ' ' , y(3), ' ',y(4) ); writeln; write('başka deneme? (e/h)'); readln(sor);writeln; if sor='e' then goto tekrar; end. PASCAL KOMUT ve DEYİMLERİ Bir işlem yaptırmak amacı ile kullanılan emir ifadeleridir. 1. Yönetim ve Kontrol komut ve deyimleridir. 2. Giriş/Çıkış komutları Yönetim ve Kontrol Komut ve Deyimleri Programın çalışması esnasında, işlemleri yönlendirecek nitelikte olan komutlardır. Bu deyimler; program akışı kontrolunda kullanılırlar. İşlem bloklarının başlangıç ve bitiş yerlerini belirten, iki bilgi arasında farklılık durumunu araştıran, program akışını başka bir paragrafa geçiren ve bazı işlemlerin tekrarlanmasını sağlayan komutlardır. Bloklama Komutları Pascal programlarında program ve işlem bloklarının başlangıçları ile bitişlerini belirten komutlardır. Begin ile başlangıç, end ile bitiş belirlenir. Kullanım yeri neresi olursa olsun begin ve end arasındaki yazılımlar sıra ile işlenir. Kurallar: 1. Program bloğu begin ile başlayıp end ve nokta ile bitmelidir. 2. İşlem bloklarında begin ve end deyimleri ; ile bitmelidir. Begin //program bloğu -- -- begin //işlem bloğu1 -- -- begin//işlem bloğu2 -- -- end; -- -- end; -- -- end. GOTO Çalışmakta olan bir program içinde denetim akışını LABEL ifadesi ile tanımlanan etiket adına koşulsuz olarak geçirir. GOTO etiketadı; GOTOXY(sütun,satır) Ekranın belli bir konumunda, görüntülenmesi istenilen bilgilerde veya klavyeden girilecek bilgilerde satır sütun olarak koordinat belirtmek için kullanılır. Kurallar: 1. Koordinat değerleri verilirken önce sütun değeri verilmelidir 2. Sütun değeri 0'dan küçük, 79'dan büyük verilemez 3. Satır değeri 0'dan küçük, 24'ten büyük verilemez. IF-THEN-ELSE Program blokları içinde, belli değerlere sahip iki değişken içindeki bilgilerin, bir koşula bağlı olarak işlenmelerini veya program akışının koşulun durumuna göre başka bir bloğa dallanmasını sağlayan koşul deyimidir. IF değişken1 koşul değişken2 then Begin -- işlemler1 -- end ELSE Begin -- işlemler2 -- end; CASE İşleme alınacak bilgilerin, bir dizi seçenek arasından seçilerek programın gerekli bloklara atlamasını sağlar. CASE ile yapılan kontrolda seçenek durumuna göre, programın dallanacağı işlem paragrafı, önceden bilindiğinden hesaplanmış GOTO adı verilebilir. CASE kontroldeğişkeni OF Seçeneklistesi END; Uses crt; Const a:array[1..7] of string[21]= ('1-giriş ', '2-güncelleştir', '3-kayıt iptal ', '4-listeleme ', '5-çıkış ', ' ', 'seçiminiz? '); label basla; var sec:char; i:integer; begin basla: clrscr; for i:=1 to 7 do begin gotoxy(22,i+6); write(a[i]); end; gotoxy(39,13);readln(sec); gotoxy(22,15); case sec of '1':writeln('1.seçenek seçildi'); '2':writeln('2.seçenek seçildi'); '3':writeln('3.seçenek seçildi'); '4':writeln('4.seçenek seçildi'); '5':writeln('5.seçenek seçildi'); end; gotoxy(22,17); write('başka deneme?(e/h)); readln(sec); if sec in ['E','e'] then goto basla; end. Örnek çalıştırıldığında, ekran program menü seçenekleri görüntülenir ve seçenek numaralarından birinin rakam tuşuna basılması beklenir. FOR-DO Program akışı içinde tekrarlanması gereken işlemlerde kullanılan deyimdir. Döngü olarak da adlandırılır. İşlemler başlangıç değeriyle bitiş değeri arasında tekrarlanırlar. Kurallar: 1. Döngü işlemleri begin ile başlayıp end ile bitmelidir. 2. Döngü kontrol elemanı, bir veya birden fazla karakterden oluşabilir 3. Kontrol elemanı alfabetik bir karakterle başlamalıdır. Devam eden karakterler alfabetik veya sayısal olabilir 4. başlangıç değeri küçük bitiş değeri büyük ise aralarında TO ifadesi verilmelidir. 5. Başlangıç değeri büyük, bitiş değeri küçük ise aralarında DOWNTO ifadesi verilmelidir. 6. Artan veya azalan her iki döngü şeklinde deyim DO komutu ile bitmelidir. For kontrolelemani:=baslangic TO/DOWNTO bitis DO Begin -- islemler -- end; REPAT-UNTIL Program içinde bazı işlemlerin her hangi bir şart gözetmeksizin deyim içindeki işlem bloğunun tekrarlanması için kullanılır. Until ifadesi ile verilen koşul kontrol edilir. Koşul sağlanmıyorsa repeat tekrarlanır. Diğer tekrarlama deyimlerinde olduğu gibi, iç içe birden fazla repeat-until ifadesi kullanılabilir. REPEAT -- işlemler -- UNTIL koşul; WHILE-DO Tekrarlama işlemlerinde kullanılan bir diğer deyimdir. While ifadesi devamında verilen koşul sağlanıncaya kadar, begin ile end arasındaki blok işlemlerinin tekrarlanması sağlanır. İç içe birden fazla while kullanılabilir WHILE koşul Begin -- işlemler end; BREAK Program işlem bloklarında tanımlanan herhangi bir tekrarlama çevrimini belirtilen bir koşulun gerçekleşmesi halinde durdurmak için kullanılan komuttur. Break komutu ile sadece tekrarlama çevrimi durdurulur. İşlem akışı bir sonraki ifadelere geçer. CONTINUE Tekrarlama çevrimini yeniden başlatır. Programcı, bilgi girişlerinde, kullanıcının sayısal olmayan bir giriş yapacağını varsayarak, önlem almak amacıyla tekrarlama işlemlerini yeniden başlatmak için continue komutunu kullanır. Uses crt; Const n=5; Type sdizi=array[1..n] of real; Var sayac,i:integer; Rakam:sdizi; Toplam:real; Begin Clrscr; toplam:=0; sayac:=1; While sayac<n do Begin Write('bir sayı girin'); {$I-} readln(rakam[sayac]); {$I+} if IOresult >0 then begin writeln('rakam girmelisiniz'); continue; end; if rakam[sayac]=0 then break; sayac:=sayac+1; end; for i:=1 to sayac do toplam:=toplam+rakam[i]; writeln('toplam sayi:',toplam:0:2); readln; end. Örnek program çalıştırıldığında, kullanıcının hatalı bir giriş yapması halinde, run time error (çalışma zamanı hatası) oluşacaktır. Bu hatalı durum ioresult (giriş/çıkış işlem sonucu) hata durumu fonksiyonu ile kontrol ettirilerek programın kırılması önlenir ve continue komutu tekrarlama çevrimini yeniden başlatır. İoresult fonksiyon değeri kontrolu yapabilmek için {$I-} derleme komutu verilerek, pascal hata yoklama rutinleri pasif duruma alınmalıdır. Ancak kontrol işleminden sonra hata yoklama rutinleri {$I+} ile tekrar aktif duruma getirilmelidir. EXIT Program işlem bloklarında tanımlaman herhangi bir koşulun gerçekleşmesi halinde program akışını durdurur. Function ve procedurden çıkmak için kullanılır. Uses crt; Var i,j:integer; Begin Clrscr; For i:=1 to 12 do Begin Write('rastgele bir sayı girin:'); {$I-} readln(j); if ioresult>0 then exit {$I+} else end; readln; end. HALT Programın kararlaştırılan bir yerinde durdurulmasını sağlar. READ İlk etapda veriler işlenmek üzere bilgisayara girilir ve ana belleğe yerleştirilir. Bilgileri kullanacak olan programla birlikte verilerin programın ulaşabileceği belli bir adreste bulunmaları temel koşuldur. Bazı bilgiler, değişmezler ile birlikte tanımlanarak verilebilirler. Ancak programlar, normalde her defasında farklı girişlerin yapılması tasarlanarak yazılır. Giriş işlemlerini gerçekleştiren deyimler READ ve READLN deyimleridir. READ(değişken1,değişken2,değişkenN); READ deyimi parantez içinde tanımlanan değişkenlere girilen değerleri aktararak bellekte saklanmalarını sağlar. Ancak, read deyimi ile aynı anda birden fazla değişken değeri girilmesi ya da okutulması sakıncalı olabilir. Çünkü bu durumda, alfasayısal bilgilerin tanımlandıkları uzunlukta olmaları, sayısal bilgilerin ise, sağında ve solunda boşluk bırakılması zorunludur. READ parantezi içinde, ilk tanım dosya adı ise, devamında tanımlanan değişken bilgisi, manyetik ortamdan adı verilen dosyadan okunarak aktarılır. READ(dosyaadi,sahaadi); READLN[değişkenadi;] READ deyimi klavyeden girilecek bilgilerde LN parametresiyle birlikte kullanılır. Deyim bu durumda giriş yapılması için programı geçici olarak durdurur. Giriş yapıldıktan sonra işlem akışı bir sonraki ifadeye geçer. Program çıktısı pascal editöründen işletim sistemine dönülerek verildiğinden, görüntüyü durdurmak için deyim tek başına kullanılır. Bu durumda program enter tuşuna basılmasını bekler. READLN; Enter yapıldığında, sonuçların görüntülendiği dos ortamından pascal editörüne dönülür. WRITE Programın çalışması sonuçlarının, ekrandan, yazıcıdan alınmasını veya manyetik ortamda ilişki kurulan dosyaya yazılmasını sağlayan deyimdir. WRITE(değişken1,değişken2,değişkenN); Parantez içinde birbirlerinden virgülle ayrılmış değişkenler, integer real, char, boolean, string veya array elemanı olabilir. Değişkenler real ise, pozitif işaret yerinden dolayı bir boşluklu, diğer değişkenler ( aralarına özel olarak boşluk verilmemişse) sıkışık olarak görüntülenirler. Ondalık haneli rakamlar üssel olarak listelenir. Write('ali','veli'); aliveli write(123,789); 123789 WRITE(değişken:uzunluğu:ondalıkhaneadeti); Çıktıların alt alta gelmesini istiyorsan LN parametresini kullanırız. WRITELN Write deyimiyle ilk tanım olarak LST verilirse tanımlanan değişkenler yazıcıya aktarılır. Write(LST,^L); sayfa başı Write(lst,#04); italik yazı Write(lst,#14); geniş yazı Write(lst,#15); sıkıştırılmış küçük yazı Write(lst,değişken1,değişken2,…); Write(lst,'a değişken değeri=',123456); Write deyiminin ilk tanımı bir dosya adı ise tanımlanan değişkenler manyetik ortama adı verilen dosyaya yazdırılır. TURBO PASCAL DOSYALARI Normalde Turbo Pascal editörü ile her çeşit düz yazılım yapılabilir. Herhangi bir programlama dilinde, program yazılımları yapılabilir veya bir kelime işlem editörü gibi kullanılarak, kitap bile yazılabilir. Yazılımlar tamamlanınca, verilen bir isim ile manyetik ortama yazdırılarak saklattırılır. Pascal programlama dili kurallarına göre bir programın çalışması sonucunda her girilen bilgi, manyetik ortama, programda adı verilen dosya içine yazdırılır. Belli bir konuya ait bilgiler, sonradan tekrar kullanılmak, üzerlerinde değişiklikler yapmak, raporlar almak amacıyla manyetik ortamda saklattırılır. Bilgilerin manyetik ortama yazdırılması değişik yöntemlerle yapılır. Bu yöntemler dosyanın manyetik ortama yazdırılması ve yazdırılan bilgilere erişim şekli ile adlandırılır. Genel olarak turbo pascal programlama dilinde; text ve binary olarak iki tür dosyalama yöntemleri kullanılır. Text Türü Dosyalar Bir metin halinde bilgilerin manyetik ortama yazdırılması ve sıralı olarak okutulması şeklidir. Bilgiler girildikleri gibi manyetik ortama yazdırılırlar. Bu bakımdan, text dosyası bilgileri, her hangi bir editör ile okunabilir veya değiştirilebilir. Turbo pascal editörü, text dosyası oluşturmak için, ideal bir kelime işlem editörüdür. Özellikle düz yazı kabul edilen her çeşit yazılım yapılabilir. Binary Türü Dosyalar Kayıt tipi belirli ve kayıt tipi belirsiz olarak iki gruba ayrılırlar. Doğrudan erişim yapabilen (RANDOM) anahtar sahalı bilgilere göre erişim yapılan (indexed) dosyalamalar binary türdendir. Pascal programlama dilinin asıl kullanıldığı yazılımları binary türündedir. TEXT DOSYALAR Bu tür dosyalar genelde turbo pascal editörü ile yazılarak manyetik ortama verilen bir isimle ASCII kodlu olarak yazdırılır. Ancak istenirse bir program ile bir text olarak, manyetik ortama yazdırılabilir. Derleyici text dosyaları için girilen bilgilere, ana bellekte 128bytelık tampon bellek açar. Bilgiler önce tampon belleğe oradan manyetik ortama aktarılır. Aynı şekilde manyetik ortamdan okunan bilgilerde dosya için ayrılan bu tampon belleğe alınır. Tampon bellek kapasitesi programcının gerek gördüğü durumlarda azaltılabilir veya arttırılabilir. Turbo pascal derleyicisine, girilen bilgilerin bir text dosya bilgisi olduğu programın başında var bloğu iğle dosya tanımına text ifadesi verilerek bildirilir. Var dosyatanimi:TEXT; Dosya tanımı olarak verilen ifade kullanılarak girilecek bilgilerin manyetik ortama yazdırılacağı, ve manyetik ortamda hangi isimle bulunacağı ASSIGN komutu ile belirtilir. Komut, dosyayı açar, ve işlemlere hazır duruma getirir. ASSIGN (dosyatanımı,'manyetik ortamdaki ismi ve uzantısı'); Text dosyası önceden yaratılmamış, ilk girişleri yapılmamışsa, REWRITE komutu verilerek manyetik ortamda oluşması sağlanır. REWRITE (dosyatanımı); Yaratılan text dosyasına ek girişler yapılacaksa, APPEND komutuyla ek girişler için açıldığı belirtilmelidir. APPEND(dosyatanımı); Dosya, bilgileri okunmak üzere açılacaksa RESET komutu verilir. RESET(dosyatanimi); Dosya, her açılışından sonra bilgilerin korunmaya alınması için CLOSE komutu verilerek kapatılmalıdır. CLOSE(dosyatanimi); Manyetik ortamda dosyayı yaratmak, bilgi girişleri yapmak, girilen bilgileri okutmak amacıyla, text dosyasını manyetik ortamda hangi isimle olacağı, pascal programlama dili kurallarına göre yazılacak komutlarla sağlanır. Bir program ile oluşturulacak text dosyası bilgileri, sıralı olarak kullanılırlar. Bilgilerin okutulmasında her satır bilgisi manyetik ortama yazıldıkları sırada elde edilir. TEXT DOSYALARINDA KULLANILACAK KOMUTLAR APPEND APPEND (Dosyatanimi); Yaratılan ve ilk girişleri yapılan bir text dosyası sonuna yeni girilecek bilgilerin eklenmesini sağlar. Parantez içinde verilen "dosyatanımı" dosyanın, program içinde kullanılacak ismidir. Komut daha önce yaratılmış ve bilgileri girilmiş dosyalarda kullanılmalıdır. ASSIGN ASSIGN(dosyatanımı,'manyetikortamdakidosyaadiveuzantısı'); Bilgi girişi yapmak, girilen bilgileri okutmak amacı ile dosyanın açılmasını sağlar. Dosyatanımı dosyanın program içinde kullanılacak ismidir. Tek tırnak içinde; dosya manyetik ortamda hangi çalışma alanında, hangi isim ve uzantı ile bulunduğu belirtilmelidir. CLOSE CLOSE(dosyatanimi); Açılan dosyayı kapatır. Dosyanın yazdırıldığı manyetik ortamda dosya bilgileri alan sonu EOF(işaretini) vererek emniyete alır. Sonradan dosya DEL veya ERASE komutlarıyla silinidiğinde, bu koruma işareti kaldırılarak, üzerine başka bilgiler yazılabilmesi için bu dosyaya ait bilgi alanı serbest bırakılır. ERASE ERASE(dosyatanımı); Açılarak tanımlanan bir dosyayı veya bir programı manyetik ortamdan siler. Silinecek dosya veya program, hangisi olursa olsun VAR ile silme programı içinde, kullanılacak geçici program adı mutlaka verilmeldir. Manyetik ortamdan sadece bir dosya doğrudan silinecekse: Var t2:text; Begin assign(t2,'c:\deneme.txt'); Erase(t2); End. READ READ(dosyatanımı,değişkenadı); Textdosyasındaki kaydın satır sonu kontrol karakteri de dahil bilginin tamamını tanımlanan değişkenlere okur. Satır sonu belirleyicisi olan CR ve LF işaretleri dahil tüm bilgilerin okunmasını sağlar. READLN READLN(dosyatanımı,sahaadı1,sahaadı2,…); Text dosyasındaki kaydın satır sonu kontrol karakteri hariç tamamını tanımlanan bellek değişkenlerine okur. Satır sonu belirleyicisi olan CR veya LF işaretlerine kadar olan bilgilerin okunmasını sağlar. -- -- assign(xdosya,'c:\deneme.dat'); reset(xdosya); readln(xdosya,kayit); -- -- RENAME RENAME(manyetikortamdaki program/dosyaadı ve uzantısı, yeniisim); Manyetik ortamdaki bir program/dosya adını veya uzantısını değiştirir. Manyetik ortama SAVE edilen bir programın veya bir programın çalışması ile yaratılan bir dosyanın önceden verilen tanımını daha sonra gerekli görüldüğü için verilecek yeni ismi ile kullanılmasını sağlar. Manyetik ortamda bir dosya adının değiştirilmesi: Var t: text; Assign(t,'c:\deneme.txt'); Rename(t,'c:\deneme.dat'); End. Uses crt Var dosya:file; isim1,isim2:string[255]; sec:integer; begin repeat clrscr; writeln('1-isim değiştirme'); writeln('2-manyetik ortamdan silme'); writeln('3-programdan çıkış'); readln(sec); case sec of 1: begin write('neyin ismi değiştirilecek?'); readln(isim1); write('Ne olarak değiştirilecek?'); readln(isim2); assign(dosya,isim1);rename(dosya,isim2); end; 2: begin write('manyetik ortamdan ne silinecek?'); readln(isim1); assign(dosya,isim1);erase(dosya); end; end;(* case sonu belirteci *) until (sec)=3; end. RESET RESET (dosyatanımı); Bilgileri girilmiş bir text dosyasından kayıt okunmasını sağlar. ASSIGN komutu ile ile dosya açıldıktan sonra RESET dosyanın ne amaçla açıldığını derleyiciye bildirir. Dosya bilgilerinin önceden girilmiş olması şarttır. Yaratılmamış bir dosya veya ismi yanlış girilen bir dosya okumak için açılırsa hata durumu oluşur. -- -- assign(xdosya,'c:\deneme.dat'); reset(xdosya); -- -- REWRITE REWRITE(dosyatanımı); Tanımı verilen dosyanın manyetik ortamda yaratılmasını, ve ilk bilgi girişlerinin yapılmasını sağlar. Komut henüz yaratılmamış dosyalar için kullanılmalıdır. Var olan ve giriş yapılmış, bir text dosyası için kullanılırsa bilgilerin tamamı silinir. -- -- assign(xdosya,'c:\deneme.dat'); rewrite(xdosya); -- WRITE WRITE(dosyatanimi,sahaadi1,sahaadi2,…); Klavyeden girilen bilgilerin tamamını manyetik ortama yazdırır. Giriş yapılan bilgiler, birden fazla satırdan oluşuyor ve her satır girişinden sonra, enter tuşuna basılmışsa bile bilgilerin tamamını tek bir satır gibi yazdırır. Var x2:text; Cins: strings[20]; Mik: integer; Begin Assign(x2,'c:\deneme.dat'); rewrite(x2); Write('cinsi ='); readln(cins); Write('miktar ='); readln(mik); Write(x2,cins); Write(x2,mik); close(x2); Assign(x2,'c:\deneme.dat'); reset(x2); Readln(x2,cins,mik); Writeln('cinsi=',cins,'miktari=',mik); Readln; Close(x2); End. Program çalıştırıldığında; Cinsi = xyz Miktarı = 789 Cinsi=xyz789 miktarı=0 Komut; Write(x2,cins,mik); şeklinde verilirse de aynı sonuç alınır. WRITELN WRITELN(dosyatanımı,sahaadi1,sahaadi2,…); Klavyeden girilen, her satır bilgisi ENTER yapıldığında satır sonuna CRLF satır sonu işaretlerini vererek manyetik ortama yazdırır. Komut girilen bilgileri manyetik ortama aynen yazdırırken 0D ve 0A satır sonu işaretlerini her satırın sonuna ekler. CR: Carriage Return ( Decimal 13, Hex 0D) LF: Line Feed ( Decimal 10, Hex 0A ) Her girilen satır için, yazdırma komutu ayrı ayrı verilirse istenilen normal çıktı alınır: Var x1:text; Cins:strings[20]; Mik: integer; Begin Assign(x1,'c:\deneme.dat');rewrite(x1); Write('cinsi=');readln(cins); Write('miktar=');readln(mik); Writeln(x1,cins); Writeln(x1,mik); close(x1); Assign(x1,'c:\deneme.dat'); reset(x1); Readln(x12,cins,mik); Writeln('cinsi=',cins,'miktarı=',mik); Readln; close(x1); End. Program çalıştırıldığında, Cinsi = abc Miktarı = 123 Cinsi = abc Ancak komut; Writeln(x1,cins,mik); Şeklinde verilirse, cins ve miktar bilgilerinden sonra satır sonu işaretleri verilir ve write komutu gibi sonuç alınır. ( abc1230DA0A ) TEXT DOSYALARINDA KULLANILAN FONKSİYONLAR EOF ( End of File ) While not EOF (dosyatanımı); Dosya sonu olup olmadığını kontrolunda kullanılır. Text dosyası okutulmak amacıyla açıldığında close deyimiyle kapatılarak koruma işareti verilen konumuna kadar olana bilgilerin okunması sağlanır. Yapılan bu kontrol ile programın dosya sonu işaretine rastladığında okuma işlemi durdurulur. EOLN ( En of line ) While not EOLN (dosyatanımı); Satır sonu olup olmadığını kontrolunda kullanılır. Writeln(dosya,satır) komutuyla satır sonuna verilen, 0D ve 0A işaretlerini kontrol ederek, satır sonuna gelindiği için okuyucu kafasının bir alt satır başına yönelmesi sağlanır. Var x1: text; Satir: string[50]; i: integer; begin assign(x1,'c:\deneme.txt'); rewrite(x1); for i:=1 to 4 do begin write(i,'.satir='); readln(satir); writeln(x1,satir); end; close(x1); assign(x1,'c:\deneme.txt'); reset(x1); if eoln(x1) then halt; readln(x1,satir); writeln(satir); readln; close(x1); end. Program çalıştırıldığında ard arda dört satır girildiği halde, okuma bölümünde satır sonu kontrolu yaptırıldığından, ilk satır bilgisinin görüntüsü alındıktan sonra program durdurulur. IORESULT if IOresult <>0 then Turbo pascal otomatik hata kontrolunun, programcının kontroluna geçmesini sağlar. Yaratılmamış veya bilgi girişleri yapılmamış text dosyasını ek girişler yapmak ya da okumak amacıyla, rewrite veya reset komutları verildiğinde programın kırılmasını önlemek için hata kontrolunda kullanılır. -- -- assign(textdosya,'c:\deneme.txt'); {$I-} reset(textdosya); {$I+} clrscr; if IOresult<>0 then begin writeln('dosya yaratılmamış'); writeln('menüye dönmek için ENTER'); readln; goto basla; end; -- -- TEXT DOSYA PROGRAM ÖRNEĞİ Uses crt; Label basla, giris, gir1, gir2, ilave, liste, son; Var textdosya:text; Cinsi: string[20]; Mik: integer; Bfi,tut: real; Sec: integer; sor: char; Procedure menu; Begin Clrscr; Gotoxy(25,10); writeln('1- bilgi giriş'); Gotoxy(25,11); writeln('2- ek girişler'); Gotoxy(25,12); writeln('3- bilgi listeleme'); Gotoxy(25,13); writeln('4- çıkış'); End; Procedure ekran; Begin Gotoxy(11,11);write('malzemenin cinsi …..'); Gotoxy(11,12);write('miktari…………………….'); Gotoxy(11,13);write('birim fiatı………………..'); Gotoxy(11,14);write('tutarı……………………….'); End; Procedure bgiris; Begin Gotoxy(31,11); readln(cinsi); Gotoxy(32,12); readln(mik); Gotoxy(32,13); readln(bfi); End; Procedure kyaz; Begin Writeln(textdosya,cinsi); Writeln(textdosya,mik); Writeln(textdosya,bfi); Writeln(textdosya,tut); End; Begin Basla: menu; Gotoxy(25,15); write('seçeneğiniz : '); Readln(sec); İf sec=1 then goto giris; İf sec=2 then goto ilave; İf sec=3 then goto liste; İf sec=4 then goto son; {********* text dosyası yaratılarak bilgi giriliyor *************} giris: assign(textdosya,'c:\deneme.dat'); rewrite(textdosya); gir1: clrscr; gotoxy(25,9); write('BİLGİ GİRİŞLERİ'); Ekran; bgiris; tut:=mik*bfi; Gotoxy(11,14); Write('tutarı ……………….',tut:8:0); Kyaz; gotoxy(11,16); Write('başka ? (e/h) '); readln(sor); İf sor in ['E','e'] then goto gir1 Else close(textdosya); goto basla; { ************* Text dosyasına ek girişler yapılıyor *************** } ilave: assign(textdosya,'c:\deneme.dat'); append(textdosya); gir2: clrscr; gotoxy(25,9); write('BİLGİ İLAVELERİ'); ekran; bgiris; tut:=mik*bfi; gotoxy(11,14); write('tutarı………………',tut:8:0); kyaz: gotoxy(11,16); Write('başka ? (e/h) '); readln(sor); İf sor in ['E','e'] then goto gir2 Else close(textdosya); goto basla; {*********** Text dosya kayıt bilgileri okutuluyor ****************** } liste: assign(textdosya,'c:\deneme.txt'); reset(textdosya);clrscr; while not eof(textdosya) do begin readln(textdosya,cinsi,mik,bfi,tut); writeln(cinsi,' - ', mik:8,' - ', bfi:8:0,' - ', tut: 8:0); end; writeln; writeln('menüye dönmek için ENTER'); readln; close(textdosya); goto basla; son: end. Dosya yaratılmadan menüden, ilave veya listeleme seçeneği seçilirse "error 2 file not found" i/o hatası alınır. Kullanıcının böyle bir hata yapma olasılığına karşılık programı bu bölümlere hata kontrolü koymalıdır. ( ioresult functionu ) DOĞRUDAN ERİŞİM DOSYALARI ( RANDOM ACCESS ) Aynı konuyla ilgili bilgilerin, belirtilen isim altında manyetik ortama yazdırılma ve girilecek bilgilerin neler olduğu, hangi karakter tipinde oldukları uzunlukları ile tanımlanarak kayıt deseni verilir. Bir kayıt deseni içinde, girilecek bilgiler farklı karakterlerde ve uzunlukta olabilir. Ancak; bu bilgilerin toplamı, dosyanın standart kayıt uzunluğu ve dosya kapasitesi ise girilen kayıt adeti toplamı olacaktır. Her kayıt içinde, satır satır girilecek, farklı bilgiler tanımlanmadan önce her birine girilebilecek en uzun karakter miktarı tasarlanmalıdır. Bu satırlara, saha denir. Örneğin; isim girişleri yapılacak saha uzunluğu olabilecek en uzun isme göre verilir. Bir kayıt içinde her sahaya ayrı isim verilerek, girilen bilgilere erişimde bu isimler kullanılır. Giriş, arama ve düzeltme, kayıt iptal, tüm bilgilerin ekrana listelenmesi ve tüm bilgilerin yazıcıda yazdırılması işlemlerini kapsayan doğrudan erişimli bir programın yapısı ve algoritması, en basit şekli ile örnekteki gibi olmalıdır. Uses crt;printer; Label basla,giris,gir,arama,iptal,liste1,liste2,son; Type perkayit=record İsim:string[20]; Sicno:integer; Bolum:string[10]; Sskno: longint; Tahsil: string[10]; Girtar: string[9]; Maas: real; End; Var kayit: perkayit; dosya: file of perkayit; kayitno: integer; sec,i : integer; sor: char; procedure menu; begin gotoxy(28,08);write('program yönetim menüsü'); gotoxy(26,10);write('1-bilgi girişleri'); gotoxy(26,11);write('2-arama ve düzeltme'); gotoxy(26,12);write('3-kayıt iptal etme'); gotoxy(26,13);write('4-ekrana listeleme'); gotoxy(26,14);write('5-yazıcıya listeleme'); gotoxy(26,15);write('6-programdan çıkış'); gotoxy(26,17);write('seçeneğiniz : '); readln(sec); end; procedure bilgisatir; begin with kayit do begin gotoxy(17,10);write('personelin adi :'); gotoxy(17,11);write('iş yeri sicil nosu :'); gotoxy(17,12);write('çalıştığı bölüm :'); gotoxy(17,13);write('ssk sicil numarası :'); gotoxy(17,14);write('tahsil durumu :'); gotoxy(17,15);write('işe giriş tarihi :'); gotoxy(17,16);write('aylık ücret :'); end; end; procedure kayitgiris; begin with kayit do begin gotoxy(38,10);readln(isim); gotoxy(38,11);readln(sicno); gotoxy(38,12);readln(bolum); gotoxy(38,13);readln(sskno); gotoxy(38,14);readln(tahsil); gotoxy(38,15);readln(girtar); gotoxy(38,16);readln(maas); end; write(dosya,kayit); end; procedure dolukayit; begin with kayit do begin gotoxy(17,10);write('personelin adı :',isim); gotoxy(17,11);write('iş yeri sicil nosu :',sicno); gotoxy(17,12);write('çalıştığı bölüm :',bolum); gotoxy(17,13);write('ssk sicil numarası :',sskno); gotoxy(17,14);write('tahsil durumu :',tahsil); gotoxy(17,15);write('işe giriş tarihi :',girtar); gotoxy(17,16);write('aylık ücret :',maas); end; end; begin basla: clrscr; menu; if sec=1 then goto giris; if sec=2 then goto arama; if sec=3 then goto iptal; if sec=4 then goto liste1; if sec=5 then goto liste2; if sec=6 then goto son; goto basla; giris: assign(dosya,'c:\deneme.txt'); rewrite(dosya); gir: clrscr; gotoxy(17,08); write('bilgi girişleri'); bilgisatir; kayitgiris; gotoxy(17,18); write('Başka giriş? (e/h)'); readln(sor); if sor in ['E','e'] then goto gir; else close(dosya); goto basla; arama: assign(dosya,'c:\deneme.txt'); reset(dosya);clrscr; gotoxy(17,08); write('aranan kayıt numarası : '); readln(kayitno); seek(dosya,kayitno-1); read(dosya,kayit); dolukayit; gotoxy(17,18); write('başka arama ? (e/h)');readln(sor); if sor in ['E','e'] then goto arama else close(dosya); goto basla; iptal: assign(dosya,'c:\deneme.txt'); reset(dosya); clrscr; gotoxy(17,08); write('iptal edilecek kayıt numarası:'); readln(kayitno); dolukayit; for i:=kayitno+1 to filesize(dosya)-1 do begin seek(dosya,i); read(dosya,kayit); seek(dosya,i-1); write(dosya,kayit); end; truncate(dosya); gotoxy(17,19); write('Başka iptal ? (e/h)'); readln(sor); if sor in ['E','e'] then goto arama else close(dosya); goto basla; liste1: assign(dosya,'c:\deneme.txt'); reset(dosya);clrscr; while not eof(dosya) do begin read(dosya,kayit); with kayit do begin writeln( isim,chr(32):20-length(isim),sicno:5,' ', bolum, chr(32):10-length(bolum), sskno:8,' ', tahsil,chr(32):15-length(tahsil), girtar,' ', maas: 8:0 ); end; end; writeln; write('menüye dönmek için ENTER'); readln; close(dosya); goto basla; liste2: assign(dosya,'c:\deneme.txt'); reset(dosya);clrscr; while not eof(dosya) do begin read(dosya,kayit); with kayit do begin writeln(lst, isim,chr(32):20-length(isim),sicno:5,' ', bolum, chr(32):10-length(bolum), sskno:8,' ', tahsil,chr(32):15-length(tahsil), girtar,' ', maas: 8:0 ); end; end; readln; close(dosya); goto basla; son: end. Programın inceliklerinden biri, listelemede alfasayısal bilgilere verdirilen boşluklardır. Writeln(isim, chr(32):20-length(isim),…. Komutunda isim sahasındaki bilginin uzunlu ne olursa olsun, devamına 20 uzunluğa tamamlanacak şekilde boşluklar verdirilmesidir. Örneğin saha bilgi "Ali" gibi üç karakterden oluşuyorsa devamına 17 boşluk verdirilir ve isim sahası bilgisi sola dayalı görüntülenir. Şayet listeleme komutu writeln(isim:20,….) Şeklinde verilseydi isim sahasi bilgisi sağa dayalı görüntülenecekti Bir diğer incelik; kayıt iptal bölümünde; iptal için girilen kayıt nosu devamından başlayarak son kayıda kadar olan tüm kayıtlar bir döngüyla birer kayıt geri kaydırılırlar. Dikkat edilirse, kayıt doğrudan silinmeyip, devamındaki kayıt bilgilerinin, silinmesi istenilenin üzerine yazdırılması, son kayıttan birer geri kaydırılmaları yapılmaktadır. En son kayıttaki eof işareti de truncate komutu ile bir geri aldırılır. Silinmek için girilen kayıttan bir sonraki kayıda erişilerek içeriği okutulur: Seek(dosya,i); read(dosya,kayit); Bilgiler okunduktan sonra, silinmesi istenilenin üzerine okuma/yazma kafası kaydırılarak yazdırılır: Seek(dosya,i-1); write(dosya,kayit); SYSTEM UNIT KİTAPLIĞI Tüm turbo pascal programları tarafından otomatik olarak kullanılan ve bu bakımdan uses ifadesinde tanımlanmayan unit harici programıdır. Hiçbir pascal programı sistem unit komutlarını kullanmamazlık yapamaz. Sistem unit komutları, deyiğmleri ve fonksiyonları elemanları beş ayrı grupta toplanırlar 1. STRING elemanları 2. Giriş/Çıkış elemanları 3. Matematik elemanları 4. POINTER elemanları 5. Diğer yardımcı elemanlar 1. STRING ELEMANLARI Alfasayısal bilgiler için kullanılan komut ve fonksiyonlar grubudur. CHR Standart chr fonksiyonu bir tam sayı değerinin ASCII karşılığı olan karakteri verir. Bir alfasayısal fonksiyon olmamasına rağmen genelde alfasayısal bilgilerle birlikte kullanılır. CHR fonksiyonuna, doğrudan aktarılan tam sayı sayısal değerlerin alfabetik karakterlere çevrilmesi ve alfasayısal bir değişkenle birlikte kullanılmasını örnekleyen program çıktısında, İngiliz alfabesinin 26 büyük ve küçük harfleri elde edilmektedir. Uses crt; Var i: integer; j:string[26]; Begin Clrscr; For i:=65 to 90 do Begin Write(chr(i)); End; Writeln; For i:=97 to 122 do Begin J:=j+chr(i); End; Writeln(j); Writeln; Writeln('çıkmak için ENTER tuşuna basın'); Readln; End. COPY Bir alfasayısal değişken bilgisinden belirtilen konumundan başlayarak tanımlanan değer kadarını kopyalar Uses crt; Var i:integer; j:string[20]; Begin Clrscr; J:='her hangi bir satır tasarlanan satır'; J:=j+'uzunluğundan daha fazla yazılırsa, copy'; J:=j+' komutu verilerek kontrol edilebilir.'; i:=1; while i<length(j) do begin writeln(coyp(j,i,30)); i:=i+30; end; writeln; writeln('çıkmak için ENTER tuşuna basın'); readln; end. Program çalıştırıldığında 120 karakter uzunluğundaki j değişkeni, 30'ar karakterlik 4 satır halinde kopyalanır. DELETE Bir alfasayısal değişken bilgisinden belirtilen konumundan başlayarak tanımlanan değer kadarını siler. Uses crt; Var i:string[255]; Begin Clrscr; İ:='turbo pascal versiyon 7.0'; Writeln('delete işleminde ara bilgi <version>'); Writeln('çıkarılmadan önce =',i); Delete(i,14,8); Writeln('çıkarıldıktan sonra =',i); Writeln; Writeln('çıkmak için ENTER tuşuna basın'); Readln; End. Sonuç olarak "turbo pascal 7.0" çıktısı elde edilir. LENGTH Bir alfasayısal değişken içindeki karakter adetini saptar. Uses crt; Var i:string[25]; Begin Clrscr; İ:='bilgisayar programlama dilleri'; Writeln('i değişken uzunluğu =',length(i)); Writeln; Writeln('Çıkmak için ENTER tuşuna basın'); Readln; End. POS Alfasayısal bilgi içinde bir ifadenin hangi konumdan başladığını saptar. Uses crt; Var i:string[30]; j:string[11]; Begin Clrscr; i:='Bilgisayar programlama dilleri'; J:='programlama'; Writeln('i değişken bilgisi = ',i); Writeln('j değişken bilgisi = ',j); Writeln('konumu = ',pos(j,i)); Writeln; Writeln('çıkmak için ENTER tuşuna basın'); Readln; End. STR Sayısal bilgileri alfasyısal bilgiye çevirir. UPCASE Küçük harfleri büyük harfe çevirir. 97-122 arasındaki ASCII küçük harflerin zincirlenerek S değişkenine veren ve 26 kez tekrarlanan bir döngü ile büyük harfe çevrilmesi: Uses crt; Var s:string[26]; i: integer; Begin Clrscr; For i:=97 to 122 do Begin S:=s+chr(i); End; Writeln('harflerin başlangıçtaki durumu'); Writeln; Writeln(s); Writeln; Writeln('büyük harflere çevrilmesi sonucu'); Writeln; For i:=1 to 26 do Begin Write(upcase(s[i])); End; Writeln; Writeln('çıkmak için ENTER tuşuna basın'); Readln. End. 3. MATEMATİK ELEMANLARI ABS Bir sayının mutlak değerini verir. Abs(değişken); FRAC Ondalıklı sayısal bir değerin sadece ondalıklı kısmını alır. Frac(değişken); INT Ondalıklı bir değişkenin veya değişmen bir bilginin tam sayısını alır. int(değişken); LN Sayısal bir değerin E tabanına göre logaritmasını alır. Ln(değişken); ODD Verilen sayısal bir değerin tek sayı olup olmadığını söyler Odd(değişken); ORD Alfasayısal karakterlerin ASCII kodlarını verir. Ord(stringselverielemanı); PI Daire çevresinin çapına oranı olan pi sayısı yaklaşık olarak 3.1415926 değerinde varsayılmıştır. RANDOM Rastgele sayı üretir. Randomize fonksiyonu kullanılmazsa, üretilen sayılan hep aynı olur. RANDOMIZE Random fonksiyonu ile rastgele sayı üretiminin sıfırdan başlayacak şekilde başa alır. Uses crt; Var i:integer; Begin Clrscr; Randomize; For i:=12 to 20 do Begin Writeln(random(i)); End; Writeln; Writeln('Çıkmak için ENTER tuşuna basınız'); Readln; End. ROUND Ondalıklı sayılarda yuvarlatma yaparak tam sayıya çevirir. Ondalık kesir kısmının 5 ve 5'den büyük olması halinde yuvarlatma yapar ve tam sayısına bir ekletir. Round(değişken); SIN / COS / TAN / ARCTAN Sayısal bir değerin raydan cinsinden sinüsunu hesaplar. Derece cinsinden hesaplaması için şu formül kullanılır: sin(değişken/(180/pi)); SIN(değişken); SQR Tanımlanan değişken veya değişkendeki sayısal değerin karesini alır. Sqr(değişken); SQRT Tanımlanan değişmez veya değişkendeki sayısal değerin kare kökünü alır. TRUNC Ondalıklı sayısal bir değerin ondalık kısmını keserek sayının sadece tam sayı kısmını verir. Trunc(değişken); 5. DİĞER YARDIMCI ELEMANLAR BREAK Program içinde kullanılan bir döngü çevrimini durdurur. Programın işlem akışı çevrimden sonraki satırdan başlayarak devam eder. CONTINUE Programda çalışmakta olan çevrimin ilk deyimine geçmesini sağlar DEC Skalar(birbiri ardına verilen) değişken değrelerini belirtilen oranda azaltır. Şayet azalma oranı olarak bir tam sayı değer verilmemişse birer azaltılır. EXIT Çalışmakta olan bir bloktan çıkış yaptırır. FILLCHAR Tanımlanan değişkene tam sayı değeri kadar ASCII kodundan verir. Fillchar(stringselverideğişkeni,adet,asciikodno); HALT Çalışmakta olan programı durdurur. INC Skalar(birbiri ardına verilen) değişken değerlerini, belirtilen oranda arttırır. Şayet arttırma oranı olarak bir tam sayı değer verilmemişse birer arttırır. PARAMCOUNT Komut satırından girilen pamaretre sayısını verir. PARAMSTR Komut satırından girilmiş parametrelere erişimleri sağlar. Örneğin paramstr(1) girilen ilk parametreyi; paramstr(0) ise çalışma alanı ve çalıştırılan program adını verir. Uses crt; Begin Clrscr; Writeln(paramstr(0)); Writeln; Writeln('çıkmak için ENTER tuşuna basın'); Readln; End. TEXTCOLOR / TEXTBACKGROUND Yazı ve fon rengini belirler. Textcolor(renkkodu); Textbackground(renkkodu); CRT RUTINLERI DELAY Belirtilen tam sayı değerince milisaniye olarak olarak programın çalışmasını geçici durdurur. Delay(milisaniye); KEYPRESSED Klavyeden herhangi bir tuşa basılması için bekletme yaptırır. Bir tuşa basılınca TRUE durumuna geçer ve programın akışını devamındaki satıra aktarır. Repeat until keypressed; NOSOUND Sound fonksiyonu ile herhangi bir tonda yaratılan ses frekansını durdurur. READKEY Klavyeden girilen bir karakteri görüntülendirmeden alınmasını sağlar. Girilen karakter #0 koduna karşılık gelen (F1-F10 arası fonksiyon tuşlarına, kürsör yönlendirme tuşlarına, home, end, pgdn, pgup, ins ve del tuşlarından birine) basılmış demektir. Bu durumda readkey fonksiyonuna tekrar giriş verilmelidir. Uses crt; Var c:char; Begin Clrscr; Writeln(bir tuşa basın'); C:=readkey; Writeln('basılan tuş',c, ' ascii kodu :',ord(c)); Readln; End. SOUND Tanımlanan ses frekansını yarartarak bilgisayar hoparlöründen verilmesini sağlar. Yaratılan ses nosound ile kesilinceye kadar verilir. Örnek programda 50'den başar ve 50'şer aralıklarla artan değerlerde 3500'e kadar sound fonksiyonu ile ses üretilmesi ve her aralıkta 200milisaniye bekletilmesi örneği vardır: Uses crt; Var i:word; Begin Clrscr; While i<3500 do Begin i:=i+50; sound(i); write(i:8); delay(200); end; readln; end. TARIH VE SAAT RUTINLERI Dos işletim sistemi 1 Ocak 1980 ve 31 Aralık 2099 tarihleri arasında sistem tarih düzeni hazırlamıştır. Bu limitlerin altında ve üstünde bir tarih girildiğinde hata kabul eder. Ve invalid date mesajı verir. Ay bilgileri 01-12 gün bilgileri de 01-31 arasında olmalıdır. Sistem tarih girişleri, amerikan tarih formatına göre AY-GÜN-YIL ikişer rakamla girilir. GETDATE Bilgisayar belleğindeki sistem tarihini verir. Uses crt,dos; Const gunler:array[0..6] of string[9]= ('Pazar','pazartesi','salı','çarşamba','perşembe','Cuma','Cumartesi'); var yil,ay,gun,gunadi:word; begin clrscr; getdate(yil,ay,gun,gunadi); writeln('günün tarihi:',gunler[gunadi], ' , ', gun, '-', ay, '-', yil ); readln; end. GETTIME Sistem saatini okur. SETDATE Tarihi değiştirir. Yıl/ay/gün Setdate(20099,12,10); //uses dos; Uses crt,dos; Var dosya:text; H,m,s,hund: word; Ftime: longint_ Dt: datetime; Function sifirver(w:word):string; Var s:string; Begin Str(w:0,s); İf length(s)=1 then s:='0'+s; Sifirver:=s; End; Begin Clrscr; Assign(dosya,'c:\deneme.txt'); Gettime(h,m,s,hund); Rewrite(dosya); Writeln('Bilgisayar sistem saati : ', sifirver(h),':', sifirver(m),':', sifirver(s)); write(dosya,'dosyanın yazdırılış saati='); write(dosya,sifirver(h),':', sifirver(m),':', sifirver(s)); getftime(dosya,ftime); unpacktime(ftime,dt); with dt do begin writeln('Dosyaya yazdırılan zaman:', sifirver(hour),':', sifirver(min),':', sifirver(sec)); packtime(dt.ftime); reset(dosya); setftime(dosya,ftime); end; close(dosya); readln; end. SIRALAMA İŞLEMLERİ Sayısal ve alfasayısal bilgilerin küçükten büyüğe artan ve büyükten küçüğe azalan bir sırada sıralandırılmaları işlemidir. Sıralamalar program yazılım tekniklerine göre çeşitli yöntemlerle yapılır. Bunlar genelde BUBLE, SHELL ve QUICK sıralama yöntemleridir. BUBLE SORT Diğer sıralama yöntemlerine göre oldukça yavaş çalışır, ancak algoritması basittir. Sıralandırılacak bilgiler dizi son elemanından başlayarak bir önceki eleman bilgisiyle karşılaştırılır. Uses crt; Type dizi=array[1..10] of integer; Var a:dizi; i:integer; Procedure buble(var a:dizi;n:integer); Var i,j:integer; Procedure tasi(var a,b:integer); Begin C:=a; a:=b; b:=c; End; Begin For i:=2 to 10 do For j:=10 downto i do İf a[j-1] > a[j] then tasi(a[j],a[j-1]); End; Begin Clrscr; randomize; Writeln('Rastgele oluşturulan rakamlar:'); For i:=1 to 10 do begin a[i]:=random(100); write(a[i]:4); end; Buble(a,10); writeln; Writeln('sıralandırılmış durumları:'); For i:=1 to 10 do begin write(a[i]:4); end; Readln; End. SHELL SORT Buble sıralama işleminden daha hızlıdır. Shell sıralama programı dizi elemanlarının yaklaşık olarak nerede oldukarını hesaplar. Elemanlar arasında, boşluk anahtar olarak kullanılır. Eğer, boşluk 5.eleman ise 1.elemanla 6.eleman, 2.elemanla 7.eleman ve diğerleri bu düzenleme ile karşılaştırılır. Uses crt; Type dizi=array[1..10] of integer; Var a:dizi; i:integer; Procedure shell(var a:dizi; n:integer); Var bosluk,i,j,k:integer; Procedure tasi(var a,b:integer); Begin C:=a; a:=b; b:=c; End; Begin Bosluk:=n div 2; While bosluk>0 do Begin For i:=(bosluk+1) to n do Begin J:=i-bosluk; While(j>0) do Begin K:=j+bosluk; İf (a[j]<=a[k]) then J:=0 Else Begin Tasi(a[j],a[k]); J:=j-bosluk; End; End; End; Bosluk:=bosluk div 2; End; End; Begin Clrscr; randomize; Writeln('rastgele yaratılan rakamlar:'); For i:=1 to 10 do Begin a[i]:=random(100); write(a[i]:4); end; shell(a,10);writeln; writeln('sıralandırılmış durumları : '); for i:=1 to 10 do begin write(a[i]:4); end; readln; end. Shell sıralama algoritması iç içe dönglerle anahtar boşluğunun yarıya indirilerek sıfır oluncaya kadar devam eder ve en küçük bilginin elde edilmesini sağlar. Döngünün "i" kontrol elemanı işlem akışını "k" ise geri dönüşlerini sağlar. QUICK SORT Sıralama metodları içinde en süratli olanıdır. Bu metodta sıralanacak bilgilerin bir orta noktası saptanır. İlk ve son elemanlar toplanarak ortalamarı alınır. Bu ortalama diğer elemanlardaki değerlerle karşılaştırılarak küçük olanlar alt bölüme, büyük olanlar üst bölüme aktarılır. Aynı işlemler bu bölümlerde de yapılarak sonuca ulaşılır. {$R-,S-} uses crt; const max=100; type list=array[1..max] of integer; var data:list; i:integer; procedure quicksort(var a:list; lo,hi:integer); procedure sort(l,r:integer); var i,j,x,y:integer; begin i:=l;j:=r;x:=a[(l+r) div 2]; repeat while a[i]<x do i:=i+1; while x<a[j] do j:=j-1; if i<=j then begin y:=a[i];a[i]:=a[j];a[j]:=y; i:=i+1; j:=j-1; end; until i>j; if l<j then sort(l,j); if i<r then sort(i,r); end; begin sort(lo,hi); end; begin clrscr; writeln('rastgele 100 rakam oluşturuluyor…'); randomize; for i:=1 to max do begin data[i]:=random(30000); write(data[i]:8); end; writeln;writeln; write('rakamlanlar sıralandıktan sonra…'); quicksort(data,1,max); writeln; for i:=1 to 100 do write(data[i]:8); readln; end. ÖRNEK BASİT PROGRAMLAR Program tuslar; Uses dost,crt; Var tus:char; Begin Repeat Tus:=readkey; Writeln(tus,ord(tus)); Until tus=chr(27); End. Program usalma; Uses crt; Var x,y:real; Cev:char; Function usal(x,y:real):real; Begin Usal:=exp(y*ln(x)); End; Procedure bekle; Begin Repeat until keypressed; End; Begin Textcolor(14);textbackground(1); Clrscr; Writeln('İstenilen kuvvette us alır'); Writeln('Çıkmak için 0 girin'); Repeat Writeln('taban sayısını girin');readln(x); İf x=0 then halt; Writeln('üs sayısını girin');readln(y); İf y=0 then halt; Writeln('Sonuç=',usal(x,y):8:0); Writeln('Çıkmak istiyor musunuz?'); Repeat Cev:=readkey; Until cev<>#13; İf cev=#27 then halt; Writeln('Programı yazan neoturk); Until 1=2; End. Program maxmin; Uses crt; Type intarray=array[1..10] of integer; Var Sayi:intarray; İ,j,max,min:integer; Procedure oku; Begin For i:=1 to 10 do Begin Writeln(i,'.nci sayigir');readln(sayi[i]); End; End; Procedure kiyasla; Begin Max:=sayi[1]; min=sayi[1]; For j:=1 to 10 do Begin İf sayi[j]>max then max:=sayi[j]; İf sayi[j]<min then min:=sayi[j]; End; End; Begin Clrscr; oku; kiyasla; Writeln('Max değer=',max); Writeln('Min değer=',min); Writeln('Programı yazan neoturk'); End. Program matematik; Uses crt,dos; Var h1,h2,ustder,sonuc,gir:longint;ch:char;durum:integer; Procedure bekle(durum:integer); Begin; Repeat until keypressed; İf durum=1 then halt; End; Procedure renk(kr,zr:integer); Begin Textcolor(kr);textbackcolor(zr); End; Procedure sor(ilsem:char); Begin Write('Çıkış için 0 giriniz'); Repeat Renk(15,4);write(h1,' ',islem,' ',h2,' isleminin sonucu kaçtır ?'); Renk(15,0);read(gir); İf gir=0 then Begin Gotoxy(1,15);renk(25,0); Writeln('sonuç',sonuc,' idi. Sen bugün iyi değilsin.'); Writeln('Programdan çıkıldı'); Bekle(1); End; Until gir=sonuc; Gotoxy(1,15);writeln('Tebrikler! Siz bir dahisiniz!'); Bekle(0); End; Begin Repeat Randomize; Clrscr;renk(15,1); Write('Ustalık derecenizi girin? 1-…');readln(ustder); Renk(15,4); Sound(2000);delay(100);nosund; Gotoxy(1,22);write('Programı yazan neoturk '); Renk(3,0); Gotoxy(1,2);writeln('derecenizi ',ustder,' olarak girdiniz. Hadi bakalım!'); İf ustder>=100 then Begin Renk(10,1);writeln('Kendinize güveniyorsunuz demek!'); End; Renk(3,0); Gotoxy(1,4);write('Yılın matematik olimpiyadı burada!'); Gotoxy(1,5);write('seçiminizi girin…'); Renk(11,4); Writeln('1-çarpma'); Writeln('2-bölme'); Writeln('3-toplama'); Writeln('4-çıkarma'); Writeln('ESC-çıkış'); H1:=random(ustder*100);h2:=random(ustder*20); İf h2=0 then h2=5; Ch:readkey; Case ch of #49: begin sonuc:=h1*h2; sor('*');end; #50: begin sonuc:=trunc(h1/h2); sor('/'); end; #51: begin sonuc:=h1+h2; sor('+'); end; #52: begin sonuc:=h1-h2; sor('-'); end; #27: halt; end; until 1=2; end: Program diskfree; Uses crt;dos; Label tekrar; Var i:integer; x:string[25]; sor:char; Begin Clrscr; Tekrar: Write('Hangi sürücü [0=çalışan, 1=A, 2=B, … ]'); Readln(i); İf i=0 then x:='Çalışsan sürücüde'; İf i=1 then x:='A sürücüsünde'; İf i=2 then x:='B sürücüsünde'; İf i=3 then x:='C sürücüsünde'; İf i=4 then x:='D sürücüsünde'; Writeln(x,diskfree(i),' byte boşyer var'); Writeln; Write('başka deneme? (e/h)'); Readln(sor); writeln; İf sor='e' or sor='E' then goto tekrar; {if sor in ['E','e'] then goto tekrar;} {if uppercase(sor) then goto tekrar;} end. Program kayanmenu; Uses crt,dos; Var menu:array[1..15] of string; İ:integer; Ch:char; Const Sat=10;sut=30;boy=10;kr=0;zr=12;nkr=15;nzr=10; Procedure renk(kr,zr:integer); Begin Textcolor(kr);textbackground(zr); End; Procedure parlat(x:integer); Begin Renk(kr,zr);write(menu[x]); End; Procedure normal(x:integer); Begin Renk(nkr,nzr);write(menu[x]); End; Begin Clrscr; Renk(15,4);sound(2000);delay(100);nosund; Menu[1]:='……………'; Menu[2]:='……………'; … Menu[15]:='……………'; For i:=1 to boy do Begin Gotoxy(sut,sat+i-1);normal(i); End; İ:=1; Gotoxy(sut,sat);parlat(i); Repeat Ch:=readkey; Case ch of #0: begin ch:=readkey; case ch of #72: begin gotoxy(sut,sat+i-1);normal(i); if i>1 then i:=i-1 else i:=boy; end; #80: begin gotoxy(sut,sat+i-1);normal(i); if i<boy then i:=i+1 else i:=1; end; end; end; #27: halt; end; gotoxy(sut,sat+i-1);parlat(i); until 1=2 end; BORLAND DELPHI GÖRSEL PROGRAMLAMA BÖLÜM - 1 ( Delphi Editörünün Kullanımı ) 1. Delphiye Giriş 2. Ana ekranın incelenmesi 3. Projelerin kaydedilmesi 4. Bir projenin açılması 5. Yeni bir projenin oluşturulması 6. Nesne Düzenleme-Hizalama Boyutlandırma 7. Klavye kısayol tuş takımları BÖLÜM - 2 ( Komutlar ve Diyalog Pencereleri ) Lojik - Karakter Fonksiyonları 1. Strtoint / inttostr 2. Strtointdef 3. Strtofloat / floattostr 4. Lowercase / uppercase 5. Length 6. Copy 7. Delete 8. Pos 9. Chr() / ord () 10. Random / Randomize Tarih ve Zaman Fonksiyonları 1. Datetostr(data) 2. Timetostr(time) 3. Dayofweek 4. Isleapyear 5. Formatdatetime Matematiksel Fonksiyonlar 1. Abs 2. Sqrt 3. Power 4. İntpower 5. Exp 6. İnt 7. Frac 8. Logaritma fonksiyonları 9. Pi 10. Trigonometrik fonksiyonlar 11. Mod-div 12. Dec-Inc Giriş ve Uyarı Mesajları: 1. Showmessage ve Inputbox fonksiyonları 2. Inputquery fonksiyonu 3. Showmessage fonksiyonu 4. Messagebox mesaj penceresi 5. Message Dlg fonksiyonu BÖLÜM - 3 ( veri tipleri ) 1. Değişken tipleri 2. Tamsayı değişkenler 3. Real değişkenler 4. Boolean değişkenler 5. String değişkenler 6. Char değişkenler 7. Variant değişkenler 8. Dizi değişkenler 9. Sabit tanımlama ( const ) BÖLÜM - 4 ( kontrol deyimleri ve döngüler ) 1. If-Then kontrol deyimi 2. Case-of deyimi 3. For-do döngüsü 4. While-do döngüsü 5. With-do deyimi 6. Repeat until döngüsü BÖLÜM - 5 ( application ve formlar ) Application Methodları 1. Application.title 2. Applicadion.hide 3. Application.hint 4. Application.hintcolor 5. Application.hintpause 6. Application.showhint 7. Application.exename 8. Application.processmessages Formlar 1. Formların özellikleri 2. Formların minimize-maximize özelliği 3. Formların boyutlarının değiştirilmesi 4. Formlara verilen başlık ve adlar 5. Form boyutlarının ayarlanması 6. Font özelliği 7. Form renginin belirlenmesi 8. Projelerde başlangıç durumu ( window state ) 9. Icon seçimi 10. Cursor seçimi 11. Formların enabled özelliği 12. Formların hint özelliği 13. Onclick olayı 14. Ondblclick olayı 15. Onclose olayı 16. Oncreate olayı 17. Onactivate-Ondeactivate, formların aktif pasif durumları 18. Onmousedown olayı 19. Onmouseup olayı 20. Onmousemove olayı 21. Onkeypress olayı 22. Onkeydown-Onkeyup olayı 23. Onhide olayı 24. show metodu 25. close metodu 26. hide metodu 27. refresh metodu BÖLÜM - 6 ( standart sayfası kontrol elemanları ) 1. Tedit 2. Tbutton 3. Tlabel 4. Tmemo 5. Tcheckbox 6. Tgroupbox 7. Tradiobutton 8. Tradiogroup 9. Tlistbox 10. Tcombobox 11. Tscrollbar 12. Tpanel 13. Tmainmenu 14. Tpopupmenu 15. Tframes Dosya ve Dizin İşlemleri 1. Getdir 2. Chdir 3. Mkdir 4. Forcedirectories 5. Rmdir 6. IOResult 7. Directoryexists 8. Selectdirectory 9. Fileage 10. Filegetattr-filesetattr 11. Renamefile 12. Copyfile 13. Fileexists 14. Filesearch 15. Diskfree 16. Disksize 17. Deletefile 18. Extractfilename BÖLÜM - 7 ( additional kontrol elemanları ) 1. Tbitbtn 2. Tspeedbutton 3. ImageEditör kullanımı 4. Tstringgrid 5. Timage 6. Tshape 7. Tbevel 8. Tscrollbox 9. Tchecklistbox 10. Tcolorbox BÖLÜM - 8 ( win3.1 kontrol elemanları ) 1. Tfilelistbox 2. Tdirectorylistbox 3. Tdrivecombobox 4. Tfiltercombobox BÖLÜM - 9 ( Win32 kontrol elemanları ) 1. Tpagecontrol 2. Trichedit 3. Tprogressbar 4. Tupdown 5. Tanimate 6. Tdatetimepicker 7. Tmonthcalendar 8. Tlistview BÖLÜM - 10 ( system sayfası kontrol elemanları ) 1. Ttimer 2. Tmediaplayer BÖLÜM - 11 ( dialogs sayfası kontrol elemanları ) 1. Topendialog 2. Tsavedialog 3. Topenpicturedialog 4. Tsavepicturedialog 5. Tfontdialog 6. Tcolordialog 7. Tprintdialog BÖLÜM - 12 ( samples sayfası kontrol elemanları ) 1. Tgauge 2. Tspinbutton 3. Tspinedit 4. Tcalendar BÖLÜM - 13 ( VERİ TABANI UYGULAMALARI ) 1. Database desktop 2. Alias oluşturulması 3. Veritabanı uygulamaları geliştirmek 4. Tdbimage 5. Tdbgrid 6. Tdbcombobox 7. Tdbtext 8. Tdbradiogroup 9. Tdbmemo 10. Tdbrichedit 11. Tdblistbox 12. Tdbcheckbox 13. Tdblookupcombobox-Tdblookuplistbox 14. Paradox dosyası ile veritabanı uygulamaları 15. Veritabnı dosyalarını şifrelemek 16. Index oluşturulması (kayıt sıralama işlemleri) ve kayıt arama işlemleri 17. Kayıt arama 18. Database desktop ile çok amaçlı şifre kullanımı 19. Database from wizard ile veritabanı uygulaması 20. 2 veritabanı arasında erişim 21. Veritabanı uygulamalarında filtre işlemi 22. Ttable kontrolüne ait özellik ve olaylar 23. Tablo alanlarına programı kodu ile değer atama 24. Tablo alanlarında hesaplama işlemleri BÖLÜM - 14 ( sql dili ve query ) 1. Filtre alanlarının çalışma zamanı belirlenmesi 2. Sql dili ile program çalışması anında uygulanan metodlar 3. Tquery kontrolü ile 2 veritabanı arasında bağlantı kurulması 4. Query kontrolü updatemode özelliği BÖLÜM - 15 ( yazıcıya yazdırma işlemleri ) 1. Temel yazdırma yöntemleri-istenilen metinlerin yazdırılması 2. Veritabanı dosyasındaki kayıtların yazıcıya gönderilmesi 3. Veritabanındaki tüm kayıtların ya da istenilen kayıtların yazdırılması 4. Formların yazıcıya yazdırılması 5. Sabit bilgilerin yazdırılması 6. Form kontrollerinin istenilen koordinatlara yazdırılması Yazan: neoturk, 2003 saygılarımla_ xxnt03@lycos.co.uk neoturk_