21 Aralık 2010 Salı

Tarih ve saat hesaplamaları

Gündelik yaşamımızda kullandığımız gerek takvim sistemi gerekse zaman sistemi gerçekten bir çok karılışlığa yol açacak biçimde profesyoneller tarafından hazırlanmış sanki. Her senenin artık yılı Şubat'ın 4 yılda bir 29 çekmesi her bahar takviminde saatlerin 1 saat ileri/geri alınması ve benzeri bir çok problem var. Ama asıl problem rakamların döngü aralıklarının farklı olmasında. Her 60 saniyede 1 dakikanın, her 60 dakikada 1 saatin her 24 saatte bir gün olması problemi yetmezmiş gibi bazı aylar 30 bazıları 31 bazıları da 4 yılda bir 29 gün çekiyor. İşin moral verici kısmı hepsinin katı şartlara bağlı olması.

9 Aralık 2010 Perşembe

MAKİNE DİLİ

Eski arsivimden cikarttigim bir makale dokunmadan yayinliyorum surcu lisanimi affedin cocukluk zamaninda yazdigim ilk makalelerimden diye orijinal olarka yayinliyorum daha once www.bilgi.ofisi.com yayinliyordum

04.01.2002


MAKİNE DİLİ
(ASSEMBLY)

Once kavramlari aciklayalim
Assembly makine dili
Assembler derleyici

Bağımsız Seleksiyon

Bağımsız Seleksiyon
Seleksiyon kelimesi seçim anlamına gelir. Bağımsız seçim birbiri ile bağlantısı olmayan seçimlere denilir. Örneğin 5 kişi tarafından atılan bozuk paraların yazı-tura gelme olasılıkları birbirinden bağımsız seleksiyonlardır. Fakat bir torba içinden çekilen rakamlar bağımlı seleksiyonlardır. Bağımsız seleksiyon örneğini en iyi şekilde bir tombala örneği ile ya da sayısal loto şans oyunu ile anlatabiliriz.

Byte sıkıştırma yöntemi ve programı

Bu çalışmalar kendi araştırmalarımdır. Bu alanda yayınlanan bilgiler sadece sizinle bilgi paylaşımı yapmam içindir. Her türlü alıntı kaynakta gösterilse dahi iznim dışındadır.

Veri yapıları ve nümerik analize genel bakış

Veri yapıları ve nümerik analize genel bakış

Etkin Program Kodlama









Bir program parçası ne kadar kısa yoldan yapılırsa o kadar performanslı çalışacaktır. Bir program kodunun en iyi şekilde optimize edilmesine etkin kod yazımı denilir. Etkin Program Kodlamanın yanında Etkin Ara yüz'de çok önemlidir. Bunlar hakkında geniş bilgiyi aşağıda bulabilirsiniz.
Stringler ve Rutinler
Stringler (katar/alfanümerik karakterler) ve rutinler (düz kod parçaları) kullanımı optimizasyona ters düşen kodlama yöntemleridir. Aynı zamanda stringlerin kullanımı performansı, rutin kodların kullanımıda verimi ve düzenliliği düşürecektir. Etkin bir kodlama için biz string yerlerine işlem ve işleçleri rutin kodlar yerine prosedür ve fonksiyonlarını kullanacağız. Birde kullanılması pek de makul olmayan bazı komutlar var bunlar döngüleri kırma ve goto ile yönlendirme gibi komutlar.
YANLIŞ KODLAMA ETKİN KODLAMA
var
   parca  : array[1..8]of string;
   i      : byte

   aranan : string;
   bulundu: string;

{Program kodu}

parca[1]='işlemci';
parca[2]='anakart';
parca[3]='hafıza';
parca[4]='kasa;
parca[5]='ekran';
parca[6]='klavye';
parca[7]='fare';
parca[8]='sabit disk';

for i:=1 to 8 do begin
    if aranan=parca[i] then begin
       bulundu:='E';
       exit;
    end;
end;
if bulundu='E' then writeln('Aradığınız kayıt bulundu');
type parcalar=record
   isim:string;
   sira:integer;
end;
const
   parcalar:array[1..8] of parcalar=(
     'işlemci',1000,
     'anakart',1010,
     'hafıza',1020,
     'kasa;,1030,
     'ekran',1040,
     'klavye',1050,
     'fare',1060,
     'sabit disk',1070
  );

function bulma(aranan:integer): boolean;
     var i   :integer;
