-
iOS Eğitimlerine Başlarken...
-
Objective-C Dilinde Kütüphaneler
-
Objective-C'de Sınıf Arayüzü (Class Interface) Nasıl Tanımlanır?
-
Objective-C Dilinde Veri Tipleri, İşlem Operatörleri ve Çeşitli İfadeler
-
Objective-C Dilinde Veri Tipleri, İşlem Operatörleri ve Çeşitli İfadeler Giriş
-
Sabitlerden Oluşan İfadeler
-
int Türü İfadeler
-
float Türündeki İfadeler
-
Gösterge İfadeleri
-
Gösterge İfadeleri ve Değerleri
-
Operatörlerin Öncelikleri ve Birleşme Sıraları
-
İkili Aritmetiksel Operatörler
-
Aritmetiksel Atama Operatörleri
-
İlişkisel Operatörler
-
Mantıksal Operatörler
-
Bit Düzeyinde İşlem Gören Operatörler
-
Öteleme Operatörleri
-
Bit Düzeyinde Mantıksal Operatörler
-
Bit Düzeyinde İşlem İçin Bir Örnek: Sınav Değerlendirme Programı
-
Bit Düzeyinde Atama Operatörleri
-
Cast Operatörü
-
sizeof Operatörü ve Bir Örnek Program
-
Tekli Operatörler
-
Koşul Operatörü
-
Bellek Operatörleri
-
Objective-C Dilinde Veri Tipleri, İşlem Operatörleri ve Çeşitli İfadeler Giriş
-
Kontrol Yapıları
-
Döngü (Loop) Oluşturma
-
Miras Alma (Inheritance), Çok Biçimlilik
-
Ön İşlemci Komutları ve Makrolar
-
Ön İşlemci Komutları ve Makrolar Giriş
-
Basit Makro Tanımları
-
Objective-C Ön İşlemcisi
-
Makrolarda Argümanlar
-
Önceden Tanımlanmış Değerlere Referans Verme
-
Gerçek Parametrelerde Bir Dizi İfadenin Kullanılması
-
Makro Tanımlamada # ve ## Operatörleri
-
Makro Tanımın İptal Edilmesi: undef Komutu
-
Dosya İçeriklerini Programa Katma: include Komutu
-
Şarta Bağlı Derleme İşlemi: #if Komutu
-
#ifdef Komutu
-
#ifndef Komutu
-
#error ve #pragma Direktifleri
-
Ön İşlemci Komutları ve Makrolar Giriş
-
Diziler ve Sözlük Nesneleri
-
Diziler ve Sözlük Nesneleri Giriş
-
Bir Dizi Nesnesi Oluşturmak
-
Dizideki Eleman Sayısını Bulmak
-
Bir Dizi Nesnesinin Elemanlarına Erişme
-
Dizi Elemanlarına Hızlı Numaralama (Fast Enumeration) Yöntemi ile Erişmek
-
Dizi Nesnesine Eleman Eklemek
-
Dizi Nesnesinde Araya Eleman Ekleme
-
Dizi Nesnesinin Bazı Elemanlarını Silme
-
Dizi Nesnelerini Sıralama
-
Diziler ve Sözlük Nesneleri Giriş
-
Fonksiyonlar
-
Fonksiyonlar Giriş
-
Objective C Dilinde Bir Fonksiyonun Yapısı
-
Fonksiyonların Tanımlanması
-
Fonksiyonlarla İlişkili Terimler
-
return Deyimi
-
Fonksiyon Çağrıları ile İlgili Örnek C Programları
-
Fonksiyon Çağırma Teknikleri
-
Fonksiyonları Değer ile Çağırma
-
Fonksiyonları Referans ile Çağırma
-
İki Boyutlu Dizinin Argüman Olarak Gönderilmesi
-
C Dilinde Özyineli (Rekürsif) Fonksiyonlar
-
Fonksiyonlar Giriş
-
Dinamik Bağlama, id Veri Tipi
-
Bellek Sınıfları
-
Dosya İşlemleri
-
Nesne Yönelimli Programlama
-
Algoritmaya Giriş
Bitler üzerinde işlem yapabilen operatörler yardımıyla bir datanın belirli bir bitine ya da bit grubuna erişmeyi sağlayan, maskeleme adı verilen bir programlama tekniği uygulayabiliriz. Bu teknik özellikle veri sıkıştırma ve indeks yaratma uygulamalarında çok sık kullanılır.
Aşağıdaki program yardımıyla 16 sorudan oluşan bir testin cevaplarına Doğru veya Yanlış şeklinde cevap verileceği düşünülerek, değerlendirme yapılmaktadır. Doğru d veya D, yanlış y veya Y ile simgeleniyor.
#include <stdlib.h>
#define DOGRU_CEVAP 0x3E1D
#import <Foundation/Foundation.h>
#include <math.h>
int main(int argc, char* argv[])
{
extern float sinav(int cevap);
extern int cevaplar();
int sonuc;
NSLog(@"\nCevaplari giriniz : \n");
sonuc = sinav(cevaplar());
NSLog(@"\nAlinan not =%3.0i \n", sonuc);
exit(0);
}
int cevaplar()
{
int cevap = 0;
int i;
char k;
for (i= 0; i<=15; i++)
{
k= getchar();
if(k == 'd' || k == 'D')
{
cevap = cevap|(1 << i );
}
}
NSLog(@"\nGirilen cevaplar --- %X", cevap);
return cevap;
}
/* Doğru cevaplar*/
/* YYDD DDDY YYYD DDYD*/
/* 0011 1110 0001 1101 */
float sinav(int cevap)
{
int y_bit;
extern int bit_say(int y_bit);
int sonuc;
y_bit = cevap^DOGRU_CEVAP;
NSLog(@"\ncevap=%x",cevap);
NSLog(@"\nDOGRU CEVAP=%x",DOGRU_CEVAP);
sonuc = 100 * ((16 - bit_say(y_bit)) / 16.0);
return sonuc;
}
int bit_say(int l)
{
int i, s=0;
for (i=0; i<=15; i++)
if (l & (1<<i)) ++s;
return s;
}
PROGRAMIN ÇIKTISI:
AÇIKLAMA:
Programı çalıştırdığımızda:
Cevapları giriniz...
mesajı gelecektir. \n ifadesinden ötürü imleç bir alt satıra geçer. Cevapları DYDDDYYYYDDDYYDD şeklinde girip Enter’a basalım. Cevap değişkeni şu aşamalardan geçecektir:
İlk cevap doğru:
Cevap = 0 ⎜1 << 0
= 0 ⎜ 1 0000 0001
= 00000001
Üçüncü cevap doğru :
Cevap = 0000 0001 1 << 2
0000 0100
Cevap = 0000 0101
sonuçta cevap dizisinde D’ler yerinde 1, Y’ler yerinde 0’lar olacaktır.
Cevap = 1 1 0 0 1 1 1 0 0 0 0 1 1 1 0 1=D D Y Y D D D Y Y Y Y D D D Y D
sınav() fonksiyonu ise oluşturulan cevap bit dizisi ile DOGRU_CEVAP’ı XOR (^) işlemine sokmaktadır.
Sonuçta;
y_bit=1100111000011101 ^ 0011111000011101
işlemi yapılacak ve
y_bit=1111 0000 0000 0000
olarak bulunacaktır. Doğru cevap anahtarında en sağdaki değerin ilk, en soldaki değerin son soruya ait olacağına dikkat edelim. Bu değer bit_say adlı fonksiyona gönderilerek sırayla
i=0 iken
1111 0000 0000 0000 & 0000 0000 0000 0001
1111 0000 0000 0000 & 0000 0000 0000 0010
::: :::
::: :::
1111 0000 0000 0000 & 0001 0000 0000 0001
1111 0000 0000 0000 & 0010 0000 0000 0001
:
işlemleri yapılır, sadece son dört adımda if(l&(1<<i)) koşulu doğru olacağı için s=4 bulunur (S doğru cevap anahtarına uymayan soruları sayıyor).
sonuç=100*(16-4)/16.0=75
olarak bulunacaktır. Bu örnekte gerçekte 16 byte yer kaplayacak olan bir cevap dizisi 16 bit’ lik bir int içine sıkıştırılmaktadır.
getchar() Fonksiyonu
Yukarıdaki örnek uygulamamızda bu kodun yer aldığını görmüş olmalısınız. Peki ne anlama geliyor, ne iş yapar? Bu bir C++ fonksiyonudur ve eğitimin Fonksiyonlar başlığında diğer fonksiyonlarla birlikte anlatılmıştır. Fakat bu noktada örnek kodun daha iyi anlaşılabilmesi adına değinmekte fayda var.
Aslında bu fonksiyonun çok basit bir işlevi vardır. Kullanıcının girdiği bir karakter okunur ve program istenen bir yerde durdurulup, karakter girilene kadar bekletir. Programın kullanıcısından klavyeden girilecek harfleri bekler. Yukarıdaki örnek kodda uyguladığımız şekilde açıklayacak olursak; kullanıcıdan 15 defa harf girişi isteyecek, kullanıcı 'd' ya da 'D' harflerini girip girmeme durumuna göre kişinin doğru ya da yanlış yapıp yapmadığına karar vererek diğer işleme geçecek.
for (i= 0; i<=15; i++)
{
k= getchar();
if(k == 'd' || k == 'D')
{
cevap = cevap|(1 << i );
}
}