Perşembe, Aralık 27, 2018

3d Grafik Sözlüğü


3D Grafiklerin dünyasına girdiğinizde çok sık karsilasacaginiz bazi temel kavramları içeren kisa bir sözlük hazirlamayi uygun bulduk. Ne yazik ki Türkçemizde, bilgisayar dünyasinda kullandigimiz çoğu terimin bir karsiligi yok. Biz sizlere terimlerin önce orijinal Ingilizce hallerini, daha sonra da mümkün oldugunca Türkçelestirdigimiz hallerini sunuyoruz. Kullandiginiz yazilimlardan daha fazla verim alabilmek için, bu minik sözlüge bir göz ativerin!

Ray Tracing (Isin Izleme): Üç boyutlu bir sahneyi, sahnedeki isik kaynaklarindan yayilan isinlari izleyip, ortamdaki cisimlerin bu isinlari kirma,yansitma gibi hallerini hesaplayarak kaplama islemi. Oldukça kaliteli sonuçlar ortaya çikartmasina ragmen, yüksek bir islemci gücü gerektirir.

Shading (Gölgeleme): Üç boyutlu cisimleri çokgen bazli hallerinden, piksel bazli görüntülere çevirme.

Modeling (Modelleme): Üç boyutlu grafikler dünyasinda, modelleme gerçek dünyayi yansitmak için kullanilan çesitli metodlari anlatır. Bir 3D programi ile bir otomobil olusturdugunuzda, bir otomobil modellemis olursunuz.

3D Scene (Üç Boyutlu Sahne): Çizgileri, çokgenleri ve yüzleri içeren, temel 3D şekillerin oluşturduğu bütün.

Vertex (Nokta): Üç boyutlu uzayda, pozisyonu üç koordinatla belirlenen bir nokta.

Triangle (Üçgen): Üç noktanin olusturdugu üçgen. Çogu 3D programi, cisimleri çesitli büyüklükteki üçgenlerle olusturur.

Quadrilateral (Dörtgen): Dört noktadan olusan çokgen. 3D Programlar dörtgenleri iki adet üçgen kullanarak olusturur.

Freeform Surface (Serbest Yüzey): Egriler yardimiyla tanimlanan, bu sayede kullanici tarafindan kolayca degistirilebilinen üç boyutlu yüzeyler.

NURBS (NonRational B Spline): Kontrol noktalari diye adlandirilan bir agin tanimladigi serbest bir yüzey.

Geometric Pipeline (Geometrik Islem Dizisi): 3 Boyutlu cisimin, 3D koordinat sisteminden, ekranin iki boyutlu koordinat sistemine yansitilmasini saglayan islemler dizisi.

Camera (Kamera): 3D Bilgisayar grafikleri gerçek dünyadaki kameralari taklit eder. Ayni gerçek kamera gibi, bir objektif ve bir yansitma yüzeyi (= fotograf filmi) söz konusudur.

Projection Plane (Yansitma Yüzeyi): 3D sahnenin görüntüsünün olusturuldugu 2D yüzey. Üç boyutlu dünyayi, iki boyuta indiren bildigimiz fotograf makinesinin içindeki film, yansitma yüzeyinin karsiligidir.

Phong Lightning (Phong Aydinlatma): Gerçek hayattaki isiklari taklit etmeye yarayan matematiksel bir model. Çesitli isik tipleri tanimlama imkani veren bu aydinlatma modeli günlük hayatta karsilasilan isik kaynaklarini bilgisayar ortamina aktarmakta oldukça gerçekçi sonuçlar verebilmektedir.

Attenuation (Sönümlenme): Isik kaynaklarinin yaydiklari isigin, kaynaktan uzaklastikça zayiflamasidir. Isik, cisimden uzaklastikça, uzakligin karesiyle orantili olarak sönüklesir.

Fog (Sis): 3D programlarindaki sis, gerçek hayattaki sisin etkisini taklit eder. Bu etkiyi deniz alti sahneleri yaratirken özellikle kullanma geregi duyarsiniz.

Wireframe (Tel Çerçeve): Cisimleri vektörlerle gösterme biçimi.

Flat Shading (Düz Gölgeleme): 3D cisimlerin her yüzeyini bir renk tonu ile kaplayarak gösterme biçimi. Çok hizli bir kaplama metodu oldugu için, sahnelerin genel görüntüsü için bir fikir alinmasi gerektigi hallerde, hizli kaplamalar yapmak için kullanilir. Eski 3D bilgisayar oyunlarinda yaygin olarak kullanilmis bir metoddur.

Gouraud Shading (Gouraud Gölgeleme): Renkler arasinda interpolasyon yapma ilkesiyle çalisan bir aydinlatma metodudur. Hizli bir metod olmasi ve kullanilabilinir kalitede sonuçlar vermesi nedeniyle günümüz 3D oyunlarinin çogu bu aydinlatma metodunu kullanir.

Phong Shading (Phong Gölgeleme): Bu metodda ekrandaki her pixelin rengi ayri ayri hesaplanir. Çok gerçekçi çiktilar üreten bu kaplama metodu oldukça fazla islem gücü gerektirmektedir.

Texture Mapping (Doku Kaplama): Doku kaplama 2D bir grafigi, 3D bir cisime uygulamakdir. Bu sayede cisimler gerçekçi görüntüler ve dokular kazanabilmektedir. Çogu zaman akillica uygulanmis bir yüzey dokusu, sizi uzun modelleme çalismalarindan kurtaracaktir. Doku kaplamanin en önemli dezavantaji, kaplanan bitmap grafiklerin büyük hafiza miktarlari tüketmesidir. 3D Grafik islemini bu kadar RAM tüketici yapan en önemli faktörlerden biri budur.

Interpolation (Interpolasyon): Iki bilinen degeri kullanarak, aradaki bilinmeyen bir üçüncü degeri hesaplama islemidir. Iki boyutlu görüntülerin ölçeklenmesi isleminde çokça kullanilmasi gerekir.

Blending (Karistirma): Karistirma, iki rengi birbirine karistirip, üçüncü bir renk olusturma islemidir. Genelde 3D görüntülerin 2D görüntülerle birlestirildigi 3D Grafik dünyasinda, karistirma islemleri sik sik kullanilmaktadir.

Transparency (Seffaflik): Seffaflik, renk karistirma islemi kullanilarak yaratilir. Cam, buz gibi cisimleri yaratmakta kullanacaginiz seffaflik, eger isin izleme metodu kullanan bir program kullaniyorsaniz, beraberinde isigin kirilmasi olgusunu da getircektir.

Çarşamba, Aralık 26, 2018

Ev İçin Püf Noktası

PÜF NOKTASI 

Kapılarınız veya çekmeceleriniz bir müddet sonra itsenizde çeksenizde kapanmaları zorlaşır:Kapınızın, çekmecenizin sürten kısmına vazelin sürün.

 Mantar kapaklı şişeleri yatık vaziyette saklamalısınız.

 Şarap şişelerinin mantarını tekrar şişeye geçirmek için: Mantarı kaynar suyun içine atın.

 İçkilere güzel tat ve görüntü vermek için:Buzu dondururken buz kabının içine kiraz, nane yaprağı, yeşil zeytin vs. koyup dondurun.

 Buz dondururken:Suyu kaynatın, soğuyunca buz kalıplarına koyup dondurun. Buzlar daha canlı kristal gibi görünür.Kaynamış suda oksijen azalır.Bu da buzun mat görünmemesini sağlar.

 Dişlerinizi doğal temizleyin:Çileği ezin diş fırçanızın üzerine koyun diş etlerinize kompres yapın. Sonra dişlerinizi fırçalayın.

 Küçük yanıklar için:Temiz bir süngeri hafifçe ıslatın  buzdolabınızın derin dondurucu bölümüne koyun. Yanmış yerin üzerine hafif hafif kompres  yapın.

Ağız kokusu için: Kahve çekirdeği çiğneyin.

 Arı, sivri sinek sokmalarına karşı: Kesme şekeri hafif ıslatın sokulan kısmın üzerine hafifçe bastırın zehiri alır ve kaşınmayı şişmeyi önler. 

Fermuarlar sıkışırsa:Kurşun kalemle fermuar dişlerinin üzerini karalayın.

 Gözlük camları: Gliserin ile silerseniz buğulanmadığını göreceksiniz.

 Ayakkabılarınız ayağınızı sıkıyorsa: Bir bardak saf alkolü ayakkabınızın içine dökün. İyice derisine yedirin ve giyin. Derisi ayağınıza göre açılacaktır.

 Cam sil ile deri ayakkabılarınızı silmeyi hiç denedinizmi

Çicekleriniz için: Haşladığınız yumurtanın suyunu saksıya dökün.

 Gülleriniz boyunlarını bükerse:   İlk önce sıcak suya sonra soğuk suya batırın.

Saksı çiçekleriniz için : Sigara küllerini saksınıza koyarsanız yapraklardaki kurt böcek vs. yokedersiniz.

 Kapılarınızı vs. cila yaparken :   Cila olmamasını istediğiniz yerlere vazelin sürün buralara cila taşarsa bile kuruyunca çok kolay çıkarabilirsiniz.

 Akü Başları oksitlenirse :   Cola sürerseniz oksitlenmeyi önlersiniz

 İskambil kağıtlarını :   Kolonya ile silip yumutak bir bezle kurulayın.

 Fareleri kaçırmak için :   Nane yağını bir karton parçasının üzerine sürün farelerin geldiği yere koyun.

 Boya fırçaları sertleşmiş ise :   Kaynamış sirkeli suda bekletin yumuşadığını göreceksiniz.

 Elinize uhu yapıştırıcı bulaşırsa :   Asetonla silin

 Mangal ızgaranızı temizlemek zordur :  Ilıkken cam sille temizleyin veya ılıkken nemli gazete kağıdına sarın bir müddet sonra sertleşmis artıkların yumuşadığınu göreceksiniz.

 Boya kokusunu gidermek için :  İki büyük baş soğanı soyup ikiye bölün suyun içine atın bunuda kokulu odaya koyun.

 Cam kırıklarını :   Temizlersiniz fakat kıymıkları göremessiniz bunuda temizlemek için ıslak pamuk imdadınıza yetişir.

 Ağzı dar şişe kavanoz temizlemek için :   Biraz deterjan biraz su bir kasık pirinç çalkalayın

 Balıklı tava kokusu :   Tavayı limonla bir güzel ovalayın ve yıkayın.

 Kesik Limonu nasıl saklarsınız :   Küçük bir tabağa toz şeker serpin, kesik tarafı şekerin üzerine gelecek şekilde koyun iki hafta limon kurumadan saklanır.

 Ampülün üzerine biraz parfümünüzden sıkınız yakıldığında mis gibi kokar odanız.

 Patates haşlarken : Haşlama suyunun içine bir kaşık margarin koyun patateslerin vitaminlerini kaybetmemiş olursunuz.patatesler daha çabuk pişerler.

Salı, Aralık 25, 2018

Duvar Yazıları

DEMOKRASİMİZ YASAĞI SEVER (RECEP YAZICIOĞLU)


Zaman paraya benzer, lüzumsuz yere sarf edilmedikçe daima yeter. (N.KAPLAN)


IYI BIR FIKRIN MI VAR?  O HALDE BIRSEYLER YAPIN.



Zaman gösterdi ki CENNET ucuz değil, CEHENNEM dahi lüzumsuz değil.  (BEDIÜZZAMAN)



Rüyaları gerçekleştirmenin en kısa yolu, uyanmaktır. (S.M. Power)



Gül sunan bir elde daima bir miktar gül kokusu kalır. (Çin atasözü)

Vicdani tertemizdi zira onu hiç kullanmamıştı. (Stanislaw lee)

Ölülerin çenesini bağlarlar, burada gördüklerini orada söylemesinler diye.  (a.nihat asya)



dostluğa yer bırakacak kadar savaş, savaşa yer bırakacak kadar dost ol. (Sadi-i sirazi)



Ulu çamlar fırtınalı diyarlarda yetişir. (C.MERIÇ)

HAYIR DEMek kolayDir ÇünkÜ evEt deNiliNcE yapiLaCak Is ÇiKacKtiR. – (Seifridge)

Eğer dünya görüşünüz tuvalet duvarında ise sizin işiniz sifona kalmıştır. (M.güner)



Düsmanlarınızı affedin bu bir büyüklüktür. Ama onları unutmak büyük bir aptallıktır. (J.F Kennedy)



TürLü tÜrlü Kül YutMUSA KültürLü Denir.

Para her kapiyi açar ama kitleyemez.

Dünya ve ahirette yanmanin yolu plajlardan geçer.

Iyilik yapmasini bilmiyorsan,

hiç olmazsa kötülük yapma. (Hüsrev dehlev)i



Ölümün bizi nerede bekledigi belli degil , iyisimi biz onu her yerde bekleyelim (Montaigne)



Bu deveyi gütmeyecegiz bu diyardan da gitmeyecegiz. (I.özel)



Ask mücadelesi degil, mücadele aski içinde ol. (P. safa)

Serseri, cahil birakilmis çocugun büyümüsüdür. (m. ikbal)

ahmaga yüz, aptala söz vermege gelmez.

Kusuru kendisine söylenmeyen adam ayibini hüner sanir..

Gözlerimizi oymuslar simdi de göremiyoruz diye bizi kiniyorlar. (Malcolm X)

borçlu olup düsünmektense uyuz olup kasinmak yegdir. (Laedri)

yasamaya ayri, yürütmeye ayri zaman mi ?

ben darbe kullaniyorum. Yikiyorum. Çikiyorum.

Bosbogazi atese atmislar ”odun yas diye haykirmis"

Kele yikandin mi ? demisler. " tarandim bile demis"



Aids mikrobu evlilik disi entel iliskilerin dogurdugu bir çagdas hastaliktir.

Ben cagdas olmak istemiyom.



Hafif acilar konusabilir ama derin acilar dilsizdir. (seneca)



kimse, görmek istemeyenler kadar kör degildir. (jonathan swift)



kimse, isitimek istemeyenler kadar sagir degidir. (Seneca)



ne kadar bilirsen bil, söylediklerin karsindakinin anlayabildigi kadardir.

Mevlana



Pazartesi, Aralık 24, 2018

Win Cih ve Award Bios üzerine


Win95.CIH Anakart 'inizi yakti. Ve Hard diskinizi sildi. Hiçbir masraf ödemeden hepsini kurtarmanin yolunu anlatiyorum. Çok iyi okuyun.!!

Anakart 'i kurtarma;

Not: Aşağıdaki işlemleri bilgisayarın içini açıpta halledeceksiniz. Eğer anlamıyorsanız Ana kart ile daha önce uğraşmış bir arkadaşınıza söyleyin bu yazıyı. O size uygulasın. ( Para isterse sakın vermeyin. :) ) Ayrica SARI renklerin arasindaki islemlerde elektrik gider veya bilgisayar kapanırsa arkadasinizin anakart 'i yanabilir.

1- Şimdi anakart'ı sizin anakart'ınızla aynı olan bir arkadaşınıza gidin, (Marka ve Model aynı olmalı.. eger aynı model bulamazsanız çok yakın bir model arayın. Bozuk makinenizdeki BIOS 'u çıkaracaksınız. Ve Arkadaşınızın evine götüreceksiniz.(Flash BIOS 'unuzun tutulduğu çok ayaklı entegre devre. Hani bizim CIH 'in sildiği yer orası işte. Zaten anakart'ınızın üzerinden sökülebilen tek devre.)

2- Arkadaşınızın sistemini DOS 'tan temiz bir disket ile boot edin. Tabi boot disketine anakartınızın Flash Memory Update Software 'ini koyun. (BIOS dosya'sını bulamasa da olur. Flash Utility'lerinin hepsi arkadaşınızın BIOS'u disketinize yazabilir.)

3- İşte En önemli bölüme geldik. Arkadasinizin Bilgisayarini baslatin. BOOT ettik. ve bilgisayar karşımızda içi açık ve çalışır biçimde belkiyor. Şimdi çok zarif ve dengeli hareketlerle BIOS 'u anakart 'ın üzerinden çıkarın. ( Not: flash belleğe değmeden önce çok dikkatli olmalısınız. Üzerinizde Statik elektrik varsa hasar olabilir.) (yanlış bir harekette bilgisayar kilitlenir.Elektriği kesip , Flash 'ı yerine koyup yeniden başa dönün.)

4- Kendi makinanızdan söktüğünüz BIOS 'u arkadaşınızın BIOS 'unu çıkardığınız aynı yere takın. Ve boot disketine koyduğunuz BIOS update programını çalıştırın. Bu program silinmiş bios'unuzu programlayacaktir. Bu Vakite kadar herşey normal giderse ve program BIOS UPDATED gibi birşeyler söylerse bilgisayarı kapatın.
Sonra kendi BIOS 'unuzun arkadaşınızın bilgisayarından çıkarın.(Not: Artık BIOS 'unuzu düzelttiniz. Elinizdeki BIOS 'unuzu evinize götürüp bilgisayarınıza takın, çalisacaktir.!) Ve Arkadaşınızın BIOS 'unu eski yerine takın.
Hard Disk 'i Kurtarmak
HDD 'deki BÜTÜN verileri kurtarmak için çok güzel bir program buldum. Programın amacı : Viruslerin bozduğu veriyi kurtarmak, formatlanmış veriyi kurtarmak, "fdisk" lenmiş veriyi kurtarmak,Enerji kesilmesinden giden veriyi kurtarmak, bazı programların yanlışlıkla sildiği veriyi kurtarmak.  Programın Bütün her sistemleri için ayrı versiyonu var. İlk önce alttaki programdan işletim sisteminize göre olanı download edin.
[FAT16] [FAT32] [NT] [NOVELL] [ZIPDRIVE]
[Programın Keygen 'i]

Sistem disketinize download ettiğiniz programı koyun(Zip 'i açın). Bilgisayarınızı aynı sistem disketi ile başlatın. Sonra programı çalıştırıp HDD nize RECOVER 'ı seçin. bütün bilgileriniz geri gelmeye başlayacaktır.






ESKİ DÖNEM AWARD BİOS ŞİFRELERİ

* AWARD_SW
* J262
* HLT
* SER
* SKY_FOX
* BIOSTAR
* ALFAROME

Pazar, Aralık 23, 2018

C Dili - Bir Kütüğe Yazmak

C Dili - 10. Konu

BIR KUTUGE YAZMAK

ONSATIR.C:
================================================================
#include
main()
{
FILE *fp;
char ivir[25];
int index;

   fp = fopen("ONSATIR.TXT","w");   /* yazmak icin acalim */
   strcpy(ivir,"Bu bir ornek satirdir.");

   for (index = 1;index <= 10;index++)
      fprintf(fp,"%s  Satir no: %d\n",ivir,index);

   fclose(fp);    /* Kutugu kapayalim */
}
================================================================

Bir kutuge yazan ilk programimiz. Herzamanki gibi, "stdio.h" i programa
ekliyoruz, ve daha sonra cok tuhaf bir degisken tanimliyoruz.

"FILE" tipi, bir kutuk degiskenidir, ve "stdio.h" in icinde
tanimlanmistir. Kullanacagimiz kutuge erismek icin bir 'kutuk pointeri'
tanimlamaktadir.

KUTUGUN ACILMASI

Bir kutuge yazmadan once, onu acmamiz gereklidir. Acmak demek, sisteme o
kutugun ismini bildirmek, ve yazmak istedigimizi belirtmektir. Bunu,
"fopen" fonksiyonu ile yapiyoruz. "fp" isimli kutuk pointer'i, bu acilan
kutuge ait bazi bilgileri tutar. "fopen" ise, iki parametre gerektirir.
Birincisi, kutugun ismidir. Buyuk harf, kucuk harf, yada karisik fark
etmez.

OKUMAK "r"

"fopen" in ikinci parametresi ise, acilacak kutuk ile ne yapilacagini
belirtir. Buraya, "r" "w" yada "a" yazabiliriz. "r" kullanildiginda, kutugun
okuma icin acilacagini belirtir. "w", kutuge yazilacagini, ve "a" ise
zaten var olan bir kutuge bilgi ekleyeceginizi belirtir. Bir kutugu okumak
icin acmak icin, o kutugun diskte var olmasini geretirir. Sayet kutuk yok
ise, "fopen", geriye NULL degerini dondurur.

YAZMAK "w"

Bir kutuk yazmak icin acilinca, sayet diskte yoksa yaratilir, sayet varsa,
icindeki bilgiler silinir.

EKLEMEK "a"

Bir kutuk eklemek modunda acildiginda, sayet yoksa yaratilir, varsa, veri
giris pointer'i bu kutugun sonuna ayarlanir. Bu sayede yeni bilgi
yazilinca, kutugun sonuna yazilmis olur.

KUTUGE YAZMAK

Bir kutuge yazmak, ekrana yazmak ile neredeyse aynidir. En onemli farklar,
yeni fonksiyon isimleri, ve kutuk pointer'inin bu fonksiyonlara parametre
olarak eklenmesidir. Ornek programda, "fprintf" komutu "printf" komutunun
yerini alir.

KUTUGU KAPATMAK

Bir kutugu kapatmak icin, sadece "fclose" komutunu kullanmak yeterlidir.
Parametre olarak da kutugun pointer'ini gecirmek yeterlidir. DOS, program
sona erince kullandigi kutukleri kapattigindan, "fclose" u kullanmak sart
degildir, fakat bir aliskanlik yapmasi icin, kullandiginiz kutukleri
kapatmanizi tavsiye ederim.

Bu programi calistirdiginizda, ekranda hicbir sey cikarmaz. Program
bittikten sonra, "ONSATIR.TXT" isimli kutugu inceleyin. Icinde programin
yazdigi on satirlik ciktiyi goreceksiniz.

KARAKTERLERI TEKER TEKER YAZMAK

KAROUT.C:
================================================================
#include
main()
{
FILE *kutukpoint;
char digerleri[35];
int index,say;

   strcpy(digerleri,"Ek satirlar.");
   kutukpoint = fopen("onsatir.txt","a"); /* eklemek icin acmak */

   for (say = 1;say <= 10;say++) {
      for (index = 0;digerleri[index];index++)
putc(digerleri[index],kutukpoint);  /* bir karakter yaz  */
      putc('\n',kutukpoint);             /* bir de    */
   }
   fclose(point);
}
================================================================

Normal "include" kutugumuzden sonra, "kutukpoint" isimli bir kutuk
pointeri tanimliyoruz. Yazacagimiz bilgileri tutmasi icin, "digerleri"
isminde bir karakter dizisi tanimliyoruz. Daha sonra bu actigimiz sahaya,
"strcpy" fonksiyonu ile "Ek satirlar." sozcugunu yaziyoruz. Bundan sonra,
yine ayni kutugu "append" yani eklemek icin aciyoruz.

Bu program iki tane ic ice donguden olusuyor. Distaki dongu, sadece birden
ona kadar sayiyor.. Icindeki dongu ise, yazilan karakter sifir olmadigi
surece, "putc" fonksiyonunu cagirir.

"putc" FONKSIYONU

Bu programin ilgimizi ceken yonu, "putc" fonksiyonudur. Belirtilen kutuge
bir karakter yazan bu fonksiyon, ilk parametre olarak yazilacak karakteri,
ikinci olarak da kutuk pointer'ini veriyoruz. "Digerleri" isimli dizi
bitince satirin sonuna bir karakteri koymak icin "putc" yi tekrar
cagiriyoruz.

Dis dongu on kere tekrarlandiktan sonra, program kutugu kapatip sona
eriyor. Bu program calistiktan sonra kutugu incelerseniz, gercektende
sonuna 10 satir eklendigini gorursunuz.

BIR KUTUGU OKUMAK


KAROKU.C:
================================================================
#include

main()
{
FILE *tuhaf;
int c;

   tuhaf = fopen("ONSATIR.TXT","r");

   if (tuhaf == NULL) printf("Boyle bir kutuk yok\n");
   else {
      do {
         c = getc(tuhaf);    /* Bir karakter oku  */
         putchar(c);         /* ekranda goster    */
      } while (c != EOF);    /* Kutuk sonuna (END OF FILE) a kadar devam */
   }
   fclose(tuhaf);
}
================================================================

Bir kutuk okuyan ilk programimiz!  "stdio.h" ve iki degisken tanimindan
sonra, "fopen" fonksiyonunda okumak icin "r" parametresini veriyoruz. Daha
sonra, kutuk acmanin basarili olip olmadigini kontrol ediyoruz. Sayet
basarili degilse, geriye NULL degeri donecektir.

Program, bir "do while" dongusunun icinde tek bir karakter okuyup, ekrana
yaziyor. Bu dongu, ta ki, "getc" fonksiyonu kutugun sonunu belirten EOF
dondurene kadar surer. EOF donunce de, kutuk kapatilir, ve program sona
erer.

DIKKAT DIKKAT DIKKAT

Bu noktada, C nin en sasirtici ve en cok yapilan hatasina rastliyoruz.
"getc" fonksiyonundan geri donen degisken bir karakterdir, dolayisi ile
bunu "char" tipi bir degiskene atayabiliriz. Hatirlayalim ki, bir "char"
degiskeni 0 ila 255 arasindaki degerleri alabilir.

Fakat, cogu C derleyicilerinde EOF karakteri, -1 olarak tanimlanmistir -
yani, "char" degiskeninin disinda - Bu nedenle sayet char kullanirsak,
program kutugun sonunun geldigini bulamaz, ve sonsuz bir dongude takilir.
Bunun onune gecmesi kolaydir: EOF karakteri donmesini beklediginiz
durumlarda, daima "int" tipi bir degisken kullanin.

Sayet sizin derleyiciniz icin EOF karakterinin ne oldugunu ogrenmek
isterseniz, "stdio.h" isimli header'i okuyabilirsiniz.


KELIME KELIME OKUMAK

TEXTOKU.C:
================================================================
#include "stdio.h"

main()
{
FILE *fp1;
char birkelime[100];
int c;

   fp1 = fopen("ONSATIR.TXT","r");

   do {
      c = fscanf(fp1,"%s",birkelime); /* kutukten bir kelime okuyalim */
      printf("%s\n",birkelime);       /* ekrana yazalim               */
   } while (c != EOF);              /* ta ki EOF olana kadar          */

   fclose(fp1);
}
================================================================

Bu program, nerdeyse bir oncekinin aynisidir. Burada, kelime kelime okumak
icin "fscanf" fonksiyonunu kullaniyoruz, cunku "fscanf" fonksiyonu, bir
bosluga gelince, okumayi birakir.

FAKAT BIR PROBLEM VAR

Programi inceleyince, verinin kutukten okundugunu, ekrana yazildigini ve
daha sonra EOF olup olmadiginin kontrol edildigini goruyoruz. Bu nedenle,
istemedigimiz birsey ekrana yazilmis oluyor. Buyuk ihtimalle, programin
sonunda, en son kelimeyi bir daha yaziyoruz - cunku zaten "birkelime" nin
icinde idi o deger.

Buna mani olmak icin, bir baska program gorelim. Ismi IYIOKU.C olsun:

IYIOKU.C:
================================================================
#include "stdio.h"

main()
{
FILE *fp1;
char birkelime[100];
int c;

   fp1 = fopen("onsatir.txt","r");

   do {
      c = fscanf(fp1,"%s",birkelime); /* kutukten bir kelime oku... */
      if (c != EOF)
         printf("%s\n",birkelime);    /* ekrana yaz...            */
   } while (c != EOF);              /* ta ki EOF olana dek..      */

   fclose(fp1);                      /* kutugu kapa       */
}
================================================================

Gordugunuz gibi, bir "if" komutu ile, sayet kutugun sonuna gelip
gelmedigimize bakiyoruz. Aslinda bu problem KAROKU.C da da vardi, fakat
orada pek gorunmuyordu.

SONUNDA, BUTUN BIR SATIR OKUYORUZ

SATIROKU.C:
================================================================

#include "stdio.h"

main()
{
FILE *fp1;
char birkelime[100];
char *c;

   fp1 = fopen("ONSATIR.TXT","r");

   do {
      c = fgets(birkelime,100,fp1); /* bir satir okuyalim */
      if (c != NULL)
         printf("%s",birkelime);    /* ekrana yazalim   */
   } while (c != NULL);          /* ta ki NULL olana kadar.. */

   fclose(fp1);
}

================================================================

Bu program, simdiye de gorduklerimize benziyor, fakat NULL isimli yeni bir
nesne de katildi.

"fgets" fonksiyonu ile, bir butun satiri, ve sonundaki yeni satir
karakterini (\n), bir diziye okur. Ilk parametre olarak, donen
karakterleri koyacagimiz yerin adresi tanimlanir, ikinci parametrede en
fazla kac karakter okunmasina izin verecegimizi belirtiyoruz, ve son
olarak da kutuk degiskeninin ismini veriyoruz.

 o Yani bu fonksiyon, ya bir yeni satir karakterine rastlayana kadar, yada
izin verilen karakter sayisi eksi bir kadar okur. Eksi birin sebebi ise,
katarin sonunu belirten (\0)  sifir degerine yer birakmasidir.

Tabi sonunda, kutugu kapatiyoruz..

DEGISKEN BIR KUTUK ISMI

HERKUTUK.C:
================================================================
#include "stdio.h"

main()
{
FILE *fp1;
char birkelime[100],kutukismi[25];
char *c;

   printf("Kutuk ismini girin -> ");
   scanf("%s",kutukismi);         /* istenilen kutuk ismini alalim */

   fp1 = fopen(kutukismi,"r");

   do {
      c = fgets(birkelime,100,fp1); /* kutukten bir satir okuyalim */
      if (c != NULL)
         printf("%s",birkelime);    /* ekrana yazalim       */
   } while (c != NULL);          /* ta ki NULL olana kadar  */

   fclose(fp1);
}
================================================================

Burada, ilk once kullanicidan "scanf" ile kutuk ismini kullanicidan
aliyoruz, daha sonra kutugu acip, satir satir ekrana yaziyoruz.

YAZICIYA NASIL BIRSEY YOLLAYABILIRIZ

PRINTDAT.C:
================================================================
#include "stdio.h"

main()
{
FILE *guzel,*printer;
int c;

   guzel = fopen("onsatir.txt","r"); /* kutugu acalim        */
   printer = fopen("PRN","w");        /* printeri acalim     */

   do {
      c = getc(guzel);    /* kutukten bir karakter okuyoruz  */
      if (c != EOF) {
putchar(c);      /* ekranda goruntuleyelim          */
putc(c,printer); /* ve yaziciya yollayalim          */
      }
   } while (c != EOF);    /* ta ki (End Of File) kutuk bitene kadar */

   fclose(guzel);
   fclose(printer);
}
================================================================

Okumak icin, "onsatir.txt" yi actiktan sonra, yazmak icin "PRN" isimli
kutugu aciyoruz. Printere bir bilgi yollamak, ayni bir kutuge yazmak
gibidir, fakat standart bir kutuk ismi kullanmak zorundayiz. Bu konuda
kesin standartlar yoktur, fakat genellikle bu isimler "PRN" , "LPT",
"LPT1" yada "LPT2" dir.

Bazi yeni derleyicilerin, "stdprn" diye, onceden tanimli bir kutuk
tanimliyicilari vardir. Bu sayede, siz printer'i bir kutuk gibi acmadan,
ona veri yollayabilirsiniz.

Program, birer birer butun kutugu okuyup, ekranda gosterir, ve printer'e
yollar. EOF , kutuk sonu bulundugunda, kutukler kapanir, ve programv
biter.



ODEVLER:

1. Okunacak, yazilacak  kutuklerin isimlerini kullaniciya soran, daha
sonra bu ikisini ve printer kutugunu acan bir program yazin. Program
bunlari actiktan sonra, kutuk sonu gelinceye kadar okunacak kutugu harf
harf okuyup, yazilacak kutuge ve yaziciya bu karakteri yollamalidir.

2. Programiniz, kullaniciya bir kutuk ismi sorsun, cevabi alinca da, bu
kutugu ekranda, satir numaralari ile birlikte gostersin..


Cumartesi, Aralık 22, 2018

C Dili - Pointer Nedir ?

C Dili - 8. Konu

POINTER NEDIR?

Basitce, pointer, bir adrestir. Bir degisken olmak yerine, bir degiskenin
hafizadaki adresini tasiyan bir 'ok isareti'dir.

================================================================

main()                      /* Pointer kullanimi ornegi */
{
int index,*pt1,*pt2;

   index = 39;                      /* herhangi bir deger  */
   pt1 = &index;                   /* 'index' in adresi    */
   pt2 = pt1;

   printf("Deger simdi %d %d %d dir.\n",index,*pt1,*pt2);

   *pt1 = 13;           /* 'index' in degerine degisiklik yapalim */

   printf("Degistikten sonra ise %d %d %d\n",index,*pt1,*pt2);
}

================================================================

Su an icin, programin index degiskenini ve iki tane astrisk ile baslayan
terimlerin tanimlandigi yere bakmayin. Aslinda astrisk denilen bu isarete,
biz simdilik 'yildiz' diyelim.

Programda ilk once, index degiskenine 39 degerini atiyoruz. Bunun
altindaki satirda ise, pt1'e tuhaf bir deger atanmasini goruyoruz - index
degiskeni, ve onunde bir & ampersand isareti ile. Bu ornekte, pt1 ve pt2
pointer dir, ve index de basit bir degiskendir. Simdi bir problemle karsi
karsiyayiz. Bu programda pointer kullaniliyor, fakat nasil kullanilacagini
ogrenmedik.

Bu gorecekleriniz biraz aklinizi karistiracak, fakat bunlari anlamadan
gecmeyin.

IKI ONEMLI KURAL

1. Onune ampersand isareti konmus bir degisken, o degiskenin adresini
belirtir. Yani altinci satir, soyle okunabilir: "pt1, index isimli
degiskenin adresini alir."

2. Onune yildiz konmus bir pointer, kendisinin tuttugu adreste bulunan
degeri gosterir. Programin dokuzuncu satiri, soyle okunabilir: "pt1
pointer'inin gosterdigi yere, 13 degeri atandi."

HAFIZA YARDIMCISI

1.  &  'i bir adres olarak dusunun.
2.  *  'i adresteki deger olarak dusunun.

pt1 ve pt2 pointer olarak, kendileri bir deger tasimazlar, fakat
bellekteki bir adresi gosterirler. Bu programda, 'index' degiskenini
gosteren pointer'lar oldugu icin, degiskenin degerini hem index ile, hemde
onun adresini tasiyan pointer'lar ile degistirebiliriz.

Dokuzuncu satirda, index degiskeninin degeri, pt1 pointer'i ile
degistiriliyor. Program icinde 'index' i kullandigimiz herhangi biryerde,
(pt1 baska birseye atanincaya kadar), '*pt1' i de kullanmamiz
mumkundur, cunku pt1, index'in adresini tasimaktadir.

BIR BASKA POINTER

Programa degisklik katmak icin, birbaska pointer daha tanimladim. "pt2"
isimli bu pointer, yedinci satirda "pt1"'in tasidigi adresi almaktadir. Bu
atamadan once, ayni henuz deger atanmamis degiskenler gibi icinde rastgele
bilgiler vardir. Bundan sonra, "pt2" de "index" degiskeninin adresini
tasimaktadir. Ornegin, dokuzuncu satirda "*pt1" i "*pt2" ile degistirsek
de, sonuc ayni olacaktir - cunku iki pointer da ayni adresi tasimaktadir.

SADECE BIR DEGISKEN

Bu programda uc tane degisken var gibi gorunse de, aslinda bir tane
degisken tanimlidir. Iki pointer ise, bu degiskenin adresini tutmaktadir.
Bu durum, "printf" komutunun hep 13 degerini yazmasindan da anlasilabilir.

Bu gercekten anlamasi zor bir kavramdir, fakat en kucuk C programlari
disinda hepsi tarafindan kullanildigi icin, ogrenmeniz gereklidir.

POINTER NASIL TANIMLANIR

Programin ucuncu satirinda, ilk once "index" isimli degisken tanimlanir,
daha sonra da iki tane pointer tanimlamasi goreceksiniz. Ikinci tanim, su
sekilde okunabilir: "pt1'in gosterecegi adres, bir tamsayi degiskenine ait
olacak." Yani, "pt1", tamsayi bir degiskeninin pointer'i olur. Ayni
sekilde, "pt2" de, yine bir tamsayi degiskeninin pointer'i olur.

Bir pointer, bir degiskenin adresini tasimak icin tanimlanir.
Tanimlandigindan baska bir degisken tipi icin kullanimi "uyumsuz veri
tipi" hatasinin olusmasina sebep olur. Ornegin, "float" tipi bir pointer,
"int" tipli bir degiskenin adresini alamaz.

POINTER'LI IKINCI PROGRAMIMIZ

POINTER2.C:
================================================================
main()
{
char katar[40],*orada,bir,iki;
int *pt,list[100],index;

   strcpy(katar,"Bu bir karakter kataridir.");

   bir = katar[0];                 /* bir ve iki ayni degeri tasirlar */
   iki = *katar;
   printf("Ilk cikti %c %c\n",bir,iki);

   bir = katar[8];                /* bir ve iki ayni degeri tasirlar */
   iki = *(katar+8);
   printf("Ikinci cikti %c %c\n",bir,iki);

   orada = katar+10;        /* katar+10 ve katar[10] aynidir. */
   printf("Ucuncu cikti %c\n",katar[10]);
   printf("Dorduncu cikti %c\n",*orada);

   for (index = 0;index < 100;index++)
      list[index] = index + 100;
   pt = list + 27;
   printf("Besinci cikti %d\n",list[27]);
   printf("Altinci cikti %d\n",*pt);
}
================================================================

Bu programda, iki tane pointer, iki tane dizi ve uc tane degisken
tanimliyoruz. "orada" isimli pointer, karakter tipi, ve "pt" ise, tamsayi
tipindedir.

BIR KATAR DEGISKENI ASLINDA BIR POINTER DIR

C programlama dilinde, bir katar degiskeni, o katarin baslangicini
gosteren bir pointer olarak tanimlanmistir. Programda bir bakin:  once
"katar" isimli diziye sabit bir katar atiyoruz. Daha sonra, "bir" isimli
degiskene, "katar" in ilk harfini atiyoruz. Sonra, "iki" isimli degiskene,
ayni degeri atiyoruz. Ikinci satirda "*katar[0]" yazmak yalnis olurdu,
cunku yildiz isareti, koseli parantezlerin yerini almaktadir.

"katar" i neredeyse tam bir pointer gibi kullanabilirsiniz, yegane farki,
tuttugu adres degistirilemez, ve daima o katarin baslangic adresini
gosterir.

Onkinci satira gelince, katarin dokuzuncu karakterinin (sifirdan
basladigimiz icin), iki ayri sekilde "bir" ve "iki" isimli degiskenlere
atandigini goruyoruz.

C programlama dili, pointer'in tipine gore, index ayarlamasini
otomatik olarak yapar. Bu durumda, "katar" bir "char" olarak tanimlandigi
icin, baslangic adresine 8 eklenir. Sayet "katar" "int" (tamsayi) olarak
tanimlanmis olsa idi, index iki ile carpilip, "katar" in baslangic
adresine eklenirdi.

"orada" bir pointer oldugu icin, 16. satirda "katar" in 11. elemaninin
adresini tasiyabilir. "orada" gercek bir pointer oldugu icin, herhangi bir
karakter degiskeninin adresini gosterebilir.

POINTER VE ARITMETIK

Her cesit islemler, pointer'lar ile mumkun degildir. Pointer bir adres
oldugundan, ona bir sabit rakam ekleyip, daha ilerideki bir adrese
erismek mumkundur. Ayni sekilde, pointer'in adresinde bir rakam cikartip,
daha onceki hafiza bolgelerine erismek mumkundur. Iki pointer'i toplamak
pek mantikli degildir, cunku bilgisayardaki adresler sabit degildir.
Cikacak rakamin tuhaf olacagi icin pointer ile carpma da yapilamaz. Ne
yaptiginizi dusunurseniz, yapabilecekleriniz ve yapamayacaklariniz kendini
belli edecektir.

TAMSAYI POINTER'I

"list" isimli tamsayi dizisine, 100 den 199 a kadar degerler verilir. Daha
sonra, 28. elemanin adresini, "pt" isimli pointer'a atiyoruz. Daha sonra
ekrana yazdigimizda, gercektende, o degeri aldigini goruyoruz.

Daha onceki konularda, bir fonksiyondan veri degerlerini dondurmek icin
iki metod oldugunu soylemistim. Ilki, bir dizi kullanarakti. Ikincisini
herhalde tahmin edersiniz. Sayet tahmininiz "pointer sayesinde" idiyse,
tebrikler.

CIFTYON.C:
================================================================
main()
{
int cevizler,elmalar;

   cevizler = 100;
   elmalar = 101;
   printf("Baslangic degerleri %d %d\n",cevizler,elmalar);

   /* "degistir" i cagirinca,         */
   degistir(cevizler,&elmalar);  /* cevizlerin DEGERI ve,     */
   /* elmalarin adresini geciriyoruz  */

   printf("Bitis degerleri ise, %d %d dir..\n",cevizler,elmalar);
}

degistir(kuru_yemis,meyvalar)       /* kuru_yemis tamsayidir   */
int kuru_yemis,*meyvalar;           /* meyvalar bir tamsayi pointer'idir */
{
   printf("Degerler %d %d\n",kuru_yemis,*meyvalar);
   kuru_yemis = 135;
   *meyvalar = 172;
   printf("Sonraki degerler %d %d\n",kuru_yemis,*meyvalar);
}
================================================================
Burada, iki tane tamsayi degiskeni (pointer degil) tanimliyoruz:
"cevizler" ve "elmalar". Once bunlara birer deger atiyoruz, ve "degistir"
isimli fonksiyonu cagiriyoruz. Cagirirken, "cevizler" in degeri (100), ve
"elmalar" degiskeninin adresini geciriyoruz. Fakat, fonksiyona da, bir
deger ve bir adres gelecegini haber vermemiz gereklidir. Bunun icin,
fonksiyonun parametreleri tanimlanirken, bir adres tasiyacak olan sembolun
basina bir yildiz koymamiz yeterlidir.


Fonksiyonun icinde, bu iki degeri degistirip, eski ve yeni degerleri
ekrana yaziyoruz. Bu program calistiginda, ana programdaki "cevizler" in
degerinin  ayni kaldigini fakat "elmalar" in yeni degerlerini aldigini
goreceksiniz.

"cevizler" in degerinin ayni kalmasinin nedeni, fonksiyona bir
deger gecirildiginde, C dilinin o degerin bir kopyasini fonksiyona
gecirmesi yuzundendir. Programa geri dondugunuzde, degerin bir kopyasini
kullandigimiz icin asil degerin degismedigini goreceksiniz.

"elmalar" in degerinin degismesi ise, yine fonksiyona "elmalar"
degiskeninin adresinin bir kopyasi gecirildigi halde, bu adres ana
programdaki "elmalar" a karsilik geldigi icin, fonksiyonda bu adresteki
degeri degistirir degistirmez, "elmalar" in da degeri degismis olur.

ODEV

1. Bir karakter katari tanimlayin, ve icine "strcpy" ile bilgi koyun. Bir
dongu ve pointer ile katari harf-harf (teker teker) ekrana yazin.
Programin basinda pointer'i katarin ilk elemanina atayin, daha sonra cift
arti isareti ile pointer'in degerini arttirin. Ayri bir tamsayi degiskeni
ile kac karakter yazilacagini kontrol edin..

2. 1. deki programi, pointeri katarin sonuna atayip, cift eksi isaretini
kullanarak sondan basa dogru yazmasi icin degistiriniz.

Cuma, Aralık 21, 2018

C Dili - Kelime Katarı (String) Nedir?

C Dili - 7. Konu

KELIME KATARI (STRING) NEDIR?

Bir katar, genellikle harflerden olusan karakterler dizisidir. Ciktinizin
guzel ve manali gorunmesi icin, icinde isimler ve adresler olabilmesi
icin, programlarinizin katarlar kullanmasi sarttir. C dilinde tam tanimi,
"char" tipi bilgilerin, NULL karakter (yani sifir) ile sonlandirilmasidir.

C bir katari karsilastiracagi, kopyalayacagi yada ekrana yansitacagi
zaman, bunlari gerceklestiren fonksiyonlar, NULL gorunene dek bu islemi
yapmak uzere programlanmistir.

ARRAY (dizi) NEDIR?

dizi, ayni tip verilerin birbiri arkasina tanimlanmasidir. Kelime katari,
bir cins dizidir.

CHRSTRG.C:
================================================================

main()
{
char isim[7];       /* Bir karakter dizisi tanimlayalim */

   isim[0] = 'T';
   isim[1] = 'u';
   isim[2] = 'r';
   isim[3] = 'g';
   isim[4] = 'u';
   isim[5] = 't';
   isim[6] = 0;     /* Bos karakter - katarin sonu  */

   printf("Isim %s dur. \n",isim);
   printf("Icinden bir karakter: %c\n",isim[2]);
   printf("Ismin bir parcasi: %s \n",&isim[3]);
}

================================================================

Bu programda, ilk once, "char" tipi bir tanimlama goruyoruz. Koseli
parantezler icinde, kac hanelik bir dizi tanimlanacagini belirtiyoruz. C
dilinde butun diziler sifirdan basladigi icin, bu tanimlama ile
kullanabilecegimiz en yuksek index degeri 6 dir.

KATAR NASIL KULLANILIR

Demek ki, "isim" degiskeni, icinde 7 tane karakter tutabilir. Fakat en son
karakterin sifir olmasi zorunlugu oldugu icin, kullanilabilecek olan alan
6 karakterliktir. Bu katarin icine manali birsey yuklemek icin, yedi tane
komut veriyoruz - her biri, katara bir karakter atamaktadir. En sonunda
da, katarin sonunu belirten sifir rakamini koyuyoruz. (Bir "#define" ile
NULL karakteri, programin basinda sifir olarak tanimlayabiliriz.)

printf komutundaki %s isareti, printf'e "isim" isimli katardan, sifira
rastlayincaya kadar ekrana yazmasini belirtir. Dikkat etmeniz gereken bir
nokta, "isim" degiskeninin indexinin yazilmasinin gerekmedigidir.

KATARIN BIR KISMININ YAZILMASI

Ikinci printf komutu ise %c ile, katarin icinden sadece bir karakter
(harf) yazilmasini gosterir. Istedigimiz karakterin index numarasini da,
"isim" degiskeninin yanina, koseli parantezler arasinda gosterebiliriz.

Son printf komutunda ise, katarin 4. karakterinden itibaren yazmanin bir
ornegidir. "isim" degiskeninin onundeki & (ampersand) isareti, isim[3]'un
hafizada saklandigi adresin printf'e gecirilmesini belirtir. Adresleri 8.
konuda gorecegiz, fakat ufak bir ornek ile size bizleri nelerin
bekledigini gostermek istedim.

BAZI KATAR FONKSIYONLARI

KATAR.C
================================================================

main()
{
char isim1[12],isim2[12],karisik[25];
char baslik[20];

   strcpy(isim1,"Rosalinda");
   strcpy(isim2,"Zeke");
   strcpy(baslik,"Bu bir basliktir.");

   printf("     %s\n\n",baslik);
   printf("isim 1:  %s \n",isim1);
   printf("isim 2:  %s \n",isim2);

   if(strcmp(isim1,isim2)>0)  /* sayet isim1 > isim2 ise, 1 dondurur */
      strcpy(karisik,isim1);
   else
      strcpy(karisik,isim2);

   printf("Alfabetik olarak en buyuk isim %s dir.\n",karisik);

   strcpy(karisik,isim1);
   strcat(karisik,"  ");
   strcat(karisik,isim2);
   printf("Iki isim birden %s\n",karisik);
}
================================================================
Ilk once 4 tane katar tanimliyoruz. Daha sonra, "strcpy" isimli cok pratik
bir fonksiyona geliyoruz. Yaptigi is, bir katari, bir digerine, ta ki
sifir bulunana kadar kopyalamak.  Hangi katarin hangisine kopyalancagini
hatirlamak icin, bir atama komutunu dusunun ("x=23" gibi). Veri,
sagdakinden, soldakine kopyalanir. Bu komutun yapilmasindan sonra, isim1
in icinde, "Rosalinda" olacaktir - den-densiz olarak.  Den-denler,
derleyicinin sizin bir katar tanimladiginizi anlamasi icin gereklidir.

KATARLARIN ALFABETIK OLARAK SIRAYA KONMASI

Ilginizi cekebilecek diger bir fonksiyonda, "strcmp" dur. Sayet kendisine
gecirilen birinci katar ikinciden daha buyukse, 1 dondurur, ayni ise 0, ve
ikinci daha buyukse -1 dondurur. "Zeke" katarinin kazanmasi, sizi herhalde
sasirtmaz. Burada katarin boyu onemli degildir, sadece icindeki
karakterler. Ayrica harflerin buyuk yada kucuk harf olmasi da fark
ettirir. C de bir katarin butun harflerini kucuk yada buyuge ceviren
fonksiyonlar da vardir. Bunlari daha ileri kullanacagiz.

KATARLARI BIRBIRINE EKLEMEK

En son satirda, "strcat" isimli yeni bir fonksiyon goreceksiniz. Gorevi,
bir katarin sonuna diger katari eklemektir. Bunu yaparken NULL karakterin
de yerli yerinde olmasini saglar. Burada, "isim1", "karisik" 'a
kopyalanir, daha sonra "karisik" a iki bosluk ve "isim2" eklenir.

Katarlar zor degildir, ve son derece faydalidirlar. Onlari kullanmayi
iyice ogrenmenizde fayda vardir.


BIR TAMSAYI DIZISI

INTDIZIN.C:
================================================================
main()
{
int degerler[12];
int index;

   for (index = 0;index < 12;index++) 
      degerler[index] = 2 * (index + 4);

   for (index = 0;index < 12;index++)
      printf("Index = %2d deki degeri %3d dir..\n",index,degerler[index]);

}
================================================================

Bu programda, bir tamsayi dizisi tanimliyoruz. Gordugunuz gibi, ayni katar
tanimlama gibi.. Bu sayede, index degiskeni haric oniki tane degiskenimiz
oluyor. Bu degiskenlerin isimleri "degerler[0]" , "degerler[1]" ,vs. dir.
Ilk "for" dongusunde, bunlara deger atiyoruz, ikincisi ise, index
degiskeni ve "degerler" dizisinin icindekileri ekrana yaziyor.

BIR KAYAR NOKTA DIZINI

BUYUKDIZ.C:
================================================================
char isim1[] = "Birinci Program basligi";

main()
{
int index;
int ivir[12];
float tuhaf[12];
static char isim2[] = "Ikinci Program Basligi";

   for (index = 0;index < 12;index++) {
      ivir[index] = index + 10;
      tuhaf[index] = 12.0 * (index + 7);
   }

   printf("%s\n",isim1);
   printf("%s\n\n",isim2);
   for (index = 0;index < 12;index++)
      printf("%5d %5d %10.3f\n",index,ivir[index],tuhaf[index]);
}
================================================================

Burada, "float" olarak tanimli bir kayar nokta dizisi goruyorsunuz.
Ayrica bu program, katarlara nasil baslangic degeri atanabilecegini
gosteriyor. Koseli parantezlerin icini bos birakarak, derleyicinin o
veriyi saklamak icin yeteri kadar yer ayarlamasini sagladik. Programin
icinde, bir katar daha ilk degerini veriyoruz. Burada onune "static"
koymak zorunlugumuz var. Baska yeni birsey yok bu programda. Degiskenler
rastgele degerlere atanir, ve sonra da bu degerler ekrana yazdirilir.


BIR FONKSIYONDAN DEGER DONDURME

GERIDOND.C:
================================================================
main()
{
int index;
int matrix[20];

   for (index = 0;index < 20;index++)              /* veriyi uretelim */
      matrix[index] = index + 1;

   for (index = 0;index < 5;index++)         /* orjinal veriyi, ekrana. */
      printf("Baslangic   matrix[%d] = %d\n",index,matrix[index]);

   yapbirsey(matrix);              /* fonksiyona gidip, deger degistirme */

   for (index = 0;index < 5;index++)       /* degismis matrix i yazalim  */
      printf("Geri donen  matrix[%d] = %d\n",index,matrix[index]);
}

yapbirsey(list)                 /* Veri donusunu gosterir */
int list[];
{
int i;

   for (i = 0;i < 5;i++)                   /* print original matrix */
      printf("Onceki  matrix[%d] = %d\n",i,list[i]);

   for (i = 0;i < 20;i++)                   /* add 10 to all values */
      list[i] += 10;

   for (i = 0;i < 5;i++)                   /* print modified matrix */
      printf("Sonraki matrix[%d] = %d\n",i,list[i]);
}
================================================================

Bir fonksiyondan deger dondurmenin bir yolu da, diziler kullanmaktir.
Buradam 20 hanelik bir dizi tanimladiktan sonra, icine degerler atiyoruz,
bu degerlerin ilk besini ekrana yazdiktan sonra, "yapbirsey" isimli
fonksiyona atliyoruz. Burada goreceginiz gibi, bu fonksiyon "matrix"
isimli diziye "list" demeyi tercih ediyor. Fonksiyona, ne cins bir dizi
gececegini bildirmek icin, "int" olarak "list"i tanimliyoruz. Fonksiyona
kac elemanlik bir dizi gecegini soylememize luzum yok, fakat istenirse
belirtilebilir. Bu nedenle bos koseli parantezler kullaniyoruz.

Bu fonksiyon da, kendisine gecen degerleri gosterdikten sonra, bu
degerlere 10 ekliyor, ve yeni degerleri gosterip, ana programa geri
donuyor. Ana programda goruyoruz ki, fonksiyonun yaptigi degisiklikler,
"matrix" degerlerini de degistirmis.

Dizilerin, normal degiskenlerin aksine, fonksiyondaki degerleri degisince,
cagiran programdaki dizinin degerlerinin degismesini garipsiyebilirsiniz.
Pointerlar konusuna gelince butun bunlar daha manali olacaktir.

BIRDEN FAZLA BOYUTLU DIZILER

COKLUDIZ.C:
================================================================
main()
{
int i,j;
int buyuk[8][8],dev[25][12];

   for (i = 0;i < 8;i++)
      for (j = 0;j < 8;j++)
         buyuk[i][j] = i * j;       /* Bu bir carpim tablosudur */

   for (i = 0;i < 25;i++)
      for (j = 0;j < 12;j++)
         dev[i][j] = i + j;     /* Bu da bir toplama tablosudur */

   buyuk[2][6] = dev[24][10]*22;
   buyuk[2][2] = 5;
   buyuk[buyuk[2][2]][buyuk[2][2]] = 177;  /* bu,  buyuk[5][5] = 177; demek */

   for (i = 0;i < 8;i++) {
      for (j = 0;j < 8;j++)
         printf("%5d ",buyuk[i][j]);
      printf("\n");               /* Her i nin degeri artinca, bir RETURN */
   }
}
================================================================

Burada iki tane iki boyutlu dizi kullaniyoruz. "buyuk" adli 8 e 8 lik
dizinin elemanlari [0][0] dan [7][7] ye kadar, toplam 64 tanedir. Diger
tanimli "dev" dizi ise, kare degildir, fakat dizinin kare olmasinin sart
olmadigini gosteren bir ornektir.

Iki dizi de biri carpim tablosu, digeri de toplama tablosu ile doldurulur.

Dizi elemanlarinin tek tek degistirilebilecegini gostermek icin, once
"buyuk" un elemanlarinda birine, "dev" in bir elemani ile, 22 ile
carpildiktan sonra atanir. Ikinci atamada ise, "buyuk[2][2]" elemani 5
degerine atanir. Herhangi bir islemin index olarak kullanilabilecegini
gosteren ucuncu atama ise, aslinda "big[5][5] = 177;" dir.

ODEVLER

1. Herbiri yaklasik 6 karakter uzunlugunda uc kisa katarin icine "strcpy"
ile iclerine "bir", "iki" ve "dort" kelimelerini kopyalayan bir program
yazin. Daha sonra, bu katarlari, daha buyuk bir katarin icine, uc kelimeyi
bir araya getirerek yerlestirin. Cikan sonucu on kere ekrana yazdirin.

2. Herbiri 10 elemanli olan "dizi1" ve "dizi2" isimli iki tamsayi dizisi
tanimlayin, ve iclerine bir dongu ile, ivir zivir bilgi doldurun. Daha
sonra her bir elemanini, ayni boydaki bir baska diziye ekleyin. Bu cikan
sonucu da "diziler" isimli 3. bir diziye atayin. Sonuclari ekrana
yazdirin:

1   2  +  10  = 12
2   4  +  20  = 34
3   6  +  30  = 36   gibi..

Ipucu: printf komutu soyle gorunecek:
    printf("%4d %4d + %4d = %4d\n",index,dizi1[index],dizi2[index],
            diziler[index]);
   

Perşembe, Aralık 20, 2018

BAZI HAYVANLARIN ORTALAMA ÖMÜRLERİ

BAZI HAYVANLARIN ORTALAMA ÖMÜRLERİ
Hayvanın Türü Ortalama Yaşı
Fil 100-120 YIL
At40 YIL
Köpek17-19 YIL
Kedi 14-20 YIL
Fare2-3 YIL
Doğan160 YIL
Papağan80-116 YIL
Karga50-70 YIL
Güvercin 10-30 YIL
Tavuk10-30 YIL
Kaplumbağa300 YIL
Örümcek1-2 YIL
Salyangoz6-8 YIL
İnsan biti27-46 GÜN
İşçi arı30-46 GÜN
Ana arı5 YIL

Çarşamba, Aralık 19, 2018

C Dili - Fonksiyon ve Değişkenler

C dili

Fonksiyonlar ve Degişkenler

KARETOPL.C:
================================================================
int toplam; /* Global degisken      */

main()
{
int index;

   baslik();        /* Baslik isimli fonksiyonu cagirir     */

   for (index = 1;index <= 7;index++)
     kare(index); /* Bu, kare fonksiyonunu cagirir.  */

   bitis();        /* Bu da, bitis isimli fonksiyonu cagirir */
}

baslik()        /* Bu fonksiyonun tanimidir                 */
{
   toplam = 0;     /* "Toplam" isimli degiskene 0 degeri atanir.. */
   printf("Bu, kare programinin basligidir\n\n");
}

kare(rakam)   /* Bu, kare fonksiyonunun baslangicidir */
int rakam;
{
int karesi; /* Yerel degisken tanimlaniyor */

   karesi = rakam * rakam ;  /* Karesini olusturuyor. */
   toplam += karesi; /* Bulunan deger, toplama ekleniyor */
   printf("%d nin karesi %d dir.\n",rakam,karesi);
}

bitis()   /* Bitis fonksiyonu tanimlaniyor.  */
{
   printf("\nKarelerin toplami: %d dir..\n",toplam);
}
================================================================


KARETOPL.C isimli programa bir bakin. Bu program, fonksiyonlu ilk
programimiz. Goreceginiz gibi C de fonksiyon tanimlamak o kadar kolaydir
ki, programlarin fonksiyonlara parcalanmasi neredeyse istemeden olur.
Aslinda, biz fonksiyonlari kullanip duruyorduk, ornegin kullandigimiz
printf komutu, bir fonksiyondur. Printf fonksiyonu, derleyici ile gelen
fonksiyon kutuphanesinin bir parcasidir.

Bu programin calisan kismina bir bakin. baslik() isimli bir satir ile
basliyor. Iste C de, herhangi bir fonksiyon, bu sekilde cagirilir: ismi,
parantez, ve sayet varsa bu fonksiyona gonderilmesi istenen degerler
yazilir. Programin calismasi bu satira gelince, baslik isimli fonksiyona
atlanir, ve buradaki islemler yapilir. Bitince, program geri doner, ve
ana programda kaldigi yerden isleme devam eder, ve "for" dongusune gelir.
Burada, yedi kere "kare" isimli bir fonksiyonu cagirir, daha sonra "bitis"
fonksiyonunu cagirir ve program sona erer.

FONKSIYONUN TANIMLANMASI

main'den sonra ayni main'in ozelliklerini tasayan bir program
goreceksiniz. Sadece bunun ismi "baslik()" olarak tanimlanmistir. Bu
basligin ilk satirinda "toplam" degiskeninin degeri 0 a atanir, ve bir
baslik satiri yazilir. Dikkat ederseniz, "toplam" degiskenini,
fonksiyonlarin disinda, programin basinda tanimlamistik. Bu sekilde
tanimlanan bir degisken, o programdaki herhangi bir fonksiyondan
cagirilabilir.  Bu tip degiskenlere "global" denir.

Bu iki satiri main() in icine de koymamiz mumkundur. Bu ornek sadece
fonksiyonlarin kullanimini gostermektedir.

FONKSIYONA DEGER GECIRMEK

Ana programda, "for" dongusunde, "index++" deyimini goruyorsunuz. Ilk
olarak gecen konuda ogrendigimiz birer birer arttirma metoduna alismaya
bakin, cunku C programlarinda cok karsilasacaksiniz.

"kare" isimli fonksiyonu cagirirken, bir yenilik kattik. Yani, parantez
icindeki "index" deyimini. Bu da derleyiciye, o fonksiyona gidince,
"index" in o andaki degerini de beraberimizde goturmek istedigimizi
belirtir. "Kare" isimli fonksiyonun basligina baktigimizda ise,
parantezler icinde bir baska degisken ismi goruyoruz: "rakam." Ana
programdan "kare(index)" dedigimizde gelen index'in degerine, bu fonksiyon
icinde 'rakam' diyecegimizi belirtiyoruz. Buna rakam demek yerine
istedigimiz herhangi bir ismi verebilirdik - C nin degisken isim
kurallarina uymasi sarti ile. Fonksiyon, ona ne tip bir deger
gecirilecegini bilmesi icinde, hemen alt satirda, "int rakam" diyerek,
gelecek bu degerin bir integer olacagini belirtiyoruz.

Kume isaretinden sonra, "int karesi" deyimi ile, sadece bu fonksiyonun
icinde tanimli olan bir degisken daha tanimlandigini goruyoruz.  Bundan
sonra, "karesi" degiskenine 'rakam' in karesini atiyoruz, ve "toplam"
degiskenine de "karesi" degiskeninin degerini ekliyoruz.

BIR FONKSIYONA DEGER ATAMA HAKKINDA DAHA BILGI

Aslinda "index" in degerini fonksiyona gecirdigimizde, anlattigimdan biraz
daha fazla sey oldu. Gercekte, "index" in degerini gecirmedik bu
fonksiyona, o degerin bir kopyasini gecirdik. Bu sayede, "index" in asil
degeri, fonksiyon tarafindan kazara zarar goremez. "rakam" isimli
degiskenimizi fonksiyon icinde istedigimiz gibi degistirebilirdik, fakat
ana programa geri dondugumuzde, "index" in degeri yine ayni kalirdi.

Boylece, degiskenin degerinin zarar gormesini onlemis oluyoruz, fakat ayni
zamanda, ana programa bir deger dondurmemize de mani oluyoruz. Pointers
kisimina gelince, cagiran fonkisyona degeri dondurmek icin, iyi tanimli
bir metod gorecegiz. O zamana kadar ana programa deger dondurmenin yegane
yolu, global degiskenler kullanaraktir. Global degiskenlerden biraz
bahsetmistik, bu konu icersinde, daha da bahsedecegiz.

Programa devam ederek, bitis() isimli bir fonksiyonun cagirilisina
geliyoruz. Bu cagirma da, hicbir yerel degiskeni olmayan fonksiyonu
cagirir. "toplam" degiskeninin degerini yazdiktan sonra ana kesime donen
program, yapacak baska birsey olmadigini gorunce durur.

UFAK BIR YALANI ITIRAF ETME ZAMANI

Biraz once size bir fonksiyondan bir deger dondurmek icin yegane yolun
global degiskenler ile olabilecegini soylemistim. Fakat bir baska metod
daha var. Lutfen KARELER.C isimli programa bakin...

KARELER.C:
=====================================================================

main()  /* Ana program burada.  */
{
int x,y;

   for(x = 0;x <= 7;x++) {
      y = squ(x);  /* x*x i hesaplayalim.. */
      printf("%d nin karesi %d dir...\n",x,y);
   }

   for (x = 0;x <= 7;++x)
      printf("%d nin karesi %d dir...\n",x,squ(x));
}

squ(in)  /* Bir rakamin karesini bulan fonksiyon */
int in;
{
int kare;

   kare = in * in;
   return(kare);  /* Yeni buldugumuz deger donduruluyor.. */
}

=====================================================================

Bu program, tek bir deger dondurmenin kolay oldugunu gosteriyor. Fakat,
birden fazla deger dondurmek icin, baska metodlara gerek oldugunu
hatirlamanizda fayda var.

ana programda, iki tane tamsayi degiskeni tanimliyoruz, ve 8 kere islenen
bir "for" dongusu baslatiyoruz. Dongudeki ilk satir, "y = squ(x);", yeni
ve tuhaf gorunuslu bir satir. Onceki programlarda gordugumuz gibi, squ(x)
kisimi, squ isimli fonksiyonu, x parametresi ile cagirmaktadir. Fonksiyona
baktigimizda, bu gecen degiskenin orada 'in' isminde oldugunu, ve kare
ismindeki yerel degiskene, gecirdigimiz degerin karesinin atandigini
goruyoruz. Daha sonra, yeni "return" komutunu goruyoruz. Parantezler
icindeki bu deger, fonksiyonun kendisine atanir, ve ana programa bu deger
dondurulur. Yani, "squ(x)" fonksiyonu, x in karesine atanir, ve bu deger,
ana programa atanir. Ornegin, x in degeri 4 ise, y nin degeri, "y=squ(x)"
satirindan sonra 16 olacaktir.

Bir baska dusunme sekli de, "squ(x)" sozcugunu, "x" in karesi degerinde bir
degisken olarak dusunmektir. Bu yeni degisken de, degiskenlerin
kullanildigi herhangi bir yerde kullanilabilir. Baska bir degisken olarak
gormeye bir ornek olarak bu programda ikinci bir dongu vardir. Burada,
y degiskenine atamak yerine, printf'in icinde, bu fonksiyonu cagiriyoruz.

Bir fonksiyondan donecek degiskenin tipi, derleyiciye bildirilmelidir.
Fakat, bizim yaptigimiz gibi sayet belirtmezsek, derleyici donecek degerin
tam sayi (integer) olacagini kabul edecektir. Baska tiplerin tanimlanmasini
ise, bundan sonraki programda gorecegiz..


KAYAR NOKTA FONKSIYONLARI

KAYARKAR.C:
================================================================

float z;   /* Bu bir global degiskendir */

main()
{
int index;
float x,y,sqr(),glsqr();

   for (index = 0;index <= 7;index++){
      x = index;  /* int'i float yapalim  */
      y = sqr(x); /* x'in karesini alalim..   */
      printf("%d in karesi %10.4f dir.\n",index,y);
   }

   for (index = 0; index <= 7;index++) {
      z = index;
      y = glsqr();
      printf("%d in karesi %10.4f dir.\n",index,y);
   }
}

float sqr(deger)  /* float'in karesini al, float dondur. */
float deger;
{
float karesi;

   karesi = deger * deger;
   return(karesi);
}

float glsqr()    /* float'in karesini al, float dondur. */
{
   return(z*z);
}
================================================================

KAYARKAR.C isimli programa bir bakin. Ilk once daha sonra kullanacagimiz
bir global degisken tanimlamak ile basliyor. Programin "main" kisiminda,
bir tamsayi degiskeni tanimlaniyor. Bunun altinda, iki tani tamsayi
degiskeni, iki tane de tuhaf gorunuslu tanimlamalar var. "sqr()" ve
"glsqr()" isimli iki fonksiyon gibi gorunuyorlar, ve oyleler. Bu, C
dilinde "int" yani tamsayi dan baska birsey dondurecek bir fonksiyonun
(float mesela) resmi sekilde tanimlanmasidir. Bu derleyiciye, bu iki
fonksiyondan bir deger donunce, bu degerin float olacagini bildiriyor.

Simdi programin ortasinda yer alan "sqr" fonksiyonuna bir bakin. Burada
fonksiyonun isminin basinda bir "float" sozcugu goreceksiniz. Bu
derleyiciye herhangi bir yerden bu fonksiyon cagirilinca, donecek degerin
float olacagini bildiriyor. Simdi bu fonksiyon, ana programdaki cagirma
ile uyumludur. Bunun altinda, "float deger" satirini goruyorsunuz. Bu da,
bu fonksiyona, cagiran tarafindan gecirilecek degerin, bir "float" yani
kayar nokta olacagini bildirir.

Bundan sonraki fonksiyon "glsqr" da, bir kayar nokta donduruyor, fakat o,
input icin global bir degikeni (z degiskenini) kullaniyor. Ayrica, yeni
bir degisken tanimlamadan, karesini almayi "return" komutunun icinde
yapiyor.

DEGISKENLERIN ALANI

ALAN.C:
================================================================
int say;        /* Bu bir global degiskendir.  */

main()
{
register int index; /* Bu degisken sadece "main" icinde kullanilabilir */

   baslik_1();
   baslik_2();
   baslik_3();
                      /* bu programin ana "for" dongusu  */
   for (index = 8;index > 0;index--)
   {
      int birsey; /* Bu degisken sadece bu kume isaretleri arasinda tanimli */

      for (birsey = 0;birsey <= 6;birsey++)
         printf("%d ",birsey);

      printf(" index simdi: %d oldu.\n",index);
    }
}

int sayac;      /* Bu degisken bu noktadan sonra kullanilabilir. */

baslik_1()
{
int index;        /* Bu degisken sadece baslik_1 icinde tanimli */

   index = 23;
   printf("Baslik_1 deki degeri %d\n",index);
}

baslik_2()
{
int say;    /* Bu degisken sadece baslik_2 icinde gecerli */
            /* ayni isimli global degiskenin yerini alir.. */

   say = 53;
   printf("Baslik_2 deki degeri %d\n",say);
   sayac = 77;
}

baslik_3()
{
   printf("Baslik_3 deki degeri ise %d\n",sayac);
}
================================================================

Ilk tanimlanan degisken "say", butun fonksiyonlardan once tanimlandigi
icin, herhangi biri tarafindan cagirilabilir, ve daima erisilebilir. Daha
sonra, "sayac" isimli bir degisken tanimliyoruz. Bu da global bir
degiskendir, fakat ana programdan sonra tanimlandigi icin, ana program
tarafindan kullanilamaz. Global bir degisken, fonksiyonlarin disinda
tanimlanan degiskenlere denir. Bu tip degiskenlere dissal degiskenler adi
da verilebilir.

Ana programa geri donerek, "index" isimli degiskenin tanimina bakalim. Su
an icin "register" sozcugunu goz onune almayin. Bu degisken "otomatik" bir
degiskendir, yani o fonksiyon cagirildiginda olusur, ve fonksiyondan
cikinca kaybolur. Ana program baska fonksiyonlari cagirdiginda bile daima
calisir oldugundan, burada pek manasi yoktur. Tanimlanan diger bir
degisken de, "birsey" degiskenidir. Bu degisken, sadece "for" dongusunun
icinde tanimlidir, ve baska bir yerden erisilemez. Herhangi bir kume
dongusunun basina, degisken tanimlamalari konulabilir. Kumeden cikinca, bu
degisken tanimsiz olacaktir.

OTOMATIK DEGISKENLER HAKKINDA...

Baslik_1'e bir bakin. "index" isimli bir degisken kullaniyor. Bu
degiskenin ana programdaki "index" ile arasinda, ikisinin de otomatik
degisken olmasi disinda hicbir bag yoktur. Program, bu fonksiyonu
islemezken, bu degisken yoktur bile. Baslik_1 cagirildiginda, bu degisken
yaratilir, ve baslik_1 bitince de bu degisken silinir. Fakat bu, ana
programdaki ayni isimli degiskenin degerini hic etkilemez, cunku ayri
nesnelerdir.

Yani otomatik degiskenler, gerektiginde yaratilirlar, ve isleri bitince de
silinirler. Hatirlamaniz gereken bir nokta da, bir fonksiyon birden fazla
kere cagirildiginda, otomatik degiskenlerin eski degerleri saklanmaz, yeni
bastan deger atanmalari gerekir.

STATIK DEGISKENLER ?

Bir baska degisken tipi ise, statik degiskenlerdir. Degiskeni tanimlarken
basina "static" sozcugunu koyarak, o degisken yada degiskenler,
fonksiyonun tekrar tekrar cagirilmasinda, eski degerlerini tutarlar.

Ayni sozcugu bir global degiskenin onune koyarak, o degiskenin sadece o
kutuk icindeki fonksiyonlara tanimli olmasini saglayabiliriz. Bundanda
anlayacaginiz gibi, birkac parcadan olusan kutukler arasinda global
degiskenlerin tanimlanmasi mumkundur. Bunu 14. konuda daha iyi gorecegiz.

AYNI ISMI TEKRAR KULLANMAK

baslik_2 ye bir bakin. Burada "say" isimli degiskenin tekrar
tanimlandigini ve 53 degerini aldigini goruyoruz. Global olarak
tanimlanmasina karsin, ayni isimde bir otomatik degisken tanimlamak
mumkundur. Bu degisken tumuyle yeni bir degiskendir, ve global olarak,
programin basinda tanimlanan "say" ile arasinda hicbir baglanti yoktur. Bu
sayede kafanizda "acaba global isimlerle karisirmi" sorusu olmadan
fonksiyon yazabilirsiniz.

REGISTER DEGISKENLERI NEDIR

Sozumu tutarak, register degiskenine donelim. Bir bilgisayar bilgiyi
hafizada yada registerlerde tutabilir. Register sahasina erisim, hafizaya
erisimden cok daha hizlidir, fakat programcinin kullanabilecegi az sayida
register vardir. Bazi degiskenlerin program tarafindan cok kullanilacagini
dusunuyorsaniz, o degiskeni "register" olarak tanimlayabilirsiniz.
Bilgisayar ve derleyici tipinize gore, bir yada birkac degiskeni bu
sekilde tanimlayabilirsiniz. Cogu derleyicilerin hic register degiskenleri
yoktur, ve "register" sozcugunu goz onune almadan derleme yaparlar.

Register degiskenleri, sadece tamsayi ve karakter tipi degiskenler ile
kullanilabilir. Sectiginiz derleyiciye gore, unsigned, long yada short
tipleride register olabilir.

DEGISKENLERI NEREDE TANIMLAYALIM

Bir fonksiyona parametre olarak gecirilmis degiskenler varsa, bunlarin
tanimi, fonksiyon isminden sonra, ve acik kume isaretinden once
yapilmalidir. Fonksiyonda kullanilan diger degiskenler ise, fonksiyonun
basinda, hemen acik kume isaretinden sonra tanimlanir.

STANDART FONKSIYON KUTUPHANESI

Her derleyici, icinde bircok fonksiyon olan bir kutuphane ile birlikte
gelir. Bunlar genellikle giris/cikis islemleri, karakter ve katar isleme,
ve matemetiksel fonksiyonlari icerir. Bunlarin cogunu sonraki konularda
gorecegiz.

Bunun disinda, cogu derleyicinin, standart olmayan, ve kullandiginiz
bilgisayarin ozelliklerini kullanan, ilave fonksiyonlari vardir. Ornegin,
IBM-PC ve uyumlular icin, BIOS servislerini kullanan fonksiyonlar
sayesinde, isletim sistemine komutlar vermeyi, yada ekrana direk yazmayi
saglayan fonksiyonlar olabilir.

RECURSION NEDIR ?

RECURS.C:
================================================================

main()
{
int index;

   index = 8;
   geri_say(index);
}

geri_say(rakam)
int rakam;
{
   rakam--;
   printf("rakam degeri %d dir.\n",rakam);
   if (rakam > 0)
      geri_say(rakam);
   printf("Simdi rakam %d oldu..\n",rakam);
}

================================================================

Recursion, ilk karsilasildiginda cok korkutucu gorunen bir kavramdir.
Fakat RECURS.C isimli programa bakarsaniz, recursion'un butun zorlugunu
yenebiliriz. Aslinda fazla basit ve dolayisi ile aptal olan bu program,
bize recursion'un kullanimini gostermesi bakimindan cok yararlidir.

Recursion, kendini cagiran bir fonksiyondan baska birsey degildir. Yani,
bitmek icin bir kontrol mekanizmasina ihtiyaci olan bir dongudur.
Karsinizdaki programda "index" degiskeni 8 e atanir, ve "geri_say"
fonksiyonunun parametresi olarak kullanilir. Bu fonksiyon da, bu
degiskenin degerini teker teker azaltir, ve bize bu degeri gosterir. Sonra
tekrar kendisini cagirir, degeri bir kez daha azalir, tekrar, tekrar..
Sonunda deger sifira ulasir, ve dongu artik kendini cagirmaz. Bunun
yerine, daha onceki cagirmada kaldigi yere geri doner, tekrar geri doner,
en sonunda ana programa geri doner, ve program sona erer.


NE OLDU ?

Fonksiyon kendisini cagirdiginda, butun degiskenlerini,ve cagirilan
fonksiyonun islemesi bittiginde donmesi gereken yeri hafizaya sakladi.
Bir dahaki sefere kendinin tekrar cagirdiginda, yine ayni seyi yapti, ta
ki kendisini tekrar cagirmasi bitene kadar. Daha sonra tekrar bu
bilgileri, ayni koyus sirasi ile geri okudu.

Hatirlamaniz gereken nokta, recursion'un bir noktada bitmesi gerektigidir,
sayet sonsuz bir donguye girerseniz, bilgisayarin hafizasi bitecek ve bir
hata mesaji cikacaktir.

ODEVLER

1. Daha once yazdigimiz Santigrad'dan Fahrenheit'a karsilik tablosundaki
derece hesaplamasini bir fonksiyona geciriniz.
2. Ekrana isminizi 10 kere yazan bir program yaziniz. Yazma isini yapmak
icin bir fonksiyon cagiriniz. Daha sonra bu fonksiyonu main() in basina
alarak, derleyicinin bunu kabul edip etmedigini kontrol ediniz.

Salı, Aralık 18, 2018

Atatürk'ün Özlük Dosyası

Atatürk'ün Özlük Dosyası


Muamelat-ı Zatiye Dairesi (Personel Başkanlığı)
Evraka 21 Teşrinisani 1341 (21 Kasım 1925)


Reis-i Cumhur
Müşir
Gazi Mustafa Kemal Paşa Hazretleri
bin Ali Rıza Selânik

Duhulü: 1 Mart 1315 (13 Mart 1899)
Nasbı: 19 Eylül 1337 (19 Eylül 1921 )
Sicil No: 1317-8 P. (Piyade 1902-8)

Müşarünileyh Hazretleri :

29 Kânunuevvel 320 (11 Ocak 1905)
Tarihinde Erkân-ı Harbiye Yüzbaşılığı ile mektepten neş'et ederek sunuf-u selasede bölük idare ve kumanda etmek üzere atik 5 nci Ordu'ya memur buyrulmuştur

12 Kânunuevvel 332 (25 Aralık 1906)
Tarihinde Beşinci Mecidi Nişanı'yla taltif edilmiştir

7 Haziran 323 (20 Haziran 1907)
Tarihinde Kolağalığa terfi etmiştir. Sene-i mezkûre eylülü gayesinde arıza-i vücudiyelerinden naşi atik 3 ncü Ordu'ya nakledilmişlerdir

9 Haziran 324 (22 Haziran 1908)
Tarihinde Şark Demiryolu Müfettişliği'ne ve sene-i mezkûre Kânunuevvel gayesinde 3 ncü Ordu Redif 17 nci Selânik Fırkası Erkân-ı; Harbiyesine tayin buyrulmuşlardır

23 Teşrinievvel 325 (5 Kasım 1909)
Tarihinde 3 ncü Ordu Erkân-ı Harbi- yesine tayin buyrulmuştur

24 Ağustos 326 (6 Eylül 1910)
Tarihinde 3 ncü Ordu Zabitan Talimgahı Kumandanlığı'na ve sene-i mezkûre teşrinievvelinde tekrar mezkûr 3 ncü Ordu Erkân-ı Harbiyesine ve bilahara Kânunusâni zarfında 5 nci Kolordu Erkân-ı Harbiyesine tayin buyrulmuştur

14 Eylüf 327 (27 Eylül 1911 )
Tarihinde muvakkaten Trablusgarp Fırkası Erkân-ı Harbiyesine memur edilmişse de Trablusgarp'a gitmeksizin ıstanbuf'a cefbi 5 nci Kolordu'ya tebliğ edilerek Erkân-ı Harbiye-i Umumiye Dairesi'ne tayin buyrulmuştur

14 Teşrinisani 327 (27 Kasım 1911 )
Tarihinde Binbaşılığa terfi edilmiştir

19 Kânunusanı 327 (1 Ocak 1912)
Tarihinde Bingazi'de bulunan müşarünileyhin Derne karşısındaki Şark Gönülfü Kumandanlığı'nı deruhte etmiştir

26 Şubat 327 (11 Mart 1912)
Tarihinde Derne Kumandanlığı'na tayin edilmiştir

11 Teşrinievvel 328 (24 Ekim 1912)
Tarihinde rahatsızlığına mebni Dersaadet'e hareket etmiştir

8 Teşrinisani 328 (21 Kasım 1912)
Tarihinde Karargâh-ı Umuroi emrine verilerek mezkûr ay zarfında Bahrü sefit Boğazı Kuvay-i Mürettebesi Erkân-ı Harbiyesi'ne tayin buyrulmuştur

14 Teşrinievvel 329 (27 Ekim 1913)
Tarihinde Sofya Ataşemiliterliği'ne tayin buyrulmuştur

24 Teşrinievvel 329 (6 Kasım 1913)
Tarihinde Bingazi muharebatında ibraz-ı şecaat ve liyakat etmesine mebni kıdemine iki sene zam, Dördüncü Rütbe'den Osmani Nişanı ita klınmıştır
29 Kânunuevvel 329 (11 Ocak 1914)
Tarihinde Sofya-Belgrat-Çetine Sefaretleri Ataşemiliterliği'ne tayin buyrulmuştur

26 Şubat 329 (11 Mart 1914)
Tarihinde Fransa Hükümeti tarafından Şövalye Rütbesinden Legion d'honneur nişanı ita kılınmıştır

16 Şubat 329 (1 Mart 1914)
Tarihinde Balkan Harbi'ndeki hidemat-ı hasenesinden dofayı kaymakamlığa terfi etmiştir

22 Temmuz 330 (4 Ağustos 1914)
Tarihinde Sırbistan Ataşemiliterfiği'ne tayin kılınmış ise de Sofya Ataşemiliterliği'ne ipka edilmiştir

16 Teşrinisani 330 (29 Kasım 1914)
Tarihinde iki sene kıdem zammı verilmiştir

7 Kânunusani 330 (20 Ocak 1915)
Tarihinde 3 ncü Kolordu'da yeni teşekkül eden 19 ncu Fırka Kumandanlığı'na tayin buyrulmuştur

19 Mayıs 331 (1 Haziran 1915)
Tarihinde Miralaylığa terfi etmiştir

15 Temmuz 331 (28 Temmuz 1915)
Tarihinde 15 nci Kolordu Kumandanlığı'na ve sene-yi mezkûrede (Ağustos) 16 ncı Kolordu Komutanlığı'na tayin buyrulmuştur

14 Kânunusani 331(27 Ocak 1916)
Tarihinde tebdil havasının hitamına mebni 16 ncı Kolordu`ya ıltihak buyrulmuştur

2 Temmuz 331(15 Temmuz 1915)
Tarihinde Harp Madalyası

19 Ağustos 331(1 Eylül 1915)
Tarihinde Muharebe Gümüş Liyakat Madalyası

4 Kânunusani 331(17 Ocak 1916)
Tarihinde Anafartalar Grubu Komutanı iken Muharebe Altın Liyakat Madalyası

19 Kânunusani 331(1 Şubat 1916)
Tarihinde İçüncü Rütbe'den Osmani Nişanı

28 Kânunuevvel 331( Aralık 1915)
Alman Hükümeti tarafından Demir Salip Nişanı verilmiş

28 Şubat 331(13 Mart 1916) Anafartalar'daki hidemat-ı hasenesinden dolayı iki sene seferi kıdem zammı ita kılınmıştır

19 Mart 332(1 Nisan 1916)
Tarihinde Hidemat-ı fevkâledesine mebni bir sene kıdem zammı ile Mirli valığa terfi etmiştir

29 Teşrinisani 332.(12 Aralık 1916)
Müceddeden ıkinci Rütbe'den Mecidi Nişanı ita kılınmıştır

11 Kânunuevvel 1332(24 Aralık 1916)
Bitlis havalisindeki hidematına mükâfeten bir sene seferi kıdem zammı ita edilmiştir. Sene-yi mezkûre zarfında Almanya Hükümeti tarafından Birinci ve ıkinci Demir Salip ve Avus turya Macaristan Hükümeti tarafından İçüncü Rütbe'den Muharebe Liyakat Madalyası ile ıkinci Rütbeden Harp Alâmeti Liyakat-ı Askeri Madalyası ita kılınmıştır

7 Mart 333(7 Mart 1917)
Tarihinde 2 nci Ordu Kumandanlığı'na tayin buyrulmuştur

19 Mart 333(19 Mart 1917)
Tarihinde muharebat-ı vakıadaki hidemat-ı hasanesinden dolayı tebdilen ıkinci Rütbeden Osmani Nişanı ita kılınmıştır

5 Temmuz 333(5 Temmuı 1917)
Tarihinde 7 nci Ordu Kumandanlığı'na tayin buyrulmuştur

23 Eylül 333(23 Eylül 1917)
Tarihinde Muharebe Altın ımtiyaz Madalyası ile taltif buyrulmuştur

9 Teşrinievvel 333(9 Ekim 1917)
Tarihinde becayişen 2 nci Ordu Kumandanlığı'na tayin kılınmıştır

11 Teşrinievvel 333(11 Ekim 1917)
Tarihinde bir ay müddetle ıstanbul'a mezunen gitmişler ve rahatsızlıklarına mebni tedavi edilmek üzere üç ay mezuniyet verilmiştir

7 Teşrinisani 333(7 Aralık 1917)
Tarihinde Karargâh-ı Umumi emrine alınarak sene-i meıkûre kânunuevvelinde mülga Veliaht-ı Saltanat refakatinde Almanya Karargah-ı Umumisi'ne azimet etmiş

16 Kânunuevvel 333(16 Aralık 1917)
Tarihinde tebdilen Birinci Rütbe'den Kılıçlı Mecidi Nişanı ita kılınmıştır

19 Şubat 334(19 Şubat 1918)
Tarihinde Almanya ımparatoru tarafından Birinci Rütbe'den Kılıçlı Kron dö Prus Nişanı verilmiştir

13 Mayıs 334(13 Mayıs 1918)
Tarihinde bera-i tedavi Viyana'ya azimet buyurmuştur

7 Ağustos 334(7 Ağustos 1918)
Tarihinde 7 nci Ordu Kumandanlığı'na ve sene-yi mezkure eylülünde Fahri Yaveran silkine ithal buyrulmuş

31 Teşrinievvel 334(31 Ekim 1918)
Tarihinde Yıldırım Ordular Grubu Kumandanlığı'nı deruhte buyurmuşlardır

Teşrinisani 334(Kasım 1918)
Tarihinde Grubun Lağvı üzerine Harbiye Nezareti emrine alınmıştır

30 Nisan 335(30 Nisan 1919)
Tarihinde 9 ncu Ordu Kıtaatı Müfettişliği'ne tayin edilmiş ve sene-yi mezkûre Temmuzu'nun beşinde ıstanbul Hükümet-i sakıtasınca memuriyetine hitam verilmiştir

9 Ağustos 335(9 Ağustos 1919)
Ordu Müfettişliği'nden mazu...

Pazartesi, Aralık 17, 2018

Atatürk'ün Gençliğe Hitabesi

Atatürk'ün Gençliğe Hitabesi


Ey Türk gençliği! Birinci vazifen, Türk istiklâlini, Türk cumhuriyetini, ilelebet, muhafaza ve müdafaa etmektir.
Mevcudiyetinin ve istikbalinin yegâne temeli budur. Bu temel, senin, en kıymetli hazinendir. ıstlkbalde dahi, seni bu hazineden mahrum etmek isteyecek, dahilî ve haricî bedhahların olacaktır. Bir gün, lstiklâl ve cumhuriyeti müdafaa mecburiyetine düşersen, vazifeye atılmak için, içinde bulunacağın vaziyetln imkân ve şerâitini düşünmeyeceksin! Bu imkân ve şerâit, çok nâmüsait bir mahiyette tezahür edebilir. ıstiklâl ve cumhuriyetine kastedecek düşmanlar, bütün dünyada emsali görülmemiş bir galibiyetin mümessili olabilirler. Cebren ve hile ile aziz vatanın, bütün kaleleri zaptedilmiş, bütün tersanelerine girilmiş, bütün orduları dağıtılmış ve memleketin her köşesi bilfiil işgal edilmiş olabilir. Bütün bu şerâitten daha elîm ve daha vahim olmak üzere, memleketin dahilinde, iktidara sahip olanlar gaflet ve dalâlet ve hattâ hıyanet içinde bulunabilirler. Hattâ bu iktidar sahipleri şahsî menfaatlerini, müstevlilerin siyasi emelleriyle tevhit edebilirler. Millet, fakr ü zaruret içinde harap ve bîtap düşmüş olabilir.
Ey Türk istikbalinin evlâdı! ışte, bu ahval ve şerâit içinde dahi, vazifen; Türk istiklâl ve cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlartndaki asil kanda, mevcuttur!
20 Ekim 1927 

Pazar, Aralık 16, 2018

Atatürk Kronolojisi

Atatürk Kronolojisi


l881
Atatürk'ün Selânik'te doğumu.

1886
Atatürk'ün ilk öğrenimine başlaması (Kısa bir süre mahalle mektebine devam etmiş, daha sonra çağdaş eğitim yapan Şemsi Efendi Okulu'na geçerek ilkokulu burada bitirmiştir.)

1888
Atatürk'ün babası Ali Rıza Efendi'nin ölümü.

1893
Atatürk'ün Selânik Askerî Rüştiyesi'ne girişi (Atatürk kısa bir süre Selânik Mülkiye Rüştiyesi'ne gitmişse de öğrenimine daha sonra Askerî Rüştiye'de devam etmiş ve okulu 1896 yılında bitirmiştir. Bu okulda matematik öğretmeni. Mustafa Efendi, genç öğrencisi Mustafa'nın adının sonuna "Kemal" ismini ilâve etmiştir.) Atatürk'ün Manastır Askerî ıdadisi'ne girişi ( 1899 yılında bitirmiştir) Atatürk'ün Manastır Askerî ıdadisi'ni bitirerek ıstanbul'da Harp Okulu'nun piyade sınıfına yazılışı, Atatürk'ün teğmen rütbesiyle Harp Okulu'nu bitirişi ve öğrenimine Harp Akademisi'nde devam etmesi.

1908
Atatürk'ün üsteğmen oluşu.

11 Ocak 1905
Atatürk'ün Kurmay Yüzbaşı rütbesiyle H.arp Akademisi'nden mezun oluşu.

5 Şubat 1905
Atatürk'ün -kurmaylık stajı için- Şam'da 5. Ordu emrine atanması.

10 Şubat 1905
Atatürk'ün Şam'a gitmek üzere ıstanbul'dan hareketi.

Ekim 1906
Atatürk'ün Şam'da bazı arkadaşları ile gizli olarak "Vatan ve Hürriyet Cemiyeti"ni kuruşu.

20 Haziran 1907
Atatürk'ün kolağası (kıdemli yüzbaşı) oluşu.

13 Ekim 1907
Atatürk'ün Şam'dan, merkezi Manastır' da bulunan 3. Ordu Karargâhı'na atanması (Bu karargâhın Selânik'teki şubesinde çalıştırılmıştır. )

23 Şubat1908
Atatürk'ün General Litzmann'dan çevirdiği "Takımın Muharebe Talimi" adlı -askerî eğitimle ilgili- kitabın Selânik'te yayımlanması.

22 Haziran 1908
Atatürk'e, 3. Ordu Kararğâhı'ndaki görevinin yanısıra İsküp-Selânik arasındaki demiryolu müfettişliği görevinin de verilmesi.

23 Temmuz 1908
ıkinci Meşrutiyet'in ilânı.

13 Ocak 1909
Atatürk'ün İçüncü Ordu Selânik Redif Tümeni Kurmay Başkanlığı'na getirilişi.

3 Nisan1909
ıstanbul'da ıkinci Meşrutiyet'e karşı -avcı taburlarının ayaklanmasıyla- büyük isyan çıkması (31 Mart ısyanı)

15/16 Nisan 1909
Atatürk'ün Hareket Ordusuyla beraber -bu orduriun Kurmay Başkanı olarak- Selânik'ten ıstanbul'a hareketi.

19 Nisan 1909
Atatürk'ün Hareket Ordusu'yla beraber ıstanbul'a gelişi.

16 Mayıs 1909
Atatürk'ün 31 Mart olayının bastırılmasından sonra tekrar Selânik'e dönüşü.

30 Ağustos 1909
Atatürk'ün -kolağası rütbesiyle- Cumalı Karargâhı'ndaki askerî manevra'ya katılışı.

8 Eylül 1909
Cumalı Karargâhı'ndaki askerî manevranın sona erişi ve Atatürk'ün Cumalı'den ayrılışı.

22 Eylül1909
Selânik'te "ıttihat ve Terakki Büyük Kongresi"nin toplanışı (Atatürk, bu kongrede bir konuşma yaparak ordunun siyasetten çekilmesi gereğini savunmuştur.)

5 Kasım 1909
Atatürk'ün -Selânik Redif Tümeni Kurmay Başkanlığından- tekrar İçüncü Ordu Karargâhı'na atanması.

1909
Atatürk'ün "Cumalı Ordugâhı" adlı kitabının Selânik'te yayımlanması (Bu küçük kitap, 30 Ağustos-8 Eylül 1909 arasında Cumalı Kararaâhı'nda yapılan askerî manevra esasında tutulan not ve krokilerden oluşmuştur.)

6 Eylül 1910
Atatürk'ün İcüncü Ordu Subay Talimgâhı Komutanlığı'na atanması.

Eylül 1910
Atatürk'ün orduyu temsilen, Pikardi manevralarını izlemek amacıyla Fransa'ya gönderilişi.

1 Kasım 1910
Atatürk'ün İcüncü Ordu Subay Talimgâhı Komutanlığı'ndan tekrar İçüncü Ordu Karargâhı'na atanması.

15 Ocak 1911
Atatürk'ün, 5. Kolordu Karargâhı'nda, daha sonra yine Selânik'te bulunan 38. Piyade Alayı'nda görevlendirilmesi.

Mart 1911
Atatürk'ün Arnaveıtluk'ta çıkan isyanı bastırmak üzere düzenlenen harekâtta Harbiye Nazırı Mahmut Şevket Paşa'nın yanında görev alışı.

19 Nisan 1911
Atatürk'ün 5. Kolordu'nun Selânik-Kılkış arasında yaptığı manevralara -kolağası rütbesiyle- katılması (Manevra 20 Nisan 1911 akşamı sona ermiştir.)

14 Eylül 1911
Atatürk'ün, Selânik'te 38. Piyade Alay, Kumandanlığı'ndaki görevinden alınarak ıstanbul'da Genelkurmay I. Şube'de bir göreve atanması.

29 Eylül 1911
ıtalyanların Trablusgarp'ta Osmanlı Devleti'ne harp ilânı

5 Ekim 1911
ıtalyanların Trablusgarp'a saldırıya geçmesi Atatürk'ün, Trablusgarp'a gönüllü gitmek üzere -Gâzeteci Mustafa Şerif kimliği ile- bir kısım arkadaşlarıyla beraber ıstanbul'dan ayrılışı (ıskenderiye üzerinden Trablusgarp'a geçmiştir.)

27 Kasım 1911
Atatürk'ün binbaşılığa terfi edişi

8 Aralık 1911
Atatürk ve arkadaşlarının Bingazi'ye gelişi (Atatürk, burada Tobruk Bölgesi komutanı Ethem Paşa'nın Kurmay Başkanı olarak göreve başlamıştır.)

19 Aralık 1911
Atatürk'ün -Ethem Paşa'nın yerine- Tobruk Bölgesi Komutanlığı'na getirilişi

30 Aralık 1911
Atatürk'ün Derne'ye gelişi ve Derne doğusundaki Şark Gönüllüleri Komutanlığı' nı üzerine alışı.

l9ll
Atatürk'ün, "Tâbiye Tatbikat Seyahatı" adlı kitabının Selânik'te yayımlanması (Bu küçük kitap, 5. Kolordu'nun 19-20 Nisan 1911 günleri yaptığı ve Atatürk'ün de kolağası rütbesiyle katıldığı bir askeri tatbikatın not ve krokilerinden oluşmuştur.)

12 Mart 19l2
Atatürk'ün Deme Komutanlığı'na atanması

1912
Karadağ'ın harp ilânı ile Balkan Harbi'nin başlaması

24 Ekim l912
Atatürk'ün Trablusgarp'tan ıstanbul'a hareketi

25 Kasım 1912 Atatürk'ün Gelibolu'da bulunan Bahr-i , Sefîd (Akdeniz) Boğazı Kuvay-ı Mürettebesi Komutanlığı Harekât Şubesi Müdürlüğü'ne atanması

1 Aralık 1912
Atatürk'ün ıstanbul'dan Bolayır'a hareketi

1912
Atatürk'ün, General Litzmann'dan çevirdiği "Bölüğün Muharebe Talimi" adlı -askerî eğitimle ilgili- kitabın ıstanbul'da yayımlanması

27 Ekim 1913
Atatürk'ün Sofya Ataşemiliterliğine atanması

20 Kasım 1913
Atatürk'ün Sofya'ya gelişi.

11 Ocak 1914
Atatürk'e, Sofya Ataşemiliterliğine ilâveten Belgrat ve Çetine Ataşemiliterliklerini de yürütme görevi verilmesi.

1 Mart 1914
Atatürk'ün yarbaylığa terfi edişi.

Mayıs 1914
Atatürk'ün, Nuri (Conker)'in "Zâbit ve Kumandan" adlı,konferanslardan oluşan eseri üzerine, -onunla sohbet şeklinde "Zâbit ve Kumandanla Hasbihal" adlı kitabını yazması (Bu kitap, bir süre gecikme ile 1918 Aralık ayında ıstanbul'da yayımlanmıştır.

1 Ağustos 1914
Almanya'nın Rusya'ya harp ilânı ile I. Dünya Savaşı'nın başlaması.

29 Ekim 1914
Osmanlı. Devleti'nin, I. Dünya Savaşı'na girişi.

20 Ocak 1915
Atatürk'ün, Tekirdağ'da teşkil edilecek 19. Tümen Komutanlığı'na atanması.

2 Şubat 1915
Atatürk'ün Tekirdağ'a gelişi ve 19. Tüme- ni kurma çalışmalarına başlaması.

25 Şubat 1915
Tekirdağ'daki 19. Tümen Komutanlığı'nın Maydos (Eceabat)'a nakli ve Atatürk'ün 19. Tümen Komutanlığı üzerinde olmak üzere Maydos Bölgesi Komutaııı olarak görevini sürdürmesi.

18 Mart 1915
Çanakkale Boğazı'nı geçmeye teşebbüs eden ıngiliz donanmasının, ağır zayiat vererek başan kazanamaması.

23 Mart 1915
Gelibolu'da 5. Ordu'nun kurulması kararı ve komutanlığına Alman Generali Liman von Sanders'in atanması (26 Mart 1915 günü Gelibolu'ya gelmiştir.)

18 Nisan 1915
Atatürk'ün komutasındaki 19. Tümenin, 5. Ordu'nun genel ihtiyatını oluşturmak üzere Bigalı'ye gönderilişi.

25 Nisan 1915
Çanakkale'de ıngilizlerin Seddülbahir ve Arıbumu bölgesinde çıkarma hareketine başlaması; Bigali'den gelen Atatürk komutasındaki 19. Tümen kuvvetlerinin taarruzu ile geri çekilmeye mecbur edilişi (Düşman çıkarması 26 ve 27 Nisan günleri de devam etmiş; ancak Atatürk komutasındaki askerlerimizin kahramanca savunması karşısında başarısız kalmıştır.)

1 Haziran 1915
Atatürk'ün albaylığa terfi edişi.

15 Temmuz 1915
Atatürk'e Harp Madalyası verilişi.

6 Ağustos 1915
Düşmanın Çanakkale'de takviyeli kuvvetlerle yeni bir taarruzu (Bu taarruz, 7 Ağustos 1915 günü de devam etmiş, ancak Atatürk'ün aldığı önlemler sayesinde gelişme imkânı bulamamıştır. )
Düşmanın akşam Anafartalar bölgesine asker çıkararak bu bölgeden de ilerleme girişimi.

8 Ağustos 1915
Atatürk'ün -General Liman von Sanders' in emri ile- "Anafartalar Grubu Komutanlığı"na getirilişi.

9 Ağustos 1915
Atatürk komutasındaki kuvvetlerin, Anafartalar bölgesinde ıngilizlere taarruzu; düşmanın tekrar çıkarma yaptığı kıyılara itilmesi.

10 Ağustos 1915
Atatürk komutasındaki kuvvetlerin, Conk· bayırı'nda ıngilizlere taarruzu ve düşmanın ilerlemesine imkân verilmemesi (Bugünkü muharebeler esnasında Atatürk'ün kalbini hedef alan bir kurşun, göğüs cebindeki. saate çaıpıp geri döndüğünden, kendisi mutlak bir ölümden kurtuldu.)

1 Eylül 1915
Atatürk'e, Anafartalar Grubu Komutanlığı'ndaki üstün başanlan sebebiyle "Muharebe Gümüş Liyakat Madalyası" verilişi.

10 Aralık 1915
Atatürk'ün,"Anafartalar Grubu Komutanlığı"ndan istifası (Bu istifa,5.0rdu Komutanı General Limon von Sanders tarafından kabul edilmemiş, kendisi izinli olarak ıstanbul'a dönmüştür.)

19/20 Aralık 1915
ıngilizlerin gece Çanakkale'yi tâhliye etmeleri.

17 Ocak 1916
Atatürk'e,"Anafartalar Grubu Komutanlığı"ndaki üstün başarıları sebebiyle "Muharebe Altın Liyakat Madalyası" verilişi.

27 Ocak 1916
Atatürk'ün, karargâhı Edirne'de bulunan 16. Kolordu Komutanlığı'na atanması (Edirne'deki bu kolordu, Kafkas Cephesinin önem kazanması üzerine bir süre sonra aynı adla Diyarbakır'a nakledilmiştir.)

11 Mart 1916
Atatürk'ün, Karargâhı Diyarbakır'a nakledilmesi kararlaştırılan 16. Kolordu Komutanlığına atanması (Başkomutan Vekili Enver Paşa, bugün Atatürk'e telgraf çekerek Kolordu Karargâhıyla Resülayn (Ceylanpınar) üzerinden hemen Diyarbakır'a hareket etmesini istemiştir.)

12 Mart 1916
Atatürk'ün,-16. Kolordu'nurı Edirne'den Diyarbakır'a kaydırılması üzerine- Edirne'den ıstanbul'a hareketi.

16 Mart 1916
Atatürk'ün, Diyarbakır'daki görevine gitmek üzere ıstanbul'dan ayrılışı.

26 Mart 1916
Atatürk'ün Diyarbakır'a gelerek 16. Kolordunun komutasını üzerine alması.

1 Nisan 1916
Atatürk'ün mirliva (tuğgeneral)'lığa terfi edişi.

Haziran 1916
16. Kolordu Karargâhı'nın Diyarbakır'dan Silvan'a nakledilmesi.

3 Ağustos 1916
Atatürk komutasındaki kuvvetlerin Bitlis ve Muş yönünde taarruza geçişi.

8 Ağustos 1916
Atatürk komutasındaki kuvvetlerin sabah Muş'u, akşam Bitlis'i düşman işgalinden kurtarışı.

13 Aralık 1916
Atatürk'ün, -Ahmet ızzet Paşa'nın izinli olarak kısa bir süre ıstanbul'a gitmesi üzerine - vekâleten karargâhı Diyarbakır'da bulunan 2. Ordu Komutanlığı'na atanması.

16 Aralık 1916
Atatürk'ün, Silvan'dan hareketle Sekerat' ta 2. Ordu Karargâhı`na gelerek Komutan Vekilliği görevini üzerine alışı.

3 Ocak 1917
Atatürk'ün, -Ahmet ızzet Paşa'nın izinden dönüşü üzerine- Sekerat'ta 2. Ordu Komutan Vekilliği'nden aynlarak Silvan'a dönüşü.

14 Şubat 1917
Atatürk'ün Hicaz Kuvve-i Seferiyesi Komutanlığı'na atanması.

21 Şubat 1917
Atatürk'ün Şam'a gitmek üzere Diyarbakır'dan ayrılışı.

5 Mart l917
Atatürk'ün Şam'a gelişi ve Sina Cephesini teftişi.

5 Mart 19l7
Atatürk'ün Diyarbakır'daki 2. Ordu'ya vekâleten Komutan atanması.

11 Mart 1917
Atatürk'ün 2. Ordu Komutan Vekili olarak Şam'dan Diyarbakır'a donüşü

16 Mart 1917
Atatürk'ün 2. Orduya asaleten komutan atanması

14 Mayıs 1917
Atatürk'ün Muş'un ikici defa düşman işgalinden kurtarışı (Muş, 8 Ağustos 1916 da kurtarılmış ise de 25 Ağustos 1916 da tekrar Rusların eline düşmüştü.)

5 Temmuz 1917
Atatürk'ün, General Falkenhein'in komutasındaki Yıldırım Orduları Grubu Komutanlığı'na bağlı olarak Halep'te oluşturulması kararlagtırılan Yedinci Ordu Komutanlığı'na atanması.

Temmuz 1917
Atatürk'ün Diyarbakır'dan ıstanbul'a hareketi (7.0rdu Karargâhı'nı oluşturmak üzere Başkomutan Vekili Enver Paşa tarafından ıstanbul'a çağrılmıştır.)

Temmuz 1917
Atatürk'ün Diyarbakır'dan ıstanbul'a gelişi

15 Ağustos 1917
Atatürk'ün ıstanbul'dan Halep'e hareketi (7.0rdu Karargâhı Halep'in Aziziye mevkiinde idi.)

20 Eylül 1917
Atatürk'ün, Halep'ten -genel durum değerlendirmesi ve General Falkenhein ile anlaşmazlığına dair- Sadrazam ve Dahiliye Nazırı Talât Paşa ile Başkomutan Vekili ve Harbiye Nazırı Enver Paşa'ya raporu

Ekim Başı l917
Atatürk'ün, -Yıldırım Orduları Komutanı General Falkenhein'le anlaşmazlık sonucu- Yedinci Ordu Komutanlığı'ndan istifa edişi

9 Ekim 1917
Atatürk'ün tekrar Diyarbakır'da bulunan 2. Ordu Komutanlığı'na atanması (Atatürk, bu atamayı kabul etmediğinden işlem yürürlülük kazanmamış, kendisi 2. Ordu Komutanı sıfatiyle izinli sayılarak Halep'ten ıstanbul'a gelmiştir.)

Ekim Sonu 1917
Atatürk'ün, Halep'ten ıstanbul'a dönüşü (9 ay kadar ıstanbul'da kalmıştır.)

7 Kasım 1917
Atatürk'ün, ıstanbul'da Genel Karargâhta görevlendirilmesi

15 Aralık 1917
Atatürk'ün, Veliaht Vahdettin Efendi'nin maiyetinde Almanya'ya gitmek üzere ıstanbul'dan ayrılışı

4 Ocak l918
Atatürk'ün Almanya seyahatinden ıstanbul'a dönüşü

13 Mayıs l9l8
Atatürk'ün, böbrek rahatsızlığı sebebiyle tedavi için ıstanbul'dan Viyana'ya hareketi (Viyana ve Karlsbat'ta 2,5 ay kadar tedavi görmüştür.)

4 Ağustos 19l8
Atatürk'ün Viyana'dan ıstanbul'a dönüşü

7 Ağustos l918
Atatürk'ün, General Falkenhein'in yerine Yıldırım Orduları Grubu Komutanlığı'na getirilmiş olan General Liman von Sanders'in emrindeki 7. Ordu'ya tekrar komutan atanması

15 Ağustos l918
Atatürk'ün, ikinci defa atandığı 7. Ordu Komutanlığı görevine başlamak üzere ıstanbul'dan Halep'e gelişi (Halep'te bir gün kaldıktan sonra 7. Ordu Karargâhı'nın bulunduğu Nablus'a gitmiştir. )

