• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.
  • Sohbetokey.com ile canlı okey oynamaya ne dersin? Hem sohbet et, hem mobil okey oyna!
  • Soru mu? Sorun mu? ''Bir Sorum Var?'' sistemimiz aktiftir. Paylaşın beraber çözüm üretelim.

iOS Eğitimlerine Başlarken...

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
[FONT=Segoe UI, Candara, DejaVu Sans, Trebuchet MS, Tahoma, Verdana, sans-serif]iOS Eğitimlerine Başlarken...
iOS platformuna mobil uygulama geliştirirken kullanılacak en temel programlama dili Objective-C'dir. Objective-C, C dilini temel alan ve sonradan Nesne Yönelimli (Object Oriented) hale getirilen ve Apple şirketi tarafından tüm cihazlarda kullanılan büyük bir ekosistemdir.
iOS platformuna geliştirme yapabilmek için eğitimleri 4 başlıkta sıraladık.
  • iOS 101 eğitiminde; temel C bilgisine sahip olmanız, C, C++ ve Objective-C uygulamalarını bilgisayarınızda çalıştırabilmeniz hedeflenmektedir. Objective-C dünyasıyla ilk kez tanışacaklar için hem dilin temel kavramları hem de uygulamaya yönelik kod örnekleriyle birlikte bir anlatım esas alınmıştır.
  • iOS 201 eğitiminde; iOS platformunun ayrıntılarına ve geliştirme ortamına değinilmiştir. Platform özelinde bilgiler, cihazların özellikleri ve iOS için geliştirme ortamının kurulumu anlatılmıştır.
  • iOS 301 eğitiminde; artık Objective-C ve iOS platformu hakkında bilgi sahibi olan kişilerin bu bilgilerini bir araya getirerek, ilk iOS uygulamalarını yazmaları amaçlanmıştır. Geliştireceğiniz uygulamalara yönelik çeşitli yazılımlar ve bunların uygulamalarınıza nasıl aktarılacağı ise eğitimlerin içerisinde örnek kodlarla paylaşılmıştır.
  • iOS 401 eğitimi; iOS programlamayı bir üst basamağa taşıyan, ileri seviye bilgiler içermektedir. Paylaşılan kod örnekleriyle uygulamanıza ekleyebileceğiniz yeni özellikler, iOS platformunun gelişmiş özelliklerinden yararlanabilmeniz içindir.
İleri seviye eğitimlerde sizler için yazdığımız örnek uygulamalar üzerinde rahatça çalışabilmeniz ve kendi uygulamalarınızı üzerine inşa edebilmeniz adına hazırladığımız Xcode proje çıktıları eğitim sayfalarının sol sütununda 'kodları indir' seçeneğinde .zip formatında paylaşılmıştır.
[/FONT]
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
IDE (Integrated Development Environment) olarak Apple sadece Mac OS X işletim sisteminde çalışan Xcodeadlı yazılım geliştirme platformunu tercih etmektedir. Başarılı bir ortam sunanXcode ile iPhone ve iPad uygulamalarının yanı sıra Apple bilgisayarlarda çalışmak üzere Mac OS X uyumlu programlar da geliştirebilirsiniz. Geliştirdiğiniz programları iPhone simulatörlerinde test edebilir, gerçek bir cihaz üzerinde karşılaşılabilecek çeşitli durumları (bellek kaçakları, cihazın yatay konumda tutulması vb.) inceleyebilirsiniz. Ne yazık ki, Xcode’un Linux ve Windows işletim sistemleri için ayrı bir sürümü bulunmamaktadır. Bu yüzdenXcode ile geliştirme yapacaksanız, Mac OS X yüklü bir bilgisayarda çalışmak durumundasınız.

Xcode Geliştirme Ortamı'nın Yüklenmesi

Önceki sürümlerde http://developer.apple.com üzerinden yayımlanan Xcode programı, Mac OS X‘ler üzerinde AppStore uygulama dükkanının açılmasından sonra AppStore üzerinden dağıtılmaya başlanmıştır.


