Forum Delphi

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
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 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"][,;]
LINE INPUT ["mesaj"][,;]
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 THEN deyimler ELSE deyimler
IF THEN
Deyimler
ELSE
Deyimler
END IF
SELECT CASE: Koşula bağlı olarak blok yapıları işleme girer
SELECT CASE
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 =X TO Y [ STEP Z ]
Deyimler
[ EXIT FOR ]
NEXT []
DO-WHILE-LOOP: Koşul doğru olduğu süre döngü tekrarlanır
DO WHILE
Deyimler
[EXIT DO]
LOOP
DO-UNTIL : Koşul doğru olana kadar döngü tekrarlanır
DO
Deyimler
[EXIT DO]
LOOP UNTIL
GOSUB - RETURN : Program akışını geri gelmek koşuluyla değiştirir
GOSUB
Deyimler
RETURN
ON ERROR: Hata bulma deyimidir
ON ERROR GOTO

print "hata oluştu"
RESUME NEXT
DIM: Ana bellekteki indisli değişkenlere boyut tanımı yapar
DIM [SHARED]
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",[#],,
FIELD [#], AS
Sıralı erişimli kütük yapısı:
OPEN "O",[#], //dosyayı sıfırdan üzerine açar
OPEN "I",[#], //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 [#],
GET [#],
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 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 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 ');
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]while xif 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 lif iend;
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] 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 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_