Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

It\'s not running once I selected an algorithm menu opiton. Asking for help modi

ID: 3868832 • Letter: I

Question

It's not running once I selected an algorithm menu opiton. Asking for help modifying the code so the algorithm works.

The following is a menu driven c program that prompts the user to open a file that contains addresses(create a text file with a list of values to test), prompts for pg size and frame, and prints out page fault for the selected algo. This is what I have so far.

--CODE--

#include<stdio.h>

#include <stdlib.h>

//#include<iostream.h>

int num_of_add,number_frames, page_fault_count=0;

int index[10000],page[50];

int curr_fault=0;

//virtual addresses

int va1,va2,va3;

//FROM A FILE

void getFileData()

{

printf(" Page Size :");

int num_of_add =0;

/* Pointer to the file */

FILE *fp1;

/* Opening a file in r mode*/

fp1= fopen ("inputfile.text", "r");

if(fp1==NULL){printf("error in file open");}

while(1)

{ char c;

int x;

///c = fgetc(fp1);

fscanf(fp1,"%i",&x);

printf("reading: %i",x);

if(x==-1)

break;

else

{

//x is a memory value

index[num_of_add]=x;

printf("# of pages %d", index[num_of_add]);

num_of_add= num_of_add+1;

}

}

///num_of_add is the number of values in the file

fclose(fp1);

printf("number of addresses: %d",num_of_add);

printf(" Number of frames allocated to the process:");

//Number of Frames

scanf("%d",&number_frames);

}

void initialize()

{

//Page Fault Count

page_fault_count=0;

for(va1=0; va1<number_frames; va1++)

page[va1]=9999;

}

//Fault Found

int fault_found(int data)

{

//Current Fault

curr_fault=0;

for(va2=0; va2<number_frames; va2++)

{

if(page[va2]==data)

{

curr_fault=1;

break;

}

}

return curr_fault;

}

int table(int data)

{

int index_length;

for(va3=0; va3<number_frames; va3++)

{

if(page[va3]==data)

{

index_length=va3;

break;

}

}

return index_length;

}

//Display Fault

void show_fault()

{

printf(" Total page fault count:%d",page_fault_count);

printf(" Page Fault percentage:%d"); //percentage to be determined

}

//Display Pages

void show_pages()

{

for (va3=0; va3<number_frames; va3++)

{

if(page[va3]!=9999)

printf(" %d",page[va3]);

}

}

void fifo()

{

initialize();

for(va1=0; va1<n; va1++)

{

printf(" For %d :",index[va1]);

if(fault_found(index[va1])==0)

{

for(va3=0; va3<number_frames-1; va3++)

//Read the page array

page[va3]=page[va3+1];

//Update page array is the new index

page[va3]=index[va1];

  

page_fault_count++;

show_pages();

}

else

printf("No page fault");

}

show_fault();

}

void optimal()

{

initialize();

int head[50];

for(va1=0; va1<num_of_add; va1++)

{

printf(" For %d :",index[va1]);

if(fault_found(index[va1])==0)

{

for(va2=0; va2<number_frames; va2++)

{

int last_page=page[va2];

int lfnd=0;

for(va3=va1; va3<n; va3++)

{

if(last_page==index[va3])

{

head[va2]=va3;

lfnd=1;

break;

}

else

lfnd=0;

}

if(!lfnd)

head[va2]=9999;

}

int limit=-9999;

int temp_index;

for(va2=0; va2<number_frames; va2++)

{

if(head[va2]>limit)

{

limit=head[va2];

temp_index=va2;

}

}

page[temp_index]=index[li];

page_fault_count++;

show_pages();

}

else

printf("No page fault");

}

show_fault();

}

void lru()

{

initialize();

int least_used[50];

for(va1=0; va1<n; va1++)

{

printf(" For %d :",index[va1]);

if(fault_found(index[va1])==0)

{

for(va2=0; va2<number_frames; va2++)

{

int last_page=page[va2];

int lfnd=0;

for(va3=va1-1; va3>=0; va3--)

{

if(last_page==index[va3])

{

least_used[va2]=va3;

lfnd=1;

break;

}

else

lfnd=0;

}

if(!lfnd)

least_used[va2]=-9999;

}

int lowbound=9999;

int temp_index;

for(va2=0; va2<number_frames; va2++)

{

if(least_used[va2]<lowbound)

{

lowbound=least_used[va2];

temp_index=va2;

}

}

page[temp_index]=index[va1];

page_fault_count++;

show_pages();

}

else

printf("No page fault!");

}

show_fault();

}

