12
Haz
2020

C++ ile parite biti hesaplama

Parite (eşlik) biti en basit hata sezme tekniklerinden birisidir. Binary veri dizisindeki 1’ lerin sayısının tek veya çift olmasına göre verinin sonuna bir parite biti eklenir. Verideki 1’ lerin sayısının çift olmasına çift eşlik, tek olmasına da tek eşlik durumu denir.

Parite biti bir iletişim hattında taşınan verinin güvenliği için kullanılabilir. Gönderici tarafından veri dizisinin sonuna parite biti eklenir. Alıcı ise aldığı veri dizisindeki parite kontrolü yapar ve parite bitinde hata tespit ederse verinin iletim sırasında bozulduğunu varsayarak veriyi göndericiden tekrar talep eder. Parite biti tekniği güvenirliği düşük ancak hızlı bir hata sezme tekniğidir.

Aşağıdaki kod ile kullanıcıdan binary dizinin boyutu (boyut) ve dizinin kendisi (BinaryDizi) girilmesi istenmektedir. Daha sonra çift parite biti (dizideki 1 sayısı çift ise parite biti 0) eklenmektedir.
/* Parite hesaplaması www.hbmacit.com*/
#include<iostream>
using namespace std;

int main()
{
  unsigned boyut; // Binary dizinin boyutu
  cout<<"Binary dizinin boyutunu giriniz: ";
  cin>>boyut;
  bool *BinaryDizi; // Dinamik dizi oluştur.
  BinaryDizi = new bool[boyut+1]; // +1: parite biti olacak
  for (int i = 0; i< boyut; i++) // Dizinin elemanlarını kullanıcıdan iste
  {
    cout<<"Binary dizinin "<<i+1<<". elemanını giriniz: ";
    cin>>BinaryDizi[i];
  }
  bool parite = 0; // Parite bitini geçici olarak 0' a eşitle
  for (int i = 0; i< boyut; i++) // Parite bitini hesapla
  {
    if ((parite == 0) && (BinaryDizi[i] == 1))
      parite = 1;
    else if ((parite == 1) && (BinaryDizi[i] == 1))
      parite = 0;
  }
  BinaryDizi[boyut] = parite; // Parite bitini dizinin son hücresine yaz
  cout<<endl<<"Hesaplanan parite biti: "<<parite<<endl;
  cout<<"Binary dizinin parite biti eklenmiş hâli: ";
  for (int i = 0; i<boyut+1; i++)
  {
    cout<<BinaryDizi[i];
  }  
  delete BinaryDizi; // Dinamik diziyi bellekten sil
  return 0;
}

Program çalıştığında, 8 bitlik 10101001 verisi girilmiş ve aşağıdaki ekran çıktısı elde edilmiştir.

Aşağıdaki C++ kodu ile kullanıcı tarafından girilen ve son elemanı parite biti olan binary dizinin (BinaryDizi) parite kontrolü yapılmaktadır.

/* Parite kontrolü www.hbmacit.com*/
#include<iostream>
using namespace std;

int main()
{
  unsigned boyut; // Binary dizinin boyutu
  cout<<"Parite biti dahil binary dizinin boyutunu giriniz: ";
  cin>>boyut;
  bool *BinaryDizi; // Dinamik dizi oluştur.
  BinaryDizi = new bool[boyut]; 
  for (int i = 0; i< boyut; i++) // Dizinin elemanlarını kullanıcıdan iste
  {
    cout<<"Binary dizinin "<<i+1<<". elemanını giriniz: ";
    cin>>BinaryDizi[i];
  }
  cout<<"Son eleman parite biti olarak hesaplanacaktır."<<endl;

  bool parite = 0; // Parite bitini geçici olarak 0' a eşitle
  for (int i = 0; i< boyut; i++) // Parite bitini hesapla
  {
    if ((parite == 0) && (BinaryDizi[i] == 1))
      parite = 1;
    else if ((parite == 1) && (BinaryDizi[i] == 1))
      parite = 0;
  }
  if (parite == BinaryDizi[boyut]) // Hesaplanan parite ile dizideki parite bitini karşılaştır
    cout<<"Parite biti doğru.";
  else
    cout<<"Parite biti hatalı.";  
  delete BinaryDizi; // Dinamik diziyi bellekten sil
  return 0;
}

Parite kontrolü programı çalıştırılarak 8 bitlik 10101001 binary verisi ve doğru parite biti girildiğinde aşağıdaki ekran çıktısı elde edilmiştir.

Aynı binary dizisi için hatalı parite biti girildiğinde aşağıdaki ekran çıktısı elde edilmiştir.