1. created a p07 2. copied .c .h and makefile 3. renamed main.c to sort158a.c 4. modified the header title 5. updated the make file to: #Create binary sort158: main.o merge.o mergesort.o wrt.o         gcc -o sort158 main.o merge.o mergesort.o wrt.o -lm #Create object file for main.c main.o: main.c mergesort.h         gcc -c main.c #Create object file for merge.c merge.o: merge.c mergesort.h         gcc -c merge.c #Create object file for mergesort.c mergesort.o: mergesort.c mergesort.h         gcc -c mergesort.c wrt.o: wrt.c         gcc -c wrt.c #Delete the all of the object files clean:         rm *.o sort158 #Create object file for wrt.c 6. Error: The makefile wont compile 7. Error: I need to make the files to compile with eachother sort158a.c (main.c) #include "mergesort.h" int main(void) {  int sz, key[] = { 4, 3, 1, 67, 55, 8, 0, 4,                   -5, 37, 7, 4, 2, 9, 1, -1 }; int n  = sizeof(key) / sizeof(int); /* the size of key [] */ int i; /*remove first 4 elements from key [] */ for(i = 4; i < n; i++) { key[ i - 4] = key[i]; } sz = n - 4; /* Update the size of key [] */ wrt(key, sz); /* Print the contents of the orginal array */ mergesort(key, sz); /* Sort the array using mergesort */ printf("After mergesort:\n"); /*prints "After mergesort:"*/ wrt(key, sz); // Print the contents of the sorted array /* Restore first 3 elements in key[] */ key[0] = 4; key[1] = 3; key[2] = 1; key[3] = 67; sz = n; return 0; } Merge.c #include "mergesort.h" void merge(int a[], int b[], int c[], int m, int n) {    int   i = 0, j = 0, k = 0; /* Loop through both arrays and compare their elements to eachother */    while (i < m && j < n)       if (a[i] < b[j])          c[k++] = a[i++];       else          c[k++] = b[j++]; /* If there are any remaining elements in array b[]. copy them to array c[]. */   while (i < m)                /* pick up any remainder */          c[k++] = a[i++]; /* If there are any remaining elements in array a[], copy them to array c[]. */    while (j < n)       c[k++] = b[j++]; } mergesort.h  #include "mergesort.h" void mergesort(int key[], int n) { int j, k, m, *w; // Find the largest power of 2 less than or equal to n for (m = 1; m < n; m *= 2)      /* m is a power of 2 */      ; // Check if n is a power of 2, if not exit with error message if (n < m) {     printf("ERROR: Array size not a power of 2 - bye!\n");     exit(1); } w = calloc(n, sizeof(int));     /* allocate workspace */ assert(w != NULL);              /* check that calloc() worked */ //Sort the array using mergesort for (k = 1; k < n; k *= 2) {   for (j = 0; j < n - k; j += 2 * k) /* merge two subarrays of key [] into a subarray of w[]. */     merge(key + j, key + j + k, w + j, k, k);   for (j = 0; j < n; j++)   key[j] = w[j];                /* write W back into key */  }  free (w);                      /*free the workspace*/ } Mergesort.h #include #include #include // This function merges two sorted arrys a and b into a sorted array c. // paterameters: a - c sorts its array. m: is the elements in a n: is the number of elements in b void    merge(int a[], int b[], int c[], int m, int n); //This function sorts an array of integers using the merge sort algorithm //key: the array of integers to be sorted //n: the number of elements in the array void    mergesort(int key[], int n); //This function writes an array of integers //key: the array of integers to be written //sz: the number of elements in the array void    wrt(int key [], int sz); wrt.c

EBK JAVA PROGRAMMING
9th Edition
ISBN:9781337671385
Author:FARRELL
Publisher:FARRELL
Chapter8: Arrays
Section: Chapter Questions
Problem 9PE
icon
Related questions
Question

1. created a p07
2. copied .c .h and makefile
3. renamed main.c to sort158a.c
4. modified the header title
5. updated the make file to:

#Create binary
sort158: main.o merge.o mergesort.o wrt.o
        gcc -o sort158 main.o merge.o mergesort.o wrt.o -lm

#Create object file for main.c
main.o: main.c mergesort.h
        gcc -c main.c

#Create object file for merge.c
merge.o: merge.c mergesort.h
        gcc -c merge.c

