You are on page 1of 18

AMAN RAJ 19BIT0353

DIGITAL ASSIGNMENT -2

Data Communication and computer network


ITE3001(L15+16)
NAME- AMAN RAJ
REG. No- 19BIT0353
Question 1.

Code a C Program to test the following case,


Assuming that your error detection method is following even
parity, find the parity bit for each of the following data units.
a. 1001011
b. 0001100
c. 1000000
d. 1110111

1 |P a g e
AMAN RAJ 19BIT0353

CODE:-

#include <stdio.h>
#include<string.h>
void bitcal(int l, char arr[l]){
int i=0,j=0;
for(i=0;i<l;i++){
if(arr[i]=='1'){
j++;
}
}
if(j%2==0){
printf("The even parity bit is 0");
}
else{
printf("The even parity bit is 1");
}
}
int main()
{
int lenght;
printf("Enter the length of data unit: ");
scanf("%d", &lenght);
char bitt[lenght];
printf("Enter the data unit: ");

2 |P a g e
AMAN RAJ 19BIT0353

scanf("%s",bitt);
bitcal(lenght, bitt);
return 0;
}
OUTPUT:-

A)1001011

b. 0001100

c. 1000000

d. 1110111

3 |P a g e
AMAN RAJ 19BIT0353

Question 2.

A sender needs to send the four data items Ox3456, OxABCC,


Ox02BC, and OxEEEE. Code a C Program to a. Find the
checksum at the sender site. b. Find the checksum at the
receiver site if there is no error. c. Find the checksum at the
receiver site if the second data item is changed to OxABCE. d.
Find the checksum at the
receiver site if the second data item is changed to OxABCE and
the third data item is changed to Ox02BA.

A)
CODE:-

#include<stdio.h>
#include<string.h>
int main()
{
char a[20],b[20],c[20],d[20],carry1;
char sum[20],sumab[20],sumcd[20],complement[20];
int i,length,j,x,y,w,z;
printf("Enter first binary number \n");
scanf("%s",a);
printf("Enter second binary number \n");
scanf("%s",b);
printf("Enter third binary number \n");
scanf("%s",c);
printf("Enter fourth binary number \n");
scanf("%s",d);
if(strlen(a)==strlen(b)&&strlen(b)==strlen(c)&&strlen(c)==strlen
(d))
{

4 |P a g e
AMAN RAJ 19BIT0353

length = strlen(a);
char carry='0';
for (j=0;j<3;j++)
{
for(i=length-1;i>=0;i--)
{
if(a[i]=='0' && b[i]=='0' && carry=='0')
{
sum[i]='0';
carry='0';
}
else if(a[i]=='0' && b[i]=='0' && carry=='1')
{
sum[i]='1';
carry='0';
}
else if(a[i]=='0' && b[i]=='1' && carry=='0')
{
sum[i]='1';
carry='0';
}
else if(a[i]=='0' && b[i]=='1' && carry=='1')
{
sum[i]='0';
carry='1';
}
else if(a[i]=='1' && b[i]=='0' && carry=='0')
{
sum[i]='1';
carry='0';
}
5 |P a g e
AMAN RAJ 19BIT0353

else if(a[i]=='1' && b[i]=='0' && carry=='1')


{
sum[i]='0';
carry='1';
}
else if(a[i]=='1' && b[i]=='1' && carry=='0')
{
sum[i]='0';
carry='1';
}
else if(a[i]=='1' && b[i]=='1' && carry=='1')
{
sum[i]='1';
carry='1';
}
else
break;
}
if (j==0){
for (i=0;i<length;i++){
sumab[i]=sum[i];
}
for (i=0;i<length;i++){
a[i]=c[i];
}
for (i=0;i<length;i++){
b[i]=d[i];
}
}
if (j==1){
for (i=0;i<length;i++){
6 |P a g e
AMAN RAJ 19BIT0353

sumcd[i]=sum[i];
}
for (i=0;i<length;i++){
a[i]=sumab[i];
}
for (i=0;i<length;i++){
b[i]=sumcd[i];
}
}
if (j==2){
break;
}
}
for(i=0;i<length;i++)
{
if(sum[i]=='0')
complement[i]='1';
else
complement[i]='0';
}
if(carry=='1')
carry='0';
else
carry='1';
printf("\nChecksum=%c%s",carry,complement);
}else {
printf("\nWrong input strings");
}
}

