Write a program for frame sorting techniques used in buffers.
Frame sorting technique used in buffers.
Source Code:
File Name: frame_sorting.c
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define FRAME_TEXT_SIZE 3 // Each frame holds 3 characters
#define MAX_NO_OF_FRAMES 127 // Maximum number of frames supported
char inputMessage[FRAME_TEXT_SIZE * MAX_NO_OF_FRAMES]; // Buffer to store the original message
// Frame structure to hold individual fragments of the message
struct Frame {
char text[FRAME_TEXT_SIZE];
int sequenceNumber;
} frames[MAX_NO_OF_FRAMES], shuffledFrames[MAX_NO_OF_FRAMES];
// Function to split the message into frames and assign sequence numbers
int assignSequenceNumbers() {
int i = 0, j = 0, frameIndex = 0;
while (i < strlen(inputMessage)) {
frames[frameIndex].sequenceNumber = frameIndex;
for (j = 0; j < FRAME_TEXT_SIZE && inputMessage[i] != '\0'; j++)
frames[frameIndex].text[j] = inputMessage[i++];
frameIndex++;
}
printf("\nAfter assigning sequence numbers:\n");
for (i = 0; i < frameIndex; i++)
printf("%d:%s ", frames[i].sequenceNumber, frames[i].text);
return frameIndex; // Return total number of frames created
}
// Utility to generate an array of unique random indices for shuffling
void generateRandomArray(int *randomArray, int limit) {
int r, i = 0, j;
while (i < limit) {
r = rand() % limit;
for (j = 0; j < i; j++)
if (randomArray[j] == r)
break;
if (i == j) // r is unique
randomArray[i++] = r;
}
}
// Shuffle the frames based on random sequence numbers
void shuffleFrames(int totalFrames) {
int randomIndices[totalFrames];
generateRandomArray(randomIndices, totalFrames);
for (int i = 0; i < totalFrames; i++)
shuffledFrames[i] = frames[randomIndices[i]];
printf("\n\nAfter shuffling:\n");
for (int i = 0; i < totalFrames; i++)
printf("%d:%s ", shuffledFrames[i].sequenceNumber, shuffledFrames[i].text);
}
// Sort the shuffled frames based on their original sequence numbers
void sortFrames(int totalFrames) {
int i, j, swapped;
struct Frame temp;
for (i = 0; i < totalFrames - 1; i++) {
swapped = 0;
for (j = 0; j < totalFrames - i - 1; j++) {
if (shuffledFrames[j].sequenceNumber > shuffledFrames[j + 1].sequenceNumber) {
temp = shuffledFrames[j];
shuffledFrames[j] = shuffledFrames[j + 1];
shuffledFrames[j + 1] = temp;
swapped = 1;
}
}
if (!swapped) break; // Optimization: Break if already sorted
}
}
int main() {
int totalFrames;
printf("Enter the message: ");
fgets(inputMessage, sizeof(inputMessage), stdin);
// Remove newline character if present
size_t len = strlen(inputMessage);
if (len > 0 && inputMessage[len - 1] == '\n')
inputMessage[len - 1] = '\0';
// Split into frames, shuffle them, then sort to recover original message
totalFrames = assignSequenceNumbers();
shuffleFrames(totalFrames);
sortFrames(totalFrames);
// Display the final reconstructed message
printf("\n\nAfter sorting (Reconstructed message):\n");
for (int i = 0; i < totalFrames; i++)
printf("%s", shuffledFrames[i].text);
printf("\n\n");
return 0;
}
Output:
$ gcc frame_sorting.c
$ ./a.out
Enter the message: Study Glance
After assigning sequence numbers:
0:Stu 1:dy 2:Gla 3:nce
After shuffling:
3:nce 2:Gla 1:dy 0:Stu
After sorting (Reconstructed message):
Study Glance
๐ป Run This C Program
Write a program for frame sorting techniques used in buffers.
The selected C program is loaded
automatically into the editor.
Edit the program, provide input through
STDIN if required
and click Run.
The compiler is embedded using OneCompiler.
Your C program runs inside the embedded
C environment; Study Glance does not execute
C code directly on your web server.
Enter the input values of the program in the
STDIN box before clicking Run.