19 Eylül 1918
ıngilizlerin Halep Cephesi'nde büyük kuvvetlerle taarruza başlaması (Bu ıngiliz taarruzu karşısında 8. Ordu Cephesi'nin yarılması üzerine 4 ve 7. Ordular da çekilme mecburiyetinde kalmışlardı. Atatürk komutasındaki 7. Ordu birlikleri düzenini ve savaş kudretini bozmadan Riyad'a, oradan da Halep'e çekildi.)

26 Ekim l9l8
Atatürk komutasındaki 7. Ordu kuvvetlerinin tekrar taarruza geçen düşman kuvvetlerini Halep'in kuzeyinde durdurması ve düşmanın bu hattı geçmesine imkân verilmemesi

30 Ekim 1918
Mondros Mütarekesi'nin imzalanması

31 Ekim 1918
Atatürk'ün -7.0rdu Komutanlığı da üzerinde kalmak üzere- Yıldırım Orduları Grubu Komutanlığı'na atanması ve Katma'dan Adana'ya gelerek General Liman von Sanders'den komutanlık görevini devralması

7 Kasım 1918
Yıldırım Orduları Grubu ve 7.0rdu Komutanlıklarının kaldırılması ve Atatürk'ün Ordu Kumandanı sıfatiyle Harbiye Nezareti emrine verilmesi

10 Kasım 1918
Atatürk'ün Adana'dan trenle ıstanbul'a hareketi

13 Kasım 1918
Atatürk'ün, Adana'dan ıstanbul'a gelişi

Aralık 1918: Atatürk'ün,-1914 yılı Mayısında yazdığı- "Zâbit ve Kumandan ıle Hasbihal" adlı kitabının ıstanbul'da yayımlanması

30 Nisan 1919
Atatürk'ün 9.0rdu Kıtaatı Müfettişliği'ne atanması

16 Mayıs 1919
Atatürk'ün Anadolu'ya geçmek üzere Bandırma Vapuru i1e ıstanbul'dan ayrılısı... 

Katil,adamı ne ile öldürmüş olabilir?

Havuz kenarında bir cinayet işlenir.Olayı uzaktan gören bir kişi,ifadesinde; 'katil adama elindeki bir cisim ile saldırdı.Cismi birkaç d...