edit etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
edit etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Pascal Editörü File Menüsü

File Menüsü:

TP (Turbo Pascal, bundan sonra TP diye bahsedecegim) editörünün üstteki menülerinin ilkidir. En çok kullanacagimiz menü bu menü olacak. Bu menüyü açmak için alt tusuna basili tutarak F tusuna basin. Tüm menüleri için aslinda bu böyledir. Ya da F10 tusuna basarak da menü çubuguna geçebilirsiniz. Ayrica mouse kullanarak da bu menüyü açabilirsiniz. Simdi bu menüde yapabilecegimiz islemlere bakalim:

New:

Bu komutla yeni ve bos bir sayfa açariz. Open: Daha önceden kaydettigimiz dosyalari tekrar açip düzenlemek ya da görmek gibi amaçlarla açmak için kullanilir. Açilan program yeni bir pencerede açilir. Kisayol tusu F3'dür.

Save:

Yazdiginiz programlari bilgisayariniza kaydetmeniz lazim. Bu seçenegi seçerek ya da kisayol olarak F2 tusuna basarak programlarinizi kaydedebilirsiniz. Kaydetme isiniz çi sik yapmanizi tavsiye ederim. Yoksa bütün emekleriniz bir elektrik kesilmesi yada yanlis bir-iki tusa basmakla gidebilir.

Save as:

Üstünde çalistiginiz program kodunu farkli bir dosya olarak kaydetmek için kullanilir.

Save all:

O anda üstünde çalistiginiz bütün programlari birden kaydtmenizi saglar. Isinize yarayacak bir komut.

Change dir:

TP'i çalistirdiginizda otomatikmen turbo.exe dosyasinin bulundugu dizin esas alinir. Yani bir dosya kaydedrken veya açarken hep o dizin ilk olarak karsiniza gelir. Baska sebeplerden dolayi da eger yeni bir program yazmaya basliyorsaniz ilk önce bir klasör açin ve pascal'i açinda bu seçenekle o klasörü seçip bütün islemlerinizi orada yapin. Yani bu seçenek aktif klasörü degistirmeye yarar.

Print:

Yazdiginiz programi yazicidan çikartmak için bunu kullanabilirsiniz. Eger yaziciniz dogru çalisiyor ve açiksa yaptiginiz programlari yazicidan düzgün bir sekilde çikarir.

Printer Setup:

Yazici ayarlarini yapmak için. Eger yaziciniz dogru oldugu halde yazicidan programi çikaramiyorsaniz buradan gerekli ayarlari yapabilirsiniz.

Dos Shell:

Geçici olarak MS-DOS'a çikmak için kullanilabilir. Tekrar TP'a dönmek için Exit yazmaniz gerekir. Ama bu komut artik pek ise yaramiyor. Çünkü dos degil Windows var. Yine de dos kullanmayi biliyorsaniz yeni dizin açmak gibi ufak islerinizde kullanabilirsiniz.

Exit:

Pascal editöründen çikmak için. Alt tusu ve x'e birlikte basarak da ayni isi yapilir.


Pascal Editörü Edit Menüsü

Edit Menüsü:

En çok kullanilan menülerden birisi de Edit menüsüdür. Ancak genelde direk menüyü kullanmayiz, onun yerine kisayol tuslarini kullaniriz. Gördügünüz gibi neredeyse herseyin bir kisayol tusu var. Undo: En son yaptiginiz degisikligi iptal eder, geri alir. TP'da çok fazla sayida (neredeyse sinirsiz) geri al yapabilirsiniz. Bu sekilde yaptiginiz yanlisliklari görmek ve iptal etmek çok kolaydir. Kisayol için Alt tusu ile birlikte Backspace tusu kullanilir. Redo: Yanlislikta Undo yaparak iptal ettiginiz islemleri terkar düzeltir, yani bu da ileri alir. Cut: Kes manasindadir. Bir yaziyi isaretleyip bu seçenegi seçer ya da Shift tusuyla beraber Delete tusuna basarsaniz isaretli yazi silinir ve hafizaya alinir. Daha sonra bunu istediginiz biryere yapistirabilirsiniz. TP'da bir metini isaretlemeyi ya mouse ile ya da shift tusuna basili tutarak yön tuslariyla yapabilirsiniz.