Herhangi bir ücret ödemeden yükleyebileceğiniz Xcode, AppStore linkini tıkladıktan sonra otomatik olarak bilgisayarınıza yüklenecektir.


AppStore simgesine tıklayıp uygulamayı açtıktan sonra Xcode anahtar kelimesiyle arama yaptığınızda Xcode programı ekrana gelecektir:



Free düğmesine tıklayarak yükleme işlemini başlatabilirsiniz. Uygulama ücretsizdir. Yükleme bittikten sonra Spotlight’ta Xcode diye aratarak ya da Uygulamalar (Applications) içinden Xcode’u çalıştırabilirsiniz.



Xcode PROGRAMININ KULLANIMI

Xcode programını ilk kez çalıştırdığınızda karşınıza şöyle bir ekran gelecektir:


Create new Project seçeneği aşağıdaki sihirbazı çalıştıracak ve bu sihirbazın sol ekranında projenizin hangi platformda çalışacağını seçmeniz istenecektir:


Sol taraftaki seçeneklerden iOS altında yer alan menüler iPhone ve iPad uyumlu projeleri oluşturmanızı sağlar. OS X altındaki seçenekler ise Apple’ın MacBook ve iMac’lerde kullandığı Mac OS X masaüstü işletim sistemi ile ilgili projeleri oluşturmak içindir.
Ancak iOS 101 eğitiminde temel Objective-C bilgileri öğreneceğimiz için şimdilik sadece sol sütunda yer alan OS X başlığı altında Command Line Tool seçeneğiyle basit alıştırmaları yapabiliriz. Eğitimlerin ilerleyen bölümlerinde komut satırı aracından daha gelişmiş ortamlarda çalışmaya başlayacağımızı ise şimdiden hatırlatalım.
ÖNEMLİ UYARI:
Xcode ortamı ilk projenizi oluştururken aşağıdaki gibi bir ekranla sizden bazı bilgiler isteyecektir. Bu bilgiler, projenizin adı ve sahibi şeklindedir ve istediğiniz adları girebilirsiniz fakat sizlere eğitimin ilerleyen kısımlarında verdiğimiz örnek kodları hatasız çalıştırabilmek adına şimdilik Automatic Reference Counting özelliğini devreden çıkarmanızı öneririz.


Eğer herhangi bir projenizin giriş kısmında ARC özelliğini devre dışı bırakmadıysanız ya da sonrasında aktif hale getirmek isterseniz de, Xcode proje ekranınızda aşağıdaki ekran görüntüsünde olduğu gibi Build Settings sekmesinden bu özelliği yeniden ayarlayabilirsiniz:


Xcode'da ilk projemizi bu şekilde oluşturduktan sonra karşımıza şöyle bir ekran gelecektir:



Sol sütunda ilk oluşturduğumuz deneme projemizin klasörleri yer alır. Burada yer alan main.h klasörü ilk basit uygulamalarımızı test edebileceğimiz yerdir (Bu klasörlerin ne anlama geldikleri ise sonraki konularda anlatılacaktır). iOS 101 anlatımlarında yer alan tüm kodları buraya yazarak deneyebilirsiniz.
Xcode bize ilk uygulamamızı yazmadan önce hazır Hello World! uygulaması sunar. Sizinde main.hklasörünü ilk açtığınızda göreceğiniz bu kodlar, bu Hello World! uygulamasına aittir. Hemen bu uygulamayı, sol üst köşede yer alan Run düğmesini kullanarak çalıştırabiliriz. Uygulamamız eğer hatasız bir şekilde derlendiyse, Xcode'un altında ise çalışan bu uygulamanın ekran çıktısını görebiliriz:

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){ @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); } return 0;}
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Objective-C dili; Cocoa, GNUstep gibi bazı standartlaşmış kütüphane ve frameworklerin bir araya gelmesi ile oluşmuştur. Bu kütüphaneler genellikle işletim sistemiyle birlikte gelirler. Örneğin, GNUstep kütüphanesinin GNU/Linux, Cocoa kütüphanesinin OS X ile gelmesi gibi. Kütüphane kullanmanın genelde amacı, geliştirilen yazılıma çeşitli özellikler ekleyebilmektir. Önceden hazırlanmış kütüphaneleri kullanabileceğiniz gibi sizlerde yeni kütüphaneler hazırlayabilirsiniz. Birçok hazır C kütüphanesi vardır ve sizlerde bunları araştırarak ihtiyacınıza göre uygulamalarınızda kullanabilirsiniz. Ancak iOS eğitimlerinde bizlerinde sıkça başvurduğu en temel kütüphaneleri aşağıda açıkladık. Örnek verdiğimiz bu kütüphaneler hemen hemen tüm programlamalarda kullanılan en temel C ve Objective-C kütüphaneleridir ve eğitimlerin içeriğinde sıkça yer almaktadır.

