Fonksiyonlar #2 – C Programlama Dili
tr·@etasarim·
0.000 HBDFonksiyonlar #2 – C Programlama Dili
<center>http://etasarim.cloudaccess.host/wp-content/uploads/2019/03/c-programlama-dili-dersleri.jpg</center> <br/><p>C programlama dili serisinin bir <a href="http://etasarim.cloudaccess.host/26/03/2019/fonksiyonlar-1-c-programlama-dili-2/">önceki</a> dersinde fonksiyonlar konusuna giriş yapmıştık. Bir fonksiyonda bulunan elemanlardan bahsedip kullanıcı tarafından yazılan fonksiyonların kullanımı için neler yapılması gerektiğine değindik.</p> <p>Fonksiyon bildiriminin aslında bir fonksiyonun prototipi olduğunu da ifade ettikten sonra bugünün dersine başlayabiliriz.</p> <blockquote class="wp-block-quote"><p> Fonksiyon bildirimlerinde eğer kullanılan fonksiyon kullanacak fonksiyondan önce getirilirse bu bildirime ihtiyaç kalmamaktadır. </p> </blockquote> <h3>Recursive Fonksiyonlar ( Kendi kendini çağıran fonksiyonlar)</h3> <p>Fonksiyonlarla alakalı yaptığımız uygulamalarda programın herhangi bir satırında istediğimiz fonksiyonu çağıran işlemler yaptık. </p> <p>C dilinde bunların dışında bir fonksiyonun kendini çağırması gibi uygulamalar da mevcuttur. Bunlara <em>recursive</em> ya da <em>öz yineli</em> fonksiyonlar denir.</p> <p>Şimdi recursive fonksiyonlarla alakalı en klasik örneği yaparak başlayalım: <strong><em>Faktoriyel Hesaplama</em></strong></p> <p> Uygulamanın <em>recursive</em> olmayan hali aşağıdaki gibidir :</p> <img src="https://steemitimages.com/p/C3TZR1g81UNaPs7vzNXHueW5ZM76DSHWEY7onmfLxcK2iPYmxJWTEE4jz2qin7EkpSivivewK5kmLAwHHakk1FSCEfHQJnw4L3oz3rFr69nUtcMGyQXsosC?format=match&mode=fit&width=640" alt=""/> <p>Uygulama en genel haliyle kullanıcıdan aldığı int sayının faktoriyel hesabını farklı bir fonksiyon aracılığı ile yapmaktadır. Çıktısı ise aşağıdaki gibidir :</p> <img src="https://steemitimages.com/p/C3TZR1g81UNaPs7vzNXHueW5ZM76DSHWEY7onmfLxcK2iPZM3RydrLnqXZApck2WVScEp1SWfMspv4KBqtFJuoUkYb5AKxRWPhFyGhaBXMGJSxNSruVjXae?format=match&mode=fit&width=640" alt=""/> <p>Şimdi bu uygulamanın <em>recursive</em> halini görelim :</p> <img src="https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmZkxvX76MW2iHnFdLd7ADUzz1kBA9PBYdgF1wNJtrqHdr/image.png" alt=""/> <p>Uygulamadaki <em>fact()</em> fonksiyonunda bir if yapısı dikkatimizi çekiyor. if sorgusunda faktoriyeli hesaplanacak olan sayı sıfır(0) ise 1 değeri döndürecektir. Bunun sebebi matematikte 0! = 1 olmasıdır. else kısmına geldiğimizde ise </p> <p><em>return a * fact(a-1); // n! = n.(n-1)!</em></p> <p>koduna rastlıyoruz. Burada fonksiyonun kendi içinde kendini çağırdığını görüyoruz. Mesela bize gelen sayı 4 olsun. İlk olarak</p> <p>4 * fact(3) döndürülecektir. Burada <em>fact(3)</em> ise<em> 3 * fact(2)</em> ile döneceğinden fact(3) yerine 3* fact(2) yazabiliriz. <em>fact(2)</em> ise <em>2 * fact(1)</em> ile döneceğinden fact(2) yerine de <em>2 * fact(1)</em> yazabiliriz. fact(1) ise <em>1* fact(0)</em> ile döneceğinden fact(1) yerine de <em>1 * fact(0)</em> yazabiliriz. fact(0) = 1 dir. Bunları yerine koyarsak :</p> <p>4* (3*2*1*fact(0)) </p> <p>işleminin sonucu zaten bize 4 faktoriyeli verecektir.</p> <p>Görüldüğü gibi sanki bir döngü varmışçasına işlem yapıldı. Zaten <em>recursive </em>fonksiyonlar döngülerin alternatifidir. </p> <p>Özyineli fonksiyonlara her yerde rastlamazsınız. Tipik kullanım alanları mevcuttur, faktoriyel hesaplama gibi. </p> <img src="http://etasarim.cloudaccess.host/wp-content/uploads/2019/03/yesil-ayrac.png" alt="" class="wp-image-1624"/> <p>Şimdi de daha farklı ama anlamlı bir uygulamasını görelim :</p> <img src="https://steemitimages.com/p/C3TZR1g81UNaPs7vzNXHueW5ZM76DSHWEY7onmfLxcK2iP5GaPoeVvYvWveJfJVW3cisncs51RpTcVmyzPFzWaDPqdTnhF59npY3M4rdbij5i3u33ua89zv?format=match&mode=fit&width=640" alt=""/> <p>Uygulamamızın başında <em>carrayad[20]</em> ve <em>carraysoyad[20]</em> adında <em>char</em> tipinde iki dizi tanımladık. Ayrıca <em>cvar</em> adında <em>char</em> tipinde bir değişken tanımladık.</p> <blockquote class="wp-block-quote"><p><em>conio.h</em> kütüphanesi <em>getch()</em> fonksiyonundan dolayı,</p><p><em>ctype.h</em> kütüphanesi <em>toupper()</em> fonksiyonundan dolayı koda dahil edildi.</p> </blockquote> <p>Sonrasında kullanıcıdan ad ve soyad bilgisini girmesi istenilmektedir ve girilen bilgiler <em>gets()</em> fonksiyonu ile bu dizilere alınmaktadır. Sonraki printf() fonksiyonları ile ise kullanıcının girdiği bilgiler kullanıcıya gösterilmekte ve girdiği bilgilerin doğru olup olmadığı sorulmaktadır.</p> <p>Kullanıcıdan bir karakter girmesi beklenilmektedir. Girilen karakter <em>getch()</em> fonksiyonu ile alındığından enter a basılmasını beklememektedir. <em>getch(</em>) fonksiyonu ile alınan karakter <em>toupper()</em> fonksiyonu ile büyük harfe dönüştürülüp <em>cvar</em> değişkenine atanmaktadır.</p> <p>Sonrasında gelen <em>if</em> sorguları ise <em>cvar</em> değişkeninin içeriğini sorgulamaktadır. Girilen karakter <em>'H'</em> ise bu fonksiyon <strong><em>tekrar kendini çağıracak</em></strong> ve bu bilgileri baştan girmesi istenecektir.</p> <p>Girilen karakter <em>'E'</em> ise <em>"Bilgileriniz alındı.. Teşekkürler"</em> yazısı gözükecektir.</p> <p>Eğer kullanıcı bu karakterler dışında bir karakter girdiyse <em>"Hatalı bir karakter girdiniz. Program sonlandırılıyor"</em> yazısı ile uygulama sonlandırılacaktır.</p> <p>Uygulamamızın işleyişi bu şekildedir. Çıktımız aşağıdaki gibidir :</p> <img src="https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmYk3CxsW3zUzovL168PmTomT2i4q3vbunuJ82GLnoxMWM/image.png" alt=""/> <img src="http://etasarim.cloudaccess.host/wp-content/uploads/2019/03/yesil-ayrac.png" alt="" class="wp-image-1624"/> <p>Hazır uygulamada da kullanmışken <em>ctype.h</em> kütüphanesi hakkında biraz bilgi verelim. İçeriğinde çokça kullanabileceğimiz fonksiyonları bulundurmaktadır.</p> <img src="http://etasarim.cloudaccess.host/wp-content/uploads/2019/03/ayrac-yukarı.png" alt="" class="wp-image-1616"/> <p><em>ctype.h</em> kütüphanesi C kütüphaneleri içinde bulunan ve karakterler üzerinde işlem yapmaya yarayan fonksiyonları barındıran bir kütüphanedir. Zaten ismi de buradan gelmektedir : char + type = ctype</p> <p>Karakterler üzerinde işlem yaptığı için özellikle karakter dizilerinde sıklıkla kullanılabilecek fonksiyonlara sahiptir. İçeriğinde fonksiyonları kullanabilmek için bu kütüphaneyi kaynak koda dahil etmek gerekir.</p> <blockquote class="wp-block-quote"><p>#include <ctype.h></p> </blockquote> <p>Bu önemli fonksiyonlar aşağıdaki gibidir :</p> <ul><li><strong>toupper :</strong> Girilen karakteri büyük harfe çevirir.</li><li><strong>tolower : </strong>Girilen karakteri küçük harfe çevirir.</li><li><strong>toascii :</strong> Girilen sayısal değerin ASCII tablosundaki karşılığını verir. <em>toascii(c) verilen numerik değerin ASCII toplasındaki karakter karşılığını verir. toascii(65) : A</em></li><li><strong>isascii : </strong>Girilen karakterin ASCII karakter olup olmadığını sorgular. <em>isascii(c) fonksiyonunda c; ASCII karakter ise sıfırdan farklı değilse 0 döndürür.</em></li><li><strong>isupper :</strong> Girilen karakterin büyük harf olup olmadığını sorgular. <em>isupper(c) fonksiyonunda c; A-Z arasında ise sıfırdan farklı, değilse 0 döndürür.</em></li><li><strong>islower :</strong> Girilen karakterin küçük harf olup olmadığını sorgular. <em>islower(c) fonksiyonunda c; a-z arasında ise sıfırdan farklı, değilse 0 döndürür.</em></li><li><strong>isdigit :</strong> Girilen karakterin sayı olup olmadığını sorgular. <em> isdigit(c) fonksiyonunda c; bir rakam ise 0'dan farklı değilse 0 döndürür.</em></li><li><strong>isxdigit :</strong> Girilen karakterin onaltılık tabanda bir sayı olup olmadığını sorgular.</li><li><strong>isspace :</strong> Girilen karakterin boşluk karakteri olup olmadığını sorgular.</li><li><strong>ispunct :</strong> Girilen karakterin imla karakteri olup olmadığına bakar.</li><li><strong>iscntrl :</strong> Girilen karakterin kontrol karakteri olup olmadığını sorgular.</li><li><strong>isgraph :</strong> Girilen karakterin yazıcıdan basılabilen bir karakter olup olmadığını sorgular. Ancak bu karakter boşluk olamaz.</li><li><strong>isprint :</strong> Girilen karakterin basılabilir bir karakter olup olmadığını sorgular.</li><li><strong>isalpha :</strong> Girilen karakterin alfabetik bir karakter olup olmadığını sorgular. <em> isalpha(c) fonksiyonunda c; bir harf ise 0'dan farklı bir değer, değilse 0 değerini döndürür. Ör kullanımı : isalpha('a') </em></li><li><strong>isalnum :</strong> Girilen karakterin alfa numerik bir karakter olup olmadığını sorgular. <em>isalnum(c) fonksiyonunda c; A-Z, a-z veya 0-9 arasında bir karakter ise 0'dan farklı değilse 0 döndürür. Ör kullanımı : isalnum('a')</em></li><li><strong>isblank : </strong>Girilen karakterin boşluk karakteri olup olmadığını sorgular.</li></ul> <img src="http://etasarim.cloudaccess.host/wp-content/uploads/2019/03/ayrac-as.png" alt="" class="wp-image-1615"/> <p></p> <p>Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.</p> <p>Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.</p> <img src="http://etasarim.cloudaccess.host/wp-content/uploads/2018/11/text-divider-kirmizi.jpg" alt="" class="wp-image-60"/> <p>Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.</p> <br /><center><hr/><em>Posted from my blog with <a href='https://wordpress.org/plugins/steempress/'>SteemPress</a> : http://etasarim.cloudaccess.host/29/03/2019/fonksiyonlar-2-c-programlama-dili/ </em><hr/></center>
👍 eforucom, sudefteri, neokuduk, literaturk, rasit, maveraunnehr, etasarim, tahirozgen, soteyapanbot, masum3800, fun2learn, nailyourhome, delegate4upvot, damla, murattatar, doctorbishop, hosgeldin, idiosyncratic1, hozn4ukhlytriwc, maonx, pet.society, nikaja, cocukgelisimi, steem-plus, steempress, steempress-io, jayna, ruen, we-are-asia, minnowsupport,