begin
   i:=0;  {Pascal'da gerekir}
   repeat
      inc(i);
      bulma:=(aranan=parca.sira[i]);
   until not bulma;
end;
{Program kodu}
if bulma(aranan) then begin
   writeln('Aradığınız kayıt bulundu');
end;
Örnek programları iyice inceleyerek göreceksiniz ki etkin kodlama gerçekten iyi bir optimizasyona ve anlaşılırlığa sahiptir. Görüldüğü gibi yanlış kodlamada boşuna string ifadeler ve rutinler kullanılmıştır. Eğer bir daha arama yapılsaydı aynı kodun bir daha yazılması gerekecekti. Oysaki etkin kodlamada işlem bölündüğü için defalarca yazmak yerine prosedürlerle bir defa akıllıca belirlemek yeterlidir. Daha sonra bir değişiklik gerektiğinde ilgili prosedüre giderek gerekli kısmı değiştirdiğinizde problem ortadan kalkacaktır fakat büyük bir yanlış kodlama içerisinde bu işlerin karma karışık olmasına neden olacaktır.
Ara yüz ve Resimler
Programınızı kullanılabilir kılan en önemli faktör ara yüzdür. Resimler programı daha performanslı kullanılması için konulan ivmelendiricilerdir. Lüzumsuz yere yapılan her süs (biçim ve resim) programın kullanılabilirliğini düşürür. Aşağıda yanlış ve doğru ara yüz ve resim seçimi görülmektedir.
Yanlış Arayüz Doğru Arayüz
wpeC.jpg (9212 bytes)

Gördüğünüz gibi ilk Ara yüz lüzumsuz belki de dikkat bile çekmeyecek yerlere yazılarak doldurulmuştur. Görüntüsü kirli, hantal ve gereksiz ayrıntılarla dolu. Fakat doğru ara yüzde gereken tüm işlemler sadelikle forma yerleştirilmiş. Kullanıcı sadece başlığı görerek hemen bunun bir login penceresi olduğunu anlayacaktır. Windows'u biraz kullanan her kes standart pencereleri gördüklerinde okumadan soruya cevap verebilirler çünkü o görüntünün onlara neyi çağrıştırdığını bilirler işin bu psikolojik boyutu hariç gerçektende aynı işi yapan aynı pencereler bir çok kez hiç okunmadan ya da göz ucuyla bakılarak cevaplanır.

Yanlış Resim Seçimi
Doğru Resim Seçimi
Özellikle amatör programcılar ve Türk programcıları nedense resimleri yanlış kullanmakta ustalar. Halbuki bunlar programınız şişiren ve frenleyen objelerdir. Doğru kullanılmış resimler sadece amaca hizmet ederler. İyi programcılar bunları genelde yerden ve kullanım rahatlığından faydalanmak için kullanırlarken yanlış kullananlar her komutun altına ona ilişkin bir resim koyarlar. Mesela yukarda konuşmuş Araç Çubuğu (toolbar) resimlerinden ilk formda bir şey anlamazsınız fakat ikincisi her programda standart olduğu için kaydet komutu bir bakışta görürsünüz. Ayrıca bilirsiniz ki bu objenin üstünde bekleyince yardım görüntülenir. Her iki formda aynı işi görür fakat birincisi sizi kullanırken öğrenmeye ve yavaşlamaya maruz bırakır.
Resim seçiminde dikkat etmeniz gereken unsur resmin varsa standartlardan seçilmesi yoksa doğru kriterlere göre hazırlanmasıdır. Bir resmin etkin olması için olması gereken başlıca özellikler şunlardır; resim formda fazla yer kaplamalıdır, çok renkli ve ayrıntılı resimler olmamalıdır, illa da komutu andırması gerekmez onu çağrıştırsa da yeter. Yalnız resim çizerken-ki özellikle küçük boyutlarda, resimlerinizde sadece temel öğelerini çizin ayrıntılar resminiz ilk bakışta görünmesini engellerler.

Resimden de anlaşılacağı gibi ayrıntılar resmin anlaşılabilirliğini yok ederler. İnsan gözü bir şekle ilk bakışta algıladığı hali ile kabul eder. İlk resmin kahve fincanı olduğu anlamanız diğerlerinde daha uzun sürer. Bunu engellemek için resimlerde ayrıntılarda aşırı renk kullanımından kaçınınız.
Uyarı İşaretleri ve Kullanım Yerleri



İkazlar yalnızca özel durumlarda sade ve kesin bir bilginin aktarılmasının lazım olduğu şartlarda kullanılmalıdır. Bir hatırlatma veya ön uyarıcı şeklinde kullanılmamalıdır. Bazı yanlış kullanımlar: "dikkat bilgileri dikkatlice doldurduktan sonra onaylayınız", "bu program demodur 10 günlük sınırlı kullanımını kullanmaktasınız", "Lütfen ürün girmeyi unutmayınız (girdiğiniz halde yine uyarılırsınız:)" gibi. Görüldüğü gibi bunlar kullanıcıyı her defasında kapatmak zorunda olduğu küçük sinir bozucu ikazlardır. Bunların hiç biri doğru değildir. Normalde ikazlar sadece önemli durumlarda kullanılmalıdır. Örneğin "Kullanıcı adınızı yanlış girdiniz, tekrar deneyin", "Stok rakamı eksi giremezsiniz", "Programın xxxxxx.xxx isimli dosyası silinmiş, bu dosya olmadan çalışmaz" gibi. Yalnız bu tür durumlarda ikazları kullanınız. Eğer kullanıcıyı bilgilendirmek ise amacınız bunu program üzerinde bir şekilde belli etmeniz programı anlaşılabilirliğini artırır. Ayrıca sürekli yanıp sönen, sesler çıkaran ikazlarda pek hoş değildirler. Onun yerine ikaz niteliği taşıyan bir ünlem işaretinin veya kırmızı bir noktanın bir yerde belirmesi daha uygundur. Özellikle stok vb. gibi sürekli durum değişen ve uyarısal konuma geçen programlarda ikaz lambası yanıp durum çubuğunda (status bar) isminin gözüküp geçmesi en iyi çözüm olacaktır.
Engellemeler ve Denetimler
Engelleme işlemi hiç kayıt yokken sil düğmesinin görevinin iptal edilmesi gibidir. Bu işlem iki şekilde yapılabilir birincisi silme tuşunun görevine bir kontrol satırı eklersiniz ve kayıt yoksa işlem yapmaz ya da doğru yöntem olarak sil tuşunu disabled yaparsınız, işlem gelince de geri çevirirsiniz. Böylece kullanıcı neyin niçin olduğunu görmüş de olur. Buna göre kullanılabilir düğmeler aktif, kullanılamazlar pasif (işlemez) olarak kalacaktır.

Resimden de anlaşılacağı üzere denetimlerin pencere üzerinde yapılması kullanıcının programı anlamasında daha etkili olur. Bu tür veri ve bilgi işleme formlarında ortalama bir standart vardır.
(Veri bilginin işlenmemiş halidir, yani kaydedilmemiş bilgi veridir)
Denetim işlemini yapmak için bir biriyle eş güdümlü çalışan objeleri prosedürlere böleceğiz. Bu prosedürler genelde; Arayüzü Yapıya Aktarma, Yapıdan Ara yüze Aktama, Ara yüzü Temizleme, Yapıyı Temizleme. Diğer bir grupta Kayıt Silme, Kayıt Okuma, Kayıt Yazma olacaktır (Kayıt Oluşturma işlemi sadece bir yerde yapıldığı için ilk kullanıldığı yerde kalır)
Kısayol Tuşları: İşlemlerin alternatif olarak tuşlardan yapılmasına denilir. İçsel kısayol tuşları (internal short cut) program tarafından bizler belirleriz. Dışsal kısayol tuşları (external short cut) Windows tarafından belirlenmiş sabit tuşlar ya da kombinasyonel kullanılan sabit tuşlardır. Program yaparken bunların ne kadar çakıştıklarına hangisinin diğerinden üstün olacağına biz karar vermeliyiz. Şu da unutulmamalıdır ki öncelikle içsel kısayol tuşlar işlem görür.
Kısayol tuşlarının seçimi sağ ellerini kullananlar ve solaklar (fareyi sol eliyle kullanması gerekir) için iki ayrı biçimde yapılır. Kısayol tuşu tanımlama fazladan bir uğraş gerektirdiği için bugüne kadar fazla özen gösterilmeden sağ elleri ile fareyi tutanlar için klavye kısayolları ayarlanmıştır. Buna göre fareyi sağ eliyle tutanlar klavyenin sol bölütünü kullanırlar, tersi durumda aynı işleminde tersi geçerlidir. Unutulmaması gereken bu sınırları geçmemek, bir diğer önemli problemde bunlar için Türkçe harfleri kullanmamak (ĞÜŞİÖÇğüşıöç).

Bordo renkteki tuşlar sağ ellerini kullanalar için, koyu mavi olan kısım solaklar içindir.
(Action) Menüler ve Araç Çubuğu: Windows standart'ında iki tip menü vardır. Pull Down ve Context Menu.

Pull Down Menu (bas çek menü)
Context Menu (konteks menü)
Tool Bar (araç çubuğu)

Pull Down menüler Pencere Bar'ının altında yer alan sürekli gözüken menülerdir. Context menüler herhangi bir objenin üzerindeyken farenin sağ tuşuna basınca çıkan menüdür. Araç Çubukları ise Pull Down menülerin altında yer alan küçük simgelerle dolu alanlardır.

Action: Faaliyet anlamına gelir. Dikkat edecek olursanız Pull Down menüler, Context menüler ve Tool Bar'lar üzerinde ortak tuşlar vardır. Örneğin Kes-Kopyala-Yapıştır tuşlarını tüm bu menü ve bar'larda görürsünüz.
Action bir kez tanımlandıktan sonra diğer menü ve barlara gerekli şekilde yerleştirilir. Barlara yerleştirilecekse birde simge seçilmelidir. Action kullanmak karmaşayı engeller ve anlık işlemlerde efektiflik sağlar.
Not: Yazdığınız programlama dilinde Action yoksa yeni versiyonlarını edinin.

Menü isimleri: Oldukça kısa ve işlem olmalıdır (tanım olmamalıdır) örneğin Programdan Çıkış ismi yerine sade Çıkış kullanılmalıdır.

Menü ayraçları (sperators): Ortak özellikten yapılan işlemler aynı blok içinde yer alırlar. Örneğin: Kes-Kopyala-Yapıştır

Menülerden sonraki üç nokta: Yukarıdaki Context Menu resmine bakacak olursanız bazı etiketlerin yanında ... (üç noktra) olduğunu fark edeceksiniz. Bunun anlamı: o işlemi yaparsanız çalışmanız üzerinde değişiklik olur.
Hızlı Kodlar:

Popüler Bazı Etkin Kodlar

Binary Search (ikili arama)
Alfabetik olarak küçükten büyüğe doğru sıralı büyük bir dizide etkin bir arama metodudur.
Çok performanslıdır, tahmini olarak örneklersek 10000 dizi içinde doğru kaydı yaklaşık 20 denemede bulur.

Sort Liste (Sıralama)
Bir dizi grubunu alfabetik olarak küçükten büyüğe veya büyükten küçüğe doğru sıralaya yarar.
En çok kullanılan 3 yöntem aşağıdadır.

Bu yöntemlerde sıralama küçükten büyüğe doğru yapılmaktadır. Eğer sıralamayı değiştirmek isterseniz koşulu tersine çevirmeniz yeterlidir. Yalnız unutulmamalıdır ki koşulların değişmesi yönünü tersine çevirmekle olmaz.
< simgesinin tersi >=
> simgesinin tersi <=
<= simgesinin tersi >
>= simgesinin tersi <

Genel değişkenler
A değişecek dizi
T temporal bölge
I ve J sayaç değişkenler

Bubble sort Çok popüler fakat en yavaş sıralama metodudur. Tüm dizi elemanları geriye kalan tüm dizi elemanları ile karşılaştırılarak sıralama yapılır.
 

procedure BubbleSort(var A: array of Integer);
 var
  I, J, T: Integer;
 begin
  for I := High(A) downto Low(A) do
  for J := Low(A) to High(A) - 1 do
   if A[J] > A[J + 1] then
   begin
    T := A[J];
    A[J] := A[J + 1];
    A[J + 1] := T;
   end;
end;

Selection sort Seçim tipi sıralama Bubble sort'tan daha hızlı fakat Quick sort'tan daha yavaştır.
 

procedure SelectionSort(var A: array of Integer);
 var
  I, J, T: Integer;
 begin
  for I := Low(A) to High(A) - 1 do
  for J := High(A) downto I + 1 do
   if A[I] > A[J] then
   begin
    T := A[I];
    A[I] := A[J];
    A[J] := T;
   end;
end;

Quick sort En hızlı sıralama işlemidir. Bu sıralama yönteminin çalışması Binary Search metoduna benzer.
 

procedure QuickSort(var A: array of Integer);

  procedure SubQuickSort(var A: array of Integer; iLo, iHi: Integer);
    var
      Lo, Hi, Mid, T: Integer;
  begin
      Lo := iLo;
      Hi := iHi;
      Mid := A[(Lo + Hi) div 2];
      repeat
        while A[Lo] < Mid do Inc(Lo);
        while A[Hi] > Mid do Dec(Hi);
        if Lo <= Hi then
        begin
          T := A[Lo];
          A[Lo] := A[Hi];
          A[Hi] := T;
          Inc(Lo);
          Dec(Hi);
        end;
      until Lo > Hi;
      if Hi > iLo then SubQuickSort(A, iLo, Hi);
      if Lo < iHi then SubQuickSort(A, Lo, iHi);
  end;

begin
  SubQuickSort(A, Low(A), High(A));
end;

Etkin kodlama önerileri
 

Yanlış kodlama Etkin kodlama
for i:=1 to 10000 do
  if b=i+i*6 and a=3 then islem;
for i:=1 to 10000 do
  if a=3 and b=i+i*6 then islem;
case EkBilgi of
  'BASLA': basla.enabled := TRUE;
  'BİTİR': basla.enabled := FALSE;
end;
const
  EK_BASLA   = 0;
  EK_BITIR   = 1;
case EkBilgi of
  EK_BASLA: basla.enabled := TRUE;
  EK_BITIR: basla.enabled := FALSE;
end;
for i := 1 to length(adres) do bitis := length(adres)
for i := 1 to bitis do

Matematik ve Sayı Sistemleri

Matematik ve Sayı Sistemleri Bu döküman başta olmak üzere
Matematik ve Sayı Sistemleri
Elektronik ve Sayı Sistemleri
Bilgisayar ve Sayı Sistemleri
biçiminde okunarak ilerlenmesi gerekir.

Bilgisayar ve Elektronik ile uğraşanların kesinlikle bilmesi gereken. Bilgisayarın ve elektroniğin olmazsa olmazı sayısal matematik ve sayısal elektronik.


Modern Matematik Decimal Sayı Sistemi (Onluk Taban)

Decimal sistem gündelik hayatımızda kullandığımız matematik biçimidir. Sayı tabanını 10 olarak alırız ve kullandığımız rakamlar toplam 10 tanedir. 0, 1, 2, 3, 4, 5, 6, 7, 8 ve 9. Gerçek anlamda matematik için doğal ve gerçek bir sayı sistemi ve tabanı yoktur zira matematikte tabanlarda sadece bizim rahat anlamamız için kullandığımız birimlerdir. Nasıl ki litre, kilo gibi ölçüm birimlerimiz varsa matematik içinde sayısal birimlerimiz var. Bu gerçeğe dayanarak şunu da söyleyebiliriz istediğiniz bir sayı tabanını biz kendinizde oluşturabilirsiniz. Düşününki kendi sayı sistemimizi oluşturacağız öyleyse önce bir taban belirleyelim. Tabanımız 2'nin herhangi bir katı olmalı. Buna dayanarak ta şunu söyleyebiliriz en küçük sayı sistemi tabanı 21 = 2 yani ikilik sayı sistemi. Üst sınır ise yoktur, fakat karmaşa yaratmaması için 16'lık tabandan ilerisini teoride düşlesek bile pratik ve gündelik hayatta pek göremeyiz. Standart olarak kullanılan sayı sistemleri ve isimleri
Standart Adı Kullanılan sayılar
Binary 21=2 İkilik Taban 0, 1
Octal 23=8 Sekizlik Taban 0, 1, 2, 3, 4, 5, 6, 7
Decimal Onluk Taban 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Hexdecimal 24=16 On Altılık Taban 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F


Hemen aklınıza Hexdecimal için şu soru gelebilir. İyide ABCDEF bunlar rakam değil ! Evet değiller ama rakamımız bitti bizde onun için sembolik olarak rakam yerine bildik harfleri devam ettiriyoruz. Daha detaylı bilgi Hexdecimal başlığı altında bulabilirsiniz.


Binary Matemetiği (İkilik Sayı Sistemi)

Kullanılabilir en küçük sayı sistemidir. Sadece olmak yada olmamak olasılıkları vardır. Binary sistemde 1 ve 0'larla yazılamayacak sayı yoktur. Bu sayılara doğal pozitif ve negatif sayılar, ondalık içeren küsuratlı sayılarda dahil. Koordinat sistemi üzerinde gösterilebilen tüm sayılar ve reel sayılar diğer sayısal tabanlarda da gösterilebilir. İkilik sistem için kullanılan rakamlar 1 ve 0 yani var ve yok olduğu için isimleri de aynısıdır. 1=(var, SET, TRUE) ve 0=(yok, RESET, FALSE) olarak adlandırılır. Ayrıca 1 veya 0 rakamına binary sisteminde bit denilir. Bu isimler standarttır ve ilgili her yerde görürsünüz. İkilik sayı sistemindeki bir rakamı başka bir sayı sistemine çevirmeyi ve başka bir sayı sistemindeki rakamı tekrar ikilik sisteme çevirmeye bakalım.


Onluk sistemdeki bir sayıyı ikilik sisteme çevirmek

Çevirme işlemi onluk sayıyı sürekli 2'ye bölerek yapılır. Kalan 2'ye bölünemeyecek kadar küçüldüğünde tüm kalanlar (koyu rakamlar) tersten  yazılır.





İkilik sistemi geri onluk sisteme çevirmek

Rakamlar ters olarak yazıldıktan sonra her rakam sıralama numarasına (n) göre 2(n) ile çarpılır ve toplamları alınır. Formülü karışık bulanlar için kendi kullandığım yöntemi de aktarmak istiyorum.


(1110)2 = ((0x20)+(1x21)+(1x22)+(1x23)+(1x24))10
(1110)2 = ((0)+(2)+(4)+(8)+(16))10
(1110)2 = (30)10







Rakamları yazdıktan sonra 1'den başlayarak 2 katlarını yazıyorum. Daha sonra karşısında 1 olanları topluyorum. Örnekte kırmızı renkte olanları toplayınca binary 5 bitlik 11110 sayılarının decimal olarak 30 olduğunu görüyoruz.


Mantık Kapıları
Standart mantık kapıları AND, OR, XOR, NOT ve türemiş halleri NAND, NOR ve NXOR'dur. Kapıları daha iyi anlatmak için AND kapısını söze dekelim. Örneğin oksijen ve lpg tanklarımız olsun. Tankımızın ateş oluşturabilmesi için her iki tüpünde içinin dolu olması gerekir yani OKSİJEN AND LPG = TRUE söylemi doğru olmalıdır. Söylemi şu şekilde kendi dilimize çevirelim EĞER OKSİJEN VE LPG VARSA TAMAM. Herhangi birisi veya her ikisi birden yoksa tabii ki sonuçta FALSE (olumsuz) olacak.



Mantık işlemlerine kapı denmesinin amacı iyi bir benzetmeden dolayıdır. Örneğin 4 kapıdan bilgiler girer ama tek kapıdan çıkar.
Şimdide türemiş kapılara bakalım



AND GATE\
(ve kapısı)
oksijen lpg sonuç
0 0 0
0 1 0
1 0 0
1 1 1
Sonuç: Yalnızca her iki tank doluysa yanma oluşabilir.
OR GATE
(veya kapısı)
kibrit çakmak sonuç
0 0 0
0 1 1
1 0 1
1 1 1
Sonuç: Kıvılcımın oluşması için herhangi birinin olması yeterlidir veya ikiside olabilir.
XOR GATE
(özel veya kapısı)
erkek dişi sonuç
0 0 0
0 1 1
1 0 1
1 1 0
Sonuç: Yalnızca erkek ve dişinin çocuğu olabilir :)
NOT GATE
(değil kapısı)
GS FB
0 1
1 0



