Karakter boyutu :![]() ![]() ![]() ![]() | |
Delphide Matematik FonksiyonlarıDelphi içerisinde, kolay uygulama geliştirme amaçlı kullanabileceğiniz bir çok method ve özellik bulunmaktadır. Bu methodlar sizleri yazmanız gereken bir çok sıkıcı koddan kurtarmaya yönelik olarak eklenmiştir. Şimdi Delphi kütüphanesinde yer olan bu fonksiyonları teker teker incelemeye başlayalım. Aritmetik işlem yapabilmek için kütüphaneye eklenmiş, fonksiyonlardır. Matematik fonksiyonları kullanırken ondalıklı sayıların, tam sayıları kapsadığı (digit kaybı olmadığı için) unutulmamalıdır. Bu fonksiyonları çalıştırabilmeniz için math kütüphanesini uses satırına eklemeniz gerekmektedir. Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; Abs(ondalıklı_sayı); Parametre olarak girilen (parantez içerisindeki değer parametre olarak adlandırılmaktadır) reel sayının pozitif değerini hesaplamak için kullanılır. Parametre pozitif ise sayının değerini değiştirmeyecektir. Eğer negatif ise o zaman pozitif değerini geriye döndürecektir. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Real; begin Sayi :=StrToFloat(Edit1.Text); Sonuc :=Abs(sayi); // Pozitife çevir. Caption:= FloatToStr(sonuc); end; Fonksiyona gönderilen parametre tam sayı veya reel sayı tipli olabilir. Aynı mantıkla geriye döndürdüğü sayının tipi de yine tam sayı veya ondalıklı sayı olabilcektir. Ceil(ondalıklı_sayı); Parametre olarak girilen bir üst tam sayıya yuvarlatarak geriye döndürür. Dönen sayının tipi tam sayı olduğu için IntToStr tip dönüştürme fonksiyonu sayesinde kolayca yazdırılabilir. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Integer; begin Sayi :=125.2; Sonuc :=Ceil(sayi); // Ondalıklı sayıyı üste yuvarla. Caption:= IntToStr(sonuc); // 126 yazar end; Aşağıda ki şekilde de kullanılabilir. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Integer; begin Sayi :=StrToFloat(Edit1.Text); Sonuc :=Ceil(sayi); // Editteki değeri bir üst tam sayıya yuvarla Caption:= IntToStr(sonuc); end; Ceil fonksiyonu, sayıda yer alan ondalıklı kıma bakmadan bir üst tam sayıya yuvarlamak için kullanılır. Floor(ondalıklı_sayı); Bu fonksiyon ceil fonksiyonunun yaptığı işlevin tam tersini yapar. Yani parametre olarak girilen ondalıklı sayıyı, virgülden sonraki kısmın büyüklüğüne bakmadan bir alt tam sayıya yuvarlayacaktır. Sayının negatif veya pozitif olması önem arz etmez. Her zaman bir alt tam sayıya yuvarlama yapacaktır. ( -2.8â i -3 olarak döndürecektir ) Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Integer; begin Sayi :=125.9; Sonuc :=Floor(sayi); // Bir alt ta sayıya indir. Caption:= IntToStr(sonuc); // 125 yazar end; Negatif tam sayılara örnek yapacak olursak : Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Integer; begin Sayi :=-125.1; Sonuc :=Floor(sayi); Caption:= IntToStr(sonuc); // -126 yazar end; Floor fonksiyonu, sayıda yer alan ondalıklı kısma bakmadan bir alt tam sayıya yuvarlamak için kullanılır. Trunc(ondalıklı_sayı); Parametre olarak girilen ondalıklı sayının tam kısmını döndüren matematiksel bir fonksiyondur. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Integer; begin Sayi :=125.9; Sonuc :=Trunc(sayi); // Sadece tam kısmını göster Caption:= IntToStr(sonuc); // 125 yazar end; Trunc fonksiyonunda herhangi bir yuvarlatma söz konusu değildir. Negatif sayılar içinde kolaylıkla kullanılabilir. (-125.9â u -125 olarak hesaplar) Geriye dönen değerin tipinin tam sayı olduğunu fonksiyon tanımlamasından kolayca çıkarabilirsiniz. Frac(ondalıklı_sayı); Parametre olarak girilen değerin ondalıklı kısmını hesaplayan bir fonksiyondur. Tanımlamaya dikkat edecek olursanız. Geriye dönen değerin tipinin ondalıklı bir sayı (extended) olduğunu görürsünüz. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Extended; begin Sayi :=125.756; // İsterseniz bir kontrolden değer aktarabilirsiniz Sonuc :=Frac(sayi); // Ondalıklı kısmı al Caption:= FloatToStr(sonuc); // 0.756 yazar end; Fonksiyondan geriye dönen değer ondalıklı bir sayı tipi olduğu için FloatToStr fonksiyonu ile kolayca değerini yazdırabilirsiniz. Exp(ondalıklı_sayı); Parametre olarak girilen sayıyı âeâ ( 22/7 ) nin üssü olarak kabul eder ve kuvvetini alır. (Şayet 2 girilirse e sayısının karesi alınır) Procedure TForm1.Button1Click(Sender; Object); var sayi : Integer; Sonuc : Extended; begin Sayi :=2; Sonuc :=Exp(sayi); // e nin karesini bul Caption:= FloatToStr(sonuc); // 7.389 yazar end; Int(ondalıklı_sayı); Parametre olarak girilen değerin tam kısmını reel sayı olarak döndüren bir fonksiyondur. Sonucu herhangi bir kontrolde yazdırmak için FloatToStr tip dönüştürme fonksiyonunu kullanmalısınız. IntToStr tip dönüştürme fonksiyonu hata verecektir. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Real; begin Sayi :=-120.85; // Değeri kontrolden de aldırabilirsiniz. Sonuc :=Int(sayi); // Tam kısmını al Caption:= FloatToStr(sonuc); // -120 yazar end; Tekrar hatırlatmakta yarar görüyorum, bu fonksiyondan geriye dönen sayının tipi ondalıklı sayı tipidir. Bu yüzden yazdırmak için FloatToStr fonksiyonundan faydalanmalısınız. IntPower(ondalıklı_sayı , tam_sayı); Birinci parametre olarak girilen ondalıklı sayının, ikinci parametre ile girilen kuvvetini hesaplatmak için kullanılır. İkinci parametre olarak sadece tam sayı değeri girebilirsiniz. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Extended; begin Sayi :=5.2; Sonuc :=IntPower(sayi , 2); // e nin karesini bul Caption:= FloatToStr(sonuc); // 27.04 yazar end; IntPower fonksiyonundan geriye dönen sayının tipi ondalıklı olmaktadır. Bu yüzden kontrol üzerinde yazdırabilmek için FloatToStr fonksiyonundan faydalanmalısınız. Ln(ondalıklı_sayı); Parametre olarak girilen ondalıklı (ondalıklı sayılar tam sayıları kapsarlar, unutmayın) sayının e tabanında logaritmasını almak için kullanılır. Fonksiyondan geriye yine bir ondalıklı sayı döner. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Real; begin Sayi :=10; Sonuc :=Ln(sayi); // Logesayi demektir. Caption:= FloatToStr(sonuc); // 2.302 yazar end; Fonksiyondan geriye dönen değer ondalıklı sayı tipli olduğu için FloatToStr fonksiyonu kullanılarak yazdırılabilir. Log10(ondalıklı_sayı); Parametre olarak girilen değişkenin 10 tabanına göre logaritmasını almak için kullanılır. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Real; begin Sayi :=100; Sonuc :=Log10(sayi); Caption:= FloatToStr(sonuc); // 2 yazar end; Fonksiyondan geriye dönen değer ondalıklı sayı tipli olduğu için FloatToStr fonksiyonu kullanılarak yazdırılabilir. Log2(ondalıklı_sayı); Parametre olarak girilen değişkenin 2 tabanında logaritmasını hesaplayan bir fonksiyondur. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Real; begin Sayi :=8; Sonuc :=Log2(sayi); //Log28 Caption:= FloatToStr(sonuc); // 3 yazar end; Fonksiyondan geriye dönen değer ondalıklı sayı tipli olduğu için FloatToStr fonksiyonu kullanılarak yazdırılabilir. LogN(ondalıklı_sayı , ondalıklı_sayı2); Parametre olarak girilen değişkenin 2 tabanında logaritmasını hesaplayan bir fonksiyondur. Procedure TForm1.Button1Click(Sender; Object); var sayi : Real; Sonuc : Real; begin Sayi :=9; Sonuc :=LogN(3,sayi); //Log39 Caption:= FloatToStr(sonuc); // 2 yazar end; Fonksiyondan geriye dönen değer ondalıklı sayı tipli olduğu için FloatToStr fonksiyonu kullanılarak yazdırılabilir. Max(ondalıklı_sayı , ondalıklı_sayı2); Parametre olarak girilen ondalıklı (veya tam sayı) sayıların en büyüğünü hesaplayan bir fonksiyondur. Dikkat edeceğiniz husus fonksiyonun sadece iki parametre aldığıdır. Yani elinizdeki üç sayının en büyüğünü bu fonksiyonla hesaplatamazsınız. (Dolaylı olarak olabilir) Procedure TForm1.Button1Click(Sender; Object); var Ilk, Son : Integer; Sonuc : Real; begin Ilk : 25; Son : 5; Sonuc :=Max(Ilk , Son); // Büyük olanını bul Caption:= FloatToStr(sonuc); // 25 yazar end; Parametre olarak ondalıklı sayıda kullanabilirsiniz. Min(ondalıklı_sayı , ondalıklı_sayı2); Parametre olarak girilen ondalıklı (veya tam sayı) sayıların en küçüğünü hesaplayan bir fonksiyondur. Dikkat edeceğiniz husus fonksiyonun sadece iki parametre aldığıdır. Yani elinizdeki üç sayının en büyüğünü bu fonksiyonla hesaplatamazsınız. (Dolaylı olarak olabilir) Procedure TForm1.Button1Click(Sender; Object); var Ilk, Son : Integer; Sonuc : Real; begin Ilk : 25; Son : 5; Sonuc :=Min(Ilk , Son); // Küçük olanını bul Caption:= FloatToStr(sonuc); // 5 yazar end; Parametre olarak ondalıklı sayıda kullanabilirsiniz. Mudiv(Tam_Sayı , Tam_Sayı2 , Tam_Sayı3); İlk iki parametre ile verilen tam sayıları çarpıp, üçüncü parametreye bölen matematiksel bir fonksiyondur. Fonksiyondan geriye dönen değerin tipi tam sayı olduğu için, sonuç ondalıklı olarak çıkarsa aşağı veya yukarı tam sayıya yuvarlama işlemi yapacaktır. Procedure TForm1.Button1Click(Sender; Object); var Sayi, Adet, Bol, Sonuc : Integer; begin Sayi : 10; Adet : 2; Bol : 3; Sonuc :=Muldiv(Sayi, Adet, Bol); // 10*2/3 Caption:= IntToStr(sonuc); // 7 yazar end; Fonksiyondan geriye dönen değer tam sayı tipli olduğu için, tip dönüştürme işlemini IntToStr fonksiyonu ile gerçekleştirebilirsiniz. Pi: Matematikte kullanılan pi sayısının değerini içerisinde tutabilen bir fonksiyondur. 3.1415926535897932385 sayısına eşit olan bu fonksiyon sayesinde, daireye ait alan ve çevre hesaplamalarını kolaylıkla yaptırabilirsiniz. Fonksiyon ondalıklı bir sayı barındırdığı için FloatToStr fonksiyonu kullanılarak tip dönüşüm işlemleri uygulanmalıdır. Procedure TForm1.Button1Click(Sender; Object); var YariCap : Integer; Cevre, Alan : Double; begin YariCap : 10; Cevre : 2 * pi * YariCap; //çevre = 2 * pi * r Alan := pi * YariCap * YariCap; Label1.Caption := âDaire Alanı : â+ FloatToStr(Alan); Label2.Caption := âDairenin çevresiâ+FloatToStr(Cevre); end; Poly(Ondalıklı_Sayı , Değişken): Programınızda polinom fonksiyon sonuçlarını hesaplatmak için kullanılır. Birinci parametre polinom fonksiyondaki değişkenin değeri, ikinci parametre ise polinom fonksiyonda kullanılacak olan kat sayıların değerini tutacak olan dizi değişkenden ibarettir. Procedure TForm1.Button1Click(Sender; Object); var KatSayilar : Array of Double; Değer, Derece, i : Integer; Sonuc : Extended; begin Deger := StrToInt(InputBox(âHangi Değer İçinâ,âDegerâ,ââ)); Derece := StrToInt(InputBox(âPoinom Kaçıncı Derecedenâ,âDereceâ,ââ)); SetLength(KatSayilar , Derece+1); // Boyutla For I:=Low(KatSayilar) to High(KatSayilar) do KatSayilar[i]:=StrToInt(InputBox(IntToStr(i)+â.ci Kat Sayıyı Girinizâ,âKatSayiâ,ââ)); Sonuc:=Poly(Deger , KatSayilar); // Polinomu hesapla Caption := âPolinomun Sonucu : â+FloatToStr(Sonuc); end; Fonksiyonu kullanırken dizi değişkeninizi ondalıklı sayı tanımlamaya dikkat ediniz. Programı çalıştırdıktan sonra polinomda kullanılan (y=ax2+bx) x değişkeninin değerini girmeniz istenecektir. Ardından polinom fonksiyonunuzun kaçıncı dereceden olduğunu ve katsayılarını sırası ile (olmayan bir katsayı için sıfır giriniz) girmenizi isteyecektir. Fonksiyondan geriye dönen değer ondalıklı sayı olacağı için sonucu FloatToStr fonksiyonu ile yazdırabilirsiniz. Power(Ondalıklı_Sayı , Ondalıklı_Sayı2): ãst almak için Delphiâ de kullanılan bir fonksiyondur. Birinci parametre ile verilen ondalıklı sayının, ikinci parametreyle verilen kuvvetini hesaplar. Procedure TForm1.Button1Click(Sender; Object); var Taban, Us : Double; Sonuc : Extended; begin Taban := 4; Ust := 3; Sonuc := Power(Taban , Ust); // ãst al Caption := FloatToStr(Sonuc); // 4 * 4 * 4 = 64 yazar end; Taban ve üst değerleri ondalıklı sayıda olabilir. (yani 2.4â ün 5.2â ci kuvvetini de hesaplayabilir) Fonksiyondan geriye dönen değer ondalıklı sayı olduğu için sonucu yazdırmak için FloatToStr fonksiyonunu kullanabilirsiniz. Round(Ondalıklı_Sayı): Parametre ile girilen reel sayıyı ondalıklı kısımdaki değere göre, bir üst veya bir alt tam sayıya yuvarlamak için kullanılan bir fonksiyondur. Ondalıklı kısımdaki ilk rakam 5 veya daha büyük ise üstte, daha küçük ise altta yuvarlanacaktır. Fonksiyondan geriye dönen değer tam sayı tipli olacağı için, kontrol içerisinde yazdırmak için IntToStr fonksiyonunu kullanmanız yeterli olacaktır. Procedure TForm1.Button1Click(Sender; Object); var Deger, Sonuc : Extended; begin Deger := 1001.465; Sonuc := RoundTo(Deger , -2); // Ondalıklı kısımdan 2 rakam Caption := FloatToStr(Sonuc); // 1001.47 yazar end; Eğer ikinci parametre pozitif sayı ise : Bu durumdan tam kısmın en sonundan başlayarak, ikinci parametreyle belirtilen değer kadar 0 eklenir. Sonuçta yine üstte veya altta yuvarlatma işlemi uygulanacaktır. Procedure TForm1.Button1Click(Sender; Object); var Deger, Sonuc : Extended; begin Deger := 1591.465; Sonuc := RoundTo(Deger , 3); // Ondalıklı kısımdan 2 rakam Caption := FloatToStr(Sonuc); // 2000 yazar end; örnek// Procedure TForm1.Button1Click(Sender; Object); var Deger, Sonuc : Extended; begin Deger := 1491.465; Sonuc := RoundTo(Deger , 3); // Ondalıklı kısımdan 2 rakam Caption := FloatToStr(Sonuc); // 1000 yazar end; ãstte ki örnekte sağdan üç rakamı 0 yapınız, aynı zamanda en son 0 yapılan rakam 5 den büyük ise bir üstte, küçük ise bir altta yuvarla denilmek istenmektedir. Biraz değişik gelebilir, ama yeterince örnek çözerseniz mantığına alışacaksınız sanırım. Sign(ondalıklı_sayı); Parametreye girilen değerin pozitif, sıfır veya negatif olduğunu gösterebilen bir fonksiyondur. Eğer sayı sıfırdan küçük ise -1 büyük ise +1 sıfıra eşit ise 0 değerini döndürecektir. Sign fonksiyonundan geriye dönen değer 0, 1, -1 rakamlarından bir tanesi olacaktır. Sayının çok büyük veya küçük olması bu durumu değiştirmemektedir. Procedure TForm1.Button1Click(Sender; Object); var Ilk : Double; Sonuc : Integer; begin Ilk := StrToFloat(Edit1.Text); Sonuc := Sign(Ilk); Caption:= FloatToStr(sonuc); end; Yazılan kodlamada açıklanacak bir şey olmadığı (her şey açık zaten) için açıklama satırlarına gerek görülmemiştir. SimpleRoundTo(ondalıklı_sayı , Tam_Sayı); çalışma mantığı daha önce izah edilen RoundTo fonksiyonuna çok benzemektedir. Aralarında ki tek fark SimpleRoundTo fonksiyonunda yuvarlatma işlemi uygulanmayacağıdır. Aşağıda ki sonuçları yapacağınız örnek ile kıyaslayınız. SipleRoundTo(1254.6543,1) - - > 2000 SipleRoundTo(1254.6543,-2) - - > 1254.65 SipleRoundTo(1254.6543,-3) - - > 1254.653 Sqr(ondalıklı_sayı); Parametre girilen sayının karesini hesaplayabilen bir Delphi fonksiyonudur. Tam sayılar için kullanılabileceği gibi ondalıklı sayılar için sonucu hesaplayabilmektedir. Procedure TForm1.Button1Click(Sender; Object); var Sonuc, Sayi : Double; begin Sayi := 100.2; Sonuc := Sqr(Sayi); Caption:= FloatToStr(sonuc); // 10040.04 yazar end; Kullanılan parametrenin tipi tam sayı ise bu durumda sonucu daha hızlı hesaplayacaktır. Sqrt(ondalıklı_sayı); Parametre girilen sayının ondalıklı sayının karekökünü hesaplayan bir fonksiyondur. Parametrenin tam sayı veya ondalıklı sayı olması önem arz etmemektedir. Procedure TForm1.Button1Click(Sender; Object); var Sonuc, Sayi : Double; begin Sayi := 100; Sonuc := Sqrt(Sayi); // Karekökünü hesapla Caption:= FloatToStr(sonuc); // 10 yazar end; Bu fonksiyon geriye ondalıklı sayı döneceği için sonucu yazdırmak için FloatToStr fonksiyonunu kullanmalısınız. Inc(Tam_Sayı , Tam_Sayı2); Bu bir fonksiyon değil (prosedür), ama burada vermeyi uygun gördüm. Method birinci parametre ile girilen değişkenin (tam sayı olmak zorundadır) artıracaktır. İkinci parametrenin opsiyonel olduğunu belirtmek isterim, şayet verilmezse artım değeri 1 olarak alınacaktır. Procedure TForm1.Button1Click(Sender; Object); var Deger : Integer; begin deger := 99; Inc(deger); // Değişkenin değerini bir artır Caption:= IntToStr(deger); // 100 yazar end; örnek// Procedure TForm1.Button1Click(Sender; Object); var Deger : Integer; begin deger := 99; Inc(deger,11); // Değişkenin değerini onbir artır Caption:= IntToStr(deger); // 110 yazar end; Inc metoduyla ondalıklı sayı kullanamazsınız. Eğer kullanmaya kalkarsanız Delphi sizi hata mesajı ile uyaracaktır. Dec(Tam_Sayı , Tam_Sayı2); Method birinci parametre ile girilen değişkenin (tam sayı olmak zorundadır) değerini ikinci parametre kadar (ikinci değişkende tam sayı olmak zorundadır) azaltacaktır. İkinci parametrenin opsiyonel olduğunu belirtmek isterim, şayet verilmezse azalma değeri 1 olarak alınacaktır. Procedure TForm1.Button1Click(Sender; Object); var Deger : Integer; begin Deger := 100; Dec(Deger,1); // Değişkenin değerini bir azalt Caption:= IntToStr(Deger); // 99 yazar end; //örnek Procedure TForm1.Button1Click(Sender; Object); var Deger : Integer; begin Deger := 110; Dec(Deger,11); // Değişkenin değerini onbir azalt Caption:= IntToStr(Deger); // 99 yazar end; Dec prosedürü de sadece tam sayı değerler için kullanıldığından ondalıklı sayılar için denerseniz programınız kırılacaktır. Div : Bu da bir fonksiyon olmamakla beraber bu kısımda bulunmasında fayda görmekteyim. Matematiksel bölme işleminde tam bölüm değerini veren bir komuttur. Procedure TForm1.Button1Click(Sender; Object); var Deger, Sonuc : Integer; begin Deger := 19; Sonuc := Deger div 4; // 4 kaç kere var Caption:= IntToStr(Sonuc); // tam olarak 4 kere var end; Mod : Procedure TForm1.Button1Click(Sender; Object); var Deger, Sonuc : Integer; begin Deger := 19; Sonuc := Deger mod 4; // kalan ne Caption:= IntToStr(Sonuc); // 3 yazar end; Shl : Değişken değerlerinin iki sayısı veya kuvvetleriyle kolayca işlem yapılabilmesini sağlayan komuttur. (C++ bilenler için >> ve <<) Yaptığı işleme gelince; solunda belirtilen sayıyla, sağında belirtilen sayıyı ikinin kuvveti olarak kabul ederek çarpar. Procedure TForm1.Button1Click(Sender; Object); var Deger : Integer; Sonuc : Extended; begin Deger := 10; Sonuc := Deger Shl 3; // 2^3*10=80 Caption:= FloatToStr(Sonuc); // 80 yazar end; Shl komutunun yaptığı işlem şudur. a:=10 shl 3 satırı a:=10*2üzeri3 ile aynı işi yapacaktır. Yani sağdaki sayıyı 2 nin üsttü olarak alacak solundaki sayıyla çarpacaktır. (C++ da 3 bit sola ötele) Procedure TForm1.Button1Click(Sender; Object); var Deger : Integer; Sonuc : Extended; begin Deger := 20; Sonuc := Deger Shl 5; // 2^5*20=640 Caption:= FloatToStr(Sonuc); // 640 yazar end; Shr : Değişken değerlerinin iki sayısı veya kuvvetleriyle kolayca işlem yapılabilmesini sağlayan diğer bir komuttur. (C++ bileşenleri için >> ve <<) Yaptığı işleme gelince; solunda belirtilen sayıyla, sağında belirtilen sayıyı ikinin kuvveti olarak kabul ederek böler. Belirtilen üst değeri kadar bit sağa öteleme yapar da denilebilir. Procedure TForm1.Button1Click(Sender; Object); var Deger : Integer; Sonuc : Extended; begin Deger := 20; Sonuc := Deger Shr 2; // 20/2^2=5 Caption:= FloatToStr(Sonuc); // 5 yazar end; sonuc:=deger shr 2 satırı sonuc:=deger/(2^2) ile aynı sonucu verecektir. Yani sağında ki sayıyı ikinin kuvveti olarak kabul edecek, solunda ki sayıya bölecektir. | |
| 10 Nisan 2008 Perşembe - Delphi Yazıları - Yorum Yaz/Oku (0)- # | |





Delphide Matematik Fonksiyonları
Kategoriler
Yazılarım
Linkler