<stdio.h>

Nedir?
stdio.h, C/C++ programlama dillerinde kullanılan dosya giriş/çıkış işlemlerini gerçekleştirmeye yarayan en temel C kütüphanelerden biridir. İsmi, C Standart Input and Output Library (cstdio.h, bilinen adıyla stdio.h)'den gelmektedir.

Ne işe yarar?
Bu kütüphane ile klavye, yazıcı gibi fiziksel aygıtlardan ya da sistem tarafından desteklenen dosyalardan veri çekebilir veya aygıtlara ve dosyalara veri yollayabilirsiniz.

Kullanımına Örnek

#include <stdio.h>main(){ printf("Merhaba, Ben C");}


<foundation.h>

Nedir?
foundation.h, Objektive-C dilinde temel sınıfları barındıran bir kütüphanedir. Temel sınıfların yanında birçok kullanışlı obje sınıflarını da barındırır.

Ne işe yarar?
foundation.h size, basit dizilerden dosya işlemlerine, HTTP isteklerinden XML dosyalarından veri çekmeye kadar geniş bir temel araç sınıfı sağlar. Tutarlı sınıflarla yazılım geliştirmeyi kolaylaştırır, metinsel değişkenlerde evrensel karakterleri (Unicode strings) ve nesne kalıtımını destekler.

Kullanımına Örnek

#import <Foundation/Foundation.h>int main (int argc, const char * argv[]){ NSLog (@"Merhaba, Ben Objective-C");}

Bu içeriği nasıl buldunuz?


 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Objective-C'de Sınıf Arayüzü (Class Interface) Nasıl Tanımlanır?



Bir sınıf tanımlamak için main fonksiyonunun dışına yazılıp kullanılacak kod dizimi aşağıdaki gibidir:

@interface YeniSınıfAdı: AnaSınıf{ SınıfDeğişkenleri(ClassMembers);}SınıfMetotları(ClassMethods);@end

Sınıf metotları ise çağrıldıklarında belirli bir işlevi yerine getiren fonksiyonlardır. Dikdortgen adlı sınıfımızın genel görünümü aşağıdaki gibidir:

@interface Dikdortgen: NSObject { } @end

NSObject, üretilecek tüm yeni sınıflar için ana sınıftır. Şimdi, bu sınıfa bazı sınıf değişkenleri ekleyelim:
SINIFA DEĞİŞKENLER EKLEMEK

Nesne Yönelimli Programlama'nın temel kavramlarından biri veri paketleme (data encapsulation)özelliğidir. Bu özelliği açıklarsak; veri sınıf içinde saklanır ve bu veriye ancak o sınıfın metotları sayesinde erişilerek işlem yapılır. Paketlenmiş veri aslında örnek değişkenlerden (instance variables) oluşur. Aşağıda tanımlanan DikDortgen adlı sınıfta bu değişkenler genişlik ve uzunluktur.