#Create object file for mergesort.c
mergesort.o: mergesort.c mergesort.h
        gcc -c mergesort.c

wrt.o: wrt.c
        gcc -c wrt.c

#Delete the all of the object files
clean:
        rm *.o sort158

#Create object file for wrt.c


6. Error: The makefile wont compile
7. Error: I need to make the files to compile with eachother

sort158a.c (main.c)

#include "mergesort.h"

int main(void)
{
 int sz, key[] = { 4, 3, 1, 67, 55, 8, 0, 4,
                  -5, 37, 7, 4, 2, 9, 1, -1 };
int n  = sizeof(key) / sizeof(int); /* the size of key [] */
int i;

/*remove first 4 elements from key [] */
for(i = 4; i < n; i++) {
key[ i - 4] = key[i];

}

sz = n - 4; /* Update the size of key [] */
wrt(key, sz); /* Print the contents of the orginal array */

mergesort(key, sz); /* Sort the array using mergesort */
printf("After mergesort:\n"); /*prints "After mergesort:"*/
wrt(key, sz); // Print the contents of the sorted array

/* Restore first 3 elements in key[] */
key[0] = 4;
key[1] = 3;
key[2] = 1;
key[3] = 67;
sz = n;

return 0;
}

Merge.c

#include "mergesort.h"

void merge(int a[], int b[], int c[], int m, int n)
{
   int   i = 0, j = 0, k = 0;

/* Loop through both arrays and compare their elements to eachother */

   while (i < m && j < n)
      if (a[i] < b[j])
         c[k++] = a[i++];
      else
         c[k++] = b[j++];

/* If there are any remaining elements in array b[]. copy them to array c[]. */

  while (i < m)                /* pick up any remainder */
         c[k++] = a[i++];
/* If there are any remaining elements in array a[], copy them to array c[]. */

   while (j < n)
      c[k++] = b[j++];
}

mergesort.h 

#include "mergesort.h"
void mergesort(int key[], int n)
{
int j, k, m, *w;

// Find the largest power of 2 less than or equal to n
for (m = 1; m < n; m *= 2)      /* m is a power of 2 */
     ;
// Check if n is a power of 2, if not exit with error message
if (n < m) {
    printf("ERROR: Array size not a power of 2 - bye!\n");
    exit(1);
}
w = calloc(n, sizeof(int));     /* allocate workspace */
assert(w != NULL);              /* check that calloc() worked */

//Sort the array using mergesort
for (k = 1; k < n; k *= 2) {
  for (j = 0; j < n - k; j += 2 * k)
/* merge two subarrays of key [] into a subarray of w[]. */
    merge(key + j, key + j + k, w + j, k, k);
  for (j = 0; j < n; j++)
  key[j] = w[j];                /* write W back into key */
 }
 free (w);                      /*free the workspace*/
}

Mergesort.h

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

// This function merges two sorted arrys a and b into a sorted array c.
// paterameters: a - c sorts its array. m: is the elements in a n: is the number of elements in b
void    merge(int a[], int b[], int c[], int m, int n);

//This function sorts an array of integers using the merge sort algorithm
//key: the array of integers to be sorted
//n: the number of elements in the array
void    mergesort(int key[], int n);
//This function writes an array of integers
//key: the array of integers to be written
//sz: the number of elements in the array
void    wrt(int key [], int sz);

wrt.c






 

 




 

