Assignment 3

Assignment 3 Solution

  1. Problem 1 (sort.c)
  2. Problem 2 (resize.c)

- Problem 1

sort.c

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

// Sort an array A using insertion sort.
// Notice it is passed by reference. 
void sort(int *A, int array_size) {
	int cur_elem, insert_index;
	for (int cur_index = 1; cur_index < array_size; cur_index++) {
		cur_elem = *(A+cur_index);
		insert_index = cur_index - 1;
		// For each element in A, search for where it belong in the subarray preceeding it's current location
		while (insert_index >= 0 && cur_elem < *(A+insert_index)) {
			*(A+insert_index+1) = *(A+insert_index);
			insert_index -= 1;
		}
		*(A+insert_index+1) = cur_elem;
	}
}

int main() {
	// Allows us to generate random numbers
	srand(time(NULL));

	// Read a user input integer and store it in n
	int n;
	printf("Enter an integer n: ");
	scanf("%d", &n);

	// An array named array. Change this to a dynamic array using malloc.
	int *array = malloc(n * sizeof(int));

	// Assign each element in the array a random number between 0 and 31,999
	for (int i=0; i<n; i++) {
		*(array+i) = rand() % 32000; // assigns random numbers
	}

	// Prints out the elements of the unsorted array
	printf("The unsorted array is: ");
	for (int x = 0; x < n; x++) {
		printf("%d ", *(array+x));
	}
	printf("\n");
	
	// Calls the sort function to sort the array
	sort(array, n);
	
	// Print out the elements of the now (supposedly) sorted array.
	printf("The sorted array is: ");
	for (int x = 0; x < n; x++) {
		printf("%d ", *(array+x));
	}
	printf("\n");

	free(array); //Making sure to free what I malloc!

	return 0;
}

- Problem 2

resize.c

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

int main() {
	// Allows you to generate random number
	srand(time(NULL));

	// Allows user to specify the original array size, stored in variable n1.
	printf("Enter original array size: ");
	int n1 = 0;
	scanf("%d", &n1);

	// Create a new array of n1 ints
	int *a1 = malloc(n1 * sizeof(int));

	for(int i = 0; i < n1; i++) {
		// Set each value in a1 to 100
		*(a1+i) = 100;
		
		// Print each element out (to make sure things look right)
		printf("%d ", *(a1+i));
	}

	// User specifies the new array size, stored in variable n2.
	printf("\nEnter new array size: ");
	int n2 = 0;
	scanf("%d", &n2);

	// Dynamically change the array to size n2
	a1 = realloc(a1, n2* sizeof(int)); // Resize the array

	// If the new array is a larger size, set all new members to 0. 
	// Reason: dont want to use uninitialized variables.

	if (n2 > n1) {
		for(int j = n1; j<n2; j++) {
			*(a1+j)=0;
		}
	}

	for (int i = 0; i < n2; i++) {
		//Print each element out (to make sure things look right)
		printf("%d ", *(a1+i));
	}
	printf("\n");
	
	// Done with array now, done with program :D
	free(a1);

	return 0;
}