Sonuç:
FB kazanırsa; FB sevinir GS üzülür.
GS kazanırsa; GS sevinir FB üzülür.


Türemiş mantık kapıları doğal mantık kapıların birbirlerine eklenmesiyle oluşur. Doğal bir kapının önüne NOT işlemi gelince olan bu kapılar bazı durumlarda arkadaşlarını yerine geçer. 
NAND (ve değil)
A B Q
0 0 1
0 1 1
1 0 1
1 1 0
NOR (veya değil)
A B Q
0 0 1
0 1 0
1 0 0
1 1 0
NXOR (özel veya değil)
A B Q
0 0 1
0 1 0
1 0 0
1 1 1


Octal Sayı Sistemi (Sekizlik Taban)
8 rakamdan oluşan 


Binary mantık kapılarının genel çalışma prensipleri böyle. Bu bilgilerin kalanı ileriki sayılarda bulacaksınız.

Octal Sayı Sistemi (Sekizlik Taban)
bu sistem çok nadir kullanılmaktadır. Genelde BCD (Binary Coded Decimal) gibi 4 bitlik data aktarımında kullanılır. Octal sistemde diğer sayı sistemlerine aynı şekilde dönüştürülür. Bu sayı sistemi üzerinde fazla durmuyorum çünkü bu sayı sistemini bilmeme rağmen hiç karşılaşmadım...