Merge Sort
Below are 3 examples of output. The first with an array of 15 integers. The second with an array
of 16 (power of 2) integers and the third with 17 integers.
Example of Output with 15 integers
Before mergesort:
4
3 1 67 55 4 -5 37
mergesort:
After
-5 -1 1 1 2 3 4 4
7 4 2 9 1 -1 6
4 6 7 9
Example of Output with 16 integers
Before mergesort:
4 3 1 67 55 80
After mergesort:
-5 -1 0 1 1 2 3 4 4 4 7 8
4 -5 37
-5
LD
37
7 4 2 9 1 -1
Example of Output with 17 integers
Before mergesort:
3 1 67 55 804
4
After mergesort:
-5 -1 0 1 1 2 3 4 4 4 6 7 8 9 37 55 67
7
37 55 67
4
9 37 55 67
291-1
6
Transcribed Image Text:Merge Sort Below are 3 examples of output. The first with an array of 15 integers. The second with an array of 16 (power of 2) integers and the third with 17 integers. Example of Output with 15 integers Before mergesort: 4 3 1 67 55 4 -5 37 mergesort: After -5 -1 1 1 2 3 4 4 7 4 2 9 1 -1 6 4 6 7 9 Example of Output with 16 integers Before mergesort: 4 3 1 67 55 80 After mergesort: -5 -1 0 1 1 2 3 4 4 4 7 8 4 -5 37 -5 LD 37 7 4 2 9 1 -1 Example of Output with 17 integers Before mergesort: 3 1 67 55 804 4 After mergesort: -5 -1 0 1 1 2 3 4 4 4 6 7 8 9 37 55 67 7 37 55 67 4 9 37 55 67 291-1 6
Program Name
sort158a
Description
The program will sort any number of integers for lowest to highest.
The program will use the format and words displayed in the Example of Output.
The program will use the following files:
sort158a.c
merge.c
mergesort.c
mergesort.h
Requirements
All the module are files from the class textbook "A Book on C", 6.9 An Example: of
Merge and Merge Sort, Pages 263-269. You should have already entered these modules on
CISWEB as part of assignment A07 and will be in directory a07. If you have not done
assignment A07, do it NOW! Source code file main.c will become sort158a.c.
To begin do the following:
wrt.c
1. Create the p07 directory as required and go to it.
2. Copy all the .c and .h files as well as the makefile from a07
3. Rename main.c to sort158a.c
4. Go into sort158a.c and change the title. Make sure to indicate that this is a modification
of main.c from "A Book on C"
5. Update the makefile to reflect the new filenames.
6. Compile the program using the make command and verify that no errors or warnings
occur. If they do, make the appropriate corrections.
7. Validate that sort158a works properly. If it does not make corrections as needed.
As written in the text and A07, the program will sort integers. However, the number of
integers must be a power of 2. In main.c, key[ ] has 16 integers. But as you should already
know, the program will not sort if one integers is removed or added.
What you are going to do is modify the mergesort.c module so that a non-power of 2
number of integers can be sorted. When you modify a module, indicate by way of
comment, what was changed, the date the change was made. You will also need to add or
remove an integer to/from key[] in module sort158a.c.
You are NOT allowed to change merge.c, mergesort.h or wrt.c files
The mergesort function in file mergesort.c MUST call the merge function which it currently does.
The main function in sort158a.e you can only change the number of integers in the key[] array.
Transcribed Image Text:Program Name sort158a Description The program will sort any number of integers for lowest to highest. The program will use the format and words displayed in the Example of Output. The program will use the following files: sort158a.c merge.c mergesort.c mergesort.h Requirements All the module are files from the class textbook "A Book on C", 6.9 An Example: of Merge and Merge Sort, Pages 263-269. You should have already entered these modules on CISWEB as part of assignment A07 and will be in directory a07. If you have not done assignment A07, do it NOW! Source code file main.c will become sort158a.c. To begin do the following: wrt.c 1. Create the p07 directory as required and go to it. 2. Copy all the .c and .h files as well as the makefile from a07 3. Rename main.c to sort158a.c 4. Go into sort158a.c and change the title. Make sure to indicate that this is a modification of main.c from "A Book on C" 5. Update the makefile to reflect the new filenames. 6. Compile the program using the make command and verify that no errors or warnings occur. If they do, make the appropriate corrections. 7. Validate that sort158a works properly. If it does not make corrections as needed. As written in the text and A07, the program will sort integers. However, the number of integers must be a power of 2. In main.c, key[ ] has 16 integers. But as you should already know, the program will not sort if one integers is removed or added. What you are going to do is modify the mergesort.c module so that a non-power of 2 number of integers can be sorted. When you modify a module, indicate by way of comment, what was changed, the date the change was made. You will also need to add or remove an integer to/from key[] in module sort158a.c. You are NOT allowed to change merge.c, mergesort.h or wrt.c files The mergesort function in file mergesort.c MUST call the merge function which it currently does. The main function in sort158a.e you can only change the number of integers in the key[] array.
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 5 steps

Blurred answer
Knowledge Booster
JQuery and Javascript
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
EBK JAVA PROGRAMMING
EBK JAVA PROGRAMMING
Computer Science
ISBN:
9781337671385
Author:
FARRELL
Publisher:
CENGAGE LEARNING - CONSIGNMENT