Write a c program to simulate two dimensional Parity generator and checker.
Below is a simple C program that simulates a two-dimensional parity generator and checker.
#include <stdio.h>
#define MAX_ROWS 5
#define MAX_COLS 5
// Function to generate two-dimensional parity
void generate_parity(int data[MAX_ROWS][MAX_COLS], int parity[MAX_ROWS+1][MAX_COLS+1]) {
// Row Parity Calculation
for (int i = 0; i < MAX_ROWS; i++) {
int row_parity = 0;
for (int j = 0; j < MAX_COLS; j++) {
row_parity ^= data[i][j]; // XOR all elements in the row
}
parity[i][MAX_COLS] = row_parity; // Store row parity in the last column
}
// Column Parity Calculation
for (int j = 0; j < MAX_COLS; j++) {
int col_parity = 0;
for (int i = 0; i < MAX_ROWS; i++) {
col_parity ^= data[i][j]; // XOR all elements in the column
}
parity[MAX_ROWS][j] = col_parity; // Store column parity in the last row
}
// Bottom-right corner parity bit (overall parity)
int overall_parity = 0;
for (int i = 0; i < MAX_ROWS; i++) {
for (int j = 0; j < MAX_COLS; j++) {
overall_parity ^= data[i][j];
}
}
parity[MAX_ROWS][MAX_COLS] = overall_parity; // Store overall parity in the bottom-right corner
}
// Function to check if data has valid parity
int check_parity(int data[MAX_ROWS][MAX_COLS], int parity[MAX_ROWS+1][MAX_COLS+1]) {
// Check row parity
for (int i = 0; i < MAX_ROWS; i++) {
int row_parity = 0;
for (int j = 0; j < MAX_COLS; j++) {
row_parity ^= data[i][j];
}
if (row_parity != parity[i][MAX_COLS]) {
printf("Row %d parity check failed.\n", i + 1);
return 0; // Row parity mismatch
}
}
// Check column parity
for (int j = 0; j < MAX_COLS; j++) {
int col_parity = 0;
for (int i = 0; i < MAX_ROWS; i++) {
col_parity ^= data[i][j];
}
if (col_parity != parity[MAX_ROWS][j]) {
printf("Column %d parity check failed.\n", j + 1);
return 0; // Column parity mismatch
}
}
// Check overall parity (bottom-right corner)
int overall_parity = 0;
for (int i = 0; i < MAX_ROWS; i++) {
for (int j = 0; j < MAX_COLS; j++) {
overall_parity ^= data[i][j];
}
}
if (overall_parity != parity[MAX_ROWS][MAX_COLS]) {
printf("Overall parity check failed.\n");
return 0; // Overall parity mismatch
}
printf("Parity check passed.\n");
return 1; // All parity checks passed
}
int main() {
int data[MAX_ROWS][MAX_COLS];
int parity[MAX_ROWS + 1][MAX_COLS + 1] = {0}; // Parity array with an extra row and column for parity bits
// Input data matrix
printf("Enter a %dx%d data matrix (0 or 1 values):\n", MAX_ROWS, MAX_COLS);
for (int i = 0; i < MAX_ROWS; i++) {
for (int j = 0; j < MAX_COLS; j++) {
printf("data[%d][%d] = ", i, j);
scanf("%d", &data[i][j]);
}
}
// Generate parity
generate_parity(data, parity);
// Print the data matrix with row and column parity
printf("\nData matrix with parity bits:\n");
for (int i = 0; i < MAX_ROWS; i++) {
for (int j = 0; j < MAX_COLS; j++) {
printf("%d ", data[i][j]);
}
printf("| %d\n", parity[i][MAX_COLS]);
}
for (int j = 0; j < MAX_COLS; j++) {
printf("--");
}
printf("--\n");
for (int j = 0; j < MAX_COLS; j++) {
printf("%d ", parity[MAX_ROWS][j]);
}
printf("| %d\n", parity[MAX_ROWS][MAX_COLS]);
// Check parity
int result = check_parity(data, parity);
if (result) {
printf("The data is correct!\n");
} else {
printf("The data contains errors.\n");
}
return 0;
}