Kayıtlar

Ocak, 2018 tarihine ait yayınlar gösteriliyor

32 - Call By Reference ve Call By Value

Fonksiyonlara veri geçirilirken iki method kullanılır: referans ile çağırma methodu ve değer ile çağırma methodu. Bu methodlar ayrıca pass-by-reference ve pass-by-value olarak da isimlendirilirler. Call by value methodunda data fonksiyona geçirildiğinde geçirilen verinin bir kopyası oluşturulur. Çağrılan fonksiyon bu kopya ile çalışırken geri dönüşte çağıran fonksiyondaki asıl değişken, çağrılan fonksiyondaki yapılan işlemler nedeniyle oluşan değişikliklerden etkilenmez. Bu değişiklik sadece kopya üzerinde ve çağrılan fonksiyon içinde meydana gelir. #include <stdio.h> void call_by_value(int x) { printf("Fonksiyon icinde degisiklikten once x = %d \n", x); x += 10; printf("Fonksiyon icinde degisiklikten sonra x = %d \n", x); } int main() { int x = 10; printf("Fonksiyon cagrilmadan once ana fonksiyonda x = %d \n", x); call_by_value(x); printf("Fonksiyon cagrildiktan sonra ana fonksiyonda x = %d \n", x); return 0; } Öncelikl...

31 : Fonksiyonda Struct Kullanımı

Struct tipini fonksiyonlarda parametre ya da dönüş değeri olarak kullanabiliriz. Struct için fonksiyonda ekstra özel bir konu yok. Bir önceki yazıda kullandığımız özellikler ile fonksiyonlarda struct tipli değişkenleri kullanabiliriz. Bir fonksiyon ile mainde oluşturduğum bir ogrencinin bilgilerini dolduracağım. Daha sonra bir fonksiyon ile bu ogrencinin adını ve soyadını yazdıracağım. Başka bir fonksiyon ile de numarasını ve not ortalamasını yazdıracağım. Adını yazdırdığım fonksiyona parametre olarak structı verirken numarasını yazdırdığım fonksiyona parametre olarak structın adresini vereceğim. Bu iki kullanım arasında farklar var. Bu farkları başka bir yazıda açıklamaya çalışacağım. Bu yazıda sadece bu farkların sözdiziminde nasıl görüldüğünü göstereceğim. #include <stdio.h> #include <string.h> typedef struct ogrenci { char ad[50]; char soyad[50]; int numara; float not; }ogrenci; ogrenci bilgiDoldur(); void adSoyadYazdir(ogrenci bilgi); void notNumaraYa...

30 : Struct Tipinde Pointer

Bir struct değişkeni pointer olarak da tutulabilir. Bir önceki yazıda bir öğrenci bilgisi tutmayı görmüştük. Şimdi aynı kodda struct tipinde pointer kullanarak tekrar yazalım. #include <stdio.h> #include <string.h> typedef struct ogrenci { char ad[50]; char soyad[50]; int numara; float not; }ogrenci; int main() { ogrenci *ogrenci1 = malloc (sizeof(struct ogrenci)); ogrenci *ogrenci2 = malloc (sizeof(struct ogrenci)); if (ogrenci1 == NULL || ogrenci2 == NULL) { printf("Ogrenciler olusturulamadi \n"); return 0; } strcpy(ogrenci1->ad, "ad1"); strcpy(ogrenci1->soyad, "soyad1"); ogrenci1->numara = 55; ogrenci1->not = 3.5; strcpy(ogrenci2->ad, "ad2"); strcpy(ogrenci2->soyad, "soyad2"); ogrenci2->numara = 77; ogrenci2->not = 1.2; printf("Ogrenci 1 adi : %s \n", ogrenci1->ad); printf(...

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

Dizilerde aynı tipteki basit verileri gruplayabiliyoruz demiştik. Şimdi ise birbirinden farklı tiplerdeki veriler gruplayacağız. Sıkça kullanılan bir örnek olan öğrenci bilgileri üzerinden örnekleyelim. Bir öğrencinin adını, soy adını, numarasını ve not ortalamasını saklayacak bir yapı kuralım. struct ogrenci { char ad[50]; char soyad[50]; int numara; float not; }; Bu şekilde bir yapı tanımladık ve bu yapıyı kullanarak bir değişken oluşturup bu değişkeni dolduracağız. #include <stdio.h> #include <string.h> struct ogrenci { char ad[50]; char soyad[50]; int numara; float not; }; int main() { struct ogrenci ogrenci1; strcpy(ogrenci1.ad, "ad1"); strcpy(ogrenci1.soyad, "soyad1"); ogrenci1.numara = 55; ogrenci1.not = 3.5; struct ogrenci ogrenci2; strcpy(ogrenci2.ad, "ad2"); strcpy(ogrenci2.soyad, "soyad2"); ogrenci2.numara = 77; ogrenci2.not = 1.2; ...

28 : CPP Dilinde new Operatörü ile Dinamik Dizi Oluşturma

cpp dilinde dinamik bellek kullanımı c diline göre daha kolay. Bir önceki örnekte c dilinde malloc yada calloc kullanarak bir dizi oluşturup rastgele sayılar atamıştık. Bunu cpp dilinde yapmak istersek new operatörü kullanabiliriz. new operatörü sadece dizi değil struct, class gibi birimleri de yaratmada kullanılabilir. Bu tiplerle örnekler yaptığımızda new operatörünün nasıl kullanıldığını da inceleyeceğiz. Yine aynı şekilde bir dizi üretip rastgele sayılar atayıp bastıracağız. Sadece kaç adet sayı olacağını kullanıcıdan isteyeceğiz. dinamiknew.cpp #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i, num; int *data; time_t t; printf("Kac adet sayi olusturulsun: "); scanf("%d", &num); data = new int[num]; if(data == NULL) { printf("Hata!! Bellek yetersiz \n"); exit(0); } srand((unsigned) time(&t)); for(i = 0; i < num; ++i) { ...

27 : Dinamik Bellek Kullanımı

Daha önce diziler konusunda diziler kullanılırken bir sınır belirtmek gerektiğini söylemiştik. Örneğin kullanıcıdan sayı girmesi istenilecekse olabilecek bir maximum değer öngörülüp dizi tanımlanırken bu değer kullanılır. #define MAX 1024 int dizi[MAX]; Buna alternatif olarak belleği dinamik olarak da ayırıp kullanabiliriz. Program çalışırken bellekten belli bir bölüm ilgili iş için kullanılıp daha sonra boşaltılabilir. Burada dikkat edilmesi gereken kullanacağımız belleğin gerçekten ayrılmış olmasını kontrol etmek ve kullandıktan sonra gerekiyorsa ilgili alanı boşaltmak. Kontrol etmediğimiz takdirde belleğin ayrılamaması durumunda programın sonlanması; boşaltmamamız durumunda ise "memory leak" denilen belleğin tükenmesi sorunuyla karşılaşırız. Nasıl kullanıldığını görmek için bir örnekle kullanıcıdan bir miktar girmesini isteyip bu miktarda rastgele sayı oluşturup yazdıralım. dinamik.c #include <stdio.h> #include <stdlib.h> #include <time.h> int...