@interface DikDortgen: NSObject{ double genislik; double uzunluk;}@end
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
NSAutoreleasePool Sınıfı



Sizlerle paylaştığımız örnek kodların tamamına yakınında aşağıdaki kod satırlarıyla karşılacaksınız:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];/*Sizlerle paylaştığımız örnek uygulamaların kodlarını burada göreceksiniz*/[pool drain];
Bu kodların ne işe yaradıklarına değinmekte fayda var. NSAutoreleasePool sınıf özelliği olarak adlandırabileceğimiz bu kodlar, uygulamalarınızın çalıştırılırken bilgisayarınızda daha az yer kaplaması için girilmektedir. Eğitimlerin başından itibaren, basit ve yer kaplamayacak uygulamalarda dahil olmak üzere, bu kodları girmemizin sebebi; bundan sonra yazacağınız daha geniş kapsamlı uygulamalarda bu özelliği kullanmanızın alışkanlığını kazanmanız içindir. Bu kodlar sistemde; programınızın çalışacağı yeri alır, çalıştırır ve sonrada sisteme geri verir. Bu konuyla ilgili daha detaylı anlatım için ilgili dokümanlara İngilizce olarak ulaşabilirsiniz.
Son olarak, isterseniz bu kodları tüm verdiğimiz örneklerden çıkarabilir ya da kendi geliştireceğiniz uygulamalarda hiç yer vermeden de kullanabilirsiniz. Nasıl yapabileceğinizi ise Objective-C Geliştirme Ortamının Kurulumu'nda bulabilirsiniz.
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Sınıfa Ait Metotların Tanımlanması



Objective C’de iki tür metot mevcuttur:
  • Sınıfa ait metotlar (CLASS METHODS)
  • Örneğe ait metotlar (INSTANCE METHODS)
Sınıfa ait metotlar sınıf düzeyindeki işlemlerde geçerlidir; örneğin sınıftan bir örnek oluşturmak gibi. Örneğe ait metotlar ise örnek düzeyindeki işlemlerde geçerlidir. Sınıf metotlarının bildiriminde en başta bir + işareti bulunur. Örnek metodları ise bir işareti ile başlar. Bir değer gönderen metotlar Objective C’de geçerli olan bir veri tipi bildirimi ile başlar. Herhangi bir metoda ait bir argüman (metoda gönderilen değer), metot ismini izleyen iki nokta :)) sembolünden sonra belirtilir. Argümanın tipi ise parantez içine alınmalıdır. Değer göndermeyen metotlar ise void tipindedir.


ÖRNEK:
–(void) ogrenciNo: (long) y;
Burada tanımlanan ogrenciNo adlı metot y adlı long tipinde bir argüman almaktadır. Metot, işareti ile başladığı için bir örnek metodudur. Ayrıca void tipinde olduğu için kendisini çağıran programa değer göndermez.
Aşağıda daire adlı bir sınıf, değişkenleri ve metotları ile tanımlanmaktadır:


@interface daire: NSObject{ double yaricap; }-(void) setYaricap: (double) a;-(double) alan;-(double) cevre;@end

Burada, daire adlı sınıfın double türde yaricap adlı bir üye değişkeni ile void tipi bir örnek metodu vedouble türde iki adet örnek metodu mevcuttur. Double türdeki metotların her ikisi de argüman almamaktadır.
Bir başka örnekle durumu daha iyi anlamaya çalışalım:

@interface Fotograf : NSObject{ NSString* cekim; NSString* fotografci;}- cekim;- fotografci;@end
Burada Fotograf isminde bir interface tanımlayıp içine cekim ve fotografci nesnelerini yerleştirdik. Sonrasında ise cekim ve fotografci metotlarını oluşturduk. Bir sonraki örneğimizde ise bu metotlara dönüş parametresi ekleyelim:

@interface Fotograf : NSObject{ NSString* cekim; NSString* fotografci;}- (NSString*) cekim;- (NSString*) fotografci;@end