void mru()

{

int last_count[100];

int least_used,last_number;

int frame_count=0,new_number=0;

initialize();

for(va1=0; va1<number_frames; va1++)

last_count[va1]=0;

for(va1=0; va1<num_of_add; va1++)

{

printf(" For %d :",index[va1]);

if(fault_found(index[va1]))

{

int index_length=table(index[va1]);

last_count[index_length]++;

printf("No page fault!");

}

else

{

page_fault_count++;

if(new_number<number_frames)

{

page[new_number]=index[va1];

last_count[new_number]=last_count[new_number]+1;

new_number++;

}

else

{

least_used=9999;

for(va3=0; va3<number_frames; va3++)

if(last_count[va3]<least_used)

{

least_used=last_count[va3];

last_number=va3;

}

page[last_number]=index[va1];

frame_count=0;

for(va3=0; va3<=va1; va3++)

if(index[va1]==index[va3])

frame_count=frame_count+1;

last_count[last_number]=frame_count;

}

show_pages();

}

}

show_fault();

}

//MAIN

int main()

{

int selectone;

while(1)

{

printf(" Select an Algorithm 1.Enter 2.FIFO 3.LRU 4.MRU 5.Optimal 6.Exit Please make a selection:");

scanf("%d",&selectone);

switch(selectone)

{

case 1:

getFileData();

break;

case 2:

fifo();

break;

case 3:

  

lru();

break;

case 4:

mru();

break;

case 5:

optimal();

break;

default:

return 0;

break;

}

}

}

Explanation / Answer

During compilation I found three errors:

1. There is variable n used in the program which has never been initialized or declared.

2. Like same there is another variable li[] used in the program which is never declared in the program.

So, that i corrected in the program . first I gone through the menu program for a better understanding and then found that variable n should be replaced with variable num_of_add. please find the updated code below which is running fine .

#include<stdio.h>

#include <stdlib.h>

//#include<iostream.h>

int num_of_add, number_frames, page_fault_count = 0;

int index[10000], page[50];

int curr_fault = 0;

//virtual addresses

int va1, va2, va3;

//FROM A FILE

void getFileData ()

{

printf (" Page Size :");

int num_of_add = 0;

  

/* Pointer to the file */

FILE * fp1;

  

/* Opening a file in r mode */

fp1 = fopen ("inputfile.text", "r");

  

if (fp1 == NULL)

{

printf ("error in file open");

}

  

while (1)

  

{

char c;

  

int x;

  

///c = fgetc(fp1);

fscanf (fp1, "%i", &x);

  

printf ("reading: %i", x);

  

if (x == -1)

break;

  

else

{

//x is a memory value

index[num_of_add] = x;

printf ("# of pages %d", index[num_of_add]);

num_of_add = num_of_add + 1;

}

  

}

  

///num_of_add is the number of values in the file

fclose (fp1);

  

printf ("number of addresses: %d", num_of_add);

  

printf (" Number of frames allocated to the process:");

  

//Number of Frames

  

scanf ("%d", &number_frames);

}

void

initialize ()

{

  

printf("initializing data");

//Page Fault Count

  

page_fault_count = 0;

  

for (va1 = 0; va1 < number_frames; va1++)

  

page[va1] = 9999;

}

//Fault Found

  

int

fault_found (int data)

{

  

//Current Fault

  

curr_fault = 0;

  

for (va2 = 0; va2 < number_frames; va2++)

  

{

  

if (page[va2] == data)

{

curr_fault = 1;

break;

}

  

}

  

return curr_fault;

}

int

table (int data)

{

  

int index_length;

  

for (va3 = 0; va3 < number_frames; va3++)

  

{

  

if (page[va3] == data)

{

index_length = va3;

break;

}

  

}

  

return index_length;

}

//Display Fault

  

void

show_fault ()

{

  

printf (" Total page fault count:%d", page_fault_count);

  

printf (" Page Fault percentage:%d"); //percentage to be determined

}

//Display Pages

  

void

show_pages ()