OUTPUT:-
7 |P a g e
AMAN RAJ 19BIT0353

B) .

CODE:-

#include<stdio.h>
#include<string.h>
int main()
{
char a[20],b[20],c[20],d[20],carry1;
char sum[20], sumab[20], sumcd[20], complement[20],
sum1[20], complement1[20];
int i,length,j,x,y,w,z;
printf("Enter first binary number \n");
scanf("%s",a);
printf("Enter second binary number \n");
scanf("%s",b);
printf("Enter third binary number \n");
scanf("%s",c);
printf("Enter fourth binary number \n");
scanf("%s",d);

8 |P a g e
AMAN RAJ 19BIT0353

if(strlen(a)==strlen(b)&&strlen(b)==strlen(c)&&strlen(c)==strlen(d)
){
length = strlen(a);
char carry='0';
for (j=0;j<3;j++)
{
for(i=length-1;i>=0;i--)
{
if(a[i]=='0' && b[i]=='0' && carry=='0')
{
sum[i]='0';
carry='0';
}
else if(a[i]=='0' && b[i]=='0' && carry=='1')
{
sum[i]='1';
carry='0';
}
else if(a[i]=='0' && b[i]=='1' && carry=='0')
{
sum[i]='1';
carry='0';
}
else if(a[i]=='0' && b[i]=='1' && carry=='1')
{
sum[i]='0';
carry='1';
}
else if(a[i]=='1' && b[i]=='0' && carry=='0')
{
sum[i]='1';
carry='0';
}
else if(a[i]=='1' && b[i]=='0' && carry=='1')
{

9 |P a g e
AMAN RAJ 19BIT0353

sum[i]='0';
carry='1';
}
else if(a[i]=='1' && b[i]=='1' && carry=='0')
{
sum[i]='0';
carry='1';
}
else if(a[i]=='1' && b[i]=='1' && carry=='1')
{
sum[i]='1';
carry='1';
}
else
break;
}
if (j==0){
for (i=0;i<length;i++){
sumab[i]=sum[i];
}
for (i=0;i<length;i++){
a[i]=c[i];
}
for (i=0;i<length;i++){
b[i]=d[i];
}
}
if (j==1){
for (i=0;i<length;i++){
sumcd[i]=sum[i];
}
for (i=0;i<length;i++){
a[i]=sumab[i];
}
for (i=0;i<length;i++){

10 | P a g e
AMAN RAJ 19BIT0353

b[i]=sumcd[i];
}
}
if (j==2){
break;
}
}
for(i=0;i<length;i++)
{
if(sum[i]=='0')
complement[i]='1';
else
complement[i]='0';
}
if(carry=='1')
carry='0';
else
carry='1';
printf("\n Checksum=%c%s",carry,complement);
for(i=length-1;i>=0;i--)
{
if(sum[i]=='0' && complement[i]=='0' && carry=='0')
{
sum1[i]='0';
carry='0';
}
else if(sum[i]=='0' && complement[i]=='0' && carry=='1')
{
sum1[i]='1';
carry='0';
}
else if(sum[i]=='0' && complement[i]=='1' && carry=='0')
{
sum1[i]='1';
carry='0';

11 | P a g e
AMAN RAJ 19BIT0353

}
else if(sum[i]=='0' && complement[i]=='1' && carry=='1')
{
sum1[i]='0';
carry='1';
}
else if(sum[i]=='1' && complement[i]=='0' && carry=='0')
{
sum1[i]='1';
carry='0';
}
else if(sum[i]=='1' && complement[i]=='0' && carry=='1')
{
sum1[i]='0';
carry='1';
}
else if(sum[i]=='1' && complement[i]=='1' && carry=='0')
{
sum1[i]='0';
carry='1';
}
else if(sum[i]=='1' && complement[i]=='1' && carry=='1')
{
sum1[i]='1';
carry='1';
}
else
break;
}
for(i=0;i<length;i++)
{
if(sum1[i]=='0')
complement1[i]='1';
else
complement1[i]='0';

12 | P a g e
AMAN RAJ 19BIT0353

}
printf("\n RECIEVER SIDE: \n CHECKSUM =%c%s",carry,
complement1);
}
else {
printf("\nWrong input strings");
}
}