Bu NSString* metod'un döndüreceği parametre türünü belirlemiş oldu.
Dilerseniz yukarıda paylaştığımız iki kodun da ilk satırına
#import <Cocoa/Cocoa.h>kütüphanesini ekleyerek, Xcode ortamında çalışmasını sağlayabilirsiniz.
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Sınıf Gerçekleştirimi



Sınıfın gerçekleştirim (implementation) kısmı aşağıdaki yapıya sahiptir:

@implementation SınıfAdıSınıfMetodları@end

Buna göre daire adlı sınıfın gerçekleştirim kısmı aşağıdaki gibi olacaktır:

@implementation daire-(void) setYaricap: (double) a{ yaricap = a;}-(double) alan{ return 3.14159*yaricap*yaricap;}-(double) cevre{ return 2*3.14159*yaricap;}@end
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Sınıftan Bir Örnek Oluşturma

Daire adlı sınıftan d1 adlı bir örnek oluşturmak için aşağıdaki formülü kullanmalıyız:
daire *d1;

Bir sonraki aşamada sınıf örneği için bellek tahsisini gerçekleştiriyoruz:

d1=[daire alloc];
alloc, NSObject sınıfından miras alınan bir sınıf metodudur.

Sonrasında örneğimizin başlangıç durumunu init (initialization)metodu ile oluşturuyoruz:
d1=[d1 init];

Bu üç adımı tek bir adımda da gerçekleştirebiliriz:

daire *d1=[[daire alloc] init];

İşlemler bitince kullanılan belleği iade etmek içinse release metodunu kullanıyoruz:

[d1 release];
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Metotları Çağırma



d1 adlı sınıf örneğinin yaricap adlı üye değişkenine değer atamak için setYaricap metodunu aşağıdaki gibi çağırabiliriz:
ÖRNEK PROGRAM
Aşağıda listesi verilen programda daire adlı sınıf tanımlanarak bu sınıftan d1 adlı bir örnek oluşturuluyor. Daha sonra d1’in yarıçapı 5 olarak atanıp, bu dairenin alanı ve çevresi hesaplanarak yazdırılıyor:
#import <Foundation/Foundation.h>@interface daire: NSObject{ double yaricap;}-(void) setYaricap: (double) a;-(double) alan;-(double) cevre;@end@implementation daire-(void) setYaricap: (double) a{ yaricap = a;}-(double) alan{ return 3.14159*yaricap*yaricap;}-(double) cevre{ return 2*3.14159*yaricap;}@endint main (int argc, const char * argv[]){ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; daire *d1=[[daire alloc] init]; [d1 setYaricap:5]; NSLog(@"Alan= %f, Çevre = %f", [d1 alan], [d1 cevre]); [pool drain]; return 0;}
Burada [d1 setYaricap:5] kısmında setYarıcap : kısmını değiştirerek farklı sonuçlar görebilirsiniz.
Not: Kullandığınız Xcode ortamında daha önceden bazı değişiklikler yaptıysanız, yukarıdaki kodun çalışmaması olasıdır. Bu yüzden Xcode Build Settings kısmından Objective-C Automatic Reference Counting değeri "No" yapılmalıdır.
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Arayüz ve Gerçekleme Dosyalarını Ayırma



Bir önceki 'Metotları Çağırma' başlığında, programda sınıfla ilgili tanımlar ve sınıftan örnek oluşturma işlemlerinin hepsi tek bir kaynak dosya içinde bulunuyor. Oysa bunları ayırırsak daha iyi bir programlama gerçekleştirmiş oluruz.

Aşağıdaki interface kısmını daire.h adlı bir dosyada saklayalım:


#import <Foundation/Foundation.h>@interface daire: NSObject{ double yaricap;}-(void) setYaricap: (double) a;-(double) alan;-(double) cevre;@end

implementation kısmını ise daire.m adlı dosyada aşağıdaki gibi oluşturalım:

#import "daire.h"@implementation daire-(void) setYaricap: (double) a{ yaricap = a;}-(double) alan{ return 3.14159*yaricap*yaricap;}-(double) cevre{ return 2*3.14159*yaricap;}@end

Son olarak örneğin hesapDaire.m adıyla aşağıdaki dosyayı oluşturalım:

#import "daire.h"int main (int argc, const char * argv[]){ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; daire *d1=[[daire alloc] init]; [d1 setYaricap:5]; NSLog(@"Alan= %f, Çevre = %f", [d1 alan], [d1 cevre]); [pool drain]; return 0;}
Şimdi, örneğin Mac OS için 'gcc' derleyicisinde aşağıdaki derleme komutunu girelim:
gcc -framework Foundation daire.m hesapDaire.m -o hesapDaire

Bunun sonucunda hesapDaire dosyası çalıştırılabilir hale gelmiştir. Bu dosyayı çalıştırarak sonuçları görebiliriz.

GCC Nedir?

GNU Compiler Collection (GNU Derleyici Koleksiyonu, genelde GCC olarak kısaltılır), GNU Projesi tarafından üretilen ve çeşitli programlama dillerini destekleyen bir derleyici sistemidir. GCC ile C/C++, Objective-C, Fortran, Java, Ada, Go ve daha bir çok kütüphaneyi derleyebilirsiniz. Aynı zamanda GCC; GNU/Linux, BSD ailesi ve Mac OS X gibi işletim sistemlerinin de standart derleyicisidir. GCC, neredeyse tüm mimarilerde çalışan; ticari, perakende ve kapalı kaynak yazılım geliştirme ortamlarında da sıkça kullanılan bir derleyicidir. Son olarak, Xcode ortamında çalışırken de bu derleyicinin kullanıldığını belirtelim.
Xcode Üzerinde Arayüz ve Gerçekleme Dosyalarını Ayırma

Bu kodları ayrı ayrı dosyalarda kaydedip sonra da Terminal üzeride derlemek uzun ve zahmetli bir iştir. Bu işlemleri çok daha kolay ve pratik bir şekilde Xcode Geliştirme Ortamı üzerinden de gerçekleştirebiliriz.
Önce aşağıdaki gibi Xcode programında sol sütunda yeni bir dosya açıyoruz.

Açılan yeni pencereden boş bir dosya oluşturma seçeneğini seçip ilerlediğimizde,

karşımıza gelen kayıt penceresinde, yazacağımız arayüz ya da gerçekleme dosyasını istediğimiz isimle belirtiyoruz. (örneğin burada daire.h adıyla kayıt ediliyor)


Bu şekilde tüm diğer dosyaları uygulamamızın yoluna ekleyebilir ve kodlarımızın çıktısını Xcode üzerinden alabiliriz:
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Objective-C Dilinde Veri Tipleri, İşlem Operatörleri ve Çeşitli İfadeler



Objective C dilinde ifadeler (expressions); işlem operatörleri, değişken (variable) ve sabitlerin (constant) geçerli kullanımı ile oluşturulur. Bu ifadelerin detaylı anlatımları, örnek kodlarla birlikte bu başlıkta anlatılmıştır.
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Sabitlerden Oluşan İfadeler



Objective-C dilinde ifadeler (expressions); işlem operatörleri, değişken (variable) ve sabitlerin (constant) geçerli kullanımı ile oluşturulur.
Sabitlerden oluşan ifadeler, sadece sabit ve operatör içerirler:
17 + 2
3
'b' – 200 / 3 gibi.
Burada ilk ifadenin sonucu 19 sabitidir. İkinci ifade zaten sadece 3 sabitinden oluşuyor. Üçüncü ifadenin sonucu ise b karakterinin ASCII kodu 98 olduğu için 98-200/3 şeklinde hesaplanacaktır. Önce bölme yapılacağı için 200/3’ün sonucu 66 olarak bulunacaktır; çünkü iki tamsayı arasındaki işlemin sonucu daima bir tamsayıdır.
Bu durumda sonuç;
'b'–200/3=98–66=32
olarak hesaplanacaktır. Bu sonucu elde eden ve yazdıran Objective-C programı aşağıdadır:

