For this assignment you will be required to write functions which solve each of the following problems. You must place all of your functions in one project. If you use any code that you find online, you must reference it in comments.
1.(10 pts) Write a function called my_str_n_cat() that accepts pointer to a destination character array and a pointer to a source character array (which is assumed to be a string) and returns the pointer to the destination character array. This function needs to copy at most n characters, character by character, from the source character array to the end of the destination character array. If a null character is encountered before n characters have been encountered, copying must stop. You may NOT use any functions found in <string.h> to solve this problem! Note: you MUST use pointer arithmetic in this function only.
2.(10 pts) Recall Binary Search:
Input: a list of n sorted integer values and a target value
Output: True if target value exists in list and location of target value, false otherwise
Set left to 1 and right to n
Set found to false
Set targetindex to -1
While found is false and left is less than or equal to right
Set mid to midpoint between left and right
If target = item at mid then set found to true and set targetindex to mid
If target < item then set right to mid – 1
If target > item then set to left to mid + 1
Return the targetindex
Write a C function called binary_search().
3.(20 pts) Write a function called bubble_sort() that accepts an array of pointers to strings and the number of strings as arguments, and returns nothing. The function sorts the strings according to the following algorithm:
1.set the marker U for the unsorted section at the end of the list (U is an integer index value)
2.while the unsorted section has more than one element do steps 3 through 7
3.set the current element marker C at the second element of the list (C is an integer index value)
4. while C has not passed U do steps 5 and 6
5. if the item at position C is less than the item to its left then
exchange these two items
6. move C to the right one position
7. move U left one position
Your implementation for this function may NOT use strcpy(). You may only exchange or swap pointers, but NOT actually make copies of the strings!
4.(15 pts) Write a recursive function called is_palindrome() that accepts a pointer to a string and its length, and recursively determines if the string is a palindrome. The function must return 1 for a palindrome, 0 otherwise. A palindrome is a sequence of symbols that may be interpreted the same forward and backward. For example, “race car”. Note: whitespace should be ignored in your solution.
5.(20 pts) Write a recursive function called sum_primes() that accepts an unsigned integer, n, as an argument, and returns the sum of all primes from 2 to n. You must use recursion to solve this problem!
6.(25 pts) Write a function called maximum_occurences() that accepts a pointer to a string (consisting of alphanumeric and whitespace characters only), a pointer to an array of struct occurrences, a pointer to an integer, and a pointer to a character as arguments. The structure is defined as follows:
typedef struct occurrences
The function determines the frequency of each character found in the array. The frequency is defined as: number of one character symbol / total number of characters. The function should use the second array argument (of struct occurrences) to keep track of the frequency of each character. Also, it must return, through the pointers, the maximum number of occurrences of any one character and the corresponding character for which the maximum represents. Thus, for a string such as “test string”, ‘t’ occurs 3 times, which is the maximum occurrences for any one character in the string.
7.(BONUS – 20 pts) Write a function called max_consecutive_integers() that accepts a two-dimensional array of signed integers, the number of rows, the number of columns as input parameters, and two pointers as output parameters (one of these pointers is actually a pointer to a pointer, i.e. two stars!). The function finds the maximum consecutive sequence of one integer. The first pointer stores the address the start of the maximum consecutive sequence of the same integer. The second indirectly stores the number the same consecutive integers in a row. These sequences may wrap from one row to the next. For example ([$xxxx] denotes address value):
The function should store the address of row 0, column 3 ($1012) via the first pointer, and 5 (2, 2, 2, 2, 2) indirectly via the second pointer.
IV. Submitting Assignments:
Your project must contain one header file (a .h file), two C source files (which must be .c files), and project workspace.
Your project must build properly. The most points an assignment can receive if it does not build properly is 65 out of 100.
V. Grading Guidelines:
This assignment is worth 100 points. Your assignment will be evaluated based on a successful compilation and adherence to the program requirements. We will grade according to the following criteria:
95 pts for adherence to the instructions stated above (see the individual points above)
5 pts for appropriate top-down design of functions and good style