Hexdecimal Sayı Sistemi (On Altılık Taban)

16 rakamdan oluşur. 9'dan sonra rakam bittiği için 0123456789, 10=A, 11=B, 12=C, 13=D, 14=E, 15=F olarak adlandırılır. Bilgisayar veri birimleri Hexdecimal üzerine kurulmuştur. Aşağıda ki tabloda bunun katları verilmiştir. Tek bir haneden oluşan Hexdecimal sayı 1 byte eder. Hexadecimal 1 byte bilginin oluşturduğu standart veriye oktet denilir.


Decimal Karşılığı Adı
1 byte (1 oktet) 0 .. 255 = 28 bit byte, character
2 byte (2 oktet veri) 0 .. 65536 = 216 bit word
4 byte (4 oktet veri) 0 .. 4294967296 = 232 bit double, double word
8 byte (8 oktet veri) 0 .. 18446744073709551616 = 264 bit long double

Tabloda gördüğünüz rakamların hepsi pozitif ve tam sayılardı fakat bilgisayarda kullandığımız veriler hem negatif hem de küsuratlı olabilir.
1 byte -128 .. 127 short integer
2 byte -32768 .. 32767 integer
4 byte -2147483648 .. 2147483647 long integer
4 byte 1.5 x 10–45 .. 3.4 x 10^38 single (7, 8 haneli)
8 byte 5.0 x 10–324 .. 1.7 x 10^308 double (15, 16 haneli)
8 byte –922337203685477.5808 .. 922337203685477.5807 currency (19, 20 haneli)

Negatif olabilen sayılara işaretli sayılar denir. Bu sayıların ilk biti S (signal) yani işaret biti olarak adlandırılır. Küsuratlı sayılara ise duyarlıklı sayılar denilir. Noktadan sonra gelen kısım sayının duyarlılığını belirtir. Örneğin currency değişken tipi 4 hane duyarlıklı bir sayı tipidir.


Decimal sayı sistemini Hexdecimal sayı sistemine çevirmek
Decimal sayı yazıldıktan sonra sürekli 16'ya kadar bölünür ta ki 16'ya bölünemeyecek kadar küçük oluncaya kadar. Daha sonra çıkan sonuçlar (koyu siyah rakamlar) Eğer Hexdecimal ifade edilebilecek büyüklükteyse (10=A, 11=B, 12=C, 13=D, 14=E, 15=F) olarak adlandırılır. En son bölme işleminden itibaren her bir 2'li grup arasında yer değiştirme yapılır. Son olarak bu gruplar tersten itibaren ters olarak yazılır. Akış diyagramını yukardan aşağıya doğru işlem sırasına göre izleyebilirsiniz.






Hexdecimal sayı sistemini Decimal sayı sistemine çevirmek

Örnekte 2 byte (word) veri tipindeki bir Hexdecimal sayı Decimal sayıya dönüştürülmüştür. Bu işlem yapılırken de önce sayılar byte biçiminde tersten yazılırlar. Örnekte de görebileceğiniz gibi EF10 terse çevrilirken EF'10 biçimiyle ters çevrilir. Yani 10'FE olarak byte byte ters çevrilir. Ayrıca bu ters yapı dosyaların içine gömülü sayı değerleri içinde kullanılır.


(EF10)16 = ((1x160)+(0x161)+(Fx162)+(Ex163))10
(EF10)16 = ((1)+(0)+(3840)+(57344))10
(EF10)16 = (61200)10


Hexdecimal sayı sistemini diğer sayı sistemlerine çevirirken
Hexdecimal bir sayısı binary sayıya yine 2'ye bölme metodunu kullanarak yapabilirsiniz zorlanırsanız önce Decimal'e sonra yine Binary'e çevirme işlemide bir çözüm tabii. Unutmamanız gereken A'yı tek başına 10 gibi düşünmenizdir. Yoksa sonuç hatası yaparsınız.


Not: Bu yazıyla ilgili görüşleriniz için