Copy:

Bir yaziyi isaretledikten sonra bu komutu çalistirisaniz ya da kisayolu olarak Crtl ile birlikte Insert tusuna basarsaniz yaziya birsey olmaz ama bir kopyasi hafizaya alinir.

Paste:

Kopyaladiginiz ya da kestiginiz metinleri herhangi biryere yapistirmak/eklemek için kullanilir. Koplayanlis ya da kesilmis yazi imlecin bulundugu yerden itibaren ekrana yazilir. Shift ile birlikte Insert tusuna basarsaniz da ayni isi yapabilirsiniz.

Clear:

Bir yaziyi isaretleyip tamamen silmek için kullanilir. Kisayolu Ctrl+Delete.

Show Clipboard:

Kopyaladiginiz ve kestiginiz tüm yazilar clipboard denilen ve hafizada biryerde tutulur. Bunlarin hepsini birden görmek için kullanabileceginiz bu seçenek yeni bir pencere açar ve bunlari gösterir.

Degişkenler

Her programlama dilinde degiskenler vardir. Degiskenler programlamada hayati önem tasir. Degiskeni program içinde bir degeri ya da bilgiyi tutan bir birim olarak ifade edebiliriz. Bu bölümde degiskenleri tüm tipleriyle çok ayrintili ve bol örnekli anlatacagim. Ayrica sabitler, tipler ve labelleri de ögrenecegiz. Adindan da anlasilabilecegi gibi degiskenlerin degeri program içinde istenildigi kadar degistirilebilir. Bir degiskenin bir adi, tipi ve degeri vardir. Degisken adi olarak istediginiz ismi verebilirsiniz. Degiskenin tipini ise programinizin basinda var deyimi ile tanimlamak zorundasiniz.
Var Deyimi:
Programda kullanacagimiz bütün degiskenleri programin basinda tanimlamak ve cinsini (sayi mi, yazi mi.. gibi) belirtmek zorundayiz. Her programlama dilinde buna gerek olmayabilir ama Pascal'da bu is mecburidir. Degiskenlerimizi Var deyiminde sonra tanimlamamiz gerekir. Var deyimi bir komut olmadigindan sonuna noktali virgül konulmaz. Genel kullanim sekli:
Var
degisken: degisken_tipi;

seklindedir ve Pascal'da program yapisi dersinde gördügümüz yerde kullanilir. Degisken tiplerini görürken bu deyimin kullanilisini görecegiz. Merak edenler için söyleyim: Var kelimesi Ingilizce Variable kelimesinin kisaltilmisidir ve degisken ya da kisaltma anlamindadir.
Değişken Tipleri
Pascal'da her degiskenin bir tipi olmak zorundadir. Bir degisken programin basinda hangi tipte tanimlandiysa programin sonuna kadar o tipte bilgi saklayabilir ve o degiskene o tipten baska bir tipte veri atanamaz, eklenemez. Yani mesela sayi tipinde bir degiskene "kalkan" degeri atanamaz. Bu durumda program hiç çalismaz ve Pascal editörü hata verip o yanlisligin yapildigi degiskene imleci getirip hata uyarisi yapar. Simdi Pascal'da kullanabilecegimiz degisken tiplerine bakalim.
Sayisal Degiskenler:
Adindan da anlasilacagi gibi degeri bir sayi olabilen degiskenlerdir. Bu degiskenler bir sayiyi tutarlar. Ayrica matematiksel islemlerde de kullanilabilirler. Birkaç çesidi vardir. Öncelikle sayisa degiskenleri ikiye ayirmak gerekir. Birncisi tasayilar ve ikincisi gerçek (ondalikli) sayilar. Tam sayilarin ve ve gerçek sayilarin da kendi aralarinda siniflari vardir. Ilk önce tamsayi tiplerinden baslayalim. Tamsayi tiplerini hemen bir tabloda verelim:

Tip adiSinirlari
Kapladigi alan
Shortint-128..127
1 byte
Byte0..255
1 byte
Integer-32768..32767
2 byte
Word0..65535
2 byte
Longint-2147483648..2147483647
4 byte