OUTPUT:-

C).

D).

13 | P a g e
AMAN RAJ 19BIT0353

Question 3.

Given the dataword 1010011110 and the divisor 10111,


a. Generate the codeword at the sender site (using
binary division).
b. Check the codeword at the receiver site (assume no
error).

A) .
CODE:-

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
string toBin(long long int nu)
{
string bin = "";
while (nu){
if (nu & 1)
bin = "1" + bin;
else
bin = "0" + bin;
nu = nu>>1;
}
return bin;
}

14 | P a g e
AMAN RAJ 19BIT0353

long long int toDec(string bin)


{
long long int num = 0;
for (int i=0; i<bin.length(); i++)
{
if (bin.at(i)=='1')
num += 1 << (bin.length() - i - 1);
}
return num;
}
void fun(string dataword, string generator){
int lgen = generator.length();
long long int gen = toDec(generator);

long long int dword = toDec(dataword);


long long int dividend = dword << (lgen-1);
int shft = (int) ceill(log2l(dividend+1)) - lgen;
long long int rem;

while ((dividend >= gen) || (shft >= 0)){


rem = (dividend >> shft) ^ gen;
dividend = (dividend & ((1 << shft) - 1)) | (rem << shft);
shft = (int) ceill(log2l(dividend + 1)) - lgen;
}
long long int codeword = (dword << (lgen - 1)) | dividend;
cout << "Remainder: " << toBin(dividend) << endl;
cout << "Codeword : " << toBin(codeword) << endl;
}

15 | P a g e
AMAN RAJ 19BIT0353

int main(){
string dataword, generator;
dataword = "1010011110";
generator = "10111";
fun(dataword, generator);
return 0;
}

OUTPUT:-

B) .
#include<stdio.h>
#include<iostream>
#include<math.h>

using namespace std;


string toBin(long long int nu){
string bin = "";
while (nu){
if (nu & 1)
bin = "1" + bin;
else
bin = "0" + bin;

16 | P a g e
AMAN RAJ 19BIT0353

nu = nu>>1;
}
return bin;
}
long long int toDec(string bin){
long long int num = 0;
for (int i=0; i<bin.length(); i++){
if (bin.at(i)=='1')
num += 1 << (bin.length() - i - 1);
}
return num;
}
void fun(string dataword, string generator){
int lgen = generator.length();
long long int gen = toDec(generator);

long long int dword = toDec(dataword);


long long int dividend = dword << (lgen-1);
int shft = (int) ceill(log2l(dividend+1)) - lgen;
long long int rem;

while ((dividend >= gen) || (shft >= 0)){


rem = (dividend >> shft) ^ gen;
dividend = (dividend & ((1 << shft) - 1)) | (rem << shft);
shft = (int) ceill(log2l(dividend + 1)) - lgen;
}

17 | P a g e
AMAN RAJ 19BIT0353

long long int codeword = (dword << (lgen - 1)) | dividend;


cout << "Remainder: " << toBin(dividend) << endl;
cout << "Codeword : " << toBin(codeword) << endl;
}

int main()
{
string dataword, generator;
dataword = "10100111101010";
generator = "10111";
fun(dataword, generator);
return 0;
}
OUTPUT:-

INFERENCE:-
Since here remainder is null of that means the codeword received
at their end is correct( no error).

18 | P a g e

You might also like