Program
function[]=rk4(x0,y0,xn,h,f)
y(1)=y0
j=(xn-x0)/h
for i=1:j
k1=h*f(x0,y(i));
k2=h*f(x0+h/2,y(i)+k1/2);
k3=h*f(x0+h/2,y(i)+k2/2);
k4=h*f(x0+h,y(i)+k3);
y(i+1)=y(i)+(k1+2*k2+2*k3+k4)/6;
x0=x0+h;
printf('\ny(%g)=%g\n',x0,y(i+1));
end
endfunction
Output:
deff('y=f(x,y)','y=2+sqrt(x*y)')
rk4(1,1,1.6,0.2,f)
y(1.2)=1.64015
y(1.4)=2.36202
y(1.6)=3.16872
function[]=rk4(x0,y0,xn,h,f)
y(1)=y0
j=(xn-x0)/h
for i=1:j
k1=h*f(x0,y(i));
k2=h*f(x0+h/2,y(i)+k1/2);
k3=h*f(x0+h/2,y(i)+k2/2);
k4=h*f(x0+h,y(i)+k3);
y(i+1)=y(i)+(k1+2*k2+2*k3+k4)/6;
x0=x0+h;
printf('\ny(%g)=%g\n',x0,y(i+1));
end
endfunction
Output:
deff('y=f(x,y)','y=2+sqrt(x*y)')
rk4(1,1,1.6,0.2,f)
y(1.2)=1.64015
y(1.4)=2.36202
y(1.6)=3.16872
18 Comments
FCFS#include
ReplyDelete#include
int main()
{
int hpos, req[20],i,n,mov=0;
printf("Enter the Head Position");
scanf("%d",&hpos);
printf("Enter the total no request");
scanf("%d",&n);
printf("Enter the Request");
for(i=0;i",hpos);
mov =mov + (abs(hpos-req[i]));
hpos =req[i];
}
printf("%d\n",hpos);
printf("Total Seek Position :%d",mov);
}
STFF
ReplyDelete#include
#include
int main()
{
int readyq[100],i,n,totalhead=0,initial,count=0;
printf("Enter no of requests");
scanf("%d",&n);
printf("Enter no of request sequence");
for(i=0;idiff)
{
min=diff;
index=i;
}
}
totalhead=totalhead+min;
initial=readyq[index];
readyq[index]=1000;
count++;
}
printf("total head movements is %d",totalhead);
}
C-SCAN
ReplyDelete#include
#include
int main()
{
int readyq[100],i,n,totalhead=0,initial,count=0;
printf("Enter no of requests");
scanf("%d",&n);
printf("Enter no of request sequence");
for(i=0;idiff)
{
min=diff;
index=i;
}
}
totalhead=totalhead+min;
initial=readyq[index];
readyq[index]=1000;
count++;
}
printf("total head movements is %d",totalhead);
}
SCAN
ReplyDelete#include
#include
void scan(int req[], int n, int head, int size, int dir)
{
int seek = 0, i, j, temp, bound = size, start;
for(i = 0; i < n - 1; i++)
{
for(j = i + 1; j < n; j++)
{
if(req[i] > req[j])
{
temp = req[i];
req[i] = req[j];
req[j] = temp;
}
}
}
for(start = 0; start < n; start++)
{
if(req[start] >= head)
{
break;
}
}
printf("Seek sequence: %d", head);
if(dir == 1)
{
for(i = start; i < n; i++)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
seek += abs(bound - head);
head = bound;
printf(" -> %d", head);
for(i = start - 1; i >= 0; i--)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
}
else
{
for(i = start - 1; i >= 0; i--)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
seek += abs(head - 0);
head = 0;
printf(" -> %d", head);
for(i = start; i < n; i++)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
}
printf("\nTotal seek time: %d\n", seek);
}
int main()
{
int n, head, size, dir, i;
printf("Enter number of requests: ");
scanf("%d", &n);
int req[n];
printf("Enter request queue: ");
for(i = 0; i < n; i++)
scanf("%d", &req[i]);
printf("Enter disk size: ");
scanf("%d", &size);
printf("Enter initial head position: ");
scanf("%d", &head);
printf("Enter direction (1 for right, 0 for left): ");
scanf("%d", &dir);
scan(req, n, head, size, dir);
return 0;
}
con
ReplyDelete#include
#include
#include
#define MAX_FILES 10
int *disk, n;
char directory[MAX_FILES][30];
int file_start[MAX_FILES], file_blocks[MAX_FILES];
void initializeDisk() {
for (int i = 0; i < n; i++) disk[i] = 0;
for (int i = 0; i < MAX_FILES; i++) {
directory[i][0] = '\0';
file_start[i] = -1;
file_blocks[i] = 0;
}
}
void displayBitVector() {
printf("\nDisk Bit Vector:\n");
for (int i = 0; i < n; i++) printf("%d ", disk[i]);
printf("\n");
}
void createFile() {
char fileName[30];
int numBlocks, freeBlocks = 0, startBlock = -1, consecutiveBlocks = 0;
printf("\nEnter file name: ");
scanf("%s", fileName);
for (int i = 0; i < MAX_FILES; i++) {
if (strcmp(directory[i], fileName) == 0) {
printf("File already exists!\n");
return;
}
}
printf("Enter number of blocks: ");
scanf("%d", &numBlocks);
for (int i = 0; i < n; i++) if (disk[i] == 0) freeBlocks++;
if (freeBlocks < numBlocks) {
printf("Not enough free blocks!\n");
return;
}
for (int i = 0; i < n; i++) {
if (disk[i] == 0) {
if (consecutiveBlocks == 0) startBlock = i;
consecutiveBlocks++;
disk[i] = 1;
}
if (consecutiveBlocks == numBlocks) break;
}
if (consecutiveBlocks == numBlocks) {
for (int i = 0; i < MAX_FILES; i++) {
if (directory[i][0] == '\0') {
strcpy(directory[i], fileName);
file_start[i] = startBlock;
file_blocks[i] = numBlocks;
printf("File '%s' created at block %d.\n", fileName, startBlock);
return;
}
}
} else printf("Not enough contiguous blocks!\n");
}
void showDirectory() {
printf("\nDirectory:\n");
for (int i = 0; i < MAX_FILES; i++) {
if (directory[i][0] != '\0')
printf("File: %s, Start: %d, Blocks: %d\n", directory[i], file_start[i], file_blocks[i]);
}
}
void deleteFile() {
char fileName[30];
printf("\nEnter file name to delete: ");
scanf("%s", fileName);
for (int i = 0; i < MAX_FILES; i++) {
if (strcmp(directory[i], fileName) == 0) {
for (int j = file_start[i]; j < file_start[i] + file_blocks[i]; j++) disk[j] = 0;
directory[i][0] = '\0';
file_start[i] = -1;
file_blocks[i] = 0;
printf("File '%s' deleted.\n", fileName);
return;
}
}
printf("File not found!\n");
}
int main() {
int choice;
printf("Enter number of blocks in disk: ");
scanf("%d", &n);
disk = (int *)malloc(n * sizeof(int));
if (!disk) {
printf("Memory allocation failed!\n");
return -1;
}
initializeDisk();
do {
printf("\nMenu:\n1. Create File\n2. Show Directory\n3. Delete File\n4. Show Disk Bit Vector\n5. Exit\nEnter choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: createFile(); break;
case 2: showDirectory(); break;
case 3: deleteFile(); break;
case 4: displayBitVector(); break;
case 5: printf("Exiting...\n"); break;
default: printf("Invalid choice!\n");
}
} while (choice != 5);
free(disk);
return 0;
}
(LINKEDLIST)
ReplyDelete#include
#include
#include
#define MAX_FILES 10
int *disk, *next, n;
char directory[MAX_FILES][30];
int file_start[MAX_FILES];
void initializeDisk() {
for (int i = 0; i < n; i++) {
disk[i] = 0;
next[i] = -1;
}
for (int i = 0; i < MAX_FILES; i++) {
directory[i][0] = '\0';
file_start[i] = -1;
}
}
void displayBitVector() {
printf("\nDisk Bit Vector (0 = Free, 1 = Allocated):\n");
for (int i = 0; i < n; i++) printf("%d ", disk[i]);
printf("\n");
}
void createFile() {
char fileName[30];
int numBlocks;
printf("\nEnter file name: ");
scanf("%s", fileName);
for (int i = 0; i < MAX_FILES; i++) {
if (strcmp(directory[i], fileName) == 0) {
printf("File already exists!\n");
return;
}
}
printf("Enter number of blocks needed for the file: ");
scanf("%d", &numBlocks);
int freeBlocks = 0;
for (int i = 0; i < n; i++)
if (disk[i] == 0) freeBlocks++;
if (freeBlocks < numBlocks) {
printf("Not enough free blocks available!\n");
return;
}
int startBlock = -1, prevBlock = -1;
for (int i = 0; i < n; i++) {
if (disk[i] == 0) {
if (startBlock == -1) startBlock = i;
disk[i] = 1;
if (prevBlock != -1) next[prevBlock] = i;
prevBlock = i;
if (--numBlocks == 0) {
next[prevBlock] = -1;
break;
}
}
}
for (int i = 0; i < MAX_FILES; i++) {
if (directory[i][0] == '\0') {
strcpy(directory[i], fileName);
file_start[i] = startBlock;
printf("File '%s' created successfully starting at block %d.\n", fileName, startBlock);
return;
}
}
}
void showDirectory() {
printf("\nDirectory contents:\n");
for (int i = 0; i < MAX_FILES; i++) {
if (directory[i][0] != '\0')
printf("File Name: %s, Start Block: %d\n", directory[i], file_start[i]);
}
}
void deleteFile() {
char fileName[30];
printf("\nEnter the file name to delete: ");
scanf("%s", fileName);
for (int i = 0; i < MAX_FILES; i++) {
if (strcmp(directory[i], fileName) == 0) {
int currentBlock = file_start[i];
while (currentBlock != -1) {
disk[currentBlock] = 0;
int nextBlock = next[currentBlock];
next[currentBlock] = -1;
currentBlock = nextBlock;
}
directory[i][0] = '\0';
file_start[i] = -1;
printf("File '%s' deleted successfully.\n", fileName);
return;
}
}
printf("File not found!\n");
}
int main() {
int choice;
printf("Enter the number of blocks in the disk: ");
scanf("%d", &n);
disk = (int *)malloc(n * sizeof(int));
next = (int *)malloc(n * sizeof(int));
if (!disk || !next) {
printf("Memory allocation failed!\n");
return -1;
}
initializeDisk();
do {
printf("\nMenu:\n1. Create new file\n2. Show directory\n3. Delete file\n4. Show disk bit vector\n5. Exit\nEnter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: createFile(); break;
case 2: showDirectory(); break;
case 3: deleteFile(); break;
case 4: displayBitVector(); break;
case 5: printf("Exiting...\n"); break;
default: printf("Invalid choice! Please try again.\n");
}
} while (choice != 5);
free(disk);
free(next);
return 0;
}
(INDEX)
ReplyDelete#include
#include
#include
#define MAX_FILES 10
#define MAX_BLOCKS 100
int *disk, n;
char directory[MAX_FILES][30];
int file_index_block[MAX_FILES];
int file_blocks[MAX_FILES][MAX_BLOCKS];
void initializeDisk() {
for (int i = 0; i < n; i++) disk[i] = 0;
for (int i = 0; i < MAX_FILES; i++) {
directory[i][0] = '\0';
file_index_block[i] = -1;
for (int j = 0; j < MAX_BLOCKS; j++) file_blocks[i][j] = -1;
}
}
void displayBitVector() {
printf("\nDisk Bit Vector (0 = Free, 1 = Allocated):\n");
for (int i = 0; i < n; i++) printf("%d ", disk[i]);
printf("\n");
}
void createFile() {
char fileName[30];
int numBlocks;
printf("\nEnter file name: ");
scanf("%s", fileName);
for (int i = 0; i < MAX_FILES; i++)
if (strcmp(directory[i], fileName) == 0) {
printf("File already exists!\n");
return;
}
printf("Enter number of blocks needed: ");
scanf("%d", &numBlocks);
int indexBlock = -1;
for (int i = 0; i < n; i++)
if (disk[i] == 0) {
indexBlock = i;
disk[i] = 1;
break;
}
if (indexBlock == -1) {
printf("No free index block available!\n");
return;
}
int allocated = 0;
for (int i = 0; i < n && allocated < numBlocks; i++)
if (disk[i] == 0) {
disk[i] = 1;
file_blocks[MAX_FILES][allocated++] = i;
}
if (allocated < numBlocks) {
printf("Not enough free blocks!\n");
disk[indexBlock] = 0;
return;
}
for (int i = 0; i < MAX_FILES; i++)
if (directory[i][0] == '\0') {
strcpy(directory[i], fileName);
file_index_block[i] = indexBlock;
printf("File '%s' created with index block at %d.\n", fileName, indexBlock);
return;
}
printf("Directory full!\n");
}
void showDirectory() {
printf("\nDirectory:\n");
for (int i = 0; i < MAX_FILES; i++)
if (directory[i][0] != '\0')
printf("File: %s, Index Block: %d\n", directory[i], file_index_block[i]);
}
void deleteFile() {
char fileName[30];
printf("\nEnter file name to delete: ");
scanf("%s", fileName);
for (int i = 0; i < MAX_FILES; i++)
if (strcmp(directory[i], fileName) == 0) {
disk[file_index_block[i]] = 0;
for (int j = 0; file_blocks[i][j] != -1; j++) disk[file_blocks[i][j]] = 0;
directory[i][0] = '\0';
file_index_block[i] = -1;
printf("File '%s' deleted.\n", fileName);
return;
}
printf("File not found!\n");
}
int main() {
int choice;
printf("Enter number of disk blocks: ");
scanf("%d", &n);
disk = (int *)malloc(n * sizeof(int));
if (!disk) {
printf("Memory allocation failed!\n");
return -1;
}
initializeDisk();
do {
printf("\nMenu:\n1. Create file\n2. Show directory\n3. Delete file\n4. Show disk bit vector\n5. Exit\nEnter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: createFile(); break;
case 2: showDirectory(); break;
case 3: deleteFile(); break;
case 4: displayBitVector(); break;
case 5: printf("Exiting...\n"); break;
default: printf("Invalid choice!\n");
}
} while (choice != 5);
free(disk);
return 0;
}
mpi 1 random 1000 sum
ReplyDelete#include
#include
#include
#include
#define SIZE 1000
int main(int argc, char *argv[]) {
int rank, size, num[SIZE], l_min, l_max, g_min, g_max, c_size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
c_size = SIZE / size;
if (rank == 0) {
srand(time(NULL));
for (int i = 0; i < SIZE; i++) num[i] = rand() % 1000;
}
int *l_num = malloc(c_size * sizeof(int));
MPI_Scatter(num, c_size, MPI_INT, l_num, c_size, MPI_INT, 0, MPI_COMM_WORLD);
l_min = l_max = l_num[0];
for (int i = 1; i < c_size; i++) {
if (l_num[i] < l_min) l_min = l_num[i];
if (l_num[i] > l_max) l_max = l_num[i];
}
MPI_Reduce(&l_min, &g_min, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);
MPI_Reduce(&l_max, &g_max, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("Minimum number: %d\n", g_min);
printf("Maximum number: %d\n", g_max);
}
free(l_num);
MPI_Finalize();
return 0;
}
MPI MIN MAX
ReplyDelete#include
#include
#include
#include
#define SIZE 1000
int main(int argc, char *argv[]) {
int rank, size, num[SIZE], l_sum = 0, t_sum = 0, c_size;
double average = 0.0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
c_size = SIZE / size;
if (rank == 0) {
srand(time(NULL));
for (int i = 0; i < SIZE; i++) num[i] = rand() % 100;
}
int *l_num = malloc(c_size * sizeof(int));
MPI_Scatter(num, c_size, MPI_INT, l_num, c_size, MPI_INT, 0, MPI_COMM_WORLD);
for (int i = 0; i < c_size; i++) l_sum += l_num[i];
MPI_Reduce(&l_sum, &t_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
average = (double)t_sum / SIZE;
printf("Average of 1000 random numbers: %.2f\n", average);
}
free(l_num);
MPI_Finalize();
return 0;
}
MPI AVG
ReplyDelete#include
#include
#include
#include
#define SIZE 1000
int main(int argc, char *argv[]) {
int rank, size, num[SIZE], l_sum = 0, t_sum = 0, c_size;
double average = 0.0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
c_size = SIZE / size;
if (rank == 0) {
srand(time(NULL));
for (int i = 0; i < SIZE; i++) num[i] = rand() % 100;
}
int *l_num = malloc(c_size * sizeof(int));
MPI_Scatter(num, c_size, MPI_INT, l_num, c_size, MPI_INT, 0, MPI_COMM_WORLD);
for (int i = 0; i < c_size; i++) l_sum += l_num[i];
MPI_Reduce(&l_sum, &t_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
average = (double)t_sum / SIZE;
printf("Average of 1000 random numbers: %.2f\n", average);
}
free(l_num);
MPI_Finalize();
return 0;
}
MPI EVEN
ReplyDelete#include
#include
#include
#include
#define SIZE 1000
int main(int argc, char *argv[]) {
int rank, size, num[SIZE], l_sum = 0, t_sum = 0, c_size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
c_size = SIZE / size;
if (rank == 0) {
srand(time(NULL));
for (int i = 0; i < SIZE; i++) num[i] = (rand() % 100) * 2;
}
int *l_num = malloc(c_size * sizeof(int));
MPI_Scatter(num, c_size, MPI_INT, l_num, c_size, MPI_INT, 0, MPI_COMM_WORLD);
for (int i = 0; i < c_size; i++) l_sum += l_num[i];
MPI_Reduce(&l_sum, &t_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("Sum of all even 1000 random numbers: %d\n", t_sum);
}
free(l_num);
MPI_Finalize();
return 0;
}
MPI ODD
ReplyDelete#include
#include
#include
#include
#define SIZE 1000
int main(int argc, char *argv[]) {
int rank, size, num[SIZE], l_sum = 0, t_sum = 0, c_size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
c_size = SIZE / size;
if (rank == 0) {
srand(time(NULL));
for (int i = 0; i < SIZE; i++) num[i] = (rand() % 100) * 2 + 1;
}
int *l_num = malloc(c_size * sizeof(int));
MPI_Scatter(num, c_size, MPI_INT, l_num, c_size, MPI_INT, 0, MPI_COMM_WORLD);
for (int i = 0; i < c_size; i++) l_sum += l_num[i];
MPI_Reduce(&l_sum, &t_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("Sum of all odd 1000 random numbers: %d\n", t_sum);
}
free(l_num);
MPI_Finalize();
return 0;
}
c scan
ReplyDelete#include
#include
void cscan(int req[], int n, int head, int size, int dir)
{
int seek = 0, i, j, temp, bound = size,start;
for (i = 0; i < n ; i++)
{
for (j = i + 1; j < n; j++)
{
if (req[i] > req[j])
{
temp = req[i];
req[i] = req[j];
req[j] = temp;
}
}
}
for (start = 0; start < n; start++)
{
if (req[start] >= head)
{
break;
}
}
printf("Seek sequence: %d", head);
if (dir == 1)
{
for (i = start; i < n; i++)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
seek += abs(bound - head);
head = bound;
printf(" -> %d", head);
seek += abs(bound - 0);
head = 0;
printf(" -> %d", head);
for (i = 0; i < start; i++)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
}
else
{
for (i = start - 1; i >= 0; i--)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
seek += abs(head - 0);
head = 0;
printf(" -> %d", head);
seek += abs(bound - 0);
head = bound;
printf(" -> %d", head);
for (i = n - 1; i >= start; i--)
{
seek += abs(req[i] - head);
head = req[i];
printf(" -> %d", head);
}
}
printf("\nTotal seek time: %d\n", seek);
}
int main()
{
int n, head, size, dir, i;
printf("Enter number of requests: ");
scanf("%d", &n);
int req[n];
printf("Enter request queue: ");
for (i = 0; i < n; i++)
scanf("%d", &req[i]);
printf("Enter disk size: ");
scanf("%d", &size);
printf("Enter initial head position: ");
scanf("%d", &head);
printf("Enter direction (1 for right, 0 for left): ");
scanf("%d", &dir);
cscan(req, n, head, size, dir);
return 0;
}
BANKERS SET A
ReplyDelete#include
int n=5,m=4,j,i,cnt;
int work[]={1,5,2,0};
int max[7][7];
int allo[7][7];
int need[7][7];
int ss[5];
int finish[5];
//int max[10][10];
//int allo[10][10];
void print(int x[7][7])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d\t",x[i][j]);
printf("\n");
}
}
void acceptdata(int x[7][7])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
scanf("%d",&x[i][j]);
}
}
main()
{
int i;
printf("allocation matrix\n");
acceptdata(allo);
print(allo);
printf("\n\n");
printf("max matrix\n");
acceptdata(max);
print(max);
printf("need matrix\n");
computeneed();
print(need);
printf("work is\n");
for(i=0;i<m;i++)
printf("%d\t",work[i]);
checkstate();
}
void computeneed()
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
need[i][j]=max[i][j]-allo[i][j];
}
int checkneed(int i)
{
int j;
cnt=0;
for(j=0;j<m;j++)
if(need[i][j]<=work[j])
cnt++;
if(cnt==m)
return 1;
else
return 0;
}
void checkstate()
{
int flag=0;
int k=0,cnt=0;
for(i=0;i<n;i++)
finish[i]=0;
while(1)
{ flag=0;
for(i=0;i<n;i++)
{
if(finish[i]==0)
if(checkneed(i)==1)
{
for(j=0;j<m;j++)
work[j]=work[j]+allo[i][j];
finish[i]=1;
flag=1;
ss[k++]=i;
}
}
if(n==k)
{
cnt=1;
break;
}
if(flag==0)
{
printf("not in safe state");
break;
}
}
if(cnt==1)
{
printf("safe sequence is\n");
for(i=0;i<n;i++)
printf("P%d\t",ss[i]);
}
}
BANKERS SET B
ReplyDelete#include
int n = 5, m = 3, j, i, cnt;
int work[5];
int max[][3] = {{7,5,3}, {3,2,2}, {9,0,2}, {2,2,2}, {4,3,3}};
int allo[][3] = {{0,1,0}, {2,0,0}, {3,0,2}, {2,1,1}, {0,0,2}};
int need[5][3];
int ss[5];
int finish[5];
int avl[3];
// Function prototypes
void print(int x[][3]);
void computeneed();
int checkneed(int i);
void checkstate();
void print(int x[][3]) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++)
printf("%d\t", x[i][j]);
printf("\n");
}
}
void computeneed() {
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
need[i][j] = max[i][j] - allo[i][j];
}
int checkneed(int i) {
int j, cnt = 0;
for (j = 0; j < m; j++)
if (need[i][j] <= work[j])
cnt++;
return (cnt == m) ? 1 : 0;
}
void checkstate() {
int flag, k = 0, cnt = 0;
for (i = 0; i < n; i++)
finish[i] = 0;
while (1) {
flag = 0;
for (i = 0; i < n; i++) {
if (finish[i] == 0 && checkneed(i) == 1) {
for (j = 0; j < m; j++)
work[j] += allo[i][j];
finish[i] = 1;
flag = 1;
ss[k++] = i;
}
}
if (n == k) {
cnt = 1;
break;
}
if (flag == 0) {
printf("Not in a safe state\n");
return;
}
}
if (cnt == 1) {
printf("Safe sequence is: ");
for (i = 0; i < n; i++)
printf("P%d\t", ss[i]);
printf("\n");
}
for (i = 0; i < m; i++)
work[i] = avl[i];
}
int main() {
int i;
printf("Allocation Matrix:\n");
print(allo);
printf("\nMax Matrix:\n");
print(max);
printf("Need Matrix:\n");
computeneed();
print(need);
printf("Enter available resources: ");
for (i = 0; i < m; i++) {
scanf("%d", &work[i]);
avl[i] = work[i];
}
checkstate();
return 0;
}
C LOOK
ReplyDelete#include
#include
int main()
{
int n, head, i, j, temp, seek_time = 0, dir;
printf("Enter number of requests: ");
scanf("%d", &n);
int req[n];
printf("Enter request queue: ");
for (i = 0; i < n; i++)
scanf("%d", &req[i]);
printf("Enter initial head position: ");
scanf("%d", &head);
printf("Enter direction (1 for right, 0 for left): ");
scanf("%d", &dir);
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (req[i] > req[j])
{
temp = req[i];
req[i] = req[j];
req[j] = temp;
}
}
}
int start = 0;
while (start < n && req[start] < head)
start++;
printf("\nC-LOOK Seek Sequence is: %d", head);
int c_head = head;
if (dir == 1)
{
for (i = start; i < n; i++)
{
seek_time += abs(req[i] - c_head);
c_head = req[i];
printf(" -> %d", c_head);
}
if (start > 0)
{
seek_time += abs(req[0] - c_head);
c_head = req[0];
printf(" -> %d", c_head);
for (i = 1; i < start; i++)
{
seek_time += abs(req[i] - c_head);
c_head = req[i];
printf(" -> %d", c_head);
}
}
}
else
{
for (i = start - 1; i >= 0; i--)
{
seek_time += abs(req[i] - c_head);
c_head = req[i];
printf(" -> %d", c_head);
}
if (start < n)
{
seek_time += abs(req[n - 1] - c_head);
c_head = req[n - 1];
printf(" -> %d", c_head);
for (i = n - 2; i >= start; i--)
{
seek_time += abs(req[i] - c_head);
c_head = req[i];
printf(" -> %d", c_head);
}
}
}
printf("\nTotal seek time: %d\n", seek_time);
return 0;
}
All in one MPI
ReplyDeleteAll in one MPI
ReplyDelete#include
#include
#include
#include
#define N 1000
int main(int argc, char *argv[]) {
int rank, size, local_sum = 0, global_sum, global_min, global_max;
int even_sum = 0, odd_sum = 0, global_even_sum, global_odd_sum;
int *data = NULL, *part, local_min, local_max;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int chunk = N / size;
// Rank 0 initializes data
if (rank == 0) {
data = malloc(N * sizeof(int));
srand(time(0));
for (int i = 0; i < N; i++)
data[i] = rand() % 100; // Numbers between 0 and 99
}
// Allocate memory for each process
part = malloc(chunk * sizeof(int));
// Scatter the data across processes
MPI_Scatter(data, chunk, MPI_INT, part, chunk, MPI_INT, 0, MPI_COMM_WORLD);
// Compute local sum, min, max, and even/odd sums
local_min = local_max = part[0];
for (int i = 0; i < chunk; i++) {
local_sum += part[i];
if (part[i] < local_min) local_min = part[i];
if (part[i] > local_max) local_max = part[i];
if (part[i] % 2 == 0) even_sum += part[i];
else odd_sum += part[i];
}
// Reduce sums and min/max values across all processes
MPI_Reduce(&local_sum, &global_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
MPI_Reduce(&local_min, &global_min, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);
MPI_Reduce(&local_max, &global_max, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
MPI_Reduce(&even_sum, &global_even_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
MPI_Reduce(&odd_sum, &global_odd_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
// Rank 0 prints the results
if (rank == 0) {
printf("Total Sum: %d\n", global_sum);
printf("Average: %.2f\n", (float)global_sum / N);
printf("Even Numbers Sum: %d\n", global_even_sum);
printf("Odd Numbers Sum: %d\n", global_odd_sum);
printf("Min: %d\n", global_min);
printf("Max: %d\n", global_max);
}
// Free memory and finalize MPI
free(data);
free(part);
MPI_Finalize();
return 0;
}