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

String Degişken Tipi

Programci diliyle bu tip degiskenler alfasayisal degerler alabilir. Halk dilinde ise bunlara yazi ya da sayisal olmayan veri diyebiliriz. Yani sizin yasiniz sayisal bir deger ise isminiz alfasayisal bir degerdir. Alfasayisal ifadeler iki tirnak içerisinde gösterilir. Yani isminizi 'Halil Ibrahim Kalkan' seklinde gösterirsiniz. Ancak sayi degil dekik diye içerisinde sayi geçmeyecek diye birsey yoktur. Yeni 'Beim yasim 17.' cümlesi ve '392' sayisi da tirnak içerisinde yazildigindan string tiplerdir ve matematiksel islemlerde kullanilamazlar. Ya da mesela telefon numaraniz bir sayi oldugu halde bunu tutmak için sayisal degisken kullanilmaz, onun yerine string degisken kullanilir. Çünkü telefon numaranizin üstünde çikartma, kök alma gibi matematiksel islem yapmayacaksiniz. Ama tabii ki bu size kalmis. Isterseniz telefon numarasi için longint degisken tanimlayabilirsiniz.
String degiskenlerin içerisinde maksimum 255 karekterlik bilgi bulunabilir. Bu karekter her türlü harf, sayi, isaret, bosluk... olabilir. Mesela 'a=2x5+3/62' diye bir string ifade yazilabilir. Anlayacaginiz tirnak içerisinde ne varsa sabittir. Örnek bir program yazalim:
Program String_tip_ornegi;
Uses crt;
Var
isim: string;
yas: byte;
begin clrscr;
write('Adinizi yaziniz: ');readln(isim);
write('Yasinizi yaziniz: ');readln(yas);
clrscr;
writeln('Merhaba ',isim);
writeln('Sizin yasiniz ',yas);
readln;
end.

Bu programi pascal'da yazip çalistirirsaniz sizin isminizi ve yasinizi alip ekrana geri yazar. Simdi dikkat ettiyseniz 'Adinizi yaziniz: ' ifadesi de aslinda string ifadedir. Bu ifade degisken degil, sabit oldugundan iki apostrof isareti arasina yazilir. Peki bu ifadeleri de bir degiskenin degeri yapalim ve öyle yazdiralim:
Program String_tip_ornegi;
Uses crt;
Var
isim, ad_iste, yas_iste, yas_yaz, ad_yaz: string;
yas: byte;
begin clrscr;
ad_iste:='Adinizi yaziniz: ';
yas_iste:='Yassinizi yaziniz: ';
write(ad_iste);readln(isim);
write(yas_iste);readln(yas);
clrscr;
yas_yaz:='Sizin yasiniz ';
ad_yaz:='Merhaba ';
writeln(ad_yaz,isim);
writeln(yas_yaz,yas);
readln;
end.

Bu programi yazip çalistirinca bir önceki program ile tamamen ayni isi yaptigini göreceksiniz. Ama burada gereksiz yere fazla degiken kullanip fazla islem yaptik. Ama amacimiz ögrenmek. Gördügünüz gibi string tipdeki bir degiskene veri aktarimi sayisal tipli bir degiskene veri aktarimi ile ayni ama burada verileri iki apostrof isareti arasina yaziyoruz ( '.....' gibi ). Bu arada eger programlari kopyala/yapistir yolu ile pascal'a aktariyorsaniz (ki bunu yapmasaniz daha iyi ögrenirsiniz) Türkçe karakterlerde sorunlar vuku bulmus olabilir(!). Bu windows ile ms-dos'un ascii karakterlerinin farkli olmasindan kaynaklaniyor ve telafisi zor. En iyisi elle yazmak. Bu arada ilerde ascii'nin de ne olduguna deginecegimiz için "bu ascii de ne demek" diye düsünmenize gerek yok.
Bir string ifade aksi belirtilmedikçe maksimum 255 karakter uzunlugunda olur ve hafizada 256 byte alan isgal eder. Aksi belirtilmedikçe diyince hemen aksini belirtip daha uzun olabileceginiz sanmayin. Tersine daha az olabilir. Peki nasil aksini belirtecegiz.
Var
isim: string[40];

seklinde. Artik isim adli string degiskenimiz en fazla 40 karakter uzunlugunda olabilir ve 41 byte yer kaplar (Neden mi 41 byte? Unutmazsak sonra anlatiriz onu da!). Bir insanin ismi de 40 harften fazla olamayacagindan (ya da olsa bile kisa yazsin sayin kullanicilarimiz!) gereksiz yere 256 bytelik yer isgal etmeyip 215 byte kar edelim. Artik bu degskene 40 harften daha uzun bilgi girilmek istenirse sadece ilk 40 karakterini alir ve gerisini yok sayar.
String tipin çok özelligi var. Bunlari ilerdeki konularda görecegiz. Ancak simdi String tiplerde çok isinize yarayacak (ilk etapta gereksiz gözükebilir ama döngüleri ve karar deyimlerini gördükten sonra daha iyi anlayacaksiniz) bir özellige gözatalim. Bir string degiskenin x. karakterini elde etmek için string_ifade[x] seklinde kullanilir. Yani isim adli bir string degiskenimizi isim='www.kalkan.cjb.net' olarak tanimlayiip sonra da write(isim[5]); komutunu verirsek ekrana sadece k harfi yazilir. Bununla ilgili çok örnek yapacagimizdan simdilik üzerinde durmayalim ve örnek yapma isini size birakalim.