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; }