Saymalı sıralama algoritması verilerin aralığını kullanarak sıralama yapar. Saymalı sıralama algoritması Harold H. Seward tarafından 1954 yılında yazılmıştır.
Elimizde şu şekilde bir A dizisi olsun:
İlk önce dizideki en büyük değer bulunur. Dizideki en büyük değer 7’dir. 7 + 1 uzunluğunda bir başka dizi tanımlanır. Biz bunu B dizisi olarak tanımlayalım. Sonra B dizisinin tüm değerleri 0 yapılır.
Sonra A dizisiyle aynı uzunlukta başka bir dizi tanımlanır. Biz bunu C dizisi olarak tanımlayalım.
Sonra A dizisi birinci elemanından itibaren seçilir. Birinci elemanın değeri B dizinde index numarasını gösterir. B dizisindeki veri +1 arttırılır.
Sonra B dizisine n = n + (n-1) uygulanır. Yani bir elemanın değeri bir önceki elemanın değeriyle toplanır ve elemana yazılır.
A dizisinin sondan itibaren elemanı seçilir. Değeri B dizisinin indeksini verir. B elemanının değerinin bir eksiği, C dizisindeki indeksi verir. C dizisindeki (B elemanının değeri – 1) indeksine, seçilen elemanın değeri yazılır. B elemanının değeri 1 azaltılır.
Böylelikle A dizisindeki elemanlar, C dizisinde sıralanmış olur.
C# Kod yapısı da aşağıdaki gibidir.
int[] a = new int[]{7, 3, 5, 1};
//En büyük değerin indeksini al
int enb = 0;
for (int i = 1; i < a.Length; i++)
{
if (a[i] > a[enb])
enb = i;
}
//B ve C dizilerini tanımla
int[] b = new int[a[enb] + 1];
int[] c = new int[a.Length];
//dizideki elemanları say
for (int i = 0; i < a.Length; i++)
{
b[a[i]] += 1;
}
//n = n + (n - 1)
for (int i = 1; i < b.Length; i++)
{
b[i] += b[i - 1];
}
//C dizisine sırala
for (int i = a.Length - 1; i >= 0; i--)
{
c[b[a[i]]-- - 1] = a[i];
}
Kokteyl sıralama algoritması bir elemanı seçip sonraki diğeriyle karşılaştırıp, koşul sağlanırsa yer değiştirip; son elemana kadar bu şekilde devam eder. Son elemanı karşılaştırdıktan sonra eğer bu döngüde yer değiştirme olmuşsa bu sefer sondan başlayarak karşılaştırır.
5, 10, 1, 2, 47 sayıları olsun. Küçükten büyüğe doğru kokteyl sıralama algoritmasıyla sıralayalım.
ilk önce ilk eleman (5) seçilir. Sonraki elemanla (10) karşılaştırılır. Sonraki eleman ilk elemandan küçükse yer değiştirir. Burada 10, 5’den küçük olmadığı için aynen kalır. (5, 10, 1, 2, 47)
Sonra ikinci eleman (10) seçilir. İkinci eleman sonraki elemanla (1) karşılaştırılır. İkinci elemandan küçükse yer değiştirir. Burada 1, 10’dan küçük olduğu için yer değiştirir. (5, 1, 10, 2, 47)
Sonra üçüncü eleman (10) seçilir. Üçüncü elemandan sonraki elamanla (2) karşılaştırılır. (5, 1, 10, 2, 47)
Sonra dördüncü eleman (2) seçilir. Dördüncü elemandan sonraki elamanla (47) karşılaştırılır. (5, 1, 10, 2, 47)
Döngü biter. Eğer yer değiştirme olmuşsa bu sefer sondan (47) başlayarak bir önceki eleman (2) karşılaştırılır. (5, 1, 10, 2, 47)
Sonra sondan ikinci eleman (2) seçilir. Önceki elemanla (10) karşılaştırılır. (5, 1, 10, 2, 47)
Sonra sondan üçüncü eleman (10) seçilir. Önceki elemanla (1) karşılaştırılır. (5, 1, 10, 2, 47)
Sonra sondan dördüncü eleman (1) seçilir. Önceki elemanla (5) karşılaştırılır. Önceki eleman küçük olduğu için yer değiştirir. (1, 5, 10, 2, 47)
Sonra tekrar baştan itibaren bir daha bir sonraki elemanlar karşılaştırılır. (1, 5, 2, 10, 47)
Eğer yer değiştirme olmuşsa bu sefer tekrar sondan itibaren eleman seçilerek bir önceki elemanla karşılaştırılır. (1, 2, 5, 10, 47)
Sonra tekrar baştan itibaren bir sonraki eleman karşılaştırılır. Yer değiştirme olmadığı için sayılarımız sıralanmıştır. Döngüden çıkılır.
Burada iki döngü olduğunu görmekteyiz. Birincisi baştan başlayarak sonraki elemanı karşılaştırıyor. İkincisi sondan başlayarak bir önceki elemanı karşılaştırıyor. Birinci döngüde eğer yer değiştirme olmuşsa ikinci döngüye devam ediyor. Bu yüzden bir kontrol yapmamız gerekir.
İlk döngümüzü yazalım. Baştan başlayarak sondan bir eksiğine kadar gidecek ve seçilen elemanla bir sonraki elemanı karşılaştırılacak. Sonra büyüklük veya küçüklük sıralamasına göre yer değiştirecek.
int[] dizi = new int[]{5, 10, 1, 2, 47};
for (int i = 0; i < dizi.Length - 1; i++)
{
if (dizi[i + 1] < dizi[i])
{
int temp = dizi[i];
dizi[i] = dizi[i + 1];
dizi[i + 1] = temp;
}
}
İkinci döngümüzüde yazalım. Sondan başlayarak index 1’e kadar gidecek. Bir önceki elemanı karşılaştıracak.
int[] dizi = new int[]{5, 10, 1, 2, 47};
//Birinci Döngü
for (int i = 0; i < dizi.Length - 1; i++)
{
if (dizi[i + 1] < dizi[i])
{
int temp = dizi[i];
dizi[i] = dizi[i + 1];
dizi[i + 1] = temp;
}
}
//İkinci Döngü
for (int i = dizi.Length - 1; i > 0; i--)
{
if (dizi[i] < dizi[i - 1]) {
int temp = dizi[i];
dizi[i] = dizi[i - 1];
dizi[i - 1] = temp;
}
}
Bunun dışında yer değiştirme olmadığı sürece dönen bir koşullu döngü vardır. Biz bunu sonsuz döngü şeklinde yazıp yer değiştirme olmadığı zaman döngüden çıkma işlemini yapalım. Yer değiştirmeyi bilmek için ilk döngüde şart sağlandığı zaman yer değiştirme olmaktadır. Bir bool değişken tanımlayıp o koşulun içinde true yapalım. Dışarıdaki koşullu döngüde, başlangıçta bu kontrolün false olması gerekir. Birinci döngü bittikten sonra eğer yer değiştirme olmadıysa veri sıralanmıştır. Bu yüzden sonsuz döngüden çıkalım.
int[] dizi = new int[]{5, 10, 1, 2, 47};
while (true) {
bool degisti = false;
//Birinci Döngü - Baştan Sona
for (int i = 0; i < dizi.Length - 1; i++)
{
if (dizi[i + 1] < dizi[i])
{
int temp = dizi[i];
dizi[i] = dizi[i + 1];
dizi[i + 1] = temp;
degisti = true;
}
}
if (!degisti)
break;
//İkinci Döngü - Sondan Başa
for (int i = dizi.Length - 1; i > 0; i--)
{
if (dizi[i] < dizi[i - 1]) {
int temp = dizi[i];
dizi[i] = dizi[i - 1];
dizi[i - 1] = temp;
}
}
}
İlk önce 1. sayı (78) seçilir. Sonra diğer sayılarla karşılaştırılarak içlerinde en büyük sayı (321) bulunur ve seçilen sayı (78) yer değiştirir. (321, 78, 12, 9, 45)
Sonra ikinci sayı (78) seçilir sonraki diğer sayılarla karşılaştırılır ve içlerinden en büyük sayı (78) ile yer değiştirir. (321, 78, 12, 9, 45)
Sonra üçüncü sayı (12) seçilir sonraki diğer sayılarla karşılaştırılır ve içlerinden en büyük sayı (45) ile yer değiştirir. (321, 78, 45, 9, 12)
Sonra dördüncü sayı (9) seçilir sonraki diğer sayılarla karşılaştırılır ve içlerinden en büyük sayı (12) ile yer değiştirir.
321, 78, 45, 12, 9
Böylelikle büyükten küçüğe sıralama işlemi tamamlanmış olur.
Burada dikkat edilirse iki döngü bulunmaktadır. Biri sayı seçip diğeri en büyük sayıyı bulmaktadır. Seçilen sayının döngüsü sayının uzunluğu – 1 kadar gitmektedir. Yani 5 sayıdan 4’ü seçilmektedir. En büyük sayının bulunması döngüsü ise seçilen sayının indeksi + 1 ve sayının uzunluğuna kadar gitmektedir.
İlk önce sayılarımızı bir dizide tanımlayalım.
int[] dizi = new int[]{78, 321, 12, 9, 45};
Şimdi seçme işlemi için döngümüzü uzunluk – 1’e kadar yazalım.
int[] dizi = new int[]{78, 321, 12, 9, 45};
for(int i = 0; i < dizi.Length - 1; i++){
//Sayı seçme döngüsü
}
İkinci for işleminde seçilen sayı sonraki sayılarla karşılaştırılır ve en büyük sayı bulunur. Burada dikkat etmemiz gereken nokta en büyük sayı ile seçilen sayının yer değiştirmesi olayıdır. Bunun için bulunan en büyük sayının nerede olduğunu bilmemiz gerekir. Bunun için en büyük sayının bulunduğu index numarasını almalıyız. Sonrada seçilen sayı ile bulunan en büyük sayı yer değiştirir.
int[] dizi = new int[]{78, 321, 12, 9, 45};
for(int i = 0; i < dizi.Length - 1; i++){
int enbuyukindex = i;
for(int j = i + 1; j < dizi.Length; j++){
if(dizi[j] > dizi[enbuyukindex])
enbuyukindex = j;
}
int temp = dizi[i];
dizi[i] = dizi[enbuyukindex];
dizi[enbuyukindex] = temp;
}
Eklemeli sıralama algoritmasının nasıl olduğuna örnek vermek gerekirse:
Elimizde 6 tane sayı olsun. Bunlar 156, 34, 53, 6, 1, 10 olsun. Bunları küçükten büyüğe doğru sıralayalım.
İlk önce ikinci sayı alınıp bir önceki sayıyla (156) karşılaştırılır. Eğer ikinci sayı (34) birinci sayıdan küçükse yerleri değiştirilir.
Şuan sayı sıramız şu şekilde oldu. (34, 156, 53, 6, 1, 10)
Sonra üçüncü sayı (53) bir önceki sayılarla (34, 156) karşılaştırılır. Hangi sayıdan küçükse o sayıyla yer değiştirir. (34, 53, 156, 6, 1, 10)
Sonra dördüncü sayı (6) diğer önceki sayılarla (34, 53, 156) karşılaştırılır hangisinden küçükse onunla yer değiştirir. (6, 34, 53, 156, 1, 10)
Sonra beşinci sayı (1) diğer önceki sayılarla (6, 34, 53, 156) karşılaştırılır hangisinden küçükse onunla yer değiştirir. (1, 6, 34, 53, 156, 10)
Sonra son sayı (10) diğer önceki sayılarla (1, 6, 34, 53, 156) karşılaştırılır hangisinden küçükse onunla yer değiştirir. Ve sıralama işlemi tamamlanır.
1, 6, 10, 34, 53, 156
Bu işlemde iki döngünün yer aldığını görmekteyiz. Birinci döngü sayıyı seçiyor. İkinci döngü ise bir önceki sayılar etrafında dönüyor ve seçilen sayı diğer önceki sayılarla karşılaştırılıyor.
Bir dizimizde bu sayıları tutalım.
int[] dizi = new int[]{156, 34, 53, 6, 1, 10};
Bu sayıları teker teker seçmek için bir döngüye ihtiyacımız var. Bu döngü index 0 dan o dizinin uzunluğuna kadar dönmelidir.
int[] dizi = new int[]{156, 34, 53, 6, 1, 10};
for (i = 0; i < dizi.Length; i++){
//diziden sırasıyla eleman seçme
}
Şimdi ise seçtiğimiz elemandan bir önceki elemanları karşılaştırmamız için bir döngü yazmalıyız. Bu döngü seçtiğimiz elemandan geriye doğru gitmeli. Index numarası seçtiğimiz elemanın indeksine eşit olarak başlamalı ve index numarası 0’den büyük olduğu sürece devam etmelidir. Çünkü bir önceki elemanın indeksi -1 olamaz.
int[] dizi = new int[]{156, 34, 53, 6, 1, 10};
for (i = 0; i < dizi.Length; i++){
for(j = i; j > 0; j--){
//Seçilen elemanın önceki elemanlarla karşılaştırılması
}
}
dizi[j] ile elemanımızı seçip dizi[j – 1] ile bir önceki elemanla karşılaştırabiliriz. Küçükten büyüğe doğru sıraladığımız için dizi[j] < dizi[j – 1] olmalıdır. Eğer bu şartı sağlarsa elemanların değerlerini değiştirmeliyiz. Bunun için diğer elemandaki veriyi bir değişkende tutup değiştirmeliyiz.
int[] dizi = new int[]{156, 34, 53, 6, 1, 10};
for (i = 0; i < dizi.Length; i++){
for(j = i; j > 0; j--){
if(dizi[j] < dizi[j - 1]){
int temp = dizi[j];
dizi[j] = dizi[j - 1];
dizi[j - 1] = temp;
}
}
}
İhlâs ile imamlık yapmak, bu vazifenin karşılığında ücret almamak demektir; çünkü Hz. Peygamber (s.a.v), Osman b. Ebi’l-As es Sakafî’ye şöyle demiştir. Okuduğu ezan karşılığında ücret istemeyen bir kimseyi müezzin yap! (116)
Ezan, namazın yoludur. Madem ki, ezan mukabilinde ücret alınmaması söz konusudur, o halde imamlık vazifesine karşılık da ücret alınmaması daha evlâdır.
Vakfiyesinde ‘imam ücreti’ bulunan bir mescide imam olarak, oradan veya devletten, yahut da cemaatın herhangi birisinden imamlık ücreti alınırsa, bunun haram olduğuna hükmedilemez. Fakat mekruh olduğu da muhakkaktır. Farzlardaki kerahetse teravih namazlarındaki kerahetten daha şiddetlidir. İmam’ın aldığı bu ücret, camide beş vakit hazır olmasının karşılığıdır. Cemaatin ikâmesi ve o mescidin murakabesi içindir. Yoksa sadece namaz kıldırmak için değildir.
Emanete gelince, bâtını fısk u fücura, büyük ve küçük günâhlara devam etmekten temizlemektir. İmamlığa seçilen zâtın, bu iç habasetten (kötülük, alçaklık) var kuvvetiyle kaçınması gerekir.
Çünkü imam, cemaatin şefaatçısı (veya temsilcisi) mesabesindedir. Bu bakımdan cemaatin ‘en hayırlısı’ olması gereklidir. Zâhirde hades ve necâsetten temizlenmesi de böyledir; çünkü böyle bir temizliğe kendisinden başkası vâkıf olamaz. Eğer namaz esnasında abdesti olmadığını hatırlar veya kendisinden bir yel zuhûr ederse, sakın utanıp da namazı bırakmamazlık etmesin! Böyle bir duruma yakınında bulunan birisinin elinden tutarak kendi yerine geçirmelidir; çünkü Hz. Peygamberin, namaz esnasında cünüp olduğunu hatırladığı ve derhal yerine birisini vekil yaparak gusül abdesti almaya gittiği, bilâhare gelerek namaza dahil olduğu sabittir. (117)
Süfyân es-Sevrî şöyle der: ‘Efendisinden kaçan köle, bid’at ehli, anababaya isyan eden, fisk u fücuru alenen işleyen ve daima sarhoş gezenler hariç, her doğru ve yalancının arkasında, cemaat olarak namaz kıl’. (Böyle bir namaz, Ebû Hanife ile Şafiî’ye göre kerahetle birlikte sahihtir).
İmamın saflar düzeltilmedikçe tekbir almaması gerekir”. İmam, sağına ve soluna bakmalı ve saflarda bir eğrilik görürse düzeltilmesini emretmelidir.
Selef-i Sâlihîn namaza dururken omuzlarını bir hizaya getirir ve ayak topuklarını da birleştirirlerdi.
Müezzin, kâmeti bitirmeden imam tekbir almamalıdır. Müezzin de ezandan sonra, cemaatın namaza hazırlanabileceği kadar bekledikten sonra kâmet getirmelidir.
Ezan ile kametin arası kişinin yemek yiyebileceği veya sıkıştığında abdest alabileceği kadar bir zaman uzatılmalıdır. (118)
Bunun hikmeti, Hz. Peygamber’in küçük veya büyük taharetin sıkıştırdığında namaz kılmayı yasaklamasıdır. (119)
Ayrıca Hz. Peygamber, kalbin vesveselerden kurtulması için, acıkan bir kimsenin akşam yemeğini yatsı namazından önce yemesini emir buyurmuştur. (120)
İmam, namazdaki tüm tekbirleri cemaate duyuracak şekilde yüksek sesle almalıdır. Cemaattekiler ise, seslerini ancak kendilerinin duyabilecekleri kadar yükseltebilirler. İmam, fazilete nâil olmak için, imamete niyet etmelidir. İmam bu niyeti getirmese dahi hem kendisinin hem de uymaya niyet eden cemaatin namazları sahihtir. Fakat cemaat sevabını ancak imama uymaya niyet eden kimseler alır. İmam ise, imâmete niyet etmediği için, cemaatla namaz kılma sevabından mahrum olur. Cemaat istiftah tekbirlerini imamın tekbirinden sonra almaya dikkat etmelidir; yani imam tekbirini bitirdikten sonra sıra cemaate gelmelidir. Allah herkesten daha iyisini bilir.
116) Sünen-i Sitte ve Hâkim, (Osman b. Ebi’l-As es-Sakafî’den)
117) Ebu Dâvud, (Ebu Bekre’den sahih bir senedle)
118) Tirmizî ve Hâkim, (Câbir’den) Tirmizî’ye göre senedi meçhûldür.
119) Müslim, Eb. Aişe’den şu ibâre ile nakletmektedir: ‘İki pislikten biriyle sıkışanın namazı yoktur (namazı kâmil olmaz)’.
CSS bildirim ve seçici olmak üzere ikiye ayrılır. Bir stili uygulayabilmek için bir XHTML/HTML’de element veya elementleri seçmek gerekir.
div {
margin-left: 10px;
}
div seçici, [margin-left: 10px] ise bildirimdir. Bildirimler özellik ve değerden oluşur.
margin-left özellik; 10px ise değerdir. Değerin sonuna ; konularak diğer bildirime geçilir.
Her seçici yazıldıktan sonra { ile başlar } kapatılır. {} içinde bildirimler yer alır.
[table]
Seçici
Açıklama
*
Tüm elementleri seçer.
E
Element etiketine göre seçer. div, a, p, h1 vs.
E F
E elementinin soyundan gelen F elementlerini seçer.
E > F
E elementine bağlı olan F elementlerini seçer.
E:first-child
E elementinin ilk elementini seçer.
E:link
Ziyaret edilmemiş, tıklanmamış elementleri seçer.
E:visited
Ziyaret edilmiş, tıklanmış elementleri seçer.
E:active
Elemente tıklandığı zaman çalışır.
E:hover
Elementin üzerine gelindiğinde çalışır.
E:focus
Elemente odaklanıldığında çalışır.
E[ozellikisim]
ozellikisim özelliği olan bütün elementleri seçer. Değerine bakılmaz.
E[ozellik=”deger”]
Özelliği deger kelimesine eşit olan elementleri seçer.
E[ozellik~=”deger”]
Özelliğinde deger kelimesi geçen elementleri seçer.
E[ozellik|=”deger”]
Özelliği deger-… olan elementleri seçer.
E.classisim
class özelliği classisim eşit olan ve E elementlerini seçer.
E#idisim
id özelliği idisim eşit olan ve E elementlerini seçer.
[/table]
Evrensel Seçici (Universal Selector)
Evrensel seçici “*” gösterilir. Bütün elementleri seçer.
* {
color: red;
}
Element Seçici (Element Selectors)
Bir elementi etiketine göre seçmek için seçmek istediğimiz elementin etiketini yazmamız gerekir.
Örnekte h1 etiketleri seçilip font rengi kırmızı yapılmıştır.
h1 {
color: red;
}
Bir elementin içinde yer alan bir başka elementin seçmek için Ana elementin etiketini yazıp boşluk o elemente bağlı seçmek istediğimiz elementin etiketini yazarız.
Örnekte div içinde yer alan p elementlerinin yazı boyutu, rengi ve arkaplan rengi değiştirilmiştir.
div p {
font-size: 14px;
color: white;
background: #000;
}
Bir elemente bağlı olan elementleri seçmek için Bağlı olduğu element etiketi > Seçilecek Element etiketi şeklinde yazılır. (E > F)
Örnekte ul elementine bağlı olan li elementlerinin arkaplan rengi ve yazı rengi değiştirilmiştir.
ul > li {
background: #000;
color: #fff;
}
Özellik Seçicileri (Attribute Selectors)
E[attr] attr özelliği olan tüm E elementleri seçer.
E[attr=”deger”] attr özelliği deger eşit olan E elementleri seçer.
E[attr ~= “deger”] attr özelliği deger[boşluk]… olan E elementlerini seçer.
E[attr |= “deger”] attr özelliği deger-… olan E elementlerini seçer.
E::selection E elementinde kullanıcı mouse ile alanı seçtiğinde tetiklenir. Mozilla tarayıcında çalışmaz. Mozilla tarayıcında ::-moz-selection bu kod aynı işlemi yapar.
CSS (Cascading Style Sheets) türkçe olarak stil şablonları anlamına gelir. XHTML/HTML etiketlerini biçimlendirmek için yani stil vermek için kullanılır. Herhangi bir metin editörüyle notepad vb. programlarla yazabiliriz. Dosyası .css uzantılıdır.
CSS öğrenmeden önce XHTML/HTML kodlarını bilmemiz gerekir. Sonra CSS öğrenmeliyiz.
CSS ile neler yapabiliriz?
Bütün XHTML/HTML etiketlerine stil verebiliriz. Mesela bir yazının rengini, fontunu, font boyutunu, arkaplanın rengi vs. değiştirebiliriz.
CSS kodları üç şekilde bulunur. Bunlar Dahili, harici ve XHTML/HTML etiketinin style özelliğinde tanımlanır.
Harici Stil Kullanımı (External Style Sheet)
.css uzantılı bir dosyaya CSS kodlarımızı yazıp link etiketiyle HTML sayfasına dahil edilmesidir.
Ey kemikten kafes! Bilir misin? Can, senin içinde bir kuştur. Adı da nefestir.
Kuş bir kere kafesten uçup gitti mi bir daha onu ele geçiremezsin.
Fırsatı elden kaçırma. Âlem bir demden ibarettir.
Alimlerin yanında ise bir dem bir âlemden daha kıymetlidir.
İskender cihana hükmediyordu. Dünyayı bıraktı gitti. Bir an bile fazla kalması mümkün olmadı. Mümkün olsaydı, bir nefes mühlet için dünyayı verirdi.
Gittiler… Herkes ektiğini biçti. İyi kötü bir addan başka bir şey kalmadı.
Ne diye bu kervansaraya gönül bağlayalım? Dostlar gittiler, biz de gidiş yolu üzerindeyiz.
Gönlünü bu dünya güzeline verme. O, kiminle biraz oturur ise gönlünü koparıp alır. Onun işi budur.
Mezar toprağında uyuyan insan, yüzünün tozunu ancak mahşer günü silebilecektir. Bu bakımdan başını şimdi gaflet yakasından çıkar ki yarın mahcubiyetinden başını eğmeyesin.
Seyahatten Şiraz’a döndüğünde yüzünü, gözünü yolun tozundan yıkamaz mısın? Ey günah tozuna bulanan kimse, yakında bilmediğin, görmediğin bir şehire sefer edeceksin. Öyleyse göz çeşmelerini akıtarak üzerinde toz, toprak, kir, pas ne varsa hemen bugünden temizle.
O’na lâyık nasıl bir şükürde bulunabileceğimi bilemiyorum.
Vücudumdaki her kıl O’nun bir ihsanıdır. Her biri için nasıl şükredeyim?
Bütün hamd-ü senâlar kullarını yoktan var eden, bağışlayıcı Allahü Teâlâ’ya mahsustur.
O’nun lûtuf ve ihsanlarını vasf etmek için kimde kudret vardır? Ne kadar vasıf varsa O’nun şanı yanında hiç kalır.
O, öyle bir yaratandır ki, insanı çamurdan halk etmiş ve ona can, akıl ve gönül ihsan buyurmuştur.
Baba, belinden tâ ihtiyarlığın sonuna kadar bir bak da gör sana gayb hazinesinden neler lûtuf buyurmuştur.
O seni tertemiz yarattı. Aklını başına al da toprağa kirli girme. Ayıp olur.
Tevbe etmekle kalp aynanı her ân temiz tut. Bir kere pas tutarsa artık cilâ kabul etmez.
Senin evvelin bir damla meniden başka bir şey değildir. Bunu bil de benlik taslama.
Çalışıp bir lokma rızık kazandığı zaman kolunun kuvvetine mağrur olma.
Ey kendine tapan adam! Niçin Hakk Teâlâ’yı görmüyorsun ki, koluna kuvveti veren O’dur. Kol kuvvetiyle kimse topu çelememiştir. Seni buna muvaffak kılan Cenâb-ı Hakk’tır; O’na şükret.
Gayret edip bir hayra muvaffak olduğun zaman, bunu gayretinden değil, Allah’ın tevfikinden bil.
Sen kendi hâline bırakılsan bir ân bile ayakta duramazsın. Sana gayptan daimi yardım gelir.
Ana rahmindeyken ağzın henüz kapalı olduğu için, rızkını göbekten alırdın. Göbeğinle beraber o rızık ta kesildi ve hemen iki elinle annenin memesine yapıştın. Öyle değil mi?
Gurbette hasta düşene ilaç diye sılasından su getirirler. İşte sen de öyle oldun…
Çocuk karında beslendi, mide dağarcığında gıdalandı. Onun sevdiği iki meme, beslediği yerden gelen iki çeşmedir.
Annenin kucağı çocuğun Cenneti ve memeleri de o Cennetin süt ırmağıdır.
Annenin can besleyen endamı bir ağaç, çocukta o ağacın nazlı bir meyvesidir.
Memelerin damarı kapten gelmiyor mu? O hâlde süt, bir bakıma kalbin kanıdır.
Çocuk annesinin, kanını emer. Fakat anneye öyle bir muhabbet verilmiştir ki, onu canından daha çok sever.
Çocuk kuvvetlenip dişleri sertleşince, memeye acı sabır otu sürerler ve o acı, çocuğu memeden de sütten de soğutur.
Dostum! Sen de tevbe hususunda bir oyun çocuğusun. Sabırla günahlarından soğumaya bak!
Hikâye ederler ki, bir sene Nil Nehri taşmadı. Halkın bir kısmı yağmur duâsı için dağlara çıktı. Yalvarıp yakardılar, ağlayıp sızladılar ama yine de yağmur yağmadı. Yalnız gökyüzünün gözleri yaşardı [sadece çiğ düştü].
Biri Mısırlı Zünnûn’a gitti ve:
Halk müthiş bir sıkıntı içindedir. Bu âciz insanlar için bir duâ et. Allah, sevdiği kullarının duâlarını reddetmez, dedi.
Zunnûn bu müracaat üzerine Medyen şehrine kaçtı. Gidişinden yirmi gün sonra da yağmur yağdı ve havuzlar bol miktarda su ile doldu.
İhtiyar Zünnûn bu haberi alır almaz kaçıp gittiği Medyen şehrinden hareketle Mısır’a geri döndü.
Samimi ahbaplarından bir ârif ona mahrem olarak sordu:
Ahali senden duâ rica etti. Sen duâ yerine Medyen şehrine gittin. Bunda ne hikmet vardı?
Zünnûn dedi ki:
«Vaktiyle duyduğuma göre kötülerin fenalıkları yüzünden kuşların, karıncaların, yırtıcı hayvanların rızıkları azalır ve daralırmış… Milleti tetkik ettim. Baktım ki, kendimden başka bir günahkâr yok… Anladım ki, bu yağmursuzluk ve sıkıntı, halkın ızdırabı benim yüzümdendir. İyilik kapısı benim şerrimden kapanıyor. Halkı darlıktan kurtarmak için aralarından ayrıldım; çekip gittim.»
Dostum! Herkese saygı göster, büyüklük bunu gerektirir. Kimseyi kendinden fena ve hakir görme. Büyükler böyle yaparlar.
Sen kendini hiçe saymadıkça, insanlar yanında aziz olamazsın. Kendini küçüklerden sayan büyük, dünyada ve âhirette büyüklüğe nâil olur.
Bu cihanda en temiz kul, en bayağı bir kölenin ayak tozu olandır.
Ey mezarıma uğrayan ziyaretçiler! Azizlerin toprakları [mezarları] hatırı için şu söyleyeceğim sözleri hatırlayın:
Sâdi toprak ta olsa ne beis var. O zaten sağlığında da toprak idi. Sâdi rüzgâr gibi dünyayı dolaştı, fakat sonunda kendini kara toprağa verdi. Çok geçmeden toprak onu yiyecek ve rüzgâr toprağını yine cihana savuracaktır.
Mânâ gülistanı açıldı açılalı hiçbir bülbül Sâdi kadar güzel ötmedi. Böyle bir bülbül ölür de toprağından gül bitmezse hayret ederim.