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

Modify so that it uses qsort function to sort the array of protein powders inste

ID: 3713671 • Letter: M

Question

Modify so that it uses qsort function to sort the array of
protein powders instead of selection sort function. Your program should include a
comparison function that compares protein struct for qsort function.

#include <stdio.h>
#include <stdlib.h>

struct protein{

   char proteinBrand[100];
   int unitsInStock;
   int unitsSold;
   double averageReview;
   int totalReviews;

};

void selection_sort(struct protein protein_powders[], int n)//sorting from file
{

   int i, largest = 0;

   if (n==1)
   return;

   for (i=1;i<n;i++)

   if (protein_powders[i].averageReview < protein_powders[largest].averageReview)
   largest = i;

   if (largest<n-1)
   {
       struct protein temp = protein_powders[n-1];
       protein_powders[n-1] = protein_powders[largest];
       protein_powders[largest] = temp;
   }

   selection_sort(protein_powders,n-1);

}

int main(int argc, char const *argv[])
{
   if(argc < 2)//if less
   {
       printf("Usage: ./a.out protein.txt ");
       return 0;
   }

   struct protein protein_powders[100];

   FILE *myFile=fopen(argv[1],"r");//will open what is typed by user
   FILE *wFile=fopen("protein.txt.rcd","w");//written to new file

   int n=0;

   if(myFile==NULL)//error code
   {
       printf("Error while open the file");
       return 1;
   }

   else
   {

       int inp =0;

       while(inp!=-1)
       {

           inp = fscanf(myFile,"%d %d %lf %d %[^ ]s ",&protein_powders[n].unitsInStock,&protein_powders[n].unitsSold,&protein_powders[n].averageReview,&protein_powders[n].totalReviews,protein_powders[n].proteinBrand);
           n++;

       }

   }

   selection_sort(protein_powders, n);

   int i;

   for(i=0;i<n-1;i++)
   {

       if(protein_powders[i].averageReview>=4)
       {

           fprintf(wFile,"%d %d %.2lf %d %s ",protein_powders[i].unitsInStock,protein_powders[i].unitsSold,protein_powders[i].averageReview,protein_powders[i].totalReviews,protein_powders[i].proteinBrand);
           fprintf(wFile," ");

       }

   }

   printf("Sorted and written to protein.txt.rcd ");
   fclose(myFile);
   fclose(wFile);
   return 0;

}

Explanation / Answer

Given below is the modified code for the question.. Since you have not given sample input file, I could not test it. Please let me know in case of any issues, I'll help.
Please do rate the answer if it was helpful. Thank you


#include <stdio.h>
#include <stdlib.h>

struct protein{

char proteinBrand[100];
int unitsInStock;
int unitsSold;
double averageReview;
int totalReviews;

};

int compareProtein (const void * a, const void * b)
{
struct protein p1 = *((struct protein *)a);
struct protein p2 = *((struct protein *)b);

if(p1.averageReview < p2.averageReview)
return 1;
else if(p1.averageReview > p2.averageReview )
return -1;
else
return 0;

}

int main(int argc, char const *argv[])
{
if(argc < 2)//if less
{
printf("Usage: ./a.out protein.txt ");
return 0;
}

struct protein protein_powders[100];

FILE *myFile=fopen(argv[1],"r");//will open what is typed by user
FILE *wFile=fopen("protein.txt.rcd","w");//written to new file

int n=0;

if(myFile==NULL)//error code
{
printf("Error while open the file");
return 1;
}

else
{

int inp =0;

while(inp!=-1)
{

inp = fscanf(myFile,"%d %d %lf %d %[^ ]s ",&protein_powders[n].unitsInStock,&protein_powders[n].unitsSold,&protein_powders[n].averageReview,&protein_powders[n].totalReviews,protein_powders[n].proteinBrand);
n++;

}

}

qsort(protein_powders, n, sizeof(struct protein), compareProtein);

int i;

for(i=0;i<n-1;i++)
{

if(protein_powders[i].averageReview>=4)
{

fprintf(wFile,"%d %d %.2lf %d %s ",protein_powders[i].unitsInStock,protein_powders[i].unitsSold,protein_powders[i].averageReview,protein_powders[i].totalReviews,protein_powders[i].proteinBrand);
fprintf(wFile," ");

}

}

printf("Sorted and written to protein.txt.rcd ");
fclose(myFile);
fclose(wFile);
return 0;

}

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