Fonksiyonlar #2 – C Programlama Dili

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@etasarim·
0.000 HBD
Fonksiyonlar #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&amp;mode=fit&amp;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&amp;mode=fit&amp;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&amp;mode=fit&amp;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&nbsp;
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 &lt;ctype.h&gt;</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>               
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,