#import <Foundation/Foundation.h> int main(int argc,const char *argv[]){ NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; NSLog( @"\n'b'-200/3=%i",'b'-200/3); [pool drain]; return 0;}
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
int Türü İfadeler



int türünde tamsayı sabit ya da değişken içeren ifadeler, sonuçta tamsayı (int) değer üretecektir. Örneğin;
int a,b,c;
a=9;
b=12;
c=13;
şeklindeki atamalar ile,
a + b / c
ifadesi,
9+12/13=9+0=9 olarak hesaplanacaktır.

12 ve 13’ün int türünde olduğunu ve bu nedenle 12/13 işleminin sonucunun da int türünde olacağını ve 12/13’ün int türündeki sonucunun da 0 olacağını hatırlatalım.
b – c % a + 'x' – 3 + (int) 8.7
ifadesi ise,
12–13%9+120–3+8
12–4+120–3+8=133
aşamalarından geçerek 133 olarak hesaplanır. 'x' karakter sabiti yerine onun ASCII kodu olan 120 değeri alınır. 13%9 ifadesi ise 13’ün 9 ile bölümünden elde edilecek olan kalanı hesaplar. (int) 8.7 ifadesi ise 8.7 ondalık sayısını int türüne yani 8’e dönüştürmektedir.
Aşağıdaki program bu hesaplamaları gerçekleştirmektedir:

#import <Foundation/Foundation.h> int main(int argc, char* argv[]){ NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; int a,b,c; a=9; b=12; c=13; NSLog(@"\na=%i b=%i c=%i",a,b,c); NSLog(@"\na + b / c=%i",a+b/c); NSLog(@"\n'x' in ASCII KODU=%i",'x'); NSLog(@"\nb - c %% a + 'x' - 3 + (int) 8.7=%d\n\n",b - c % a + 'x' - 3 + (int) 8.7); [pool drain]; return 0;}

PROGRAMIN ÇIKTISI:
a=9 b=12 c=13
a + b / c=32 'x' in ASCII KODU=120
b - c % a + 'x' - 3 + (int) 8.7=133
 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
float Türündeki İfadeler

Bazı ifadeler ise sonuç olarak float ya da double değer üreteceklerdir:

float x,y,z;double u;x=3; y=5; z=6;u=1.77272653;x + y / 3 - 8x * 3.52 / (float) 3x + u / 24

Aşağıdaki C programı yukarıdaki ifadelerin değerlerini yazdırıyor:

#import <Foundation/Foundation.h> int main(int argc, char* argv[]){ NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; float x,y,z; double u; x=3; y=5; z=6; NSLog(@"\nx=%f y=%f z=%f",x,y,z); u=1.77272653; NSLog(@"\nx + y / 3 - 8=%f",x + y / 3 - 8); NSLog(@"\nx * 3.5 - 2 / (float) 3=%f",x * 3.5 - 2 / (float) 3); NSLog(@"\nx + u / 2 - 4=%f\n\n",x + u / 2 - 4); [pool drain]; return 0;}

PROGRAMIN ÇIKTISI:
cikti.png

 

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
Gösterge İfadeleri



Gösterge (pointer) ifadeleri, bir adres değeri üreten ifadelerdir. Gösterge değişkeni içinde sadece bir adres değeri bulunabilir. Bir gösterge hangi tip veriye ait adresi taşıyorsa o tipte tanımlanır.
Aşağıdaki örnekte p, k değişkeninin adresini saklayan bir göstergedir ve p+4 ise, k’nın adresinden sonraki 4. tamsayı değerinin adresini göstermektedir.

int k;int *p;p=&k;pp+4&k +2“uvyz”(char*) 0x00ab13ff
 
Üst