{

  

for (va3 = 0; va3 < number_frames; va3++)

  

{

  

if (page[va3] != 9999)

printf (" %d", page[va3]);

  

}

}

void

fifo ()

{

  

printf("inside fifo");

initialize ();

  

for (va1 = 0; va1 < num_of_add; va1++)

  

{

  

printf (" For %d :", index[va1]);

  

if (fault_found (index[va1]) == 0)

{

for (va3 = 0; va3 < number_frames - 1; va3++)

//Read the page array

page[va3] = page[va3 + 1];

//Update page array is the new index

page[va3] = index[va1];

page_fault_count++;

show_pages ();

}

  

else

printf ("No page fault");

  

}

  

show_fault ();

}

void

optimal ()

{

  

initialize ();

  

int head[50];

  

for (va1 = 0; va1 < num_of_add; va1++)

  

{

  

printf (" For %d :", index[va1]);

  

if (fault_found (index[va1]) == 0)

{

for (va2 = 0; va2 < number_frames; va2++)

{

int last_page = page[va2];

int lfnd = 0;

for (va3 = va1; va3 <page_fault_count ; va3++)

{

if (last_page == index[va3])

{

head[va2] = va3;

lfnd = 1;

break;

}

else

lfnd = 0;

}

if (!lfnd)

head[va2] = 9999;

}

int limit = -9999;

int temp_index;

for (va2 = 0; va2 < number_frames; va2++)

{

if (head[va2] > limit)

{

limit = head[va2];

temp_index = va2;

}

}

page[temp_index] = index[va2];

page_fault_count++;

show_pages ();

}

  

else

printf ("No page fault");

  

}

  

show_fault ();

}

void

lru ()

{

  

initialize ();

  

int least_used[50];

  

for (va1 = 0; va1 < num_of_add; va1++)

  

{

  

printf (" For %d :", index[va1]);

  

if (fault_found (index[va1]) == 0)

{

for (va2 = 0; va2 < number_frames; va2++)

{

int last_page = page[va2];

int lfnd = 0;

for (va3 = va1 - 1; va3 >= 0; va3--)

{

if (last_page == index[va3])

{

least_used[va2] = va3;

lfnd = 1;

break;

}

else

lfnd = 0;

}

if (!lfnd)

least_used[va2] = -9999;

}

int lowbound = 9999;

int temp_index;

for (va2 = 0; va2 < number_frames; va2++)

{

if (least_used[va2] < lowbound)

{

lowbound = least_used[va2];

temp_index = va2;

}

}

page[temp_index] = index[va1];

page_fault_count++;

show_pages ();

}

  

else

printf ("No page fault!");

  

}

  

show_fault ();

}

void

mru ()

{

  

int last_count[100];

  

int least_used, last_number;

  

int frame_count = 0, new_number = 0;

  

initialize ();

  

for (va1 = 0; va1 < number_frames; va1++)

  

last_count[va1] = 0;

  

for (va1 = 0; va1 < num_of_add; va1++)

  

{

  

printf (" For %d :", index[va1]);

  

if (fault_found (index[va1]))

{

int index_length = table (index[va1]);

last_count[index_length]++;

printf ("No page fault!");

}

  

else

{

page_fault_count++;

if (new_number < number_frames)

{

page[new_number] = index[va1];

last_count[new_number] = last_count[new_number] + 1;

new_number++;

}

else

{

least_used = 9999;

for (va3 = 0; va3 < number_frames; va3++)

if (last_count[va3] < least_used)

{

least_used = last_count[va3];

last_number = va3;

}

page[last_number] = index[va1];

frame_count = 0;

for (va3 = 0; va3 <= va1; va3++)

if (index[va1] == index[va3])

frame_count = frame_count + 1;

last_count[last_number] = frame_count;

}

show_pages ();

}

  

}

  

show_fault ();

}

//MAIN

  

int

main ()

{

  

int selectone;

  

while (1)

  

{

  

printf

(" Select an Algorithm 1.Enter 2.FIFO 3.LRU 4.MRU 5.Optimal 6.Exit Please make a selection:");

  

scanf ("%d", &selectone);

  

switch (selectone)

{

case 1:

getFileData ();

break;

case 2:

fifo ();

break;

case 3:

lru ();

break;

case 4:

mru ();

break;

case 5:

optimal ();

break;

default:

return 0;

break;

}

  

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote