Fonksiyonlar - 15 : Aritmetik işlemler

Uzun kodlar yazılmaya başlandığında bazı kod parçaları tekrar edilmeye başlar. Ayrıca çok uzun satırlar kodun okunmasını zorlaştırır. Hata çözmedeki verim bir hayli düşer. Bu sebeplerden dolayı her işi kendi fonksiyonlarında yaptırmak daha doğru olur. Yani aritmetik bir işlem yapılırken aritmetik isimli bir fonksiyonda dört işlem yaptırmak yerine her işlem için ayrı bir fonksiyon yazmak daha doğru olur.

Daha önce yazdığımız dört işlem kodunu fonksiyonlarla ve birden fazla kez işlem yapabilecek şekilde genişletelim.


aritmetikfonksiyonlar.c
#include<stdio.h>
double topla (double sayi1, double sayi2); //prototipler
double cikar (double sayi1, double sayi2);
double carp (double sayi1, double sayi2);
double bol (double sayi1, double sayi2);

int main() {
    char islem;
    double sayi1, sayi2, sonuc;
    int bitir = 0;
 while(1)
 {
  printf("Islemi seciniz (+, -, *, /) cikis icin c: ");
  do{
          islem = getchar();
        }while (isspace(islem));
        if (islem == 'c')
        {
            break;
        }
 printf("Ilk sayiyi giriniz: ");
 scanf("%lf", &sayi1);
 printf("Ikinci sayiyi giriniz: ");
 scanf("%lf", &sayi2);
 switch(islem)
 {
 case '+':
                sonuc = topla(sayi1, sayi2);
  printf("%g + %g = %g\n",sayi1, sayi2, sonuc);
  break;

 case '-':
                sonuc = cikar(sayi1, sayi2);
  printf("%g - %g = %g\n",sayi1, sayi2, sonuc);
  break;

 case '*':
                sonuc = carp(sayi1, sayi2);
  printf("%g * %g = %g\n",sayi1, sayi2, sonuc);
  break;

 case '/':
                sonuc = bol(sayi1, sayi2);
  printf("%g / %g = %g\n",sayi1, sayi2, sonuc);
  break;

 default:
  printf("Islem gecersiz \n");
 }
    }
    return 0;
}

double topla (double sayi1, double sayi2) //fonksiyonlar
{
   return sayi1 + sayi2;
}

double cikar (double sayi1, double sayi2)
{
   return sayi1 - sayi2;
}

double carp (double sayi1, double sayi2)
{
   return sayi1 * sayi2;
}

double bol (double sayi1, double sayi2)
{
   return sayi1 / sayi2;
}
  

Daha önce scanf ile tek karakter yakalamanın problemli bir konu olduğu söyleyip bir link ile sunulan çözümler olabildiğinden bahsetmiştim. Bir önceki do while örneğini gördüğümüz için bu örnekte o çözümlerden birini kullanıyorum. Artık istediğimiz kadar karakter yakalayabiliyoruz ve kullanıcının birden fazla işlem yapmasına izin vermiş oluyoruz.

Hala kod problem yaşamaya açık. Çünkü kullanıcıdan sayı girmesini istiyoruz ve herhangi bir kontrolümüz yok. Bu kontroller için henüz örneğini görmediğimiz bir konuyu kullanmak gerektiği için şuan için geçiyorum.

Daha sonra fonksiyonları kullanarak işlemleri yapıyoruz. Burada kullanmadan önce elbette fonksiyonları yazmamız gerekiyor. Eğer fonksiyonları olduğu kod kaynağında kullanacaksanız, herhangi başka bir sayfadan bu fonsiyona ulaşım olmasına gerek duymuyorsanız burada yazdığım şekilde yazabilirsiniz. Önce sayfanın en altına fonksiyonu yazıp, içini doldurup fonksiyonun isminin olduğu satırı en üste header eklemelerinden sonra listeleyebilirsiniz. Bunlar fonksiyonların prototipi olup derleyici tarafından fonksiyonların çağrıldığı yerde tanınabilmesini sağlamış oluyor.

Fonksiyon yazılırken fonksiyonun dönüş değerinin tipi, fonksiyonun ismi ve parametreleri belirtiliyor.

Yukarıdaki örnekte fonksiyonların içi kısa ve mainden bir kez çağrılıyor. Bu yüzden fonksiyona ne gerek var diye düşünülebilir. Fonksiyonların içinin 100 satır ve main ya da başka bir fonksiyon içinde 3-5 kez çağrıldığını düşünürsek 300-500 satır kod yerine ~103 - 105 satır kod yazarak bu işi yapabilmiş olacağız.

Yorumlar

Bu blogdaki popüler yayınlar

31 : Fonksiyonda Struct Kullanımı

Structure - 29 : Yapılar ile Öğrenci Bilgileri Tutma

23 : İki Karakter Dizisini Birleştirme