Scilab Program - runge kutta 4nd order - IProgramX

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

Post a Comment

18 Comments

  1. FCFS#include
    #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);
    }

    ReplyDelete
  2. STFF


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

    ReplyDelete
  3. C-SCAN



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

    ReplyDelete
  4. SCAN


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

    ReplyDelete
  5. con
    #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;
    }

    ReplyDelete
  6. (LINKEDLIST)

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

    ReplyDelete
  7. (INDEX)
    #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;
    }

    ReplyDelete
  8. mpi 1 random 1000 sum
    #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;
    }

    ReplyDelete
  9. MPI MIN MAX

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

    ReplyDelete
  10. MPI AVG

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

    ReplyDelete
  11. MPI EVEN

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

    ReplyDelete
  12. MPI ODD

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

    ReplyDelete
  13. c scan


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


    ReplyDelete
  14. BANKERS SET A

    #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]);


    }
    }

    ReplyDelete
  15. BANKERS SET B

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

    ReplyDelete
  16. C LOOK


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

    ReplyDelete
  17. All in one MPI
    #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;
    }


    ReplyDelete