Tabloda tip adi dedigimiz sey var deyimiyle kullanacagimiz ad, sinirlari o sayisal degikenin alabilecegi degerlerin siniridir. Yani byte tipinde bir degiskenin degeri 256 olamaz. Buna göre bizim isimize hangisi yariyorsa onu kullanabiliriz. Kapladigi alan ise bu degisken için hafizada kullanilan alanin byte cinsinden degeridir. Programlarimizin hafizada (hard-disk'te degil) az yer kaplamasi daha iyidir. Bunun için gereksiz yere longint degiskenini kullanmamamiz iyi olur. Çünkü pascalda en fazla 64 kilobyte'lik (yaklasik 64000 byte) degisken kullanabiliriz.

Gerçek Sayı Tipleri

Tabii bunlara gerçek diyorsak digerleri sahte degil. Gerçekten kastimiz virgüllü ya da ondalikli ya da kesirli demektir. Bu tip sayilarin da tipki tamsayilarda oldugu gibi çesitleri var. Bu çesitliligin temel sebebi gereksiz hafiza kullanmaya engel olmaktir. Gerçek sayi tipleri sunlardir:

Tip adiSinirlariKapladigi alan
Real2.9 x 10^-39..1.7 x 10^386 byte
Single1.5 x 10^-45..3.4 x 10^384 byte
Double5.0 x 10^-324..1.7 x 10^3088 byte
Extended3.4 x 10^-4932..1.1 x 10^493210 byte
Comp-2^63+1..2^63-18 byte

Burada Real'den baska tiplerin de oldugunu bilmeniz için hepsini gösterdim ama gerçekte sadece Real tipini kullanmaniz yeterlidir. Html'de bir sayinin üstünü göstermek olmadigindan tablo biraz kötü gözüktü. Ben birisini yazi ile yazarsam siz digerlerini anlarsiniz. Real'in sinirlari "2.9 çarpi 10 üzeri -39'dan 1.7 çarpi 10 üzeri 38'e kadardir". Real tipinin disindaki tipleri kullanabilmeniz için prograinizin en basina {$N+} yazmaniz gerekebilir. Bunu bilmeniz gerekmiyor, real size yeter. 

Örnek 1:Bu program girilen sayinin karekökünü bulur. sqrt(); komutunu sonra anlatiriz. Simdilik bu komutun bir sayinin karekökünü bulmaya yaradigini bilmeniz yeter.
Program Karekok;
Uses Crt;
Var
sayi:integer;
karekoku:real;
Begin clrscr;
write('Bir tamsayi giriniz: ');readln(sayi);
karekoku:=sqrt(sayi);
write('Bu sayinin karekökü: ',karekoku:16:5);
readln;
end.

Burda kullanilan write komutunun özel bir sekli. Sayiyi düzgün yazdirmayi sagliyor. Daha sonra ayrintili görecegiz. Bunlari kaldirip direk olarak
write('bu sayinin karekökü:',karekoku);
seklinde yazip deneyin. Sayiyi bilimsel olarak sonuna E falan koyarak yazar.

Örnek 2:Bu program kullanicidan 3 dersinin notunu ister ve ortalamasini bulup ekrana yazar. Program ortalama_bul;
Uses crt;
Var
not1, not2, not3: integer;
ort: real;
Begin Clrscr;
Write('Matematik Notunuz (0..100 arasi): ');readln(not1);
Write('Fizik Notunuz (0..100 arasi): ');readln(not2);
Write('Kimya Notunuz (0..100 arasi): ');readln(not3);
ort:=(not1 + not2 + not3)/3;
write('Ortalamaniz: ',ort:5:2);
Readln;
End.

Burada dikkat etmeniz gereken birsey daha var. ortalamayi hesaplarken yaptigimiz isleme dikkat edin. Tipki matematik dersinde gördügümüz gibi parantezlerin islem önceligi var. Sayilarla yapabileceginiz aritmetik islemleri ilerde görecegiz.
Buraya kadar yapilan ve bundan sonra yapilacak bütün örnekleri kendi elinizle Pascal editöründe yazmanizi tavsiye ederim. Yoksa ögrenemezsiniz. Ama eger kodlari direk olarak Pascal editörüne aktarmak istiyorsaniz kodu isaretleyip sag tiklayin ve kopyala yapin. Daha sonra Not defterini (notepad) açip oraya yapistirin kodlari ve kaydedin. ama kaydederken dosya isminin sonuna .pas yazin. Mesela deneme.pas gibi. Kaydettikten sonra daha önce anlattigimiz sekilde üstüne çift tiklayarak açabilirsiniz. Sonra istediginiz gibi düzeltebilir veya çalistirabilirsini

WRITE / WRITELN


Programlamanin en genel amaci kullanicidan bazi degerleri alip birtakim -önceden programci tarafindan belirlenmis- islemlerden geçirilip sonuçta bulunan degeri ekrana yazmak oldugu için her programlama dilinde kullanicidan veri alma ve ekrana veri yazma deyimleri vardir. Pascal'da kullanicidan read ya da readln komutlariyla veri alinir ve ekrana write ya da writeln komutlariyla yazilir.
Write/Writeln:
Ekrana bir seyler yazmak için kullanilir. Bu sey sabit bir yazi olabilecegi gibi bir degisken de olabilir. Bu durumda degiskenin kendisinin adi degil, degeri yazilir. Ya da direkmen bir islemin sonucu da yazdirilmak istenebilir. Hatta bunlardan iki ya da daha fazlasini da birlikte yazdirabiliriz. Ilk önce ekrana sabit bir yazi (yazi diyoruz ama sayi ya da isaret de olabilir) yazdirmak için kullanimina bakalim. Bu durumda Write(ifade); gibi kullanilir. ifade yerine iki apostrof isareti arasinda bir seyler yazilabilir. Örnegin write('www.kalkan.cjb.net'); gibi. writeln(www.kalkan.cjb.net); gibi degil! Çünkü www.kalkan.cjb.net bir degisken adi degildir (ve olamaz da..). Bununla ilgili küçük bir uygulama yapalim:
Proram uygulama01;
uses crt;
begin clrscr;
writeln('Yarasa');
write('Web Sitesi:');
writeln('www.programlamadili.blogcu.com');
write('E-mail adresi: programlamadili@yahoo.com');
readln;
end. 

Bu program her zaman ayni sonucu verir. Burada belki fark etmissinizdir write ile writeln'in farkini. Write istenen ifadeyi yazip en sonunda bekler, writeln ise bir alt satirin basina gider ve orada bekler. Bekler dedigim sey imleçtir. Siz yazi yazarken yanip sönen o seye imleç denilir ve Pascal'da bir sey yazmak istediginizde imlecin bulundugu yerden itibaren yazilir. Ekranin istedigimiz bir yerine yazi yazdirmayi da anlatacagiz. write ve writeln komutlarinda bir degil de birden fazla ifade de verebilirsiniz:
Program uygulama02;
uses crt;
begin clrscr;
writeln('Yarasa');
writeln('Benim sitem:','www.programlamadili.blogcu.com');
readln;
end. 

..gibi. Gerçi burada pek isimize yaramiyor. Direkt olarak da yazdirabiliriz. Simdi de bir degiskenin degerini yazdiralim. Bunu da write(degisken); seklinde yapariz. Eger write(degisken1, degisken2, degisken3); seklinde 3 adet degiskeni yazdirirsak hepsi ard arda ve bosluk birakilmadan yazilir.
Örnek:program uygulama03;
uses crt;
var
ad, site: string;
sayi, karesi:longint;
begin clrscr;
sayi:=13;
karesi:=sayi*sayi;
ad:='Yarasa';site:='www.programlamadili.blogcu.com';
writeln(ad);
writeln('web sitesi ', site);
writeln(sayi,'->', karesi);
readln;
end.

Gördügünüz gibi sabit ifade ile degisken de ayni write komutuyla kullanilabiliyor. Bu arada write('web sitesi ',site); ile write('web sitesi ', site); komutunun Pascal için hiçbir farki yoktur. Yani -ilk baslarda da anlattigim gibi- Pascal'da bosluklar önemli degildir (tirnak içindekiler hariç). Mesela a:=b+c; ya da a := b + c; yazabilirsiniz. Bu sizin keyfinize kalmis. Ikisi de ayni isi apar. Hatta
a:=
b
+
c;

olarak 4 satir halinde yazsaniz da ayni isi yapar ve hiçbir hata olmaz. Bir de write komutuyla bir islem de yaptirabilirsiniz. Mesela yukaridaki programda karesi degiskenini kullanmadan programi söyle yazabiliriz:
program uygulama04;
uses crt;
var
ad, site: string;
sayi:longint;
begin clrscr;
sayi:=13;
ad:='Yarasa';
site:='www.programlamadili.blogcu.com';
writeln(ad);
writeln('web sitesi ', site);
writeln(sayi,'->',sayi*sayi);
writeln('15 x 3 = ', 15*3);
readln;
end. 

Programa bir writeln daha ekledik. Gördügünüz gibi writeln komutuyla islemin sonucunu da yazdirabiliyoruz. Bunu da inceleyin. Eger write ile bir sayi yazdiracaksaniz sayilara özel olarak write(82); ile write('82'); ayni isi yapar ve sorun çikartmaz. Ama write('Ahmet'); ile write(Ahmet); ayni degildir. Birincisinde ekrana Ahmet yazar ama ikincisinde Ahmet adli bir degiskenin olup olmadigina bakar, eger varsa degerini ekrana yazar, ancak böyle bir degisken daha önceden (var etiketi ile) tanimlanmamissa program çalismaz. Onun için tirnaklara dikkat edin.

For - to [downto] - do Döngüsü

Eger bir sayinin degerini belirli bir degerden baslayip yine belirli bir degere kadar 1'er 1'er artirmak ve her artirma isleminde de istenilen islemleri yapmak isterseniz bu döngüyü kullanabilirsiniz. Cümle biraz karisik olmus olabilir ama komutun kullanimi gayet basit:
For degisken:=baslangiç_degeri to bitis_degeri do islem...
ya da birden çok islem yapacaksaniz:
For degisken:=baslangiç_degeri to bitis_degeri do Begin
islem 1
islem 2
islem 3
...
...
End;

seklinde kullanabilirsiniz. Burada her seferinde sayi:=sayi+1 isleminden kurtulmus oluyoruz. For döngüsü (bitis_degeri - baslangiç_degeri+1) kadar yapilacaktir. Mesela baslangiç degeri 3, bitis degeri 7 ise döngü (7-3) 5 defa yapilir. Çünkü döngü 3'den basliyor ve 3,4,5,6,7 olmak üzere 5 deger aliyor. Bu durumda 5 defa yapilir ve her seferinde degiskenin degeri degisir. Lafi uzatmadan 1'den 10'a kadar olan sayilari ekrana yazdiralim:
Program GercekDongu;
Uses crt;
var
a:integer;
begin clrscr;
for a:=1 to 10 do writeln(a);
readln;
end. 

Iste size çok kisa bir program. Repeat ile daha uzun yazdigimizi hatirlayin. Peki bir de bu sayilarin karesini de yazalim:
Program GercekDongu2;
Uses crt;
var
a,kare:integer;
begin clrscr;
for a:=1 to 10 do begin
kare:=a*a;
writeln(a,' -> ',kare);
end; {For döngüsünün sonu}
readln;
end. 

hatta buna bile gerek duymadan
Program GercekDongu3;
Uses crt;
var
a:integer;
begin clrscr;
for a:=1 to 10 do writeln(a,' -> ',a*a);
readln;
end. 

yapabilirsiniz. Peki simdi de bir sayinin faktoriyelini bulalim. Faktoriyel'i biliyorsunuzdur herhalde. Mesela 3 faktoriyel demek 1x2x3 demektir ve sonucu 6 olur. 5 faktoriyel ise 1x2x3x4x5 demektir ve sonucu 120 olur. Simdi girilen bir sayinin faktoriyelini bulalim:
Program GercekDongu_FaktoriyelBul;
Uses crt;
var
a, sayi:integer;
fakt:longint;
begin clrscr;
write('Kaç faktoriyel olsun: ');readln(sayi);
fakt:=1;
for a:=1 to sayi do fakt:=fakt*a;
writeln(sayi,'! = ',fakt);
end. 

Simdiye kadar neredeyse hep matematiksel islemler yaptik. Simdi de görsel birsey yapalim. Mesela bir yaziyi ekranin sol üst kösesinden baslayarak saga dogru kaydiran bir program yapalim:
Program Yaziyi_Kaydir;
Uses crt;
var
a:byte;
yazi:string;
begin clrscr;
yazi:='www.seckin.canavari.com';
for a:=1 to 50 do begin
gotoxy(a,1);write(yazi);delay(50);clrscr;
end;
end. 

Eger yazi çok hizli kayiyorsa delay(50); degerini artirin, yavas kayiyorsa azaltin. Delay'i sonra anlatiriz. Simdi de bir yaziyi çapraz olarak ekrana yazalim. Ama yazi en fazla 24 harf olsun:
Program Yazdir_Bakalim;
Uses crt;
var
a:byte;
yazi:string;
uz:byte;
begin clrscr;
write('Bir yazi yazin (En fazla 24 harf): ');readln(yazi);
uz:=length(yazi);
clrscr;
for a:=1 to uz do begin
gotoxy(a,a);write(yazi[a]);
gotoxy(80-a,a);write(yazi[a]);
gotoxy(40,a);write(yazi[a]);
end;
readln;
end. 

Yaziyi ekrana üç farkli sekilde yazdiriyoruz. Burada kullandigimiza yazi[a] 'yi önceden anlatmistik. mesela yazi[5] o yazinin 5. harfidir. Örnegin yazi:='Seckin'; ise yazi[2]='e' olur.
For döngüsünün ikinci kullanimi da to yerine downto iledir. Bu sekilde sayi 1'er 1'er artacaginza 1'er 1'er azalir. Bunun için baslangiç degeri bitis degerinden büyük olmalidir. Simdi de 200'dan 1'e kadar olan sayilari yan yana yazalim.
Program asagigit;
uses crt;
var
a:byte;
begin clrscr;
for a:=200 downto 1 do write(a:4);
readln;
end. 

Bir de girilen 10 tane sayidan 10'dan büyük olan sayilar ile 10'dan küçük olan sayilarin sayisini bulan programi yapalim:
Program bul_bakalim;
Uses crt;
var
b,k,o:byte;
a:byte;
sayi:byte;
begin clrscr;
k:=0;b:=0;o:=0;
for a:=1 to 10 do begin
write('Bir sayi giriniz: ');readln(sayi);
if sayi<10 then k:=k+1;
if sayi>10 then b:=b+1;
if sayi=10 then o:=o+1;
end;
clrscr;
writeln('10''dan küçük olanlar: ',k,' tane.');
writeln('10''dan büyük olanlar: ',b,' tane.');
writeln('Girilen 10 sayisi: ',o,' tane.');
readln;
end. 

While Do

While döngüsünün mantigi da aslinda Repeat'a benzer. Repeat'a "Su sart olana kadar döngüyü sürdür" diyorsak While'a da "Su sart oldugu sürece döngüyü sürdür" diyoruz. While kelimesinin anlami "iken", do kelimesinin anlami ise "yap" demektir. Bu durumda "While sart do" ise "sart dogru iken yap" anlamindadir. While döngüsünün Genel Kullanimi;
while (sart ya da sartlar) do islem...
seklinde olup birden çok islem yaptirilmak istendiginde begin-end blogu kullanilir
while (sart ya da sartlar) do begin
islem 1
islem 2
islem 3
...
...
end;

Simdi repeat ile yaptigimiza 1'den 10'a kadar sayilari yazdirma islemini while ile yapalim:
Program while_denemesi;
uses crt;
Var
sayi:byte;
begin clrscr;
sayi:=1;
while (sayi<=10) do begin
writeln(sayi);
sayi:=sayi+1; {Sayi'nin degeri 1 artiriliyor}
end;{While dongusunun sonu}
readln;{Enter'a basilmasi bekleniyor...}
end.{Programin Sonu} 

Bu progarmdaki döngü Türkçe'ye "sayi 10'dan küçük ya da 10'a esit oldugu sürece begin ile end arasindaki islemleri yap" ya da "sayi 11'den küçük iken su islemleri yap.." diye tercüme edilebilir.